:root{--c-bg: #0d1026;--c-surface: #161a35;--c-surface-alt: #1e2444;--c-border: #2f3760;--c-text: #e9e9f5;--c-muted: #a2a6c8;--c-accent: #8ec5f0;--c-ok: #6fd3ae;--c-warn: #f0c274;--c-alert: #f28d80;--brand: #8b9dff;--brand-dim: #6b7bd6;--c-surface-raised: #252c4f;--moon: #f3dfae;--c-on-accent: #0d1026;--radius: 14px;--radius-lg: 24px;--gap: 1rem;--fs-xs: .8rem;--fs-sm: .85rem;--fs-base: .9rem;--fs-md: .95rem;--fs-lg: 1.05rem;--fs-xl: 1.5rem;--fs-2xl: 2rem;--fs-3xl: 2.75rem;--fs-display: clamp(2.25rem, 6vw, 3.5rem);--sp-1: .35rem;--sp-2: .5rem;--sp-3: .75rem;--sp-4: 1.5rem;--sp-5: 2.5rem;--sp-6: 4rem;--maxw-prose: 34rem;--maxw-wide: 64rem;--font-body: system-ui, -apple-system, "Segoe UI", sans-serif;--font-display: "Fraunces", Georgia, "Times New Roman", serif;color-scheme:dark;font-family:var(--font-body)}@font-face{font-family:Fraunces;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/fraunces-latin-wght-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*{box-sizing:border-box}h1,h2,h3{font-family:var(--font-display);font-weight:500}html,body,#app{height:100%}body{margin:0;background:var(--c-bg);color:var(--c-text);-webkit-font-smoothing:antialiased}button,.btn{font:inherit;color:inherit;cursor:pointer;border:1px solid var(--c-border);background:var(--c-surface-alt);border-radius:var(--radius);padding:.6rem 1rem}.btn{display:block;text-align:center;text-decoration:none}button:hover:not(:disabled),.btn:hover{border-color:var(--c-accent)}button:disabled{opacity:.5;cursor:default}.primary{background:var(--c-accent);border-color:var(--c-accent);color:var(--c-on-accent);font-weight:600}select,input[type=text],input[type=range]{font:inherit;color:inherit;accent-color:var(--c-accent)}select,input[type=text]{background:var(--c-surface-alt);border:1px solid var(--c-border);border-radius:var(--radius);padding:.5rem;width:100%}a{color:var(--c-accent)}.card{background:color-mix(in srgb,var(--c-surface) 88%,transparent);border:1px solid var(--c-border);border-radius:18px;padding:var(--gap)}.muted{color:var(--c-muted)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.btn-lg{padding:.9rem;font-size:var(--fs-lg)}.text-warn{color:var(--c-warn)}.notice{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-3) var(--gap);border-radius:var(--radius);border:1px solid;font-size:var(--fs-base)}.notice strong{font-size:var(--fs-md)}.notice-info{border-color:var(--c-border);background:var(--c-surface);color:var(--c-muted)}.notice-warn{border-color:var(--c-warn);background:color-mix(in srgb,var(--c-warn) 15%,transparent);color:var(--c-warn)}.notice-alert{border-color:var(--c-alert);background:color-mix(in srgb,var(--c-alert) 15%,transparent);color:var(--c-alert)}.hint{font-size:var(--fs-sm);margin:var(--sp-2) 0}.night:before,.night:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:-1}.night:before{background:radial-gradient(circle at 86% -8%,color-mix(in srgb,var(--moon) 13%,transparent),transparent 45%),radial-gradient(circle at 12% 4%,color-mix(in srgb,var(--brand) 10%,transparent),transparent 52%)}.night:after{opacity:.5;background-image:radial-gradient(1.4px 1.4px at 34px 22px,#fff,transparent),radial-gradient(1px 1px at 122px 88px,#fff,transparent),radial-gradient(1.7px 1.7px at 178px 150px,#fff,transparent),radial-gradient(1px 1px at 60px 190px,#fff,transparent),radial-gradient(1.2px 1.2px at 90px 260px,#fff,transparent),radial-gradient(1px 1px at 250px 40px,#fff,transparent),radial-gradient(1.1px 1.1px at 20px 120px,#fff,transparent),radial-gradient(1.5px 1.5px at 150px 30px,#fff,transparent),radial-gradient(1px 1px at 190px 195px,#fff,transparent);background-size:313px 313px,313px 313px,313px 313px,313px 313px,313px 313px,313px 313px,217px 217px,217px 217px,217px 217px}@keyframes pulse{50%{opacity:.3}}.page{max-width:var(--maxw-prose);margin:0 auto;padding:2rem 1rem 4rem;display:flex;flex-direction:column;gap:var(--gap)}
