/* GENERATED by frontend/scripts/build-gate.mjs - edit src/index.css (tokens) or src/gate.css. */
@font-face{font-family:'Source Sans 3 Variable';font-style:normal;font-display:swap;font-weight:200 900;src:url(fonts/source-sans-3-latin-ext-wght-normal.woff2) format('woff2-variations');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}
@font-face{font-family:'Source Sans 3 Variable';font-style:normal;font-display:swap;font-weight:200 900;src:url(fonts/source-sans-3-latin-wght-normal.woff2) format('woff2-variations');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;}
@font-face{font-family:'Source Code Pro Variable';font-style:normal;font-display:swap;font-weight:200 900;src:url(fonts/source-code-pro-latin-ext-wght-normal.woff2) format('woff2-variations');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}
@font-face{font-family:'Source Code Pro Variable';font-style:normal;font-display:swap;font-weight:200 900;src:url(fonts/source-code-pro-latin-wght-normal.woff2) format('woff2-variations');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;}
/* ══════════════════════════════════════════════════════════════════════════
   Forge v2 - tokens, palettes and components
   Refocus Dynamic Branding Standard (Foundry scaffold/skill.md). Token NAMES
   follow Monitor/Cadence, so the picker code ports 1:1. This is the ONLY file
   allowed to contain hex colors (scripts/check-hex.mjs fails the build).

   Deliberate exceptions to the standard, decided 2026-10-01 - do not "fix"
   (full list: "Forge - GUI Redesign Plan.md", section 2):
     1. Default palette is Verdigris (new, light), not the pre-v2 look. The
        pre-v2 look is kept as the Kiln palette.
     2. Wordmark has a CAPITAL PLANNING sub-label (--text-3, never an accent).
     3. Typeface is Fovea's pack: Source Sans 3 + Source Code Pro (figures only).
     4. Uppercase labels may be 11px; body and table text is 12px or larger.
     5. Request search sits in the top-right zone, left of the cube.
     6. Lively motion (5 of 5). Off under prefers-reduced-motion.
     7. Hover-to-expand rail (overlay, no reflow).
     8. The cube carries 10 palettes (every fleet palette and app default,
        except Monitor's, which matched Verdigris - dropped 2026-10-01).
     9. Verdigris shares Monitor's accent #0E7490 (accepted).

   Every palette block declares EVERY token, including --accent-ink, --shadow
   and --lift. A token declared only in the default block would leak into the
   others, because the default block also matches bare :root.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Verdigris - Forge default (light). Measured WCAG 2026-10-01 ── */
:root, :root[data-pal="verdigris"] {
  --chrome:#F4F7F9; --bg:#EEF2F5; --surface:#FFFFFF; --surface-2:#EAF0F3; --surface-3:#F4F7F9;
  --border:#E3E9EE; --border-light:#D3DCE3;
  --text:#10243A;       /* 13.97:1 on canvas, 15.72:1 on white */
  --text-2:#33475B;     /*  8.90:1 on rail */
  --text-3:#5B7185;     /*  5.07:1 on white, 4.50:1 on canvas, 4.71:1 on rail */
  --accent:#0E7490;     /*  5.36:1 on white, 4.76:1 on canvas */
  --accent-ink:#0B6680; /*  5.02:1 on the 14% accent tint. Plain accent there is 4.13:1 - fails */
  --accent-2:#C2410C;   /*  5.18:1 on white, 4.60:1 on canvas */
  --on-accent:#FFFFFF;  /*  5.36:1 on accent */
  --green:#15803D; --yellow:#A16207; --red:#B91C1C; --purple:#7C3AED; --cyan:#2C6FD6;
  --shadow:16 36 58; --lift:1;
  color-scheme:light;
}
/* ── Kiln - Forge's pre-v2 navy, orange-led (dark) ── */
:root[data-pal="kiln"] {
  /* Blue Hour (Nick, 2026-10-02): today's navy, deeper, with a brighter amber
     and electric teal. Contrast measured: text 15.12:1 / text-3 5.92:1 on
     surface; accent 8.64:1 on surface, 6.69:1 on its own 14% tint. */
  --chrome:#060A17; --bg:#0A1022; --surface:#141D38; --surface-2:#1B2546; --surface-3:#111930;
  --border:#1F2A4A; --border-light:#2C3A62;
  --text:#F0F4FF; --text-2:#B9C3DE; --text-3:#8C9ABD;
  --accent:#FFA834; --accent-ink:#FFA834; --accent-2:#2EE6E6; --on-accent:#1A0E00;
  --green:#4ADE80; --yellow:#FDE047; --red:#F87171; --purple:#A78BFA; --cyan:#2EE6E6;
  --shadow:0 0 0; --lift:0;
  color-scheme:dark;
}
/* ── Every other app's default (copied from each app's index.css) ──
   Monitor's default is deliberately left out (Nick, 2026-10-01): it is the
   same teal on the same canvas as Verdigris, so the two cubes were twins. */
