/* ==========================================================================
   editing.halovisionai.cloud — Jayden Mikus, short-form editor

   Visual system taken from studio.halovisionai.cloud (the Studio site):
   the night-sky entrance hall, the Fraunces display word, and the
   papier/rot/tinte palette. Values below are lifted from that codebase
   rather than re-guessed, including its measured contrast decisions.
   ========================================================================== */

@font-face{
  font-family:'Fraunces';
  src:url('assets/fonts/fraunces-latin.woff2') format('woff2-variations');
  font-weight:300 900; font-style:normal; font-display:swap;
}
@font-face{
  font-family:'Bricolage Grotesque';
  src:url('assets/fonts/bricolage-latin.woff2') format('woff2-variations');
  font-weight:300 800; font-style:normal; font-display:swap;
}
@font-face{
  font-family:'Instrument Serif';
  src:url('assets/fonts/instrument-serif-latin.woff2') format('woff2');
  font-weight:400; font-style:normal; font-display:swap;
}

:root{
  /* Papier — the night grounds */
  --papier:      #0C0820;
  --papier-tief: #130D2A;
  --sand:        #1A1236;
  --nacht:       #120C22;
  --nacht-2:     #1E1436;

  /* Tinte — warm off-white, never pure #fff */
  --tinte:       #F6EFE6;
  --tinte-matt:  rgba(246,239,230,.76);
  --tinte-leise: rgba(246,239,230,.60);

  /* Rot. Two of them on purpose: --rot carries display sizes and fills,
     --rot-schrift carries small type. --rot on --papier measures 4.27:1,
     which is under the 4.5 small text needs; --rot-schrift measures 7.8. */
  --rot:         #D93A1E;
  --rot-schrift: #F5836A;
  --rot-tief:    #A32410;
  --sonne:       #F2A93B;
  --koralle:     #F1745C;

  --strich:      rgba(246,239,230,.16);
  --strich-hell: rgba(246,239,230,.26);

  --display: 'Fraunces', 'Instrument Serif', ui-serif, Georgia, serif;
  --sans:    'Bricolage Grotesque', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
  --serif:   'Instrument Serif', ui-serif, Georgia, serif;

  --schwung: cubic-bezier(.16,1,.3,1);

  --maxw: 1180px;
  --gutter: clamp(20px, 5vw, 64px);
}

*,*::before,*::after{ box-sizing:border-box }
html{ -webkit-text-size-adjust:100% }

body{
  margin:0;
  background:var(--papier);
  color:var(--tinte);
  font-family:var(--sans);
  font-size:17px;
  font-weight:300;
  line-height:1.62;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  scrollbar-width:thin;
  scrollbar-color:rgba(246,239,230,.18) transparent;
}
body::-webkit-scrollbar{ width:8px }
body::-webkit-scrollbar-track{ background:transparent }
body::-webkit-scrollbar-thumb{ background:rgba(246,239,230,.18); border-radius:99px }

img,video,canvas{ max-width:100%; display:block }
a{ color:inherit; text-decoration:none }
button{ font:inherit; color:inherit; background:none; border:none; cursor:pointer }

/* ══════════════════════════════════════════════════════════════════════════
   VORHALLE — the entrance hall.
   A 300vh track over a fixed scene. Everything sinks as you scroll, because
   the camera rises. Three stages cross-fade in the same grid cell.
   ══════════════════════════════════════════════════════════════════════════ */

