/* MEX *Light — tokeny (zastępuje historyczny `:root` z `design/mex-design.css`).
   Osie: data-theme (sygnal|jasny) · data-service (mex-services.json) · data-carrier
   (opcjonalnie) · data-density (standard|compact|touch) · data-contrast (high).

   Domyślny motyw to JASNY (rewizja 2026-10-06 — handoff „Light redesign” ustawił
   początkowo Sygnał, odwrócone tego samego dnia na życzenie JKO: „zrezygnujmy
   z widoku Sygnał"). Brak atrybutu `data-theme` na <html>/<body> renderuje się jak
   `data-theme="jasny"`. Przełącznik w powłoce ZOSTAJE — kto woli ciemny pasek
   boczny, wybiera `data-theme="sygnal"` jawnie z menu tożsamości i to jest teraz
   wybór EKSPLICYTNY, nie fallback.

   Czcionki serwowane LOKALNIE z `/mex-fonts/` (Z8 — żadnych zależności od
   fonts.googleapis.com w działającym serwisie). Subsety `latin`+`latin-ext`
   pokrywają wszystkie polskie znaki (ą,ć,ę,ł,ń,ó,ś,ź,ż) — źródło:
   `docs/zakupy/` nie dotyczy, ekstrakt zrobiony z Google Fonts CSS2 API
   2026-10-06, pliki WOFF2 wariantowe (jeden plik = cały zakres wag). */