:root[data-pal="cadence"] {
  /* Aurora (Nick, 2026-10-02) - Cadence's default in the Cadence app too.
     text 14.96:1 / text-3 6.76:1 on surface; accent 11.34:1 on surface. */
  --chrome:#09091A; --bg:#0E0E24; --surface:#1A1A3C; --surface-2:#232350; --surface-3:#2B2B5E;
  --border:#26264E; --border-light:#36366A;
  --text:#F2F1FF; --text-2:#CFCDEA; --text-3:#A3A1C9;
  --accent:#2EF0B6; --accent-ink:#2EF0B6; --accent-2:#C38BFF; --on-accent:#04140F;
  --green:#3BF0B0; --yellow:#FFC25C; --red:#FF5E7A; --purple:#C38BFF; --cyan:#22D3EE;
  --shadow:0 0 0; --lift:0;
  color-scheme:dark;
}
:root[data-pal="lagoon"] {
  /* Lagoon (Nick, 2026-10-02): deep teal water, aqua, coral. In the Cadence
     app's cube too. text 14.59:1 / text-3 6.75:1 on surface; accent 10.88:1. */
  --chrome:#041016; --bg:#06171E; --surface:#0E2731; --surface-2:#14323E; --surface-3:#1A3B48;
  --border:#173440; --border-light:#24495A;
  --text:#ECFBFA; --text-2:#BFDCDD; --text-3:#8DB1BB;
  --accent:#3BF2C8; --accent-ink:#3BF2C8; --accent-2:#FF7D6B; --on-accent:#03140F;
  --green:#4BE39A; --yellow:#FFC857; --red:#FF6B7D; --purple:#B79CFF; --cyan:#5AD7F5;
  --shadow:0 0 0; --lift:0;
  color-scheme:dark;
}
:root[data-pal="ember"] {
  --chrome:#150F0D; --bg:#0C0908; --surface:#191211; --surface-2:#221917; --surface-3:#2A1F1C;
  --border:#2C201D; --border-light:#43302B;
  --text:#FBEEEA; --text-2:#DED0CA; --text-3:#AE9D96;
  --accent:#FF6B5C; --accent-ink:#FF6B5C; --accent-2:#FFA94D; --on-accent:#1A0A07;
  --green:#3FD9A0; --yellow:#FFC24B; --red:#FF4F5E; --purple:#C08CFF; --cyan:#4FC8E0;
  --shadow:0 0 0; --lift:0;
  color-scheme:dark;
}
/* ── The shared palettes (Monitor's measured copies of the standard) ── */
:root[data-pal="cobalt"] {
  --chrome:#EFF3FC; --bg:#F7F9FE; --surface:#FFFFFF; --surface-2:#E7EDFA; --surface-3:#F2F6FF;
  --border:#E0E7F6; --border-light:#C9D4EA;
  --text:#0C1222; --text-2:#33405C; --text-3:#5D6A87;
  --accent:#2447F0; --accent-ink:#2447F0; --accent-2:#0F62CF; --on-accent:#FFFFFF;
  --green:#0B7A4B; --yellow:#B45D07; --red:#D31145; --purple:#6D3BEF; --cyan:#0F62CF;
  --shadow:12 18 34; --lift:1;
  color-scheme:light;
}
:root[data-pal="midnight"] {
  --chrome:#0F0D26; --bg:#0A0918; --surface:#141131; --surface-2:#1B1741; --surface-3:#1A1740;
  --border:#251F52; --border-light:#3A3277;
  --text:#ECEAFF; --text-2:#B3ADD8; --text-3:#7E77AE;
  /* white on #9D7CFF is 3.11:1 and fails AA; canvas ink is 6.35:1 (Monitor, 2026-09-30) */
  --accent:#9D7CFF; --accent-ink:#9D7CFF; --accent-2:#5CC8FF; --on-accent:#0A0918;
  --green:#3BE8B0; --yellow:#FFB347; --red:#FF5C8A; --purple:#C77DFF; --cyan:#5CC8FF;
  --shadow:0 0 0; --lift:0;
  color-scheme:dark;
}
:root[data-pal="nebula"] {
  --chrome:#0A0B24; --bg:#060617; --surface:#0E1030; --surface-2:#151940; --surface-3:#141838;
  --border:#1C2154; --border-light:#2C3478;
  --text:#E6ECFF; --text-2:#A6B0DC; --text-3:#7079B4;
  --accent:#00E0FF; --accent-ink:#00E0FF; --accent-2:#7B9BFF; --on-accent:#0A0F1A;
  --green:#2FF7A6; --yellow:#FFC24B; --red:#FF4F7E; --purple:#C77DFF; --cyan:#00E0FF;
  --shadow:0 0 0; --lift:0;
  color-scheme:dark;
}
:root[data-pal="synthwave"] {
  --chrome:#120827; --bg:#0D0619; --surface:#1B0F31; --surface-2:#251140; --surface-3:#22103C;
  --border:#301852; --border-light:#472573;
  --text:#F6EBFF; --text-2:#C4AEDC; --text-3:#8E75B4;
  /* white on #FF48D0 is 2.96:1 (fails); canvas ink is 6.71:1 */
  --accent:#FF48D0; --accent-ink:#FF48D0; --accent-2:#7B61FF; --on-accent:#0D0619;
  --green:#2BFFC7; --yellow:#FFAA2B; --red:#FF4260; --purple:#C77DFF; --cyan:#7B61FF;
  --shadow:0 0 0; --lift:0;
  color-scheme:dark;
}
:root[data-pal="obsidian"] {
  --chrome:#0A0E12; --bg:#07090C; --surface:#0D1116; --surface-2:#12181F; --surface-3:#131A22;
  --border:#1A2028; --border-light:#2A333E;
  --text:#F2F5F8; --text-2:#A7B2BD; --text-3:#6F7C88;
  --accent:#4FD1C5; --accent-ink:#4FD1C5; --accent-2:#6AA6F0; --on-accent:#0A0F1A;
  --green:#3ECF8E; --yellow:#F0B23D; --red:#FF5C5C; --purple:#A78BFA; --cyan:#6AA6F0;
  --shadow:0 0 0; --lift:0;
  color-scheme:dark;
}
:root[data-pal="quartz"] {
  --chrome:#F3F1FA; --bg:#F6F5FB; --surface:#FFFFFF; --surface-2:#EEEBF8; --surface-3:#F5F2FE;
  --border:#E5E1F2; --border-light:#CDC6E6;
  --text:#171230; --text-2:#494272; --text-3:#7B73A2;
  --accent:#6D3BEF; --accent-ink:#6D3BEF; --accent-2:#2A5EC4; --on-accent:#FFFFFF;
  --green:#0C8A60; --yellow:#A2650B; --red:#C22553; --purple:#8B4BE8; --cyan:#2A5EC4;
  --shadow:23 18 48; --lift:1;
  color-scheme:light;
}