.vorhalle{ position:relative; z-index:2; height:300vh; pointer-events:none }
.vorhalle__szene{ position:fixed; inset:0; overflow:hidden; background:#07061A }
.vorhalle[data-fertig] .vorhalle__szene,
.vorhalle[data-fertig] .vorhalle__fuss{ visibility:hidden }

/* Blue night at the top, black at the bottom. Never a grey ramp, that reads
   as fog instead of night. The extra light sits at the top and on the
   horizon, deliberately not in the middle where the display word stands. */
.vorhalle__himmel{
  position:absolute; inset:0;
  background:
    radial-gradient(92% 48% at 42% 78%, rgba(255,168,112,.34) 0%, rgba(196,86,118,.20) 42%, transparent 76%),
    radial-gradient(98% 60% at 24% 0%, rgba(84,130,232,.72) 0%, transparent 64%),
    linear-gradient(180deg, #33499E 0%, #202A63 20%, #1A1B45 42%, #120E2C 66%, #07061A 100%);
}

/* The haze along the ridge. Without it the range looks cut out and pasted on. */
.vorhalle__dunst{
  position:absolute; left:-10%; right:-10%; bottom:16%; height:34vh; pointer-events:none;
  background:radial-gradient(52% 100% at 42% 100%, rgba(255,146,102,.30), transparent 74%);
  filter:blur(18px);
}

/* The low sun. It sits at 42%, not centre: a light core directly behind the
   word costs exactly the contrast large type needs. Centred with `translate`,
   never `transform` — the driver writes `transform` on every parallax layer
   each frame and would overwrite a centring placed in the same field. */
.vorhalle__gestirn{
  position:absolute; left:42%; bottom:22vh; width:min(34vh,44vw); aspect-ratio:1;
  translate:-50% 50%; will-change:transform; pointer-events:none;
  border-radius:50%;
  background:radial-gradient(circle at 50% 50%,
    rgba(255,240,222,.95) 0%, rgba(255,206,150,.74) 24%,
    rgba(255,150,102,.36) 43%, rgba(226,98,92,.15) 64%, transparent 78%);
}

.vorhalle__sterne{ position:absolute; inset:0; display:block }

/* Three ridges, three depths. They hang far below the frame because they SINK
   while scrolling; under a ridge there must always be fill, or the sky comes
   back through as a glowing strip where rock should be.
   `max-width:none` is required: the base rule caps media at 100%, which would
   silently trim the 108% width while `left` still shifts. */
.vorhalle__berg{
  position:absolute; left:-4%; width:108%; display:block;
  bottom:-12vh; height:82vh;
  will-change:transform; pointer-events:none;
  max-width:none;
}
/* The three fills live on the paths themselves (#241541 / #160C28 / #07040E),
   measured together with the ridge geometry. Do not override them here. */
.vorhalle__berg--fern { opacity:.50 }
.vorhalle__berg--mitte{ opacity:.80 }

/* The veil behind the word. A sibling of the stage, never its ::before: as a
   pseudo-element it disappears together with the stage whenever a contrast
   check hides the text, so the measurement never sees it and reports numbers
   that did not change. Over a star field it reads as depth, not as a box. */
.vorhalle__schleier{
  position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(58% 42% at 50% 48%,
    rgba(7,6,26,.62) 0%, rgba(7,6,26,.42) 46%, rgba(7,6,26,.16) 72%, transparent 88%);
}

.vorhalle__buehne{
  position:absolute; inset:0; display:grid; place-items:center;
  padding:0 5vw; text-align:center;
}
/* All stages share one grid cell so they can cross-fade. Side by side and
   toggled with display:none they could not blend, and a hard swap mid-scroll
   is the one edge this page has nowhere. */
.vorhalle__etappe{ grid-area:1/1; width:100%; will-change:transform, opacity }

.vorhalle__kicker{
  margin:0 0 clamp(1rem,2.4vh,1.8rem);
  font-size:.72rem; font-weight:600; letter-spacing:.22em;
  text-transform:uppercase; color:var(--rot-schrift);
}

/* The word is a <p>, not a heading. The page's <h1> lives further down; a
   second <h1> up here would read as a new topic to a search engine. */
.vorhalle__wort{
  margin:0; font-family:var(--display); font-weight:900; color:var(--rot);
  line-height:.82; letter-spacing:-.03em; text-transform:uppercase;
  font-size:clamp(4.4rem, 21vw, 17rem);
  /* The glow sits AROUND the glyph, never under it: it lifts the mood without
     lightening the letter face itself. */
  text-shadow:0 0 46px rgba(217,58,30,.42), 0 0 120px rgba(217,58,30,.20);
}
.vorhalle__wort--lang{ font-size:clamp(2.6rem, 10.5vw, 8.5rem); white-space:nowrap }

.vorhalle__unter{
  margin:clamp(20px,3.4vh,40px) auto 0; max-width:46ch;
  font-size:clamp(.95rem,1.25vw,1.15rem); line-height:1.75; font-weight:300;
  letter-spacing:.02em; color:rgba(246,239,230,.72);
}
.vorhalle__unter b{ display:block; font-weight:300; color:var(--tinte) }
.vorhalle__unter em{ font-style:normal; color:var(--rot-schrift) }

.vorhalle__fuss{
  position:fixed; left:0; right:0; bottom:0; z-index:5; pointer-events:none;
  display:flex; align-items:center; gap:clamp(12px,2vw,26px);
  padding:0 clamp(14px,2.4vw,34px) clamp(16px,2.6vh,28px) clamp(52px,6vw,86px);
  font-size:11px; letter-spacing:.32em; text-transform:uppercase;
  color:rgba(246,239,230,.60);
}
.vorhalle__balken{ flex:1; height:1px; background:var(--strich); position:relative }
.vorhalle__balken i{
  position:absolute; inset:0; transform-origin:left; transform:scaleX(0);
  background:linear-gradient(90deg,var(--rot),var(--rot-schrift));
}
.vorhalle__pfeil{
  width:26px; height:26px; display:grid; place-items:center;
  border:1px solid rgba(246,239,230,.18); border-radius:50%;
  animation:vorhalleWippe 2.6s ease-in-out infinite;
}
.vorhalle__pfeil svg{ width:9px; height:9px; stroke:rgba(246,239,230,.72); fill:none; stroke-width:1.6 }
@keyframes vorhalleWippe{ 0%,100%{ transform:translateY(0) } 50%{ transform:translateY(3px) } }

@media (max-width:640px){
  .vorhalle__fuss{ padding:0 1rem clamp(16px,2.6vh,28px) }
  /* Squeezed into a third of the width the ridge becomes a needle. Instead of
     changing the line, the image is laid WIDER than the screen and shifted:
     a narrow screen simply sees less of the horizon. */
  .vorhalle__berg{ width:260%; left:-54% }
}
@media (prefers-reduced-motion:reduce){
  .vorhalle__pfeil{ animation:none }
}

/* ══════════════════════════════════════════════════════════════════════════
   THE PAGE — slides over the fixed night with its own night-to-paper ramp.
   The scene is covered, never faded out: a night going transparent at the
   same time would be a double exposure.
   ══════════════════════════════════════════════════════════════════════════ */

.seite{ position:relative; z-index:3; background:var(--papier) }
.seite::before{
  content:''; position:absolute; left:0; right:0; top:-26vh; height:26vh;
  background:linear-gradient(180deg, transparent 0%, rgba(12,8,32,.55) 46%, var(--papier) 100%);
  pointer-events:none;
}

.wrap{ width:100%; max-width:var(--maxw); margin:0 auto; padding:0 var(--gutter); position:relative; z-index:2 }
section{ position:relative }

.kicker{
  font-family:var(--sans);
  font-size:.72rem; font-weight:600; letter-spacing:.22em; text-transform:uppercase;
  color:var(--rot-schrift);
  display:flex; align-items:center; gap:12px; margin:0 0 26px;
}
.kicker::before{ content:''; width:34px; height:1px; background:linear-gradient(90deg,var(--rot),transparent) }

h2.section-title{
  font-family:var(--display);
  font-weight:400;
  font-size:clamp(2.2rem, 5vw, 4rem);
  line-height:1.04; letter-spacing:-.025em;
  margin:0 0 22px; color:var(--tinte);
}
h2.section-title em{ font-style:italic; color:var(--rot-schrift) }

.lede{
  font-size:clamp(1rem,1.5vw,1.15rem); line-height:1.72; font-weight:300;
  color:var(--tinte-matt); max-width:62ch; margin:0 0 12px;
}
.footnote{ font-size:13px; line-height:1.62; color:var(--tinte-leise); max-width:74ch; font-weight:300 }
.footnote a{ color:var(--tinte-matt); border-bottom:1px solid var(--strich) }
.footnote a:hover{ color:var(--rot-schrift); border-color:var(--rot-schrift) }

/* ---------- surfaces + buttons ------------------------------------------- */

.glass{
  background:rgba(246,239,230,.035);
  border:1px solid var(--strich);
  box-shadow:inset 0 1px 0 rgba(246,239,230,.07), 0 24px 60px -30px rgba(0,0,0,.7);
}

.btn{
  display:inline-flex; align-items:center; gap:10px;
  padding:15px 30px; border-radius:999px;
  font-size:14px; font-weight:600; letter-spacing:.01em;
  position:relative; will-change:transform;
  transition:transform .4s var(--schwung), background-color .3s ease, border-color .3s ease, box-shadow .3s ease;
}
/* White on --rot measures 4.59:1 — it passes, and it is the only fill that
   carries the brand red at full strength. */
.btn-primary{ background:var(--rot); color:#fff; box-shadow:0 10px 44px -12px rgba(217,58,30,.65) }
.btn-primary:hover{ background:var(--rot-tief); box-shadow:0 14px 56px -12px rgba(217,58,30,.8) }
.btn-ghost{ border:1px solid var(--strich-hell); color:var(--tinte) }
.btn-ghost:hover{ border-color:rgba(246,239,230,.5); background:rgba(246,239,230,.05) }
.btn:active{ transform:scale(.96) }
.btn .arr{ transition:transform .4s var(--schwung) }
.btn:hover .arr{ transform:translateX(4px) }

/* ---------- header -------------------------------------------------------- */

.site-head{
  position:fixed; top:0; left:0; right:0; z-index:60;
  display:flex; align-items:center; justify-content:space-between;
  padding:16px var(--gutter);
  border-bottom:1px solid transparent;
  transition:background-color .4s ease, backdrop-filter .4s ease, border-color .4s ease;
}
.site-head.stuck{
  background:rgba(12,8,32,.78);
  backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
  border-bottom-color:var(--strich);
}
.brand{
  font-family:var(--display); font-weight:900; font-size:15px;
  letter-spacing:.16em; text-transform:uppercase; color:var(--tinte);
}
.nav-links{ display:flex; gap:30px }
.nav-links a{
  font-size:11px; letter-spacing:.2em; text-transform:uppercase;
  color:var(--tinte-leise); transition:color .3s ease;
}
.nav-links a:hover,.nav-links a.on{ color:var(--tinte) }
.head-right{ display:flex; align-items:center; gap:18px }

.lang{ display:flex; align-items:center; border:1px solid var(--strich); border-radius:999px; overflow:hidden }
.lang button{
  font-size:10.5px; letter-spacing:.14em; font-weight:600; padding:7px 12px;
  color:var(--tinte-leise); transition:color .25s ease, background-color .25s ease;
}
.lang button[aria-pressed="true"]{ color:var(--tinte); background:rgba(246,239,230,.10) }

.head-cta{
  font-size:11px; letter-spacing:.16em; text-transform:uppercase;
  padding:10px 20px; border-radius:999px;
  border:1px solid rgba(217,58,30,.6); color:var(--tinte);
  transition:background-color .3s ease, box-shadow .3s ease;
}
.head-cta:hover{ background:rgba(217,58,30,.22); box-shadow:0 0 30px -6px rgba(217,58,30,.5) }

@media (max-width:900px){ .nav-links{ display:none } }

/* ---------- film strip ---------------------------------------------------- */

.strip{
  padding:0 0 6px; overflow:hidden;
  border-top:1px solid var(--strich); border-bottom:1px solid var(--strich);
  background:var(--papier-tief);
}
.strip-head{
  display:flex; justify-content:space-between; align-items:baseline;
  padding:16px var(--gutter) 14px;
  font-size:10px; letter-spacing:.24em; text-transform:uppercase; color:var(--tinte-leise);
}
.strip-track{ display:flex; gap:10px; width:max-content; padding:0 0 18px; will-change:transform }
.strip-cell{
  width:116px; aspect-ratio:9/16; border-radius:6px; overflow:hidden;
  position:relative; border:1px solid var(--strich); flex:none;
  filter:grayscale(1) contrast(1.05) brightness(.6) sepia(.25);
  transition:filter .5s ease, transform .5s var(--schwung);
}
.strip:hover .strip-cell{ filter:grayscale(.5) brightness(.8) }
.strip-cell:hover{ filter:none !important; transform:translateY(-5px) scale(1.03) }

/* ---------- layered text (port of 21st.dev @xubohuah/layered-text) -------- */

.layered-sec{
  padding:clamp(110px,16vw,190px) 0;
  overflow:hidden; display:flex; flex-direction:column; align-items:center;
  background:var(--nacht);
  border-bottom:1px solid var(--strich);
}
.layered-sec .cap{
  font-size:10.5px; letter-spacing:.28em; text-transform:uppercase;
  color:var(--tinte-leise); margin-bottom:clamp(40px,7vw,76px);
  text-align:center; padding:0 var(--gutter);
}
/* The skew throws the lower rows well below the element's layout box, so the
   block needs reserved space underneath or the hint lands on the last word. */
.layered{
  margin:0 auto 250px;
  font-family:var(--sans); font-weight:800; letter-spacing:-2px;
  text-transform:uppercase; color:var(--tinte);
  cursor:pointer; font-size:72px; user-select:none;
}
.layered ul{ list-style:none; padding:0; margin:0; display:flex; flex-direction:column; align-items:center }
.layered li{ overflow:hidden; position:relative; height:60px }
.layered p{ margin:0; padding:0 15px; height:60px; line-height:55px; white-space:nowrap; vertical-align:top }
.layered p.b{ color:var(--rot) }

@media (max-width:767px){
  .layered{ font-size:36px; letter-spacing:-1px; margin-bottom:140px }
  .layered li{ height:35px }
  .layered p{ height:35px; line-height:30px; padding:0 8px }
}

.layered-hint{
  margin-top:0; font-size:10.5px; letter-spacing:.24em; text-transform:uppercase;
  color:var(--tinte-leise); display:flex; align-items:center; gap:10px;
}
.layered-hint .pulse{ width:5px; height:5px; border-radius:50%; background:var(--rot); animation:pulse 2s ease-in-out infinite }
@keyframes pulse{ 0%,100%{ opacity:.3 } 50%{ opacity:1; box-shadow:0 0 12px var(--rot) } }

/* ---------- proof / chart ------------------------------------------------- */

.proof{ padding:clamp(96px,13vw,168px) 0 }
.proof-head{ max-width:76ch; margin-bottom:clamp(50px,7vw,82px) }

.chart-card{ border-radius:20px; padding:clamp(24px,3.4vw,44px); margin-bottom:30px }
.chart-top{ display:flex; flex-wrap:wrap; justify-content:space-between; align-items:baseline; gap:14px; margin-bottom:34px }
.chart-top h3{ font-family:var(--sans); font-size:15px; font-weight:600; letter-spacing:-.01em; margin:0 }
.chart-top .meta{ font-size:11.5px; color:var(--tinte-leise) }

/* margin, not padding: the bar area must be exactly 100% of .chart so the
   median line can sit at a plain percentage of it */
.chart{ position:relative; height:300px; margin-top:34px; display:flex; align-items:flex-end; gap:clamp(3px,.7vw,9px) }

.bar-wrap{ flex:1; height:100%; display:flex; flex-direction:column; justify-content:flex-end; position:relative }
.bar{
  width:100%; height:0; border-radius:3px 3px 0 0; position:relative;
  background:linear-gradient(180deg, var(--rot) 0%, rgba(217,58,30,.30) 100%);
  transition:background .3s ease, box-shadow .3s ease;
}
.bar-wrap:hover .bar{ background:linear-gradient(180deg, var(--koralle), rgba(217,58,30,.5)); box-shadow:0 0 24px -4px rgba(241,116,92,.7) }
.bar.outlier{ background:linear-gradient(180deg, var(--sonne) 0%, rgba(217,58,30,.45) 100%) }
/* torn top edge = the axis is broken here, this bar runs off the scale */
.bar.outlier::before{
  content:''; position:absolute; top:-7px; left:0; right:0; height:8px;
  background:repeating-linear-gradient(135deg, var(--sonne) 0 5px, transparent 5px 10px);
}
.bar.dim{ background:linear-gradient(180deg, rgba(246,239,230,.24), rgba(246,239,230,.07)) }

.bar-val{
  position:absolute; top:-21px; left:50%; transform:translateX(-50%);
  font-size:10px; color:var(--tinte-matt); white-space:nowrap;
  opacity:0; transition:opacity .25s ease; pointer-events:none;
}
.bar-wrap:hover .bar-val,.bar-wrap.always .bar-val{ opacity:1; color:var(--tinte) }

.median-line{ position:absolute; left:0; right:0; border-top:1px dashed rgba(246,239,230,.38); pointer-events:none; opacity:0 }
.median-line span{
  position:absolute; right:0; top:-20px;
  font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--tinte);
  background:var(--papier); padding:2px 8px; border-radius:4px; border:1px solid var(--strich);
}

.chart-x{
  display:flex; justify-content:space-between; margin-top:14px; padding-top:12px;
  border-top:1px solid var(--strich);
  font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--tinte-leise);
}

.tip{
  position:fixed; z-index:70; pointer-events:none;
  padding:9px 13px; border-radius:8px;
  background:rgba(18,12,34,.96); border:1px solid rgba(217,58,30,.45);
  font-size:12px; line-height:1.45; max-width:250px;
  opacity:0; transform:translateY(4px);
  transition:opacity .18s ease, transform .18s ease;
  box-shadow:0 12px 40px rgba(0,0,0,.6);
}
.tip.on{ opacity:1; transform:translateY(0) }
.tip .v{ color:var(--rot-schrift); font-weight:600 }

.stat-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-bottom:30px }
@media (max-width:900px){ .stat-grid{ grid-template-columns:repeat(2,1fr) } }

