/* GALOK tokens · 2026-11
   The single place where colour, type scale, spacing and motion are defined.
   Legacy names (--galok-*, --gv2-*, --g-*, --paper/--ink) are aliased at the bottom so older stylesheets keep working
   while families migrate. New code uses --g-* only.  See DESIGN.md and docs/design-system/. */

:root{
  /* ---- ground: cool white, ink, rules ---- */
  --g-bg:#f5f6f7;
  --g-surface:#fff;
  --g-soft:#eef1f3;
  --g-ink:#0a0c0e;
  --g-ink-2:#2c3338;
  --g-muted:#626b73;          /* 5.0:1 on --g-bg */
  --g-rule:#d9dee2;
  --g-rule-strong:#b9c1c7;

  /* ---- the dark room (Cinematic Poetry, immersive viewers) ---- */
  --g-night:#080a0e;
  --g-night-2:#0f1217;
  --g-night-ink:#ededE8;
  --g-night-muted:#92979c;    /* 6.7:1 on --g-night */
  --g-night-rule:#34383d;

  /* ---- signal: one per page; scale colours are marks, text uses the twin ---- */
  --g-signal:#00aeca;         /* default Galok cyan, marks only */
  --g-signal-text:#006d82;    /* 5.2:1 on --g-bg */
  --g-view:#ff4057;           /* 视  · marks */
  --g-view-text:#c91d38;      /* 5.2:1 on --g-bg, 4.8:1 on warm Reading grounds */
  --g-frame:#2f63ff;          /* 框  · marks */
  --g-frame-text:#2a5ae6;     /* 5.2:1 on --g-bg */
  --g-frame-on-dark:#7a9bff;  /* 7.5:1 on --g-night */
  --g-observe:#b7e600;        /* 察  · marks */
  --g-observe-text:#5a7300;   /* 5.0:1 on --g-bg */

  /* active scale (set by [data-scale]); defaults to the neutral signal */
  --g-scale:var(--g-signal);
  --g-scale-text:var(--g-signal-text);

  /* ---- type: voices ---- */
  --g-font-sans:"MiSans","Galok Sans","Helvetica Neue",Arial,"PingFang SC","Noto Sans CJK SC",sans-serif;
  --g-font-mono:ui-monospace,"SF Mono",SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
  --g-font-glyph:"Galok Glyph Display","STKaiti",serif;   /* 视 框 察 and city seals only */

  /* ---- type: scale (major third from 14px; CJK sets from the same steps) ---- */
  --g-t-label:.75rem;         /* 12 · mono labels, never smaller */
  --g-t-small:.875rem;        /* 14 */
  --g-t-body:1rem;            /* 16 */
  --g-t-lede:1.25rem;         /* 20 */
  --g-t-h3:1.5625rem;         /* 25 */
  --g-t-h2:clamp(1.95rem,3.4vw,3.05rem);
  --g-t-h1:clamp(2.6rem,6vw,5.2rem);
  --g-t-display:clamp(3.4rem,10vw,9.4rem);
  --g-lh-tight:.92;
  --g-lh-head:1.06;
  --g-lh-body:1.62;
  --g-track-label:.08em;

  /* ---- space: 4px base ---- */
  --g-s1:4px;--g-s2:8px;--g-s3:12px;--g-s4:16px;--g-s5:24px;--g-s6:32px;--g-s7:48px;--g-s8:72px;--g-s9:112px;
  --g-gutter:clamp(16px,4vw,56px);
  --g-page:min(1360px,calc(100% - 2 * var(--g-gutter)));
  --g-measure:68ch;

  /* ---- frame (crop marks) ---- */
  --g-mark:14px;              /* length of one crop mark */
  --g-mark-gap:7px;           /* how far the marks stand outside the content */
  --g-mark-weight:1px;

  /* ---- motion ---- */
  --g-dur-fast:160ms;
  --g-dur:240ms;
  --g-dur-slow:600ms;
  --g-ease:cubic-bezier(.2,.7,.2,1);
}

/* scale selectors: any element (or the page) can say which distance it stands at */
[data-scale="view"]{--g-scale:var(--g-view);--g-scale-text:var(--g-view-text)}
[data-scale="frame"]{--g-scale:var(--g-frame);--g-scale-text:var(--g-frame-text)}
[data-scale="observe"]{--g-scale:var(--g-observe);--g-scale-text:var(--g-observe-text)}

/* in the dark room the scale text twin changes (the light-ground twins would be too dark) */
.g-dark[data-scale="view"],.g-dark [data-scale="view"]{--g-scale-text:var(--g-view)}
.g-dark[data-scale="frame"],.g-dark [data-scale="frame"]{--g-scale-text:var(--g-frame-on-dark)}
.g-dark[data-scale="observe"],.g-dark [data-scale="observe"]{--g-scale-text:var(--g-observe)}
.g-dark{--g-bg:var(--g-night);--g-surface:var(--g-night-2);--g-ink:var(--g-night-ink);--g-muted:var(--g-night-muted);--g-rule:var(--g-night-rule);--g-rule-strong:#4a5057;--g-signal-text:var(--g-signal)}

@media (prefers-reduced-motion:reduce){
  :root{--g-dur-fast:.01ms;--g-dur:.01ms;--g-dur-slow:.01ms}
}

/* ---- legacy aliases: read-only mirrors so older sheets follow the tokens ---- */
:root{
  --galok-bg:var(--g-bg);--galok-surface:var(--g-surface);--galok-soft:var(--g-soft);--galok-ink:var(--g-ink);
  --galok-muted:var(--g-muted);--galok-line:var(--g-rule);--galok-line-strong:var(--g-rule-strong);
  --galok-accent:var(--g-signal);--galok-accent-text:var(--g-signal-text);
  --galok-view:var(--g-view);--galok-frame:var(--g-frame);--galok-observe:var(--g-observe);
}
