:root{color-scheme:light;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}body{margin:0;font:14px system-ui,sans-serif;background:#fafaf8}img{max-width:100%}[hidden]{display:none!important}
/* Layout: full-screen WebGL sky you can steer -> DOM labels -> top bar -> hero (first visit) -> bottom dock
   (scale + time) -> sheets (options, birth form, step-by-step chart). Single dark theme: it is the night sky. */
:root {
  --night: #04060c; --ink: #e9ecf4; --dim: #9aa4bb; --sun: #e6b872; --chart: #8ea2d4; --guide: #b7a6ee;
  --panel: rgba(9, 13, 24, 0.92); --edge: rgba(160, 180, 230, 0.2);
  --display: "Jost", "Futura", "Avenir Next", system-ui, sans-serif;
  --body: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;
  --glyph: "Noto Sans Symbols 2", "Apple Symbols", "Segoe UI Symbol", sans-serif;
  --cjk: "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Microsoft YaHei", sans-serif;
  color-scheme: dark;
}
html, body { background: var(--night); height: 100%; overflow: hidden; }
body { color: var(--ink); font: 400 1rem/1.5 var(--body); }
#sky { position: fixed; inset: 0; width: 100%; height: 100%; display: block; touch-action: none; opacity: 0; transition: opacity 1.2s ease; }
#sky.ready { opacity: 1; }
#labels { position: fixed; inset: 0; pointer-events: none; overflow: hidden; }
.scrim { position: fixed; inset: 0; pointer-events: none; background: radial-gradient(ellipse 70% 55% at 0% 100%, rgba(4, 6, 12, .62), rgba(4, 6, 12, 0)); transition: opacity .6s; }
.lbl { position: absolute; left: 0; top: 0; white-space: nowrap; will-change: transform, opacity; opacity: 0;
  font: 400 10px/1 var(--mono); letter-spacing: .16em; text-transform: uppercase; color: var(--chart); text-shadow: 0 0 4px var(--night), 0 0 8px var(--night); }
.lbl.sign { font: 18px/1 var(--glyph); letter-spacing: 0; color: var(--sun); }
.lbl.term { font: 400 9.5px/1 var(--cjk); letter-spacing: .06em; color: var(--sun); text-transform: none; }
.lbl.guide { color: var(--guide); }
.lbl.body { color: var(--ink); letter-spacing: .1em; margin-top: -16px; }
.lbl.cardinal { font: 500 13px/1 var(--mono); color: var(--sun); }
.lbl.asc { font: 600 12px/1 var(--mono); color: var(--night); background: var(--sun); padding: 4px 7px; border-radius: 4px; text-shadow: none; letter-spacing: .06em; }
.lbl.mc { background: rgba(230, 184, 114, .75); }
button, select, input { font: inherit; color: inherit; }
button { cursor: pointer; }
:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
.pill { font: 400 .72rem/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; background: var(--panel);
  border: 1px solid var(--edge); border-radius: 999px; padding: .7rem .95rem; }
.chip { font: 500 .62rem/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--night); background: var(--sun); border-radius: 4px; padding: .2rem .35rem; vertical-align: middle; }
.bar { position: fixed; top: calc(env(safe-area-inset-top, 0px) + 10px); left: 12px; right: 12px; display: flex; justify-content: space-between; align-items: center; gap: .5rem; pointer-events: none; }
.bar > * { pointer-events: auto; }
.brand { display: flex; align-items: center; gap: .5rem; font: 300 1.35rem/1 var(--display); letter-spacing: .05em; }
.bar-actions { display: flex; gap: .4rem; }
.hero { position: fixed; left: max(16px, 6vw); right: 16px; bottom: calc(env(safe-area-inset-bottom, 0px) + 128px); max-width: 34rem;
  display: grid; gap: .9rem; text-shadow: 0 1px 14px rgba(4, 6, 12, .6); transition: opacity .6s, transform .6s; }
.hero.gone { opacity: 0; transform: translateY(12px); pointer-events: none; }
.eyebrow { margin: 0; font: 400 .72rem/1.2 var(--mono); letter-spacing: .18em; text-transform: uppercase; color: var(--dim); }
.wordmark { margin: 0; font: 300 clamp(3.2rem, 14vw, 6.5rem)/.92 var(--display); letter-spacing: .05em; }
.lede { margin: 0; max-width: 30ch; font-size: clamp(1.05rem, 3.6vw, 1.28rem); line-height: 1.4; text-wrap: balance; }
.hero-actions { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem 1rem; }
.cta { font: 500 1rem/1 var(--body); color: var(--night); background: var(--sun); border: 0; border-radius: 999px; padding: .95rem 1.5rem; }
.hint { font: .75rem/1.3 var(--mono); color: var(--dim); }
.dock { position: fixed; left: 50%; transform: translateX(-50%); bottom: calc(env(safe-area-inset-bottom, 0px) + 10px); width: min(40rem, calc(100vw - 24px));
  display: grid; gap: .4rem; }
