/* IBM Plex, self-hosted (SIL Open Font License 1.1, see ../fonts/LICENSE.txt).
   The Latin1 and Latin2 subsets of the upstream split build (@ibm/plex-sans
   1.1.0, @ibm/plex-mono 2.5.0): basic Latin with the Latin-1 supplement, and
   Latin Extended-A. The ranges are the upstream ones. No italic faces: nothing
   in the stylesheets asks for one that the browser cannot slant itself.
   Nothing is fetched from Google Fonts any more; the files go through the
   hashed manifest with the rest of static/, so keep the urls relative. */
@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/IBMPlexSans-Regular-Latin1.678efa63c3fb.woff2") format("woff2");
  unicode-range: U+0000, U+000D, U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}
@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/IBMPlexSans-Regular-Latin2.72d89b52ddc0.woff2") format("woff2");
  unicode-range: U+0100-0101, U+0104-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01FA-01FF, U+0218-021B, U+0237, U+0259, U+1E80-1E85, U+1E9E, U+20A1, U+20A4, U+20A6, U+20A8-20AA, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF;
}
@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/IBMPlexSans-Medium-Latin1.e0399fc4473d.woff2") format("woff2");
  unicode-range: U+0000, U+000D, U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}
@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/IBMPlexSans-Medium-Latin2.497f7ca8f78e.woff2") format("woff2");
  unicode-range: U+0100-0101, U+0104-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01FA-01FF, U+0218-021B, U+0237, U+0259, U+1E80-1E85, U+1E9E, U+20A1, U+20A4, U+20A6, U+20A8-20AA, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF;
}
@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../fonts/IBMPlexSans-SemiBold-Latin1.106da8161b57.woff2") format("woff2");
  unicode-range: U+0000, U+000D, U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}
@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../fonts/IBMPlexSans-SemiBold-Latin2.fb04fa4acdbb.woff2") format("woff2");
  unicode-range: U+0100-0101, U+0104-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01FA-01FF, U+0218-021B, U+0237, U+0259, U+1E80-1E85, U+1E9E, U+20A1, U+20A4, U+20A6, U+20A8-20AA, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF;
}
@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/IBMPlexSans-Bold-Latin1.102e1e2880b8.woff2") format("woff2");
  unicode-range: U+0000, U+000D, U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}
@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/IBMPlexSans-Bold-Latin2.40aaa3f805c7.woff2") format("woff2");
  unicode-range: U+0100-0101, U+0104-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01FA-01FF, U+0218-021B, U+0237, U+0259, U+1E80-1E85, U+1E9E, U+20A1, U+20A4, U+20A6, U+20A8-20AA, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF;
}
@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/IBMPlexMono-Regular-Latin1.23b4f5fce19d.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}
@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/IBMPlexMono-Regular-Latin2.8d0e8e929ab2.woff2") format("woff2");
  unicode-range: U+0100-0101, U+0104-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01FA-01FF, U+0218-021B, U+0237, U+0259, U+1E80-1E85, U+1E9E, U+20A1, U+20A4, U+20A6, U+20A8-20AA, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF;
}
@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/IBMPlexMono-Medium-Latin1.2bdc5f6e5e80.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}
@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/IBMPlexMono-Medium-Latin2.99b9e89a27ea.woff2") format("woff2");
  unicode-range: U+0100-0101, U+0104-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01FA-01FF, U+0218-021B, U+0237, U+0259, U+1E80-1E85, U+1E9E, U+20A1, U+20A4, U+20A6, U+20A8-20AA, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF;
}
@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../fonts/IBMPlexMono-SemiBold-Latin1.e3879a5733bc.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}
@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../fonts/IBMPlexMono-SemiBold-Latin2.2532785f6107.woff2") format("woff2");
  unicode-range: U+0100-0101, U+0104-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+01A0-01A1, U+01AF-01B0, U+01FA-01FF, U+0218-021B, U+0237, U+0259, U+1E80-1E85, U+1E9E, U+20A1, U+20A4, U+20A6, U+20A8-20AA, U+20AD-20AE, U+20B1-20B2, U+20B4-20B5, U+20B8-20BA, U+20BD, U+20BF;
}