.stat-card{ border-radius:16px; padding:26px 24px 24px; position:relative; overflow:hidden }
.stat-card .n{
  font-family:var(--display); font-weight:400;
  font-size:clamp(2rem,3.6vw,2.9rem); letter-spacing:-.03em; line-height:1;
  margin-bottom:12px; color:var(--tinte);
}
.stat-card .n .suf{ font-size:.5em; color:var(--rot-schrift); margin-left:2px }
.stat-card .t{ font-size:13px; font-weight:600; margin-bottom:6px }
.stat-card .d{ font-size:12.5px; color:var(--tinte-leise); line-height:1.5 }
.stat-card::after{
  content:''; position:absolute; top:0; left:0; width:100%; height:1px;
  background:linear-gradient(90deg,var(--rot),transparent 70%); opacity:.7;
}

/* ---------- process ------------------------------------------------------- */

.process{ padding:clamp(96px,13vw,168px) 0; background:var(--papier-tief); border-top:1px solid var(--strich) }
.proc-grid{ display:grid; grid-template-columns:repeat(2,1fr); gap:16px; margin-top:54px }
@media (max-width:860px){ .proc-grid{ grid-template-columns:1fr } }

.proc-card{ border-radius:18px; padding:34px 32px 32px; position:relative; transition:transform .5s var(--schwung), border-color .4s ease }
.proc-card:hover{ transform:translateY(-4px); border-color:rgba(217,58,30,.45) }
.proc-num{ font-family:var(--display); font-weight:900; font-size:13px; letter-spacing:.22em; color:var(--rot-schrift); margin-bottom:20px }
.proc-card h3{ font-family:var(--display); font-weight:400; font-size:1.6rem; margin:0 0 6px; letter-spacing:-.02em; color:var(--tinte) }
.proc-card .page{ font-size:10.5px; letter-spacing:.2em; text-transform:uppercase; color:var(--tinte-leise); margin-bottom:16px }
.proc-card p{ margin:0; font-size:14.5px; line-height:1.66; color:var(--tinte-matt); font-weight:300 }