@font-face {
  font-family: "Plus Jakarta Sans"; font-style: normal; font-weight: 400 800;
  font-display: swap; src: url("/mex-fonts/pjs-latin.woff2") format("woff2");
  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: "Plus Jakarta Sans"; font-style: normal; font-weight: 400 800;
  font-display: swap; src: url("/mex-fonts/pjs-latin-ext.woff2") format("woff2");
  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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Bricolage Grotesque"; font-style: normal; font-weight: 500 800;
  font-display: swap; src: url("/mex-fonts/bricolage-latin.woff2") format("woff2");
  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: "Bricolage Grotesque"; font-style: normal; font-weight: 500 800;
  font-display: swap; src: url("/mex-fonts/bricolage-latin-ext.woff2") format("woff2");
  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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Onest"; font-style: normal; font-weight: 400 700;
  font-display: swap; src: url("/mex-fonts/onest-latin.woff2") format("woff2");
  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: "Onest"; font-style: normal; font-weight: 400 700;
  font-display: swap; src: url("/mex-fonts/onest-latin-ext.woff2") format("woff2");
  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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "JetBrains Mono"; font-style: normal; font-weight: 400 600;
  font-display: swap; src: url("/mex-fonts/jbmono-latin.woff2") format("woff2");
  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: "JetBrains Mono"; font-style: normal; font-weight: 400 600;
  font-display: swap; src: url("/mex-fonts/jbmono-latin-ext.woff2") format("woff2");
  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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ── JASNY — motyw domyślny ──────────────────────────────────────────────── */
:root, [data-theme="jasny"] {
  --fh: "Plus Jakarta Sans", system-ui, sans-serif; --fhw: 800;
  --fb: "Plus Jakarta Sans", system-ui, sans-serif;
  /* Brakowało tego tokenu nawet gdy Jasny był wyborem JAWNYM — niezauważalne,
     dopóki prawie nikt nie przełączał motywu. Jako DOMYŚLNY motyw Jasny bez
     --fm zostawiłby każdy `.mono` (numery biletów, booking ID, klucze API,
     kody FIN) bez czcionki monospace w CAŁYM ekosystemie — `var(--fm)` bez
     wartości i bez fallbacku w miejscu użycia liczy się jako invalid-at-
     computed-value, nie jako „odziedzicz coś sensownego". JetBrains Mono jest
     już ładowane lokalnie (Z8 — bez Google Fonts), więc to zero nowych plików. */
  --fm: "JetBrains Mono", ui-monospace, monospace;
  --bg: #f3f6fc; --surface: #ffffff; --field: #ffffff;
  --ink: #0f1b33; --muted: #56627d; --line: #d6deec; --col-bg: #eef2f9; --hover: rgba(31,94,255,.07);
  --p: #1f5eff; --p-hover: #1747c4; --p-ink: #ffffff; --p-soft: #e6eeff; --p-deep: #1747c4;
  --acc: #ffb020; --acc-soft: #fff4dc; --acc-ink: #1f1400;
  --side-bg: #ffffff; --side-fg: #0f1b33; --side-hover: #f1f5fd; --side-act-bg: #e6eeff; --side-act-fg: #1747c4; --side-shadow: 1px 0 0 #e3e9f4;
  --r: 16px; --r-in: 12px; --r-btn: 999px; --r-chip: 999px; --r-nav: 12px; --r-mark: 10px;
  --shadow: 0 1px 2px rgba(15,27,51,.05), 0 8px 24px rgba(15,27,51,.06);
  --shadow-hover: 0 2px 4px rgba(15,27,51,.06), 0 14px 32px rgba(15,27,51,.1);
  --shadow-pop: 0 0 0 1px var(--line), 0 16px 40px rgba(15,27,51,.16);
  /* stany — NIENARUSZALNE (nie nadpisywać w data-carrier) */
  --ok-bg: #e2f6ea; --ok-fg: #0f6b3b;
  --warn-bg: #fff2d4; --warn-fg: #7a4f00;
  --bad-bg: #ffe3e1; --bad-fg: #b42318;
  --info-bg: #e6eeff; --info-fg: #1747c4;
  --neu-bg: #edf0f6; --neu-fg: #46516b;
}

/* ── SYGNAŁ — wybór jawny (przełącznik motywu w powłoce) ─────────────────── */
[data-theme="sygnal"] {
  --fh: "Bricolage Grotesque", system-ui, sans-serif; --fhw: 700;
  --fb: "Onest", system-ui, sans-serif;
  --fm: "JetBrains Mono", ui-monospace, monospace;
  --bg: #f2f3f5; --surface: #ffffff; --field: #ffffff;
  --ink: #111418; --muted: #59606c; --line: #d3d7de; --col-bg: #eceef1; --hover: rgba(22,50,79,.06);
  --p: #16324f; --p-hover: #0f2540; --p-ink: #ffffff; --p-soft: #e3eaf2; --p-deep: #16324f;
  --acc: #c6f432; --acc-soft: #f1fbd2; --acc-ink: #111418;
  --side-bg: #16324f; --side-fg: #dbe4ee; --side-hover: rgba(255,255,255,.06); --side-act-bg: rgba(255,255,255,.1); --side-act-fg: #c6f432; --side-shadow: none;
  --r: 10px; --r-in: 8px; --r-btn: 10px; --r-chip: 6px; --r-nav: 8px; --r-mark: 8px;
  --shadow: 0 1px 0 #e1e4e9, 0 0 0 1px #e8eaee;
  --shadow-hover: 0 0 0 1px #c9ced6, 0 6px 16px rgba(17,20,24,.08);
  --shadow-pop: 0 0 0 1px #c9ced6, 0 16px 40px rgba(17,20,24,.18);
  --ok-bg: #dff5e6; --ok-fg: #13612f;
  --warn-bg: #fcefc2; --warn-fg: #6e4b00;
  --bad-bg: #fde1dc; --bad-fg: #a8200d;
  --info-bg: #e3eaf2; --info-fg: #16324f;
  --neu-bg: #e8eaee; --neu-fg: #454c57;
}

/* gęstość */
:root, [data-density="standard"] { --row: 44px; --ctl: 40px; --fs: 14px; }
[data-density="compact"] { --row: 32px; --ctl: 32px; --fs: 13px; }
[data-density="touch"]   { --row: 56px; --ctl: 52px; --fs: 17px; }

/* wysoki kontrast (ControlsLight, SmartLight) */
[data-contrast="high"] {
  --bg: #000; --surface: #000; --field: #000; --ink: #fff; --muted: #fff; --line: #fff;
  --p: #fff; --p-ink: #000; --acc: #ffe600; --acc-ink: #000;
  --shadow: 0 0 0 2px #fff;
}

/* pole dotyku 44px przy mniejszym widocznym elemencie */
@media (pointer: coarse) {
  .hit44 { position: relative; }
  .hit44::after { content: ""; position: absolute; inset: -7px; }
}

:focus-visible { outline: 2px solid var(--p); outline-offset: 2px; }
body { background: var(--bg); color: var(--ink); font: 400 var(--fs)/1.45 var(--fb); }
.num { font-variant-numeric: tabular-nums; }
.mono { font-family: var(--fm); }