/* Cisoly design tokens — taken from the Brand Book v1.2 (Sept 2026).
   Dashboard and website use the same variables. */
:root {
  /* Tells the browser that we handle the theme ourselves; without this
     Chrome applies its own inversion and headings become unreadable. */
  color-scheme: light;
  /* brand. The violet is the brand book's #7367F0 taken one step darker
     (WCAG 2.1 AA, 2026-09-17): white on #7367F0 and #7367F0 on white both
     stopped at 4.26:1, #6456EE reaches 4.5:1 on white, on the canvas and
     on its own tint. --violet-text is the violet used as text: the same
     in the light theme, a lighter shade in the dark one. */
  --violet: #6456EE; --violet-hover: #5B4FD9; --violet-tint: #F1F0FE; --violet-text: #6456EE;
  /* semantic */
  --blue: #2B7FE3; --blue-tint: #E6F0FC; --blue-text: #1B6BCB;
  --teal: #3CC5C0; --teal-tint: #E4F7F6;
  --green: #28C76F; --green-tint: #E3F8EC; --green-text: #187E45; --green-deep: #187E45;
  --amber: #F5B942; --amber-tint: #FDF4E0; --amber-text: #95680B;
  --red: #EA5455; --red-tint: #FDE8E8; --red-text: #C53637;
  /* the -text shades are the nearest that reach 4.5:1 on white and on their
     own tint (were #1E9A55, #B07A0D, #C93A3B); the fills (--green, --red)
     are not for text: a solid fill carrying white text or a white glyph
     uses --green-deep (the same in both themes) or --red-text. */
  /* risk scale — cell fills, always with --risk-text */
  --risk-1: #5AB55E; --risk-2: #8DC24B; --risk-3: #F6E14B; --risk-4: #F19536; --risk-5: #E63A30; --risk-6: #A61B14; --risk-text: #111111;
  /* --risk-5 was #E53228 (4.33:1 with the risk text); the darkest cell takes
     --risk-text-dark instead of --risk-text, black on it would be 2.5:1. */
  --risk-text-dark: #FFFFFF;
  /* opportunity scale (opprisk, docs/FLOWS.md 7.173) — four greens, light to
     deep, never mixed into the risk scale; always with --risk-text (the
     deepest is 5.7:1 with it) */
  --opp-1: #DCF2E0; --opp-2: #A8DDB2; --opp-3: #6CC17E; --opp-4: #36A052;
  /* neutrals */
  --ink: #2F3349; --body: #464B63; --secondary: #686D81; --disabled: #9DA2B4;
  /* --secondary was #6E7388: 4.42:1 on the canvas and 4.12:1 on the neutral
     tint; #686D81 reaches 4.5:1 on both. */
  --neutral-tint: #EEF0F4;  /* neutral badge */
  --rule: #C9CCD8; --table-rule: #C9CCD8;  --table-head-bg: #6456EE; /* table header in the brand violet (by request, rather than ink) */
  --hairline: #DDE0E8; --skeleton: #E9EBF0; --user-card-rule: #F5F6F9; --user-card-text: #A3A7B8; --table-head: #EEF0F4; --canvas: #F7F8FA; --card: #FFFFFF;
  /* the sidebar (portal and console, docs/FLOWS.md 7.317): dark navy in both
     themes, so these are never redefined for the dark theme. The background
     is the house ink of the light theme. The tints are opaque, worked out on
     --side-bg (rule: white at 8%, line 15%, hover 6%, avatar 12%; --side-tint
     the violet at 16%, --side-green-tint the green at 12%), so the gate can
     measure them. On --side-bg: text 12.4:1, sub 7.4:1, muted 5.2:1, active
     4.7:1, green 6.7:1 (5.2:1 on its tint). */
  --side-bg: #2F3349; --side-text: #FFFFFF; --side-sub: #C4C7D4; --side-muted: #A3A7B8; --side-active: #9D94F4;
  --side-rule: #404358; --side-line: #4E5264; --side-hover: #3B3F54; --side-avatar: #484B5F; --side-tint: #3A3B64;
  --side-green: #62D394; --side-green-tint: #354652;
  /* amber on the navy (the protection bar's "Needs attention", Rinat 2026-10-19): 6.97:1 on --side-bg */
  --side-amber: #F5B755;
  /* the strong surface (.spotlight in cisoly.css): the one dark card in the
     content that carries the single thing to do first -- the dashboard's
     next step, and any page's lead action after it. The sidebar's navy and
     its words, under a name for the role, the same in both themes: text
     12.4:1, sub 7.4:1, accent 4.7:1 on it. */
  --strong-bg: var(--side-bg); --strong-text: var(--side-text); --strong-sub: var(--side-sub); --strong-accent: var(--side-active);
  /* type */
  --font-sans: "IBM Plex Sans", system-ui, sans-serif;
  --font-mono: "IBM Plex Mono", ui-monospace, monospace;
  --text-display: 600 56px/1.05 var(--font-sans); --text-h2: 600 28px/1.2 var(--font-sans);
  --text-stat: 600 36px/1 var(--font-sans); --text-body: 400 15px/1.6 var(--font-sans);
  --text-label: 500 14px/1.4 var(--font-sans); --text-eyebrow: 500 11px/1 var(--font-mono);
  /* space & shape */
  --s-1: 4px; --s-2: 8px; --s-3: 12px; --s-4: 16px; --s-6: 24px; --s-8: 32px; --s-12: 48px; --s-16: 64px; --s-24: 96px;
  --r-badge: 2px; --r-control: 4px; --r-card: 4px; --r-full: 999px;
  --shadow-float: 0 2px 0 rgba(47,51,73,.06);
  --focus: 0 0 0 2px #fff, 0 0 0 4px var(--focus-ring);
  /* the focus ring (2px, 2px offset, :focus-visible only) and the border of
     a form field: both reach 3:1 on the card and the canvas (WCAG 1.4.11) */
  --focus-ring: var(--violet); --field-rule: #858A9D; --red-deep: #C53637;
  /* motion */
  --ease: cubic-bezier(.2,.8,.2,1); --t-fast: 120ms; --t-base: 200ms; --t-slow: 240ms;
  /* the house illustration: the training player's cast and places (templates/_player_sprite.html, the .ill-*
     classes in cisoly.css; docs/FLOWS.md 7.506). The people -- skin, hair, clothes -- look the same in both themes;
     the room's surfaces follow the theme. Never text: nothing is read off these colours. */
  --ill-skin-light: #F4CFB4; --ill-skin-medium: #D9A27C; --ill-skin-tan: #B07850; --ill-skin-deep: #6F4630;
  --ill-hair-dark: #2B2433; --ill-hair-brown: #6B4128; --ill-hair-grey: #B7BBC8;
  --ill-line: #2F3349; --ill-white: #FFFFFF; --ill-suit: #4E5264; --ill-scarf: #8B80F2;
  --ill-wall: #EEF0F7; --ill-floor: #DDE0EA; --ill-desk: #C9CCD8; --ill-desk-leg: #A3A7B8; --ill-paper: #FFFFFF;
  --ill-night: #2F3349; --ill-night-window: #3E4466; --ill-moon: #F5E3A6;
  --ill-sofa: #6456EE; --ill-sofa-arm: #5B4FD9; --ill-screen-glow: #DCD8FC; --ill-medal-face: #FDF4E0;
}
[data-theme="dark"] {
  color-scheme: dark;
  --canvas: #1C1F2E; --card: #252838; --hairline: #33374A; --rule: #454A63; --table-head: #2B2F41; --user-card-rule: #272A3B; --user-card-text: #6E7388;
  --ink: #F3F4F8; --body: #B4B8C8; --secondary: #9196A9;
  --violet-text: #9D94F4; --blue-text: #66A3EB; --focus-ring: #9D94F4; --field-rule: #737893;
  --violet-tint: rgba(115,103,240,.18); --green-tint: rgba(40,199,111,.16); --red-tint: rgba(234,84,85,.18);
  --amber-tint: rgba(245,185,66,.16); --blue-tint: rgba(43,127,227,.18); --teal-tint: rgba(60,197,192,.16);
  --ill-wall: #2B2F41; --ill-floor: #33374A; --ill-desk: #454A63; --ill-desk-leg: #5A5F78; --ill-paper: #EEF0F4;
}
