/* Obsidian Observatory — shared tokens for the portfolio and its specimen page.
   Fuses cerosoft.net (obsidian, ivory, champagne hairlines, cyan action, near-square edges)
   with the portfolio's night-sky voice. Dark is primary; light is the ivory "day" of the same world.
   Spec: DESIGN.md */
:root {
  /* primitives */
  --obsidian-950: #080d10;
  --obsidian-900: #0c1216;
  --obsidian-850: #121a20;
  --obsidian-800: #19232a;
  --slate-700: #263139;
  --slate-500: #4a565d;
  --mist-400: #9ca7a9;
  --silver-200: #d9dcda;
  --ivory-50: #f8f7f3;
  --ivory-100: #f0eee8;
  --ivory-200: #e3e1da;
  --stone-300: #d3d0c6;
  --ink-900: #182127;
  --ink-600: #56626a;
  --cyan-400: #18bcc4;
  --cyan-500: #08a5ad;
  --cyan-700: #066f74;
  --cyan-wash: #0d2a2e;
  --champagne-300: #c9bc9e;
  --champagne-200: #ddd2b8;
  --bronze-700: #6e5f3d;
  --champagne-wash: #211f19;

  /* semantic — night (default) */
  --surface: var(--obsidian-900);
  --surface-sunk: var(--obsidian-950);
  --surface-raised: var(--obsidian-850);
  --surface-hover: var(--obsidian-800);
  --border: #222c33;
  --border-strong: #46525a;
  --line-lux: rgba(201, 188, 158, .22);
  --ink: #e9eae7;
  --ink-muted: var(--mist-400);
  --accent: var(--cyan-500);
  --accent-hover: var(--cyan-400);
  --on-accent: var(--obsidian-900);
  --accent-text: var(--cyan-400);
  --lux: var(--champagne-300);
  --lux-text: var(--champagne-300);
  --lux-soft: var(--champagne-wash);
  --deep: var(--obsidian-950);
  --on-deep: #e9eae7;
  --on-deep-muted: #b5bdbe;
  --on-deep-soft: #c5cbca;
  --plate: var(--ivory-50);
  --stage: linear-gradient(135deg, #e8e6df, #d8d8d3);
  --glow: rgba(0, 173, 181, .10);
  --star: 217, 220, 218;
  --star-warm: 201, 188, 158;

  --font-display: "DM Sans", "Noto Sans Thai", system-ui, sans-serif;
  --font-sans: "DM Sans", "Noto Sans Thai", system-ui, sans-serif;
  --font-serif: "Cormorant Garamond", Georgia, serif;
  --font-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;

  --space-1: 4px; --space-2: 8px; --space-4: 16px; --space-6: 24px; --space-12: 48px;
  --radius-sm: 2px; --radius-md: 3px; --radius-lg: 4px;
  --shadow-lift: 0 22px 48px -18px rgba(0, 0, 0, .55);
  --shadow-stage: 0 36px 80px -30px rgba(0, 0, 0, .6);
  --ease-out: cubic-bezier(.16, 1, .3, 1);
  --wrap: 1120px;
  color-scheme: dark;
}

@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) {
    --surface: var(--ivory-100); --surface-sunk: var(--ivory-200); --surface-raised: var(--ivory-50); --surface-hover: #ffffff;
    --border: var(--stone-300); --border-strong: #8d928f; --line-lux: rgba(110, 95, 61, .28);
    --ink: var(--ink-900); --ink-muted: var(--ink-600);
    --accent: var(--cyan-500); --accent-hover: var(--cyan-400); --on-accent: #0c1216; --accent-text: var(--cyan-700);
    --lux: var(--champagne-300); --lux-text: var(--bronze-700); --lux-soft: #ebe4d3;
    --deep: var(--obsidian-900); --on-deep: #e9eae7; --on-deep-muted: #b5bdbe;
    --plate: #ffffff; --glow: rgba(0, 173, 181, .08);
    --star: 6, 111, 116; --star-warm: 110, 95, 61;
    --shadow-lift: 0 22px 48px -22px rgba(24, 33, 39, .28);
    --shadow-stage: 0 36px 80px -36px rgba(24, 33, 39, .35);
    color-scheme: light;
  }
}
:root[data-theme="light"] {
  --surface: var(--ivory-100); --surface-sunk: var(--ivory-200); --surface-raised: var(--ivory-50); --surface-hover: #ffffff;
  --border: var(--stone-300); --border-strong: #8d928f; --line-lux: rgba(110, 95, 61, .28);
  --ink: var(--ink-900); --ink-muted: var(--ink-600);
  --accent: var(--cyan-500); --accent-hover: var(--cyan-400); --on-accent: #0c1216; --accent-text: var(--cyan-700);
  --lux: var(--champagne-300); --lux-text: var(--bronze-700); --lux-soft: #ebe4d3;
  --deep: var(--obsidian-900); --on-deep: #e9eae7; --on-deep-muted: #b5bdbe;
  --plate: #ffffff; --glow: rgba(0, 173, 181, .08);
  --star: 6, 111, 116; --star-warm: 110, 95, 61;
  --shadow-lift: 0 22px 48px -22px rgba(24, 33, 39, .28);
  --shadow-stage: 0 36px 80px -36px rgba(24, 33, 39, .35);
  color-scheme: light;
}

/* the CeroSoft "product stage": a light ivory plate that keeps its own ink in either theme */
.on-stage {
  --ink: var(--ink-900); --ink-muted: var(--ink-600); --border: rgba(31, 43, 49, .16); --border-strong: #8d928f;
  --surface-raised: rgba(248, 247, 243, .7); --accent-text: var(--cyan-700); --lux-text: var(--bronze-700);
  --plate: #ffffff; color: var(--ink);
}

/* browser surfaces */
::selection { background: rgba(0, 173, 181, .32); color: inherit; }
html { accent-color: var(--accent); caret-color: var(--accent); scrollbar-color: var(--border-strong) var(--surface-sunk); }