/* ---------- work grid ----------------------------------------------------- */

.work{ padding:clamp(96px,13vw,168px) 0 }
.work-grid{ display:grid; grid-template-columns:repeat(5,1fr); gap:14px; margin-top:54px }
@media (max-width:1080px){ .work-grid{ grid-template-columns:repeat(4,1fr) } }
@media (max-width:820px) { .work-grid{ grid-template-columns:repeat(3,1fr) } }
@media (max-width:520px) { .work-grid{ grid-template-columns:repeat(2,1fr); gap:10px } }

/* .short is a real <button>, so the UA padding/alignment has to be reset */
.short{
  position:relative; display:block; width:100%; padding:0; text-align:left;
  aspect-ratio:9/16; border-radius:14px; overflow:hidden;
  border:1px solid var(--strich); background:var(--sand); cursor:pointer;
  transition:transform .5s var(--schwung), border-color .4s ease, box-shadow .4s ease;
}
.short:hover{
  transform:translateY(-6px); border-color:rgba(217,58,30,.55);
  box-shadow:0 18px 50px rgba(0,0,0,.55), 0 0 40px -10px rgba(217,58,30,.35);
}
/* YouTube serves Shorts thumbnails pillarboxed inside a 4:3 frame. Rendering
   at full height with auto width and centring crops the black bars off. */
