/* ============================================================
   말고리즘 v3 — 스크롤 기반 인터랙티브 랜딩
   팔레트: standalone 시안(앰버 #FFC83D + 페리윙클 #8B95F2) 승계
   테마: [data-theme="dark"|"light"] — 라이트 매핑은 시안 수동 튜닝값
   ============================================================ */

/* ---------- 1. 토큰 ---------- */

/* 아이콘 마스크 (currentColor를 따라가도록 background로 칠하고 mask로 오린다) */
:root{
  --ico-globe:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M3 12h18'/%3E%3Cpath d='M12 3a14 14 0 0 1 0 18a14 14 0 0 1 0-18z'/%3E%3C/svg%3E");
  --ico-chev:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 9l7 7 7-7'/%3E%3C/svg%3E");
}

:root,
:root[data-theme="dark"] {
  /* 네이티브 컨트롤(select 옵션 팝업, 스크롤바)이 테마를 따라가게 한다 */
  color-scheme:dark;
  /* 네이티브 select 팝업은 select의 background-color를 그대로 쓴다 → transparent 금지 */
  --ctl-bg:#0C0D12;
  --bg-0:#07080C; --bg-1:#0A0B0F; --bg-2:#0C0D12; --bg-3:#0E0F16;
  --bg-4:#111219; --bg-5:#13141C; --bg-6:#16171F;
  --bg-l2a:#161226; --bg-l2b:#121019; --bg-pick:#100F17; --bg-amb:#1A160C;

  --amber:#FFC83D; --amber-lt:#FFD37A; --amber-tx:#FFC83D;
  --peri:#8B95F2;  --peri-dp:#6571EC;
  --pos:#34D399;   --info:#56A4FF; --blue:#3B7DF5;
  --neg:#FF6060;   --neg-lt:#FF5C5C;
  --on-amber:#1A1500;

  --txRGB:255,255,255;
  --tx:rgb(var(--txRGB));
  --tx-9:rgba(var(--txRGB),.9);  --tx-7:rgba(var(--txRGB),.7);
  --tx-6:rgba(var(--txRGB),.6);  --tx-5:rgba(var(--txRGB),.5);
  --tx-4:rgba(var(--txRGB),.4);  --tx-3:rgba(var(--txRGB),.32);

  --ln-2:rgba(var(--txRGB),.18); --ln-1:rgba(var(--txRGB),.1); --ln-0:rgba(var(--txRGB),.06);
  --sh-card:0 40px 90px -30px rgba(0,0,0,.8);
  --glow-peri:0 16px 44px -10px rgba(101,113,236,.7);
  --scrim:rgba(7,8,12,.72);
}

:root[data-theme="light"] {
  color-scheme:light;
  --ctl-bg:#FFFFFF;
  --bg-0:#F7F6F1; --bg-1:#F7F6F1; --bg-2:#EFEDE4; --bg-3:#FFFFFF;
  --bg-4:#FFFFFF; --bg-5:#F4F3ED; --bg-6:#F4F3ED;
  --bg-l2a:#EEEFFB; --bg-l2b:#F6F5FE; --bg-pick:#F8F7FF; --bg-amb:#FAF1D8;

  /* --amber는 배경 채색용, --amber-tx는 텍스트용.
     #E39B12는 밝은 배경에서 2.11:1로 대비 미달이라 텍스트에는 쓸 수 없다. */
  --amber:#E39B12; --amber-lt:#A6791A; --amber-tx:#8A5D06;
  --peri:#4A56D6;  --peri-dp:#6571EC;
  --pos:#12784F;   --info:#1F62B8; --blue:#3B7DF5;
  --neg:#C13B3B;   --neg-lt:#C43F3F;
  --on-amber:#1A1500;

  /* 라이트는 밝은 배경이라 같은 알파가 더 흐리게 읽힘 → 두 단 올림 */
  --txRGB:23,25,35;
  --tx-9:rgba(var(--txRGB),.94); --tx-7:rgba(var(--txRGB),.84);
  --tx-6:rgba(var(--txRGB),.78); --tx-5:rgba(var(--txRGB),.72);
  --tx-4:rgba(var(--txRGB),.66); --tx-3:rgba(var(--txRGB),.58);
  --ln-2:rgba(var(--txRGB),.2); --ln-1:rgba(var(--txRGB),.12); --ln-0:rgba(var(--txRGB),.08);
  --sh-card:0 30px 70px -34px rgba(75,85,150,.5);
  --glow-peri:0 16px 44px -14px rgba(90,102,224,.45);
  --scrim:rgba(247,246,241,.76);
}

