/* show⁺X 공통 — 스타일 전체. index.html 에서 뽑아냄, 로직 변경 없음. */
:root{--font-lang:sans-serif}
html[lang="ko"]{--font-lang:'Noto Sans KR'}
html[lang="ja"]{--font-lang:'Noto Sans JP'}
html[lang="zh-CN"]{--font-lang:'Noto Sans SC'}
html[lang="zh-TW"]{--font-lang:'Noto Sans TC'}
html[lang="th"]{--font-lang:'Noto Sans Thai'}
html[lang="vi"]{--font-lang:'Be Vietnam Pro'}
html[lang="ar"]{--font-lang:'Noto Sans Arabic'}
html[lang="hi"]{--font-lang:'Noto Sans Devanagari'}
html[lang="ru"]{--font-lang:'Noto Sans'}
html[lang^="zh"] h1,html[lang^="zh"] h2,html[lang^="zh"] h3{font-weight:700}
html{scroll-behavior:smooth}
html{overflow-x:hidden}
/* overflow-x:hidden would make <body> a scroll container and that kills position:sticky
   for the hero. `clip` cuts the overflow without creating one. */
body{background:#08070c;color:#ededf3;font-family:'Sora',var(--font-lang),sans-serif;overflow-x:clip}
/* Lower sections - flat neutral backgrounds, alternating stripes only for rhythm (purple is reserved for accents) */
#equation,#stages,#wallet{background:#141419}
section,header,footer{overflow:hidden}
/* the hero pins itself - an overflow:hidden ancestor would kill position:sticky */
#top{overflow:visible}
a{color:#ededf3;text-decoration:none}
a:hover{color:#9446ff}
.font-display{font-family:'Anton',var(--font-lang),sans-serif}
.grad-text{background:linear-gradient(92deg,#d8baff 10%,#9446ff 90%);-webkit-background-clip:text;background-clip:text;color:transparent;background-size:200% 100%;animation:gradShift 6s ease-in-out infinite}
@keyframes gradShift{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
.glass{background:rgba(255,255,255,.045);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border:1px solid rgba(255,255,255,.10);transition:border-color .35s,box-shadow .35s,transform .35s}
.glass-hover:hover{border-color:rgba(148,70,255,.45);box-shadow:0 0 40px rgba(148,70,255,.18);transform:translateY(-4px)}
.blob{position:absolute;border-radius:50%;filter:blur(120px);pointer-events:none;animation:blobDrift 18s ease-in-out infinite}
section:nth-of-type(even) .blob{animation-duration:24s;animation-delay:-10s}
.reveal{opacity:0;transform:translateY(28px);filter:blur(6px);transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .8s cubic-bezier(.16,1,.3,1),filter .8s cubic-bezier(.16,1,.3,1)}
.reveal.in{opacity:1;transform:none;filter:blur(0)}
.aperture-spin{animation:apspin 40s linear infinite}
@keyframes apspin{to{transform:rotate(360deg)}}
.floaty{animation:floaty 7s ease-in-out infinite}
.floaty2{animation:floaty 9s ease-in-out -3s infinite}
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-14px)}}
::selection{background:#9446ff;color:#fff}
.lang-panel{max-height:min(420px,60vh);overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(148,70,255,.4) transparent}
/* HERO - one cinematic plate behind the brand aperture. Both are driven by --sy (scroll
   through the first viewport) and --mx/--my (pointer), set once per frame in JS below. */
#top{--sy:0;--mx:0;--my:0}
/* The hero is a track, not a screen. The stage sticks while the page scrolls past it,
   and that scroll distance is what the video is scrubbed against. */
.hero-track{height:420vh}
.hero-sticky{position:sticky;top:0;height:100vh;overflow:hidden;
  display:flex;flex-direction:column;justify-content:center}
@media(max-width:900px){.hero-track{height:300vh}}
@media(prefers-reduced-motion:reduce){.hero-track{height:100vh}}
.hero-stage{position:absolute;inset:0;overflow:hidden}
/* The plate is a centred stage. Scale it up and push it right so the stage itself lands
   in the right column and the left 40% falls off into black - that empty side is the
   type area. The trailing translateX runs inside the scaled space. */
/* The plate already contains the aperture - show it at its own framing, no crop-and-shove.
   Only a hair of scale so the parallax never exposes an edge. */
.hero-film{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;
  opacity:1;
  transform:translate3d(calc(var(--mx) * -10px),calc(var(--my) * -7px + var(--sy) * 5vh),0)
            scale(calc(1.04 + var(--sy) * .16));
  will-change:transform,opacity}
/* The plate itself is only ~10% violet - measured. `color` blending keeps its luminosity
   and takes the hue from the brand, so any backdrop lands on tone. */
/* Left half carries the copy, so the plate gets a scrim on that side only - the right
   half stays bright enough for the mark to sit in. */
/* Only the type side gets pressed down. The right half of the plate stays untouched. */
.hero-scrim{position:absolute;inset:0;
  background:linear-gradient(95deg,rgba(8,7,12,.92) 0%,rgba(8,7,12,.74) 26%,
             rgba(8,7,12,.34) 46%,transparent 64%)}
/* split layout - copy left, mark right */
.hero-grid{position:relative;z-index:10;width:100%;max-width:1240px;margin:0 auto;
  padding:96px 20px 72px;display:grid;align-items:center;
  grid-template-columns:minmax(0,46fr) minmax(0,54fr);gap:clamp(20px,4vw,56px)}
.hero-copy{text-align:left;
  opacity:calc(1 - max(0, var(--sy) - .84) * 6.2);
  transform:translateY(calc(max(0, var(--sy) - .84) * -80px))}
.hero-copy .daily{margin-left:0;margin-right:auto;text-align:left}
.hero-copy .hero-rule{margin-left:0}
.hero-copy .hero-title{text-wrap:balance;font-size:clamp(40px,5.4vw,78px)}
html[lang="ko"] .hero-copy .hero-title{font-size:clamp(38px,5.2vw,74px)}
html[lang="ja"] .hero-copy .hero-title{font-size:clamp(36px,5vw,70px)}
html[lang="zh-CN"] .hero-copy .hero-title,html[lang="es"] .hero-copy .hero-title,
html[lang="pt"] .hero-copy .hero-title,html[lang="fr"] .hero-copy .hero-title{font-size:clamp(36px,4.8vw,68px)}
/* 세로 화면에서는 좌우로 가를 폭이 없다 — 로고·글·밑줄을 모두 가운데로 모은다.
   왼쪽 정렬을 남기면 세로 영상의 중앙 구도와 축이 어긋나 보인다. */
@media(max-width:900px){
  .hero-grid{grid-template-columns:1fr;gap:8px;padding:104px 22px 76px;justify-items:center}
  .hero-copy{order:2;text-align:center;width:100%;max-width:34rem;
    display:flex;flex-direction:column;align-items:center}
  .hero-copy .daily{margin-left:auto;margin-right:auto;text-align:center}
  .hero-copy .hero-logo{margin-left:auto;margin-right:auto}
  .hero-copy .hero-rule{margin-left:auto;margin-right:auto}
  .hero-copy .hero-title{text-align:center;margin-left:auto;margin-right:auto}
  .hero-scrim{background:linear-gradient(180deg,rgba(8,7,12,.52),rgba(8,7,12,.30) 42%,rgba(8,7,12,.86))}
}
/* full-bleed image band - used once, to break the longest section in half */
.band{margin:clamp(56px,8vw,88px) 0 0;position:relative;overflow:hidden;border-radius:18px}
.band img{display:block;width:100%;height:clamp(200px,30vw,340px);object-fit:cover;opacity:.62}
.band::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(8,7,12,.55),rgba(8,7,12,.12) 45%,rgba(8,7,12,.75))}
.hero-overlay{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,transparent 0%,transparent 62%,rgba(8,7,12,.55) 84%,#08070c 100%)}
.hero-logo{height:clamp(62px,13vw,82px);width:auto;filter:drop-shadow(0 6px 30px rgba(148,70,255,.45))}
/* Quote of the day - sits above the wordmark, must stay quieter than it */
.daily{margin:0 0 clamp(40px,6vw,72px);max-width:44ch;text-align:center}
.daily-q{font-family:'Sora',sans-serif;font-style:normal;font-weight:600;
  font-size:clamp(15px,1.9vw,21px);line-height:1.6;color:rgba(237,237,243,.72);margin:0}
.daily-q::before{content:"\201C"}
.daily-q::after{content:"\201D"}
.daily-a{margin-top:.9rem;font-family:'Space Grotesk',sans-serif;font-size:9px;font-weight:500;
  letter-spacing:.28em;text-indent:.28em;text-transform:uppercase;color:rgba(237,237,243,.38)}
.daily-a::before{content:"— "}
/* The one line the whole page is built on. A high-contrast didone italic - the thick/thin
   stroke is what makes it read as couture rather than as a heavy geometric sans. */
.hero-title{margin-top:1.6rem;font-family:'Sora',sans-serif;font-style:normal;font-weight:700;
  font-size:clamp(46px,8.6vw,112px);line-height:1.04;letter-spacing:-.005em;text-wrap:nowrap}
/* the longer Romance translations cannot hold one line at that size - let them wrap */
html[lang="es"] .hero-title,html[lang="pt"] .hero-title,html[lang="fr"] .hero-title{font-size:clamp(40px,6.4vw,84px);text-wrap:balance}
.hero-title span{display:inline-block;padding-bottom:.06em;
  background:linear-gradient(103deg,#ffffff 0%,#f0e4ff 22%,#c9a6ff 46%,#9446ff 70%,#e9d8ff 100%);
  background-size:260% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;
  animation:heroSheen 11s ease-in-out infinite;filter:drop-shadow(0 10px 44px rgba(148,70,255,.5))}
@keyframes heroSheen{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
.hero-rule{width:clamp(56px,9vw,110px);height:1px;margin:1.9rem auto 0;
  background:linear-gradient(90deg,transparent,rgba(216,186,255,.65),transparent)}
/* CJK has no italic didone - the equivalent register is Myeongjo / Mincho */
html[lang="ko"] .hero-title{font-family:'Nanum Myeongjo',serif;font-style:normal;font-weight:800;font-size:clamp(44px,9.5vw,104px);letter-spacing:-.02em;line-height:1.16}
html[lang="ja"] .hero-title{font-family:'Shippori Mincho',serif;font-style:normal;font-weight:800;font-size:clamp(42px,9vw,98px);letter-spacing:-.02em;line-height:1.2}
html[lang="zh-CN"] .hero-title{font-family:'Noto Serif SC',serif;font-style:normal;font-weight:700;font-size:clamp(44px,9.5vw,104px);letter-spacing:-.01em;line-height:1.18}
/* HERO motion - staggered entrance with blur, drifting blobs, logo glow pulse (Supanova signature easing) */
@keyframes heroIn{from{opacity:0;transform:translateY(2rem);filter:blur(6px)}to{opacity:1;transform:translateY(0);filter:blur(0)}}
.hero-enter{opacity:0}
html.i18n-ready .hero-enter{animation:heroIn 1.2s cubic-bezier(.16,1,.3,1) both}
@keyframes blobDrift{0%,100%{transform:translate(0,0) scale(1)}33%{transform:translate(34px,-22px) scale(1.07)}66%{transform:translate(-24px,18px) scale(.96)}}
.blob-anim{animation:blobDrift 16s ease-in-out infinite}
.blob-anim2{animation:blobDrift 20s ease-in-out -8s infinite}
@keyframes logoPulse{0%,100%{filter:drop-shadow(0 6px 30px rgba(148,70,255,.45))}50%{filter:drop-shadow(0 8px 46px rgba(90,22,201,.6))}}
html.i18n-ready .hero-logo.hero-enter{animation:heroIn 1.2s cubic-bezier(.16,1,.3,1) both,logoPulse 5.5s ease-in-out 1.4s infinite}
/* Hero flourishes - halo pulse, sparkles, scroll cue */
@keyframes haloPulse{0%,100%{opacity:.7;transform:translate(-50%,-58%) scale(1)}50%{opacity:1;transform:translate(-50%,-58%) scale(1.12)}}
.hero-sparkles{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.sparkle{position:absolute;border-radius:50%;background:#d8baff;box-shadow:0 0 8px 2px rgba(216,186,255,.8);opacity:0;animation:twinkle var(--d,4s) ease-in-out var(--dl,0s) infinite}
@keyframes twinkle{0%,100%{opacity:0;transform:translateY(0) scale(.5)}20%{opacity:.9;transform:translateY(-6px) scale(1)}45%{opacity:.25;transform:translateY(-14px) scale(.7)}70%{opacity:.8;transform:translateY(-22px) scale(1.05)}}
.hero-scroll{position:absolute;left:50%;bottom:26px;z-index:10;color:rgba(255,255,255,.55);transform:translateX(-50%);animation:scrollBob 2.2s ease-in-out infinite}
@keyframes scrollBob{0%,100%{transform:translateX(-50%) translateY(0);opacity:.55}50%{transform:translateX(-50%) translateY(8px);opacity:1}}
/* Statement panel - the one line in the philosophy section that must land alone */
.statement{position:relative;background:#0b0b0e;border:1px solid rgba(148,70,255,.18);overflow:hidden}
.statement::before{content:"";position:absolute;inset:0;background:radial-gradient(120% 90% at 50% 0%,rgba(148,70,255,.16),transparent 62%);pointer-events:none}
.statement>*{position:relative}
/* Lineage rail - the platform succession, show+X as the next slot */
.rail{position:relative}
.rail::before{content:"";position:absolute;left:0;right:0;top:11px;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.10),rgba(148,70,255,.55))}
.node{width:9px;height:9px;border-radius:50%;background:rgba(255,255,255,.22)}
.node.is-now{width:15px;height:15px;background:linear-gradient(140deg,#d8baff,#9446ff);box-shadow:0 0 0 5px rgba(148,70,255,.16),0 0 22px rgba(148,70,255,.7);animation:nowPulse 3.4s ease-in-out infinite}
@keyframes nowPulse{0%,100%{box-shadow:0 0 0 5px rgba(148,70,255,.16),0 0 22px rgba(148,70,255,.7)}50%{box-shadow:0 0 0 11px rgba(148,70,255,0),0 0 34px rgba(148,70,255,.9)}}
/* The quotation - the one borrowed line on the page, so it is given a stage of its own */
.quote{position:relative;margin:0;padding:3.5rem 1rem 0;text-align:center;isolation:isolate}
.quote-halo{position:absolute;left:50%;top:44%;width:min(760px,92%);height:300px;transform:translate(-50%,-50%);pointer-events:none;z-index:-1;background:radial-gradient(closest-side,rgba(148,70,255,.22),rgba(148,70,255,.06) 55%,transparent 78%);animation:haloPulse 9s ease-in-out infinite}
.quote-mark{position:absolute;font-family:'Anton',serif;font-weight:800;font-size:clamp(120px,17vw,210px);line-height:1;pointer-events:none;z-index:-1;background:linear-gradient(160deg,#d8baff,#9446ff 55%,transparent);-webkit-background-clip:text;background-clip:text;color:transparent;opacity:.22}
.quote-mark-open{left:2%;top:0}
.quote-mark-close{right:2%;bottom:-.35em}
/* Handwritten, as if signed by the person quoted - one script face per writing system */
.quote-line{margin:0 auto;max-width:20ch;font-family:'Great Vibes','Nanum Brush Script',cursive;font-weight:400;
  font-size:clamp(40px,8.5vw,86px);line-height:1.28;letter-spacing:.005em;padding-bottom:.12em;
  background:linear-gradient(96deg,#ffffff 4%,#e9d8ff 26%,#b78bff 58%,#9446ff 92%);-webkit-background-clip:text;background-clip:text;color:transparent;
  background-size:220% 100%;animation:quoteShine 9s ease-in-out infinite;filter:drop-shadow(0 6px 34px rgba(148,70,255,.42))}
html[lang="ko"] .quote-line{font-family:'Nanum Brush Script',cursive;font-size:clamp(34px,7.2vw,70px);line-height:1.34;max-width:16ch}
html[lang="ja"] .quote-line{font-family:'Yuji Syuku',serif;font-size:clamp(28px,5.6vw,54px);line-height:1.5;max-width:18ch}
html[lang="zh-CN"] .quote-line{font-family:'Zhi Mang Xing',cursive;font-size:clamp(34px,7vw,68px);line-height:1.4;max-width:16ch}
/* Latin scripts share Great Vibes; it has a small x-height so it needs the extra size */
html[lang="es"] .quote-line,html[lang="pt"] .quote-line,html[lang="fr"] .quote-line{font-size:clamp(38px,8vw,80px);max-width:22ch}
@keyframes quoteShine{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
.quote-rule{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:2.5rem}
.quote-rule i{display:block;height:1px;width:min(120px,18vw);background:linear-gradient(90deg,transparent,rgba(216,186,255,.55))}
.quote-rule i:last-child{background:linear-gradient(90deg,rgba(216,186,255,.55),transparent)}
.quote-rule span{width:7px;height:7px;transform:rotate(45deg);background:linear-gradient(140deg,#d8baff,#9446ff);box-shadow:0 0 14px rgba(148,70,255,.85)}
.quote-by{margin-top:1.5rem;font-size:.72rem;font-weight:600;letter-spacing:.42em;text-indent:.42em;color:rgba(237,237,243,.5)}
@media(min-width:640px){.quote-by{font-size:.82rem}}
/* show x X = infinity - set as a display equation, with the real glossy X standing in for the letter */
.formula{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:clamp(14px,3vw,30px);margin-top:clamp(48px,7vw,84px)}
.formula-op{font-family:'Space Grotesk',sans-serif;font-weight:500;font-size:clamp(22px,3.4vw,40px);line-height:1;color:rgba(237,237,243,.34)}
.formula-inf{font-family:'Anton',sans-serif;font-weight:800;font-size:clamp(52px,9vw,108px);line-height:.8;
  background:linear-gradient(120deg,#d8baff,#9446ff 60%,#5a16c9);-webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 30px rgba(148,70,255,.6));animation:infPulse 5s ease-in-out infinite}
@keyframes infPulse{0%,100%{filter:drop-shadow(0 0 22px rgba(148,70,255,.45))}50%{filter:drop-shadow(0 0 46px rgba(148,70,255,.85))}}
/* The three marks - real logo geometry, given room to breathe */
.mark-card{border-radius:1.5rem;padding:3rem 2rem 2.75rem;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:280px}
.mark{width:clamp(76px,9vw,104px);height:auto;margin-bottom:2.25rem;overflow:visible}
/* Typesetting - headings break into even lines, body avoids orphan words, CJK/Thai never split mid-word */
/* balance 는 제목용이다. 본문 문단에 걸면 줄마다 길이를 맞추려고 한가운데서 끊어
   짧은 줄을 만든다 — 문단은 pretty(고아 단어만 정리)로 둔다. */
h1,h2,h3,blockquote,figcaption{text-wrap:balance}
p{text-wrap:pretty}
html[lang="ko"],html[lang="ja"],html[lang^="zh"],html[lang="th"]{word-break:keep-all;overflow-wrap:break-word;line-break:strict}
.copy{max-width:62ch;margin-left:auto;margin-right:auto}
.chip{border:1px solid rgba(255,255,255,.09);background:transparent;border-radius:99px;padding:.5rem 1.05rem;
  font-size:.8rem;letter-spacing:.01em;color:rgba(237,237,243,.5);transition:border-color .35s,color .35s}
.chip:hover{border-color:rgba(148,70,255,.4);color:#ededf3}
.chip-x{border-color:rgba(148,70,255,.4);color:rgba(237,237,243,.9)}
/* Horizon - ruled milestones, the last one carrying the accent */
.milestone{position:relative;padding-top:1.6rem;text-align:left}
.milestone::before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:rgba(255,255,255,.13)}
.milestone .year{font-family:'Space Grotesk',sans-serif;font-weight:500;font-size:clamp(1.1rem,2vw,1.5rem);letter-spacing:-.01em;color:rgba(237,237,243,.62)}
.milestone .label{margin-top:.7rem;font-size:.85rem;line-height:1.7;color:rgba(237,237,243,.44)}
.milestone-end::before{background:linear-gradient(90deg,rgba(148,70,255,.75),rgba(148,70,255,.1))}
.milestone-end .year{font-size:clamp(1.5rem,2.6vw,2rem);background:linear-gradient(120deg,#d8baff,#9446ff);-webkit-background-clip:text;background-clip:text;color:transparent}
.milestone-end .label{color:rgba(237,237,243,.72)}
/* Ladder rungs - ruled rows, not boxes; the crowd behind each step grows with the number */
.rung{position:relative;overflow:hidden;min-height:84px;border:0;background:transparent;border-radius:0;
  border-top:1px solid rgba(255,255,255,.10);transition:none}
.rung:last-child{border-bottom:1px solid rgba(255,255,255,.10)}
.rung:hover{transform:none;box-shadow:none;border-color:rgba(255,255,255,.10)}
.rung-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform 1.4s cubic-bezier(.16,1,.3,1),opacity .6s}
.rung:hover .rung-bg{transform:scale(1.05)}
.rung-veil{position:absolute;inset:0;background:linear-gradient(90deg,rgba(8,7,12,.96) 0%,rgba(8,7,12,.80) 38%,rgba(8,7,12,.62) 66%,rgba(8,7,12,.92) 100%)}
.rung .idx{font-family:'Space Grotesk',sans-serif;font-size:10px;letter-spacing:.3em;color:rgba(237,237,243,.32)}
.rung .name{font-size:clamp(1.15rem,2.2vw,1.6rem);font-weight:700;letter-spacing:-.015em}
.rung .qty{font-family:'Space Grotesk',sans-serif;font-weight:500;font-size:clamp(1rem,2.4vw,1.75rem);letter-spacing:-.01em;
  background:linear-gradient(100deg,#e9d8ff,#9446ff);-webkit-background-clip:text;background-clip:text;color:transparent}
.rung .unit{display:block;margin-top:.45rem;font-family:'Space Grotesk',sans-serif;font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:rgba(237,237,243,.42)}
html[lang="ko"] .rung .unit,html[lang="ja"] .rung .unit,html[lang^="zh"] .rung .unit{font-family:inherit;font-size:11px;letter-spacing:.12em}
/* The equation line - spaced out, with the result carrying the colour */
.eq-line{font-family:'Space Grotesk',sans-serif;font-weight:500;letter-spacing:.24em;
  font-size:clamp(11px,1.5vw,15px);color:rgba(237,237,243,.42);text-transform:uppercase}
.eq-line{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.55em}
.eq-line b{font-weight:500;color:rgba(237,237,243,.62)}
.eq-line i{font-style:normal;color:rgba(237,237,243,.26)}
.eq-line em{font-style:normal;background:linear-gradient(100deg,#d8baff,#9446ff);-webkit-background-clip:text;background-clip:text;color:transparent}
/* Stage cards - image, hairline, caption. No container chrome. */
.stage-card{overflow:visible;border-radius:0;border:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}
.stage-card:hover{transform:none;box-shadow:none;border-color:transparent}
.stage-card img{border-radius:.75rem;transition:transform 1.2s cubic-bezier(.16,1,.3,1),opacity .5s;opacity:.9}
.stage-card:hover img{transform:translateY(-4px);opacity:1}
.stage-card figcaption{padding:1.5rem 0 0;margin-top:1.5rem;border-top:1px solid rgba(255,255,255,.12)}
.stage-card .head{display:flex;align-items:baseline;gap:.85rem}
.stage-card .head span{font-family:'Space Grotesk',sans-serif;font-size:10px;letter-spacing:.3em;color:rgba(237,237,243,.34)}
.stage-card .head h3{font-size:1.3rem;font-weight:700;letter-spacing:-.015em}
.stage-card p{margin-top:.75rem;font-size:.875rem;line-height:1.85;color:rgba(237,237,243,.48)}
@media(prefers-reduced-motion:reduce){.hero-enter,html.i18n-ready .hero-enter,.blob,.blob-anim,.blob-anim2,html.i18n-ready .hero-logo.hero-enter,.grad-text,.sparkle,.hero-scroll,.node.is-now{animation:none;opacity:1}.reveal{filter:none}}
/* Philosophy expansion - the human axis. One spine, brightening as it descends:
   the further down, the larger and hotter the word. The last line is the payoff. */
.axis{position:relative;list-style:none;margin:0 auto;padding:0;max-width:660px;
  display:flex;flex-direction:column;align-items:center;gap:clamp(28px,3.6vw,46px)}
.axis::before{content:"";position:absolute;left:50%;top:2px;bottom:2px;width:1px;translate:-50% 0;
  background:linear-gradient(180deg,rgba(148,70,255,.05),rgba(148,70,255,.34) 34%,rgba(216,186,255,.9))}
/* a single light falls down the spine when the block comes into view */
.axis::after{content:"";position:absolute;left:50%;top:-26%;width:2px;height:26%;translate:-50% 0;
  background:linear-gradient(180deg,transparent,rgba(233,216,255,.95),transparent);
  filter:blur(1px);opacity:0;pointer-events:none}
.reveal.in.axis::after{animation:axisRun 2.8s cubic-bezier(.42,0,.2,1) .35s}
@keyframes axisRun{0%{opacity:0;top:-26%}14%{opacity:1}100%{opacity:0;top:104%}}

.ax{--p:calc(var(--i) / 6);position:relative;display:flex;flex-direction:column;align-items:center;gap:.45rem;
  opacity:0;transform:translateY(16px);
  transition:opacity .75s cubic-bezier(.16,1,.3,1),transform .75s cubic-bezier(.16,1,.3,1);
  transition-delay:calc(var(--i) * .1s)}
.reveal.in .ax{opacity:1;transform:none}
/* the node sits on the spine, growing hotter with each step */
.ax::before{content:"";position:absolute;left:50%;top:calc(-1 * clamp(14px,1.8vw,23px));
  width:7px;height:7px;translate:-50% -50%;rotate:45deg;background:#08070c;
  border:1px solid rgba(148,70,255,calc(.28 + var(--p) * .72));
  box-shadow:0 0 calc(5px + var(--p) * 18px) rgba(148,70,255,calc(.12 + var(--p) * .6))}
.ax:first-child::before{display:none}

.ax-n{font-family:'Space Grotesk',sans-serif;font-size:9px;letter-spacing:.24em;
  color:rgba(216,186,255,calc(.16 + var(--p) * .44))}
.ax-w{font-family:'Space Grotesk',var(--font-lang),sans-serif;font-weight:700;
  font-size:calc(11px + var(--p) * 10px);
  letter-spacing:calc(.24em + var(--p) * .05em);
  color:rgba(237,237,243,calc(.44 + var(--p) * .56));
  text-shadow:0 0 calc(var(--p) * 28px) rgba(148,70,255,calc(var(--p) * .5))}
.ax-s{font-family:'Sora',sans-serif;font-style:normal;text-align:center;
  font-size:calc(.9rem + var(--p) * .46rem);line-height:1.5;
  color:rgba(237,237,243,calc(.32 + var(--p) * .44))}
html[lang="ko"] .ax-s,html[lang="ja"] .ax-s,html[lang="zh-CN"] .ax-s{
  font-family:var(--font-lang),serif;font-style:normal}
/* the last line is where the whole flow arrives */
.ax:last-child .ax-w{background:linear-gradient(92deg,#e9d8ff,#9446ff);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 26px rgba(148,70,255,.55))}
@media(prefers-reduced-motion:reduce){
  .ax{opacity:1;transform:none;transition:none}
  .reveal.in.axis::after{animation:none}
}
/* Concept card - philosopher stays an attribution, the idea is the headline */
.concept{position:relative;padding:1.9rem 1.6rem 1.7rem;border:1px solid rgba(255,255,255,.07);
  border-radius:1.1rem;background:rgba(255,255,255,.012);transition:border-color .4s}
.concept:hover{border-color:rgba(148,70,255,.28)}
.concept h3{font-size:1.05rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}
.concept .attr{font-family:'Space Grotesk',sans-serif;font-size:10px;letter-spacing:.2em;
  text-transform:uppercase;color:rgba(237,237,243,.34);margin-top:.5rem}
.concept .say{margin-top:1rem;font-size:1.02rem;line-height:1.6;color:rgba(237,237,243,.86)}
.concept .body{margin-top:.75rem;font-size:.92rem;line-height:1.85;color:rgba(237,237,243,.5)}
/* Footer locations - set as a quiet mono line, one register below the tagline */
.footer-loc{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:.55rem 1rem;
  font-family:'Space Grotesk',sans-serif;font-size:10px;font-weight:500;letter-spacing:.22em;
  text-transform:uppercase;color:rgba(237,237,243,.34)}
/* separators come from CSS so the list wraps without orphaned dots */
.footer-loc span{display:inline-flex;align-items:center}
.footer-loc span:not(:last-child)::after{content:"·";margin-left:1rem;color:rgba(148,70,255,.7);letter-spacing:0}
.drawer-link{padding:.6rem .7rem;border-radius:.65rem;transition:background .15s}
.drawer-link:hover{background:rgba(255,255,255,.06)}
/* NAV - marks on the dark, no panel. The hairline and blur arrive only after the hero. */
#siteNav{transition:background .5s ease,backdrop-filter .5s ease}
#siteNav::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;opacity:0;transition:opacity .5s ease;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.14),transparent)}
#siteNav.is-scrolled{background:rgba(10,10,13,.62);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}
#siteNav.is-scrolled::after{opacity:1}
/* 로고·메뉴·언어 세 덩어리가 좁은 폭에서 서로 밀고 들어가지 않게 —
   양끝(로고·언어)은 줄어들지 않게 고정하고, 가운데 메뉴만 줄어들다가 넘치면 가로로 흐른다. */
.nav-inner{height:76px;gap:10px}
.nav-inner > *:first-child,.nav-lang{flex:none}
.nav-logo{height:40px;width:auto;opacity:.85;transition:opacity .35s}
.nav-logo:hover{opacity:1}
.nav-links{gap:clamp(.6rem,2.6vw,3.2rem);align-items:center;min-width:0;flex-wrap:nowrap;
  overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none}
.nav-links::-webkit-scrollbar{display:none}
.nav-links a{white-space:nowrap}
.nav-links a,.nav-lang{font-family:'Space Grotesk',sans-serif;font-size:10px;font-weight:500;letter-spacing:.26em;text-transform:uppercase;color:rgba(237,237,243,.4);transition:color .35s}
.nav-links a:hover,.nav-lang:hover{color:#ededf3}
.nav-lang{display:flex;align-items:center;gap:7px}
/* 좁은 화면에서도 메뉴를 접지 않는다 — 항목이 셋뿐이라 들어간다.
   ⚠ 햄버거 <button id="hamBtn"> 은 DOM 에 남겨 둔다. spx-app.js 가 그 요소를 직접 참조하므로
      마크업에서 지우면 TypeError 로 그 뒤의 reveal 옵저버가 죽고 화면이 통째로 안 뜬다. */
.nav-ham{display:none;align-items:center;justify-content:center;width:26px;height:26px;margin-left:-4px;color:rgba(237,237,243,.5)}
/* 영문 라벨(PHILOSOPHY·COMPETITION·TECHNOLOGY)이 한글보다 훨씬 길어 여기서 먼저 막힌다.
   폭이 줄어드는 순서대로 자간 → 글자크기 → 로고 높이를 차례로 줄인다. */
@media(max-width:900px){
  .nav-links a{font-size:9px;letter-spacing:.1em}
  .nav-logo{height:30px}
}
@media(max-width:700px){
  .nav-links a{font-size:8.5px;letter-spacing:.04em}
  .nav-logo{height:26px}
}
@media(max-width:460px){
  .nav-links a{letter-spacing:.01em}
  .nav-logo{height:22px}
  .nav-inner{gap:6px}
}
/* Philosophy pillars - hairline columns instead of boxes */
.pillar{position:relative;padding-top:1.9rem}
.pillar::before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:rgba(255,255,255,.13)}
.pillar .idx{display:block;font-family:'Space Grotesk',sans-serif;font-size:10px;letter-spacing:.32em;color:#b78bff}
.pillar h3{margin-top:1.15rem;font-size:1.4rem;font-weight:700;letter-spacing:-.01em}
.pillar p{margin-top:.9rem;max-width:30ch;font-size:.9rem;line-height:1.95;color:rgba(237,237,243,.5)}
/* one column on phones - left-aligned columns read as skewed, so centre them */
@media(max-width:767px){
  .pillar{text-align:center}
  .pillar p{margin-left:auto;margin-right:auto}
}
/* 2단으로 세울 때는 30ch 가 너무 좁다 — 기술페이지 402 기둥용 */
.pillar-wide p{max-width:46ch}
/* 기둥 안에 세우는 앱 화면 한 컷 (기술페이지 THE STACK).
   .flow-art 와 같은 언어(둥근 모서리·헤어라인·보라 낙광)를 쓰되, 2단 그리드에
   들어가므로 폭만 줄였다. 세로 9:19.5 라 폭을 키우면 기둥이 걷잡을 수 없이 길어진다. */
.pillar-shot{margin-top:1.35rem}
.pillar-shot img{width:min(268px,100%);height:auto;display:block;border-radius:20px;
  border:1px solid rgba(255,255,255,.09);
  box-shadow:0 24px 60px rgba(0,0,0,.55),0 0 40px rgba(148,70,255,.10)}
@media(max-width:767px){.pillar-shot img{margin-left:auto;margin-right:auto}}
@media(max-width:767px){.pillar-wide .pillar-shot img{margin-left:0;margin-right:0}}
/* 아이콘 — 선으로만 그린다(채우기 없음). 색은 기둥 번호와 같은 톤.
   ⚠ 이 규칙이 없으면 인라인 SVG 가 브라우저 기본값(fill:black · 300×150px)으로 떨어져
      검은 배경에서 보이지 않으면서 자리만 크게 먹는다. 지우지 말 것. */
.ico{flex:none;display:block;width:24px;height:24px;color:#b78bff;
  stroke:currentColor;fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.pillar-head{display:flex;align-items:center;gap:.7rem}
.pillar-head .ico{width:22px;height:22px}
@media(max-width:767px){.pillar-head{justify-content:center}}
.tcard .ico{margin-bottom:1rem}
/* show⁺X 로 되돌아오는 한 줄 — 일반론 뒤에 붙어 "우리 얘기"로 착지시킨다 */
.tie{position:relative;margin-top:1rem;padding-left:1.05rem;
  font-size:.86rem;line-height:1.85;color:rgba(216,186,255,.62)}
.tie::before{content:"";position:absolute;left:0;top:.72em;width:8px;height:1px;
  background:rgba(216,186,255,.55)}
/* 좁은 화면에서 402 기둥은 본문이 길어 가운데 정렬이 읽기 나쁘다 —
   철학 페이지의 짧은 기둥(.pillar)만 가운데로 두고, 이쪽은 왼쪽으로 통일한다. */
@media(max-width:767px){
  .pillar-wide{text-align:left}
  .pillar-wide p{margin-left:0;margin-right:0}
  .pillar-wide .pillar-head{justify-content:flex-start}
  .tie{margin-left:0;margin-right:0;text-align:left}
}
/* Epigraph - the single borrowed thought, ruled above and below instead of boxed */
.epigraph{position:relative;margin:clamp(64px,9vw,120px) auto 0;max-width:56rem;padding:clamp(40px,5vw,64px) 1rem;text-align:center}
.epigraph::before,.epigraph::after{content:"";position:absolute;left:50%;transform:translateX(-50%);width:72px;height:1px;
  background:linear-gradient(90deg,transparent,rgba(216,186,255,.55),transparent)}
.epigraph::before{top:0}
.epigraph::after{bottom:0}
.epigraph p{font-size:clamp(19px,2.4vw,29px);line-height:1.6;font-weight:700;letter-spacing:-.012em;color:rgba(237,237,243,.94)}
/* 철학 페이지는 한 장에 한 번 쓰지만 기술 페이지는 섹션 중간의 이음새라 더 좁아야 한다 */
.epigraph-tight{margin-top:clamp(36px,4vw,56px);padding-top:clamp(24px,2.6vw,36px);
  padding-bottom:clamp(24px,2.6vw,36px)}
/* Lede - a measured column wide enough that short sentences stay on one line */
.lede{max-width:62ch;margin-left:auto;margin-right:auto;font-size:1rem;line-height:1.95;color:rgba(237,237,243,.54)}
/* Stage cards - index and title share a baseline instead of stacking */
.stage-card{overflow:hidden;border-radius:1.25rem}
.stage-card figcaption{padding:1.5rem 1.5rem 1.75rem}
.stage-card .head{display:flex;align-items:baseline;gap:.85rem}
.stage-card .head span{font-family:'Space Grotesk',sans-serif;font-size:10px;letter-spacing:.28em;color:#b78bff}
.stage-card .head h3{font-size:1.3rem;font-weight:700;letter-spacing:-.01em}
.stage-card p{margin-top:.7rem;font-size:.875rem;line-height:1.85;color:rgba(237,237,243,.5)}

/* ── 3탭 구조 (경영 철학 / 경연 / 기술) ───────────────────────────── */
/* active tab — the dot sits under the label so the row height never shifts */
.nav-links a.is-active{color:rgba(237,237,243,.96)}
.nav-links a.is-active::after{content:"";position:absolute;left:50%;bottom:-9px;width:4px;height:4px;
  border-radius:50%;background:#9446ff;transform:translateX(-50%);box-shadow:0 0 10px rgba(148,70,255,.9)}
.nav-links a{position:relative}

/* page head — every sub page opens the same way so they read as one site */
.page-head{padding:calc(96px + 8vh) 0 clamp(40px,7vw,84px)}
.page-head h1{text-wrap:balance}
.page-head::after{content:"";display:block;width:clamp(56px,9vw,110px);height:1px;margin-top:2.4rem;
  background:linear-gradient(90deg,rgba(216,186,255,.65),transparent)}

/* gate cards — the three ways in, on the home page */
.gate{position:relative;display:block;overflow:hidden;border-radius:20px;padding:26px 24px 60px;
  background:linear-gradient(150deg,rgba(148,70,255,.10),rgba(255,255,255,.02));
  border:1px solid rgba(255,255,255,.08);transition:border-color .5s,transform .5s,background .5s}
.gate:hover{border-color:rgba(148,70,255,.42);transform:translateY(-4px);
  background:linear-gradient(150deg,rgba(148,70,255,.17),rgba(255,255,255,.03))}
.gate-n{font-family:'Space Grotesk',sans-serif;font-size:11px;letter-spacing:.28em;color:rgba(216,186,255,.7)}
.gate h3{margin-top:1.1rem;font-size:1.5rem;font-weight:800;letter-spacing:-.01em}
.gate p{margin-top:.8rem;font-size:.9rem;line-height:1.85;color:rgba(237,237,243,.5)}
.gate-go{position:absolute;left:24px;bottom:24px;font-size:1.1rem;color:rgba(216,186,255,.55);
  transition:transform .5s,color .5s}
.gate:hover .gate-go{transform:translateX(6px);color:rgba(216,186,255,.95)}

/* ── 경연 흐름 — 화면 한 컷과 설명 한 덩어리가 번갈아 선다 ─────────── */
.flow{display:grid;gap:clamp(28px,5vw,64px);align-items:center;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
/* ── 무대 배경 (경연 페이지 앱 소개 다섯 구간) ────────────────────
   구간마다 배경을 따로 두지 않는다. sticky 로 화면에 붙여 두어
   다섯 구간이 하나의 공연장 안에 있는 것처럼 만든다.

   층 순서가 이 배경의 전부다.
     잔광 → 조명 → 먼 관객 → 응원봉 → 앞줄 실루엣 → 시상대
   응원봉이 앞줄 실루엣보다 아래에 있어야 밑동이 관객 뒤로 들어가고,
   그제야 허공에 뜬 물체가 아니라 누군가 손에 든 것으로 읽힌다.

   20행의 section{overflow:hidden} 이 스크롤 컨테이너를 만들어 sticky 를 가둔다.
   clip 은 같은 잘라내기를 하면서 컨테이너를 만들지 않는다 — body 에 쓴 것과 같은 수법이다. */
#flow{overflow:clip}
.stage{position:absolute;left:0;right:0;top:0;bottom:-100vh;z-index:0;pointer-events:none}
/* bottom 을 100vh 내려 sticky 가 섹션 끝까지 붙어 있게 한다. 넘친 부분은 #flow 가 자른다. */
.stage-view{position:sticky;top:0;height:100vh;overflow:hidden}

.stage-glow,.stage-spot,.stage-crowd,.stage-front{
  position:absolute;transition:opacity .62s cubic-bezier(.4,0,.2,1),filter .62s cubic-bezier(.4,0,.2,1)}
.stage-glow,.stage-crowd{filter:brightness(var(--bri,1))}
.stage-spot{filter:brightness(calc(1 + (var(--bri,1) - 1) * .45))}

/* 바닥에서 올라오는 보라 잔광 */
.stage-glow{inset:0;opacity:var(--amb,.3);
  background:radial-gradient(125% 66% at 50% 104%,rgba(167,77,252,.62) 0%,rgba(122,47,245,.42) 34%,transparent 72%)}

/* 위에서 내려오는 조명 — 비트맵을 쓰지 않는다.
   받은 오버레이는 부드러운 면뿐(디테일 0.12)이라 넓은 화면에서 늘리고
   밝기를 곱하면 압축 블록이 그대로 커진다. 그라디언트는 해상도와 무관하다. */
.stage-spot{left:0;right:0;top:0;height:86vh;opacity:var(--spot,.03);
  background:
    radial-gradient(58% 80% at 17% -14%,rgba(167,77,252,.30),transparent 62%),
    radial-gradient(44% 72% at 39% -16%,rgba(122,47,245,.24),transparent 60%),
    radial-gradient(50% 84% at 61% -12%,rgba(167,77,252,.26),transparent 64%),
    radial-gradient(56% 76% at 83% -14%,rgba(122,47,245,.22),transparent 60%),
    radial-gradient(120% 46% at 50% -6%,rgba(122,47,245,.16),transparent 70%);
  -webkit-mask-image:linear-gradient(180deg,#000 54%,transparent 100%);
  mask-image:linear-gradient(180deg,#000 54%,transparent 100%);
  mix-blend-mode:screen}

/* 먼 관객 */
.stage-crowd{left:0;right:0;bottom:0;height:58vh;opacity:var(--crowd,.1);
  background:url(img/stage/crowd.webp) bottom center/cover no-repeat;
  -webkit-mask-image:linear-gradient(180deg,transparent 0,#000 30%);
  mask-image:linear-gradient(180deg,transparent 0,#000 30%)}

/* 어두운 면의 계단(밴딩)을 흩는 잡티. 받은 에셋이 평탄면 94%%라
   그냥 두면 층으로 보인다. 이미지마다 잡티를 구우면 압축이 안 돼 용량만 커지므로
   작은 타일 하나로 전 레이어를 한 번에 덮는다. */
.stage-grain{position:absolute;inset:0;pointer-events:none;
  background:url(img/stage/grain.png) repeat;
  opacity:.05;mix-blend-mode:overlay}

/* 앞줄 실루엣 — 봉보다 위. 봉의 아래 30~50%를 먹는다.
   장면이 어두워져도 가림은 유지해야 한다. 안 그러면 봉이 다시 뜬다. */
.stage-front{left:-2%;right:-2%;bottom:0;height:16.5vh;opacity:var(--front,.9);
  background:url(img/stage/crowd-front.webp) bottom center/cover no-repeat;
  }


/* ── 장면 ───────────────────────────────────────────────────────
   어두운 객석에서 시작해 끝으로 갈수록 밝아진다. 마지막이 가장 밝다.
   불투명도만으로는 천장이 1 이라, 잔광 알파와 screen 합성으로 위쪽 여유를 만들었다. */
.stage[data-scene="1"]{--crowd:.02;--spot:.004;--amb:.04;--front:.80;--bri:1}
.stage[data-scene="2"]{--crowd:.12;--spot:.030;--amb:.16;--front:.84;--bri:1}
.stage[data-scene="3"]{--crowd:.30;--spot:.090;--amb:.34;--front:.88;--bri:1.15}
.stage[data-scene="4"]{--crowd:.56;--spot:.220;--amb:.66;--front:.94;--bri:1.55}
.stage[data-scene="5"]{--crowd:1;  --spot:1;   --amb:1;  --front:1;  --bri:2.9}


/* ── 화면 크기 ──────────────────────────────────────────────── */
@media(max-width:1100px){
}
@media(max-width:760px){
  .stage-crowd{height:46vh}
  .stage-spot{height:58vh}
  .stage-front{height:13vh}
}

@media(prefers-reduced-motion:reduce){
  .stage{--mx:0 !important;--my:0 !important}
  .stage-glow,.stage-spot,.stage-crowd,.stage-front{transition:none}
}

.flow.is-flip .flow-art{order:2}
.flow-art{display:flex;justify-content:center}
.flow-art img{width:min(300px,72vw);height:auto;display:block;border-radius:26px;
  border:1px solid rgba(255,255,255,.09);box-shadow:0 40px 90px rgba(0,0,0,.6),0 0 60px rgba(148,70,255,.14)}
.flow-n{font-family:'Space Grotesk',sans-serif;font-size:11px;letter-spacing:.3em;color:rgba(216,186,255,.65)}
.flow-copy h3{margin-top:1rem;font-size:clamp(1.5rem,2.6vw,2rem);font-weight:800;letter-spacing:-.015em;line-height:1.25}
.flow-copy p{margin-top:1rem;max-width:34ch;font-size:.95rem;line-height:1.95;color:rgba(237,237,243,.5)}
@media(max-width:820px){
  .flow{grid-template-columns:1fr;gap:26px}
  .flow.is-flip .flow-art{order:0}
  .flow-copy{text-align:center}
  .flow-copy p{margin-left:auto;margin-right:auto}
}

/* ── 분배 막대 ───────────────────────────────────────────────────── */
.split{border-radius:20px;padding:26px 24px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08)}
.split h3{font-size:1.35rem;font-weight:800;letter-spacing:-.01em}
.split-sub{margin-top:.5rem;font-size:.85rem;line-height:1.8;color:rgba(237,237,243,.42)}
.bars{margin-top:1.6rem;display:flex;flex-direction:column;gap:.9rem}
.bar{display:grid;grid-template-columns:minmax(84px,auto) 1fr auto;align-items:center;gap:12px;font-size:.85rem}
.bar .bl{color:rgba(237,237,243,.62)}
.bar .bt{display:block;height:8px;border-radius:99px;background:rgba(255,255,255,.07);overflow:hidden}
.bar .fill{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#5a16c9,#9446ff 60%,#d8baff)}
.bar b{font-variant-numeric:tabular-nums;color:rgba(237,237,243,.9)}

/* ── 인트로 — 조리개 영상이 열리며 히어로가 드러난다 ───────────────── */
html.intro-on,html.intro-on body{overflow:hidden;height:100%}
html.intro-on .hero-grid,html.intro-on #siteNav{opacity:0;pointer-events:none}
.hero-grid,#siteNav{transition:opacity .8s ease .15s}

#intro{position:fixed;inset:0;z-index:300;--io:0;background:#000;
  transition:opacity .6s ease,visibility .6s}
#intro.is-done{opacity:0;visibility:hidden;pointer-events:none}
/* 정사각 영상을 화면에 꽉 채운다. object-fit:cover 라 넘치는 쪽만 잘리고
   조리개는 가운데에 그대로 남는다. 끝으로 갈수록 살짝 밀고 들어가야
   "통과한다"로 읽힌다. */
#intro .ivid{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  transform:scale(calc(1 + var(--io) * .28));
  opacity:calc(.2 + var(--io) * .8)}
/* 세로 화면에서는 꽉 채우지 않는다 — cover 로 좌우를 자르면 조리개가 화면을
   넘겨 버려 "작게 시작해 열린다"는 처음 인상이 사라진다. */
@media(max-width:900px){
  #intro .ivid{inset:auto;left:50%;top:50%;translate:-50% -50%;
    width:min(112vmin,112vmax);height:min(112vmin,112vmax);object-fit:contain;
    transform:scale(calc(1 + var(--io) * .34))}
}

#intro .iui{position:absolute;left:0;right:0;bottom:11vh;display:flex;flex-direction:column;
  align-items:center;gap:26px;pointer-events:none;opacity:calc(1 - var(--io) * 1.8)}
#intro .ikicker{font-family:'Space Grotesk',sans-serif;font-size:10px;letter-spacing:.34em;
  color:rgba(237,237,243,.5)}
@media(min-width:640px){#intro .ikicker{font-size:12px}}
#intro .icue{display:flex;flex-direction:column;align-items:center;gap:9px;
  font-family:'Space Grotesk',sans-serif;font-size:9px;letter-spacing:.3em;color:rgba(237,237,243,.3)}
#intro .icue i{display:block;width:1px;height:44px;
  background:linear-gradient(180deg,transparent,rgba(216,186,255,.75));
  animation:cueRun 2.1s cubic-bezier(.5,0,.3,1) infinite}
@keyframes cueRun{0%{transform:scaleY(.2);transform-origin:top;opacity:0}
  40%{opacity:1}100%{transform:scaleY(1);transform-origin:top;opacity:0}}
#intro.show-hint .icue{color:rgba(216,186,255,.72)}

/* ── 기술 페이지 ─────────────────────────────────────────────────── */
.tcard{border-radius:20px;padding:24px 22px;background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.08)}
.tcard h3{font-size:1.2rem;font-weight:800;letter-spacing:-.01em}
.tcard p{margin-top:.8rem;font-size:.9rem;line-height:1.9;color:rgba(237,237,243,.5)}

/* 단계 — 번호가 왼쪽에 서고 선이 아래로 이어진다 */
.steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:0}
.step{position:relative;padding:0 0 30px 58px}
.step:last-child{padding-bottom:0}
.step::before{content:"";position:absolute;left:17px;top:34px;bottom:2px;width:1px;
  background:linear-gradient(180deg,rgba(148,70,255,.5),rgba(148,70,255,.06))}
.step:last-child::before{display:none}
.step-n{position:absolute;left:0;top:0;width:35px;height:35px;border-radius:50%;
  display:grid;place-items:center;font-family:'Space Grotesk',sans-serif;font-size:12px;font-weight:700;
  color:#d8baff;background:rgba(148,70,255,.14);border:1px solid rgba(148,70,255,.42)}
.step h3{font-size:1.1rem;font-weight:800;letter-spacing:-.01em;line-height:1.4;padding-top:5px;
  display:flex;align-items:center;gap:.62rem}
/* 단계 제목 옆 아이콘 — 번호는 순서를, 아이콘은 무슨 일인지를 말한다 */
.step h3 .ico{width:19px;height:19px}
.step p{margin-top:.55rem;font-size:.9rem;line-height:1.9;color:rgba(237,237,243,.5)}
@media(min-width:900px){
  /* 열 방향으로 채운다 — 왼쪽 1·2·3·4, 오른쪽 5·6·7.
     행 방향이면 번호는 가로로 가는데 연결선은 세로로 가서 서로 어긋난다. */
  .steps-wide{display:grid;grid-auto-flow:column;grid-template-columns:1fr 1fr;
    grid-template-rows:repeat(4,auto);gap:0 48px}
  .steps-wide .step:nth-child(4)::before{display:none}
  /* 행 수는 항목 수에 맞춰야 한다 — 7개용(repeat 4)을 5개·4개에 쓰면 오른쪽 칸이 빈다.
     열 끝에 오는 항목의 연결선도 그 자리에서 끊는다. */
  .steps-w5{display:grid;grid-auto-flow:column;grid-template-columns:1fr 1fr;
    grid-template-rows:repeat(3,auto);gap:0 48px}
  .steps-w5 .step:nth-child(3)::before{display:none}
  .steps-w4{display:grid;grid-auto-flow:column;grid-template-columns:1fr 1fr;
    grid-template-rows:repeat(2,auto);gap:0 48px}
  .steps-w4 .step:nth-child(2)::before{display:none}
}

/* 결제 수단 칩 */
.chips{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}
.chips span{border-radius:99px;padding:11px 22px;font-size:.9rem;font-weight:600;
  color:rgba(237,237,243,.88);background:rgba(148,70,255,.13);border:1px solid rgba(148,70,255,.36)}
.chips-quiet span{font-family:'Space Grotesk',sans-serif;font-size:.78rem;letter-spacing:.12em;
  padding:8px 16px;color:rgba(237,237,243,.5);background:rgba(255,255,255,.03);
  border-color:rgba(255,255,255,.09)}

/* x402 를 받치는 곳들 — 로고 파일이 없어 워드마크를 글자로 세운다 */
/* 로고마다 가로세로 비율이 크게 다르다(정사각 심볼 1:1 ~ 가로 워드마크 3.5:1).
   height 로만 맞추면 심볼이 작아 보이므로, 같은 크기의 칸을 주고 칸 안을 채우게 한다.
   → 정사각은 높이에, 가로로 긴 것은 너비에 걸려 서로 비슷한 덩어리로 읽힌다. */
.marks{display:grid;grid-template-columns:repeat(3,1fr);
  gap:26px 18px;place-items:center;max-width:70rem;margin-inline:auto}
@media(min-width:640px){.marks{grid-template-columns:repeat(4,1fr)}}
@media(min-width:1024px){.marks{grid-template-columns:repeat(5,1fr)}}
/* 로고 22개 — 회색 실루엣으로 눕혀 두고, 올리면 원래 색으로 켜진다.
   grayscale 만으로는 어두운 로고가 검은 지면에 묻히므로 brightness(0)+invert(1) 로
   모양을 통째로 흰 실루엣으로 만든 뒤 투명도로 낮춘다. hover 는 필터를 걷어 원색 그대로. */
.marks img{display:block;width:auto;height:auto;max-width:100%;max-height:38px;object-fit:contain;
  filter:grayscale(1) brightness(0) invert(1);opacity:.45;
  transition:filter .28s ease,opacity .28s ease}
.marks img:hover{filter:none;opacity:1}
/* 한 줄에 여섯 개 */
@media(min-width:1280px){
  .marks{grid-template-columns:repeat(6,1fr);gap:34px 22px}
  .marks img{max-height:52px}
}
@media(prefers-reduced-motion:reduce){.marks img{transition:none}}
/* 두 종류가 한 줄에 선다 — SVG 를 가진 브랜드는 마크로, 없는 브랜드는 글자로.
   둘 다 기본은 회색, 올리면 --c(공식 브랜드 색)로 켜진다. */
.marks span{font-family:'Space Grotesk',sans-serif;font-size:.92rem;font-weight:600;
  color:rgba(237,237,243,.4);transition:color .25s}
.marks span:hover{color:var(--c,rgba(237,237,243,.85))}
@media(min-width:1024px){.marks span{font-size:1rem}}
/* 마크는 단색 SVG 를 mask 로 찍는다 — 그래야 회색과 브랜드색을 한 요소에서 오간다 */
.marks i{display:block;width:var(--w,26px);height:26px;
  background:rgba(237,237,243,.42);transition:background-color .25s;
  -webkit-mask:var(--m) center/contain no-repeat;mask:var(--m) center/contain no-repeat}
.marks i:hover{background:var(--c)}
@media(min-width:1024px){.marks i{height:29px}}
/* 통화 띠 — 개수가 많아야 "세계"로 읽힌다. 같은 목록 두 벌을 이어 붙여 끊김 없이 흐르게 한다 */
.ticker{position:relative;overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent)}
.ticker + .ticker{margin-top:14px}
.ticker-row{display:flex;width:max-content;animation:tickerRun 54s linear infinite}
.ticker-rev .ticker-row{animation-direction:reverse;animation-duration:64s}
.ticker:hover .ticker-row{animation-play-state:paused}
.ticker-row span{flex:none;padding:0 17px;font-family:'Space Grotesk',sans-serif;
  font-size:.95rem;font-weight:600;letter-spacing:.07em;color:rgba(237,237,243,.4);
  font-variant-numeric:tabular-nums}
@keyframes tickerRun{to{transform:translateX(-50%)}}
/* 움직임을 줄이라는 설정이면 흐르지 않고 그냥 감싸 놓는다 */
@media(prefers-reduced-motion:reduce){
  .ticker{-webkit-mask-image:none;mask-image:none}
  .ticker-row{animation:none;width:auto;flex-wrap:wrap;justify-content:center;row-gap:10px}
}

/* 22개가 검은 지면에 그냥 떠 있으면 나열로 보인다 — 판 하나에 얹는다 */
.marks-band{border-radius:20px;padding:clamp(26px,3.4vw,38px) clamp(16px,2.4vw,28px);
  background:linear-gradient(180deg,rgba(255,255,255,.04),rgba(255,255,255,.012));
  border:1px solid rgba(255,255,255,.08)}

/* 원본 도식 — 흰 바탕이라 종이처럼 눕힌다 */
.sheet{margin:0;border-radius:16px;overflow:hidden;border:1px solid rgba(255,255,255,.1);
  background:#fff;box-shadow:0 30px 70px rgba(0,0,0,.5)}
.sheet img{display:block;width:100%;height:auto}

/* THE NAME — 새 로고에서 잘라낸 조각을 쓴다. img 라서 회전은 그대로 먹지만
   조리개는 이제 입체라 계속 돌면 어지럽다 — 아주 느리게만 돈다. */
img.mark{display:block;object-fit:contain}
img.aperture-spin{animation-duration:64s}
/* 동서 여섯 장을 받아 내는 한 줄 — 카드와 맺음 사이에 홀로 선다 */
.unity{margin:clamp(52px,6vw,76px) auto clamp(56px,7vw,88px);max-width:44ch;text-align:center;
  font-family:'Sora',sans-serif;font-style:normal;font-weight:600;
  font-size:clamp(19px,2.4vw,27px);line-height:1.62;
  background:linear-gradient(96deg,#ededf3 8%,#d8baff 48%,#9446ff 96%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 8px 30px rgba(148,70,255,.34))}
html[lang="ko"] .unity,html[lang="ja"] .unity,html[lang="zh-CN"] .unity{
  font-family:var(--font-lang),serif;font-style:normal;font-weight:700;letter-spacing:-.01em}

/* ── PC 에서만 작은 글자를 키운다 ────────────────────────────────────
   모바일은 화면이 좁아 지금 크기가 맞다. 넓은 화면에서만 한 단계 올린다.
   본문 0.9~1.0rem 은 큰 모니터에서 작게 읽힌다. */
@media(min-width:1024px){
  .concept h3{font-size:1.18rem}
  .concept .attr{font-size:11px;letter-spacing:.2em}
  .concept .say{font-size:1.14rem}
  .concept .body{font-size:1rem;line-height:1.95}
  .lede{font-size:1.1rem}
  .copy{font-size:1.05rem}
  .gate p{font-size:1rem}
  .gate-n{font-size:12px}
  .flow-copy p{font-size:1.04rem}
  .step h3{font-size:1.18rem}
  .step p{font-size:1rem;line-height:1.95}
  .step-n{font-size:13px}
  .tcard h3{font-size:1.28rem}
  .tcard p{font-size:1rem;line-height:1.95}
  .split h3{font-size:1.44rem}
  .split-sub{font-size:.95rem}
  .bar{font-size:.95rem}
  .stage-card p{font-size:.95rem}
  .daily-a{font-size:10px}
  .ax-n{font-size:10px}
  .nav-links a,.nav-lang{font-size:11px}
  .footer-loc{font-size:.85rem}
}

/* THE NAME 맺음 — 조각을 늘어놓지 않고 로고 하나로 끝낸다 */
.formula-logo{height:clamp(38px,5.2vw,64px);width:auto;display:block;
  filter:drop-shadow(0 6px 26px rgba(148,70,255,.42))}

/* ── 경연 진행 3단계 — 가로로 잇는다 ────────────────────────────────── */
.rounds{list-style:none;margin:0;padding:0;display:grid;gap:18px;grid-template-columns:1fr}
@media(min-width:820px){.rounds{grid-template-columns:repeat(3,1fr);gap:0}}
.round{position:relative;padding:26px 24px;border-radius:18px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08)}
@media(min-width:820px){
  .round{border-radius:0;border-left:0}
  .round:first-child{border-radius:18px 0 0 18px;border-left:1px solid rgba(255,255,255,.08)}
  .round:last-child{border-radius:0 18px 18px 0}
  /* 칸과 칸 사이를 잇는 화살표 — 단계가 이어진다는 뜻 */
  .round:not(:last-child)::after{content:"";position:absolute;right:-7px;top:50%;width:13px;height:13px;
    translate:0 -50%;rotate:45deg;background:#08070c;border-top:1px solid rgba(148,70,255,.5);
    border-right:1px solid rgba(148,70,255,.5);z-index:2}
}
.round-n{font-family:'Space Grotesk',sans-serif;font-size:11px;letter-spacing:.28em;color:rgba(216,186,255,.7)}
.round h3{margin-top:.9rem;font-size:1.24rem;font-weight:800;letter-spacing:-.01em}
.round p{margin-top:.7rem;font-size:.92rem;line-height:1.9;color:rgba(237,237,243,.5)}

/* ── 화면 두 컷을 겹쳐 세운다 ───────────────────────────────────────── */
.shots{position:relative;display:flex;justify-content:center;align-items:flex-start;gap:0}
.shots img{width:min(58%,260px);height:auto;display:block;border-radius:16px;
  border:1px solid rgba(255,255,255,.1);box-shadow:0 34px 80px rgba(0,0,0,.62)}
.shots img:first-child{transform:translateY(14px) rotate(-2.2deg);z-index:2}
.shots img:last-child{margin-left:-13%;transform:rotate(2.4deg)}

/* ── 각주 한 문단 ───────────────────────────────────────────────────── */
.note{border-left:2px solid rgba(148,70,255,.42);padding:4px 0 4px 22px;max-width:66ch}
.note p{font-size:.95rem;line-height:1.95;color:rgba(237,237,243,.46)}
@media(min-width:1024px){.round p{font-size:1rem}.note p{font-size:1.04rem}}

/* 화면 설명에 덧붙는 한 줄 — 본문보다 한 단계 물러나 있게 */
.flow-x{margin-top:.9rem;max-width:36ch;font-size:.85rem;line-height:1.85;
  color:rgba(237,237,243,.36);border-left:2px solid rgba(148,70,255,.3);padding-left:14px}
@media(min-width:1024px){.flow-x{font-size:.9rem}}

/* 공식 유튜브 — GLOBAL 이 대표, 나머지는 그 아래 지역 채널로 한 단계 내려 놓는다 */
.footer-yt{display:flex;flex-direction:column;align-items:center;gap:.45rem;margin-top:.4rem}
.footer-yt .yt-main{display:inline-flex;align-items:center;gap:.5rem;
  color:rgba(237,237,243,.55);transition:color .15s}
.footer-yt .yt-main:hover{color:#d8baff}
.footer-yt .yt-main em{font-family:'Space Grotesk',sans-serif;font-style:normal;
  font-size:11px;font-weight:700;letter-spacing:.22em}
.footer-yt .yt-subs{display:flex;flex-wrap:wrap;justify-content:center;gap:.3rem 0}
.footer-yt .yt-subs a{position:relative;padding:0 .6rem;
  font-family:'Space Grotesk',sans-serif;font-size:9.5px;font-weight:600;letter-spacing:.18em;
  color:rgba(237,237,243,.3);transition:color .15s}
.footer-yt .yt-subs a:hover{color:#d8baff}
.footer-yt .yt-subs a:not(:last-child)::after{content:"";position:absolute;right:0;top:50%;
  translate:0 -50%;width:1px;height:9px;background:rgba(148,70,255,.45)}
@media(min-width:1024px){.footer-yt .yt-main em{font-size:12px}.footer-yt .yt-subs a{font-size:10.5px}}

.footer-mail{margin-top:.15rem}
.footer-mail a{font-family:'Space Grotesk',sans-serif;font-size:11px;letter-spacing:.08em;
  color:rgba(237,237,243,.45);transition:color .15s}
.footer-mail a:hover{color:#d8baff}
@media(min-width:1024px){.footer-mail a{font-size:12px}}

/* ── BI 서체 보정 ────────────────────────────────────────────────────
   Anton 은 굵기가 400 하나뿐이다. 700·800 을 주면 브라우저가 합성 볼드를 만들어
   획이 뭉개진다. 라틴에서는 400 으로 못박는다.
   CJK 는 Anton 에 글리프가 없어 var(--font-lang) 으로 떨어지므로 원래 굵기를 유지한다.
   Tailwind 의 font-extrabold 유틸리티와 명시도가 같아 !important 가 필요하다. */
.font-display,.quote-mark,.formula-inf{font-weight:400 !important;letter-spacing:0 !important}
html[lang="ko"] .font-display,html[lang="ja"] .font-display,
html[lang="zh-CN"] .font-display,html[lang="zh-TW"] .font-display{
  font-family:var(--font-lang),sans-serif;font-weight:800 !important;letter-spacing:-.02em !important}

/* Space Grotesk 는 고정폭이 아니다. 숫자만 폭을 맞춰 표가 흔들리지 않게 한다. */
.chips-quiet span,.step-n,.round-n,.flow-n,.footer-yt em,.bar b{font-variant-numeric:tabular-nums}
