/* AllurePOS — generated from tokens.json */
/* ds-dist build: no global .<style> classes; type styles are --text-<style> (font shorthand) and
   --t-<style>-size / -lh / -weight; @font-face carries unicode-range; malam sets color-scheme: dark.
   Themes: data-theme="navy-emas" | "oranye-klasik" | "malam" | "zaitun" | "kontras-tinggi" on <html>; navy-emas is also :root. */
:root, [data-theme="navy-emas"] {
  --navy: #0b2146; /* Brand navy from the logo. The fill of the check slab, primary buttons, open-bill (occupied) tables and their legend swatch, the selected chip, segment and ON Više row, the pressed menu key and stepper key; text on it is on-navy. In the light themes ink aliases it; Malam splits the two, lifting navy to a raised blue so the slab stays the one distinct object on a dark screen. Motion: a pressed menu key fills navy at once and fades back over 120ms (kasir.css --k-dur-fast, --k-ease). Oranye Klasik uses espresso and Zaitun forest green in this role. (kasir.css --k-navy) Against paper, as an open-bill table on the floor: Navy & Emas 14.69 · Oranye Klasik 13.76 · Malam 3.19 · Zaitun 12.50 · Kontras tinggi 18.25. Floor 3:1. Against paper, surface and sunken (lowest per theme), as the selected chip, segment, Više row and progress bar; in Malam selected-edge meets the floor instead: Navy & Emas 13.92 · Oranye Klasik 12.83 · Malam 2.59 · Zaitun 11.52 · Kontras tinggi 16.12. Floor 3:1. */
  --navy-raised: #16336a; /* Tier-2 pay keys on the slab (IPS QR, Online, Podeljeno) and the hover and pressed state of every navy fill (primary button, open-bill table). Text on it is on-navy; secondary text on it is slab-ink-2. (kasir.css --k-navy-raised) */
  --navy-hover: #1f3f7a; /* Hover of the tier-2 pay keys on the slab, pointer devices only. Text on it is on-navy. (kasir.css --k-navy-hover) */
  --brass: #c9973b; /* The money colour: ONE brass element per screen, always the next tap that takes money (Gotovina on the check, Potvrdi i fiskalizuj in the cash and split sheets, k-btn--money). Fill only, with on-brass text; never text, never a state colour, never white on it. On the slab it must read as a key shape against navy (3:1 or more). Oranye Klasik puts the old #FF8C2D orange in this role. In Kontras tinggi a brass control on a light surface also takes a 1px control-edge border, because brass alone sits close to surface there. (kasir.css --k-brass) Against navy, as the Gotovina key on the slab: Navy & Emas 6.04 · Oranye Klasik 6.78 · Malam 3.37 · Zaitun 5.37 · Kontras tinggi 11.07. Floor 3:1. */
  --brass-hover: #d4a54b; /* Hover of a brass fill, pointer devices only; on-brass text. (kasir.css --k-brass-hover) */
  --brass-press: #b28135; /* Pressed brass fill (in Navy & Emas the logo's wordmark gold); on-brass text. (kasir.css --k-brass-press) */
  --paper: #f4f6f9; /* Page ground: the main area, the floor-plan canvas, the menu view. In Navy & Emas a cool neutral that stays white under warm 2700-3000 K restaurant light. Also the hover fill of the Kartica key on the slab. (kasir.css --k-paper) */
  --surface: #ffffff; /* Raised surfaces: header, order column, tab strip, menu keys, free tables, fields, wall tags, the Više popover, modals, and the Kartica key on the check. In the light themes also the colour of text on navy and danger fills (on-navy and on-danger alias it). In Malam the Kartica key is a dark key on the raised-blue slab, identified by its ink label (see the ratio). (kasir.css --k-surface) Against navy, as the Kartica key on the slab, reported with no floor: its ink label identifies it: Navy & Emas 15.91 · Oranye Klasik 15.50 · Malam 2.90 · Zaitun 14.02 · Kontras tinggi 18.25. */
  --sunken: #edf0f5; /* Tracks and quiet fills: the segmented-control track, data-table header rows, stepper keys, the fiscal-data disclosure, hover of quiet and secondary buttons, the neutral pill, disabled fills, the photo well of large menu keys. (kasir.css --k-sunken) */
  --sunken-press: #dde3ec; /* Pressed state on sunken or white controls (chips, secondary and quiet buttons, stepper keys, menu rows, tabs, the open disclosure, the open Više trigger) and the pressed Kartica key. (kasir.css --k-sunken-press) */
  --ink: var(--navy); /* Intentional addition. Primary text and icons on paper, surface, sunken and sunken-press: item names, prices, quantities, field text, the clock, the shop name, the order-column table label, the Kartica key label; also the marks that sit on those grounds (the selected-tab bar, the field focus border, checkbox accent-color, the fiscal-data dot). kasir.css paints all of these with --k-navy; ink is that role on its own, so a theme can move text without moving the slab. Aliases navy in every theme except Malam. (Navy & Emas resolves it to kasir.css --k-navy.) Contrast on paper, surface, sunken and sunken-press (lowest per theme): Navy & Emas 12.33 · Oranye Klasik 11.19 · Malam 11.39 · Zaitun 9.90 · Kontras tinggi 14.29. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --slate: #46526e; /* Secondary text and icons on paper, surface and sunken, and on sunken-press while a quiet button or tab is pressed: the waiter line, labels, inactive tabs, table headers, icon buttons, the remove key, the neutral pill, the legend, wall tags, disclosure chevrons. (kasir.css --k-slate) Contrast on paper, surface, sunken and sunken-press (lowest per theme): Navy & Emas 6.04 · Oranye Klasik 5.85 · Malam 7.31 · Zaitun 5.34 · Kontras tinggi 10.04. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --ink-3: #5c6882; /* Muted text on paper, surface and sunken: placeholders, VAT rows, seats, the EUR line, line detail, timestamps, empty states, the version line, disabled labels, search icons. Never on navy (use slab-ink-2). (kasir.css --k-ink-3) Contrast on paper, surface and sunken (lowest per theme): Navy & Emas 4.89 · Oranye Klasik 5.10 · Malam 6.19 · Zaitun 4.92 · Kontras tinggi 8.51. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --line: #d6dce5; /* Decorative dividers only: order-line rules, panel edges (the bridged --border), menu-key and popover edges, the segmented-control track edge, wall-tag edges. Never the only boundary of a control (use line-strong). In the brand themes it carries no contrast floor (1.38:1 in Navy & Emas); in Kontras tinggi it meets 3:1 on paper, surface and sunken, because there borders separate every surface. (kasir.css --k-line) Contrast on paper, surface and sunken (lowest per theme): Kontras tinggi 4.15. Floor 3:1. */
  --line-strong: #7b879c; /* Borders that carry meaning, 3:1 or more on paper, surface and sunken: fields, secondary buttons and icon buttons, category chips, the free-table edge (1.5px), walls on the floor, the dotted quantity underline, scrollbars, the hover edge of a menu key. (kasir.css --k-line-strong) Contrast on paper, surface and sunken (lowest per theme): Navy & Emas 3.18 · Oranye Klasik 3.35 · Malam 3.60 · Zaitun 3.26 · Kontras tinggi 7.88. Floor 3:1. */
  --slab-ink-2: #afbbd3; /* Secondary text on navy fills: "Ukupno" and the EUR line on the check, the waiter line and the RSD unit on an open-bill table, the VAT line on a pressed menu key. On navy and navy-raised only. (kasir.css --k-slab-ink-2) Contrast on navy and navy-raised (lowest per theme): Navy & Emas 6.34 · Oranye Klasik 6.79 · Malam 4.59 · Zaitun 6.70 · Kontras tinggi 9.97. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --slab-edge: #6a7faf; /* 1px edge of the tier-2 pay keys on the slab, so the key shape reads against navy (3:1 or more). (kasir.css --k-slab-edge) Contrast on navy: Navy & Emas 3.99 · Oranye Klasik 4.56 · Malam 3.38 · Zaitun 4.77 · Kontras tinggi 7.18. Floor 3:1. */
  --focus: #1f5fd0; /* Keyboard focus ring outside the slab: outline 2px solid, offset 2px, on every button, link, field, summary and tab stop (inset -2px inside scrolling strips and stepper keys; a focused selected chip takes focus-on-slab instead, because its inset ring sits on navy). Solid, 3:1 or more on paper, surface and sunken. (kasir.css --k-focus) Contrast on paper, surface and sunken (lowest per theme): Navy & Emas 5.10 · Oranye Klasik 4.74 · Malam 7.46 · Zaitun 4.74 · Kontras tinggi 8.22. Floor 3:1. */
  --focus-on-slab: #e6b85c; /* Focus ring inside the check slab (the gold-light ring), and the inset ring of a focused selected chip, which sits on its navy fill; 3:1 or more on navy. (kasir.css --k-focus-on-slab) Contrast on navy: Navy & Emas 8.62 · Oranye Klasik 9.04 · Malam 4.03 · Zaitun 7.66 · Kontras tinggi 12.66. Floor 3:1. */
  --on-navy: var(--surface); /* Intentional addition. Text and icons on navy, navy-raised and navy-hover fills: the check total (36/700) and the tier-2 pay-key labels, primary-button labels, open-bill table labels and bills, the selected chip and segment, the pressed menu key and stepper glyph. kasir.css paints these with --k-surface; this is that role on its own. Aliases surface in the light themes. (Navy & Emas resolves it to kasir.css --k-surface.) Contrast on navy, navy-raised and navy-hover (lowest per theme): Navy & Emas 10.24 · Oranye Klasik 8.61 · Malam 4.78 · Zaitun 7.97 · Kontras tinggi 10.21. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --on-brass: var(--navy); /* Intentional addition. Text and icons on brass, brass-hover and brass-press: the Gotovina key, money buttons. Never white on brass or orange. kasir.css uses --k-navy here (the check sets --k-pay-fg). Aliases navy in the light themes. (Navy & Emas resolves it to kasir.css --k-navy.) Contrast on brass, brass-hover and brass-press (lowest per theme): Navy & Emas 4.61 · Oranye Klasik 5.39 · Malam 7.79 · Zaitun 4.70 · Kontras tinggi 8.65. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --on-warn-fill: var(--navy); /* Intentional addition. Text and icons on warn-fill: the training banner (15/600) and the training-on Više row. kasir.css uses --k-navy here; frozen JS writes #000 on the header's bridged --gold, which also passes because warn-fill stays a light amber in every theme. Aliases navy in the light themes. (Navy & Emas resolves it to kasir.css --k-navy.) Contrast on warn-fill: Navy & Emas 9.47 · Oranye Klasik 9.37 · Malam 10.97 · Zaitun 8.42 · Kontras tinggi 12.67. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --on-danger: var(--surface); /* Intentional addition. Text and icons on danger and danger-ink fills: the danger button (Storno, refund confirm), the L-PFR offline pill, count bubbles. kasir.css uses --k-surface here. Aliases surface in the light themes; in Malam danger is a light red, so this text is dark. (Navy & Emas resolves it to kasir.css --k-surface.) Contrast on danger and danger-ink (lowest per theme): Navy & Emas 6.54 · Oranye Klasik 6.43 · Malam 8.54 · Zaitun 6.48 · Kontras tinggi 8.55. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --control-edge: #00000000; /* Intentional addition. The 1px border of controls that are otherwise told apart from their ground only by fill: the brass money key on a light surface, stepper keys, the fiscal-data disclosure. Transparent in the brand themes (kasir.css draws none); line-strong in Kontras tinggi, where every control is separated from its ground by a border of 3:1 or more. (Not in kasir.css.) Contrast on paper, surface and sunken (lowest per theme): Kontras tinggi 7.88. Floor 3:1. */
  --selected-edge: #00000000; /* Intentional addition. The 1px inset edge of a selected navy fill on paper, surface or sunken: the selected chip (as its border), the selected segment and the ON Više row, and for the same reason the indeterminate progress bar on its sunken track. Transparent where navy alone clears 3:1 on those grounds (kasir.css draws none). Slab-edge in Malam, where the raised-blue navy sits under 3:1 on its dark grounds (see navy) and on-navy vs the unselected slate glyph is too close to be a second cue, so this edge draws the selected shape. (Not in kasir.css.) Contrast on paper, surface and sunken (lowest per theme): Malam 8.76. Floor 3:1. Against navy, the navy fill it rings, reported with no floor: Malam 3.38. */
  --sheet-edge: #00000000; /* Intentional addition. The 1px edge of a modal sheet over the scrim. Transparent where the sheet fill already stands off the scrim (kasir.css draws none). Line-strong in Malam, where the dark sheet sits on a near-black scrim (1.11 to 1.85 without it) and the e3 shadow does not show on black. The scrim only darkens the ground under it, so the ratio against paper is a lower bound (4.70 over the scrimmed paper). (Not in kasir.css.) Against paper, the ground under the scrim: Malam 4.43. Floor 3:1. */
  --ok: #1b7a46; /* Success as text and status dots on paper and surface: the L-PFR online dot, the loyalty discount line, split covered. Not a fill for text (a filled success badge is ok-ink on ok-tint). Always paired with a word or an icon: ok and danger are close in lightness (see the ratio), so hue alone never carries the state, and the ok-tint pill vs the solid danger pill also differ in lightness. (kasir.css --k-ok) Contrast on paper and surface (lowest per theme): Navy & Emas 4.95 · Oranye Klasik 4.68 · Malam 8.62 · Zaitun 4.74 · Kontras tinggi 8.35. Floor 4.5:1, 7:1 in Kontras tinggi. Against danger, as text colours, reported with no floor: hue alone never carries the state, a word or an icon does: Navy & Emas 1.22 · Oranye Klasik 1.22 · Malam 1.13 · Zaitun 1.22 · Kontras tinggi 1.02. */
  --ok-ink: #17613a; /* Success text on ok-tint: the L-PFR online pill, the change-due block, the loyalty-applied pill. (kasir.css --k-ok-ink) Contrast on ok-tint: Navy & Emas 6.61 · Oranye Klasik 6.61 · Malam 9.86 · Zaitun 6.61 · Kontras tinggi 10.16. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --ok-tint: #e7f4ec; /* Success fill behind ok-ink text (pills, the change-due block). It differs in lightness from the danger fill by 3:1 or more in every theme, so the online pill and the solid offline pill never rely on hue alone. (kasir.css --k-ok-tint) Against danger, as the online pill beside the solid offline pill, a lightness difference and not hue alone: Navy & Emas 5.77 · Oranye Klasik 5.77 · Malam 6.58 · Zaitun 5.77 · Kontras tinggi 7.49. Floor 3:1. */
  --warn-fill: #f4c04f; /* Attention fill: the training banner, the training-on state of its Više row, the dot on the Više trigger (ringed with warn-line and surface). Text on it is on-warn-fill. Kept a light amber in every theme so dark text always reads. (Also the bridged --gold inside .pos-header.) (kasir.css --k-warn-fill) */
  --warn-ink: #6b4600; /* Warning text on warn-tint, warn-hover and surface: the "Čeka SDC" and "Otvorene porudžbine" alert buttons, the warn pill, pending rows, the amber status text in the history list (the bridged --gold outside the header). (kasir.css --k-warn-ink) Contrast on warn-tint, warn-hover and surface (lowest per theme): Navy & Emas 6.82 · Oranye Klasik 6.82 · Malam 8.39 · Zaitun 6.82 · Kontras tinggi 8.81. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --warn-tint: #fff1cf; /* Fill of the warn button and the warn pill, behind warn-ink text. (kasir.css --k-warn-tint) */
  --warn-line: #b07a08; /* 1px border of the warn button and of the training dot on the Više trigger, 3:1 or more on surface. (kasir.css --k-warn-line) Contrast on surface: Navy & Emas 3.73 · Oranye Klasik 3.67 · Malam 5.42 · Zaitun 3.69 · Kontras tinggi 5.70. Floor 3:1. */
  --warn-hover: #fde6a8; /* Hover and pressed fill of the warn button, behind warn-ink text. (kasir.css --k-warn-hover) */
  --danger: #b3261e; /* Destructive and fiscal-error states, and nothing else: text and border of danger-ghost buttons (Očisti) on surface and on danger-tint, the invalid-field border, the pressed remove glyph; as a fill (danger button, L-PFR offline pill, count bubble) it carries on-danger text. Offline also says so in words ("L-PFR offline") and uses a solid fill where online uses a light tint. (Also the bridged --red.) (kasir.css --k-danger) Contrast on surface and danger-tint (lowest per theme): Navy & Emas 5.67 · Oranye Klasik 5.67 · Malam 7.13 · Zaitun 5.67 · Kontras tinggi 7.48. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --danger-ink: #8c1d16; /* Hover and pressed fill of the danger button (with on-danger text); pressed danger-ghost text and error-row text on danger-tint. (kasir.css --k-danger-ink) Contrast on danger-tint: Navy & Emas 7.91 · Oranye Klasik 7.91 · Malam 9.59 · Zaitun 7.91 · Kontras tinggi 10.65. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --danger-tint: #fcebea; /* Hover and pressed fill of danger-ghost buttons and the remove key, error rows; behind danger or danger-ink text. (kasir.css --k-danger-tint) */
  --info: #1a4fa8; /* Information text on info-tint and surface: the reservation-time chip on tables and in the legend, the offline-sync queue pill. Replaces the old purple and cyan. (Also the bridged --teal.) (kasir.css --k-info) Contrast on info-tint and surface (lowest per theme): Navy & Emas 6.71 · Oranye Klasik 6.71 · Malam 7.09 · Zaitun 6.71 · Kontras tinggi 8.82. Floor 4.5:1, 7:1 in Kontras tinggi. */
  --info-tint: #e8f0fc; /* Fill of the reservation chip, the legend chip and the info pill, behind info text. (kasir.css --k-info-tint) */
  --scrim: rgba(11, 33, 70, 0.48); /* Backdrop of the non-fiscal modals only, with no blur (GPU cost on all-in-one tills). The fiscal modal keeps its frozen rgba(0, 0, 0, .85). kasir.css writes the Navy & Emas alpha as .48. Motion: a modal settles over 180ms (kasir.css --k-dur) with opacity and translateY(8px) to 0. (kasir.css --k-scrim) */
  --e1: 0 1px 2px rgba(11, 33, 70, 0.10); /* Open-bill tables and the check slab: the only resting elevation in the page. (kasir.css --k-e1: 0 1px 2px rgba(11, 33, 70, .10).) Same geometry in every theme: the shadow ink follows the theme (espresso, forest, black), and Malam uses black at 0.40/0.50/0.64 so the lift still shows on a dark ground. */
  --e2: 0 6px 16px rgba(11, 33, 70, 0.14); /* The Više popover and the open fiscal-fields sheet. The popover fades in over 120ms (kasir.css --k-dur-fast). (kasir.css --k-e2: 0 6px 16px rgba(11, 33, 70, .14).) Same geometry in every theme: the shadow ink follows the theme (espresso, forest, black), and Malam uses black at 0.40/0.50/0.64 so the lift still shows on a dark ground. */
  --e3: 0 24px 48px rgba(11, 33, 70, 0.28); /* Modals. A modal settles over 180ms (kasir.css --k-dur) with opacity and translateY(8px) to 0. (kasir.css --k-e3: 0 24px 48px rgba(11, 33, 70, .28).) Same geometry in every theme: the shadow ink follows the theme (espresso, forest, black), and Malam uses black at 0.40/0.50/0.64 so the lift still shows on a dark ground. */
}
[data-theme="oranye-klasik"] {
  --navy: #2b2118;
  --navy-raised: #4a392c;
  --navy-hover: #5b4737;
  --brass: #ff8c2d;
  --brass-hover: #ffa052;
  --brass-press: #e8791f;
  --paper: #f5efe4;
  --surface: #fffdf9;
  --sunken: #efe7d9;
  --sunken-press: #e4d8c5;
  --ink: var(--navy);
  --slate: #5e4b3d;
  --ink-3: #6f5d4e;
  --line: #e2d9cb;
  --line-strong: #8c7a69;
  --slab-ink-2: #d9c9b7;
  --slab-edge: #9d8672;
  --focus: #1f5fd0;
  --focus-on-slab: #ffb565;
  --on-navy: var(--surface);
  --on-brass: var(--navy);
  --on-warn-fill: var(--navy);
  --on-danger: var(--surface);
  --control-edge: #00000000;
  --selected-edge: #00000000;
  --sheet-edge: #00000000;
  --ok: #1b7a46;
  --ok-ink: #17613a;
  --ok-tint: #e7f4ec;
  --warn-fill: #f4c04f;
  --warn-ink: #6b4600;
  --warn-tint: #fff1cf;
  --warn-line: #b07a08;
  --warn-hover: #fde6a8;
  --danger: #b3261e;
  --danger-ink: #8c1d16;
  --danger-tint: #fcebea;
  --info: #1a4fa8;
  --info-tint: #e8f0fc;
  --scrim: rgba(43, 33, 24, 0.48);
  --e1: 0 1px 2px rgba(43, 33, 24, 0.10);
  --e2: 0 6px 16px rgba(43, 33, 24, 0.14);
  --e3: 0 24px 48px rgba(43, 33, 24, 0.28);
}
[data-theme="malam"] {
  color-scheme: dark;
  --navy: #3a62a8;
  --navy-raised: #4169ae;
  --navy-hover: #4a72b8;
  --brass: #e6bc68;
  --brass-hover: #efc97e;
  --brass-press: #cfa152;
  --paper: #0a0f18;
  --surface: #131a26;
  --sunken: #1b2433;
  --sunken-press: #253043;
  --ink: #e9eef6;
  --slate: #b7c1d2;
  --ink-3: #98a4b8;
  --line: #283346;
  --line-strong: #6d7a91;
  --slab-ink-2: #e6ecf7;
  --slab-edge: #afc3e8;
  --focus: #8ab4ff;
  --focus-on-slab: #f5cf7a;
  --on-navy: #ffffff;
  --on-brass: #0e1420;
  --on-warn-fill: #0e1420;
  --on-danger: #1a0707;
  --control-edge: #00000000;
  --selected-edge: var(--slab-edge);
  --sheet-edge: var(--line-strong);
  --ok: #5ccb8b;
  --ok-ink: #93e2b5;
  --ok-tint: #0f2c1d;
  --warn-fill: #f4c04f;
  --warn-ink: #ffd37a;
  --warn-tint: #33270a;
  --warn-line: #b8871c;
  --warn-hover: #45350f;
  --danger: #ff8a80;
  --danger-ink: #ffb4ab;
  --danger-tint: #3a1414;
  --info: #8db4f5;
  --info-tint: #15264a;
  --scrim: rgba(0, 0, 0, 0.64);
  --e1: 0 1px 2px rgba(0, 0, 0, 0.40);
  --e2: 0 6px 16px rgba(0, 0, 0, 0.50);
  --e3: 0 24px 48px rgba(0, 0, 0, 0.64);
}
[data-theme="zaitun"] {
  --navy: #173024;
  --navy-raised: #264634;
  --navy-hover: #325843;
  --brass: #c9973b;
  --brass-hover: #d4a54b;
  --brass-press: #bd8c3a;
  --paper: #f3f1e8;
  --surface: #fffefa;
  --sunken: #ebe8dc;
  --sunken-press: #dcd8c8;
  --ink: var(--navy);
  --slate: #4b5746;
  --ink-3: #5b6655;
  --line: #d8d4c4;
  --line-strong: #7a826e;
  --slab-ink-2: #c3d3c5;
  --slab-edge: #7f9d88;
  --focus: #1f5fd0;
  --focus-on-slab: #e6b85c;
  --on-navy: var(--surface);
  --on-brass: var(--navy);
  --on-warn-fill: var(--navy);
  --on-danger: var(--surface);
  --control-edge: #00000000;
  --selected-edge: #00000000;
  --sheet-edge: #00000000;
  --ok: #1b7a46;
  --ok-ink: #17613a;
  --ok-tint: #e7f4ec;
  --warn-fill: #f4c04f;
  --warn-ink: #6b4600;
  --warn-tint: #fff1cf;
  --warn-line: #b07a08;
  --warn-hover: #fde6a8;
  --danger: #b3261e;
  --danger-ink: #8c1d16;
  --danger-tint: #fcebea;
  --info: #1a4fa8;
  --info-tint: #e8f0fc;
  --scrim: rgba(23, 48, 36, 0.48);
  --e1: 0 1px 2px rgba(23, 48, 36, 0.10);
  --e2: 0 6px 16px rgba(23, 48, 36, 0.14);
  --e3: 0 24px 48px rgba(23, 48, 36, 0.28);
}
[data-theme="kontras-tinggi"] {
  --navy: #061430;
  --navy-raised: #1a3163;
  --navy-hover: #243f78;
  --brass: #f2c35b;
  --brass-hover: #f7d27a;
  --brass-press: #dcab45;
  --paper: #ffffff;
  --surface: #ffffff;
  --sunken: #eef1f6;
  --sunken-press: #dfe4ec;
  --ink: var(--navy);
  --slate: #26324a;
  --ink-3: #39455c;
  --line: #6b7486;
  --line-strong: #3e4a60;
  --slab-ink-2: #dde5f3;
  --slab-edge: #8ea3cc;
  --focus: #0038b8;
  --focus-on-slab: #ffd166;
  --on-navy: var(--surface);
  --on-brass: var(--navy);
  --on-warn-fill: var(--navy);
  --on-danger: var(--surface);
  --control-edge: var(--line-strong);
  --selected-edge: #00000000;
  --sheet-edge: #00000000;
  --ok: #0b5a2e;
  --ok-ink: #064222;
  --ok-tint: #e3f4ea;
  --warn-fill: #ffd24d;
  --warn-ink: #553700;
  --warn-tint: #fff4d6;
  --warn-line: #8a5e00;
  --warn-hover: #ffe699;
  --danger: #9b0d0d;
  --danger-ink: #700808;
  --danger-tint: #fdecec;
  --info: #0b3c8c;
  --info-tint: #e6eefb;
  --scrim: rgba(0, 0, 0, 0.6);
  --e1: 0 1px 2px rgba(0, 0, 0, 0.10);
  --e2: 0 6px 16px rgba(0, 0, 0, 0.14);
  --e3: 0 24px 48px rgba(0, 0, 0, 0.28);
}
:root {
  --space-1: 4px; /* Icon-to-label gaps in chips and prices, the reservation chip inset, the Više popover offset under its trigger, the menu-grid top margin. (kasir.css --k-1) */
  --space-2: 8px; /* Gaps inside groups (buttons, header items, the pay grid), order-line vertical padding, the slab's outer margin, the sheet's offset above the footer. (kasir.css --k-2) */
  --space-3: 12px; /* Panel padding (order column; main area at 1024 and 1366), gaps between groups, the slab's padding, horizontal padding of rows, fields and the header. (kasir.css --k-3) */
  --space-4: 16px; /* Button horizontal padding, gaps between sections, banner padding, the detail-size menu row padding. (kasir.css --k-4) */
  --space-5: 24px; /* Panel padding at 1600px and wider, the legend's column gap, room for a count bubble beside an alert label. (kasir.css --k-5) */
  --space-6: 32px; /* End padding of the category-chip row, so the last chip scrolls clear of the edge fade. (kasir.css --k-6) */
  --r-control: 6px; /* Buttons, fields, chips, segments, menu keys, pay keys, stepper keys, tags, the reservation chip, legend swatches. (kasir.css --k-r-control) */
  --r-card: 10px; /* Rectangular floor tables, the Više popover, the fiscal-fields sheet, info blocks inside sheets, data-table cards. (kasir.css --k-r-card) */
  --r-sheet: 14px; /* The check slab and modals. (kasir.css --k-r-sheet) */
  --r-round: 999px; /* Status pills, count bubbles and round tables only, so round means status. (kasir.css --k-r-round) */
  --hit: 44px; /* Minimum real hit box for every interactive element: buttons, icon buttons, fields, chips, segments, tabs, stepper keys, Više rows, the quantity figure. (kasir.css --k-hit) */
  --h-key2: 48px; /* Tier-2 pay keys, modal fields, the search field, k-btn--lg, the PDA table picker. (kasir.css --k-h-key2) */
  --h-key: 56px; /* Tier-1 pay keys (Gotovina, Kartica), modal primary and money buttons, the cash input, k-btn--xl. (kasir.css --k-h-key) */
  --h-head: 52px; /* The header row, one row at every width. (kasir.css --k-h-head) */
  --h-tabs: 48px; /* The view-tab strip; the PDA cart panel offset reads it. (kasir.css --k-h-tabs) */
  --cart: clamp(360px, 29vw, 440px); /* Order-column width: 360 at 1024, 396 at 1366, 440 at 1920. (kasir.css --k-cart) */
  --key-min: 136px; /* Minimum column width of small menu keys (grid-sm); 152px at 1600px and wider; grid-md 168px, grid-lg 216px, grid-detail 100%. Set per size class on #menu-grid, columns repeat(auto-fill, minmax(key-min, 1fr)) with a 6px gap. (kasir.css --k-key-min, scoped to #menu-grid) */
  --key-row: 96px; /* Minimum height of small menu keys (grid-sm); grid-md and grid-lg 120px, grid-detail 56px. Each row takes its tallest key. (kasir.css --k-key-row, scoped to #menu-grid) */
  --z-canvas: 1; /* Content lifted inside a panel (the stepper over the price box). (kasir.css --k-z-canvas) */
  --z-pda: 100; /* The PDA cart panel. (kasir.css --k-z-pda) */
  --z-banner: 500; /* The sticky training banner. (kasir.css --k-z-banner) */
  --z-lock: 9999; /* The staff lock screen (value unchanged; toasts also sit here until S8.1). (kasir.css --k-z-lock) */
  --z-modal: 10000; /* .modal-overlay, frozen. (kasir.css --k-z-modal) */
  --z-toast: 10050; /* Toasts (S8.1). (kasir.css --k-z-toast) */
  --z-lpfr: 10060; /* The L-PFR banner, above the payment modals so "NE IZDAVATI račune" stays readable over an open cash sheet. (kasir.css --k-z-lpfr) */
  --z-lsm: 100002; /* The LSM modal (value unchanged). (kasir.css --k-z-lsm) */
  --z-top: 999999; /* Terminal selector, SaaS lock, message box. (kasir.css --k-z-top) */
  --font-sans: "Fira Sans", "Segoe UI Variable Text", "Segoe UI", Roboto, system-ui, sans-serif;
  --font-condensed: "Fira Sans Condensed", "Bahnschrift SemiCondensed", "Segoe UI", Roboto, sans-serif;
  --text-total: 700 36px/1.1 var(--font-sans); /* The two numbers read aloud: the check total (on-navy on the slab) and the change due (kusur). Money, quantities and the clock add font-variant-numeric: tabular-nums lining-nums. (kasir.css --k-t-2xl / --k-lh-2xl) */
  --text-amount: 700 28px/1.1 var(--font-sans); /* Amount due in the cash and split sheets, the typed cash amount. 700 because it is money (spec section 3). Money, quantities and the clock add font-variant-numeric: tabular-nums lining-nums. (kasir.css --k-t-xl / --k-lh-xl) */
  --text-title: 600 21px/1.2 var(--font-sans); /* Modal titles, view titles (Rezervacije, Istorija), the lock-screen title "Prijava"; the upper bound of floor-table labels. (kasir.css --k-t-lg / --k-lh-lg) */
  --text-heading: 700 17px/1.25 var(--font-sans); /* Table identity and figures at 17: the order-column table label, the quantity between the stepper keys (line-height 1), the upper bound of floor bills. Money, quantities and the clock add font-variant-numeric: tabular-nums lining-nums. (kasir.css --k-t-md / --k-lh-md, 700) */
  --text-key-lg: 600 17px/1.25 var(--font-sans); /* Tier-1 pay keys (Gotovina, Kartica), the shop name, the clock (line-height 1, tabular), large menu-key names. (kasir.css --k-t-md / --k-lh-md, 600) */
  --text-input: 400 17px/1.25 var(--font-sans); /* Text typed into fields; 17px avoids zoom on focus. Placeholders use ink-3 (15px in the half-width loyalty field). (kasir.css --k-t-md / --k-lh-md, 400) */
  --text-label: 600 15px/1.25 var(--font-sans); /* Buttons, order-line item names (up to 2 lines), menu-key names (up to 3 lines), Više rows, the disclosure, the training banner, "Ukupno" on the check. (kasir.css --k-t-sm / --k-lh-sm, 600) */
  --text-price: 700 15px/1.25 var(--font-sans); /* Order-line and menu-key prices, the loyalty discount figure. Money, quantities and the clock add font-variant-numeric: tabular-nums lining-nums. (kasir.css --k-t-sm / --k-lh-sm, 700) */
  --text-body: 400 15px/1.25 var(--font-sans); /* Body copy, empty states, checkbox labels, data-table cells. (kasir.css --k-t-sm / --k-lh-sm, 400) */
  --text-meta-strong: 600 13px/1.3 var(--font-sans); /* Field labels, the legend, the fiscal date label, wall tags (line-height 20px), the RSD unit on a table (line-height 1). (kasir.css --k-t-meta / --k-lh-meta, 600) */
  --text-meta: 400 13px/1.3 var(--font-sans); /* VAT rows, seats, the EUR line, order-line detail, timestamps, the version line. (kasir.css --k-t-meta / --k-lh-meta, 400) */
  --text-count: 700 13px/1 var(--font-sans); /* Count bubbles (on-danger on danger) and the reservation-time chip (info on info-tint). Money, quantities and the clock add font-variant-numeric: tabular-nums lining-nums. (kasir.css 700 var(--k-t-meta)/1) */
  --text-key: 600 15px/1.25 var(--font-condensed); /* Tier-2 pay keys (up to 2 balanced lines), view tabs, category chips, compact buttons, header pills and alert buttons (line-height 1), floor-table labels (clamp(15px, 18cqmin, 21px) at line-height 1.2). (kasir.css --k-t-sm / --k-lh-sm on --k-font-tight) */
  --text-meta-tight: 600 13px/1.3 var(--font-condensed); /* The waiter line on an open-bill table (slab-ink-2 on navy), the two-column VAT rows at 1300px and wider. (kasir.css --k-t-meta / --k-lh-meta on --k-font-tight) */
  --t-total-size: 36px;
  --t-total-lh: 1.1;
  --t-total-weight: 700;
  --t-amount-size: 28px;
  --t-amount-lh: 1.1;
  --t-amount-weight: 700;
  --t-title-size: 21px;
  --t-title-lh: 1.2;
  --t-title-weight: 600;
  --t-heading-size: 17px;
  --t-heading-lh: 1.25;
  --t-heading-weight: 700;
  --t-key-lg-size: 17px;
  --t-key-lg-lh: 1.25;
  --t-key-lg-weight: 600;
  --t-input-size: 17px;
  --t-input-lh: 1.25;
  --t-input-weight: 400;
  --t-label-size: 15px;
  --t-label-lh: 1.25;
  --t-label-weight: 600;
  --t-price-size: 15px;
  --t-price-lh: 1.25;
  --t-price-weight: 700;
  --t-body-size: 15px;
  --t-body-lh: 1.25;
  --t-body-weight: 400;
  --t-meta-strong-size: 13px;
  --t-meta-strong-lh: 1.3;
  --t-meta-strong-weight: 600;
  --t-meta-size: 13px;
  --t-meta-lh: 1.3;
  --t-meta-weight: 400;
  --t-count-size: 13px;
  --t-count-lh: 1;
  --t-count-weight: 700;
  --t-key-size: 15px;
  --t-key-lh: 1.25;
  --t-key-weight: 600;
  --t-meta-tight-size: 13px;
  --t-meta-tight-lh: 1.3;
  --t-meta-tight-weight: 600;
}
@font-face {
  font-family: "Fira Sans";
  src: url("fonts/fira-sans-cyrillic-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
@font-face {
  font-family: "Fira Sans";
  src: url("fonts/fira-sans-latin-ext-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  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: "Fira Sans";
  src: url("fonts/fira-sans-latin-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  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: "Fira Sans";
  src: url("fonts/fira-sans-cyrillic-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
@font-face {
  font-family: "Fira Sans";
  src: url("fonts/fira-sans-latin-ext-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  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: "Fira Sans";
  src: url("fonts/fira-sans-latin-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  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: "Fira Sans";
  src: url("fonts/fira-sans-cyrillic-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
@font-face {
  font-family: "Fira Sans";
  src: url("fonts/fira-sans-latin-ext-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  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: "Fira Sans";
  src: url("fonts/fira-sans-latin-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  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: "Fira Sans Condensed";
  src: url("fonts/fira-sans-condensed-cyrillic-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
@font-face {
  font-family: "Fira Sans Condensed";
  src: url("fonts/fira-sans-condensed-latin-ext-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  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: "Fira Sans Condensed";
  src: url("fonts/fira-sans-condensed-latin-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  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;
}