/* ---------- 2. 리셋 ---------- */
*,*::before,*::after{box-sizing:border-box}
*{margin:0;padding:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:auto}
body{
  background:var(--bg-0); color:var(--tx);
  font-family:'Pretendard Variable',Pretendard,-apple-system,BlinkMacSystemFont,system-ui,'Apple SD Gothic Neo',sans-serif;
  font-weight:400; line-height:1.7; letter-spacing:-.01em;
  overflow-x:hidden; -webkit-font-smoothing:antialiased;
  transition:background-color .5s ease,color .5s ease;
}
body.no-scroll{overflow:hidden}
img,svg,video{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
ul,ol{list-style:none}
::selection{background:var(--amber);color:var(--on-amber)}
:focus-visible{outline:2px solid var(--amber);outline-offset:3px;border-radius:4px}

.mono{font-family:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:500}
.dim{color:var(--tx-5)}
.pos{color:var(--pos)} .neg{color:var(--neg)} .amber{color:var(--amber-tx)}
.is-blue{color:var(--info)} .is-peri{color:var(--peri)}

.skip{position:fixed;top:-100px;left:16px;z-index:200;padding:10px 16px;background:var(--amber);color:var(--on-amber);font-weight:700;border-radius:8px}
.skip:focus{top:16px}

/* ---------- 3. 레이아웃 ---------- */
.wrap{width:100%;max-width:1240px;margin:0 auto;padding:0 40px;position:relative;z-index:1}
.sec{padding:clamp(72px,10vw,124px) 0;position:relative}
.nameStory[hidden]{display:none}
.nameStory{overflow:hidden;padding-top:clamp(84px,11vw,136px)}
.nameStory::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(60% 72% at 78% 48%,color-mix(in srgb,var(--peri) 15%,transparent),transparent 72%),
    linear-gradient(180deg,transparent,var(--ln-0),transparent);
}
.nameStory__grid{display:grid;grid-template-columns:minmax(0,.9fr) minmax(480px,1.1fr);align-items:center;gap:clamp(42px,7vw,92px)}
.nameStory__copy{position:relative;z-index:2;opacity:0;transform:translateY(22px);transition:opacity .75s ease,transform .75s cubic-bezier(.2,.75,.2,1)}
.nameStory.is-visible .nameStory__copy{opacity:1;transform:none}
.nameStory__title{margin-top:12px}
.nameStory__formula{
  position:relative;display:grid;gap:18px;overflow:hidden;
  margin:34px 0 30px;padding:22px;border:1px solid var(--ln-1);border-radius:20px;
  background:linear-gradient(135deg,color-mix(in srgb,var(--amber) 6%,transparent),transparent 42%),color-mix(in srgb,var(--bg-3) 86%,transparent);box-shadow:var(--sh-card);
}
.nameStory__formula::before{
  content:"";position:absolute;inset:0;pointer-events:none;opacity:.42;
  background-image:linear-gradient(var(--ln-0) 1px,transparent 1px),linear-gradient(90deg,var(--ln-0) 1px,transparent 1px);
  background-size:28px 28px;mask-image:linear-gradient(90deg,#000,transparent 78%)
}
.nameStory__equation{position:relative;display:grid;grid-template-columns:auto auto minmax(120px,1fr) auto auto;align-items:center;gap:12px;padding-bottom:17px;border-bottom:1px solid var(--ln-1)}
.nameStory__word{display:grid;gap:5px;line-height:1}
.nameStory__word b,.nameStory__result{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:clamp(1rem,1.65vw,1.28rem);letter-spacing:.035em}
.nameStory__word--horse b{font-size:clamp(1.45rem,2.7vw,1.9rem);color:var(--amber-tx)}
.nameStory__word small{font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:.12em;color:var(--tx-4);line-height:1.35}
.nameStory__operator{font-family:'JetBrains Mono',monospace;color:var(--tx-3);font-size:1.2rem}
.nameStory mark{color:var(--amber-tx);background:none}
.nameStory__result{font-weight:800;color:var(--tx);white-space:nowrap;padding:9px 11px;border:1px solid color-mix(in srgb,var(--amber) 22%,transparent);border-radius:10px;background:color-mix(in srgb,var(--amber) 9%,transparent)}
.nameStory__relationship{position:relative;display:grid;grid-template-columns:auto minmax(100px,1fr) auto;align-items:center;gap:12px}
.nameStory__node{display:grid;gap:2px;min-width:82px;padding:10px 12px;border:1px solid var(--ln-1);border-radius:11px;background:color-mix(in srgb,var(--bg-2) 85%,transparent)}
.nameStory__node i{font:500 8px/1 'JetBrains Mono',monospace;letter-spacing:.12em;color:var(--amber-tx);font-style:normal}
.nameStory__node b{font:700 11px/1.3 'JetBrains Mono',monospace;letter-spacing:.11em}
.nameStory__bond{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:7px;min-width:0}
.nameStory__bond i{position:relative;height:1px;overflow:visible;background:linear-gradient(90deg,var(--amber),var(--peri))}
.nameStory__bond i:first-child::after{content:"";position:absolute;top:-2px;width:5px;height:5px;border-radius:50%;background:var(--amber);box-shadow:0 0 12px var(--amber);animation:nameStory-signal 2.6s linear infinite}
.nameStory__bond b{font:600 8px/1.25 'JetBrains Mono',monospace;letter-spacing:.1em;text-align:center;color:var(--tx-5)}
.nameStory__signals{position:relative;display:grid;grid-template-columns:repeat(5,1fr);gap:6px}
.nameStory__signals span{padding:6px 4px;border:1px solid var(--ln-0);border-radius:7px;text-align:center;font:500 7px/1.2 'JetBrains Mono',monospace;letter-spacing:.1em;color:var(--tx-5);background:color-mix(in srgb,var(--bg-2) 76%,transparent)}
.nameStory__flow{position:relative;display:flex;align-items:center;justify-content:center;gap:12px;padding-top:15px;border-top:1px solid var(--ln-1);font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:.13em;color:var(--tx-5)}
.nameStory__flow i{font-style:normal;color:var(--tx-3)}
.nameStory__flow strong{color:var(--peri);font-weight:800}
@keyframes nameStory-signal{from{left:0}to{left:calc(100% - 5px)}}
.nameStory__body{max-width:60ch;color:var(--tx-7);font-size:clamp(1rem,1.45vw,1.12rem);line-height:1.82}
.nameStory__body strong{color:var(--tx-9);font-weight:700}
.nameStory__line{margin-top:24px;font-size:10px;letter-spacing:.18em;color:var(--peri)}
.nameStory__visual{
  position:relative;overflow:hidden;border:1px solid var(--ln-1);border-radius:28px;
  aspect-ratio:3/2;background:#050b16;box-shadow:0 40px 100px -36px rgba(16,73,145,.72);
  opacity:0;transform:translateY(28px) scale(.985);transition:opacity .9s .12s ease,transform .9s .12s cubic-bezier(.2,.75,.2,1)
}
.nameStory.is-visible .nameStory__visual{opacity:1;transform:none}
.nameStory__visual::after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;box-shadow:inset 0 0 0 1px rgba(255,255,255,.04),inset 0 -80px 100px -70px rgba(0,0,0,.9)}
.nameStory__visual img{width:100%;height:100%;object-fit:cover;transition:transform .8s cubic-bezier(.2,.75,.2,1)}
.nameStory__visual:hover img{transform:scale(1.025)}
.nameStory__particles{position:absolute;inset:0;z-index:1;width:100%;height:100%;pointer-events:none;mix-blend-mode:screen}
.nameStory__visual figcaption{position:absolute;z-index:3;left:20px;bottom:17px;font-size:9px;letter-spacing:.16em;color:rgba(255,255,255,.62)}
@media(max-width:980px){
  .nameStory__grid{grid-template-columns:1fr;gap:38px}
  .nameStory__copy{max-width:760px}
  .nameStory__visual{width:100%;max-width:820px}
}
@media(max-width:600px){
  .nameStory__formula{gap:14px;padding:16px 14px;margin:26px 0 24px}
  .nameStory__equation{grid-template-columns:auto auto 1fr;gap:9px}
  .nameStory__equation>.nameStory__operator:nth-child(4){display:none}
  .nameStory__result{grid-column:1/-1;text-align:center}
  .nameStory__operator{font-size:1rem}
  .nameStory__relationship{gap:7px}
  .nameStory__node{min-width:68px;padding:9px 8px}
  .nameStory__bond{gap:4px}
  .nameStory__bond b{font-size:7px;letter-spacing:.05em}
  .nameStory__signals{grid-template-columns:repeat(3,1fr)}
  .nameStory__flow{gap:7px;font-size:8px;letter-spacing:.08em}
  .nameStory__visual{border-radius:20px;aspect-ratio:4/3}
  .nameStory__visual img{object-position:40% center}
}
@media(prefers-reduced-motion:reduce){
  .nameStory__copy,.nameStory__visual{opacity:1;transform:none;transition:none}
  .nameStory__particles{display:none}
  .nameStory__visual img{transition:none}
  .nameStory__visual:hover img{transform:none}
  .nameStory__bond i:first-child::after{animation:none;left:50%}
}
/* 스크림은 반드시 캔버스(z 0)보다 위, 콘텐츠(.wrap z 1)보다 아래에 와야 한다.
   .sec은 z-index:auto라서 ::before(z 0)가 DOM 순서상 캔버스 뒤 → 캔버스 위에 그려짐. */
/* 섹션별 스크림은 더 이상 쓰지 않는다 — 경계마다 가로 이음선이 생겼다.
   대신 .veil(뷰포트 고정 단일 레이어)이 전 구간을 담당한다. (§4 참조) */

/* ---------- 4. 배경 레이어 ---------- */
/* 파티클이 본문을 압도하지 않도록 전체 밝기를 눌러둔다 */
.gl{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;opacity:.62}

/* 뷰포트 고정 베일 — 캔버스(z 0)보다 DOM 뒤라서 위에 그려지고, 콘텐츠(.wrap z 1)보다는 아래.
   화면에 고정돼 있어 스크롤해도 섹션 경계에 이음선이 생기지 않는다.
   가운데(=본문이 놓이는 곳)를 가장 많이 눌러 가독성을 확보하고,
   화면 가장자리는 열어둬 파티클이 살아 있게 한다. */
.veil{
  position:fixed;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(132% 108% at 50% 50%,
    color-mix(in srgb,var(--bg-0) 86%,transparent) 0%,
    color-mix(in srgb,var(--bg-0) 66%,transparent) 46%,
    color-mix(in srgb,var(--bg-0) 30%,transparent) 78%,
    transparent 100%);
}
/* 라이트에서는 베일을 다크보다 더 강하게 잡는다.
   밝은 배경 위의 어두운 파티클은 어두운 배경 위의 밝은 파티클보다 본문 글자와
   더 세게 경쟁한다. 특히 48% 스톱이 중요하다 — 반지름이 108% 라 뷰포트의
   위·아래 가장자리가 대략 이 구간에 걸리고, 긴 섹션의 아래쪽 항목이 여기서
   가장 많이 묻힌다. */
:root[data-theme="light"] .veil{
  background:radial-gradient(132% 108% at 50% 50%,
    color-mix(in srgb,var(--bg-0) 78%,transparent) 0%,
    color-mix(in srgb,var(--bg-0) 56%,transparent) 48%,
    color-mix(in srgb,var(--bg-0) 22%,transparent) 80%,
    transparent 100%);
}
.grain{
  position:fixed;inset:0;z-index:3;pointer-events:none;opacity:.035;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");
  mix-blend-mode:overlay;
}
.prog{
  position:fixed;top:0;left:0;right:0;height:2px;z-index:60;
  background:linear-gradient(90deg,var(--peri),var(--amber));
  transform:scaleX(0);transform-origin:0 50%;
}

/* ---------- 5. 프리로더 ---------- */
.pl{
  position:fixed;inset:0;z-index:150;display:grid;place-items:center;
  background:var(--bg-0);transition:opacity .7s ease,visibility .7s;
}
.pl.is-done{opacity:0;visibility:hidden;pointer-events:none}
.pl__inner{text-align:center;display:grid;gap:14px;justify-items:center}
.pl__hex{font-size:26px;color:var(--peri);animation:spinSlow 4s linear infinite}
.pl__word{font-family:'JetBrains Mono',monospace;font-weight:700;font-size:13px;letter-spacing:.34em;color:var(--tx-6)}
.pl__bar{width:180px;height:2px;background:var(--ln-1);overflow:hidden;border-radius:2px}
.pl__bar span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--peri),var(--amber));transition:width .25s ease}
.pl__pct{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--tx-4);letter-spacing:.1em}
@keyframes spinSlow{to{transform:rotate(360deg)}}