.strip-cell img,.short img{
  position:absolute; top:0; left:50%; height:100%; width:auto; max-width:none;
  transform:translateX(-50%);
}
.short img{ transition:transform .7s var(--schwung), filter .4s ease }
.short:hover img{ transform:translateX(-50%) scale(1.06) }
.short iframe{ position:absolute; inset:0; width:100%; height:100%; border:0; z-index:4 }

.short-shade{
  position:absolute; inset:0; z-index:2; pointer-events:none;
  background:linear-gradient(180deg, rgba(12,8,32,0) 34%, rgba(12,8,32,.72) 68%, rgba(12,8,32,.97) 100%);
}
.short-meta{ position:absolute; left:0; right:0; bottom:0; z-index:3; padding:12px 12px 13px; pointer-events:none }
.short-views{ display:block; font-size:15px; font-weight:600; letter-spacing:-.01em; line-height:1; margin-bottom:5px; color:var(--tinte) }
.short-label{ display:block; font-size:9.5px; letter-spacing:.18em; text-transform:uppercase; color:rgba(246,239,230,.74) }
.short-play{
  position:absolute; z-index:3; top:50%; left:50%; width:44px; height:44px; margin:-22px 0 0 -22px;
  border-radius:50%; background:rgba(12,8,32,.6); border:1px solid rgba(246,239,230,.3);
  backdrop-filter:blur(6px); display:grid; place-items:center;
  opacity:0; transform:scale(.85);
  transition:opacity .35s ease, transform .35s var(--schwung); pointer-events:none;
}
.short:hover .short-play{ opacity:1; transform:scale(1) }
.short-play svg{ width:15px; height:15px; margin-left:2px; fill:var(--tinte) }

