/* GROW – Projektbibliothek: Schnellübersicht, Parallax-Kapitel, Zwischenbilder */

/* =========================================================
   Schnellübersicht – Bildkacheln, die sich zur Maus neigen
   ========================================================= */
.quick-label { margin-top: 48px; }
.qo-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 34px 26px; margin-top: 22px; }
.qo-tile { --rx: 0deg; --ry: 0deg; --mx: 0; --my: 0; position: relative; }
.qo-media {
  position: relative;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  border-radius: 3px;
  background: var(--paper-2);
  transform: perspective(900px) rotateX(var(--rx)) rotateY(var(--ry));
  transition: transform 0.5s var(--ease);
}
.qo-tile:hover .qo-media { transition: transform 0.15s linear; }
.qo-img { position: absolute; object-fit: cover; transition: transform 0.7s var(--ease), opacity 0.45s; }
.qo-img-0 { inset: -5%; width: 110%; height: 110%; transform: translate(calc(var(--mx) * -18px), calc(var(--my) * -18px)); }
.qo-img-1, .qo-img-2 { width: 34%; aspect-ratio: 1; bottom: 10%; opacity: 0; border: 4px solid var(--paper); box-shadow: 0 14px 26px -14px rgba(20, 40, 33, 0.5); }
.qo-img-1 { right: 24%; transform: translate(26px, 36px) rotate(-6deg); }
.qo-img-2 { right: 7%; transform: translate(36px, 46px) rotate(7deg); }
.qo-tile:hover .qo-img-0 { transform: translate(calc(var(--mx) * -18px), calc(var(--my) * -18px)) scale(1.06); }
.qo-tile:hover .qo-img-1 { opacity: 1; transform: translate(calc(var(--mx) * 16px), calc(var(--my) * 16px)) rotate(-6deg); }
.qo-tile:hover .qo-img-2 { opacity: 1; transform: translate(calc(var(--mx) * 26px), calc(var(--my) * 26px)) rotate(7deg); transition-delay: 0.05s; }
.qo-info { display: grid; grid-template-columns: auto 1fr auto; align-items: baseline; gap: 12px; padding: 14px 0 0; margin-top: 14px; border-top: 1px solid var(--line-strong); }
.qo-no { font-size: 12px; font-weight: 700; letter-spacing: 0.16em; color: var(--forest-2); }
.qo-name { font-size: clamp(22px, 2vw, 28px); color: var(--forest); transition: transform 0.4s var(--ease); }
.qo-tile:hover .qo-name { transform: translateX(6px); }
.qo-n { font-size: 13px; color: var(--ink-soft); white-space: nowrap; }
.qo-jump { position: absolute; inset: 0; z-index: 3; }
.qo-jump:focus-visible { outline: 2px solid var(--forest); outline-offset: 6px; }
.qo-more { position: absolute; top: 12px; right: 12px; z-index: 4; font-size: 12px; font-weight: 500; text-decoration: none; color: var(--forest); background: rgba(247, 244, 234, 0.94); padding: 5px 11px; border-radius: 999px; opacity: 0; transform: translateY(-6px); transition: opacity 0.3s, transform 0.3s; }
.qo-tile:hover .qo-more, .qo-more:focus-visible { opacity: 1; transform: none; }
@media (hover: none) { .qo-more { opacity: 1; transform: none; } }
@media (max-width: 900px) { .qo-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) {
  .qo-grid { grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: 78%; overflow-x: auto; scroll-snap-type: x mandatory; margin: 18px -16px 0; padding: 0 16px 10px; gap: 16px; }
  .qo-tile { scroll-snap-align: start; }
}

/* =========================================================
   Leitsatz – färbt sich Wort für Wort ein, Schriftbänder laufen gegeneinander,
   GROW-Linien zeichnen sich beim Scrollen
   ========================================================= */