/* ---------- 6. 유틸리티 바 + 네비 ---------- */
.util{
  position:relative;z-index:40;display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:9px 40px;background:var(--bg-2);border-bottom:1px solid var(--ln-0);
  font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--tx-5);letter-spacing:.04em;
}
.util__brand{font-weight:700;color:var(--tx-9)}
.util__brand i{font-style:normal;color:var(--amber-tx)}
.util__sep{color:var(--tx-3)}
.util__spacer{flex:1}
.util__note{color:var(--tx-5)}

.nav{
  position:sticky;top:0;z-index:50;
  display:flex;align-items:center;gap:24px;
  padding:14px 40px;border-bottom:1px solid transparent;
  transition:background-color .35s ease,border-color .35s ease,backdrop-filter .35s ease;
}
.nav.is-solid{background:color-mix(in srgb,var(--bg-1) 88%,transparent);border-bottom-color:var(--ln-0);backdrop-filter:blur(14px) saturate(140%)}
.nav__brand{display:flex;align-items:center;gap:12px;flex-shrink:0}
.nav__icon{width:36px;height:36px;border-radius:9px}
.nav__word{height:26px;width:auto;opacity:1}
:root[data-theme="light"] .nav__word,
:root[data-theme="light"] .foot__word{filter:none}
:root[data-theme="dark"] .nav__word,
:root[data-theme="dark"] .foot__word{filter:invert(1) brightness(1.6)}

.nav__links{display:flex;gap:6px;margin-left:auto}
.nav__links a{
  padding:7px 13px;border-radius:999px;font-size:14px;font-weight:500;color:var(--tx-5);
  transition:color .2s,background-color .2s;
}
.nav__links a:hover{color:var(--tx-9);background:var(--ln-0)}
.nav__links a.is-active{color:var(--amber-tx);background:color-mix(in srgb,var(--amber) 12%,transparent)}

.nav__right{display:flex;align-items:center;gap:10px}
/* 언어 선택 — 네비의 pill 언어(.nav__links a / .tglTheme / .btnStore)에 맞춘다.
   ⌄ 같은 텍스트 글리프를 화살표로 쓰면 폰트마다 크기·baseline이 달라져 어긋난다
   → SVG 셰브론을 mask로 넣어 currentColor를 따라가게 한다.
   네이티브 옵션 팝업 색은 :root의 color-scheme이 결정한다 (토큰 섹션 참조). */
.lang{position:relative;display:flex;align-items:center;color:var(--tx-6)}
.lang select{
  appearance:none;-webkit-appearance:none;
  height:34px;max-width:150px;padding:0 30px 0 32px;
  border:1px solid var(--ln-1);border-radius:999px;
  background:var(--ctl-bg);color:currentColor;
  font-family:inherit;font-size:13px;font-weight:500;line-height:1;
  cursor:pointer;
  transition:border-color .2s,color .2s,background-color .2s;
}
.lang:hover{color:var(--tx-9)}
.lang:hover select{border-color:var(--ln-2)}
.lang select:focus-visible{outline:2px solid var(--amber);outline-offset:3px}
.lang select option{background:var(--ctl-bg);color:var(--tx-9);font-size:14px}
.lang select option:checked{color:var(--amber-tx)}

/* 지구본 (좌) · 셰브론 (우) — 둘 다 currentColor 마스크, 세로 중앙 정렬 */
.lang::before,
.lang::after{
  content:'';position:absolute;top:50%;translate:0 -50%;
  pointer-events:none;background:currentColor;
}
.lang::before{
  left:11px;width:15px;height:15px;
  mask:var(--ico-globe) center/contain no-repeat;
  -webkit-mask:var(--ico-globe) center/contain no-repeat;
  opacity:.9;
}
.lang::after{
  right:12px;width:9px;height:9px;
  mask:var(--ico-chev) center/contain no-repeat;
  -webkit-mask:var(--ico-chev) center/contain no-repeat;
  opacity:.65;
}
.srOnly{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

.faq{border-top:0}
.faq__grid{display:grid;grid-template-columns:minmax(260px,.72fr) minmax(0,1.28fr);gap:clamp(44px,8vw,120px);align-items:start}
.faq__intro{position:sticky;top:140px}
.faq__list{border-top:1px solid color-mix(in srgb,var(--ln-1) 58%,transparent)}
.faq details{border-bottom:1px solid color-mix(in srgb,var(--ln-1) 58%,transparent)}
.faq summary{position:relative;padding:25px 48px 25px 0;color:var(--tx-9);font-size:clamp(16px,1.5vw,20px);font-weight:750;line-height:1.45;cursor:pointer;list-style:none}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"＋";position:absolute;right:4px;top:24px;color:var(--amber-tx);font:500 22px/1 "JetBrains Mono",monospace;transition:transform .25s}
.faq details[open] summary::after{transform:rotate(45deg)}
.faq details p{max-width:720px;padding:0 52px 26px 0;color:var(--tx-6);font-size:15px;line-height:1.85}
@media(max-width:760px){
  .faq{isolation:isolate}
  .faq::before{content:'';position:absolute;inset:-56px 0;z-index:0;pointer-events:none;background:radial-gradient(120% 76% at 50% 50%,color-mix(in srgb,var(--bg-0) 96%,transparent) 0%,color-mix(in srgb,var(--bg-0) 88%,transparent) 62%,transparent 100%)}
  .faq__grid{grid-template-columns:1fr;gap:28px}
  .faq__intro{position:static}
  .faq__list{padding:4px 16px 10px;border:1px solid var(--ln-0);border-radius:16px;background:color-mix(in srgb,var(--bg-2) 88%,transparent);box-shadow:0 28px 70px -38px rgba(0,0,0,.9);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
  .faq summary{padding-block:20px}
  .faq summary::after{top:19px}
  .faq details p{padding-right:30px;color:var(--tx-7)}
}
.tglTheme{
  width:34px;height:34px;display:grid;place-items:center;border-radius:999px;
  border:1px solid var(--ln-1);color:var(--tx-6);transition:color .2s,border-color .2s,transform .2s;
}
.tglTheme:hover{color:var(--amber-tx);border-color:var(--amber-tx);transform:rotate(18deg)}
.tglTheme svg{width:17px;height:17px}
:root[data-theme="dark"] .tglTheme__sun{display:none}
:root[data-theme="light"] .tglTheme__moon{display:none}

.btnStore{
  padding:9px 18px;border-radius:999px;font-size:14px;font-weight:700;
  background:var(--amber);color:var(--on-amber);
  transition:transform .2s,box-shadow .2s,filter .2s;
}
.btnStore:hover{transform:translateY(-2px);box-shadow:0 12px 28px -10px color-mix(in srgb,var(--amber) 70%,transparent);filter:brightness(1.06)}

.burger{display:none;width:34px;height:34px;flex-direction:column;justify-content:center;gap:4px;align-items:center}
.burger i{display:block;width:17px;height:1.5px;background:var(--tx-7);border-radius:2px;transition:transform .3s,opacity .3s}
.burger[aria-expanded="true"] i:nth-child(1){transform:translateY(5.5px) rotate(45deg)}
.burger[aria-expanded="true"] i:nth-child(2){opacity:0}
.burger[aria-expanded="true"] i:nth-child(3){transform:translateY(-5.5px) rotate(-45deg)}

.navPanel{
  position:fixed;inset:0;z-index:49;display:none;flex-direction:column;justify-content:center;gap:6px;
  padding:0 32px;background:var(--bg-1);
  opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s;
}
.navPanel.is-open{opacity:1;visibility:visible}
.navPanel a{padding:14px 4px;font-size:26px;font-weight:800;letter-spacing:-.03em;border-bottom:1px solid var(--ln-0)}
.navPanel__cta{color:var(--amber-tx);border-bottom:0!important;margin-top:14px}

/* ---------- 7. 타이포 ---------- */
.eyebrow{
  font-family:'JetBrains Mono',monospace;font-weight:500;font-size:12px;letter-spacing:.14em;
  color:var(--peri);text-transform:uppercase;margin-bottom:18px;
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
}
.eyebrow--gold{color:var(--amber-tx);justify-content:center}
.badge{
  font-family:'Pretendard Variable',Pretendard,sans-serif;font-size:11px;font-weight:700;letter-spacing:0;
  padding:3px 9px;border-radius:5px;background:color-mix(in srgb,var(--amber) 16%,transparent);color:var(--amber-tx);
  text-transform:none;
}
.h2{
  font-size:clamp(1.72rem,4vw,2.62rem);font-weight:800;line-height:1.14;letter-spacing:-.03em;
  margin-bottom:22px;
}
.h2 em{font-style:normal;color:var(--amber-tx)}
.lede{font-size:clamp(.98rem,1.5vw,1.1rem);line-height:1.75;color:var(--tx-7);max-width:60ch}

/* 등장 애니메이션 초기 상태 */
.reveal,.reveal-group>*{opacity:0;transform:translateY(22px)}
.js-off .reveal,.js-off .reveal-group>*{opacity:1;transform:none}

/* ---------- 8. 히어로 ---------- */
.hero{position:relative;padding:clamp(52px,7vw,92px) 0 clamp(64px,8vw,104px);min-height:min(92vh,900px);display:flex;align-items:center}
.hero__media{position:absolute;inset:0;z-index:-1;overflow:hidden}
.hero__still,.hero__video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero__video{opacity:0;transition:opacity 1.2s ease}
.hero__video.is-ready{opacity:1}
.hero__scrim{
  position:absolute;inset:0;
  background:
    linear-gradient(90deg,var(--bg-0) 2%,color-mix(in srgb,var(--bg-0) 72%,transparent) 42%,transparent 78%),
    linear-gradient(180deg,color-mix(in srgb,var(--bg-0) 80%,transparent) 0%,transparent 26%,color-mix(in srgb,var(--bg-0) 92%,transparent) 100%);
}
/* 라이트 테마 = "종이 위 도면" 변형.
   3D는 유지한다 — scene.js가 라이트에서 NormalBlending + 어두운 잉크로 전환하므로
   파티클이 흰 배경 위 도트 드로잉처럼 읽힌다. (다크는 additive 발광) */
/* 이 값을 낮춰 본문 가독성을 확보하려 한 적이 있는데, 배경 효과만 죽고 글자는
   충분히 살아나지 않았다. 파티클과 겹치는 본문은 .textScrim 으로 해당 블록만
   보호한다. 여기는 도면 질감 기준으로만 정한다. */
:root[data-theme="light"] .gl{opacity:.82}
/* 라이트는 안료 파티클이 어두운 값이라 스크림을 다크만큼 세게 걸면 색이 다 죽는다.
   대비는 유지하면서 중앙을 덜 눌러 색조가 보이게 한다. */
:root[data-theme="light"] .grain{opacity:.028;mix-blend-mode:multiply}
:root[data-theme="light"] .hero__media{opacity:.84;filter:saturate(.96) contrast(1.04)}
:root[data-theme="light"] .hero{
  background:
    radial-gradient(90% 120% at 82% 18%,color-mix(in srgb,var(--amber) 13%,transparent) 0%,transparent 62%),
    radial-gradient(70% 90% at 8% 92%,color-mix(in srgb,var(--peri) 11%,transparent) 0%,transparent 60%);
}

/* 캔버스(z 0)보다 위, .wrap(z 1 · DOM 순서상 뒤라 위에 그려짐)보다 아래 */
.hero__veil{
  position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(100deg,
    var(--bg-0) 0%,
    color-mix(in srgb,var(--bg-0) 90%,transparent) 24%,
    color-mix(in srgb,var(--bg-0) 48%,transparent) 44%,
    transparent 64%);
}
/* 라이트에서도 베일은 유지 — 잉크 파티클이 헤드라인에 겹치는 걸 막는다 */
:root[data-theme="light"] .hero__veil{
  background:linear-gradient(100deg,
    var(--bg-0) 0%,
    color-mix(in srgb,var(--bg-0) 92%,transparent) 26%,
    color-mix(in srgb,var(--bg-0) 55%,transparent) 46%,
    transparent 66%);
}
@media (max-width:1080px){
  .hero__veil{background:linear-gradient(180deg,
    color-mix(in srgb,var(--bg-0) 84%,transparent) 0%,
    color-mix(in srgb,var(--bg-0) 60%,transparent) 55%,
    color-mix(in srgb,var(--bg-0) 90%,transparent) 100%)}
}

.hero__grid{display:grid;grid-template-columns:.86fr 1.14fr;gap:52px;align-items:center}
.hero__h1{
  font-size:clamp(2.3rem,6.1vw,3.95rem);font-weight:800;line-height:1.04;letter-spacing:-.035em;
  margin:6px 0 24px;
}
.hero__h1 .ln{display:block;overflow:hidden}
.hero__h1 em{font-style:normal;color:var(--amber-tx)}
.hero__h1 .ch{display:inline-block;will-change:transform}
.hero__lede{font-size:clamp(1rem,1.6vw,1.13rem);line-height:1.72;color:var(--tx-7);max-width:44ch}
.hero__cta{display:flex;gap:12px;flex-wrap:wrap;margin:28px 0 14px}
.store{display:block;transition:transform .25s ease,opacity .25s}
.store img{height:48px;width:auto}
.store:hover{transform:translateY(-3px)}
.hero__fine{font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--tx-5);letter-spacing:.02em}