.short.top::before{
  content:'TOP'; position:absolute; z-index:3; top:10px; left:10px;
  font-size:8.5px; letter-spacing:.2em; font-weight:700;
  padding:4px 8px; border-radius:4px; background:var(--rot); color:#fff;
}

.work-foot{ margin-top:34px; display:flex; flex-wrap:wrap; gap:20px; align-items:center; justify-content:space-between }

/* ---------- contact ------------------------------------------------------- */

.contact{
  padding:clamp(100px,14vw,180px) 0 0;
  background:var(--nacht); border-top:1px solid var(--strich);
  position:relative; overflow:hidden;
}
/* the same low sun as the entrance hall, coming back at the end */
.contact-glow{
  position:absolute; bottom:-30%; left:50%; transform:translateX(-50%);
  width:120%; height:90%; pointer-events:none;
  background:radial-gradient(ellipse at center, rgba(255,150,102,.16) 0%, rgba(217,58,30,.07) 40%, transparent 68%);
}
.contact-inner{ text-align:center; position:relative; z-index:2 }
.contact .lede{ margin-left:auto; margin-right:auto }
.contact .kicker{ justify-content:center }
.contact-actions{ display:flex; flex-wrap:wrap; gap:14px; justify-content:center; margin-top:40px }

.contact-word{
  font-family:var(--display); font-weight:900;
  font-size:clamp(3.4rem,17vw,13rem); letter-spacing:-.03em; line-height:.82;
  text-align:center; text-transform:uppercase; color:var(--rot);
  text-shadow:0 0 46px rgba(217,58,30,.36), 0 0 120px rgba(217,58,30,.18);
  margin:clamp(60px,9vw,110px) 0 -.1em;
  user-select:none; pointer-events:none; white-space:nowrap; overflow:hidden;
}

