/* ===========================================================================
   collabd "Orbit" — a dense-list design language.

   The philosophy in one line: THE INTERFACE SHOULD FEEL LIKE AN INSTRUMENT, AND
   AN INSTRUMENT IS MOSTLY GREY. the reference language’s look is not a palette, it is a set of
   constraints — 13px UI type, 32–40px rows, 1px hairlines at 8% opacity, one
   accent, radius 4–8px, popovers that appear instantly and vanish instantly. This
   file is those constraints, applied to collabd's objects.

   🚨 THIS FILE IS THE SHIPPED TOKEN SYSTEM. IT IS NOT A DEVIATION FROM ONE.

   Until 2026-08-10 the paragraph here read "Where it deliberately differs from
   /DESIGN.md (the shipped system)" and then listed three deviations — the system type
   stack, the saturated indigo accent, and coloured labels. That framing was true of the
   MOCKUP this file was cut from and became false the moment #777 promoted it: DESIGN.md
   adopted all three on 2026-08-07, in dated rows, and this file became the source those
   rows point AT. So the canonical token file spent three months telling every reader that
   the shipped system was somewhere else — which is the rival-source-of-truth failure the
   Token Layer section is about, in a comment rather than in a declaration.

   The three former "deviations", stated as what they now are:
     · type is the system UI stack, deliberately (DESIGN.md Typography, 2026-08-07) —
       one family for what a human wrote, one for what the machine produced;
     · the saturated indigo accent is licensed on selection, focus, active nav and
       primary-button chrome, and is forbidden on anything carrying a verdict glyph
       (standing rule 5). Ship is the one primary button it does not dress: that button
       is `--v-safe`;
     · labels carry colour ONLY where the thing labelled is not a machine judgment
       (2026-08-10) — a run's workflow status is a judgment and is slate.

   What has never changed: the verdict is icon + word + colour, never colour alone, and
   no non-verdict thing is allowed to be green, amber or red.
   =========================================================================== */

/* ── tokens ──────────────────────────────────────────────────────────────── */
:root {
  --sidebar-w: 232px;
  --row-h: 40px;
  --row-h-compact: 32px;

  --r-sm: 4px;
  --r-md: 6px;
  --r-lg: 8px;
  --r-xl: 12px;

  --t-fast: 70ms;
  --t-base: 120ms;
  --ease: cubic-bezier(.25, .46, .45, .94);

  --font: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, Ubuntu,
          "Helvetica Neue", system-ui, sans-serif;
  --mono: "JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;
}

[data-theme="dark"] {
  --bg:        #08090a;
  --panel:     #0f1011;
  --panel-2:   #141516;
  --elev:      #1c1d1f;
  --elev-2:    #232427;
  --knockout:  #08090a;

  --border:    rgba(255,255,255,.075);
  --border-2:  rgba(255,255,255,.12);
  --hover:     rgba(255,255,255,.045);
  --active:    rgba(255,255,255,.075);

  --text:      #f7f8f8;
  --text-2:    #a8aeb8;
  --text-3:    #868c96;

  --accent:    #5e6ad2;
  --accent-hi: #6e79dd;
  --link:      #7d86e0;
  --accent-bg: rgba(94,106,210,.16);
  --accent-fg: #fff;
  --sel:       rgba(94,106,210,.13);

  --v-safe:    #4cb782;
  --v-review:  #f2c94c;
  --v-block:   #ed6060;
  --v-safe-bg:   rgba(76,183,130,.14);
  --v-review-bg: rgba(242,201,76,.14);
  --v-block-bg:  rgba(237,96,96,.14);

  --l-gray:   #95a2b3;
  --l-blue:   #4ea7fc;
  --l-indigo: #7b83e0;
  --l-purple: #a55eef;
  /* #767: teal shifted toward cyan. At #3fb2a8 (dark) / #17796f (light) it sat 40 and 30
     RGB-units from the `safe` verdict green — a "backend" label and a passing verdict in
     near-identical colour, which makes the ONE saturated signal in the product ambiguous.
     Settled decision #2 keeps coloured labels precisely on the condition that the palette
     stays perceptually disjoint from the verdict hues, and src/token-contrast.test.mjs is
     the guard that now enforces it. */
  --l-teal:   #35bcd6;
  /* #767: orange is GONE from the label palette, replaced by pink. It is not a nudge —
     orange has no home in a palette whose verdicts are red and amber. Every orange sits
     between them, so `--l-orange` was 44 RGB-units from `block` and no shift moved it
     clear of both without ceasing to be orange. Settled decision #2 keeps coloured labels
     precisely on the condition that the palette stays perceptually disjoint from the
     verdict hues; where a colour cannot satisfy that, the colour loses, not the rule.
     src/token-contrast.test.mjs is what enforces it. */
  --l-pink:   #e35d9e;

  --shadow: 0 6px 24px rgba(0,0,0,.55), 0 1px 2px rgba(0,0,0,.6);
  --shadow-sm: 0 2px 8px rgba(0,0,0,.4);
  color-scheme: dark;
}

[data-theme="light"] {
  --bg:        #f4f5f8;
  --panel:     #ffffff;
  --panel-2:   #fbfbfc;
  --elev:      #ffffff;
  --elev-2:    #f4f5f8;
  --knockout:  #ffffff;

  --border:    rgba(10,13,20,.09);
  --border-2:  rgba(10,13,20,.16);
  --hover:     rgba(10,13,20,.04);
  --active:    rgba(10,13,20,.07);

  --text:      #16171a;
  --text-2:    #53575d;
  --text-3:    #6a6e76;

  --accent:    #5e6ad2;
  --accent-hi: #4d59c6;
  --link:      #4d59c6;
  --accent-bg: rgba(94,106,210,.12);
  --accent-fg: #fff;
  --sel:       rgba(94,106,210,.09);

  --v-safe:    #0f7a52;
  --v-review:  #8f5c00;
  --v-block:   #c62f2f;
  --v-safe-bg:   rgba(15,122,82,.10);
  --v-review-bg: rgba(143,92,0,.10);
  --v-block-bg:  rgba(198,47,47,.10);

  --l-gray:   #6b7280;
  --l-blue:   #1f74d6;
  --l-indigo: #5460c9;
  --l-purple: #8636cf;
  --l-teal:   #0a6f96;
  --l-pink:   #b3306e;

  --shadow: 0 8px 28px rgba(16,20,28,.14), 0 1px 2px rgba(16,20,28,.10);
  --shadow-sm: 0 2px 8px rgba(16,20,28,.10);
  color-scheme: light;
}