/* ── 수상 배지 ────────────────────────────────────────────────────────────
   넓으면 알약, 좁으면 배지 카드. 두 상태를 각각 의도적으로 만든다.

   이전에는 flex-wrap:wrap 에 border-radius:999px 를 그대로 두어, 부제가 두 번째
   줄로 내려가는 순간 세로로 늘어난 알약의 양 끝이 거대한 반원이 됐다. 게다가
   1행은 아이콘 뒤에서 시작하고 2행은 왼쪽 끝에서 시작해 두 줄의 축이 어긋났다.
   → 좁은 화면에서는 아이콘을 두 행에 걸치는 그리드로 바꾸고 반경을 줄인다. */
.pill{
  display:inline-flex;align-items:center;gap:10px;
  padding:7px 16px 7px 12px;border-radius:999px;margin-bottom:22px;
  border:1px solid color-mix(in srgb,var(--amber) 38%,transparent);
  background:color-mix(in srgb,var(--amber) 10%,transparent);
  font-size:12.5px;line-height:1.35;max-width:100%;
  transition:transform .25s,background-color .25s,border-color .25s;
}
.pill:hover{
  transform:translateY(-2px);
  background:color-mix(in srgb,var(--amber) 18%,transparent);
  border-color:color-mix(in srgb,var(--amber) 55%,transparent);
}
.pill b{color:var(--amber-tx);font-weight:700;white-space:nowrap}
.pill__ico{font-size:15px;line-height:1;flex:none}
/* 한 줄일 때는 얇은 구분선으로 수상명과 대회명의 위계를 나눈다 */
.pill__sub{
  color:var(--tx-6);font-size:11.5px;word-break:keep-all;
  padding-left:11px;
  border-left:1px solid color-mix(in srgb,var(--amber) 30%,transparent);
}

@media (max-width:600px){
  .pill{
    display:inline-grid;grid-template-columns:auto minmax(0,1fr);
    align-items:center;column-gap:11px;row-gap:3px;
    border-radius:14px;padding:11px 15px;
  }
  .pill__ico{grid-row:1/3;align-self:center;font-size:19px}
  .pill b{grid-column:2;white-space:normal}
  /* 카드에서는 구분선 대신 줄바꿈이 위계를 만든다 */
  .pill__sub{grid-column:2;padding-left:0;border-left:0;line-height:1.45}
}

.hero__down{position:absolute;left:50%;bottom:20px;transform:translateX(-50%);display:grid;gap:8px;justify-items:center;z-index:1}
.hero__down span{font-size:9.5px;letter-spacing:.3em;color:var(--tx-3)}
.hero__down i{display:block;width:1px;height:38px;background:linear-gradient(180deg,var(--amber),transparent);animation:dropLine 2.2s ease-in-out infinite}
@keyframes dropLine{0%,100%{transform:scaleY(.35);opacity:.4;transform-origin:top}50%{transform:scaleY(1);opacity:1;transform-origin:top}}

/* ---------- 9. 카드 공통 ---------- */
/* 카드는 불투명 판이 아니라 "씬을 들여다보는 유리".
   배경을 살짝 투과시키고 backdrop-filter로 뒤 파티클을 부드럽게 번지게 해서,
   3D가 카드 뒤에서 따로 노는 게 아니라 카드 안에 담긴 것처럼 읽히게 한다.
   (scene.js의 FOCUS_KEYS가 형상을 이 카드 뒤로 정렬해 준다) */
.card{
  background:color-mix(in srgb,var(--bg-4) 82%,transparent);
  border:1px solid var(--ln-1);border-radius:16px;
  padding:22px;box-shadow:var(--sh-card);
  backdrop-filter:blur(22px) saturate(126%);
  -webkit-backdrop-filter:blur(22px) saturate(126%);
}
@supports not (backdrop-filter:blur(1px)){
  .card{background:var(--bg-4)}
}
/* 카드 안쪽 셀은 더 불투명하게 — 숫자 가독성 우선 */
.cell,.readout__horse,.readout__gauges,.shap__row,.jCard__stats>div,.vs__side,.chat__bar{
  backdrop-filter:none;-webkit-backdrop-filter:none;
}