.statement { position: relative; height: 240vh; margin-top: 0; background: var(--paper); }
.stm-sticky { position: sticky; top: 0; height: 100vh; height: 100dvh; overflow: hidden; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: 1fr auto 1fr; align-items: center; padding-top: var(--header-h); }
.stm-lines { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
.stm-lines path { fill: none; stroke: var(--forest); stroke-width: 1.1; opacity: 0.22; stroke-dasharray: 1; stroke-dashoffset: 1; vector-effect: non-scaling-stroke; }
.stm-row { position: relative; white-space: nowrap; font-family: var(--font-playful); line-height: 1; will-change: transform; }
.stm-row span { display: inline-block; padding-right: 0.3em; }
.stm-row i { font-style: normal; font-size: 0.4em; vertical-align: middle; color: #c9b24f; }
.stm-r1 { align-self: end; font-size: clamp(54px, 9vw, 150px); color: var(--forest); transform: translateX(-8%); }
.stm-r2 { align-self: start; font-size: clamp(40px, 6.5vw, 108px); color: transparent; -webkit-text-stroke: 1px rgba(30, 59, 49, 0.45); transform: translateX(-38%); }
.stm-r2 i { -webkit-text-stroke: 0; color: rgba(30, 59, 49, 0.35); }
.stm-text { position: relative; z-index: 1; max-width: 22ch; margin: 4vh auto; padding: 0 20px; text-align: center; font-family: var(--font-playful); font-size: clamp(30px, 4.4vw, 64px); line-height: 1.1; }
.stm-text .w { --k: 0; display: inline-block; color: rgba(30, 59, 49, calc(0.16 + var(--k) * 0.84)); transform: translateY(calc((1 - var(--k)) * 0.12em)); }
.stm-text .w.acc { font-style: italic; color: color-mix(in srgb, #5f9a7e calc(var(--k) * 100%), rgba(30, 59, 49, 0.16)); }
.is-static .statement { height: auto; }
.is-static .stm-sticky { position: relative; height: auto; padding: 60px 0; }
.is-static .stm-text .w { --k: 1; }
.is-static .stm-lines path { stroke-dashoffset: 0; }

/* =========================================================
   Kapitel – gemeinsamer Rahmen
   ========================================================= */
.chapters { --card-w: 250px; margin-top: 40px; position: relative; }
.chapter { position: relative; height: calc(150vh + var(--n) * 26vh); --ch-bg: var(--paper); --ch-cover: #e9dcae; --ch-cover-ink: var(--forest); background: var(--ch-bg); }
.ch-sticky {
  position: sticky; top: 0;
  height: 100vh; height: 100dvh;
  overflow: hidden;
  display: grid;
  grid-template-columns: minmax(280px, 0.8fr) 1.2fr;
  align-items: center;
  padding: var(--header-h) clamp(16px, 5vw, 72px) 0;
}
.ch-branding { --ch-bg: #f6f1e1; --ch-cover: #e7d79c; }
.ch-packaging { --ch-bg: #f5ede4; --ch-cover: #cfae88; }
.ch-textiles { --ch-bg: #eef3ee; }
.ch-material { --ch-bg: #10231c; }
.ch-gifting { --ch-bg: #f7f2e2; --ch-cover: #e4c9a6; }
.ch-creative { --ch-bg: #0f1e19; }
.ch-material, .ch-creative { color: #f3ecd4; }
.ch-material .ch-title, .ch-creative .ch-title, .ch-material .ch-link, .ch-creative .ch-link { color: #f3ecd4; }
.ch-material .ch-intro, .ch-creative .ch-intro, .ch-material .ch-now, .ch-creative .ch-now { color: rgba(243, 236, 212, 0.78); }
.ch-material .eyebrow, .ch-creative .eyebrow { color: #e8d48a; }
.ch-material .ch-now, .ch-creative .ch-now { border-color: rgba(243, 236, 212, 0.3); }

.ch-bg { position: absolute; inset: 0; pointer-events: none; overflow: hidden; }
.ch-num-bg { position: absolute; right: 2vw; bottom: -6vh; font-family: var(--font-playful); font-size: 46vh; line-height: 1; color: transparent; -webkit-text-stroke: 1px rgba(30, 59, 49, 0.14); will-change: transform; }
.ch-rings { position: absolute; left: 66%; top: 54%; width: min(86vh, 900px); height: min(86vh, 900px); color: rgba(30, 59, 49, 0.1); will-change: transform; transform: translate(-50%, -50%); }
.ch-rings svg, .tunnel-rings svg { width: 100%; height: 100%; }

.ch-text { position: relative; z-index: 2; max-width: 440px; }
.ch-title { font-size: clamp(40px, 5.4vw, 76px); margin-bottom: 18px; }
.ch-intro { color: var(--ink-soft); font-size: 17px; margin: 0 0 28px; }
.ch-now { display: grid; gap: 4px; padding: 14px 0; border-top: 1px solid var(--line-strong); border-bottom: 1px solid var(--line-strong); margin-bottom: 22px; min-height: 92px; }
.ch-count { font-size: 12px; font-weight: 700; letter-spacing: 0.14em; }
.ch-now-title { font-family: var(--font-playful); font-size: 22px; line-height: 1.2; }
.ch-link { font-weight: 500; text-decoration: none; color: var(--forest); border-bottom: 1px solid currentColor; padding-bottom: 2px; }
.ch-scroll { display: block; margin-top: 28px; font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-soft); transition: opacity 0.4s; }
.chapter.is-open .ch-scroll { opacity: 0; }

/* =========================================================
   ring – Cover öffnet sich, Projekte als 3D-Ring
   ========================================================= */
.ch-scene { position: relative; height: 100%; perspective: 1500px; perspective-origin: 50% 40%; z-index: 1; }
.ch-obj { position: absolute; left: 50%; top: 50%; width: var(--card-w); height: calc(var(--card-w) * 1.32); margin: calc(var(--card-w) * -0.66) 0 0 calc(var(--card-w) * -0.5); transform-style: preserve-3d; transform: rotateX(-7deg); }
.ch-ring { position: absolute; inset: 0; transform-style: preserve-3d; }
.ch-card { position: absolute; inset: 0; display: flex; flex-direction: column; gap: 8px; padding: 0; border: 0; background: none; cursor: pointer; text-align: left; color: inherit; backface-visibility: hidden; will-change: transform, opacity; }
.ch-card-img { display: block; aspect-ratio: 1; width: 100%; background: var(--mint); box-shadow: 0 30px 50px -30px rgba(20, 40, 33, 0.55); overflow: hidden; }
.ch-card-img img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s var(--ease); }
.ch-card:hover .ch-card-img img, .ch-card.is-front .ch-card-img img { transform: scale(1.04); }
.ch-card-meta, .ch-card-title { transition: opacity 0.35s; }
.ch-card:not(.is-front) .ch-card-meta, .ch-card:not(.is-front) .ch-card-title { opacity: 0; }
.ch-card-meta { font-size: 11px; font-weight: 700; letter-spacing: 0.16em; color: var(--forest-2); margin-top: 6px; }
.ch-card-title { font-family: var(--font-playful); font-size: 19px; line-height: 1.2; color: var(--forest); }
.ch-box { position: absolute; inset: -14px; bottom: calc(var(--card-w) * 0.32 - 14px); transform: translateZ(-40px); background: rgba(30, 59, 49, 0.08); border: 1px solid var(--line-strong); }
.ch-cover { position: absolute; inset: -14px; bottom: calc(var(--card-w) * 0.32 - 14px); transform-style: preserve-3d; transform-origin: 0 50%; z-index: 3; will-change: transform; transform: translateZ(24px); }
.cover-face { position: absolute; inset: 0; backface-visibility: hidden; }
.cover-front { display: grid; grid-template-rows: auto 1fr auto; padding: 22px; background: var(--ch-cover); color: var(--ch-cover-ink); box-shadow: inset 0 0 0 1px rgba(30, 59, 49, 0.25), 0 30px 60px -30px rgba(20, 40, 33, 0.5); }
.cover-front::after { content: ""; position: absolute; inset: 0; pointer-events: none; mix-blend-mode: multiply; opacity: 0.35;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/><feColorMatrix values='0 0 0 0 0.4  0 0 0 0 0.35  0 0 0 0 0.3  0 0 0 0.6 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>"); }
.cover-back { transform: rotateY(180deg); background: var(--ch-cover); filter: brightness(0.86); }
.cover-no { font-size: 12px; font-weight: 700; letter-spacing: 0.18em; }
.cover-mark { align-self: center; justify-self: center; width: 46%; aspect-ratio: 1; }
.cover-mark svg { width: 100%; height: 100%; }
.cover-title { font-family: var(--font-playful); font-size: calc(var(--card-w) * 0.13); line-height: 1.05; }
.open-lid .ch-cover { transform-origin: 50% 0; }
.open-doors .door { overflow: hidden; }
.open-doors .door-l { right: 50%; transform-origin: 0 50%; }
.open-doors .door-r { left: 50%; transform-origin: 100% 50%; }
.open-doors .door .cover-face { width: 200%; }
.open-doors .door-r .cover-face { left: -100%; }
.ch-packaging .cover-front::before { content: ""; position: absolute; inset: 12px; border: 1px dashed rgba(30, 59, 49, 0.45); pointer-events: none; }
.ch-gifting .cover-front::before { content: ""; position: absolute; left: 0; right: 0; top: 58%; height: 18px; background: rgba(30, 59, 49, 0.18); }

/* =========================================================
   track – bildschirmfüllende horizontale Galerie
   ========================================================= */
.kind-track { height: 400vh; }
.track-sticky { display: block; padding: 0; }
.track-text { position: absolute; left: clamp(16px, 5vw, 72px); top: calc(var(--header-h) + 8vh); z-index: 3; max-width: 380px; will-change: opacity, transform; }
.track { position: absolute; inset: 0; perspective: 1400px; }
.track-strip { position: absolute; left: 0; top: 0; height: 100%; display: flex; align-items: center; gap: 4vw; padding: 0 12vw 0 max(46vw, 470px); transform-style: preserve-3d; will-change: transform; }
.tr-item { position: relative; flex: none; height: 62vh; aspect-ratio: 3 / 4; padding: 0; border: 0; background: none; cursor: pointer; text-align: left; color: inherit; transform-style: preserve-3d; will-change: transform; }
.tr-1 { height: 50vh; aspect-ratio: 4 / 3; margin-top: -14vh; }
.tr-2 { height: 40vh; aspect-ratio: 1; margin-top: 22vh; }
.tr-3 { height: 72vh; aspect-ratio: 4 / 5; }
.tr-img { display: block; width: 100%; height: 100%; overflow: hidden; background: var(--mint); box-shadow: 0 40px 70px -40px rgba(20, 40, 33, 0.6); }
.tr-img img { width: 100%; height: 100%; object-fit: cover; will-change: transform; }
.tr-cap { position: absolute; left: 0; top: calc(100% + 12px); width: max(100%, 260px); font-family: var(--font-playful); font-size: 18px; line-height: 1.25; color: var(--forest); }
.tr-year { display: block; font-family: var(--font-neutral); font-size: 11px; font-weight: 700; letter-spacing: 0.16em; color: var(--forest-2); margin-bottom: 2px; }
.track-progress { position: absolute; left: clamp(16px, 5vw, 72px); right: clamp(16px, 5vw, 72px); bottom: 5vh; height: 1px; background: var(--line-strong); z-index: 3; }
.track-progress span { position: absolute; inset: 0; background: var(--forest); transform-origin: 0 50%; transform: scaleX(0); }

/* =========================================================
   tunnel – Flug in die Tiefe
   ========================================================= */
.kind-tunnel { height: calc(120vh + var(--n) * 70vh); }
.tunnel-sticky { display: block; padding: 0; background: radial-gradient(ellipse at 50% 55%, #24453a 0%, #10231c 70%); }
.tunnel-rings { position: absolute; left: 50%; top: 55%; width: 90vh; height: 90vh; color: rgba(232, 212, 138, 0.18); transform: translate(-50%, -50%); will-change: transform, opacity; }
.tunnel-text { position: absolute; left: clamp(16px, 5vw, 72px); bottom: 7vh; z-index: 3; max-width: 420px; }
.tunnel-text::before { content: ""; position: absolute; inset: -60px -90px -40px -60px; z-index: -1; background: radial-gradient(ellipse at 35% 60%, rgba(16, 35, 28, 0.92), rgba(16, 35, 28, 0) 70%); pointer-events: none; }
.tunnel { position: absolute; inset: 0; perspective: 900px; perspective-origin: 50% 50%; }
.tunnel-scene { position: absolute; left: 50%; top: 52%; width: 0; height: 0; transform-style: preserve-3d; }
.tn-item { position: absolute; width: min(36vw, 520px); aspect-ratio: 4 / 3; margin: calc(min(36vw, 520px) * -0.375) 0 0 calc(min(36vw, 520px) * -0.5); padding: 0; border: 0; background: none; cursor: pointer; will-change: transform, opacity; }
.tn-img { display: block; width: 100%; height: 100%; overflow: hidden; box-shadow: 0 50px 90px -40px rgba(0, 0, 0, 0.7); }
.tn-img img { width: 100%; height: 100%; object-fit: cover; }
.tn-cap { position: absolute; left: 0; top: calc(100% + 10px); font-family: var(--font-playful); font-size: 20px; color: #f3ecd4; text-align: left; }

/* =========================================================
   deck – Abzüge werden weggeblättert, Bild füllt den Hintergrund
   ========================================================= */
.kind-deck { height: calc(110vh + var(--n) * 80vh); }
.deck-sticky { background: #0f1e19; }
.deck-bg { position: absolute; inset: 0; overflow: hidden; }
.deck-bg img { position: absolute; inset: -5%; width: 110%; height: 110%; object-fit: cover; filter: blur(22px) brightness(0.48) saturate(0.85); opacity: 0; transition: opacity 0.9s var(--ease); }
.deck-text { z-index: 3; }
.deck { position: relative; z-index: 2; height: 100%; perspective: 1400px; display: grid; place-items: center; }
.dk-card { grid-area: 1 / 1; position: relative; width: min(44vw, 560px); aspect-ratio: 4 / 5; padding: 14px 14px 64px; border: 0; background: #f7f4ea; cursor: pointer; box-shadow: 0 50px 80px -40px rgba(0, 0, 0, 0.75); transform-origin: 50% 100%; will-change: transform; text-align: left; }
.dk-img { display: block; width: 100%; height: 100%; overflow: hidden; }
.dk-img img { width: 100%; height: 100%; object-fit: cover; }
.dk-cap { position: absolute; left: 16px; right: 16px; bottom: 14px; font-family: var(--font-playful); font-size: 19px; line-height: 1.2; color: var(--forest); }
.dk-cap span { display: block; font-family: var(--font-neutral); font-size: 11px; font-weight: 700; letter-spacing: 0.16em; color: var(--forest-2); }

/* =========================================================
   box – Faltschachtel (Verpackung): dreht sich, faltet sich zur Stanzform auf
   ========================================================= */
.kind-box { height: calc(170vh + var(--n) * 34vh); --bx: 300px; }
.bx-scene { position: relative; height: 100%; perspective: 1700px; perspective-origin: 50% 40%; z-index: 1; }
.bx-world { position: absolute; left: 50%; top: 52%; width: 0; height: 0; transform-style: preserve-3d; }
.bx-cube { position: absolute; left: 0; top: 0; width: var(--bx); height: var(--bx); margin: calc(var(--bx) * -0.5) 0 0 calc(var(--bx) * -0.5); transform-style: preserve-3d; will-change: transform; }
.bx-face { position: absolute; left: 0; top: 0; width: var(--bx); height: var(--bx); transform-style: preserve-3d; cursor: pointer; outline: none; }
.bx-f1, .bx-f2 { left: 100%; transform-origin: 0 50%; }
.bx-f3 { left: -100%; transform-origin: 100% 50%; }
.bx-top { top: -100%; transform-origin: 50% 100%; cursor: default; }
.bx-bottom { top: 100%; transform-origin: 50% 0; cursor: default; }
.bx-out, .bx-in { position: absolute; inset: 0; backface-visibility: hidden; }
.bx-out { overflow: hidden; background: var(--ch-cover); box-shadow: inset 0 0 0 1px rgba(30, 59, 49, 0.28); transition: box-shadow 0.4s; }
.bx-out img { display: block; width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s var(--ease); }
.bx-face:hover > .bx-out img, .bx-face:focus-visible > .bx-out img { transform: scale(1.05); }
.bx-face:focus-visible > .bx-out { box-shadow: inset 0 0 0 3px var(--forest); }
.bx-in { transform: rotateY(180deg); background: #b88f66; box-shadow: inset 0 0 0 1px rgba(30, 59, 49, 0.25); }
.bx-label { position: absolute; left: 0; right: 0; bottom: 0; padding: 9px 12px; background: rgba(247, 244, 234, 0.93); font-family: var(--font-playful); font-size: 14px; line-height: 1.2; color: var(--forest); text-align: left; }
.bx-lid { display: grid; place-items: center; align-content: center; gap: 10px; color: var(--forest); }
.bx-lid::before, .bx-base::before { content: ""; position: absolute; inset: 0; mix-blend-mode: multiply; opacity: 0.35; pointer-events: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/><feColorMatrix values='0 0 0 0 0.4  0 0 0 0 0.35  0 0 0 0 0.3  0 0 0 0.6 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>"); }
.bx-mark { width: 38%; aspect-ratio: 1; }
.bx-mark svg { width: 100%; height: 100%; }
.bx-cat { font-family: var(--font-playful); font-size: calc(var(--bx) * 0.09); }
.bx-base { display: grid; place-items: center; font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: rgba(30, 59, 49, 0.6); }
/* Klebelasche und Einstecklasche – sichtbar, sobald die Schachtel flach liegt */
.bx-glue { position: absolute; left: 100%; top: 9%; width: calc(var(--bx) * 0.16); height: 82%; background: #c9a57d; clip-path: polygon(0 0, 100% 14%, 100% 86%, 0 100%); transform-origin: 0 50%; backface-visibility: visible; }
.bx-tuck { position: absolute; left: 4%; bottom: 100%; width: 92%; height: calc(var(--bx) * 0.2); background: #d9bd97; clip-path: polygon(0 100%, 8% 18%, 22% 0, 78% 0, 92% 18%, 100% 100%); transform-origin: 50% 100%; }
.is-flat .bx-out { box-shadow: inset 0 0 0 1px rgba(30, 59, 49, 0.12); outline: 1.5px dashed rgba(30, 59, 49, 0.55); outline-offset: -1px; }
.bx-label { transition: opacity 0.4s; }
.bx-shadow { position: absolute; left: 50%; top: calc(52% + var(--bx) * 0.78); width: calc(var(--bx) * 1.5); height: calc(var(--bx) * 0.24); border-radius: 50%; background: radial-gradient(closest-side, rgba(60, 45, 30, 0.32), rgba(60, 45, 30, 0)); transform: translate(-50%, -50%); }

/* =========================================================
   gift – Geschenk öffnet sich, Projekte steigen in die Tiefe auf
   ========================================================= */
.kind-gift { height: calc(150vh + var(--n) * 46vh); }
.ch-gifting { --ribbon: #e3bf4f; --ribbon-d: #c9a43a; --wrap: #8fbfa6; }
.gf-scene { position: relative; height: 100%; perspective: 1400px; perspective-origin: 50% 46%; z-index: 1; }
.gf-world { position: absolute; left: 50%; top: 80%; width: 0; height: 0; transform-style: preserve-3d; --bw: 300px; --bh: 190px; --bd: 240px; --gi: 210px; will-change: transform; }
.gf-items, .gf-box, .gf-lid { position: absolute; left: 0; top: 0; transform-style: preserve-3d; }
/* Geschenkpapier: Mint mit kleinen Punkten und feinen Linien, darüber das gelbe Band */
.gf-faces, .gf-lid-faces { position: absolute; left: 0; top: 0; transform-style: preserve-3d; }
.gf-f { position: absolute; left: 0; top: 0; }
.gf-wrap, .gf-plain { background-color: var(--wrap);
  background-image:
    linear-gradient(90deg, transparent calc(50% - 13px), var(--ribbon-d) calc(50% - 13px), var(--ribbon) calc(50% - 10px), var(--ribbon) calc(50% + 10px), var(--ribbon-d) calc(50% + 13px), transparent calc(50% + 13px)),
    radial-gradient(circle, rgba(255, 250, 230, 0.75) 0 2.2px, transparent 2.8px),
    repeating-linear-gradient(115deg, transparent 0 15px, rgba(30, 59, 49, 0.07) 15px 16px);
  background-size: 100% 100%, 22px 22px, auto;
  box-shadow: inset 0 0 0 1px rgba(30, 59, 49, 0.16); }
.gf-plain { background-image: radial-gradient(circle, rgba(255, 250, 230, 0.75) 0 2.2px, transparent 2.8px); background-size: 22px 22px; filter: brightness(0.8); }
.gf-side { filter: brightness(0.9); }
.gf-lidtop { background-color: #9ccab2;
  background-image:
    linear-gradient(90deg, transparent calc(50% - 13px), var(--ribbon-d) calc(50% - 13px), var(--ribbon) calc(50% - 10px), var(--ribbon) calc(50% + 10px), var(--ribbon-d) calc(50% + 13px), transparent calc(50% + 13px)),
    linear-gradient(0deg, transparent calc(50% - 13px), var(--ribbon-d) calc(50% - 13px), var(--ribbon) calc(50% - 10px), var(--ribbon) calc(50% + 10px), var(--ribbon-d) calc(50% + 13px), transparent calc(50% + 13px)),
    radial-gradient(circle, rgba(255, 250, 230, 0.75) 0 2.2px, transparent 2.8px);
  background-size: 100% 100%, 100% 100%, 22px 22px; }
.gf-lidside { filter: brightness(1.04); }
.gf-in { background: #e9dcc0; box-shadow: inset 0 -30px 40px -20px rgba(80, 60, 40, 0.25); }
.gf-in-side { background: #e1d2b3; }
.gf-tissue { background: repeating-linear-gradient(35deg, #f7efdc 0 14px, #efe3c8 14px 16px, #f4ead4 16px 30px); }
.gf-rim { background: #6f9f87; }
.gf-lid { will-change: transform; }
.gf-bow { position: absolute; left: 0; top: 0; overflow: visible; }
/* Anhänger am Deckel */
.gf-tag { position: absolute; left: 0; top: 0; transform-origin: 0 0; padding: 8px 6px 6px 16px; background: #fbf6e8; clip-path: polygon(14% 0, 100% 0, 100% 100%, 14% 100%, 0 50%); font-family: var(--font-playful); font-size: 13px; color: var(--forest); text-align: center; box-shadow: inset 0 0 0 1px rgba(30, 59, 49, 0.25); }
.gf-item { position: absolute; left: 0; top: 0; width: var(--gi); margin: calc(var(--gi) * -0.62) 0 0 calc(var(--gi) / -2); padding: 9px 9px 0; border: 0; background: #f7f4ea; cursor: pointer; text-align: left; visibility: hidden; box-shadow: 0 30px 50px -28px rgba(20, 40, 33, 0.55); will-change: transform, opacity; }
.gf-img { display: block; aspect-ratio: 1; overflow: hidden; background: var(--mint); }
.gf-img img { width: 100%; height: 100%; object-fit: cover; }
.gf-cap { display: block; padding: 8px 2px 11px; font-family: var(--font-playful); font-size: 15px; line-height: 1.2; color: var(--forest); }

.st-list { display: none; }

/* =========================================================
   Einstieg: Herauszoomen aus einem Jahresring
   ========================================================= */
.zoom { position: relative; height: 260vh; margin-top: 50px; background: var(--paper); }
.zm-sticky { position: sticky; top: 0; height: 100vh; height: 100dvh; overflow: hidden; display: grid; place-items: center; }
.zm-disc { position: absolute; left: 50%; top: 50%; width: min(86vmin, 820px); height: min(86vmin, 820px); margin: calc(min(86vmin, 820px) / -2) 0 0 calc(min(86vmin, 820px) / -2); overflow: visible; will-change: transform; filter: drop-shadow(0 30px 50px rgba(60, 40, 20, 0.25)); }
.zm-rings .zr { stroke: rgba(122, 86, 52, 0.38); stroke-width: 2.2; }
.zm-rings .zr-dark { stroke: rgba(98, 66, 38, 0.6); stroke-width: 4; }
.zm-years text { font-family: var(--font-neutral); font-size: 15px; font-weight: 700; letter-spacing: 0.08em; fill: #5c4128; }
.zm-text { position: absolute; left: clamp(16px, 5vw, 72px); top: 50%; transform: translateY(-50%); max-width: 420px; opacity: 0; }
.zm-text h2 { font-size: clamp(34px, 4.4vw, 62px); line-height: 1.06; color: var(--forest); margin: 8px 0 14px; }
.zm-text p:last-child { color: var(--ink-soft); font-size: 18px; margin: 0; }
.zm-hint { position: absolute; bottom: 6vh; left: 0; right: 0; text-align: center; margin: 0; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--forest-2); }
@media (max-width: 700px) { .zm-text { left: 16px; right: 16px; top: auto; bottom: 9vh; transform: none; max-width: none; } }

/* =========================================================
   Übergang: durch einen Jahresring ins nächste Kapitel eintauchen
   ========================================================= */
.dive { position: relative; height: 170vh; }
.dv-sticky { position: sticky; top: 0; height: 100vh; height: 100dvh; overflow: hidden; background: var(--from); }
.dv-window { position: absolute; inset: 0; background: var(--to); clip-path: circle(40px at 50% 50%); will-change: clip-path; }
.dv-inner { position: absolute; inset: 0; display: grid; place-content: center; text-align: center; will-change: transform; }
.dv-num { margin: 0; font-family: var(--font-playful); font-size: clamp(90px, 18vw, 260px); line-height: 0.9; color: transparent; -webkit-text-stroke: 1.5px rgba(30, 59, 49, 0.35); }
.dv-name { margin: 6px 0 0; font-family: var(--font-playful); font-size: clamp(34px, 5vw, 72px); color: var(--forest); position: relative; z-index: 2; }
.dv-window.is-dark .dv-num { -webkit-text-stroke-color: rgba(243, 236, 212, 0.35); }
.dv-window.is-dark .dv-name { color: #f3ecd4; }
.dv-pics { position: absolute; left: 50%; top: 50%; width: 0; height: 0; }
.dv-pic { position: absolute; width: min(24vmin, 230px); aspect-ratio: 4 / 5; margin: calc(min(24vmin, 230px) * -0.625) 0 0 calc(min(24vmin, 230px) / -2); object-fit: cover; border: 6px solid #f7f4ea; box-shadow: 0 24px 40px -20px rgba(0, 0, 0, 0.45); }
.dv-ring { position: absolute; left: 50%; top: 50%; width: 88px; height: 88px; pointer-events: none; overflow: visible; }

/* =========================================================
   Creative Direction: Projekte im Kamerasucher
   ========================================================= */
.kind-viewfinder { height: calc(110vh + var(--n) * 75vh); --ch-bg: #0f1e19; }
.vf-sticky { grid-template-columns: minmax(260px, 0.6fr) 1.4fr; }
.vf { position: relative; aspect-ratio: 3 / 2; width: 100%; max-height: 74vh; justify-self: center; overflow: hidden; border-radius: 6px; background: #050a08; box-shadow: 0 0 0 10px #1c2a24, 0 0 0 12px #2c3c35, 0 40px 80px -30px rgba(0, 0, 0, 0.8); }
.vf-strip { position: absolute; inset: 0; display: flex; will-change: transform, filter; }
.vf-frame { flex: none; width: 100%; height: 100%; padding: 0; border: 0; background: #000; cursor: pointer; }
.vf-frame img { width: 100%; height: 100%; object-fit: cover; display: block; }
.vf-ui { position: absolute; inset: 0; pointer-events: none; font-family: var(--font-neutral); font-size: 12px; font-weight: 700; letter-spacing: 0.14em; color: rgba(255, 255, 255, 0.9); text-shadow: 0 1px 3px rgba(0, 0, 0, 0.6); }
.vf-c { position: absolute; width: 34px; height: 34px; border: 2px solid rgba(255, 255, 255, 0.85); }
.vf-c1 { left: 5%; top: 7%; border-right: 0; border-bottom: 0; }
.vf-c2 { right: 5%; top: 7%; border-left: 0; border-bottom: 0; }
.vf-c3 { left: 5%; bottom: 7%; border-right: 0; border-top: 0; }
.vf-c4 { right: 5%; bottom: 7%; border-left: 0; border-top: 0; }
.vf-focus { position: absolute; left: 50%; top: 50%; width: 15%; aspect-ratio: 1; transform: translate(-50%, -50%) scale(1.25); border: 2px solid rgba(255, 255, 255, 0.7); transition: transform 0.35s var(--ease), border-color 0.3s; }
.vf.is-focused .vf-focus { transform: translate(-50%, -50%) scale(1); border-color: #b9e08a; }
.vf-rec { position: absolute; left: 8%; top: 9%; display: flex; align-items: center; gap: 8px; }
.vf-rec i { width: 10px; height: 10px; border-radius: 50%; background: #e0564a; animation: recBlink 1.2s steps(2) infinite; }
@keyframes recBlink { 50% { opacity: 0.15; } }
.vf-info { position: absolute; right: 8%; top: 9%; }
.vf-batt { position: absolute; right: 8%; top: calc(9% + 22px); width: 26px; height: 12px; border: 1.5px solid rgba(255, 255, 255, 0.85); border-radius: 2px; background: linear-gradient(90deg, rgba(255, 255, 255, 0.85) 70%, transparent 70%) 2px 2px / calc(100% - 4px) calc(100% - 4px) no-repeat; }
.vf-scale { position: absolute; left: 50%; bottom: 9%; width: 30%; height: 10px; transform: translateX(-50%); background: repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.8) 0 1.5px, transparent 1.5px 10%); }
.vf-scale i { position: absolute; left: 0; top: -5px; width: 2px; height: 20px; background: #e3bf4f; }
.vf-count { position: absolute; left: 8%; bottom: 9%; }
.vf-flash { position: absolute; inset: 0; background: #fff; opacity: 0; pointer-events: none; }
.vf.is-shot .vf-flash { animation: shot 0.45s ease-out; }
@keyframes shot { 0% { opacity: 0.8; } 100% { opacity: 0; } }
.vf.is-shot .vf-strip { animation: shotScale 0.45s ease-out; }
@keyframes shotScale { 0% { transform-origin: 50% 50%; scale: 0.985; } 100% { scale: 1; } }
@media (max-width: 860px) { .vf-sticky { grid-template-columns: 1fr; } .vf { aspect-ratio: 4 / 5; max-height: 60vh; width: auto; height: 60vh; } .vf-ui { font-size: 10px; } .vf-info { display: none; } }
.is-static .zoom, .is-static .dive { display: none; }
.is-static .vf { aspect-ratio: auto; overflow: visible; box-shadow: none; background: none; }
.is-static .vf-strip { position: static; display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 20px; }
.is-static .vf-ui, .is-static .vf-flash { display: none; }

/* =========================================================
   Zwischenbilder – Bild öffnet sich auf volle Größe
   ========================================================= */
.interlude { position: relative; height: 230vh; background: var(--paper); }
.il-sticky { position: sticky; top: 0; height: 100vh; height: 100dvh; overflow: hidden; display: grid; place-items: center; }
.il-media { position: absolute; inset: 0; overflow: hidden; clip-path: inset(22% 30% 22% 30% round 8px); will-change: clip-path; }
.il-media img { width: 100%; height: 100%; object-fit: cover; transform: scale(1.32); will-change: transform; }
.il-shade { position: absolute; inset: 0; background: radial-gradient(ellipse at 50% 50%, rgba(15, 30, 25, 0.62), rgba(15, 30, 25, 0.38) 70%); pointer-events: none; }
.il-quote { position: relative; z-index: 2; margin: 0; max-width: 20ch; padding: 0 24px; text-align: center; font-family: var(--font-playful); font-size: clamp(32px, 5vw, 74px); line-height: 1.08; color: #f7f1e0; }
.il-quote .w { display: inline-block; opacity: 0; will-change: transform, opacity; }
.il-src { position: absolute; bottom: 7vh; left: 0; right: 0; z-index: 2; text-align: center; margin: 0; font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: rgba(247, 241, 224, 0.8); opacity: 0; }

/* =========================================================
   Mobil
   ========================================================= */
@media (max-width: 860px) {
  .ch-sticky { grid-template-columns: 1fr; grid-template-rows: auto 1fr; align-items: start; padding-top: calc(var(--header-h) + 16px); }
  .ch-text { max-width: none; }
  .ch-title { font-size: 40px; margin-bottom: 8px; }
  .ch-intro { display: none; }
  .ch-now { min-height: 0; padding: 10px 0; margin-bottom: 10px; }
  .ch-now-title { font-size: 18px; }
  .ch-scroll { display: none; }
  .ch-rings { left: 50%; top: 66%; }
  .ch-num-bg { font-size: 30vh; }
  .track-text { top: calc(var(--header-h) + 12px); right: 16px; max-width: none; }
  .track-strip { padding-left: 16px; gap: 8vw; }
  .tr-item { height: 46vh; } .tr-1 { height: 34vh; margin-top: 4vh; } .tr-2 { height: 30vh; margin-top: 18vh; } .tr-3 { height: 50vh; }
  .tunnel-text { bottom: 4vh; right: 16px; }
  .tn-item { width: 70vw; margin: -26vw 0 0 -35vw; }
  .dk-card { width: 74vw; padding-bottom: 56px; }
  .gf-world { top: 84%; }
  .gf-scene { overflow: hidden; }
  .stm-text { font-size: 30px; }
  .bx-label { font-size: 12px; padding: 6px 8px; }
  .deck { padding-top: 22vh; }
}

/* =========================================================
   Ruhige Variante (Bewegung reduzieren)
   ========================================================= */
.is-static .chapter, .is-static .interlude { height: auto; }
.is-static .ch-sticky, .is-static .il-sticky { position: relative; height: auto; display: block; padding-bottom: 60px; }
.is-static .ch-text, .is-static .track-text, .is-static .tunnel-text { position: static; max-width: 640px; margin-bottom: 24px; }
.is-static .ch-scene, .is-static .track, .is-static .tunnel, .is-static .deck { position: static; perspective: none; height: auto; display: block; }
.is-static .ch-obj, .is-static .tunnel-scene { position: static; width: auto; height: auto; margin: 0; transform: none; }
.is-static .ch-ring, .is-static .track-strip, .is-static .tunnel-scene, .is-static .deck { position: static; display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 26px; padding: 0; height: auto; transform: none; }
.is-static .ch-card, .is-static .tr-item, .is-static .tn-item, .is-static .dk-card { position: relative; inset: auto; width: auto; height: auto; aspect-ratio: auto; margin: 0; transform: none; opacity: 1; }
.is-static .ch-card .ch-card-meta, .is-static .ch-card .ch-card-title { opacity: 1; }
.is-static .tr-cap, .is-static .tn-cap { position: static; }
.is-static .ch-cover, .is-static .ch-box, .is-static .ch-scroll, .is-static .ch-bg, .is-static .tunnel-rings, .is-static .deck-bg, .is-static .track-progress { display: none; }
.is-static .il-media { position: relative; clip-path: none; height: 60vh; }
.is-static .il-media img { transform: none; }
.is-static .il-quote { position: absolute; }
.is-static .il-quote .w { opacity: 1; }
.is-static .bx-scene, .is-static .gf-scene { display: none; }
.is-static .st-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 26px; }
.st-item { padding: 0; border: 0; background: none; text-align: left; cursor: pointer; font-family: var(--font-playful); font-size: 17px; color: var(--forest); }
.st-item img { display: block; width: 100%; aspect-ratio: 1; object-fit: cover; margin-bottom: 8px; }

/* =========================================================
   Jahreszeiten beim Scrollen (grow/js/seasons.js)
   ========================================================= */
.season-canvas { position: fixed; inset: 0; width: 100vw; height: 100vh; z-index: 40; pointer-events: none; }
.season-tint { position: fixed; inset: 0; z-index: 39; pointer-events: none; mix-blend-mode: multiply; transition: background 1.6s ease; }
.view-projects[hidden] .season-canvas, .view-projects[hidden] .season-tint, .view-projects[hidden] .season-dial { display: none; }
.season-dial { position: fixed; left: 50%; margin-left: -62px; bottom: clamp(10px, 2.4vh, 22px); z-index: 60; display: flex; align-items: center; gap: 10px; padding: 6px 14px 6px 6px; border-radius: 999px; background: rgba(247, 244, 234, 0.88); box-shadow: 0 10px 26px -14px rgba(20, 40, 33, 0.5); font-size: 13px; font-weight: 500; color: var(--forest); opacity: 0; transform: translateY(14px); transition: opacity 0.4s, transform 0.4s var(--ease); pointer-events: none; }
.season-dial.is-on { opacity: 1; transform: none; }
.season-dial svg { width: 34px; height: 34px; }
.season-dial .sd-ring { fill: none; stroke: var(--line-strong); stroke-width: 2; }
.season-dial .sd-dot { fill: var(--mint-deep); }
.season-dial .sd-hand { stroke: var(--forest); stroke-width: 2.6; stroke-linecap: round; }
.season-dial .sd-pin { fill: var(--forest); }
.season-dial[data-s="0"] .sd-pin { fill: #e9a98f; }
.season-dial[data-s="1"] .sd-pin { fill: #e3c25c; }
.season-dial[data-s="2"] .sd-pin { fill: #c47a3c; }
.season-dial[data-s="3"] .sd-pin { fill: #9db6c8; }
