@font-face{font-family:Inter;src:url("fonts/Inter-Regular.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Inter;src:url("fonts/Inter-Medium.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:Inter;src:url("fonts/Inter-SemiBold.woff2") format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:Inter;src:url("fonts/Inter-Bold.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}

:root,[data-theme="dark"]{
  --navy:#0B1220;--bg:#0B1220;--bg-2:#10192C;--card:#141C30;--card-2:#1B2740;
  --ink:#E8EEF8;--muted:#B4C0D8;--line:#2C3B58;
  --teal:#0F9B8E;--indigo:#6366F1;--green:#22C55E;--amber:#F59E0B;
  --teal-ink:#8EFFF4;--indigo-ink:#D4D9FF;--green-ink:#C8FFD8;--amber-ink:#FFE7A8;
  --shadow:0 24px 60px rgba(0,0,0,.35);--radius:22px;
  color-scheme:dark;
}
[data-theme="light"]{
  --bg:#F4F0E7;--bg-2:#FFFCF6;--card:#FFFFFF;--card-2:#F7F1E6;
  --ink:#0B1220;--muted:#3C4A63;--line:#E3D7C6;
  --teal-ink:#0C6E64;--indigo-ink:#3730A3;--green-ink:#166534;--amber-ink:#92400E;
  --shadow:0 18px 40px rgba(11,18,32,.08);
  color-scheme:light;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:
  radial-gradient(900px 420px at 0% -10%,rgba(15,155,142,.18),transparent 55%),
  radial-gradient(800px 420px at 100% 0%,rgba(99,102,241,.16),transparent 50%),
  var(--bg);
  color:var(--ink);font:16px/1.55 Inter,ui-sans-serif,system-ui,sans-serif}
img,svg{max-width:100%}
a{color:var(--teal-ink)}
a:hover{color:var(--ink)}
:focus-visible{outline:3px solid var(--amber);outline-offset:3px}
.skip{position:absolute;left:12px;top:-40px;background:var(--amber);color:var(--navy);padding:8px 12px;z-index:20}
.skip:focus{top:12px}

.nav{position:sticky;top:0;z-index:10;display:flex;gap:16px;align-items:center;justify-content:space-between;
  padding:14px 28px;background:color-mix(in srgb,var(--bg) 84%,transparent);backdrop-filter:blur(16px);
  border-bottom:1px solid var(--line)}
.brand{display:flex;gap:10px;align-items:center;font-weight:700;color:var(--ink);text-decoration:none;letter-spacing:-.02em}
.brand i{width:18px;height:18px;display:inline-block;background:conic-gradient(from 20deg,var(--teal),var(--indigo),var(--green),var(--amber),var(--teal));clip-path:polygon(50% 0,100% 38%,78% 100%,22% 100%,0 38%);border-radius:2px}
.nav-links{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.nav a,.nav button,button.ghost,a.ghost{border:1px solid var(--line);background:var(--card);color:var(--ink);
  border-radius:999px;padding:8px 12px;font:600 13px/1 Inter,sans-serif;text-decoration:none;cursor:pointer}
.nav a.solid,a.solid,button.solid{background:var(--teal);color:#04221F;border-color:transparent}
a.amber{background:var(--amber);color:#2A1903;border-color:transparent;text-decoration:none}
a.indigo{background:var(--indigo);color:white;border-color:transparent;text-decoration:none}
a.green{background:var(--green);color:#05210F;border-color:transparent;text-decoration:none}

.wrap{width:min(1180px,calc(100% - 32px));margin:0 auto}
.hero{display:grid;grid-template-columns:1.15fr .85fr;gap:28px;align-items:center;padding:42px 0 18px}
.kicker{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:0 0 12px}
.pill{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:4px 10px;font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;background:var(--accent,var(--teal));color:var(--navy)}
.pill.soft{background:transparent;color:var(--accent,var(--teal-ink));border:1px solid var(--accent,var(--teal))}
h1{font-size:clamp(40px,6vw,68px);line-height:.98;letter-spacing:-.045em;margin:0 0 14px}
.lede{font-size:18px;color:var(--muted);max-width:62ch}
.rule-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:22px 0}
.rule{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:12px 14px}
.rule strong{display:block}
.rule span{color:var(--muted);font-size:14px}
.cta-row{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
.cta-row a{display:inline-flex;align-items:center;border-radius:12px;padding:12px 14px;font-weight:700;text-decoration:none}

.stage{position:relative;min-height:420px}
.stage svg.orbits{width:min(100%,520px);height:auto;display:block;margin:0 auto}
.spin{transform-box:view-box;transform-origin:center;animation:spin 46s linear infinite}
.spin-rev{transform-box:view-box;transform-origin:center;animation:spin 68s linear infinite reverse}
.pulse-dot{animation:twinkle 2.8s ease-in-out infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes twinkle{50%{opacity:.35}}

.controls{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:10px 0 18px}
.controls input{flex:1 1 260px;background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:14px;padding:14px 16px;font:16px Inter,sans-serif}
.filters{display:flex;flex-wrap:wrap;gap:8px}
.filters button{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:999px;padding:8px 12px;font:600 13px Inter,sans-serif;cursor:pointer}
.filters button[aria-pressed="true"]{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.count{color:var(--muted);font-size:14px}

.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;padding-bottom:20px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);display:flex;flex-direction:column;min-width:0}
.card[hidden]{display:none}
.poster{height:168px;overflow:hidden;background:#10192C}
.poster-svg{width:100%;height:210px;display:block}
.card-body{padding:14px 16px 16px;display:flex;flex-direction:column;gap:8px;flex:1}
.meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:12px;font-weight:700}
.num{background:var(--accent);color:var(--navy);border-radius:8px;padding:2px 7px}
.cat{color:var(--accent)}
.kid{margin-left:auto;color:var(--green-ink);border:1px solid color-mix(in srgb,var(--green) 55%,var(--line));border-radius:999px;padding:2px 8px}
.card h2{font-size:20px;letter-spacing:-.03em;margin:0}
.card p{margin:0;color:var(--muted);font-size:14.5px}
.mini{display:flex;gap:6px;align-items:center;color:var(--muted);font-size:12px}
.mini i{width:8px;height:8px;border-radius:99px;background:var(--accent);display:block;animation:twinkle 2.4s ease-in-out infinite}
.mini i:nth-child(2){animation-delay:.4s}.mini i:nth-child(3){animation-delay:.8s}.mini i:nth-child(4){animation-delay:1.2s}
.card .open{margin-top:auto;color:var(--navy);background:var(--accent);text-decoration:none;font-weight:700;border-radius:12px;padding:10px 12px;text-align:center}

.section{padding:28px 0 10px}
.section h2{font-size:clamp(28px,4vw,42px);letter-spacing:-.04em;margin:0 0 8px}
.section .sub{color:var(--muted);max-width:70ch}

.flow{position:relative;--n:4;margin-top:18px}
.flow ol{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(var(--n),1fr);gap:14px;position:relative;z-index:1}
.step{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:14px;min-height:150px}
.step .n{width:42px;height:42px;border-radius:14px;display:grid;place-items:center;font-weight:800;background:var(--bg);border:2px solid var(--accent);color:var(--ink);
  animation:pop calc(var(--n) * 1.15s) ease-in-out infinite;animation-delay:calc(var(--i) * 1.15s)}
.step h3{margin:10px 0 4px;font-size:16px}
.step p{margin:0;color:var(--muted);font-size:14px}
.flow-beam{position:absolute;z-index:2;top:33px;left:6%;width:18px;height:8px;border-radius:99px;background:var(--accent);
  box-shadow:0 0 18px var(--accent);animation:beam calc(var(--n) * 1.15s) linear infinite;pointer-events:none}
@keyframes beam{from{left:6%}to{left:calc(94% - 18px)}}
@keyframes pop{0%,100%{transform:scale(1);box-shadow:none}12%{transform:scale(1.08);box-shadow:0 0 0 6px color-mix(in srgb,var(--accent) 28%,transparent)}}

.panel{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:16px}
pre,code{font-family:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
pre{white-space:pre-wrap;margin:0}
pre[hidden]{display:none !important}
.code{background:#0B1220;color:#E8EEF8;border-radius:14px;padding:14px;overflow:auto;font-size:13px}

.gem-hero{display:grid;grid-template-columns:1.1fr .9fr;gap:28px;align-items:center;padding:28px 0}
.gem-hero h1{font-size:clamp(36px,5vw,60px)}
.art-frame{background:#10192C;border-radius:28px;padding:10px;box-shadow:var(--shadow);border:1px solid #24344f}
.art-frame svg{width:100%;height:auto;display:block}
.never{margin:12px 0 0;padding:0;list-style:none;display:grid;gap:6px}
.never li{background:var(--card);border-left:4px solid var(--accent);padding:8px 10px;border-radius:10px;color:var(--muted)}

.split{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.io{border-radius:18px;padding:14px;border:1px solid var(--line);background:var(--card)}
.io h3{margin:0 0 8px}
.io.in{border-top:4px solid var(--indigo)}
.io.out{border-top:4px solid var(--green)}
.io pre{font-size:13px;color:var(--ink)}
.instr-head{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:8px}
.instr-head button,.copy{background:var(--accent,var(--teal));color:var(--navy);border:0;border-radius:12px;padding:10px 12px;font-weight:800;cursor:pointer}
.instructions{max-height:460px;overflow:auto;background:#0B1220;color:#E8EEF8;border-radius:14px;padding:14px;font-size:13px}
.remix{border-left:6px solid var(--amber);background:var(--card);border-radius:18px;padding:16px}
.related{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.related a{display:block;text-decoration:none;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:16px;padding:12px}
.related a span{display:block;color:var(--accent);font-size:12px;font-weight:700}
footer{padding:28px 0 48px;color:var(--muted);font-size:14px}
footer nav{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:8px}
#empty{display:none;padding:28px;text-align:center;border:1px dashed var(--line);border-radius:18px}
#empty:not([hidden]){display:block}

.sheet .gem-block{break-before:page;padding-top:12px}
.sheet .instructions{max-height:none;background:transparent;color:inherit;border:1px solid var(--line)}

.poster-svg .drift{animation:drift 7s ease-in-out infinite}
.poster-svg .driftb{animation:drift 9s ease-in-out infinite reverse}
.poster-svg .draw{animation:march 1.1s linear infinite}
.poster-svg .twinkle{animation:twinkle 2.6s ease-in-out infinite}
@keyframes drift{50%{transform:translateY(-6px)}}
@keyframes march{to{stroke-dashoffset:-28px}}

@media(max-width:980px){
  .hero,.gem-hero,.grid,.split,.related,.rule-row{grid-template-columns:1fr}
  .grid{grid-template-columns:1fr 1fr}
  .flow ol{grid-template-columns:1fr}
  .flow-beam{display:none}
  .step .n{animation:none}
  .nav{padding:12px}
}
@media(max-width:640px){.grid{grid-template-columns:1fr}.stage{min-height:0}}
@media print{
  .no-print,.flow-beam,.nav{display:none !important}
  body{background:#fff !important;color:#0B1220 !important}
  .card,.step,.io,.panel,.remix{break-inside:avoid;box-shadow:none}
  a{color:#0B1220;text-decoration:none}
  .instructions{max-height:none;background:#fff;color:#0B1220;border:1px solid #ccc}
  .poster-svg .drift,.poster-svg .driftb,.poster-svg .draw,.spin,.spin-rev,.pulse-dot{animation:none !important}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none !important;transition:none !important;scroll-behavior:auto !important}
}