/* ---------- 10. 라이브 리드아웃 ---------- */
.readout{display:grid;gap:14px}
.readout__top{display:flex;justify-content:space-between;gap:10px;font-size:11px;flex-wrap:wrap}
.readout__horse{display:flex;align-items:center;gap:13px;padding:14px;background:var(--bg-5);border-radius:11px}
.gate{
  width:32px;height:32px;flex-shrink:0;display:grid;place-items:center;border-radius:9px;
  background:var(--peri-dp);color:#fff;font-weight:800;font-size:15px;
}
.readout__id{flex:1;min-width:0;display:grid;gap:2px}
.readout__id b{font-size:16px;font-weight:700}
.readout__id span{font-size:11px}
.readout__score{text-align:right;flex-shrink:0}
.readout__score i{display:block;font-size:10.5px;color:var(--tx-4);font-style:normal;letter-spacing:.06em}
.readout__score b{font-size:32px;font-weight:800;line-height:1;color:var(--amber-tx);font-variant-numeric:tabular-nums}

.readout__split{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.cell{padding:11px 12px;background:var(--bg-6);border-radius:10px;display:grid;gap:3px}
.cell i{font-family:'JetBrains Mono',monospace;font-style:normal;font-size:10.5px;color:var(--tx-4);letter-spacing:.06em}
.cell b{font-size:21px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}
.cell span{font-size:10.5px}
.cell--amber{background:var(--bg-amb)}
.cell--amber b{color:var(--amber-tx)}

.readout__gauges{display:grid;gap:9px;padding:14px;background:var(--bg-5);border-radius:11px}
.lbl{font-size:10.5px;color:var(--tx-4);letter-spacing:.06em}
.gauge{display:grid;grid-template-columns:62px 1fr auto;gap:10px;align-items:center}
.gauge__k{font-size:11px;color:var(--tx-5)}
.gauge__rail{height:5px;background:var(--ln-1);border-radius:3px;overflow:hidden}
.gauge__rail i{display:block;height:100%;width:0;border-radius:3px;background:linear-gradient(90deg,var(--peri-dp),var(--peri))}
.gauge__rail i.is-alt{background:linear-gradient(90deg,var(--amber-lt),var(--amber))}
.gauge__v{font-size:11px;color:var(--tx-6);white-space:nowrap}

.readout__foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:10.5px}
.tag{padding:3px 9px;border-radius:999px;font-size:10px;white-space:nowrap}
.tag--pos{background:color-mix(in srgb,var(--pos) 14%,transparent);color:var(--pos);border:1px solid color-mix(in srgb,var(--pos) 34%,transparent)}
.tag--peri{background:color-mix(in srgb,var(--peri) 14%,transparent);color:var(--peri);border:1px solid color-mix(in srgb,var(--peri) 34%,transparent)}
.tag--amber{background:color-mix(in srgb,var(--amber) 14%,transparent);color:var(--amber-tx);border:1px solid color-mix(in srgb,var(--amber) 34%,transparent)}

/* ---------- 11. 엔진 밴드 + 마퀴 ---------- */
/* position/z-index가 없으면 캔버스(z 0) 아래로 깔려서 파티클이 글자를 덮는다.
   마퀴처럼 z-index:1을 줘서 띠가 앞에 서고 파티클이 그 뒤로 지나가게 한다. */
.band{
  position:relative;z-index:1;
  background:var(--bg-2);border-block:1px solid var(--ln-0);padding:16px 0;
}
.band__row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--tx-5)}
.band__mark{color:var(--peri);font-size:14px}
.band__ttl{font-size:11px;letter-spacing:.12em;color:var(--peri);text-transform:uppercase}
.band__sep{width:1px;height:12px;background:var(--ln-2)}
.band__txt b{color:var(--tx-9);font-weight:600}

.marquee{overflow:hidden;padding:13px 0;background:var(--bg-1);border-bottom:1px solid var(--ln-0);position:relative;z-index:1}
.marquee__row{display:flex;width:max-content;animation:mq 46s linear infinite}
.marquee__track{display:flex;gap:0}
.marquee__track span{
  font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:500;letter-spacing:.06em;
  color:var(--tx-4);padding:0 22px;white-space:nowrap;position:relative;
}
.marquee__track span::after{content:'·';position:absolute;right:-3px;color:var(--amber-tx);opacity:.5}
@keyframes mq{to{transform:translateX(-50%)}}
.marquee:hover .marquee__row{animation-play-state:paused}

/* ---------- 12. 파이프라인 ---------- */
.sec--pipe{overflow:hidden}
.sec__blueprint{
  position:absolute;left:50%;top:8%;transform:translateX(-50%);
  width:min(128vw,1700px);z-index:-1;opacity:.3;pointer-events:none;
  mask-image:radial-gradient(58% 58% at 50% 46%,#000 0%,transparent 76%);
  -webkit-mask-image:radial-gradient(58% 58% at 50% 46%,#000 0%,transparent 76%);
}
:root[data-theme="light"] .sec__blueprint{opacity:.13}

.pipe{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:44px 0 0}
.pipe__step{padding:24px;background:var(--bg-4);border:1px solid var(--ln-0);border-radius:16px;position:relative;overflow:hidden}
.pipe__step::after{content:'';position:absolute;left:0;top:0;width:100%;height:2px;background:linear-gradient(90deg,var(--peri),transparent)}
.pipe__no{font-size:10.5px;color:var(--peri);letter-spacing:.14em}
.pipe__step h3{font-size:19px;font-weight:800;letter-spacing:-.02em;margin:8px 0 9px}
.pipe__step p{font-size:14px;line-height:1.68;color:var(--tx-6)}
.chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:14px}
.chips li{
  font-family:'JetBrains Mono',monospace;font-size:11px;padding:4px 9px;border-radius:9px;
  background:var(--bg-6);color:var(--tx-5);border:1px solid var(--ln-0);
}

.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:38px}
.stat{padding:20px;background:var(--bg-5);border:1px solid var(--ln-0);border-radius:14px;display:grid;gap:3px}
.stat b{font-size:38px;font-weight:800;line-height:1;color:var(--amber-tx);font-variant-numeric:tabular-nums}
.stat i{font-style:normal;font-size:13px;font-weight:600}
.stat span{font-size:11.5px}

/* ---------- 13. SHAP ---------- */
.shap{margin-top:40px;display:grid;gap:16px}
.shap__head{display:flex;justify-content:space-between;gap:10px;font-size:12px;padding-bottom:14px;border-bottom:1px solid var(--ln-0)}
.shap__list{display:grid;gap:11px}
.shap__row{
  display:grid;grid-template-columns:22px minmax(120px,1.1fr) minmax(90px,1.4fr) 2fr;
  gap:14px;align-items:center;padding:11px 13px;background:var(--bg-5);border-radius:10px;
}
.dir{font-size:11px}
.dir--up{color:var(--pos)} .dir--dn{color:var(--neg)}
.shap__k{font-size:14px;font-weight:600}
.shap__k i{font-family:'JetBrains Mono',monospace;font-style:normal;font-size:10px;color:var(--tx-4);margin-left:4px}
.shap__rail{height:6px;background:var(--ln-1);border-radius:3px;overflow:hidden}
.shap__rail i{display:block;height:100%;width:0;border-radius:3px;background:linear-gradient(90deg,var(--pos),color-mix(in srgb,var(--pos) 55%,var(--info)))}
.shap__rail i.is-neg{background:linear-gradient(90deg,var(--neg),var(--neg-lt))}
.shap__d{font-size:12.5px;color:var(--tx-5);line-height:1.5}
.shap__foot{font-size:11.5px;color:var(--tx-5);text-align:center}

/* ---------- 14. 2열 그리드 ---------- */
/* ── 본문 가림막 ──────────────────────────────────────────────────────────
   배경 파티클과 본문이 겹치는 블록에만 붙인다.

   왜 전역으로 안 푸는가
     .gl 을 통째로 낮추면 배경 효과 자체가 죽는다. .veil 은 뷰포트 중앙 기준
     방사형이라 스크롤 위치에 따라 같은 글자가 보호되기도, 안 되기도 한다.
     → 글자 블록이 자기 뒤만 책임지는 편이 정확하고 부작용이 없다.

   가장자리는 사방 24px 만 균일하게 흘려보낸다. 그러지 않으면 본문 뒤에 판때기를
   깐 티가 난다. 방사형 마스크를 쓰지 않는 이유는, 세로로 긴 블록에서 위아래 끝이
   먼저 흐려져 정작 보호가 필요한 목록 아래쪽이 다시 노출되기 때문이다 —
   .veil 이 겪던 문제와 같다. 그래서 블록 높이와 무관한 고정 폭 페더를 쓴다. */