/* ── Semantic status colors: FIXED hue in every palette, treatment flips ──
   Never wire these to --accent. The API sends a level; CSS picks the color.
   Light (ink on dim): ok 6.34, warn 6.20, bad 5.66, info 7.56, violet 7.59.
   Dark (ink on a 16% tint of itself over Kiln's surface): ok 5.28, warn 5.59,
   bad 4.87, info 4.94, violet 4.77. Monitor's dark bad #FF5C6C (4.00) and
   info #6AA6F0 (4.37) failed there, hence the lighter values. Still to be
   measured on the other dark surfaces before stage 1 ships. */
:root {
  --ok-ink:#166534;     --ok-dim:#E7F5EC;
  --warn-ink:#854D0E;   --warn-dim:#FBF3E1;
  --bad-ink:#B91C1C;    --bad-dim:#FDECEC;
  --info-ink:#1E40AF;   --info-dim:#E8EFFD;
  --violet-ink:#5B21B6; --violet-dim:#EFE9FD;
  --accent-dim: color-mix(in srgb, var(--accent) 14%, transparent);
  --ring: 0 0 0 3px color-mix(in srgb, var(--accent) 24%, transparent);
  --ease: cubic-bezier(.2,.8,.2,1);
  --spring: cubic-bezier(.2,.9,.2,1.15);
  --font: 'Source Sans 3 Variable', 'Source Sans 3', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --mono: 'Source Code Pro Variable', 'Source Code Pro', ui-monospace, 'Cascadia Mono', Consolas, monospace;
}
:root[data-pal="kiln"], :root[data-pal="cadence"], :root[data-pal="lagoon"], :root[data-pal="ember"],
:root[data-pal="midnight"], :root[data-pal="nebula"],
:root[data-pal="synthwave"], :root[data-pal="obsidian"] {
  --ok-ink:#3ECF8E;     --ok-dim:color-mix(in srgb,#3ECF8E 16%,transparent);
  --warn-ink:#F0B23D;   --warn-dim:color-mix(in srgb,#F0B23D 16%,transparent);
  --bad-ink:#FF8A94;    --bad-dim:color-mix(in srgb,#FF8A94 16%,transparent);
  --info-ink:#7DB4F5;   --info-dim:color-mix(in srgb,#7DB4F5 16%,transparent);
  --violet-ink:#B79CFF; --violet-dim:color-mix(in srgb,#B79CFF 16%,transparent);
}