.scales { display: grid; grid-template-columns: repeat(4, 1fr); background: var(--panel); border: 1px solid var(--edge); border-radius: 12px; overflow: hidden; }
.scales button { background: none; border: 0; padding: .7rem .2rem; font: 400 .78rem/1.1 var(--body); color: var(--dim); }
.scales button[aria-pressed="true"] { color: var(--ink); background: rgba(230, 184, 114, .16); }
.clock { display: flex; align-items: center; gap: .45rem; background: var(--panel); border: 1px solid var(--edge); border-radius: 12px; padding: .35rem .5rem; }
.clock button { background: none; border: 1px solid var(--edge); border-radius: 8px; padding: .4rem .6rem; font: .8rem/1 var(--mono); min-width: 2.4rem; }
.clock select { background: var(--night); border: 1px solid var(--edge); border-radius: 8px; padding: .35rem .3rem; font-size: .78rem; min-width: 0; }
.clock output { flex: 1; min-width: 0; font: .78rem/1.2 var(--mono); color: var(--ink); text-align: center; font-variant-numeric: tabular-nums; }
.sheet { position: fixed; z-index: 5; background: var(--panel); border: 1px solid var(--edge); border-radius: 14px; overflow: auto;
  right: 12px; top: calc(env(safe-area-inset-top, 0px) + 58px); width: min(23rem, calc(100vw - 24px)); max-height: calc(100% - 200px); padding: .9rem 1rem 1rem; }
.sheet h2 { margin: 0 0 .6rem; font: 300 1.25rem/1.2 var(--display); letter-spacing: .02em; display: flex; justify-content: space-between; align-items: center; gap: .5rem; }
.x { background: none; border: 1px solid var(--edge); border-radius: 8px; padding: .25rem .55rem; font: .8rem/1 var(--mono); }
.row { display: flex; align-items: center; gap: .65rem; min-height: 40px; cursor: pointer; font-size: .88rem; }
.row input[type=checkbox] { accent-color: var(--sun); width: 1.05rem; height: 1.05rem; margin: 0; flex: none; }
.split { display: flex; align-items: center; justify-content: space-between; gap: .65rem; }
.split input[type=range] { width: 42%; accent-color: var(--sun); }
.seg { display: grid; grid-template-columns: 1fr 1fr; margin: .5rem 0; border: 1px solid var(--edge); border-radius: 8px; overflow: hidden; }
.seg label { position: relative; cursor: pointer; }
.seg input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.seg span { display: block; padding: .55rem .4rem; text-align: center; font-size: .8rem; color: var(--dim); }
.seg input:checked + span { background: rgba(230, 184, 114, .16); color: var(--ink); }
.seg input:focus-visible + span { outline: 2px solid var(--ink); outline-offset: -2px; }
.demo { display: grid; gap: .4rem; margin-top: .4rem; }
.demo button { text-align: left; background: rgba(160, 180, 230, .06); border: 1px solid var(--edge); border-radius: 8px; padding: .55rem .7rem; font-size: .82rem; }
.meta, .small { margin: .55rem 0 0; font: .7rem/1.4 var(--mono); color: var(--dim); }
.credits summary { cursor: pointer; font-size: .8rem; color: var(--dim); margin-top: .6rem; }
.credits p { font-size: .74rem; line-height: 1.5; color: var(--dim); }
form { display: grid; gap: .6rem; }
form label { display: grid; gap: .25rem; font-size: .8rem; color: var(--dim); }
form input { background: var(--night); border: 1px solid var(--edge); border-radius: 8px; padding: .6rem .65rem; font-size: .95rem; color: var(--ink); min-width: 0; }
.two { display: grid; grid-template-columns: 1fr 1fr; gap: .6rem; }
.err { min-height: 1.2em; margin: 0; color: #f0a58c; font-size: .8rem; }
.row-btns { display: flex; flex-wrap: wrap; gap: .5rem; justify-content: space-between; align-items: center; }
.row-btns button:not(.cta) { background: none; border: 1px solid var(--edge); border-radius: 999px; padding: .6rem .9rem; font-size: .82rem; }
#steps { list-style: none; margin: 0 0 .8rem; padding: 0; display: grid; gap: .55rem; }
.fact { display: grid; gap: .1rem; padding: .5rem .6rem; border-left: 2px solid var(--edge); opacity: .18; transition: opacity .5s, border-color .5s; }
.fact.shown { opacity: 1; border-left-color: var(--sun); }
.fact .k { font: .68rem/1.2 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--dim); }
.fact .k::after { content: " · mock"; color: var(--sun); }
.fact .v { font: .95rem/1.4 "IBM Plex Sans", "Noto Sans Symbols 2", "Apple Symbols", system-ui, sans-serif; }
.fact .f { font: .7rem/1.4 var(--mono); color: var(--chart); white-space: normal; }
@media (max-width: 640px) {
  .sheet { left: 12px; right: 12px; width: auto; top: auto; bottom: calc(env(safe-area-inset-bottom, 0px) + 110px); max-height: 58%; }
  #chart { max-height: 34%; }
  .hero { bottom: calc(env(safe-area-inset-bottom, 0px) + 122px); }
}
@media (prefers-reduced-motion: reduce) { #sky, .hero, .fact { transition: none; } }