/* sits outside <main> so it registers as the page's contentinfo landmark,
   which means it carries the section background itself */
.site-foot{
  position:relative; z-index:4;
  background:var(--nacht); border-top:1px solid var(--strich);
  padding:26px var(--gutter);
  display:flex; flex-wrap:wrap; gap:14px; justify-content:space-between; align-items:center;
  font-size:11.5px; color:var(--tinte-leise);
}
.site-foot a:hover{ color:var(--rot-schrift) }
.site-foot .links{ display:flex; gap:22px }

/* ---------- reveal animations (JS adds .in) ------------------------------- */

.rv{ opacity:0; transform:translateY(26px) }
.rv.in{ opacity:1; transform:none; transition:opacity .9s var(--schwung), transform .9s var(--schwung) }

.line-mask{ display:block; overflow:hidden }
.line-mask > span{ display:block; transform:translateY(102%) }
.line-mask.in > span{ transform:none; transition:transform 1.05s var(--schwung) }

/* ---------- reduced motion: drop every effect, keep the content ----------- */

@media (prefers-reduced-motion: reduce){
  *{ animation:none !important; transition:none !important }
  .rv{ opacity:1 !important; transform:none !important }
  .line-mask > span{ transform:none !important }
  .strip-track{ transform:none !important }
}