.textScrim{position:relative;isolation:isolate}
.textScrim::before{
  content:'';position:absolute;inset:-20px -24px;z-index:-1;pointer-events:none;
  background:var(--bg-0);opacity:.74;border-radius:22px;
  --feather:linear-gradient(to bottom,transparent 0,#000 24px,#000 calc(100% - 24px),transparent 100%),
            linear-gradient(to right, transparent 0,#000 24px,#000 calc(100% - 24px),transparent 100%);
  -webkit-mask-image:var(--feather);
  mask-image:var(--feather);
  -webkit-mask-composite:source-in;
  mask-composite:intersect;
}
/* 라이트는 어두운 잉크 파티클이 글자와 더 세게 경쟁하므로 한 단 더 눌러준다 */
:root[data-theme="light"] .textScrim::before{opacity:.84}

.grid2{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center}
.axesList{display:grid;gap:9px;margin-top:24px}
.axesList li{display:grid;grid-template-columns:96px 1fr;gap:14px;align-items:baseline;padding:9px 0;border-bottom:1px solid var(--ln-0)}
.axesList b{font-size:13.5px;font-weight:700;color:var(--info)}
.axesList span{font-size:13px;color:var(--tx-6)}

/* ---------- 15. 레이더 ---------- */
.radarCard{display:grid;gap:14px}
.radarCard__top{display:flex;justify-content:space-between;font-size:11px}
#radarSvg{width:100%;height:auto;color:var(--tx)}
.radar__grid{opacity:.14}
.radar__lbl text{
  font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:500;fill:var(--tx-5);
}
.radar-poly{stroke-width:2;stroke-linejoin:round;fill-opacity:0}
.radar-poly--a{stroke:var(--neg-lt);fill:var(--neg-lt)}
.radar-poly--b{stroke:var(--info);fill:var(--info)}
.radarCard__legend{display:flex;gap:7px;flex-wrap:wrap}
.lg{font-family:'JetBrains Mono',monospace;font-size:10.5px;padding:5px 11px;border-radius:9px;border:1px solid var(--ln-1);color:var(--tx-6)}
.lg--a{border-color:color-mix(in srgb,var(--neg-lt) 45%,transparent);color:var(--neg-lt)}
.lg--b{border-color:color-mix(in srgb,var(--info) 45%,transparent);color:var(--info)}
.lg--add{color:var(--tx-4);border-style:dashed}

/* ---------- 16. A2A ---------- */
.sec--ai{overflow:hidden}
.sec__orb{
  position:absolute;right:-16%;top:4%;width:min(60vw,740px);z-index:-1;
  opacity:.5;pointer-events:none;
}
:root[data-theme="light"] .sec__orb{opacity:.2}

.a2a{margin:44px 0 0;display:grid;gap:6px;justify-items:center}
#a2aSvg{width:100%;max-width:640px;height:auto;color:var(--peri)}
.a2a-link{opacity:.42}
.a2a-node circle{fill:var(--bg-5);stroke:var(--ln-2);stroke-width:1}
.a2a-node--hub circle{fill:var(--peri-dp);stroke:var(--peri);stroke-width:1.5;filter:drop-shadow(0 10px 30px rgba(101,113,236,.55))}
.a2a-node .ico{font-size:19px}
.a2a-node .nm{font-family:'Pretendard Variable',Pretendard,sans-serif;font-size:11.5px;font-weight:700;fill:var(--tx-7)}
.a2a-node .qt{font-family:'JetBrains Mono',monospace;font-size:10.5px;fill:var(--tx-6);paint-order:stroke;stroke:var(--bg-0);stroke-width:3.5px;stroke-linejoin:round}
.a2a-node .hb{font-family:'Pretendard Variable',Pretendard,sans-serif;font-size:17px;font-weight:800;fill:#fff}
.a2a-node .hs{font-family:'JetBrains Mono',monospace;font-size:10.5px;fill:rgba(255,255,255,.72)}
.a2a__link{font-size:12px;color:var(--tx-5);margin-top:10px}

/* ---------- 17. 챗봇 ---------- */
.chat{max-width:640px;margin:26px auto 0;background:var(--bg-3);border-radius:18px;display:grid;gap:14px}
.chat__top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-bottom:13px;border-bottom:1px solid var(--ln-0);font-size:11px}
.chat__ttl{font-size:14px;font-weight:700}
.chat__log{display:grid;gap:10px;min-height:150px}
.chat__msg{
  max-width:84%;padding:11px 14px;font-size:13.5px;line-height:1.62;
  opacity:0;transform:translateY(10px);
}
.chat__msg--me{justify-self:end;background:var(--blue);color:#fff;border-radius:15px 15px 4px 15px}
.chat__msg--ai{justify-self:start;background:var(--bg-5);color:var(--tx-9);border-radius:15px 15px 15px 4px;border:1px solid var(--ln-0)}
.chat__typing{display:none;gap:4px;justify-self:start;padding:12px 15px;background:var(--bg-5);border-radius:15px;border:1px solid var(--ln-0)}
.chat__typing.is-on{display:flex}
.chat__typing i{width:5px;height:5px;border-radius:50%;background:var(--tx-4);animation:blip 1.2s ease-in-out infinite}
.chat__typing i:nth-child(2){animation-delay:.18s}
.chat__typing i:nth-child(3){animation-delay:.36s}
@keyframes blip{0%,60%,100%{opacity:.28;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}
.chat__bar{display:flex;align-items:center;gap:10px;padding:11px 13px;background:var(--bg-5);border:1px solid var(--ln-0);border-radius:13px}
.chat__input{flex:1;font-size:11.5px;color:var(--tx-3)}
.chat__send{width:26px;height:26px;flex-shrink:0;display:grid;place-items:center;border-radius:50%;background:var(--blue);color:#fff;font-size:13px}
.chat__note{font-size:11px;color:var(--tx-5);line-height:1.55;text-align:center}

/* ---------- 18. 깊이 래더 ---------- */
.ladder{display:grid;gap:12px;margin-top:42px}
.ladder__row{padding:24px;border-radius:14px;border:1px solid var(--ln-0);background:var(--bg-5)}
.ladder__row header{display:flex;align-items:center;gap:10px;margin-bottom:11px}
.ladder__lv{font-size:11px;letter-spacing:.14em;color:var(--tx-5)}
.ladder__row h3{font-size:20px;font-weight:800;letter-spacing:-.02em;margin-bottom:8px}
.ladder__row p{font-size:14px;line-height:1.7;color:var(--tx-6)}
.ladder__row--l1 .ladder__lv{color:var(--info)}
.ladder__row--l2{background:linear-gradient(120deg,var(--bg-l2a),var(--bg-l2b));border-color:color-mix(in srgb,var(--peri) 26%,transparent)}
.ladder__row--l2 .ladder__lv{color:var(--peri)}
.ladder__row--you{border-color:color-mix(in srgb,var(--amber) 26%,transparent)}
.ladder__row--you .ladder__lv{color:var(--amber-tx)}
.ladder__gate{
  display:flex;align-items:center;gap:12px;font-size:11px;color:var(--tx-4);padding:4px 0;
}
.ladder__gate::before,.ladder__gate::after{content:'';flex:1;height:1px;background:var(--ln-1)}

/* ---------- 19. 저널 ---------- */
.jHead{display:grid;grid-template-columns:1.1fr .9fr;gap:48px;align-items:end}
.jCards{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:40px}
.jCard{display:grid;gap:14px;align-content:start}
.jCard__hd{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:11px}
.jCard__hd b{font-size:15px;font-weight:700}
.jChart{width:100%;height:auto;color:var(--tx)}
.jChart__ln{stroke:var(--amber-tx)}
.jCard__stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.jCard__stats>div{padding:11px;background:var(--bg-6);border-radius:10px;display:grid;gap:3px}
.jCard__stats i{font-style:normal;font-size:10.5px;color:var(--tx-4);letter-spacing:.05em}
.jCard__stats b{font-size:16px;font-weight:800;font-variant-numeric:tabular-nums}
.jCard--pick{background:linear-gradient(150deg,var(--bg-l2a),var(--bg-pick))}
.vs{display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:center}
.vs__side{padding:13px;border-radius:11px;display:grid;gap:3px;text-align:center;background:var(--bg-6)}
.vs__side i{font-style:normal;font-size:10.5px;color:var(--tx-4)}
.vs__side b{font-size:15px;font-weight:800}
.vs__side--me b{color:var(--pos)}
.vs__side--ai b{color:var(--neg)}
.vs__x{font-size:10px;color:var(--tx-3)}
.vs__head{font-size:15px;font-weight:700;line-height:1.5}
.vs__head b{color:var(--amber-tx)}
.vs__body{font-size:13px;line-height:1.68;color:var(--tx-6)}
.vs__body b{color:var(--tx-9)}
.jNote{font-size:11.5px;color:var(--tx-5);text-align:center;margin-top:30px}

/* ---------- 20. 수상 ---------- */
/* 배경색을 따로 주지 않는다 — 다른 섹션과 색이 갈려 띠처럼 보였다.
   차별화는 3D 황금 수렴(stage 7)과 광선이 담당한다. */
.award{position:relative;padding:clamp(84px,12vw,150px) 0;overflow:hidden;text-align:center}

/* .award는 .sec이 아니라서 .sec::before 스크림이 없었다 → 황금 파티클이
   텍스트를 삼켰다. 텍스트 영역(하단 60%)을 집중적으로 눌러주는 스크림을 둔다.
   캔버스(z 0)보다 뒤 DOM이라 위에 그려지고, .wrap(z 1)보다는 아래다. */
.award::before{
  content:'';position:absolute;inset:0;z-index:0;pointer-events:none;
  /* 상·하단을 마스크로 지워 이웃 섹션과 경계선이 생기지 않게 한다 */
  mask-image:linear-gradient(180deg,transparent 0%,#000 18%,#000 86%,transparent 100%);
  -webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 18%,#000 86%,transparent 100%);
  background:
    radial-gradient(46% 30% at 50% 66%,
      var(--bg-0) 0%,
      color-mix(in srgb,var(--bg-0) 86%,transparent) 52%,
      transparent 82%),
    radial-gradient(84% 66% at 50% 58%,
      color-mix(in srgb,var(--bg-0) 66%,transparent) 0%,
      transparent 80%)!important;
}
/* 위에서 내려오는 광선.
   blur를 먹인 사각형은 좌우 경계가 그대로 보여 조잡했다 →
   전폭 요소 + 타원 radial-gradient 로 바꿔 경계선을 아예 없앤다. */
.award__shaft{
  position:absolute;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(56% 50% at 50% 24%,
      color-mix(in srgb,var(--amber) 13%,transparent) 0%,
      color-mix(in srgb,var(--amber) 5%,transparent) 44%,
      transparent 76%),
    radial-gradient(92% 64% at 50% 52%,
      color-mix(in srgb,var(--amber) 4%,transparent) 0%,
      transparent 72%);
  /* overflow:hidden이 그라디언트를 섹션 경계에서 잘라 가로 직선이 생겼다 →
     위/아래를 마스크로 부드럽게 지워 이웃 섹션과 이어지게 한다. */
  mask-image:linear-gradient(180deg,transparent 0%,#000 26%,#000 84%,transparent 100%);
  -webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 26%,#000 84%,transparent 100%);
}
:root[data-theme="light"] .award__shaft{
  background:
    radial-gradient(56% 50% at 50% 24%,rgba(176,122,12,.12) 0%,rgba(176,122,12,.045) 44%,transparent 76%),
    radial-gradient(92% 64% at 50% 52%,rgba(176,122,12,.04) 0%,transparent 72%);
}
/* 라이트: 다크용 글로우 사진은 종이 배경과 맞지 않으므로 완전히 빼고,
   웜톤 골드 워시 + 미세한 동심원 각인으로 대체한다. */

.award__inner{display:grid;justify-items:center;gap:0}
/* 알파 컷아웃 PNG라 블렌드 모드가 필요 없다 */
/* ── 각인 씰 (SVG) ──
   스톡 3D 트로피 대신 브랜드 모티프를 새긴 코인.
   currentColor 기반이라 다크/라이트에서 자동으로 맞는 금색이 된다. */
.award{
  --seal-hi:#FFE9A8; --seal-mid:var(--amber); --seal-lo:#7A4E00;
}
:root[data-theme="light"] .award{
  --seal-hi:#D9A93A; --seal-mid:#B07A0C; --seal-lo:#6B4604;
}
.seal{
  width:clamp(196px,25vw,272px);margin:2px 0 26px;
  color:var(--amber-tx);
  filter:drop-shadow(0 18px 40px color-mix(in srgb,var(--amber) 28%,transparent));
}
:root[data-theme="light"] .seal{
  filter:drop-shadow(0 14px 30px rgba(140,96,10,.22));
}
.seal__svg{width:100%;height:auto;display:block}
.seal__spin{
  transform-origin:160px 160px;
  animation:sealSpin 48s linear infinite;
}
@keyframes sealSpin{to{transform:rotate(90deg)}}
.seal__year{
  font-family:'JetBrains Mono',monospace;font-size:15px;font-weight:700;
  letter-spacing:.22em;fill:currentColor;opacity:.8;
}
@media (prefers-reduced-motion:reduce){ .seal__spin{animation:none} }
.award__ttl{
  font-size:clamp(2.1rem,5.6vw,3.5rem);font-weight:800;letter-spacing:-.035em;line-height:1.18;
  padding-bottom:.08em;
  background:linear-gradient(180deg,var(--amber-lt),var(--amber) 58%,color-mix(in srgb,var(--amber) 62%,#8a5a00));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.award__ttl span{display:block;margin-top:.3em;font-size:.46em;font-weight:700;letter-spacing:.025em;line-height:1.3;color:var(--amber-tx)}
/* 라이트에서는 그라디언트를 어둡게 — 밝은 골드는 흰 배경에서 읽히지 않는다 */
:root[data-theme="light"] .award__ttl{
  background:linear-gradient(180deg,#B07A0C,#8A5D06 58%,#6B4604);
  -webkit-background-clip:text;background-clip:text;
}
.award__ctx{font-family:'JetBrains Mono',monospace;font-size:clamp(11px,1.5vw,13px);letter-spacing:.08em;color:var(--tx-7);margin-top:14px}
.award__body{font-size:clamp(.95rem,1.5vw,1.06rem);line-height:1.78;color:var(--tx-7);max-width:52ch;margin-top:24px}
.award__rule{width:min(280px,60%);height:1px;margin-top:40px;background:linear-gradient(90deg,transparent,var(--amber),transparent);opacity:.55}

/* ---------- 21. CTA ---------- */
.cta{padding:clamp(72px,10vw,124px) 0;position:relative;border-top:0}
.cta__grid{display:grid;grid-template-columns:1.1fr .9fr;gap:48px;align-items:center}
.cta__ttl{font-size:clamp(1.9rem,4.6vw,3rem);font-weight:800;line-height:1.1;letter-spacing:-.035em}
.cta__ttl em{font-style:normal;color:var(--amber-tx)}
.cta__sub{font-size:clamp(1rem,1.6vw,1.15rem);color:var(--tx-6);margin-top:16px}
/* keep-all: 좁은 화면에서 '심층 분석' 이 '심층 분 / 석' 으로 쪼개지는 것을 막는다.
   한글은 기본적으로 글자 단위로 끊기므로 명시하지 않으면 단어 중간에서 줄이 바뀐다. */
.cta__fine{font-size:11px;color:var(--tx-5);margin-top:18px;word-break:keep-all}
.cta__right{display:grid;justify-items:center;gap:22px}
.cta__mascot{width:min(240px,52vw);height:auto;animation:floatSlow 6s ease-in-out infinite}
/* 두 스토어 배지 원본은 폭은 같지만 높이가 달라 비율이 다르다
   (AppStore 974×289 = 3.37 / GooglePlay 974×309 = 3.15).
   세로로 쌓는 CTA에서는 높이를 맞추면 폭이 11px 어긋나 보이므로 폭 기준으로 정렬한다.
   (가로로 나란한 히어로는 반대로 높이 기준이 맞다) */
.cta__stores{display:grid;gap:10px;justify-items:stretch}
.cta__stores .store img{width:100%;height:auto}
.cta__stores .store{width:170px}
@keyframes floatSlow{0%,100%{transform:translateY(0)}50%{transform:translateY(-13px)}}

/* ---------- 22. 푸터 ---------- */
.foot{padding:44px 0 56px;background:var(--bg-1);border-top:1px solid var(--ln-0);position:relative;z-index:1}
.foot__top{display:flex;align-items:center;gap:26px;flex-wrap:wrap;padding-bottom:26px;border-bottom:1px solid var(--ln-0)}
.foot__brand{display:flex;align-items:center;gap:14px}
.foot__icon{width:44px;height:44px;border-radius:11px}
.foot__word{height:30px;width:auto;opacity:1}
.foot__nav{display:flex;gap:18px;margin-left:auto;flex-wrap:wrap}
.foot__nav a{font-size:13px;color:var(--peri);transition:opacity .2s}
.foot__nav a:hover{opacity:.7;text-decoration:underline}
.foot__legal{font-size:12px;line-height:1.72;color:var(--tx-5);margin-top:22px;max-width:78ch}
.foot__legal b{color:var(--tx-7);font-weight:600}
.foot__mark{font-size:11.5px;color:var(--tx-4);margin-top:14px}

.toTop{
  position:fixed;right:22px;bottom:22px;z-index:45;width:42px;height:42px;border-radius:50%;
  background:var(--bg-5);border:1px solid var(--ln-1);color:var(--tx-6);font-size:17px;
  opacity:0;visibility:hidden;transform:translateY(10px);
  transition:opacity .3s,visibility .3s,transform .3s,color .2s,border-color .2s;
}
.toTop.is-show{opacity:1;visibility:visible;transform:none}
.toTop:hover{color:var(--amber-tx);border-color:var(--amber-tx)}

/* ---------- 23. 반응형 ---------- */
@media (max-width:1080px){
  .hero__grid,.grid2,.jHead,.jCards,.cta__grid{grid-template-columns:1fr}
  .hero__grid,.grid2{gap:40px}
  .jHead{gap:20px;align-items:start}
  .stats{grid-template-columns:repeat(2,1fr)}
  .pipe{grid-template-columns:1fr}
  .cta__grid{gap:36px}
  /* 1열로 접히면 카피와 스토어 배지가 세로로 쌓인다.
     이때 왼쪽 정렬을 유지하면 마스코트만 가운데에 있고 배지가 한쪽으로 쏠려
     축이 어긋나 보인다. 세로 스택에서는 전부 가운데로 맞춘다. */
  .cta__grid{text-align:center}
  .cta__right{justify-items:center}
  .cta__stores{justify-items:center}
}
@media (max-width:1120px){
  .nav__links{display:none}
  /* 오른쪽으로 미는 힘은 .nav__links 의 margin-left:auto 가 갖고 있었다.
     그 메뉴가 숨는 순간 마진도 같이 사라져서 로고와 컨트롤이 왼쪽에 뭉치고
     오른쪽에 죽은 공간이 최대 530px 까지 생겼다(1000px 뷰포트 기준).
     바로 위 유틸바는 양끝 정렬이라 축까지 어긋나 보인다.
     컨트롤이 항상 오른쪽 끝을 잡도록 여기서 다시 밀어준다. */
  .nav__right{margin-left:auto}
  .btnStore{display:none}
  .burger{display:flex}
  .navPanel{display:flex}
  .shap__row{grid-template-columns:20px 1fr;gap:8px 12px}
  .shap__rail{grid-column:1/-1;order:3}
  .shap__d{grid-column:1/-1;order:4}
}
@media (max-width:720px){
  .wrap{padding:0 22px}
  .util{padding:8px 22px;font-size:10px}
  .util__note{display:none}
  .nav{gap:14px;padding:12px 22px}
  .nav__right{gap:7px;margin-left:auto}
  .lang select{width:42px;padding:0;color:transparent}
  .lang::before{left:13px}
  .lang::after{display:none}
  .hero{min-height:auto;padding-top:36px}
  .hero__still,.hero__video{object-position:64% center}
  .gl{opacity:.88}
  .veil{background:radial-gradient(145% 115% at 50% 50%,color-mix(in srgb,var(--bg-0) 64%,transparent) 0%,color-mix(in srgb,var(--bg-0) 38%,transparent) 48%,color-mix(in srgb,var(--bg-0) 12%,transparent) 80%,transparent 100%)}
  .hero__veil{background:linear-gradient(180deg,color-mix(in srgb,var(--bg-0) 68%,transparent) 0%,color-mix(in srgb,var(--bg-0) 30%,transparent) 58%,color-mix(in srgb,var(--bg-0) 72%,transparent) 100%)}
  :root[data-theme="light"] .hero__veil{background:linear-gradient(180deg,color-mix(in srgb,var(--bg-0) 42%,transparent) 0%,color-mix(in srgb,var(--bg-0) 12%,transparent) 58%,color-mix(in srgb,var(--bg-0) 48%,transparent) 100%)}
  .grain{display:none}
  .store img{height:42px}
  .readout__split,.jCard__stats{grid-template-columns:1fr}
  .gauge{grid-template-columns:56px 1fr;gap:6px 10px}
  .gauge__v{grid-column:1/-1}
  .axesList li{grid-template-columns:1fr;gap:2px}
  .vs{grid-template-columns:1fr;gap:8px}
  .vs__x{justify-self:center}
  .sec__orb{right:-40%;width:120vw;opacity:.2}
  .a2a-node .qt{font-size:9px}
  .marquee__track span{padding:0 15px}
}
@media (max-width:480px){
  .hero__h1{font-size:2.05rem}
  .h2{font-size:1.58rem}
  .navPanel a{font-size:21px;padding:11px 4px}
  .card{padding:18px}
  .stats{gap:10px}
  .stat{padding:18px}
}
@media (max-width:360px){
  .nav__icon{display:none}
  .nav__word{display:block;height:23px}
  .nav__brand{gap:0}
}

/* ---------- 24. 접근성: 모션 축소 ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;scroll-behavior:auto!important;
  }
  .reveal,.reveal-group>*,.chat__msg{opacity:1!important;transform:none!important}
  .pl{display:none}
  .hero__down i{animation:none}
  .marquee__row{animation:none}
  .cta__mascot{animation:none}
}

/* 라이트 테마에서 스크린 블렌드 이미지 보정 */
:root[data-theme="light"] .hero__scrim{
  background:
    linear-gradient(90deg,var(--bg-0) 4%,color-mix(in srgb,var(--bg-0) 80%,transparent) 46%,color-mix(in srgb,var(--bg-0) 30%,transparent) 100%),
    linear-gradient(180deg,color-mix(in srgb,var(--bg-0) 70%,transparent) 0%,transparent 30%,var(--bg-0) 100%);
}

/* ---------- 25. 웨이팅리스트 (ja / ms / es 전용) ---------- */
.wl__grid{display:grid;grid-template-columns:1fr 1fr;gap:52px;align-items:center}
.wl__badge{
  display:inline-flex;align-items:center;gap:8px;margin-bottom:18px;
  padding:6px 14px;border-radius:999px;
  border:1px solid color-mix(in srgb,var(--peri) 38%,transparent);
  background:color-mix(in srgb,var(--peri) 11%,transparent);
  font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.06em;
  color:var(--peri);
}
.wl__badge::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;
  animation:wlPulse 2.4s ease-in-out infinite}
@keyframes wlPulse{0%,100%{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}
.wl__promise{margin-top:16px;font-size:14.5px;line-height:1.75;color:var(--tx-6)}

.wl__form{display:grid;gap:12px;padding:24px}
.wl__label{font-size:13px;font-weight:600;color:var(--tx-9)}
.wl__row{display:grid;grid-template-columns:1fr auto;gap:9px}
.wl__input{
  height:46px;padding:0 15px;border-radius:11px;
  border:1px solid var(--ln-1);background:var(--bg-5);color:var(--tx);
  font-family:inherit;font-size:15px;
  transition:border-color .2s,background-color .2s;
}
.wl__input::placeholder{color:var(--tx-4)}
.wl__input:focus{outline:none;border-color:var(--amber);background:var(--bg-6)}
.wl__submit{
  height:46px;padding:0 22px;border-radius:11px;
  background:var(--amber);color:var(--on-amber);
  font-size:14.5px;font-weight:700;white-space:nowrap;
  transition:transform .2s,filter .2s,opacity .2s;
}
.wl__submit:hover:not(:disabled){transform:translateY(-2px);filter:brightness(1.06)}
.wl__submit:disabled{opacity:.55;cursor:progress}
.wl__consent{font-size:11px;line-height:1.6;color:var(--tx-5)}
.wl__msg{font-size:13px;line-height:1.6;min-height:1.2em}
.wl__msg.is-ok{color:var(--pos)}
.wl__msg.is-err{color:var(--neg)}
.wl__note{margin-top:14px;font-size:11.5px;color:var(--tx-5);text-align:center}

@media (max-width:1080px){ .wl__grid{grid-template-columns:1fr;gap:34px} }
@media (max-width:560px){ .wl__row{grid-template-columns:1fr} }