/* ── Server-rendered pages: sign-in, order packet, error (stage 5) ──
   Appended to the token + palette section of index.css by
   scripts/build-gate.mjs. Same look as the v2 gate (centered card on
   Fovea's accent grid glow). No hex here: tokens only. */
* { box-sizing:border-box; }
html, body { margin:0; min-height:100%; }
body {
  font-family:var(--font); font-size:14px; line-height:1.5; color:var(--text); background:var(--bg);
  font-synthesis:none; -webkit-font-smoothing:antialiased; font-variant-numeric:tabular-nums;
}
a { color:var(--accent-ink); }
:focus-visible { outline:none; box-shadow:var(--ring); }
.m { font-family:var(--mono); }
.gate {
  min-height:100vh; display:grid; place-items:center; padding:24px; position:relative; overflow:hidden;
  background:radial-gradient(ellipse 60% 50% at 50% 42%, color-mix(in srgb, var(--accent) 16%, transparent), transparent 70%), var(--bg);
}
.gate::before {
  content:''; position:absolute; inset:0; pointer-events:none;
  background-image:
    linear-gradient(color-mix(in srgb, var(--text) 7%, transparent) 1px, transparent 1px),
    linear-gradient(90deg, color-mix(in srgb, var(--text) 7%, transparent) 1px, transparent 1px);
  background-size:56px 56px;
  -webkit-mask-image:radial-gradient(ellipse 70% 60% at 50% 45%, black 30%, transparent 75%);
          mask-image:radial-gradient(ellipse 70% 60% at 50% 45%, black 30%, transparent 75%);
}
.gate-card {
  position:relative; width:400px; max-width:100%; background:var(--surface); border:1px solid var(--border); border-radius:14px;
  padding:34px 32px 26px; text-align:center; display:flex; flex-direction:column; align-items:center;
  box-shadow:0 26px 70px rgb(var(--shadow) / .16); animation:rise .5s var(--spring);
}
.gate-card.wide { width:560px; text-align:left; align-items:stretch; }
.gate-card.wide .brand { align-self:center; }
.brand { display:flex; flex-direction:column; align-items:center; gap:12px; margin-bottom:6px; }
.mark { display:block; transition:transform .35s var(--spring); }
.brand:hover .mark { transform:rotate(-8deg) scale(1.05); }
.wordmark { display:flex; flex-direction:column; align-items:center; line-height:1.05; }
.wordmark-name { font-weight:800; letter-spacing:.14em; font-size:20px; color:var(--text); }
.wordmark-sub { font-size:11px; font-weight:600; letter-spacing:.12em; color:var(--text-3); margin-top:4px; }
.gate-h1 { font-size:20px; font-weight:700; letter-spacing:-.01em; margin:16px 0 4px; }
.gate-p { color:var(--text-2); font-size:14px; margin:0 0 6px; line-height:1.6; }
.gate-sub { color:var(--text-3); font-size:13.5px; margin:0; }
.gate-foot { margin-top:18px; font-size:12.5px; color:var(--text-3); line-height:1.55; }
.btn {
  display:inline-flex; align-items:center; justify-content:center; gap:9px; padding:11px 16px; border-radius:8px;
  border:1px solid var(--border-light); background:var(--surface); color:var(--text-2); font:inherit; font-weight:600; font-size:14px;
  cursor:pointer; text-decoration:none; transition:transform .2s var(--spring), filter .18s, opacity .18s;
}
.btn:hover { transform:translateY(-1px); }
.btn.primary { background:var(--accent); border-color:var(--accent); color:var(--on-accent); }
.btn.primary:hover { filter:brightness(1.06); }
.btn.block { width:100%; margin-top:18px; }
.btn:disabled { opacity:.5; cursor:not-allowed; transform:none; filter:none; }
.ms-logo { flex:none; padding:2px; border-radius:3px; background:var(--surface); }
.notice { width:100%; margin-top:12px; padding:10px 13px; border-radius:9px; font-size:13.5px; line-height:1.55; text-align:left; border:1px solid transparent; }
.notice.ok   { background:var(--ok-dim);   color:var(--ok-ink);   border-color:color-mix(in srgb, var(--ok-ink) 25%, transparent); }
.notice.warn { background:var(--warn-dim); color:var(--warn-ink); border-color:color-mix(in srgb, var(--warn-ink) 25%, transparent); }
.notice.bad, .notice.error, .notice.danger { background:var(--bad-dim); color:var(--bad-ink); border-color:color-mix(in srgb, var(--bad-ink) 25%, transparent); }
.notice.info, .notice.message { background:var(--info-dim); color:var(--info-ink); border-color:color-mix(in srgb, var(--info-ink) 25%, transparent); }
.facts { display:grid; grid-template-columns:120px minmax(0,1fr); gap:6px 12px; margin:16px 0 4px; padding:12px 14px; border-radius:10px; background:var(--surface-3); border:1px solid var(--border); font-size:13.5px; }
.facts dt { color:var(--text-3); font-size:12px; font-weight:700; letter-spacing:.04em; padding-top:1px; }
.facts dd { margin:0; min-width:0; overflow-wrap:anywhere; }
.ack { display:flex; gap:11px; align-items:flex-start; margin-top:14px; padding:12px 14px; border-radius:10px; border:1px solid color-mix(in srgb, var(--accent) 40%, transparent); background:var(--accent-dim); cursor:pointer; font-size:13.5px; line-height:1.55; }
.ack input { margin-top:3px; width:17px; height:17px; flex:none; accent-color:var(--accent); }
.status { min-height:20px; margin:10px 0 0; font-size:13px; text-align:center; color:var(--text-2); }
.status.ok { color:var(--ok-ink); } .status.bad { color:var(--bad-ink); }
.error-code { font-family:var(--mono); font-size:44px; font-weight:600; letter-spacing:-.02em; color:var(--accent-ink); margin-top:10px; line-height:1; }
@keyframes rise { from { opacity:0; transform:translateY(14px) scale(.97); } to { opacity:1; transform:none; } }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation:none !important; transition:none !important; } }
@media (max-width: 520px) { .gate-card { padding:26px 20px 22px; } .facts { grid-template-columns:1fr; } }
