/* Atomys Design Language 2.1.0 — kompletní balíček: písma, tokeny, základ a komponenty.
 * Vložte jeden soubor; složky fonty/ a ikony/ musí ležet vedle něj. */

/* Atomys Design Language 2.1.0 — písma. IBM Plex je pod SIL OFL 1.1 (viz LICENCE-*.txt).
 * Soubory jsou z balíčků Fontsource, neořezávat ani neupravovat (Reserved Font Name „Plex“). */
@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: italic;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-cyrillic-ext-wdth-italic.woff2") format("woff2");
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: normal;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-cyrillic-ext-wdth-normal.woff2") format("woff2");
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: italic;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-cyrillic-wdth-italic.woff2") format("woff2");
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: normal;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-cyrillic-wdth-normal.woff2") format("woff2");
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: italic;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-greek-wdth-italic.woff2") format("woff2");
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}

@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: normal;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-greek-wdth-normal.woff2") format("woff2");
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}

@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: italic;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-vietnamese-wdth-italic.woff2") format("woff2");
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: normal;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-vietnamese-wdth-normal.woff2") format("woff2");
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: italic;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-latin-ext-wdth-italic.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: normal;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-latin-ext-wdth-normal.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

@font-face {
  font-family: "IBM Plex Sans Variable";
  font-style: italic;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-latin-wdth-italic.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: "IBM Plex Sans Variable";
  font-style: normal;
  font-display: swap;
  font-weight: 100 700;
  font-stretch: 75% 100%;
  src: url("./fonty/ibm-plex-sans-latin-wdth-normal.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: "IBM Plex Mono";
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url("./fonty/ibm-plex-mono-cyrillic-ext-400-normal.woff2") format("woff2");
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url("./fonty/ibm-plex-mono-cyrillic-ext-500-normal.woff2") format("woff2");
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url("./fonty/ibm-plex-mono-cyrillic-400-normal.woff2") format("woff2");
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url("./fonty/ibm-plex-mono-cyrillic-500-normal.woff2") format("woff2");
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url("./fonty/ibm-plex-mono-vietnamese-400-normal.woff2") format("woff2");
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url("./fonty/ibm-plex-mono-vietnamese-500-normal.woff2") format("woff2");
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url("./fonty/ibm-plex-mono-latin-ext-400-normal.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url("./fonty/ibm-plex-mono-latin-ext-500-normal.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

@font-face {
  font-family: "IBM Plex Mono";
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url("./fonty/ibm-plex-mono-latin-400-normal.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: "IBM Plex Mono";
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url("./fonty/ibm-plex-mono-latin-500-normal.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: "IBM Plex Sans Variable Fallback";
  font-weight: 100 500;
  src: local("Arial"), local("ArialMT"), local("Liberation Sans"), local("Arimo");
  size-adjust: 101.17%;
  ascent-override: 101.32%;
  descent-override: 27.18%;
  line-gap-override: 0.00%;
}

@font-face {
  font-family: "IBM Plex Sans Variable Fallback";
  font-weight: 600 900;
  src: local("Arial Bold"), local("Arial-BoldMT"), local("Liberation Sans Bold"), local("Arimo Bold");
  size-adjust: 101.17%;
  ascent-override: 101.32%;
  descent-override: 27.18%;
  line-gap-override: 0.00%;
}

@font-face {
  font-family: "IBM Plex Mono Fallback";
  font-weight: 100 500;
  src: local("Courier New"), local("CourierNewPSMT"), local("Liberation Mono"), local("Cousine");
  size-adjust: 99.98%;
  ascent-override: 102.52%;
  descent-override: 27.50%;
  line-gap-override: 0.00%;
}

@font-face {
  font-family: "IBM Plex Mono Fallback";
  font-weight: 600 900;
  src: local("Courier New Bold"), local("CourierNewPS-BoldMT"), local("Liberation Mono Bold"), local("Cousine Bold");
  size-adjust: 99.98%;
  ascent-override: 102.52%;
  descent-override: 27.50%;
  line-gap-override: 0.00%;
}

/* Atomys Design Language 2.1.0 — CSS tokeny. Generováno z tokens/design-tokens.json, needitovat ručně.
 *
 * <html data-vzhled="tiskopis|dilna|atomys" data-theme="light|dark" data-hustota="kancelar|dilna|dotyk" data-area="dokumenty|provoz|finance|crm|atomys">
 * Bez data-theme platí motiv systému. Vzhled i motiv lze nastavit i na vnořeném prvku
 * (například náhled vzhledu v nastavení).
 * Podpora prohlížečů: Chrome a Edge 123+, Firefox 120+, Safari 17.5+ (CSS light-dark() a color-mix()).
 */

/* Motiv: přepíná jen color-scheme, barvy vzhledů jsou v light-dark(). */
:root {
  color-scheme: light dark;
}
[data-theme="light"] {
  color-scheme: light;
}
[data-theme="dark"] {
  color-scheme: dark;
}

/* Vzhled Tiskopis (výchozí) */
:root,
[data-vzhled="tiskopis"] {
  --at-canvas: light-dark(#F4F6F8, #13171C);
  --at-surface-1: light-dark(#FFFFFF, #1E232A);
  --at-surface-2: light-dark(#E8EBEF, #282E36);
  --at-ink: light-dark(#15191E, #ECEEF1);
  --at-ink-soft: light-dark(#39414B, #C6CBD2);
  --at-muted: light-dark(#58616C, #9CA5AF);
  --at-rule: light-dark(#D5DAE0, #343B45);
  --at-rule-strong: light-dark(#A3ABB5, #58616D);
  --at-field-border: light-dark(#737C87, #808995);
  --at-focus: light-dark(#15191E, #FFD43B);
  --at-focus-halo: light-dark(#FFD43B, #FFD43B);
  --at-success: light-dark(#1B6B3A, #6CCB8C);
  --at-success-soft: light-dark(#E2F1E6, #173222);
  --at-warning: light-dark(#7C5400, #F2B45A);
  --at-warning-soft: light-dark(#FBF0D2, #36290F);
  --at-danger: light-dark(#B3261E, #FF8F85);
  --at-danger-soft: light-dark(#FBE8E6, #3D1D1B);
  --at-info: light-dark(#545659, #A9B1BC);
  --at-info-soft: light-dark(#E6EAEE, #29303A);
  --at-bar: light-dark(#FFFFFF, #1E232A);
  --at-on-bar: light-dark(#15191E, #ECEEF1);
  --at-bar-muted: light-dark(#58616C, #9CA5AF);
  --at-bar-rule: light-dark(#D5DAE0, #343B45);
  --at-bar-field: light-dark(#FFFFFF, #13171C);
  --at-bar-field-border: light-dark(#737C87, #808995);
  --at-table-head: light-dark(#E8EBEF, #282E36);
  --at-on-table-head: light-dark(#2B323B, #D5D9DF);
  --at-overlay: light-dark(rgba(21, 25, 30, 0.48), rgba(0, 0, 0, 0.62));
  --at-dokumenty-accent: light-dark(#2B4199, #3F5DB5);
  --at-dokumenty-accent-hover: light-dark(#213380, #4C6AC2);
  --at-dokumenty-accent-border: light-dark(#213380, #5579C6);
  --at-dokumenty-on-accent: light-dark(#FFFFFF, #FFFFFF);
  --at-dokumenty-accent-text: light-dark(#2B4199, #86B0E6);
  --at-dokumenty-accent-soft: light-dark(#E7ECF8, #1A2A40);
  --at-dokumenty-on-bar-accent: light-dark(#2B4199, #86B0E6);
  --at-provoz-accent: light-dark(#7E3317, #A8471F);
  --at-provoz-accent-hover: light-dark(#662913, #B8552B);
  --at-provoz-accent-border: light-dark(#662913, #C15E30);
  --at-provoz-on-accent: light-dark(#FFFFFF, #FFFFFF);
  --at-provoz-accent-text: light-dark(#7E3317, #E07B45);
  --at-provoz-accent-soft: light-dark(#F5E8E1, #372218);
  --at-provoz-on-bar-accent: light-dark(#7E3317, #E07B45);
  --at-finance-accent: light-dark(#006670, #0C6E75);
  --at-finance-accent-hover: light-dark(#00535B, #10808A);
  --at-finance-accent-border: light-dark(#00535B, #2C878E);
  --at-finance-on-accent: light-dark(#FFFFFF, #FFFFFF);
  --at-finance-accent-text: light-dark(#006670, #62C0C8);
  --at-finance-accent-soft: light-dark(#DFEEEF, #142E31);
  --at-finance-on-bar-accent: light-dark(#006670, #62C0C8);
  --at-crm-accent: light-dark(#8A1F4A, #8F2A54);
  --at-crm-accent-hover: light-dark(#711A3D, #A0345F);
  --at-crm-accent-border: light-dark(#711A3D, #B95D7E);
  --at-crm-on-accent: light-dark(#FFFFFF, #FFFFFF);
  --at-crm-accent-text: light-dark(#8A1F4A, #EE9DB8);
  --at-crm-accent-soft: light-dark(#F7E7EE, #3A1D29);
  --at-crm-on-bar-accent: light-dark(#8A1F4A, #EE9DB8);
  --at-atomys-accent: light-dark(#1B1F24, #EEF0F3);
  --at-atomys-accent-hover: light-dark(#353B43, #FFFFFF);
  --at-atomys-accent-border: light-dark(#1B1F24, #EEF0F3);
  --at-atomys-on-accent: light-dark(#FFFFFF, #15191E);
  --at-atomys-accent-text: light-dark(#1B1F24, #EEF0F3);
  --at-atomys-accent-soft: light-dark(#E6E9ED, #2A2F36);
  --at-atomys-on-bar-accent: light-dark(#1B1F24, #EEF0F3);
  --at-radius-control: 2px;
  --at-radius-surface: 0px;
  --at-radius-dialog: 2px;
  --at-border-rule: 1px;
  --at-bar-edge: 3px;
  --at-shadow-layer: 0 1px 0 rgb(21 25 30 / 0.06), 0 6px 16px rgb(21 25 30 / 0.14);
  --at-panel-border: 0px;
  --at-panel-padding: 0px;
  --at-panel-gap: 1.5rem;
  --at-content-surface: var(--at-surface-1);
  --at-nav-surface: var(--at-canvas);
  --at-nav-rule: var(--at-rule);
  --at-nav-padding-inline: var(--at-space-2);
  --at-nav-gap: var(--at-space-3);
  --at-nav-group-rule: 0px;
  --at-nav-group-padding: 0px;
  --at-nav-icon-display: none;
  --at-nav-current-fill: 100%;
  --at-nav-current-mark: 0px;
  --at-panel-border-color: var(--at-rule);
  --at-panel-head-rule: var(--at-ink);
  --at-panel-head-rule-width: 1px;
  --at-nested-frame: 1px;
  --at-dialog-head-rule: var(--at-ink);
  --at-dialog-foot-surface: transparent;
  --at-table-head-rule: var(--at-ink);
  --at-table-head-rule-width: 1.5px;
  --at-table-head-divider: 0px;
  --at-table-foot-rule: var(--at-ink);
  --at-table-foot-rule-width: 1px;
  --at-total-line: underline;
  --at-total-rule-width: 3px;
  --at-grid-rule: var(--at-rule-strong);
  --at-grid-frame: var(--at-ink);
  --at-radius-chip: 999px;
  --at-stav-border-width: 0px;
  --at-stav-padding-inline: 0px;
  --at-stav-weight: 500;
  --at-stretch-label: 87%;
  --at-stretch-control: 100%;
  --at-stretch-heading: 100%;
  --at-stretch-number: 93%;
  --at-label-case: none;
  --at-label-tracking: 0;
  --at-heading-weight: 600;
}

/* Vzhled Dílna */
[data-vzhled="dilna"] {
  --at-canvas: light-dark(#d3d3cf, #2A2D31);
  --at-surface-1: light-dark(#f6f7f8, #1B1D20);
  --at-surface-2: light-dark(#e6e8e8, #33373C);
  --at-ink: light-dark(#1b1a17, #EDEEF0);
  --at-ink-soft: light-dark(#3a3934, #CFD2D7);
  --at-muted: light-dark(#55544e, #A6ACB4);
  --at-rule: light-dark(#c3c3be, #3A3E44);
  --at-rule-strong: light-dark(#6d6c65, #6B727C);
  --at-field-border: light-dark(#66655e, #878E98);
  --at-focus: light-dark(#1b1a17, #FFD43B);
  --at-focus-halo: light-dark(#FFD43B, #FFD43B);
  --at-success: light-dark(#2a6120, #82c26c);
  --at-success-soft: light-dark(#dbe9d3, #1f3219);
  --at-warning: light-dark(#654d00, #E8B456);
  --at-warning-soft: light-dark(#f2e5b5, #372A12);
  --at-danger: light-dark(#a8182b, #f47f7c);
  --at-danger-soft: light-dark(#f6dadc, #3e1d1a);
  --at-info: light-dark(#4E5157, #A0A6AE);
  --at-info-soft: light-dark(#E3E4E3, #2C3035);
  --at-bar: light-dark(#1f1e1b, #0D0E10);
  --at-on-bar: light-dark(#edece8, #EDECE8);
  --at-bar-muted: light-dark(#aeaca5, #AEACA5);
  --at-bar-rule: light-dark(#57554f, #3E434A);
  --at-bar-field: light-dark(#2c2b28, #1B1D20);
  --at-bar-field-border: light-dark(#8a8881, #7F858E);
  --at-table-head: light-dark(#2a2925, #101215);
  --at-on-table-head: light-dark(#edece8, #DCDAD4);
  --at-overlay: light-dark(rgb(27 26 23 / 0.55), rgb(0 0 0 / 0.68));
  --at-dokumenty-accent: light-dark(#3647a6, #3A55A8);
  --at-dokumenty-accent-hover: light-dark(#293887, #4763B8);
  --at-dokumenty-accent-border: light-dark(#293887, #6084C7);
  --at-dokumenty-on-accent: light-dark(#ffffff, #FFFFFF);
  --at-dokumenty-accent-text: light-dark(#3647a6, #82ABE0);
  --at-dokumenty-accent-soft: light-dark(#e2e5f3, #1B2840);
  --at-dokumenty-on-bar-accent: light-dark(#8a98e0, #82ABE0);
  --at-provoz-accent: light-dark(#87472c, #A34A24);
  --at-provoz-accent-hover: light-dark(#6b3722, #B45A30);
  --at-provoz-accent-border: light-dark(#6b3722, #C86B3A);
  --at-provoz-on-accent: light-dark(#ffffff, #FFFFFF);
  --at-provoz-accent-text: light-dark(#87472c, #e9894e);
  --at-provoz-accent-soft: light-dark(#f2e2d6, #3b2417);
  --at-provoz-on-bar-accent: light-dark(#e9894e, #e9894e);
  --at-finance-accent: light-dark(#0F636B, #0F6B72);
  --at-finance-accent-hover: light-dark(#0A4D54, #137C84);
  --at-finance-accent-border: light-dark(#0A4D54, #389098);
  --at-finance-on-accent: light-dark(#ffffff, #FFFFFF);
  --at-finance-accent-text: light-dark(#0F636B, #5cb9c1);
  --at-finance-accent-soft: light-dark(#d9e9ea, #13302f);
  --at-finance-on-bar-accent: light-dark(#5cb9c1, #5cb9c1);
  --at-crm-accent: light-dark(#72223b, #93325A);
  --at-crm-accent-hover: light-dark(#58192d, #A63F69);
  --at-crm-accent-border: light-dark(#58192d, #BC6C88);
  --at-crm-on-accent: light-dark(#ffffff, #FFFFFF);
  --at-crm-accent-text: light-dark(#72223b, #de9cb2);
  --at-crm-accent-soft: light-dark(#f1dfe5, #3b1f29);
  --at-crm-on-bar-accent: light-dark(#de9cb2, #de9cb2);
  --at-atomys-accent: light-dark(#1D1C19, #e4e2dd);
  --at-atomys-accent-hover: light-dark(#3A3833, #f4f3ef);
  --at-atomys-accent-border: light-dark(#1D1C19, #e4e2dd);
  --at-atomys-on-accent: light-dark(#ffffff, #1a1917);
  --at-atomys-accent-text: light-dark(#1D1C19, #e4e2dd);
  --at-atomys-accent-soft: light-dark(#e4e3e0, #302f2d);
  --at-atomys-on-bar-accent: light-dark(#e4e2dd, #e4e2dd);
  --at-radius-control: 0px;
  --at-radius-surface: 0px;
  --at-radius-dialog: 0px;
  --at-border-rule: 1px;
  --at-bar-edge: 3px;
  --at-shadow-layer: 3px 3px 0 rgb(0 0 0 / 0.28);
  --at-panel-border: 1px;
  --at-panel-padding: 1rem;
  --at-panel-gap: 0.75rem;
  --at-content-surface: var(--at-canvas);
  --at-nav-surface: var(--at-surface-2);
  --at-nav-rule: var(--at-rule-strong);
  --at-nav-padding-inline: 0px;
  --at-nav-gap: var(--at-space-3);
  --at-nav-group-rule: 1px;
  --at-nav-group-padding: var(--at-space-2);
  --at-nav-icon-display: inline-block;
  --at-nav-current-fill: 100%;
  --at-nav-current-mark: 0px;
  --at-panel-border-color: var(--at-rule-strong);
  --at-panel-head-rule: var(--at-rule-strong);
  --at-panel-head-rule-width: 2px;
  --at-nested-frame: 0px;
  --at-dialog-head-rule: var(--at-rule);
  --at-dialog-foot-surface: var(--at-surface-2);
  --at-table-head-rule: var(--at-table-head);
  --at-table-head-rule-width: 1px;
  --at-table-head-divider: 1px;
  --at-table-foot-rule: var(--at-rule-strong);
  --at-table-foot-rule-width: 2px;
  --at-total-line: none;
  --at-total-rule-width: 0px;
  --at-grid-rule: var(--at-rule);
  --at-grid-frame: var(--at-rule-strong);
  --at-radius-chip: 0px;
  --at-stav-border-width: 1px;
  --at-stav-padding-inline: 0.375rem;
  --at-stav-weight: 600;
  --at-stretch-label: 82%;
  --at-stretch-control: 88%;
  --at-stretch-heading: 92%;
  --at-stretch-number: 100%;
  --at-label-case: uppercase;
  --at-label-tracking: 0.05em;
  --at-heading-weight: 600;
}

/* Vzhled Atomys */
[data-vzhled="atomys"] {
  --at-canvas: light-dark(#DEE4EB, #0E1520);
  --at-surface-1: light-dark(#FFFFFF, #1C2533);
  --at-surface-2: light-dark(#D5DCE5, #263142);
  --at-ink: light-dark(#0B0D10, #ECEEF0);
  --at-ink-soft: light-dark(#34373D, #C5CBD3);
  --at-muted: light-dark(#585D65, #9AA4B1);
  --at-rule: light-dark(#CCD4DD, #2E3A4B);
  --at-rule-strong: light-dark(#76808C, #5F6C7D);
  --at-field-border: light-dark(#717B87, #7B8797);
  --at-focus: light-dark(#0B0D10, #FFD43B);
  --at-focus-halo: light-dark(#FFD43B, #FFD43B);
  --at-success: light-dark(#1A6E35, #5CC98A);
  --at-success-soft: light-dark(#E2F0E5, #12301E);
  --at-warning: light-dark(#7C5700, #EBB04F);
  --at-warning-soft: light-dark(#F8ECCB, #33270F);
  --at-danger: light-dark(#B42318, #FF7B66);
  --at-danger-soft: light-dark(#FBE5E2, #3B1713);
  --at-info: light-dark(#464B53, #A6ADB6);
  --at-info-soft: light-dark(#E4E7EB, #253041);
  --at-bar: light-dark(#DEE4EB, #0E1520);
  --at-on-bar: light-dark(#0B0D10, #ECEEF0);
  --at-bar-muted: light-dark(#585D65, #9AA4B1);
  --at-bar-rule: light-dark(#C3CCD6, #2E3A4B);
  --at-bar-field: light-dark(#FFFFFF, #1C2533);
  --at-bar-field-border: light-dark(#717B87, #6F7B8C);
  --at-table-head: light-dark(#FFFFFF, #1C2533);
  --at-on-table-head: light-dark(#34373D, #C5CBD3);
  --at-overlay: light-dark(#0B0D108C, #000000B3);
  --at-dokumenty-accent: light-dark(#324995, #3D5FC2);
  --at-dokumenty-accent-hover: light-dark(#273A78, #4B6DCC);
  --at-dokumenty-accent-border: light-dark(#273A78, #567BD0);
  --at-dokumenty-on-accent: light-dark(#FFFFFF, #FFFFFF);
  --at-dokumenty-accent-text: light-dark(#324995, #8BB1E8);
  --at-dokumenty-accent-soft: light-dark(#E3E8F5, #1A2742);
  --at-dokumenty-on-bar-accent: light-dark(#324995, #8BB1E8);
  --at-provoz-accent: light-dark(#914327, #A84E28);
  --at-provoz-accent-hover: light-dark(#76361F, #B55A32);
  --at-provoz-accent-border: light-dark(#76361F, #BB673F);
  --at-provoz-on-accent: light-dark(#FFFFFF, #FFFFFF);
  --at-provoz-accent-text: light-dark(#914327, #E7A074);
  --at-provoz-accent-soft: light-dark(#F5E6DF, #36241A);
  --at-provoz-on-bar-accent: light-dark(#914327, #E7A074);
  --at-finance-accent: light-dark(#0A6870, #0D7078);
  --at-finance-accent-hover: light-dark(#075158, #118089);
  --at-finance-accent-border: light-dark(#075158, #278A91);
  --at-finance-on-accent: light-dark(#FFFFFF, #FFFFFF);
  --at-finance-accent-text: light-dark(#0A6870, #54C3C9);
  --at-finance-accent-soft: light-dark(#DCEDEE, #0F2D2F);
  --at-finance-on-bar-accent: light-dark(#0A6870, #54C3C9);
  --at-crm-accent: light-dark(#8F1E4B, #932C57);
  --at-crm-accent-hover: light-dark(#74183D, #A53864);
  --at-crm-accent-border: light-dark(#74183D, #BD5F82);
  --at-crm-on-accent: light-dark(#FFFFFF, #FFFFFF);
  --at-crm-accent-text: light-dark(#8F1E4B, #ED97B5);
  --at-crm-accent-soft: light-dark(#F6E3EA, #3A1A26);
  --at-crm-on-bar-accent: light-dark(#8F1E4B, #ED97B5);
  --at-atomys-accent: light-dark(#16181B, #ECEEF0);
  --at-atomys-accent-hover: light-dark(#34383F, #FFFFFF);
  --at-atomys-accent-border: light-dark(#16181B, #ECEEF0);
  --at-atomys-on-accent: light-dark(#FFFFFF, #0B0D10);
  --at-atomys-accent-text: light-dark(#16181B, #ECEEF0);
  --at-atomys-accent-soft: light-dark(#E3E5E8, #262A30);
  --at-atomys-on-bar-accent: light-dark(#16181B, #ECEEF0);
  --at-radius-control: 4px;
  --at-radius-surface: 6px;
  --at-radius-dialog: 8px;
  --at-border-rule: 1px;
  --at-bar-edge: 3px;
  --at-shadow-layer: 0 12px 32px rgb(11 13 16 / 0.18);
  --at-panel-border: 1px;
  --at-panel-padding: 1.5rem;
  --at-panel-gap: 2rem;
  --at-content-surface: var(--at-canvas);
  --at-nav-surface: var(--at-canvas);
  --at-nav-rule: var(--at-rule);
  --at-nav-padding-inline: var(--at-space-2);
  --at-nav-gap: 1.5rem;
  --at-nav-group-rule: 0px;
  --at-nav-group-padding: 0px;
  --at-nav-icon-display: none;
  --at-nav-current-fill: 0%;
  --at-nav-current-mark: 1.5rem;
  --at-panel-border-color: var(--at-rule);
  --at-panel-head-rule: var(--at-rule);
  --at-panel-head-rule-width: 1px;
  --at-nested-frame: 0px;
  --at-dialog-head-rule: var(--at-rule);
  --at-dialog-foot-surface: transparent;
  --at-table-head-rule: var(--at-rule-strong);
  --at-table-head-rule-width: 1px;
  --at-table-head-divider: 0px;
  --at-table-foot-rule: var(--at-rule-strong);
  --at-table-foot-rule-width: 2px;
  --at-total-line: none;
  --at-total-rule-width: 0px;
  --at-grid-rule: var(--at-rule);
  --at-grid-frame: var(--at-rule-strong);
  --at-radius-chip: 999px;
  --at-stav-border-width: 0px;
  --at-stav-padding-inline: 0px;
  --at-stav-weight: 500;
  --at-stretch-label: 87%;
  --at-stretch-control: 100%;
  --at-stretch-heading: 100%;
  --at-stretch-number: 94%;
  --at-label-case: none;
  --at-label-tracking: 0;
  --at-heading-weight: 600;
}

/* Oblast určuje jediný značkový akcent. Přepočítá se i tam, kde vnořený prvek mění vzhled. */
:root,
[data-vzhled],
[data-area="atomys"],
[data-area="atomys"] [data-vzhled] {
  --at-accent: var(--at-atomys-accent);
  --at-accent-hover: var(--at-atomys-accent-hover);
  --at-accent-border: var(--at-atomys-accent-border);
  --at-on-accent: var(--at-atomys-on-accent);
  --at-accent-text: var(--at-atomys-accent-text);
  --at-accent-soft: var(--at-atomys-accent-soft);
  --at-on-bar-accent: var(--at-atomys-on-bar-accent);
}

[data-area="dokumenty"],
[data-area="dokumenty"] [data-vzhled] {
  --at-accent: var(--at-dokumenty-accent);
  --at-accent-hover: var(--at-dokumenty-accent-hover);
  --at-accent-border: var(--at-dokumenty-accent-border);
  --at-on-accent: var(--at-dokumenty-on-accent);
  --at-accent-text: var(--at-dokumenty-accent-text);
  --at-accent-soft: var(--at-dokumenty-accent-soft);
  --at-on-bar-accent: var(--at-dokumenty-on-bar-accent);
}

[data-area="provoz"],
[data-area="provoz"] [data-vzhled] {
  --at-accent: var(--at-provoz-accent);
  --at-accent-hover: var(--at-provoz-accent-hover);
  --at-accent-border: var(--at-provoz-accent-border);
  --at-on-accent: var(--at-provoz-on-accent);
  --at-accent-text: var(--at-provoz-accent-text);
  --at-accent-soft: var(--at-provoz-accent-soft);
  --at-on-bar-accent: var(--at-provoz-on-bar-accent);
}

[data-area="finance"],
[data-area="finance"] [data-vzhled] {
  --at-accent: var(--at-finance-accent);
  --at-accent-hover: var(--at-finance-accent-hover);
  --at-accent-border: var(--at-finance-accent-border);
  --at-on-accent: var(--at-finance-on-accent);
  --at-accent-text: var(--at-finance-accent-text);
  --at-accent-soft: var(--at-finance-accent-soft);
  --at-on-bar-accent: var(--at-finance-on-bar-accent);
}

[data-area="crm"],
[data-area="crm"] [data-vzhled] {
  --at-accent: var(--at-crm-accent);
  --at-accent-hover: var(--at-crm-accent-hover);
  --at-accent-border: var(--at-crm-accent-border);
  --at-on-accent: var(--at-crm-on-accent);
  --at-accent-text: var(--at-crm-accent-text);
  --at-accent-soft: var(--at-crm-accent-soft);
  --at-on-bar-accent: var(--at-crm-on-bar-accent);
}

/* Vnořená oblast má přednost před vzdálenější: náhled vzhledu uvnitř prvku s jinou oblastí
   (například stránka crm, oddíl dokumenty, náhled atomys) dostane akcent nejbližší oblasti.
   Prvek, který nese oblast i vzhled zároveň, má přednost před oblastí předka. */

[data-area] [data-area="dokumenty"] [data-vzhled],
[data-area="dokumenty"][data-area][data-vzhled] {
  --at-accent: var(--at-dokumenty-accent);
  --at-accent-hover: var(--at-dokumenty-accent-hover);
  --at-accent-border: var(--at-dokumenty-accent-border);
  --at-on-accent: var(--at-dokumenty-on-accent);
  --at-accent-text: var(--at-dokumenty-accent-text);
  --at-accent-soft: var(--at-dokumenty-accent-soft);
  --at-on-bar-accent: var(--at-dokumenty-on-bar-accent);
}

[data-area] [data-area="provoz"] [data-vzhled],
[data-area="provoz"][data-area][data-vzhled] {
  --at-accent: var(--at-provoz-accent);
  --at-accent-hover: var(--at-provoz-accent-hover);
  --at-accent-border: var(--at-provoz-accent-border);
  --at-on-accent: var(--at-provoz-on-accent);
  --at-accent-text: var(--at-provoz-accent-text);
  --at-accent-soft: var(--at-provoz-accent-soft);
  --at-on-bar-accent: var(--at-provoz-on-bar-accent);
}

[data-area] [data-area="finance"] [data-vzhled],
[data-area="finance"][data-area][data-vzhled] {
  --at-accent: var(--at-finance-accent);
  --at-accent-hover: var(--at-finance-accent-hover);
  --at-accent-border: var(--at-finance-accent-border);
  --at-on-accent: var(--at-finance-on-accent);
  --at-accent-text: var(--at-finance-accent-text);
  --at-accent-soft: var(--at-finance-accent-soft);
  --at-on-bar-accent: var(--at-finance-on-bar-accent);
}

[data-area] [data-area="crm"] [data-vzhled],
[data-area="crm"][data-area][data-vzhled] {
  --at-accent: var(--at-crm-accent);
  --at-accent-hover: var(--at-crm-accent-hover);
  --at-accent-border: var(--at-crm-accent-border);
  --at-on-accent: var(--at-crm-on-accent);
  --at-accent-text: var(--at-crm-accent-text);
  --at-accent-soft: var(--at-crm-accent-soft);
  --at-on-bar-accent: var(--at-crm-on-bar-accent);
}

[data-area] [data-area="atomys"] [data-vzhled],
[data-area="atomys"][data-area][data-vzhled] {
  --at-accent: var(--at-atomys-accent);
  --at-accent-hover: var(--at-atomys-accent-hover);
  --at-accent-border: var(--at-atomys-accent-border);
  --at-on-accent: var(--at-atomys-on-accent);
  --at-accent-text: var(--at-atomys-accent-text);
  --at-accent-soft: var(--at-atomys-accent-soft);
  --at-on-bar-accent: var(--at-atomys-on-bar-accent);
}

/* Hustota: Kancelář, Dílna, Dotyk */
:root,
[data-hustota="kancelar"] {
  --at-font-size-text: 0.9375rem;
  --at-font-size-small: 0.8125rem;
  --at-font-size-table: 0.875rem;
  --at-row-height: 2.25rem;
  --at-control-height: 2.25rem;
  --at-touch-target: 2.75rem;
}

[data-hustota="dilna"] {
  --at-font-size-text: 1.0625rem;
  --at-font-size-small: 0.9375rem;
  --at-font-size-table: 1rem;
  --at-row-height: 2.75rem;
  --at-control-height: 2.75rem;
  --at-touch-target: 3.25rem;
}

[data-hustota="dotyk"] {
  --at-font-size-text: 1rem;
  --at-font-size-small: 0.875rem;
  --at-font-size-table: 0.9375rem;
  --at-row-height: 3rem;
  --at-control-height: 3.25rem;
  --at-touch-target: 3.25rem;
}


/* Společné pro všechny vzhledy */
:root {
  --at-font-ui: "IBM Plex Sans Variable", "IBM Plex Sans Variable Fallback", "IBM Plex Sans", "Segoe UI", Arial, sans-serif;
  --at-font-data: "IBM Plex Mono", "IBM Plex Mono Fallback", "Cascadia Mono", Consolas, monospace;
  --at-font-size-micro: 0.75rem;
  --at-font-size-h4: 1rem;
  --at-font-size-h3: 1.125rem;
  --at-font-size-h2: 1.375rem;
  --at-font-size-h1: 1.75rem;
  --at-font-size-display: clamp(2rem, 1.4rem + 2.2vw, 3rem);
  --at-font-weight-regular: 400;
  --at-font-weight-medium: 500;
  --at-font-weight-semibold: 600;
  --at-line-height-tight: 1.15;
  --at-line-height-heading: 1.2;
  --at-line-height-table: 1.35;
  --at-line-height-label: 1.45;
  --at-line-height-body: 1.5;
  --at-tracking-heading: -0.005em;
  --at-space-1: 0.25rem;
  --at-space-2: 0.5rem;
  --at-space-3: 0.75rem;
  --at-space-4: 1rem;
  --at-space-5: 1.25rem;
  --at-space-6: 1.5rem;
  --at-space-8: 2rem;
  --at-space-10: 2.5rem;
  --at-space-12: 3rem;
  --at-space-16: 4rem;
  --at-space-20: 5rem;
  --at-radius-pill: 999px;
  --at-border-focus: 2px;
  --at-layout-page-max: 90rem;
  --at-layout-text-max: 42rem;
  --at-layout-gutter: clamp(1rem, 3vw, 2.5rem);
  --at-layout-section-space: clamp(2rem, 3vw, 3rem);
  --at-layout-sidebar: 15rem;
  --at-layout-inspector: 22rem;
  --at-z-bar: 100;
  --at-z-dropdown: 200;
  --at-z-dialog: 300;
  --at-z-toast: 400;
  --at-z-skip: 1000;
  --at-motion-fast: 120ms;
  --at-motion-base: 180ms;
  --at-motion-slow: 320ms;
  --at-motion-spin: 840ms;
  --at-motion-ease: cubic-bezier(0.2, 0.7, 0.2, 1);
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --at-motion-fast: 1ms;
    --at-motion-base: 1ms;
    --at-motion-slow: 1ms;
    --at-motion-spin: 1ms;
  }
}

/* Atomys Design Language — základ (prvky HTML a několik utilit).
 *
 * Vše je ve vrstvě @layer atomys, takže jakékoli stávající CSS projektu bez vrstvy
 * (včetně utilit Tailwind 3) má přednost. To platí i obráceně: globální reset projektu
 * (normalize, preflight Tailwindu 3, pravidla button {…}, a {…}, h1 {…}, * {margin: 0})
 * přebije komponenty at-* a rozbije je. Při převzetí se proto takové resety odstraní a
 * v Tailwindu 3 se vypne preflight (preset to dělá sám). U Tailwind 4 deklarujte pořadí vrstev:
 *   @layer theme, base, atomys, components, utilities;
 */
@layer atomys.zaklad, atomys.komponenty;

@layer atomys.zaklad {
  /* Výchozí barva hranice je linka: holá třída border (Tailwind bez preflightu) ani rám
     prvku bez vlastní barvy tak nekreslí barvou textu. */
  *,
  *::before,
  *::after {
    box-sizing: border-box;
    border-color: var(--at-rule);
  }

  html {
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
    scrollbar-color: var(--at-rule-strong) var(--at-canvas);
    hanging-punctuation: first;
  }

  body {
    margin: 0;
    min-block-size: 100dvh;
    background: var(--at-canvas);
    color: var(--at-ink);
    font-family: var(--at-font-ui);
    font-size: var(--at-font-size-text);
    line-height: var(--at-line-height-body);
    font-kerning: normal;
    font-synthesis-weight: none;
  }

  /* Nadpisy: jedna rodina, hierarchie velikostí a řezem. Kurzíva ani barevné slovo ne. */
  h1,
  h2,
  h3,
  h4 {
    margin: 0 0 var(--at-space-3);
    font-family: var(--at-font-ui);
    font-weight: var(--at-heading-weight);
    font-stretch: var(--at-stretch-heading);
    line-height: var(--at-line-height-heading);
    letter-spacing: var(--at-tracking-heading);
    text-wrap: balance;
    color: var(--at-ink);
  }
  h1 {
    font-size: var(--at-font-size-h1);
  }
  h2 {
    font-size: var(--at-font-size-h2);
  }
  h3 {
    font-size: var(--at-font-size-h3);
  }
  h4 {
    font-size: var(--at-font-size-h4);
  }
  :is(h1, h2, h3, h4) :is(em, i) {
    font-style: normal;
  }

  p,
  ul,
  ol,
  dl,
  figure,
  blockquote,
  pre,
  table {
    margin: 0 0 var(--at-space-4);
  }
  p {
    text-wrap: pretty;
  }
  small {
    font-size: var(--at-font-size-small);
  }
  strong,
  b {
    font-weight: var(--at-font-weight-semibold);
  }

  a {
    color: var(--at-accent-text);
    text-decoration-line: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 0.2em;
  }
  a:hover {
    text-decoration-thickness: 2px;
  }

  /* Fokus společný pro všechny vzhledy: tmavá linka s odstupem a žlutý lem v mezeře.
     Ve forced-colors zůstane linka (box-shadow se nekreslí). */
  :focus-visible {
    outline: var(--at-border-focus) solid var(--at-focus);
    outline-offset: var(--at-border-focus);
    box-shadow: 0 0 0 var(--at-border-focus) var(--at-focus-halo);
  }

  ::selection {
    background: var(--at-accent-soft);
    color: var(--at-ink);
  }

  hr {
    block-size: 0;
    margin: var(--at-space-6) 0;
    border: 0;
    border-block-start: var(--at-border-rule) solid var(--at-rule);
  }

  img,
  picture,
  video,
  canvas {
    display: block;
    max-inline-size: 100%;
    block-size: auto;
  }

  input,
  button,
  select,
  textarea {
    font: inherit;
    color: inherit;
    letter-spacing: inherit;
  }
  button {
    cursor: pointer;
  }
  :disabled {
    cursor: not-allowed;
  }

  table {
    border-collapse: collapse;
    font-variant-numeric: tabular-nums lining-nums;
  }
  th {
    text-align: start;
    font-weight: var(--at-font-weight-semibold);
  }

  code,
  kbd,
  samp,
  pre {
    font-family: var(--at-font-data);
    font-size: 0.9375em;
  }

  abbr[title] {
    text-decoration: underline dotted;
    cursor: help;
  }

  :where(ul, ol)[role='list'] {
    padding: 0;
    list-style: none;
  }

  [hidden] {
    display: none !important;
  }

  /* Česká sazba */
  :lang(cs) q {
    quotes: '„' '“' '‚' '‘';
  }
  :lang(sk) q {
    quotes: '„' '“' '‚' '‘';
  }

  /* Utility, které nesou řemeslo: čísla, strojová data, přístupnost. */
  .at-num {
    text-align: end;
    white-space: nowrap;
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-data {
    font-family: var(--at-font-data);
    font-size: 0.9375em;
    letter-spacing: 0;
  }
  .at-muted {
    color: var(--at-muted);
  }
  .at-text-max {
    max-inline-size: var(--at-layout-text-max);
  }
  .at-nowrap {
    white-space: nowrap;
  }
  .at-sr-only {
    position: absolute !important;
    inline-size: 1px;
    block-size: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
  }
  .at-skip-link {
    position: absolute;
    inset-block-start: var(--at-space-2);
    inset-inline-start: var(--at-space-2);
    z-index: var(--at-z-skip);
    padding: var(--at-space-2) var(--at-space-4);
    background: var(--at-ink);
    color: var(--at-canvas);
    transform: translateY(-200%);
  }
  .at-skip-link:focus {
    transform: none;
  }

  @media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
      animation-duration: 1ms !important;
      animation-iteration-count: 1 !important;
      transition-duration: 1ms !important;
      scroll-behavior: auto !important;
    }
  }

  @media (forced-colors: active) {
    :focus-visible {
      outline-color: Highlight;
    }
  }

  /* Tisk: doklad, zakázkový list a ceník se tisknou čitelně na A4. */
  @media print {
    @page {
      size: A4;
      margin: 15mm;
    }
    /* Tisk je vždy světlý: tokeny v light-dark() dají světlé hodnoty, plochu a text kreslí
       systémové barvy papíru. */
    html,
    body {
      color-scheme: light;
      background: Canvas;
      color: CanvasText;
    }
    .at-no-print {
      display: none !important;
    }
    tr,
    img,
    figure {
      break-inside: avoid;
    }
    a {
      color: inherit;
    }
  }
}

/* Atomys Design Language — ovládací prvky: ikona, tlačítko, skupina tlačítek, segmentový
 * přepínač, nabídka akcí (.at-menu), klávesová zkratka a odkaz jako akce.
 *
 * Používá jen tokeny --at-*. Vzhled (Tiskopis, Dílna, Atomys), motiv i hustotu mění tokeny,
 * pravidla pro jednotlivé vzhledy tu nejsou. Uvnitř lišty .at-bar berou prvky barvy lišty
 * (bar, onBar, barField, barFieldBorder, onBarAccent), takže fungují na světlé i tmavé liště.
 *
 * Stavy se čtou z nativních atributů a ARIA: :disabled, aria-disabled, aria-busy,
 * aria-expanded, :checked. Stav nikdy není vyjádřen jen barvou.
 */
@layer atomys.komponenty {
  /* ---------- Ikona ----------
   * <svg class="at-icon" aria-hidden="true"><use href="…/ikony.svg#i-faktura"></use></svg>
   * Barvu bere z textu, velikost z písma okolí. */
  .at-icon {
    display: inline-block;
    flex: none;
    inline-size: 1.25em;
    block-size: 1.25em;
    vertical-align: -0.25em;
    fill: currentColor;
    stroke: none;
    overflow: visible;
    pointer-events: none;
  }
  .at-icon--small {
    inline-size: 1em;
    block-size: 1em;
    vertical-align: -0.125em;
  }
  .at-icon--large {
    inline-size: 1.5em;
    block-size: 1.5em;
    vertical-align: -0.375em;
  }

  /* ---------- Tlačítko ----------
   * Bez modifikátoru je tlačítko vedlejší (modifikátor --secondary neexistuje). Jedno --primary
   * na rozhodovací skupinu. */
  .at-btn {
    position: relative;
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    gap: var(--at-space-2);
    max-inline-size: 100%;
    min-block-size: var(--at-control-height);
    margin: 0;
    padding: var(--at-space-1) var(--at-space-4);
    border: var(--at-border-rule) solid var(--at-field-border);
    border-radius: var(--at-radius-control);
    background: var(--at-surface-1);
    color: var(--at-ink);
    font-family: var(--at-font-ui);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-tight);
    text-align: center;
    text-decoration: none;
    text-wrap: balance;
    vertical-align: middle;
    cursor: pointer;
    touch-action: manipulation;
  }
  .at-btn:hover {
    background: var(--at-surface-2);
  }
  .at-btn:active,
  .at-btn[aria-expanded='true'] {
    background: var(--at-rule);
  }

  /* Hranici tlačítka kreslí rám --accent-border (3 : 1 proti ploše i v tmavém motivu, kde
   * sytá výplň od plochy tolik nemá). Při najetí se mění jen výplň. */
  .at-btn--primary {
    border-color: var(--at-accent-border);
    background: var(--at-accent);
    color: var(--at-on-accent);
    font-weight: var(--at-font-weight-semibold);
  }
  .at-btn--primary:hover,
  .at-btn--primary:active,
  .at-btn--primary[aria-expanded='true'] {
    background: var(--at-accent-hover);
  }

  /* Textové tlačítko: akce bez rámu, podtržená jako odkaz. Cíl má plnou výšku ovládacího prvku. */
  .at-btn--quiet {
    padding-inline: 0;
    border-color: transparent;
    background: transparent;
    color: var(--at-accent-text);
    text-decoration-line: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 0.2em;
  }
  .at-btn--quiet:hover,
  .at-btn--quiet:active,
  .at-btn--quiet[aria-expanded='true'] {
    background: transparent;
    text-decoration-thickness: 2px;
  }

  /* Nevratná akce: obrys a text v barvě chyby, vždy se slovesem a ikonou (Smazat, Stornovat).
   * --chyba je česká obdoba --danger se stejným významem jako u ostatních komponent. */
  .at-btn--danger,
  .at-btn--chyba {
    border-color: var(--at-danger);
    color: var(--at-danger);
    font-weight: var(--at-font-weight-semibold);
  }
  :is(.at-btn--danger, .at-btn--chyba):is(:hover, :active, [aria-expanded='true']) {
    background: var(--at-danger-soft);
  }

  /* Malé tlačítko: vizuálně nižší, cíl zůstává nejméně --at-control-height (viz níže). */
  .at-btn--small {
    min-block-size: calc(var(--at-control-height) - var(--at-space-1) * 1.5);
    padding-inline: var(--at-space-3);
    font-size: var(--at-font-size-small);
  }
  .at-btn--small.at-btn--quiet {
    padding-inline: 0;
  }

  /* Tlačítko jen s ikonou: čtverec, přístupný název přes aria-label nebo .at-sr-only. */
  .at-btn--ikona {
    inline-size: var(--at-control-height);
    padding: 0;
  }
  .at-btn--ikona.at-btn--small {
    inline-size: calc(var(--at-control-height) - var(--at-space-1) * 1.5);
  }
  .at-btn--ikona.at-btn--quiet {
    color: var(--at-ink-soft);
  }
  .at-btn--ikona.at-btn--quiet:hover {
    background: var(--at-surface-2);
    color: var(--at-ink);
  }

  /* Cíl dotyku: malé tlačítko a odkaz jako akce mají neviditelnou plochu aspoň
   * --at-control-height (v hustotě Dotyk je to 52 px = --at-touch-target). */
  .at-btn--small::after,
  .at-link::after {
    content: '';
    position: absolute;
    inset: 50% auto auto 50%;
    inline-size: max(100%, var(--at-control-height));
    block-size: max(100%, var(--at-control-height));
    translate: -50% -50%;
  }

  /* Zakázané: [disabled] nebo aria-disabled="true" (tlačítko zůstane ve fokusu).
   * Důvod patří do textu vedle tlačítka, ne jen do jeho vzhledu. */
  .at-btn:is(:disabled, [aria-disabled='true']):not([aria-busy='true']) {
    border-color: var(--at-rule);
    background: var(--at-surface-2);
    color: var(--at-muted);
    cursor: not-allowed;
  }
  .at-btn--quiet:is(:disabled, [aria-disabled='true']):not([aria-busy='true']) {
    border-color: transparent;
    background: transparent;
    text-decoration-line: none;
  }

  /* ---------- Tlačítka na liště ----------
   * Barvy lišty platí jen pro prvky přímo na liště. Nabídka účtu (.at-menu) leží v DOM uvnitř
   * lišty, ale je to plovoucí vrstva s plochou surface-1, proto má výjimku :not(:where(.at-menu *)).
   * Fokus na liště kreslí .at-bar :focus-visible v 40-rozvrzeni.css. */
  .at-bar .at-btn:not(.at-btn--primary):not(:where(.at-menu *)) {
    border-color: var(--at-bar-field-border);
    background: transparent;
    color: var(--at-on-bar);
  }
  .at-bar .at-btn:not(.at-btn--primary):not(:where(.at-menu *)):is(:hover, :active, [aria-expanded='true']) {
    background: var(--at-bar-field);
  }
  .at-bar .at-btn.at-btn--quiet:not(:where(.at-menu *)) {
    border-color: transparent;
    color: var(--at-on-bar-accent);
  }
  .at-bar .at-btn.at-btn--quiet:not(:where(.at-menu *)):is(:hover, :active, [aria-expanded='true']) {
    background: transparent;
  }
  /* Hlavní akce na liště: onBarAccent má na liště kontrast aspoň 4,5 : 1, text je v barvě lišty. */
  .at-bar .at-btn--primary:not(:where(.at-menu *)) {
    border-color: var(--at-on-bar-accent);
    background: var(--at-on-bar-accent);
    color: var(--at-bar);
  }
  .at-bar .at-btn--primary:not(:where(.at-menu *)):is(:hover, :active, [aria-expanded='true']) {
    border-color: color-mix(in srgb, var(--at-on-bar-accent) 82%, var(--at-on-bar));
    background: color-mix(in srgb, var(--at-on-bar-accent) 82%, var(--at-on-bar));
  }
  .at-bar .at-btn:is(:disabled, [aria-disabled='true']):not([aria-busy='true']):not(:where(.at-menu *)) {
    border-color: var(--at-bar-rule);
    background: transparent;
    color: var(--at-bar-muted);
  }
  /* ---------- Načítání: aria-busy="true" ----------
   * Indikátor (kruh ze tří nestejných tahů) zaujme místo první ikony, takže šířka tlačítka
   * zůstane a text zůstane vidět. Tlačítko bez ikony ponechá šířku tak, že text zprůhlední
   * (čtečka ho dál čte) a indikátor stojí uprostřed. Proti dvojímu spuštění patří k aria-busy
   * i aria-disabled="true" a kontrola v obsluze události. */
  .at-btn[aria-busy='true'] {
    cursor: progress;
  }
  .at-btn[aria-busy='true'] > .at-icon:first-of-type {
    display: none;
  }
  .at-btn[aria-busy='true']::before {
    content: '';
    flex: none;
    order: -1;
    inline-size: 1.25em;
    block-size: 1.25em;
    border: 0.125em solid;
    border-color: currentColor transparent currentColor
      color-mix(in srgb, currentColor 40%, transparent);
    border-radius: var(--at-radius-pill);
    animation: at-otoceni var(--at-motion-spin) linear infinite;
  }
  .at-btn[aria-busy='true']:not(:has(> .at-icon)) {
    color: transparent;
  }
  .at-btn[aria-busy='true']:not(:has(> .at-icon))::before {
    position: absolute;
    inset: 0;
    margin: auto;
    color: var(--at-ink);
  }
  .at-btn--primary[aria-busy='true']:not(:has(> .at-icon))::before {
    color: var(--at-on-accent);
  }
  .at-btn--quiet[aria-busy='true']:not(:has(> .at-icon))::before {
    color: var(--at-accent-text);
  }
  :is(.at-btn--danger, .at-btn--chyba)[aria-busy='true']:not(:has(> .at-icon))::before {
    color: var(--at-danger);
  }
  .at-bar .at-btn[aria-busy='true']:not(:has(> .at-icon)):not(:where(.at-menu *))::before {
    color: var(--at-on-bar);
  }
  .at-bar .at-btn--quiet[aria-busy='true']:not(:has(> .at-icon)):not(:where(.at-menu *))::before {
    color: var(--at-on-bar-accent);
  }
  .at-bar .at-btn--primary[aria-busy='true']:not(:has(> .at-icon)):not(:where(.at-menu *))::before {
    color: var(--at-bar);
  }

  @keyframes at-otoceni {
    to {
      transform: rotate(1turn);
    }
  }

  /* ---------- Skupina tlačítek ----------
   * <div class="at-btn-group" role="group" aria-label="…">. Na úzkém displeji se zalomí. */
  .at-btn-group {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-2);
  }

  /* ---------- Segmentový přepínač (skupina radio) ----------
   * <fieldset class="at-segment"><legend class="at-segment__legend">Motiv</legend>
   *   <label class="at-segment__option"><input type="radio" name="motiv" value="system" checked> Systém</label> …
   * </fieldset>
   * Šipky mezi možnostmi obstará prohlížeč. Vybraná možnost: plocha, rám a spodní linka.
   * Když se možnosti do šířky nevejdou (pět možností na telefonu), zalomí se na další řádek;
   * linky sousedních možností se překrývají vodorovně i svisle. */
  .at-segment {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: stretch;
    max-inline-size: 100%;
    min-inline-size: 0;
    margin: 0;
    padding: 0 0 var(--at-border-rule);
    border: 0;
    vertical-align: middle;
  }
  .at-segment__legend {
    margin-block-end: var(--at-space-1);
    padding: 0;
    color: var(--at-ink);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-control);
  }
  /* Na úzkém displeji (320 px, hustota Dotyk) se ikona možnosti zalomí nad text,
   * takže přepínač nepřeteče. */
  .at-segment__option {
    position: relative;
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    align-content: center;
    justify-content: center;
    gap: 0 var(--at-space-2);
    min-block-size: var(--at-control-height);
    margin-block-end: calc(var(--at-border-rule) * -1);
    padding: var(--at-space-1) var(--at-space-3);
    border: var(--at-border-rule) solid var(--at-field-border);
    background: var(--at-surface-1);
    color: var(--at-ink);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-tight);
    text-align: center;
    cursor: pointer;
    touch-action: manipulation;
  }
  .at-segment__option + .at-segment__option {
    margin-inline-start: calc(var(--at-border-rule) * -1);
  }
  .at-segment__option:first-of-type {
    border-start-start-radius: var(--at-radius-control);
    border-end-start-radius: var(--at-radius-control);
  }
  .at-segment__option:last-of-type {
    border-start-end-radius: var(--at-radius-control);
    border-end-end-radius: var(--at-radius-control);
  }
  /* Radio prvek bez vlastní kresby překrývá celý štítek: klepnutí kamkoli vybere možnost
   * a fokus ze základu (:focus-visible) se kreslí kolem celého štítku. */
  .at-segment__option > input {
    position: absolute;
    inset: 0;
    inline-size: 100%;
    block-size: 100%;
    margin: 0;
    border: 0;
    border-radius: inherit;
    background: transparent;
    appearance: none;
    cursor: inherit;
  }
  .at-segment__option:hover {
    background: var(--at-surface-2);
  }
  .at-segment__option:has(> input:checked) {
    z-index: 1;
    border-color: var(--at-accent-text);
    background: var(--at-accent-soft);
    color: var(--at-accent-text);
  }
  .at-segment__option:has(> input:checked)::after {
    content: '';
    position: absolute;
    inset-inline: calc(var(--at-border-rule) * -1);
    inset-block-end: calc(var(--at-border-rule) * -1);
    border-block-end: calc(var(--at-border-rule) * 3) solid currentColor;
    border-end-start-radius: inherit;
    border-end-end-radius: inherit;
  }
  .at-segment__option:has(> input:focus-visible) {
    z-index: 2;
  }
  .at-segment__option:has(> input:disabled) {
    background: var(--at-surface-2);
    color: var(--at-muted);
    cursor: not-allowed;
  }

  .at-bar .at-segment__legend:not(:where(.at-menu *)) {
    color: var(--at-on-bar);
  }
  .at-bar .at-segment__option:not(:where(.at-menu *)) {
    border-color: var(--at-bar-field-border);
    background: transparent;
    color: var(--at-on-bar);
  }
  .at-bar .at-segment__option:not(:where(.at-menu *)):is(:hover, :has(> input:checked)) {
    background: var(--at-bar-field);
  }
  .at-bar .at-segment__option:not(:where(.at-menu *)):has(> input:checked) {
    border-color: var(--at-on-bar-accent);
    color: var(--at-on-bar);
  }
  .at-bar .at-segment__option:not(:where(.at-menu *)):has(> input:checked)::after {
    border-block-end-color: var(--at-on-bar-accent);
  }
  .at-bar .at-segment__option:not(:where(.at-menu *)):has(> input:disabled) {
    background: transparent;
    color: var(--at-bar-muted);
  }

  /* ---------- Nabídka akcí a nabídka odkazů ----------
   * V textech rozhraní „Nabídka“, ne „Menu“; spouštěč nese sloveso a předmět („Akce se
   * zakázkou“, „Další akce s fakturou FV-2026-0187“). Třídy zůstávají .at-menu.
   * Nabídka akcí se záznamem (tlačítka) má roli menu:
   *   <div class="at-menu-anchor">
   *     <button class="at-btn" aria-haspopup="menu" aria-expanded="false" aria-controls="m1">Další akce</button>
   *     <div class="at-menu" id="m1" role="menu" hidden> <button class="at-menu__item" role="menuitem">…</button> … </div>
   *   </div>
   * Nabídka, ve které jsou jen odkazy (účet na liště), roli menu nemá: tlačítko s aria-expanded
   * a pod ním seznam odkazů (vzor disclosure), oddělovač <hr class="at-menu__separator">.
   * Chování obou (klávesy, Esc s návratem fokusu, zavření kliknutím mimo a odchodem fokusu)
   * dodává dist/ovladani.js. Na liště je jediná nabídka, a to nabídka účtu pod jménem uživatele. */
  .at-menu-anchor {
    position: relative;
    display: inline-flex;
    vertical-align: middle;
  }
  .at-menu {
    position: absolute;
    inset-block-start: calc(100% + var(--at-space-1));
    inset-inline-start: 0;
    z-index: var(--at-z-dropdown);
    min-inline-size: max(100%, 14rem);
    max-inline-size: min(var(--at-layout-inspector), calc(100vw - var(--at-space-8)));
    margin: 0;
    padding-block: var(--at-space-1);
    border: var(--at-border-rule) solid var(--at-rule-strong);
    border-radius: var(--at-radius-dialog);
    background: var(--at-surface-1);
    color: var(--at-ink);
    box-shadow: var(--at-shadow-layer);
    text-align: start;
  }
  .at-menu--end {
    inset-inline-start: auto;
    inset-inline-end: 0;
  }
  .at-menu__item {
    display: flex;
    align-items: center;
    gap: var(--at-space-2);
    inline-size: 100%;
    min-block-size: var(--at-control-height);
    margin: 0;
    padding: var(--at-space-1) var(--at-space-3);
    border: 0;
    background: transparent;
    color: var(--at-ink);
    font-family: var(--at-font-ui);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-regular);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-tight);
    text-align: start;
    text-decoration: none;
    cursor: pointer;
    touch-action: manipulation;
  }
  .at-menu__item > .at-icon {
    color: var(--at-ink-soft);
  }
  .at-menu__item:hover,
  .at-menu .at-menu__item:focus-visible {
    background: var(--at-surface-2);
  }
  .at-menu .at-menu__item:focus-visible {
    outline-color: var(--at-focus);
    outline-offset: calc(var(--at-border-focus) * -1);
    box-shadow: none;
  }
  .at-menu__item .at-kbd {
    margin-inline-start: auto;
  }
  /* Destruktivní položka: barva chyby, sloveso a ikona; od ostatních ji dělí oddělovač. */
  :is(.at-menu__item--danger, .at-menu__item--chyba),
  :is(.at-menu__item--danger, .at-menu__item--chyba) > .at-icon {
    color: var(--at-danger);
  }
  :is(.at-menu__item--danger, .at-menu__item--chyba):hover,
  .at-menu :is(.at-menu__item--danger, .at-menu__item--chyba):focus-visible {
    background: var(--at-danger-soft);
  }
  .at-menu__item:is(:disabled, [aria-disabled='true']),
  .at-menu__item:is(:disabled, [aria-disabled='true']) > .at-icon {
    background: transparent;
    color: var(--at-muted);
    cursor: not-allowed;
  }
  /* Hlavička nabídky účtu: celé jméno a organizace. Na liště se mohou zkrátit výpustkou
   * a tlačítko účtu title nemá (čtečka by jméno přečetla dvakrát), proto jsou celé tady.
   * <p class="at-menu__hlava">Martin Brázda<span>Autoservis Brázda s.r.o., Kolín</span></p> */
  .at-menu__hlava {
    margin: 0 0 var(--at-space-1);
    padding: var(--at-space-1) var(--at-space-3) var(--at-space-2);
    border-block-end: var(--at-border-rule) solid var(--at-rule);
    color: var(--at-ink);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-medium);
    line-height: var(--at-line-height-heading);
    overflow-wrap: anywhere;
  }
  .at-menu__hlava > span {
    display: block;
    color: var(--at-muted);
    font-weight: var(--at-font-weight-regular);
  }
  .at-menu__separator {
    block-size: 0;
    inline-size: auto;
    margin-block: var(--at-space-1);
    border: 0;
    border-block-start: var(--at-border-rule) solid var(--at-rule);
  }

  /* ---------- Klávesová zkratka ----------
   * Patří do Nápovědy a k položkám nabídky akcí, nikdy ne jako čip do pole hledání na liště.
   * Velikost roste s písmem okolí, nejméně 12 px. */
  .at-kbd {
    display: inline-block;
    min-inline-size: 1.5em;
    padding-inline: var(--at-space-1);
    border: var(--at-border-rule) solid var(--at-rule-strong);
    border-radius: var(--at-radius-control);
    color: var(--at-muted);
    font-family: var(--at-font-ui);
    font-size: max(var(--at-font-size-micro), 0.85em);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    font-variant-numeric: tabular-nums lining-nums;
    line-height: var(--at-line-height-body);
    letter-spacing: 0;
    text-align: center;
    white-space: nowrap;
  }
  .at-menu .at-kbd {
    border-color: var(--at-rule-strong);
    color: var(--at-muted);
  }

  /* ---------- Odkaz jako akce ----------
   * Běžný odkaz je bez ikony. Šipku (i-vpravo) má jen stránkování a odkaz, který vede mimo
   * produkt (jiná služba, dokumentace); šipka za každým odkazem je šablonový tik. */
  .at-link {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: var(--at-space-1);
    color: var(--at-accent-text);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    text-decoration-line: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 0.2em;
  }
  .at-link:hover {
    text-decoration-thickness: 2px;
  }
  .at-link > .at-icon:last-child {
    transition: transform var(--at-motion-fast) var(--at-motion-ease);
  }
  .at-link:hover > .at-icon:last-child {
    transform: translateX(var(--at-space-1));
  }
  .at-bar .at-link:not(:where(.at-menu *)) {
    color: var(--at-on-bar-accent);
  }

  /* ---------- Omezení pohybu ---------- */
  @media (prefers-reduced-motion: reduce) {
    .at-btn[aria-busy='true']::before {
      animation: none;
    }
    .at-link > .at-icon:last-child {
      transition: none;
    }
    .at-link:hover > .at-icon:last-child {
      transform: none;
    }
  }

  /* ---------- Vynucené barvy (Windows kontrastní režim) ---------- */
  @media (forced-colors: active) {
    .at-btn:is(:disabled, [aria-disabled='true']):not([aria-busy='true']),
    .at-segment__option:has(> input:disabled),
    .at-menu__item:is(:disabled, [aria-disabled='true']) {
      border-color: GrayText;
      color: GrayText;
    }
    .at-segment__option:has(> input:checked) {
      forced-color-adjust: none;
      border-color: Highlight;
      background: Highlight;
      color: HighlightText;
    }
    .at-menu__item:hover,
    .at-menu .at-menu__item:focus-visible {
      forced-color-adjust: none;
      background: Highlight;
      color: HighlightText;
    }
    .at-menu__item:hover > .at-icon,
    .at-menu .at-menu__item:focus-visible > .at-icon {
      color: HighlightText;
    }
    /* Indikátor načítání: mezera v kruhu musí zůstat průhledná, jinak by nebylo vidět otáčení.
     * !important přebije barvy variant výše (mají vyšší specifičnost). */
    .at-btn[aria-busy='true']::before {
      forced-color-adjust: none;
      color: ButtonText !important;
    }
    .at-btn[aria-busy='true']:not(:has(> .at-icon)) {
      forced-color-adjust: none;
      border-color: ButtonText;
      background: ButtonFace;
      color: transparent;
    }
  }
}

/* Atomys Design Language — formuláře: pole s trvalým popiskem, vstupy, volby, přepínač,
 * skupina polí, souhrn chyb (vzor GOV.UK), mřížka formuláře a tiskopisová mřížka.
 *
 * Používá jen tokeny --at-*. Vzhled (Tiskopis, Dílna, Atomys), motiv i hustotu mění tokeny,
 * včetně barvy linek tiskopisu (--at-grid-rule); pravidla pro jednotlivé vzhledy tu nejsou.
 * Stavy se čtou z nativních atributů a ARIA: aria-invalid="true", :disabled, [readonly],
 * :checked, aria-busy="true". Chyba má vždy ikonu, text a silnější hranici, nikdy jen barvu.
 * Fokus kreslí základ (tmavá linka a žlutý lem); kde ho komponenta kreslí sama (dráha
 * přepínače), drží stejnou podobu.
 *
 * Formulář podle GOV.UK: souhrn chyb nahoře s odkazy na pole, trvalý popisek nad polem,
 * nápověda, chyba mezi nápovědou a polem, aria-invalid a aria-describedby na vstupu.
 * Každé pole, které uživatel vyplňuje, má markup .at-field ve všech vzhledech. Tiskopisová
 * mřížka (.at-tiskopis) je jen pro údaje, které se na daném místě neupravují. Potvrzovací
 * dialog se otevírá jen nad platným formulářem; neplatný formulář místo něj ukáže souhrn chyb.
 *
 * Velikosti rostou s hustotou: vstupy a volby mají výšku --at-control-height, odkazy
 * souhrnu chyb stejně vysoký cíl. Písmo nikde pod 12 px (--at-font-size-small a výš).
 *
 * Závisí na .at-icon a .at-btn z 10-ovladani.css a na .at-sr-only, .at-num a .at-data ze základu.
 *
 * Pole:
 *   <div class="at-field">
 *     <label class="at-field__label" for="ico">IČO odběratele <span class="at-field__req" aria-hidden="true">povinné</span></label>
 *     <p class="at-field__hint" id="ico-napoveda">8 číslic bez mezer</p>
 *     <p class="at-field__error" id="ico-chyba"><svg class="at-icon" …></svg><span class="at-sr-only">Chyba: </span>…</p>
 *     <input class="at-input" id="ico" required aria-invalid="true" aria-describedby="ico-napoveda ico-chyba">
 *   </div>
 */
@layer atomys.komponenty {
  /* ---------- Pole: popisek, nápověda, chyba, vstup ---------- */
  .at-field {
    display: grid;
    align-content: start;
    gap: var(--at-space-1);
    min-inline-size: 0;
  }

  .at-field__label {
    display: block;
    scroll-margin-block-start: var(--at-space-4);
    color: var(--at-ink);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-heading);
  }

  /* Povinné pole se značí jednotně slovem „povinné“ za popiskem. Značka je aria-hidden,
   * protože povinnost oznámí atribut required (nebo aria-required) na vstupu. */
  .at-field__req {
    margin-inline-start: var(--at-space-1);
    color: var(--at-muted);
    font-weight: var(--at-font-weight-regular);
    white-space: nowrap;
  }

  .at-field__hint {
    margin: 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-body);
  }

  /* Chyba a upozornění na Caps Lock: ikona + věta, co je špatně a jak to napravit. */
  .at-field__error,
  .at-field__caps {
    display: flex;
    align-items: flex-start;
    gap: var(--at-space-1);
    margin: 0;
    color: var(--at-danger);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    line-height: var(--at-line-height-body);
  }
  .at-field__caps {
    color: var(--at-warning);
  }
  /* Text vedle ikony se smí zúžit pod délku nejdelšího slova a zalomit ho, jinak by v úzkém
   * sloupci (hustota Dílna, 1 024 px) přetekl do vedlejšího pole. */
  :is(.at-field__error, .at-field__caps) > :not(.at-icon) {
    min-inline-size: 0;
    overflow-wrap: break-word;
  }
  /* Obsah upozornění vkládá skript do stále přítomné oblasti role="status"; úplně prázdná
   * oblast (ani mezera) místo nezabírá. */
  .at-field__caps:empty {
    display: none;
  }
  :is(.at-field__error, .at-field__caps) > .at-icon {
    inline-size: 1.25em;
    block-size: 1.25em;
    margin-block-start: 0.125em;
    vertical-align: 0;
  }

  /* ---------- Vstup: text, číslo, datum, hledání, heslo, výběr, víceřádkový text ---------- */
  .at-input {
    display: block;
    inline-size: 100%;
    min-inline-size: 0;
    min-block-size: var(--at-control-height);
    margin: 0;
    padding: 0 var(--at-space-3);
    border: var(--at-border-rule) solid var(--at-field-border);
    border-radius: var(--at-radius-control);
    background: var(--at-surface-1);
    color: var(--at-ink);
    font-size: var(--at-font-size-text);
    line-height: var(--at-line-height-heading);
    font-variant-numeric: tabular-nums lining-nums;
    /* Skok na pole bez skriptu (odkaz #id): nad polem zůstane místo na popisek, nápovědu
       a chybu a roste s hustotou. Se skriptem dist/ovladani.js posune odkaz ze souhrnu chyb
       do pohledu přímo popisek nebo legendu (vzor GOV.UK). */
    scroll-margin-block-start: calc(var(--at-control-height) * 3);
  }
  .at-input::placeholder {
    color: var(--at-muted);
    opacity: 1;
  }
  .at-input:hover:not(:disabled, [readonly]) {
    border-color: var(--at-ink-soft);
  }

  /* Chyba: hranice v barvě chyby a dvakrát silnější; odsazení se o linku zmenší, aby text
   * neposkočil. Fokus ze základu zůstává beze změny. */
  .at-input[aria-invalid='true'] {
    padding-inline: calc(var(--at-space-3) - var(--at-border-rule));
    border-width: calc(var(--at-border-rule) * 2);
    border-color: var(--at-danger);
  }
  .at-input[aria-invalid='true']:hover:not(:disabled, [readonly]) {
    border-color: var(--at-danger);
  }
  textarea.at-input[aria-invalid='true'] {
    padding-block: calc(var(--at-space-2) - var(--at-border-rule));
  }

  /* Zakázané: nelze fokusovat ani odeslat, text tlumený, slabá linka. Důvod patří do nápovědy. */
  .at-input:disabled {
    border-color: var(--at-rule);
    background: var(--at-surface-2);
    color: var(--at-muted);
    -webkit-text-fill-color: var(--at-muted);
    opacity: 1;
    cursor: not-allowed;
  }

  /* Jen pro čtení (převzatá nebo přidělená hodnota): uživatel ji nepíše, ale může ji označit
   * a zkopírovat. Od zakázaného i běžného pole ji i bez barvy odliší čárkovaná hranice; ikona
   * zámku na začátku pole (.at-input-group__icon s i-zamek) to řekne ještě jednou tvarem.
   * Odkud hodnota pochází, říká nápověda („Přidělí číselná řada“). */
  .at-input[readonly] {
    border-style: dashed;
    background: var(--at-surface-2);
  }

  textarea.at-input {
    min-block-size: calc(var(--at-control-height) * 2.5);
    padding-block: var(--at-space-2);
    line-height: var(--at-line-height-body);
    resize: vertical;
  }

  .at-input[type='search'] {
    -webkit-appearance: none;
    appearance: none;
  }
  .at-input[type='number'] {
    -moz-appearance: textfield;
    appearance: textfield;
  }
  .at-input[type='number']::-webkit-inner-spin-button,
  .at-input[type='number']::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
  }
  .at-input::-webkit-calendar-picker-indicator {
    cursor: pointer;
  }

  /* Automatické vyplnění prohlížečem: bez modrého a žlutého podkladu, v obou motivech
   * s barvami pole. */
  .at-input:is(:autofill, :-webkit-autofill) {
    box-shadow: inset 0 0 0 100vmax var(--at-surface-1);
    -webkit-text-fill-color: var(--at-ink);
    caret-color: var(--at-ink);
  }
  /* Stín výše přebije žlutý lem fokusu ze základu, proto se lem přidá znovu. */
  .at-input:is(:autofill, :-webkit-autofill):focus-visible {
    box-shadow:
      inset 0 0 0 100vmax var(--at-surface-1),
      0 0 0 var(--at-border-focus) var(--at-focus-halo);
  }

  /* Výběr: obal .at-select kreslí šipku, bez obalu zůstane nativní šipka prohlížeče.
   * <div class="at-select"><select class="at-input">…</select></div> */
  .at-select {
    position: relative;
    display: grid;
    min-inline-size: 0;
  }
  .at-select > select {
    -webkit-appearance: none;
    appearance: none;
    padding-inline-end: calc(var(--at-space-3) * 2 + 0.7em);
    text-overflow: ellipsis;
    cursor: pointer;
  }
  .at-select > select:disabled {
    cursor: not-allowed;
  }
  .at-select::after {
    content: '';
    position: absolute;
    inset-block-start: 50%;
    inset-inline-end: var(--at-space-3);
    inline-size: 0;
    block-size: 0;
    border-inline: 0.35em solid transparent;
    border-block-start: 0.4em solid;
    color: var(--at-ink-soft);
    translate: 0 -40%;
    pointer-events: none;
  }
  .at-select:has(> select:disabled)::after {
    color: var(--at-muted);
  }

  /* ---------- Skupina: vstup s jednotkou, ikonou nebo tlačítkem ----------
   * Jednotka (.at-input-group__addon) se k poli připojí, tlačítko (.at-btn) stojí vedle
   * s mezerou, ikona (.at-input-group__icon) je uvnitř pole na začátku. */
  .at-input-group {
    position: relative;
    display: flex;
    align-items: stretch;
    min-inline-size: 0;
  }
  .at-input-group > :is(.at-input, .at-select) {
    flex: 1 1 auto;
    min-inline-size: 0;
  }
  /* Fokusované pole musí mít obrys nad připojenou jednotkou. */
  .at-input-group > .at-input:focus-visible {
    position: relative;
    z-index: 1;
  }
  .at-input-group > .at-input:has(+ .at-input-group__addon) {
    border-start-end-radius: 0;
    border-end-end-radius: 0;
  }

  .at-input-group__addon {
    display: flex;
    flex: none;
    align-items: center;
    padding-inline: var(--at-space-3);
    border: var(--at-border-rule) solid var(--at-field-border);
    border-inline-start-width: 0;
    border-start-end-radius: var(--at-radius-control);
    border-end-end-radius: var(--at-radius-control);
    background: var(--at-surface-2);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-medium);
    white-space: nowrap;
  }
  .at-input[aria-invalid='true'] + .at-input-group__addon {
    border-color: var(--at-danger);
  }
  .at-input:disabled + .at-input-group__addon {
    border-color: var(--at-rule);
    color: var(--at-muted);
  }
  .at-input[readonly] + .at-input-group__addon {
    border-style: dashed;
  }

  .at-input-group > .at-btn {
    margin-inline-start: var(--at-space-2);
  }
  /* Skupina s tlačítkem: když se pole a tlačítko nevejdou vedle sebe, tlačítko se zalomí
   * pod pole (pole si drží aspoň 8 em). Připojená jednotka se nezalamuje nikdy. */
  .at-input-group:has(> .at-btn) {
    flex-wrap: wrap;
    gap: var(--at-space-2);
  }
  .at-input-group:has(> .at-btn) > .at-input {
    flex-basis: 8em;
  }
  .at-input-group:has(> .at-btn) > .at-btn {
    margin-inline-start: 0;
  }

  .at-input-group__icon {
    position: absolute;
    z-index: 2;
    inset-block-start: 50%;
    inset-inline-start: var(--at-space-3);
    color: var(--at-muted);
    translate: 0 -50%;
    pointer-events: none;
  }
  .at-input-group__icon + .at-input {
    padding-inline-start: calc(var(--at-space-3) + 1.25em + var(--at-space-2));
  }
  .at-input-group__icon + .at-input[aria-invalid='true'] {
    padding-inline-start: calc(
      var(--at-space-3) + 1.25em + var(--at-space-2) - var(--at-border-rule)
    );
  }

  /* Vlastní tlačítko Zobrazit/Skrýt heslo nahrazuje oko prohlížeče Edge. */
  .at-input-group > .at-input::-ms-reveal {
    display: none;
  }

  /* Pole, které se právě plní (například z ARES): aria-busy="true" na .at-field. */
  .at-field[aria-busy='true'] .at-input {
    cursor: progress;
  }

  /* ---------- Zaškrtávací pole a přepínač voleb (radio) ----------
   * Nativní prvek s barvou akcentu, vždy s textem. Cíl je celý řádek popisku.
   * <div class="at-choice"><input class="at-choice__input" type="checkbox" id="x">
   *   <label class="at-choice__label" for="x">Text</label><p class="at-field__hint">…</p></div> */
  .at-choices {
    display: grid;
    min-inline-size: 0;
  }
  .at-choices--inline {
    display: flex;
    flex-wrap: wrap;
    column-gap: var(--at-space-6);
  }

  .at-choice {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: start;
    column-gap: var(--at-space-3);
    min-inline-size: 0;
  }
  /* Zaškrtnuté pole je ukazatel výběru: barva --accent-text má 3 : 1 i v tmavém motivu. */
  .at-choice__input {
    grid-column: 1;
    grid-row: 1;
    inline-size: 1.2em;
    block-size: 1.2em;
    margin: calc((var(--at-control-height) - 1.2em) / 2) 0 0;
    accent-color: var(--at-accent-text);
    cursor: pointer;
    scroll-margin-block-start: calc(var(--at-control-height) * 3);
  }
  .at-choice__label {
    grid-column: 2;
    grid-row: 1;
    min-block-size: var(--at-control-height);
    padding-block: calc((var(--at-control-height) - 1.5em) / 2);
    color: var(--at-ink);
    line-height: var(--at-line-height-body);
    cursor: pointer;
  }
  .at-choice > :is(.at-field__hint, .at-field__error) {
    grid-column: 2;
  }
  .at-choice > .at-field__hint {
    margin-block: calc(var(--at-space-1) * -1) var(--at-space-2);
  }
  /* Chybná volba: obrys v barvě chyby (hranici nativního prvku přebarvit nejde). Při fokusu
   * platí obrys fokusu ze základu. */
  .at-choice__input[aria-invalid='true']:not(:focus-visible) {
    outline: var(--at-border-focus) solid var(--at-danger);
    outline-offset: var(--at-border-rule);
  }
  .at-choice__input:disabled,
  .at-choice__input:disabled + .at-choice__label {
    cursor: not-allowed;
  }
  .at-choice__input:disabled + .at-choice__label {
    color: var(--at-muted);
  }

  /* ---------- Přepínač (role="switch") ----------
   * Okamžitě platné nastavení. Stav nese poloha jezdce a vyplněná dráha, ne jen barva.
   * <div class="at-switch"><input class="at-switch__input" type="checkbox" role="switch" id="x">
   *   <label class="at-switch__label" for="x">Text</label><p class="at-field__hint">…</p></div> */
  .at-switch {
    position: relative;
    min-inline-size: 0;
  }
  .at-switch__input {
    position: absolute;
    z-index: 1;
    inset-block-start: calc((var(--at-control-height) - 1.375em) / 2);
    inset-inline-start: 0;
    inline-size: 2.375em;
    block-size: 1.375em;
    margin: 0;
    opacity: 0;
    cursor: pointer;
    scroll-margin-block-start: calc(var(--at-control-height) * 3);
  }
  .at-switch__label {
    position: relative;
    display: block;
    min-block-size: var(--at-control-height);
    padding-block: calc((var(--at-control-height) - 1.5em) / 2);
    padding-inline-start: calc(2.375em + var(--at-space-3));
    color: var(--at-ink);
    line-height: var(--at-line-height-body);
    cursor: pointer;
  }
  /* Dráha */
  .at-switch__label::before {
    content: '';
    position: absolute;
    inset-block-start: calc((var(--at-control-height) - 1.375em) / 2);
    inset-inline-start: 0;
    inline-size: 2.375em;
    block-size: 1.375em;
    border: var(--at-border-rule) solid var(--at-field-border);
    border-radius: var(--at-radius-control);
    background: var(--at-surface-1);
  }
  /* Jezdec: mezi ním a okrajem dráhy je vždy půl mezery space-1. */
  .at-switch__label::after {
    content: '';
    position: absolute;
    inset-block-start: calc(
      (var(--at-control-height) - 1.375em) / 2 + var(--at-border-rule) + var(--at-space-1) / 2
    );
    inset-inline-start: calc(var(--at-border-rule) + var(--at-space-1) / 2);
    inline-size: calc(1.375em - 2 * var(--at-border-rule) - var(--at-space-1));
    block-size: calc(1.375em - 2 * var(--at-border-rule) - var(--at-space-1));
    border-radius: var(--at-radius-control);
    background: var(--at-muted);
    transition: transform var(--at-motion-fast) var(--at-motion-ease);
  }
  .at-switch:hover > .at-switch__input:not(:disabled) + .at-switch__label::before {
    border-color: var(--at-ink-soft);
  }
  .at-switch__input:checked + .at-switch__label::before {
    border-color: var(--at-accent-border);
    background: var(--at-accent);
  }
  .at-switch__input:checked + .at-switch__label::after {
    background: var(--at-on-accent);
    transform: translateX(1em);
  }
  /* Fokus jako v základu: tmavá linka s odstupem a žlutý lem v mezeře. */
  .at-switch__input:focus-visible + .at-switch__label::before {
    outline: var(--at-border-focus) solid var(--at-focus);
    outline-offset: var(--at-border-focus);
    box-shadow: 0 0 0 var(--at-border-focus) var(--at-focus-halo);
  }
  .at-switch__input:disabled,
  .at-switch__input:disabled + .at-switch__label {
    cursor: not-allowed;
  }
  .at-switch__input:disabled + .at-switch__label {
    color: var(--at-muted);
  }
  .at-switch__input:disabled + .at-switch__label::before {
    border-style: dashed;
    border-color: var(--at-rule-strong);
    background: var(--at-surface-2);
  }
  .at-switch__input:disabled + .at-switch__label::after {
    background: var(--at-rule-strong);
  }
  .at-switch__input:disabled:checked + .at-switch__label::after {
    background: var(--at-muted);
  }
  .at-switch > .at-field__hint {
    margin-block: calc(var(--at-space-1) * -1) var(--at-space-2);
    padding-inline-start: calc(2.375 * var(--at-font-size-text) + var(--at-space-3));
  }

  /* ---------- Skupina polí ----------
   * <fieldset class="at-fieldset"><legend class="at-fieldset__legend">…</legend>…</fieldset>
   * Legenda se obtéká (float), aby se chovala jako běžný řádek a šla do mřížky. */
  .at-fieldset {
    display: grid;
    gap: var(--at-space-2);
    min-inline-size: 0;
    margin: 0;
    padding: 0;
    border: 0;
  }
  .at-fieldset__legend {
    float: inline-start;
    scroll-margin-block-start: var(--at-space-4);
    inline-size: 100%;
    margin: 0;
    padding: 0;
    color: var(--at-ink);
    font-size: var(--at-font-size-h4);
    font-weight: var(--at-heading-weight);
    font-stretch: var(--at-stretch-heading);
    line-height: var(--at-line-height-heading);
    letter-spacing: var(--at-tracking-heading);
  }
  .at-fieldset > :is(.at-form-grid, .at-tiskopis, .at-choices, .at-field, .at-fieldset) {
    margin-block-start: var(--at-space-1);
  }

  /* ---------- Souhrn chyb nad formulářem (vzor GOV.UK error summary, MIT) ----------
   * <div class="at-error-summary" role="alert" tabindex="-1" aria-labelledby="…">
   *   <h2 class="at-error-summary__title">…</h2><ol class="at-error-summary__list">
   *   <li><a href="#pole">Co je špatně a kde</a></li></ol></div>
   * Po odeslání dostane fokus; odkaz vede na vstup s chybou. */
  .at-error-summary {
    padding: var(--at-space-4) var(--at-space-5);
    border: var(--at-bar-edge) solid var(--at-danger);
    border-radius: var(--at-radius-surface);
    background: var(--at-surface-1);
    color: var(--at-ink);
  }
  .at-error-summary__title {
    display: flex;
    align-items: flex-start;
    gap: var(--at-space-2);
    margin: 0 0 var(--at-space-2);
    color: var(--at-ink);
    font-size: var(--at-font-size-h3);
    line-height: var(--at-line-height-heading);
  }
  .at-error-summary__title > .at-icon {
    inline-size: 1.2em;
    block-size: 1.2em;
    color: var(--at-danger);
    vertical-align: 0;
  }
  .at-error-summary__body {
    margin: 0 0 var(--at-space-2);
    color: var(--at-ink-soft);
  }
  .at-error-summary__list {
    margin: 0;
    padding-inline-start: 1.5em;
  }
  /* Odkaz je cíl vysoký jako ovladač v dané hustotě (v dotyku --at-touch-target), proto je
   * blokový a svislé odsazení doplní řádek textu na --at-control-height. Víceřádkový odkaz
   * roste s textem. Šířka jen podle textu, aby cílem nebyl prázdný konec řádku. */
  .at-error-summary__list a {
    display: block;
    inline-size: fit-content;
    max-inline-size: 100%;
    padding-block: calc((var(--at-control-height) - 1lh) / 2);
    color: var(--at-danger);
    font-weight: var(--at-font-weight-semibold);
  }

  /* ---------- Mřížka formuláře ----------
   * 12 sloupců, šířku potomka určuje data-span="1" až "12" (bez atributu celý řádek).
   * Na úzkém místě (měřeno šířkou mřížky, ne okna): pod 40 em jdou pole 1–2 po třech, 3–5
   * po dvou a širší na celý řádek; pod 24 em krátká pole (1–3) po dvou a ostatní na celý
   * řádek; pod 15 em vše na celý řádek. Hranice jsou v em písma mřížky, takže s hustotou
   * Dílna nebo Dotyk (větší písmo a ovladače) se pole skládají dřív a nic se neořízne ani
   * nepřeteče. Mřížka má container-type, proto potřebuje šířku od rodiče (blok nebo
   * roztažená položka mřížky, ne flex s šířkou auto). */
  .at-form-grid {
    display: grid;
    grid-template-columns: repeat(12, minmax(0, 1fr));
    align-items: end;
    gap: var(--at-space-5) var(--at-space-4);
    container-type: inline-size;
  }
  .at-form-grid > * {
    grid-column: span 12;
    min-inline-size: 0;
  }
  /* Ke spodní hraně se zarovnávají jen pole (vstupy v řádku pak lícují i při chybě nebo
   * dvouřádkovém popisku); volby, přepínače a skupiny začínají nahoře. */
  .at-form-grid > :not(.at-field) {
    align-self: start;
  }
  /* Chyba řádku opakovaných polí (položky faktury) stojí pod celým řádkem, hned pod poli:
   * úzký sloupec (Množství) ji nezalomí a popisky řádku zůstanou v jedné linii. Vstup nese
   * aria-invalid a v aria-describedby odkaz na tuto chybu.
   * <p class="at-field__error at-form-grid__chyba-radku" id="…">…</p> za posledním polem řádku */
  .at-form-grid > .at-form-grid__chyba-radku {
    margin-block-start: calc(var(--at-space-5) * -1 + var(--at-space-1));
  }
  .at-form-grid > [data-span='1'] {
    grid-column: span 1;
  }
  .at-form-grid > [data-span='2'] {
    grid-column: span 2;
  }
  .at-form-grid > [data-span='3'] {
    grid-column: span 3;
  }
  .at-form-grid > [data-span='4'] {
    grid-column: span 4;
  }
  .at-form-grid > [data-span='5'] {
    grid-column: span 5;
  }
  .at-form-grid > [data-span='6'] {
    grid-column: span 6;
  }
  .at-form-grid > [data-span='7'] {
    grid-column: span 7;
  }
  .at-form-grid > [data-span='8'] {
    grid-column: span 8;
  }
  .at-form-grid > [data-span='9'] {
    grid-column: span 9;
  }
  .at-form-grid > [data-span='10'] {
    grid-column: span 10;
  }
  .at-form-grid > [data-span='11'] {
    grid-column: span 11;
  }
  @container (max-width: 40em) {
    .at-form-grid > :is([data-span='1'], [data-span='2']) {
      grid-column: span 4;
    }
    .at-form-grid > :is([data-span='3'], [data-span='4'], [data-span='5']) {
      grid-column: span 6;
    }
    .at-form-grid
      > :is(
        [data-span='6'],
        [data-span='7'],
        [data-span='8'],
        [data-span='9'],
        [data-span='10'],
        [data-span='11']
      ) {
      grid-column: span 12;
    }
  }
  @container (max-width: 24em) {
    .at-form-grid > :is([data-span='1'], [data-span='2'], [data-span='3']) {
      grid-column: span 6;
    }
    .at-form-grid
      > :is(
        [data-span='4'],
        [data-span='5'],
        [data-span='6'],
        [data-span='7'],
        [data-span='8'],
        [data-span='9'],
        [data-span='10'],
        [data-span='11']
      ) {
      grid-column: span 12;
    }
  }
  @container (max-width: 15em) {
    .at-form-grid > [data-span] {
      grid-column: span 12;
    }
  }

  /* ---------- Tiskopis: údaje, které se neupravují, s popiskem v rohu buňky ----------
   * <dl class="at-tiskopis"><div class="at-tiskopis__bunka" data-span="4">
   *   <dt class="at-tiskopis__popisek">DUZP</dt><dd class="at-tiskopis__hodnota">25. 9. 2026</dd></div></dl>
   * Jen pro údaje, které uživatel na tomto místě nepíše: doklad, přečtený soubor, převzaté
   * údaje dodavatele, souhrn. Vstupy do buňky nepatří; pole k vyplnění je vždy .at-field
   * s popiskem nad polem (i ve vzhledu Tiskopis), jinak by se formulář lišil podle vzhledu.
   * Mřížka sdílí linky: kontejner kreslí horní a levou, buňka pravou a dolní. */
  .at-tiskopis {
    --_linka: var(--at-grid-rule);
    display: flex;
    flex-wrap: wrap;
    margin: 0;
    border-block-start: var(--at-border-rule) solid var(--_linka);
    border-inline-start: var(--at-border-rule) solid var(--_linka);
    background: var(--at-surface-1);
  }
  /* Buňka má šířku data-span z 12 sloupců (bez atributu celý řádek), ale nejméně 8 em písma
   * buňky. Když se řádek do šířky nevejde (úzký sloupec, hustota Dílna), buňka přejde na další
   * řádek a buňky řádku se roztáhnou do plné šířky: mřížka nemá díry a údaj se nezalomí
   * uprostřed čísla. Na šířce, kde se řádek vejde, lícují svislé linky jako na předtisku. */
  .at-tiskopis > * {
    --_span: 12;
    flex: 1 0 max(calc(var(--_span) / 12 * 100%), 8em);
    min-inline-size: 0;
    max-inline-size: 100%;
  }
  .at-tiskopis > [data-span='1'] {
    --_span: 1;
  }
  .at-tiskopis > [data-span='2'] {
    --_span: 2;
  }
  .at-tiskopis > [data-span='3'] {
    --_span: 3;
  }
  .at-tiskopis > [data-span='4'] {
    --_span: 4;
  }
  .at-tiskopis > [data-span='5'] {
    --_span: 5;
  }
  .at-tiskopis > [data-span='6'] {
    --_span: 6;
  }
  .at-tiskopis > [data-span='7'] {
    --_span: 7;
  }
  .at-tiskopis > [data-span='8'] {
    --_span: 8;
  }
  .at-tiskopis > [data-span='9'] {
    --_span: 9;
  }
  .at-tiskopis > [data-span='10'] {
    --_span: 10;
  }
  .at-tiskopis > [data-span='11'] {
    --_span: 11;
  }
  /* Barvu mřížky dává token --at-grid-rule: Tiskopis kreslí silnější linkou ruleStrong jako
   * předtištěný formulář, Dílna a Atomys tenkou linkou rule. Token platí i v náhledu tiskového
   * výstupu (data-vzhled="tiskopis") uvnitř stránky jiného vzhledu. */

  .at-tiskopis__bunka {
    position: relative;
    display: grid;
    align-content: start;
    gap: calc(var(--at-space-1) / 2);
    min-inline-size: 0;
    min-block-size: calc(var(--at-control-height) + var(--at-space-4));
    padding: calc(var(--at-space-1) * 1.5) var(--at-space-3) var(--at-space-2);
    border-inline-end: var(--at-border-rule) solid var(--_linka);
    border-block-end: var(--at-border-rule) solid var(--_linka);
  }
  .at-tiskopis__popisek {
    display: block;
    margin: 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-label);
    line-height: var(--at-line-height-heading);
  }
  .at-tiskopis__hodnota {
    display: block;
    margin: 0;
    color: var(--at-ink);
    font-size: var(--at-font-size-text);
    line-height: var(--at-line-height-body);
    font-variant-numeric: tabular-nums lining-nums;
    overflow-wrap: anywhere;
  }
  .at-tiskopis__hodnota--velka {
    font-size: var(--at-font-size-h2);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-number);
    line-height: var(--at-line-height-tight);
  }
  /* Nevyplněný údaj dokladu: pomlčka nebo „neuvedeno“ tlumeně. */
  .at-tiskopis__hodnota:empty::before {
    content: '—';
    color: var(--at-muted);
  }

  /* Podtisk: převzatá hodnota, kterou tady nelze změnit (údaje dodavatele z Nastavení,
   * údaje z ARES). Plocha surface-2 nestačí (kontrast 1,2 : 1), proto má popisek ikonu zámku
   * a oddíl větu, odkud se údaj bere, s odkazem na místo, kde se mění.
   * <dt class="at-tiskopis__popisek"><svg class="at-icon" aria-hidden="true"><use href="…#i-zamek"></use></svg>IČO</dt> */
  .at-tiskopis__bunka--podtisk {
    background: var(--at-surface-2);
  }
  .at-tiskopis__popisek > .at-icon {
    inline-size: 1em;
    block-size: 1em;
    margin-inline-end: var(--at-space-1);
    vertical-align: -0.125em;
  }

  /* ---------- Na liště (.at-bar): hledání a pole v barvách lišty ----------
   * Ne v plovoucí nabídce účtu (.at-menu), která leží v DOM uvnitř lišty. */
  .at-bar .at-input:not(:where(.at-menu *)) {
    border-color: var(--at-bar-field-border);
    background: var(--at-bar-field);
    color: var(--at-on-bar);
  }
  .at-bar .at-input:not(:where(.at-menu *))::placeholder {
    color: var(--at-bar-muted);
  }
  .at-bar .at-input:hover:not(:disabled, [readonly]):not(:where(.at-menu *)) {
    border-color: var(--at-on-bar);
  }
  .at-bar .at-input:is(:autofill, :-webkit-autofill):not(:where(.at-menu *)) {
    box-shadow: inset 0 0 0 100vmax var(--at-bar-field);
    -webkit-text-fill-color: var(--at-on-bar);
    caret-color: var(--at-on-bar);
  }
  .at-bar .at-input-group__icon:not(:where(.at-menu *)) {
    color: var(--at-bar-muted);
  }
  .at-bar .at-field__label:not(:where(.at-menu *)) {
    color: var(--at-on-bar);
  }

  /* ---------- Vysoký kontrast (forced colors) ----------
   * Stíny a podklady prohlížeč zahodí; hranice, polohu jezdce a šipku kreslí systémové barvy. */
  @media (forced-colors: active) {
    .at-select::after {
      forced-color-adjust: none;
      border-block-start-color: CanvasText;
    }
    .at-switch__label::before,
    .at-switch__label::after {
      forced-color-adjust: none;
    }
    .at-switch__label::before {
      border-color: CanvasText;
      background: Canvas;
    }
    .at-switch__label::after {
      background: CanvasText;
    }
    .at-switch__input:checked + .at-switch__label::before {
      border-color: Highlight;
      background: Highlight;
    }
    .at-switch__input:checked + .at-switch__label::after {
      background: HighlightText;
    }
    .at-switch__input:disabled + .at-switch__label::before {
      border-color: GrayText;
    }
    .at-switch__input:disabled + .at-switch__label::after {
      background: GrayText;
    }
    .at-switch__input:focus-visible + .at-switch__label::before {
      outline-color: Highlight;
    }
  }
}

/* Atomys Design Language — datové komponenty: tabulka, stavový štítek, SPZ, identifikátor,
 * částka, metrický pás, seznam klíč–hodnota, prázdný stav, stránkování, filtry nad
 * seznamem a štítek „Ukázková data“.
 *
 * Stejné HTML pro vzhledy Tiskopis, Dílna a Atomys. Záhlaví tabulky (tableHead,
 * onTableHead), verzálky a šířka popisků, zaoblení i výška řádku jdou z tokenů, stejně jako
 * konstrukce vzhledu (linky záhlaví a součtu, dělítka, dvojitá linka konečného součtu, tvar
 * filtru a raženého štítku stavu). Pravidla pro jednotlivé vzhledy tu nejsou, takže atribut
 * data-vzhled platí i přímo na komponentě.
 *
 * Stavy se čtou z nativních atributů a ARIA: aria-sort, aria-selected, aria-busy,
 * aria-current, aria-disabled, :disabled, :checked. Stav nikdy není vyjádřen jen barvou.
 *
 * Spoléhá na: .at-icon a .at-btn (10-ovladani.css), .at-num, .at-sr-only (zaklad.css).
 * Tabulka s .at-kostra (60-stav.css) se při aria-busy neztlumí, kostra má vlastní vzhled.
 */
@layer atomys.komponenty {
  /* ---------- Datová tabulka ----------
   * <div class="at-table__obal" role="region" aria-labelledby="id-caption" tabindex="0">
   *   <table class="at-table [at-table--sticky]"> <caption id="id-caption">…</caption> …
   * Čísla: <td class="at-num">, jednotka v záhlaví <span class="at-table__jednotka">Kč</span>.
   * Řazení: <th aria-sort="ascending|descending"> jen u právě řazeného sloupce, v záhlaví
   * <button class="at-table__radit"> s ikonami .at-table__smer a .at-table__neserazeno.
   * Vybraný řádek: <tr aria-selected="true"> a zaškrtnutý checkbox v .at-table__vyber. */
  .at-table__obal {
    container-type: inline-size;
    inline-size: 100%;
    max-inline-size: 100%;
    overflow-x: auto;
    overscroll-behavior-inline: contain;
  }
  /* Popisek široké tabulky zůstane při posunu do stran vidět v šířce obalu. */
  .at-table__obal > .at-table > caption {
    position: sticky;
    inset-inline-start: 0;
    max-inline-size: 100cqi;
  }
  /* Obal s omezenou výškou: záhlaví .at-table--sticky pak drží uvnitř obalu. */
  .at-table__obal--vyska {
    max-block-size: calc(var(--at-row-height) * 12);
    overflow-y: auto;
  }
  /* Nápověda k posouvání široké tabulky. Stojí v obalu před tabulkou, obal na ni odkazuje přes
   * aria-describedby. Ukáže se, když je obal užší než 40 rem (asi 7 sloupců se tam nevejde),
   * a při posunu do stran zůstane vidět jako popisek tabulky.
   *   <div class="at-table__obal" role="region" aria-labelledby="…" aria-describedby="posun-1" tabindex="0">
   *     <p class="at-table__posun" id="posun-1"><svg class="at-icon">…#i-posun</svg>Tabulku lze
   *       posunout do stran, 7 sloupců.</p> <table class="at-table">… */
  .at-table__posun {
    position: sticky;
    inset-inline-start: 0;
    display: none;
    align-items: center;
    gap: var(--at-space-2);
    max-inline-size: 100cqi;
    margin: 0;
    padding-block-end: var(--at-space-2);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }
  .at-table__posun > .at-icon {
    inline-size: 1.15em;
    block-size: 1.15em;
  }
  @container (inline-size < 40rem) {
    .at-table__posun {
      display: flex;
    }
  }

  .at-table {
    inline-size: 100%;
    margin: 0;
    border-collapse: separate;
    border-spacing: 0;
    background: var(--at-surface-1);
    color: var(--at-ink);
    font-size: var(--at-font-size-table);
    line-height: var(--at-line-height-table);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-table > caption {
    caption-side: top;
    padding-block-end: var(--at-space-2);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    text-align: start;
  }

  /* Záhlaví: plocha tableHead, popisek v užším řezu; verzálky jen tam, kde je dělá vzhled. */
  .at-table thead th {
    padding: var(--at-space-2) var(--at-space-3);
    border-block-end: var(--at-table-head-rule-width) solid var(--at-table-head-rule);
    background: var(--at-table-head);
    color: var(--at-on-table-head);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-label);
    letter-spacing: var(--at-label-tracking);
    line-height: var(--at-line-height-tight);
    text-align: start;
    text-transform: var(--at-label-case);
    vertical-align: bottom;
    white-space: nowrap;
  }
  /* Dělítka záhlaví (Dílna: ražené záhlaví se svislými linkami, jinde šířka 0). */
  .at-table thead th + th {
    border-inline-start: var(--at-table-head-divider) solid
      color-mix(in srgb, var(--at-on-table-head) 22%, transparent);
  }
  /* Jednotka ve sloupci („(Kč)“) se sází vždy malými písmeny, i v záhlaví s verzálkami. */
  .at-table__jednotka {
    font-weight: var(--at-font-weight-regular);
    text-transform: none;
  }
  /* Fokus v záhlaví (výběr všech řádků, řazení, odkaz) kreslí linku barvou textu záhlaví, aby
   * byla vidět i na tmavém záhlaví Dílny. */
  .at-table thead :focus-visible {
    outline-color: var(--at-on-table-head);
  }
  .at-table--sticky thead th {
    position: sticky;
    inset-block-start: 0;
    z-index: 1;
  }

  .at-table tbody > tr > :is(td, th) {
    block-size: var(--at-row-height);
    padding: var(--at-space-1) var(--at-space-3);
    border-block-end: var(--at-border-rule) solid var(--at-rule);
    text-align: start;
    vertical-align: middle;
  }
  .at-table tbody th {
    font-weight: var(--at-font-weight-medium);
  }
  .at-table .at-num {
    text-align: end;
  }
  .at-table :is(tbody, tfoot) .at-num {
    font-stretch: var(--at-stretch-number);
  }
  /* Druhý řádek buňky: typ práce pod vozidlem, IČO pod firmou. */
  .at-table__druhy {
    display: block;
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
  }
  .at-table .at-stav {
    white-space: nowrap;
  }
  /* Odkazy v tabulce (čísla zakázek a dokladů) jsou v inkoustu s podtržením, ne v akcentu:
   * akcent oblasti by vedle stavových tónů splýval (rez a okrová mají v tmavém motivu poměr
   * jasu jen 1,6). Podtržení a najetí myší zůstávají ze základu. */
  .at-table a:any-link:not(.at-btn) {
    position: relative;
    color: var(--at-ink);
    text-decoration-color: currentColor;
  }
  /* Cíl odkazu roste s hustotou jako ostatní ovladače (v dotyku --at-touch-target), text sám
   * je vysoký jen jeden řádek. Neviditelná plocha na střed odkazu, řádek tím neroste. */
  .at-table a:any-link:not(.at-btn)::after {
    content: '';
    position: absolute;
    inset: 50% auto auto 50%;
    inline-size: max(100%, var(--at-control-height));
    block-size: max(100%, var(--at-control-height));
    translate: -50% -50%;
  }

  @media (hover: hover) {
    .at-table tbody tr:hover {
      background: var(--at-surface-2);
    }
  }

  /* Výběr řádku: podklad accentSoft a zaškrtnutý checkbox, který nese skutečný stav
   * (aria-selected mimo role="grid" čtečky nehlásí). Barevný levý pruh se nepoužívá,
   * ten patří jen výjimkám v bloku „Vyžaduje pozornost“. */
  .at-table tbody tr[aria-selected='true'] {
    background: var(--at-accent-soft);
  }
  .at-table .at-table__vyber {
    inline-size: 1%;
    padding-inline: var(--at-space-1);
  }
  /* Cíl checkboxu má výšku ovládacího prvku (v hustotě Dotyk 52 px), řádek tím neroste. */
  .at-table__vyber > label {
    display: grid;
    place-items: center;
    min-inline-size: var(--at-control-height);
    min-block-size: var(--at-control-height);
    margin-block: calc(var(--at-space-1) * -1);
    cursor: pointer;
  }
  .at-table thead .at-table__vyber > label {
    margin-block: calc(var(--at-space-2) * -1);
  }
  .at-table__vyber input {
    inline-size: 1.125em;
    block-size: 1.125em;
    margin: 0;
    accent-color: var(--at-accent-text);
    cursor: pointer;
  }
  .at-table__vyber input:disabled {
    cursor: not-allowed;
  }

  /* Řazení: tlačítko vyplní celou buňku záhlaví. Směr ukazuje tvar šipky, stav nese
   * aria-sort na <th> a věta v <caption> („Seřazeno podle předání, nejdříve nahoře“). */
  .at-table__radit {
    display: flex;
    align-items: flex-end;
    gap: var(--at-space-1);
    inline-size: calc(100% + var(--at-space-3) * 2);
    min-block-size: var(--at-control-height);
    margin: calc(var(--at-space-2) * -1) calc(var(--at-space-3) * -1);
    padding: var(--at-space-2) var(--at-space-3);
    border: 0;
    border-radius: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    letter-spacing: inherit;
    text-align: inherit;
    text-transform: inherit;
    cursor: pointer;
  }
  .at-table__radit:hover {
    text-decoration: underline;
    text-decoration-thickness: var(--at-border-rule);
    text-underline-offset: 0.2em;
  }
  /* Fokus jako v základu (linka a žlutý lem), ale uvnitř buňky a linkou v barvě textu
   * záhlaví, aby byl vidět i na tmavém záhlaví Dílny a nepřekryla ho sousední buňka. */
  .at-table__radit:focus-visible {
    outline-color: var(--at-on-table-head);
    outline-offset: calc(var(--at-border-focus) * -1);
    box-shadow: inset 0 0 0 calc(var(--at-border-focus) * 2) var(--at-focus-halo);
  }
  .at-table__radit > .at-icon {
    inline-size: 1.1em;
    block-size: 1.1em;
  }
  .at-table th.at-num > .at-table__radit {
    flex-direction: row-reverse;
  }
  .at-table__neserazeno {
    opacity: 0.6;
  }
  .at-table th:not([aria-sort='ascending'], [aria-sort='descending']) .at-table__smer,
  .at-table th:is([aria-sort='ascending'], [aria-sort='descending']) .at-table__neserazeno {
    display: none;
  }
  .at-table th[aria-sort='descending'] .at-table__smer {
    transform: rotate(180deg);
  }

  /* Součtový řádek: <tfoot><tr><th scope="row"><span class="at-table__sigma"
   * aria-hidden="true">Σ</span> Celkem …</th> … <td class="at-num at-table__soucet"> */
  .at-table tfoot > tr > :is(td, th) {
    block-size: var(--at-row-height);
    padding: var(--at-space-2) var(--at-space-3);
    border-block-start: var(--at-table-foot-rule-width) solid var(--at-table-foot-rule);
    font-weight: var(--at-font-weight-semibold);
    text-align: start;
    vertical-align: middle;
  }
  .at-table tfoot .at-num {
    text-align: end;
  }
  /* Konečný součet: v Tiskopisu podtržený dvojitou linkou jako v účetní knize (--at-total-line),
   * jinde bez podtržení. Jen jeden na tabulku. */
  .at-table__soucet {
    text-decoration-line: var(--at-total-line);
    text-decoration-style: double;
    text-decoration-color: var(--at-ink);
    text-decoration-thickness: var(--at-border-rule);
    text-decoration-skip-ink: none;
    text-underline-offset: 0.3em;
  }
  .at-table__sigma {
    margin-inline-end: var(--at-space-1);
    color: var(--at-muted);
    font-weight: var(--at-font-weight-regular);
  }

  /* Prázdný řádek: jedna buňka přes všechny sloupce, věta s důvodem a dalším krokem. */
  .at-table tbody > tr.at-table__prazdny > td {
    block-size: auto;
    padding: var(--at-space-5) var(--at-space-3);
    color: var(--at-ink-soft);
    white-space: normal;
  }
  .at-table tbody tr.at-table__prazdny {
    background: transparent;
  }

  /* Načítání: nic do 150 ms, pak text řádků, odkazů i štítků přejde do tlumené barvy muted.
   * Kontrast zůstane aspoň 4,5 : 1 (průhlednost by ho snížila pod hranici). Stav načítání nese
   * věta v <caption> nebo v oblasti role="status", ztlumení je jen doplněk. */
  .at-table tbody > tr,
  .at-table tbody > tr :is(a, .at-stav, .at-spz, .at-castka, .at-table__druhy) {
    transition: color var(--at-motion-fast) linear;
  }
  .at-table[aria-busy='true']:not(.at-kostra) tbody > tr,
  .at-table[aria-busy='true']:not(.at-kostra) tbody > tr :is(a, .at-stav, .at-spz, .at-castka, .at-table__druhy) {
    color: var(--at-muted);
    transition: color var(--at-motion-base) linear var(--at-motion-base);
  }
  .at-table[aria-busy='true'] {
    cursor: progress;
  }

  /* ---------- Skládaná tabulka na úzké ploše ----------
   * Datová tabulka, která se na telefonu nemá posouvat do stran (zakázky, obchodní případy).
   * Když je obal užší než 40 rem, složí se každý řádek do mřížky: první buňka (číslo zakázky)
   * přes celou šířku, ostatní po dvou s popiskem sloupce nad hodnotou. Popisek je v atributu
   * data-popisek buňky (i s jednotkou, „Cena s DPH (Kč)“; popisek se nesází verzálkami, aby
   * jednotka zůstala malými písmeny); buňka s .at-table__cela zabere celý řádek mřížky. Záhlaví zůstane
   * čtečkám, popisek je i v přístupném textu, takže hodnota nezůstane bez popisku ani tam, kde
   * prohlížeč při složení řádku ztratí sémantiku tabulky. Součtový řádek je název vlevo
   * a částka vpravo.
   *   <table class="at-table at-table--skladana"> … <td data-popisek="Stav">…</td> */
  @container (inline-size < 40rem) {
    .at-table--skladana,
    .at-table--skladana > :is(tbody, tfoot) {
      display: block;
    }
    .at-table--skladana > thead {
      position: absolute;
      inline-size: 1px;
      block-size: 1px;
      overflow: hidden;
      clip-path: inset(50%);
      white-space: nowrap;
    }
    .at-table--skladana > tbody > tr {
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: var(--at-space-2) var(--at-space-4);
      padding: var(--at-space-3) max(var(--at-space-3), var(--at-panel-padding));
      border-block-end: var(--at-border-rule) solid var(--at-rule);
    }
    .at-table--skladana > :is(tbody, tfoot) > tr > :is(td, th),
    .at-panel__telo--plne .at-table--skladana > :is(tbody, tfoot) > tr > :is(:first-child, :last-child) {
      display: block;
      block-size: auto;
      padding: 0;
      border: 0;
      text-align: start;
    }
    .at-table--skladana > tbody > tr > :is(:first-child, .at-table__cela) {
      grid-column: 1 / -1;
    }
    .at-table--skladana > tbody .at-num {
      text-align: start;
    }
    /* V půlce řádku se dlouhý stav („Čeká na schválení rozpočtu“) zalomí, nepřeteče vedle. */
    .at-table--skladana > tbody .at-stav {
      white-space: normal;
    }
    .at-table--skladana > tbody > tr > [data-popisek]::before {
      content: attr(data-popisek);
      display: block;
      margin-block-end: calc(var(--at-space-1) / 2);
      color: var(--at-muted);
      font-size: var(--at-font-size-small);
      font-weight: var(--at-font-weight-medium);
      font-stretch: var(--at-stretch-label);
    }
    .at-table--skladana > tfoot > tr {
      display: flex;
      flex-wrap: wrap;
      align-items: baseline;
      justify-content: space-between;
      gap: var(--at-space-1) var(--at-space-4);
      padding: var(--at-space-3) max(var(--at-space-3), var(--at-panel-padding));
      border-block-start: var(--at-table-foot-rule-width) solid var(--at-table-foot-rule);
      font-weight: var(--at-font-weight-semibold);
    }
    .at-table--skladana > tfoot > tr > .at-num {
      text-align: end;
    }
  }

  /* ---------- Stavový štítek a slovník stavů ----------
   * <span class="at-stav at-stav--info"><svg class="at-icon" aria-hidden="true">…#i-naradi</svg>V opravě</span>
   * Štítek je ikona a slovo v barvě tónu, bez výplně a ve všech vzhledech malými písmeny.
   * Tón nese barvu, ikona tvar a slovo význam. Dílna přidává ražený obrys v barvě tónu
   * (tokeny --at-stav-border-width, --at-stav-padding-inline a --at-stav-weight); stejné tokeny
   * čtou štítky agendy, fáze fronty a postupu i náhled vzhledu, takže vypadají stejně.
   *
   * Slovník má pevné tóny, stejné ve všech vzhledech, komponentách i produktech:
   *   význam     tón           štítky                                   ikona
   *   probíhá    --info        V opravě, Probíhá, Vystaveno (lhůta běží) i-naradi, i-razitko
   *   čeká       --varovani    Čeká na díl, Čeká na schválení,           i-dil, i-cas
   *                            Čeká na potvrzení
   *   problém    --chyba       Po splatnosti, Nedoručeno, Chyba          i-chyba
   *   hotovo     --uspech      Hotovo k předání, Zaplaceno, Potvrzeno    i-hotovo, i-hotovo-kruh
   *   mimo běh   --neutralni   Rozepsaný, Naplánováno, Stornováno,       i-upravit, i-kalendar,
   *              (nebo bez                Zrušeno                        i-zamitnuto
   *              modifikátoru)
   * Akcent oblasti stav nikdy neoznačuje. „Výchozí“, „vybrané“ nebo „otevřené“ není stav
   * a do štítku nepatří: vyjádří ho aria-current, zaškrtnutí nebo text u prvku. */
  .at-stav {
    --_stav: var(--at-ink-soft);
    display: inline-flex;
    align-items: center;
    gap: calc(var(--at-space-1) * 1.5);
    max-inline-size: 100%;
    padding: var(--at-stav-border-width) var(--at-stav-padding-inline);
    border: var(--at-stav-border-width) solid currentColor;
    border-radius: var(--at-radius-control);
    color: var(--_stav);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-stav-weight);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-table);
    vertical-align: middle;
  }
  .at-stav > .at-icon {
    flex: none;
    inline-size: 1.15em;
    block-size: 1.15em;
  }
  .at-stav--neutralni {
    --_stav: var(--at-ink-soft);
  }
  .at-stav--info {
    --_stav: var(--at-info);
  }
  .at-stav--uspech {
    --_stav: var(--at-success);
  }
  .at-stav--varovani {
    --_stav: var(--at-warning);
  }
  .at-stav--chyba {
    --_stav: var(--at-danger);
  }

  /* ---------- SPZ ----------
   * Rámeček registrační značky: linka inkoustu, silnější levý okraj místo pruhu EU,
   * bez modré, hvězd a státního kódu. Text se píše tak, jak je na tabulce (1SE 7732). */
  .at-spz {
    display: inline-block;
    padding: 0 var(--at-space-2) 0 calc(var(--at-space-2) * 0.75);
    border: var(--at-border-rule) solid var(--at-ink-soft);
    border-inline-start-width: calc(var(--at-border-rule) * 4);
    border-radius: var(--at-radius-control);
    background: var(--at-surface-1);
    color: var(--at-ink);
    font-family: var(--at-font-ui);
    font-size: var(--at-font-size-table);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-label);
    font-variant-numeric: tabular-nums lining-nums;
    letter-spacing: var(--at-label-tracking);
    line-height: var(--at-line-height-label);
    white-space: nowrap;
  }

  /* ---------- Identifikátor ----------
   * Strojová data (VIN, IBAN, UUID, kód chyby) v Mono. Klepnutí označí celý údaj.
   * Kopírování: <span class="at-id"><span class="at-id__hodnota">…</span>
   *   <button type="button" class="… at-id__kopirovat" aria-label="Kopírovat VIN">…</button>
   *   <span class="at-id__stav" role="status"></span></span>
   * Čísla faktur, IČO, DIČ a částky nejsou strojová data, Mono pro ně nepatří. */
  .at-id {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    column-gap: var(--at-space-1);
    max-inline-size: 100%;
    font-family: var(--at-font-data);
    font-size: var(--at-font-size-small);
    letter-spacing: 0;
    overflow-wrap: anywhere;
    user-select: all;
    -webkit-user-select: all;
  }
  .at-id__hodnota {
    min-inline-size: 0;
  }
  /* Tlačítko je ikonové tlačítko z 10-ovladani.css:
   * class="at-btn at-btn--ikona at-btn--quiet at-btn--small at-id__kopirovat". */
  .at-id__kopirovat {
    user-select: none;
    -webkit-user-select: none;
  }
  .at-id__stav {
    color: var(--at-success);
    font-family: var(--at-font-ui);
    user-select: none;
    -webkit-user-select: none;
  }
  .at-id__stav:empty {
    display: none;
  }

  /* ---------- Částka ----------
   * <span class="at-castka">18 430,00 <span class="at-castka__mena">Kč</span></span>
   * Záporná: skutečné minus U+2212 v textu a .at-castka--zaporna (tón chyby). */
  .at-castka {
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
    white-space: nowrap;
  }
  .at-castka__mena {
    color: var(--at-muted);
    font-weight: var(--at-font-weight-regular);
  }
  .at-castka--zaporna {
    color: var(--at-danger);
  }

  /* ---------- Metrický pás ----------
   * <dl class="at-metriky"><div class="at-metriky__polozka">
   *   <dt class="at-metriky__nazev">…</dt>
   *   <dd class="at-metriky__hodnota">184 350 <span class="at-metriky__jednotka">Kč</span></dd>
   *   <dd class="at-metriky__obdobi">…</dd> <dd class="at-metriky__zdroj">…</dd></div></dl>
   * Nula (--nula) ani chybějící data (--chybi) se nezvětšují a vysvětlí je
   * .at-metriky__vysvetleni. Buňky sdílejí linky jako tiskopis, při zalomení drží mřížku. */
  .at-metriky {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
    margin: 0;
    border-block-start: var(--at-border-rule) solid var(--at-grid-rule);
    border-inline-start: var(--at-border-rule) solid var(--at-grid-rule);
    background: var(--at-surface-1);
  }
  .at-metriky__polozka {
    display: flex;
    flex-direction: column;
    gap: var(--at-space-1);
    min-inline-size: 0;
    padding: var(--at-space-3) var(--at-space-4);
    border-block-end: var(--at-border-rule) solid var(--at-grid-rule);
    border-inline-end: var(--at-border-rule) solid var(--at-grid-rule);
  }
  .at-metriky dd {
    margin: 0;
  }
  .at-metriky__nazev {
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-label);
    line-height: var(--at-line-height-tight);
  }
  .at-metriky__hodnota {
    color: var(--at-ink);
    font-size: var(--at-font-size-h3);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
    line-height: var(--at-line-height-tight);
    overflow-wrap: anywhere;
  }
  .at-metriky__jednotka {
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-regular);
  }
  .at-metriky__obdobi,
  .at-metriky__zdroj {
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }
  .at-metriky__vysvetleni {
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
  }
  :is(.at-metriky__polozka--nula, .at-metriky__polozka--chybi) .at-metriky__hodnota {
    display: flex;
    align-items: center;
    gap: var(--at-space-1);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-medium);
  }
  .at-metriky__hodnota > .at-icon {
    inline-size: 1.15em;
    block-size: 1.15em;
  }

  /* ---------- Seznam klíč–hodnota ----------
   * <dl class="at-spec"><div><dt>VIN</dt><dd>…</dd></div>…</dl>
   * Na úzkém místě se hodnota zalomí pod klíč, bez media query. */
  .at-spec {
    margin: 0;
  }
  .at-spec > div {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--at-space-1) var(--at-space-4);
    padding-block: var(--at-space-2);
  }
  .at-spec > div + div {
    border-block-start: var(--at-border-rule) solid var(--at-rule);
  }
  .at-spec dt {
    flex: 0 0 11rem;
    max-inline-size: 100%;
    color: var(--at-muted);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-label);
  }
  .at-spec dd {
    flex: 1 1 16rem;
    min-inline-size: 0;
    margin: 0;
    overflow-wrap: anywhere;
  }

  /* ---------- Prázdný stav ----------
   * Věta s důvodem a jeden další krok. Nestojí uprostřed na půl obrazovky.
   * <div class="at-prazdny"><svg class="at-icon at-prazdny__ikona">…</svg>
   *   <h3 class="at-prazdny__nadpis">…</h3><p class="at-prazdny__text">…</p>
   *   <p class="at-prazdny__akce">…</p></div> */
  .at-prazdny {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    row-gap: var(--at-space-1);
    align-items: start;
    max-inline-size: var(--at-layout-text-max);
    color: var(--at-ink-soft);
  }
  .at-prazdny > * {
    grid-column: 2;
  }
  .at-prazdny > .at-prazdny__ikona {
    grid-column: 1;
    grid-row: 1 / span 3;
    inline-size: 1.5em;
    block-size: 1.5em;
    margin-inline-end: var(--at-space-3);
    color: var(--at-muted);
  }
  .at-prazdny--chyba > .at-prazdny__ikona {
    color: var(--at-danger);
  }
  .at-prazdny__nadpis {
    margin: 0;
    color: var(--at-ink);
    font-size: var(--at-font-size-h4);
  }
  .at-prazdny__text {
    margin: 0;
  }
  .at-prazdny__akce {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-2) var(--at-space-4);
    margin: var(--at-space-2) 0 0;
  }

  /* ---------- Stránkování ----------
   * <nav class="at-strankovani" aria-label="Stránkování zakázek">
   *   <p class="at-strankovani__souhrn">Zakázky 21–40 z 312</p>
   *   <ul class="at-strankovani__seznam" role="list"><li><a class="at-strankovani__odkaz"
   *   aria-current="page">2</a></li>… Nedostupný krok je <span … aria-disabled="true">. */
  .at-strankovani {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--at-space-2) var(--at-space-4);
    font-size: var(--at-font-size-table);
  }
  .at-strankovani__souhrn {
    margin: 0;
    color: var(--at-ink-soft);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-strankovani__seznam {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-1);
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .at-strankovani__odkaz {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--at-space-1);
    min-inline-size: var(--at-control-height);
    min-block-size: var(--at-control-height);
    padding: 0 var(--at-space-2);
    border: var(--at-border-rule) solid transparent;
    border-radius: var(--at-radius-control);
    color: var(--at-ink);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    font-variant-numeric: tabular-nums lining-nums;
    text-decoration: none;
    white-space: nowrap;
  }
  a.at-strankovani__odkaz:hover {
    border-color: var(--at-rule-strong);
    background: var(--at-surface-2);
  }
  .at-strankovani__odkaz[aria-current='page'] {
    border-color: var(--at-accent-text);
    background: var(--at-accent-soft);
    color: var(--at-accent-text);
    font-weight: var(--at-font-weight-semibold);
  }
  .at-strankovani__odkaz[aria-disabled='true'] {
    color: var(--at-muted);
    cursor: not-allowed;
  }
  .at-strankovani__odkaz > .at-icon {
    inline-size: 1.1em;
    block-size: 1.1em;
  }
  .at-strankovani__vypustka {
    display: inline-flex;
    justify-content: center;
    min-inline-size: var(--at-space-6);
    color: var(--at-muted);
  }

  /* ---------- Filtry nad seznamem ----------
   * <div class="at-filtry" role="group" aria-labelledby="f-faze">
   *   <span class="at-filtry__nadpis" id="f-faze">Fáze</span>
   *   <button class="at-filtr" type="button" aria-pressed="true">
   *     <svg class="at-icon at-filtr__znacka" aria-hidden="true">…#i-hotovo</svg>Nabídka
   *     <span class="at-filtr__pocet">12<span class="at-sr-only"> případů</span></span></button> …
   * </div>
   * Filtr je jedno ze tří míst, kde smí být pilulka (stav, filtr, přepínač); tlačítko akce
   * pilulka není. Zapnutý filtr nese aria-pressed="true" a ukáže to i tvarem: značka
   * zaškrtnutí, zdvojený rám a řez 600 na ploše výběru. Počet je tabulárně a tlumeně. Cíl má
   * výšku ovladače dané hustoty. Tvar dává token --at-radius-chip (Dílna pilulku nemá).
   * Filtry ve skupině se zalamují. Víc skupin stojí pod sebou, každá .at-filtry na vlastním
   * řádku; „Zrušit filtry“ je .at-btn--quiet na konci poslední skupiny. */
  .at-filtry {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-2);
    min-inline-size: 0;
  }
  .at-filtry + .at-filtry {
    margin-block-start: var(--at-space-2);
  }
  .at-filtry__nadpis {
    margin-inline-end: var(--at-space-1);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-label);
  }
  .at-filtr {
    display: inline-flex;
    flex: none;
    align-items: center;
    gap: var(--at-space-1) var(--at-space-2);
    max-inline-size: 100%;
    min-block-size: var(--at-control-height);
    margin: 0;
    padding: 0 var(--at-space-4);
    border: var(--at-border-rule) solid var(--at-field-border);
    border-radius: var(--at-radius-chip);
    background: var(--at-surface-1);
    color: var(--at-ink);
    font-family: var(--at-font-ui);
    font-size: var(--at-font-size-table);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-tight);
    text-align: start;
    text-decoration: none;
    cursor: pointer;
    touch-action: manipulation;
  }
  .at-filtr:hover {
    background: var(--at-surface-2);
  }
  .at-filtr__znacka {
    display: none;
    inline-size: 1.1em;
    block-size: 1.1em;
    margin-inline-start: calc(var(--at-space-1) * -1);
  }
  .at-filtr__pocet {
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-regular);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-filtr[aria-pressed='true'] {
    border-color: var(--at-accent-text);
    background: var(--at-accent-soft);
    color: var(--at-accent-text);
    font-weight: var(--at-font-weight-semibold);
    box-shadow: inset 0 0 0 var(--at-border-rule) var(--at-accent-text);
  }
  .at-filtr[aria-pressed='true'] > .at-filtr__znacka {
    display: inline-block;
  }
  .at-filtr[aria-pressed='true'] > .at-filtr__pocet {
    color: inherit;
  }
  .at-filtr:is(:disabled, [aria-disabled='true']) {
    border-style: dashed;
    border-color: var(--at-rule-strong);
    background: transparent;
    color: var(--at-muted);
    cursor: not-allowed;
  }

  /* ---------- Štítek „Ukázková data“ ----------
   * Přerušovaný rámeček u každé vymyšlené ukázky: nejde o skutečný záznam. */
  .at-ukazka-data {
    display: inline-flex;
    align-items: center;
    gap: var(--at-space-1);
    padding: calc(var(--at-space-1) / 4) var(--at-space-2);
    border: var(--at-border-rule) dashed var(--at-rule-strong);
    border-radius: var(--at-radius-control);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-label);
    white-space: nowrap;
    vertical-align: middle;
  }

  /* ---------- Vynucené barvy ---------- */
  @media (forced-colors: active) {
    .at-strankovani__odkaz:not([aria-current='page']) {
      border-color: transparent;
      border-style: none;
    }
    .at-strankovani__odkaz[aria-current='page'] {
      border-width: calc(var(--at-border-rule) * 2);
    }
    .at-strankovani__odkaz[aria-disabled='true'] {
      color: GrayText;
    }
    .at-filtr[aria-pressed='true'] {
      border-width: calc(var(--at-border-rule) * 2);
      border-color: Highlight;
    }
    .at-filtr:is(:disabled, [aria-disabled='true']) {
      color: GrayText;
    }
  }
}

/* Atomys Design Language 2.0 — přehledy na úvodní obrazovce aplikace.
 *
 * .at-pozornost  „Vyžaduje pozornost“: nejvýš 5 výjimek, věta s číslem, termínem a osobou,
 *                jedna akce na řádek
 * .at-program    časová osa dne: řádek na zvedák nebo pracoviště se jménem mechanika, legenda
 *                stavů, čára „teď“, šrafovaný přesah; bloky obsah zalamují a rostou s hustotou
 * .at-agenda     rezervace po dnech, časy tabulárně (mujkalendar, mojerezervace)
 * .at-historie   auditní stopa: kdy, kdo a co se změnilo
 *
 * Všechny čtyři jsou samostatný list na ploše: rám, volitelné záhlaví __hlava (nadpis a
 * __meta), volitelná pata __pata a zpráva __zprava pro prázdný, načítaný a chybový stav.
 * Načítání se hlásí atributem aria-busy="true" na kořeni a větou s role="status", chyba
 * větou s role="alert". Rozvržení reaguje na šířku vlastního kontejneru (container
 * queries), takže funguje v úzkém sloupci i na mobilu.
 *
 * Rám, linka pod záhlavím a odsazení jdou ze stejných tokenů jako .at-panel (40-rozvrzeni.css),
 * takže přehled a panel vedle sebe vypadají stejně ve všech vzhledech.
 * Vzhledy se liší jen tokeny, pravidla pro jednotlivé vzhledy tu nejsou. Stavy mají všude
 * stejný pevný tón (slovník v 30-data.css): probíhá = info, čeká = warning, problém =
 * danger, hotovo = success, mimo běh (naplánováno, zrušeno) neutrálně. Akcent jen pro
 * samostatný odkaz, výběr a dnešek, nikdy pro stav. Čísla zakázek a dokladů uvnitř
 * přehledů jsou odkazy v inkoustu. Barevný pruh na začátku řádku mají jen výjimky
 * v .at-pozornost, nikde jinde. Písmo, výšky řádků a cíle jdou z tokenů hustoty, pevné
 * px tu nejsou.
 *
 * Veřejné proměnné (nastavuje je markup přes style=) mají předponu --at-program-, aby
 * se nesrazily s proměnnými projektu:
 *   .at-program             --at-program-od, --at-program-do   rozsah osy v hodinách (výchozí 7 a 18)
 *   .at-program__hodiny li  --at-program-hodina                poloha popisku hodiny
 *   .at-program__draha > li --at-program-zacatek, --at-program-konec
 *                           začátek a konec bloku v hodinách (10.5 = 10:30)
 *   .at-program__ted        --at-program-cas                   aktuální čas v hodinách (10.667 = 10:40)
 * Soukromé proměnné komponenty začínají --_ (--_stav, --_odsazeni, --_sirka-zdroje).
 */
@layer atomys.komponenty {
  /* ---------- Společný rám, záhlaví, pata a zprávy ----------
   * Stejné tokeny jako .at-panel v 40-rozvrzeni.css: rám --at-panel-border v barvě
   * --at-panel-border-color, linka pod záhlavím --at-panel-head-rule(-width), odsazení
   * --at-panel-padding. Tiskopis je souvislý papír (bez rámu, sekci ohraničí inkoustová linka
   * pod nadpisem), Dílna má rám ruleStrong a zdvojenou linku, Atomys rám, zaoblení a větší
   * odsazení. */

  .at-pozornost,
  .at-program,
  .at-agenda,
  .at-historie {
    --_odsazeni: var(--at-panel-padding);
    margin: 0;
    color: var(--at-ink);
    background: var(--at-surface-1);
    border: var(--at-panel-border) solid var(--at-panel-border-color);
    border-radius: var(--at-radius-surface);
  }
  .at-pozornost {
    container: at-pozornost / inline-size;
  }
  .at-program {
    container: at-program / inline-size;
  }
  .at-agenda {
    container: at-agenda / inline-size;
  }
  .at-historie {
    container: at-historie / inline-size;
  }
  :is(.at-pozornost, .at-program, .at-agenda, .at-historie)[aria-busy='true'] {
    cursor: progress;
  }

  .at-pozornost__hlava,
  .at-program__hlava,
  .at-agenda__hlava,
  .at-historie__hlava {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--at-space-1) var(--at-space-4);
    padding: max(var(--at-space-3), calc(var(--at-panel-padding) * 0.75)) var(--_odsazeni);
    border-block-end: var(--at-panel-head-rule-width) solid var(--at-panel-head-rule);
  }
  :is(.at-pozornost__hlava, .at-program__hlava, .at-agenda__hlava, .at-historie__hlava) > :is(h2, h3) {
    margin: 0;
    font-size: var(--at-font-size-h3);
  }

  .at-pozornost__meta,
  .at-program__meta,
  .at-agenda__meta,
  .at-historie__meta {
    margin: 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-variant-numeric: tabular-nums lining-nums;
  }

  .at-pozornost__pata,
  .at-program__pata,
  .at-agenda__pata,
  .at-historie__pata {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--at-space-2) var(--at-space-4);
    margin: 0;
    padding: var(--at-space-3) var(--_odsazeni);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    border-block-start: var(--at-border-rule) solid var(--at-rule);
  }

  /* Prázdný, načítaný a chybový stav: jedna věta s ikonou a případně s akcí, nikdy
   * „vše v pořádku“ přes půl obrazovky. Ikona nese tvar, věta význam. */
  .at-pozornost__zprava,
  .at-program__zprava,
  .at-agenda__zprava,
  .at-historie__zprava {
    --_stav: var(--at-muted);
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-2) var(--at-space-3);
    margin: 0;
    padding: var(--at-space-3) var(--_odsazeni);
    color: var(--at-ink-soft);
  }
  :is(.at-pozornost__zprava, .at-program__zprava, .at-agenda__zprava, .at-historie__zprava) > .at-icon {
    flex: none;
    inline-size: 1.25em;
    block-size: 1.25em;
    fill: currentColor;
    color: var(--_stav);
  }
  /* Věta vyplní řádek, akce (tlačítko, odkaz) stojí vpravo, v úzkém sloupci pod větou. */
  :is(.at-pozornost__zprava, .at-program__zprava, .at-agenda__zprava, .at-historie__zprava) > span {
    flex: 1 1 calc(var(--at-space-16) * 4);
    min-inline-size: 0;
  }
  .at-pozornost__zprava--uspech,
  .at-program__zprava--uspech,
  .at-agenda__zprava--uspech,
  .at-historie__zprava--uspech {
    --_stav: var(--at-success);
  }
  .at-pozornost__zprava--chyba,
  .at-program__zprava--chyba,
  .at-agenda__zprava--chyba,
  .at-historie__zprava--chyba {
    --_stav: var(--at-danger);
    color: var(--at-ink);
  }

  /* ---------- Vyžaduje pozornost ----------
   * <section class="at-pozornost" aria-labelledby="pozornost">
   *   <header class="at-pozornost__hlava"><h2 id="pozornost">Vyžaduje pozornost</h2>
   *     <p class="at-pozornost__meta">3 položky, stav v 10:40</p></header>
   *   <ul class="at-pozornost__seznam">
   *     <li class="at-pozornost__polozka at-pozornost__polozka--chyba">
   *       <svg class="at-icon at-pozornost__ikona" aria-hidden="true">…#i-chyba</svg>
   *       <div class="at-pozornost__text">
   *         <h3 class="at-pozornost__nadpis"><span class="at-sr-only">Závažné: </span>…</h3>
   *         <p class="at-pozornost__popis">…</p></div>
   *       <div class="at-pozornost__akce">jedno tlačítko</div></li></ul></section>
   * Závažnost: --chyba (danger), --varovani (warning), --info (info).
   * Obsah: nejvýš 5 položek (další výjimky patří do seznamu, na který odkazuje pata). Každá
   * je věta s číslem, termínem a osobou („Předání 6BL 2294 dnes v 16:00 nestihneme,
   * P. Novotný“) a má jednu akci, která výjimku řeší. Korektury, potvrzení, navigace ani
   * řádky tabulky barevný pruh nemají. */

  .at-pozornost__seznam {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  /* Pruh stavu na začátku výjimky: jediné místo v systému, kde je barevný levý pruh.
   * Tloušťka --at-bar-edge je stejná jako hrana lišty. */
  .at-pozornost__polozka {
    --_stav: var(--at-info);
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    gap: var(--at-space-2) var(--at-space-3);
    align-items: start;
    padding: var(--at-space-3) var(--_odsazeni) var(--at-space-3) var(--at-space-3);
    border-inline-start: var(--at-bar-edge) solid var(--_stav);
  }
  .at-pozornost__polozka + .at-pozornost__polozka {
    border-block-start: var(--at-border-rule) solid var(--at-rule);
  }
  .at-pozornost__polozka--chyba {
    --_stav: var(--at-danger);
  }
  .at-pozornost__polozka--varovani {
    --_stav: var(--at-warning);
  }
  .at-pozornost__polozka--info {
    --_stav: var(--at-info);
  }
  .at-pozornost__ikona {
    flex: none;
    inline-size: 1.25em;
    block-size: 1.25em;
    margin-block-start: 0.125em;
    fill: currentColor;
    color: var(--_stav);
  }
  .at-pozornost__text {
    min-inline-size: 0;
  }
  .at-pozornost__nadpis {
    margin: 0;
    font-size: max(var(--at-font-size-h4), var(--at-font-size-text));
    font-weight: var(--at-font-weight-semibold);
    line-height: var(--at-line-height-heading);
    font-variant-numeric: tabular-nums lining-nums;
    text-wrap: pretty;
  }
  .at-pozornost__doplnek {
    color: var(--at-ink-soft);
    font-weight: var(--at-font-weight-regular);
  }
  .at-pozornost__popis {
    max-inline-size: var(--at-layout-text-max);
    margin: var(--at-space-1) 0 0;
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-body);
    font-variant-numeric: tabular-nums lining-nums;
  }
  /* Číslo zakázky nebo dokladu v popisu: odkaz v inkoustu, akcent by splýval s pruhem. Cíl
   * roste s hustotou (neviditelná plocha výšky ovladače na střed odkazu). */
  .at-pozornost__popis a:any-link {
    position: relative;
    color: var(--at-ink);
    text-decoration-color: currentColor;
  }
  .at-pozornost__popis a:any-link::after {
    content: '';
    position: absolute;
    inset: 50% auto auto 50%;
    inline-size: max(100%, var(--at-control-height));
    block-size: max(100%, var(--at-control-height));
    translate: -50% -50%;
  }
  .at-pozornost__akce {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    align-self: center;
    justify-content: flex-end;
    gap: var(--at-space-2);
  }
  /* Úzký sloupec a mobil: akce pod textem, zarovnané s textem. */
  @container at-pozornost (inline-size < 44rem) {
    .at-pozornost__akce {
      grid-column: 2;
      align-self: start;
      justify-content: flex-start;
    }
  }

  /* ---------- Časová osa dne (program zdrojů) ----------
   * <section class="at-program" style="--at-program-od: 7; --at-program-do: 18">
   *   <header class="at-program__hlava"><h3>…</h3>
   *     <ul class="at-program__legenda" aria-label="Legenda stavů">
   *       <li><span class="at-program__vzor at-program__vzor--probiha"></span>Probíhá</li>…</ul>
   *     <p class="at-program__meta">…</p></header>
   *   <div class="at-program__plocha">
   *     <ol class="at-program__hodiny" aria-hidden="true"><li style="--at-program-hodina: 7">7:00</li>…</ol>
   *     <p class="at-program__ted" style="--at-program-cas: 10.667">
   *       <span class="at-program__ted-stitek">teď 10:40</span></p>
   *     <ul class="at-program__radky">
   *       <li class="at-program__radek">
   *         <p class="at-program__zdroj" id="z1">Zvedák 1
   *           <span class="at-program__podnazev">M. Kučera</span></p>
   *         <ul class="at-program__draha" aria-labelledby="z1">
   *           <li style="--at-program-zacatek: 7.5; --at-program-konec: 10.25">
   *             <a class="at-program__blok at-program__blok--hotovo" href="…">
   *               <span class="at-program__cas">7:30–10:15<span class="at-sr-only">, </span></span>
   *               <span class="at-program__titulek"><svg class="at-icon at-program__ikona" …>
   *                 Z-2026-0410<span class="at-program__stav">, hotovo</span></span>
   *               <span class="at-program__popis">Hyundai i30 1AB 2345, prohlídka</span></a></li>
   *         </ul></li></ul>
   *   </div></section>
   * Jedna vodorovná komponenta pro všechny vzhledy: řádek je zvedák nebo pracoviště se jménem
   * mechanika, bloky stojí podle času. Bloky jednoho řádku sdílejí jednu buňku mřížky,
   * vodorovně je posune okraj v procentech, takže řádek roste s nejvyšším blokem. Text
   * bloku se zalamuje, nic se neořezává výpustkou ani v hustotě Dílna nebo Dotyk.
   * Stav bloku (pevné tóny ze slovníku v 30-data.css): bez modifikátoru naplánováno
   * (neutrální), --probiha (info), --ceka (warning), --presah (danger se šrafou), --hotovo
   * (success, ustupuje), --volno (neutrální, čárkovaný). Akcent stav nenese.
   * Vybraný blok (otevřený v detailu) má aria-current="true". Čas bloku je v textu odkazu;
   * na široké ose ho čte jen čtečka, v úzkém sloupci se zobrazí. Čára „teď“ stojí v kódu
   * před řádky, v úzkém sloupci je tak její štítek nad seznamem. */

  .at-program {
    --at-program-od: 7;
    --at-program-do: 18;
    /* Sloupec se jménem zdroje a výška popisků hodin rostou s hustotou (písmo small). */
    --_sirka-zdroje: calc(var(--at-font-size-small) * 8.5);
    --_vyska-popisku: calc(var(--at-font-size-small) * var(--at-line-height-body) + var(--at-space-2));
  }

  .at-program__legenda {
    display: flex;
    flex-wrap: wrap;
    gap: var(--at-space-1) var(--at-space-4);
    margin: 0;
    padding: var(--at-space-2) var(--_odsazeni) 0;
    list-style: none;
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    font-stretch: var(--at-stretch-label);
  }
  .at-program__hlava > .at-program__legenda {
    margin-inline-end: auto;
    padding: 0;
  }
  .at-program__legenda > li {
    display: inline-flex;
    align-items: center;
    gap: var(--at-space-2);
  }
  /* Vzorek stavu v legendě roste s písmem hustoty. */
  .at-program__vzor {
    flex: none;
    inline-size: 1.6em;
    block-size: 0.9em;
    background: var(--at-surface-1);
    border: var(--at-border-rule) solid var(--at-rule-strong);
    border-radius: var(--at-radius-control);
  }

  /* Plocha osy: popisky hodin nahoře, svislé linky hodin přes všechny dráhy, čára „teď“
   * s popiskem pod poslední dráhou, aby nezakryla popisky hodin. */
  .at-program__plocha {
    position: relative;
    margin-inline: var(--_odsazeni);
    padding-block: var(--_vyska-popisku) calc(var(--_vyska-popisku) + var(--at-space-1));
  }
  .at-program__hodiny {
    position: absolute;
    z-index: 0;
    inset-block: 0 calc(var(--_vyska-popisku) + var(--at-space-1));
    inset-inline: var(--_sirka-zdroje) 0;
    margin: 0;
    padding: 0;
    list-style: none;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
    line-height: var(--at-line-height-body);
  }
  /* Popisek hodiny je nulově široká kotva na čase a text stojí nad ní na střed. První
   * a poslední popisek míří dovnitř osy, aby nepřetékaly přes okraj listu. */
  .at-program__hodiny > li {
    position: absolute;
    inset-block: 0;
    inset-inline-start: calc((var(--at-program-hodina) - var(--at-program-od)) / (var(--at-program-do) - var(--at-program-od)) * 100%);
    display: flex;
    justify-content: center;
    inline-size: 0;
    padding-block-start: var(--at-space-1);
    white-space: nowrap;
  }
  .at-program__hodiny > li:first-child {
    justify-content: flex-start;
  }
  .at-program__hodiny > li:last-child {
    justify-content: flex-end;
  }
  .at-program__hodiny > li::after {
    content: '';
    position: absolute;
    inset-block: var(--_vyska-popisku) 0;
    inset-inline-start: 0;
    border-inline-start: var(--at-border-rule) solid var(--at-rule);
  }

  /* Vrstvy: linky hodin (0), čára „teď“ (1), bloky s neprůhlednou plochou (2) nad ní. Čára je
   * vidět v mezerách mezi bloky, na ose a štítkem pod drahami; text bloku nikdy nepřeškrtne.
   * Fokus zvedne celý blok nad sousední (4). */
  .at-program__radky {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .at-program__radek {
    display: grid;
    grid-template-columns: var(--_sirka-zdroje) minmax(0, 1fr);
    min-block-size: calc(var(--at-control-height) + var(--at-space-2));
    border-block-start: var(--at-border-rule) solid var(--at-rule);
  }
  .at-program__radek:last-child {
    border-block-end: var(--at-border-rule) solid var(--at-rule);
  }
  .at-program__zdroj {
    align-self: center;
    min-inline-size: 0;
    margin: 0;
    padding-block: var(--at-space-1);
    padding-inline-end: var(--at-space-3);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    line-height: var(--at-line-height-heading);
    overflow-wrap: break-word;
  }
  .at-program__podnazev {
    display: block;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-regular);
  }
  /* Dráha je mřížka s jedinou buňkou. Bloky řádku v ní leží přes sebe a vodorovně je
   * posune okraj a šířka v procentech buňky; výška řádku je výška nejvyššího bloku. */
  .at-program__draha {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    margin: 0;
    padding: var(--at-space-1) 0;
    list-style: none;
  }
  .at-program__draha > li {
    display: grid;
    grid-area: 1 / 1;
    inline-size: calc((var(--at-program-konec) - var(--at-program-zacatek)) / (var(--at-program-do) - var(--at-program-od)) * 100%);
    min-inline-size: var(--at-space-6);
    margin-inline-start: calc((var(--at-program-zacatek) - var(--at-program-od)) / (var(--at-program-do) - var(--at-program-od)) * 100%);
    padding-inline: var(--at-border-rule);
  }
  .at-program__draha > li:focus-within {
    z-index: 4;
  }

  /* Blok je cíl odkazu: výška nejméně --at-control-height (v hustotě Dotyk 52 px). Text se
   * zalamuje, v krátkém bloku se slovo dělí (podle lang="cs", kde to prohlížeč umí) a jako
   * poslední možnost láme i uvnitř čísla zakázky; nic se neořezává. */
  .at-program__blok {
    --_stav: var(--at-muted);
    position: relative;
    z-index: 2;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    min-inline-size: 0;
    min-block-size: var(--at-control-height);
    padding: var(--at-space-1) clamp(var(--at-space-1) / 2, 4%, var(--at-space-2));
    color: var(--at-ink);
    background: var(--at-surface-1);
    border: var(--at-border-rule) solid var(--at-rule-strong);
    border-radius: var(--at-radius-control);
    font-size: var(--at-font-size-small);
    font-stretch: var(--at-stretch-label);
    line-height: var(--at-line-height-heading);
    font-variant-numeric: tabular-nums lining-nums;
    text-decoration: none;
    overflow-wrap: anywhere;
    hyphens: auto;
  }
  .at-program__blok:any-link:hover {
    border-color: var(--at-ink);
  }
  .at-program__blok:any-link:hover .at-program__titulek {
    text-decoration-line: underline;
    text-decoration-thickness: var(--at-border-rule);
    text-underline-offset: 0.2em;
  }
  /* Vybraný blok: silnější rám v barvě textu. Stín se nepoužívá, patří fokusu. */
  .at-program__blok[aria-current='true'] {
    border-color: var(--at-ink);
    border-width: calc(var(--at-border-rule) * 2);
  }
  .at-program__titulek,
  .at-program__popis {
    max-inline-size: 100%;
  }
  .at-program__titulek {
    font-weight: var(--at-font-weight-semibold);
  }
  .at-program__stav {
    color: var(--at-ink-soft);
    font-weight: var(--at-font-weight-regular);
  }
  .at-program__popis {
    color: var(--at-ink-soft);
  }
  .at-program__ikona {
    inline-size: 1.15em;
    block-size: 1.15em;
    margin-inline-end: var(--at-space-1);
    vertical-align: -0.2em;
    fill: currentColor;
    color: var(--_stav);
  }
  /* Čas bloku: na ose ho vyjadřuje poloha, text je pro čtečku; v úzkém sloupci je vidět. */
  .at-program__cas {
    position: absolute;
    inline-size: 1px;
    block-size: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
  }

  /* Stavy bloku. Stav je vždy i slovem v titulku a ikonou, barva ho jen podtrhuje. */
  .at-program__blok--probiha,
  .at-program__vzor--probiha {
    --_stav: var(--at-info);
    background: var(--at-info-soft);
    border-color: var(--at-info);
  }
  /* Hotová práce ustupuje: bez výplně, světlá linka, tlumený text. Plochu má jen probíhající. */
  .at-program__blok--hotovo,
  .at-program__vzor--hotovo {
    --_stav: var(--at-success);
    color: var(--at-ink-soft);
    background: var(--at-surface-1);
    border-color: var(--at-rule);
  }
  .at-program__blok--ceka,
  .at-program__vzor--ceka {
    --_stav: var(--at-warning);
    background: var(--at-warning-soft);
    border-color: var(--at-warning);
    border-style: dashed;
  }
  /* Přesah přes slíbený čas: funkční šrafa v barvě danger odliší čas navíc od plánované
   * práce. Text stojí na ploše surface-1, aby šrafa nesnížila kontrast písma. */
  .at-program__blok--presah,
  .at-program__vzor--presah {
    --_stav: var(--at-danger);
    background: repeating-linear-gradient(
      -45deg,
      color-mix(in srgb, var(--at-danger) 32%, var(--at-surface-1)) 0 var(--at-space-1),
      var(--at-surface-1) 0 var(--at-space-2)
    );
    border-color: var(--at-danger);
  }
  .at-program__blok--presah :is(.at-program__titulek, .at-program__popis) {
    margin-inline: calc(var(--at-space-1) / -2);
    padding-inline: calc(var(--at-space-1) / 2);
    background-color: var(--at-surface-1);
  }
  .at-program__blok--volno,
  .at-program__vzor--volno {
    --_stav: var(--at-muted);
    color: var(--at-ink-soft);
    border-style: dashed;
  }

  /* Čára „teď“ přes všechny dráhy pod bloky, popisek pod nimi. */
  .at-program__ted {
    position: absolute;
    z-index: 1;
    inset-block: var(--_vyska-popisku) var(--at-space-1);
    inset-inline-start: calc(
      var(--_sirka-zdroje) + (100% - var(--_sirka-zdroje)) * (var(--at-program-cas) - var(--at-program-od)) / (var(--at-program-do) - var(--at-program-od))
    );
    margin: 0 0 0 calc(var(--at-border-rule) * -1);
    border-inline-start: calc(var(--at-border-rule) * 2) solid var(--at-ink);
    pointer-events: none;
  }
  .at-program__ted-stitek {
    position: absolute;
    inset-block-end: 0;
    inset-inline-start: 0;
    translate: -50% 0;
    padding: 0 var(--at-space-1);
    color: var(--at-surface-1);
    background: var(--at-ink);
    border-radius: var(--at-radius-control);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    font-variant-numeric: tabular-nums lining-nums;
    line-height: var(--at-line-height-body);
    white-space: nowrap;
  }

  /* Úzký sloupec a mobil (osa užší než 48 rem, asi 760 px): dráhy pod sebou, bloky jako
   * seznam s viditelným časem. Na užší ose by hodina měřila méně než 3,5 em a text bloků
   * by se lámal po písmenech. */
  @container at-program (inline-size < 48rem) {
    .at-program__plocha {
      padding-block: var(--at-space-2) var(--at-space-3);
    }
    .at-program__hodiny {
      display: none;
    }
    .at-program__ted {
      position: static;
      margin: 0 0 var(--at-space-2);
      border: 0;
    }
    .at-program__ted-stitek {
      position: static;
      translate: none;
    }
    .at-program__radek {
      display: block;
      padding-block: var(--at-space-2);
    }
    .at-program__zdroj {
      padding-block: 0 var(--at-space-2);
    }
    .at-program__podnazev {
      display: inline;
      margin-inline-start: var(--at-space-2);
    }
    .at-program__draha {
      gap: var(--at-space-1);
      padding: 0;
    }
    .at-program__draha > li {
      grid-area: auto;
      inline-size: auto;
      min-inline-size: 0;
      margin: 0;
      padding: 0;
    }
    .at-program__cas {
      position: static;
      inline-size: auto;
      block-size: auto;
      overflow: visible;
      clip-path: none;
      color: var(--at-ink-soft);
    }
  }

  /* ---------- Agenda rezervací ----------
   * <section class="at-agenda">
   *   <ol class="at-agenda__dny">
   *     <li class="at-agenda__den" aria-current="date">
   *       <h3 class="at-agenda__datum"><time datetime="2026-09-25">Pá 25. 9.</time>
   *         <span class="at-agenda__relativne">dnes</span></h3>
   *       <ol class="at-agenda__polozky">
   *         <li class="at-agenda__polozka" aria-current="time">
   *           <p class="at-agenda__cas"><time datetime="2026-09-25T10:30">10:30</time>
   *             <span class="at-agenda__konec">do 11:15</span></p>
   *           <div class="at-agenda__obsah"><a class="at-agenda__nazev" href="…">…</a>
   *             <span class="at-agenda__detail">…</span></div>
   *           <p class="at-agenda__stav at-agenda__stav--potvrzeno">…</p></li></ol></li></ol>
   * Dnešní den aria-current="date", právě probíhající rezervace aria-current="time".
   * Položka: --probehla, --zrusena, --volno. Stav (pevné tóny ze slovníku): --potvrzeno
 * (success), --ceka (warning), --zruseno (neutrální, zrušení není chyba).
   * Celý řádek je cílem odkazu __nazev (roztažený odkaz), výška řádku podle hustoty. */

  .at-agenda {
    --_sirka-dne: calc(var(--at-space-16) + var(--at-space-8));
    --_sirka-casu: calc(var(--at-space-12) + var(--at-space-3));
  }
  .at-agenda__dny {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .at-agenda__den {
    display: grid;
    grid-template-columns: var(--_sirka-dne) minmax(0, 1fr);
    column-gap: var(--at-space-3);
    padding-inline: var(--_odsazeni);
  }
  .at-agenda__den + .at-agenda__den {
    border-block-start: var(--at-border-rule) solid var(--at-rule-strong);
  }
  .at-agenda__datum {
    margin: 0;
    padding-block: var(--at-space-3);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
    line-height: var(--at-line-height-heading);
    letter-spacing: 0;
  }
  .at-agenda__relativne {
    display: block;
    margin-block-start: var(--at-space-1);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-regular);
  }
  .at-agenda__den[aria-current='date'] .at-agenda__datum,
  .at-agenda__den[aria-current='date'] .at-agenda__relativne {
    color: var(--at-accent-text);
  }
  .at-agenda__den > .at-agenda__zprava {
    padding-inline: 0;
  }

  .at-agenda__polozky {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .at-agenda__polozka {
    --_stav: var(--at-muted);
    position: relative;
    display: grid;
    grid-template-columns: var(--_sirka-casu) minmax(0, 1fr) auto;
    column-gap: var(--at-space-3);
    align-items: baseline;
    min-block-size: var(--at-row-height);
    padding-block: var(--at-space-2);
  }
  .at-agenda__polozka + .at-agenda__polozka {
    border-block-start: var(--at-border-rule) solid var(--at-rule);
  }
  .at-agenda__cas {
    margin: 0;
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
    line-height: var(--at-line-height-heading);
    text-align: end;
    white-space: nowrap;
  }
  .at-agenda__konec {
    display: block;
    margin-block-start: var(--at-space-1);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-regular);
  }
  .at-agenda__obsah {
    min-inline-size: 0;
    line-height: var(--at-line-height-heading);
  }
  .at-agenda__nazev {
    color: var(--at-ink);
    font-weight: var(--at-font-weight-medium);
    text-decoration-line: underline;
    text-decoration-color: var(--at-rule-strong);
  }
  .at-agenda__nazev:any-link:hover {
    text-decoration-color: currentColor;
  }
  /* Roztažený odkaz: celý řádek je cíl kliknutí i dotyku. */
  .at-agenda__nazev:any-link::after {
    content: '';
    position: absolute;
    inset: 0;
  }
  .at-agenda__detail {
    display: block;
    margin-block-start: var(--at-space-1);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    font-variant-numeric: tabular-nums lining-nums;
  }
  /* Štítek stavu má podobu .at-stav (30-data.css), včetně raženého obrysu v Dílně. */
  .at-agenda__stav {
    display: inline-flex;
    align-items: center;
    gap: var(--at-space-1);
    margin: 0;
    padding: var(--at-stav-border-width) var(--at-stav-padding-inline);
    border: var(--at-stav-border-width) solid currentColor;
    border-radius: var(--at-radius-control);
    color: var(--_stav);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-stav-weight);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-table);
    white-space: nowrap;
  }
  .at-agenda__stav > .at-icon {
    flex: none;
    inline-size: 1.15em;
    block-size: 1.15em;
    fill: currentColor;
  }
  .at-agenda__stav--potvrzeno {
    --_stav: var(--at-success);
  }
  .at-agenda__stav--ceka {
    --_stav: var(--at-warning);
  }
  .at-agenda__stav--zruseno {
    --_stav: var(--at-ink-soft);
  }
  /* Akce uvnitř řádku (například „Nabídnout termín“) leží nad roztaženým odkazem. */
  .at-agenda__akce {
    position: relative;
    z-index: 1;
  }

  /* Právě probíhající rezervace: štítek „teď“ jako čára na ose programu. */
  .at-agenda__ted {
    display: block;
    inline-size: fit-content;
    margin-block-start: var(--at-space-1);
    margin-inline-start: auto;
    padding: 0 var(--at-space-1);
    color: var(--at-surface-1);
    background: var(--at-ink);
    border-radius: var(--at-radius-control);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    line-height: var(--at-line-height-body);
  }
  .at-agenda__polozka--probehla :is(.at-agenda__cas, .at-agenda__nazev) {
    color: var(--at-muted);
  }
  .at-agenda__polozka--zrusena .at-agenda__nazev {
    color: var(--at-muted);
    text-decoration-line: line-through;
    text-decoration-color: currentColor;
  }
  .at-agenda__polozka--volno :is(.at-agenda__cas, .at-agenda__obsah) {
    color: var(--at-ink-soft);
    font-weight: var(--at-font-weight-regular);
  }

  @container at-agenda (inline-size < 34rem) {
    .at-agenda__den {
      display: block;
    }
    .at-agenda__datum {
      padding-block: var(--at-space-3) var(--at-space-1);
    }
    .at-agenda__relativne {
      display: inline;
      margin: 0 0 0 var(--at-space-2);
    }
    .at-agenda__polozka {
      grid-template-columns: var(--_sirka-casu) minmax(0, 1fr);
      row-gap: var(--at-space-1);
    }
    .at-agenda__stav {
      grid-column: 2;
    }
  }

  /* ---------- Historie událostí (auditní stopa) ----------
   * <section class="at-historie">
   *   <ol class="at-historie__seznam">
   *     <li class="at-historie__udalost" id="u-1042">
   *       <p class="at-historie__cas"><time datetime="2026-09-25T10:32">25. 9. 2026 10:32</time></p>
   *       <p class="at-historie__kdo">Petr Novotný</p>
   *       <p class="at-historie__co"><svg class="at-icon at-historie__ikona" …>
   *         Změnil stav z <del>V opravě</del> na <ins>Čeká na díl</ins>
   *         <span class="at-historie__detail">…</span></p></li></ol></section>
   * Událost: --chyba (nezdar akce). Automatická událost: __kdo--system.
   * Vybraná událost (odkaz s #id nebo aria-current="true") má zvýrazněný řádek. */

  .at-historie__seznam {
    display: grid;
    grid-template-columns: max-content fit-content(var(--at-layout-sidebar)) minmax(0, 1fr);
    column-gap: var(--at-space-4);
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .at-historie__udalost {
    --_stav: var(--at-muted);
    display: grid;
    grid-column: 1 / -1;
    grid-template-columns: subgrid;
    align-items: baseline;
    padding: var(--at-space-2) var(--_odsazeni);
    scroll-margin-block: var(--at-space-8);
  }
  .at-historie__udalost + .at-historie__udalost {
    border-block-start: var(--at-border-rule) solid var(--at-rule);
  }
  .at-historie__udalost--chyba {
    --_stav: var(--at-danger);
  }
  /* Vybraná událost: plocha a rám v akcentu (výběr), bez levého pruhu. Rám stojí vně
   * řádku, aby v Tiskopisu (řádek bez vodorovného odsazení) nepřekryl datum. */
  .at-historie__udalost:is(:target, [aria-current='true']) {
    background: var(--at-accent-soft);
    outline: calc(var(--at-border-rule) * 2) solid var(--at-accent-text);
    outline-offset: 0;
  }
  .at-historie__cas,
  .at-historie__kdo,
  .at-historie__co {
    margin: 0;
  }
  .at-historie__cas {
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
    white-space: nowrap;
  }
  .at-historie__kdo {
    min-inline-size: 0;
    font-weight: var(--at-font-weight-medium);
    overflow-wrap: anywhere;
  }
  .at-historie__kdo--system {
    color: var(--at-muted);
    font-weight: var(--at-font-weight-regular);
  }
  .at-historie__co {
    min-inline-size: 0;
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-historie__ikona {
    inline-size: 1.15em;
    block-size: 1.15em;
    margin-inline-end: var(--at-space-2);
    vertical-align: -0.2em;
    fill: currentColor;
    color: var(--_stav);
  }
  .at-historie__co del {
    color: var(--at-muted);
    text-decoration-line: line-through;
  }
  .at-historie__co ins {
    font-weight: var(--at-font-weight-semibold);
    text-decoration: none;
  }
  .at-historie__detail {
    display: block;
    margin-block-start: var(--at-space-1);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }

  @container at-historie (inline-size < 36rem) {
    .at-historie__seznam {
      display: block;
    }
    .at-historie__udalost {
      grid-template-columns: auto minmax(0, 1fr);
      column-gap: var(--at-space-3);
      row-gap: var(--at-space-1);
    }
    .at-historie__co {
      grid-column: 1 / -1;
    }
  }

  /* ---------- Vysoký kontrast ---------- */
  @media (forced-colors: active) {
    .at-program__ted-stitek,
    .at-agenda__ted {
      border: var(--at-border-rule) solid currentColor;
    }
    .at-program__blok[aria-current='true'] {
      border-style: double;
      border-width: calc(var(--at-border-rule) * 3);
    }
  }
}

/* Atomys Design Language — rozvržení aplikace: kostra .at-app, horní lišta .at-bar, postranní
 * navigace .at-nav, hlavička stránky .at-hlavicka, bloky obsahu .at-bloky, panel .at-panel,
 * inspektor .at-inspektor, záložky .at-zalozky, dialog .at-dialog, oznámení .at-oznameni,
 * pruh prostředí .at-prostredi a drobečková navigace .at-drobky. Odkaz pro přeskočení
 * (.at-skip-link) je v základu.
 *
 * Používá jen tokeny --at-*. Vzhled, motiv a hustotu mění tokeny; rytmus panelů tokeny tvaru
 * --at-panel-border, --at-panel-padding a --at-panel-gap, konstrukci vzhledu tokeny
 * konstrukce (plocha obsahu a navigace, linky pod záhlavím panelu a dialogu, ikony navigace,
 * vyznačení aktivní položky). Pravidla pro jednotlivé vzhledy tu nejsou.
 * Stavy se čtou z ARIA a nativních atributů: aria-current, aria-selected, aria-expanded,
 * aria-disabled, aria-busy, [hidden], [open], :disabled.
 *
 * Identita vzhledů v kostře: Tiskopis je souvislý papír (obsah na surface1, sekce oddělují
 * linky, panel nemá rámeček ani odsazení, navigace je textový rejstřík bez ikon). Dílna klade
 * panely s rámem ruleStrong na ocelové plátno pod tmavou raženou lištu, navigace je ocelový
 * sloupec s ikonami. Atomys klade samostatné panely se zaoblením a větším odsazením na
 * modrošedé plátno; lišta i navigace stojí na plátně, navigace bez ikon a aktivní položka má
 * řez a linku pod textem místo plochy.
 *
 * Závisí na .at-icon, .at-btn a .at-menu z 10-ovladani.css a na .at-sr-only a .at-skip-link
 * ze základu. Ikony v komponentách dostávají velikost podle místa, kde stojí. Prázdný,
 * chybový a načítaný obsah panelu kreslí .at-prazdny z 30-data.css (panel nese aria-busy).
 *
 * Kostra (všechny části kromě lišty a obsahu jsou volitelné):
 *   <a class="at-skip-link" href="#obsah">Přeskočit na obsah</a>
 *   <div class="at-app">
 *     <p class="at-prostredi at-prostredi--staging">…</p>
 *     <header class="at-bar">
 *       <button class="at-btn at-bar__menu" aria-expanded="false" aria-controls="navigace">…Nabídka</button>
 *       <a class="at-bar__produkt" href="/">mujautoservis<span class="at-bar__domena">.eu</span></a>
 *       <span class="at-bar__oblast">Zakázky</span>
 *       <div class="at-bar__akce"><a class="at-btn" href="/napoveda">…Nápověda</a>
 *         <div class="at-menu-anchor">
 *           <button class="at-bar__uzivatel" type="button" aria-expanded="false" aria-controls="ucet">
 *             <svg class="at-icon">…</svg><span class="at-bar__jmeno">Martin Brázda</span>
 *             <span class="at-bar__organizace">Autoservis Brázda s.r.o.</span></button>
 *           <div class="at-menu at-menu--end" id="ucet" aria-label="Účet" hidden>odkazy…</div></div></div>
 *       <form class="at-bar__hledat" role="search"><svg class="at-icon">…</svg>
 *         <label class="at-sr-only" for="hledat">Hledat</label>
 *         <input class="at-bar__pole" id="hledat" type="search"></form>
 *     </header>
 *     <nav class="at-nav" id="navigace" aria-label="Hlavní navigace">…</nav>
 *     <main class="at-app__obsah" id="obsah" tabindex="-1">…</main>
 *     <aside class="at-inspektor" aria-labelledby="…" hidden>…</aside>
 *   </div>
 *
 * Lišta nemá čip klávesové zkratky ani kulatý avatar: uživatel je jménem a organizací a pod
 * ním je jediná nabídka účtu, seznam odkazů bez role menu. Zkratky (například „/“ pro
 * hledání) uvádí Nápověda. Hledání stojí v DOM za akcemi: na telefonu je na vlastním řádku
 * pod nimi a pořadí fokusu odpovídá pořadí řádků; na širší liště ho vlastnost order vrátí
 * mezi název oblasti a akce.
 *
 * Šířky: od 1 100 px je navigace sloupec, pod 1 100 px se otevírá pojmenovaným tlačítkem
 * Nabídka (.at-bar__menu, aria-expanded="true") jako vrstva pod lištou a hledání jde na
 * vlastní řádek lišty. Inspektor je od 1 280 px sloupec, pod 1 280 px vrstva u pravého okraje.
 * Skrytý inspektor má atribut hidden a sloupec pak nezabírá. Bloky obsahu (.at-bloky) jdou pod
 * sebe, jakmile je obsah užší než asi 760 px.
 *
 * Chování Nabídky a nabídky účtu (fokus na první odkaz navigace, Esc s návratem fokusu,
 * zavření kliknutím mimo a odchodem fokusu) dodává dist/ovladani.js, který na <html> nastaví
 * data-at-ovladani. Bez skriptu je navigace pod 1 100 px běžný blok pod lištou a tlačítko
 * Nabídka se nekreslí, takže navigace zůstane dosažitelná i bez JavaScriptu.
 */
@layer atomys.komponenty {
  /* ---------- Aplikační kostra ---------- */

  .at-app {
    position: relative;
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    grid-template-rows: auto auto 1fr;
    grid-template-areas:
      'prostredi prostredi prostredi'
      'bar bar bar'
      'nav obsah inspektor';
    min-block-size: 100dvh;
    background: var(--at-canvas);
  }
  .at-app > .at-prostredi {
    grid-area: prostredi;
  }
  .at-app > .at-bar {
    grid-area: bar;
  }
  /* Obsah. Plocha je v Tiskopisu papír (surface1), v Dílně a Atomysu plátno, na kterém stojí
     panely (token --at-content-surface). */
  .at-app__obsah {
    grid-area: obsah;
    min-inline-size: 0;
    padding: var(--at-space-4) var(--at-space-4) var(--at-space-10);
    background: var(--at-content-surface);
  }

  .at-app > .at-nav {
    grid-area: nav;
  }
  .at-app > .at-inspektor {
    grid-area: inspektor;
  }

  @media (min-width: 760px) {
    .at-app__obsah {
      padding: var(--at-space-5) max(var(--at-space-6), var(--at-panel-gap)) var(--at-space-10);
    }
  }

  /* Navigace pod 1 100 px: pojmenovaná Nabídka. Vrstva začíná těsně pod lištou (poloha podle
     oblasti mřížky), otevírá ji tlačítko .at-bar__menu s aria-expanded="true". Rám ruleStrong
     ji oddělí od obsahu i v tmavém motivu, kde stín nestačí. Vrstvou je jen se skriptem
     dist/ovladani.js (data-at-ovladani); bez něj je navigace blok mezi lištou a obsahem. */
  @media (max-width: 1099.98px) {
    :root:not([data-at-ovladani]) .at-app {
      grid-template-areas:
        'prostredi prostredi prostredi'
        'bar bar bar'
        'nav nav nav'
        'obsah obsah inspektor';
      grid-template-rows: auto auto auto 1fr;
    }
    :root:not([data-at-ovladani]) .at-app .at-bar__menu {
      display: none;
    }
    :root:not([data-at-ovladani]) .at-app > .at-nav {
      border-inline-end: 0;
      border-block-end: var(--at-border-rule) solid var(--at-nav-rule);
    }
    :root[data-at-ovladani] .at-app > .at-nav {
      position: absolute;
      z-index: var(--at-z-dropdown);
      inset-block-start: 0;
      inset-inline-start: 0;
      display: none;
      inline-size: min(var(--at-layout-inspector), calc(100vw - var(--at-space-8)));
      border-block-end: var(--at-border-rule) solid var(--at-rule-strong);
      border-inline-end-color: var(--at-rule-strong);
      box-shadow: var(--at-shadow-layer);
    }
    :root[data-at-ovladani] .at-app:has(.at-bar__menu[aria-expanded='true']) > .at-nav {
      display: flex;
    }
  }

  /* Od 1 100 px sloupec navigace: výšku bere z obsahu stránky, sám se posouvá a drží u horního
     okraje. Tlačítko Nabídka zmizí. */
  @media (min-width: 1100px) {
    .at-app > .at-nav {
      position: sticky;
      inset-block-start: 0;
      align-self: start;
      inline-size: var(--at-layout-sidebar);
      block-size: min(100%, 100dvh);
      overflow-y: auto;
      overscroll-behavior: contain;
      contain: size;
    }
    .at-bar .at-bar__menu {
      display: none;
    }
    /* Název produktu stojí nad navigací a oddělovač oblasti navazuje na její linku. */
    .at-app:has(> .at-nav) .at-bar__produkt {
      inline-size: calc(var(--at-layout-sidebar) - 2 * var(--at-space-4) - var(--at-border-rule));
    }
    .at-app:has(> .at-nav) .at-bar__oblast {
      padding-inline-start: var(--at-space-6);
    }
  }

  /* Inspektor pod 1 280 px: vrstva u pravého okraje nad obsahem, od 1 280 px sloupec. */
  @media (max-width: 1279.98px) {
    .at-app > .at-inspektor {
      position: fixed;
      z-index: var(--at-z-dropdown);
      inset-block: 0;
      inset-inline-end: 0;
      inline-size: min(var(--at-layout-inspector), 100vw);
      overflow-y: auto;
      overscroll-behavior: contain;
      border-inline-start-color: var(--at-rule-strong);
      box-shadow: var(--at-shadow-layer);
    }
  }
  @media (min-width: 1280px) {
    .at-app > .at-inspektor {
      position: sticky;
      inset-block-start: 0;
      align-self: start;
      inline-size: var(--at-layout-inspector);
      block-size: min(100%, 100dvh);
      overflow-y: auto;
      overscroll-behavior: contain;
      contain: size;
    }
  }

  /* ---------- Horní lišta ----------
     Barvy bar a onBar. Hrana --at-bar-edge v barvě onBarAccent pozná produkt; je ve všech
     vzhledech dole a stejně silná, takže se znak produktu při přepnutí vzhledu nehýbe.
     Fokus kreslí --at-on-bar (na tmavé liště Dílny světlá linka se žlutým lemem). */

  .at-bar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-2) var(--at-space-4);
    min-block-size: calc(var(--at-control-height) + var(--at-space-5) + var(--at-bar-edge));
    padding: var(--at-space-2) var(--at-space-4);
    border-block-end: var(--at-bar-edge) solid var(--at-on-bar-accent);
    background: var(--at-bar);
    color: var(--at-on-bar);
    font-size: var(--at-font-size-table);
    font-stretch: var(--at-stretch-control);
  }
  /* Fokus na liště barvou onBar; ne v plovoucí nabídce účtu, která má plochu surface-1. */
  .at-bar :focus-visible:not(:where(.at-menu *)) {
    outline-color: var(--at-on-bar);
  }

  /* Blok v řádku, ne flex: doména (.at-bar__domena) tak zůstane součástí slova a čtečka přečte
     „mujautoservis.eu“ bez mezery. */
  .at-bar__produkt {
    display: inline-block;
    flex: none;
    color: var(--at-on-bar);
    font-size: var(--at-font-size-h4);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-heading);
    line-height: var(--at-line-height-tight);
    letter-spacing: var(--at-tracking-heading);
    text-decoration: none;
    white-space: nowrap;
  }
  a.at-bar__produkt:hover {
    text-decoration-line: underline;
  }
  /* Název produktu je odkaz na úvod: neviditelná plocha aspoň --at-control-height, aby cíl
     rostl s hustotou jako ostatní prvky lišty (text sám je vysoký jen jeden řádek). */
  a.at-bar__produkt {
    position: relative;
  }
  a.at-bar__produkt::after {
    content: '';
    position: absolute;
    inset: 50% auto auto 50%;
    inline-size: max(100%, var(--at-control-height));
    block-size: max(100%, var(--at-control-height));
    translate: -50% -50%;
  }
  .at-bar__domena {
    color: var(--at-bar-muted);
    font-weight: var(--at-font-weight-medium);
  }

  /* Název oblasti, oddělený od produktu svislou linkou lišty. */
  .at-bar__oblast {
    flex: 0 1 auto;
    min-inline-size: 0;
    margin: 0;
    padding-inline-start: var(--at-space-4);
    border-inline-start: var(--at-border-rule) solid var(--at-bar-rule);
    color: var(--at-on-bar);
    font-size: var(--at-font-size-h4);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-heading);
    line-height: var(--at-line-height-tight);
    overflow-wrap: break-word;
  }

  /* Hledání: pod 640 px a v liště s tlačítkem Nabídka pod 1 100 px samostatný řádek přes celou
     šířku lišty pod akcemi (stejně jako v DOM). Pole nemá čip klávesové zkratky, zkratku „/“
     uvádí Nápověda. */
  .at-bar__hledat {
    position: relative;
    display: flex;
    flex: 1 1 100%;
    align-items: center;
    min-inline-size: 0;
    margin: 0;
    color: var(--at-bar-muted);
  }
  .at-bar__hledat > .at-icon {
    position: absolute;
    inset-inline-start: var(--at-space-3);
    inline-size: 1.125em;
    block-size: 1.125em;
    fill: currentColor;
    pointer-events: none;
  }
  .at-bar__pole {
    inline-size: 100%;
    min-block-size: var(--at-control-height);
    margin: 0;
    padding-block: 0;
    padding-inline: calc(var(--at-space-3) + 1.125em + var(--at-space-2)) var(--at-space-3);
    border: var(--at-border-rule) solid var(--at-bar-field-border);
    border-radius: var(--at-radius-control);
    background: var(--at-bar-field);
    color: var(--at-on-bar);
    font-size: var(--at-font-size-table);
    font-stretch: var(--at-stretch-control);
    appearance: none;
  }
  .at-bar__pole::placeholder {
    color: var(--at-bar-muted);
    opacity: 1;
  }

  .at-bar__akce {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-2);
    margin-inline-start: auto;
  }

  /* Uživatel a organizace: tlačítko účtu, jméno nad názvem organizace. */
  .at-bar__uzivatel {
    display: inline-grid;
    grid-template-columns: auto minmax(0, auto);
    grid-template-areas:
      'ikona jmeno'
      'ikona organizace';
    align-content: center;
    align-items: center;
    column-gap: var(--at-space-2);
    max-inline-size: 18rem;
    min-block-size: var(--at-control-height);
    margin: 0;
    padding: 0 var(--at-space-2);
    border: var(--at-border-rule) solid transparent;
    border-radius: var(--at-radius-control);
    background: transparent;
    color: var(--at-on-bar);
    font-size: var(--at-font-size-table);
    line-height: var(--at-line-height-tight);
    text-align: start;
    text-decoration: none;
  }
  .at-bar__uzivatel:hover,
  .at-bar__uzivatel[aria-expanded='true'] {
    border-color: var(--at-bar-field-border);
    background: var(--at-bar-field);
  }
  .at-bar__uzivatel > .at-icon {
    grid-area: ikona;
    inline-size: 1.25em;
    block-size: 1.25em;
    fill: currentColor;
  }
  .at-bar__jmeno,
  .at-bar__organizace {
    min-inline-size: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .at-bar__jmeno {
    grid-area: jmeno;
    font-weight: var(--at-font-weight-medium);
  }
  .at-bar__organizace {
    grid-area: organizace;
    color: var(--at-bar-muted);
    font-size: var(--at-font-size-small);
  }

  /* Na jednom řádku stojí hledání mezi názvem oblasti a akcemi. */
  @media (min-width: 640px) {
    .at-bar__hledat {
      flex: 1 1 14rem;
      order: 1;
      max-inline-size: 28rem;
    }
    .at-bar__akce {
      order: 2;
    }
  }
  @media (min-width: 640px) and (max-width: 1099.98px) {
    .at-bar:has(> .at-bar__menu) > .at-bar__hledat {
      flex-basis: 100%;
      order: 3;
      max-inline-size: none;
    }
  }
  /* Telefon: lišta má nejvýš tři řádky (Nabídka a produkt, Nápověda a účet, hledání). Název
     oblasti v aplikaci s Nabídkou nese nadpis a drobečková navigace stránky, organizace je
     v nabídce účtu. Produkt bez navigace název oblasti (nástroje) ponechá. */
  @media (max-width: 639.98px) {
    .at-bar:has(> .at-bar__menu) > .at-bar__oblast,
    .at-bar__organizace {
      display: none;
    }
  }

  /* ---------- Postranní navigace ----------
     Plochá: 5–8 pojmenovaných pracovních skupin (.at-nav__skupina s .at-nav__nadpis), žádné
     sbalování ani šipky. Aktivní stránka (aria-current="page") má řez 600 a text akcentu;
     Tiskopis a Dílna k tomu plochu akcentu, Atomys místo plochy krátkou linku pod začátkem
     textu (tokeny --at-nav-current-fill a --at-nav-current-mark). Barevný pruh na začátku
     položky nemá
     (patří jen výjimkám ve „Vyžaduje pozornost“). Ikona na začátku položky je nepovinná
     a kreslí ji jen Dílna (--at-nav-icon-display); v Tiskopisu a Atomysu je navigace textový
     rejstřík. Plochu, linku, odsazení a oddělení skupin dávají tokeny konstrukce vzhledu. */

  .at-nav {
    display: flex;
    flex-direction: column;
    gap: var(--at-nav-gap);
    padding: var(--at-space-3) var(--at-nav-padding-inline) var(--at-space-6);
    border-inline-end: var(--at-border-rule) solid var(--at-nav-rule);
    background: var(--at-nav-surface);
    font-size: var(--at-font-size-text);
  }
  /* Dílna odděluje skupiny linkou (--at-nav-group-rule), ostatní vzhledy jen mezerou. */
  .at-nav > * + * {
    padding-block-start: var(--at-nav-group-padding);
    border-block-start: var(--at-nav-group-rule) solid var(--at-rule);
  }
  .at-nav__skupina {
    display: grid;
    gap: var(--at-space-1);
  }
  .at-nav__nadpis {
    margin: 0;
    padding: var(--at-space-1) var(--at-space-3) 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-label);
    line-height: var(--at-line-height-tight);
  }
  .at-nav__seznam {
    display: grid;
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .at-nav__polozka {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--at-space-3);
    min-block-size: var(--at-control-height);
    padding-block: var(--at-space-1);
    padding-inline: var(--at-space-3) var(--at-space-2);
    border-radius: var(--at-radius-control);
    color: var(--at-ink-soft);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-tight);
    text-decoration: none;
  }
  .at-nav__polozka:focus-visible {
    outline-offset: calc(var(--at-border-focus) * -1);
  }
  .at-nav__polozka > .at-icon {
    display: var(--at-nav-icon-display);
    flex: none;
    inline-size: 1.25em;
    block-size: 1.25em;
    fill: currentColor;
    color: var(--at-muted);
  }
  .at-nav__pocet {
    margin-inline-start: auto;
    padding-inline-start: var(--at-space-2);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-regular);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
  }
  /* Značka místo počtu (zámek u nedostupné položky). */
  .at-nav__pocet > .at-icon {
    inline-size: 1.15em;
    block-size: 1.15em;
    vertical-align: -0.2em;
    fill: currentColor;
  }
  .at-nav__polozka:hover {
    background: color-mix(in srgb, var(--at-ink) 7%, transparent);
    color: var(--at-ink);
  }
  .at-nav__polozka[aria-current='page'] {
    background: color-mix(in srgb, var(--at-accent-soft) var(--at-nav-current-fill), transparent);
    color: var(--at-accent-text);
    font-weight: var(--at-font-weight-semibold);
  }
  /* Krátká linka pod začátkem textu (Atomys); s šířkou 0 se nekreslí. */
  .at-nav__polozka[aria-current='page']::after {
    content: '';
    position: absolute;
    inset-block-end: calc(var(--at-space-1) / 2);
    inset-inline-start: var(--at-space-3);
    inline-size: var(--at-nav-current-mark);
    block-size: calc(var(--at-border-rule) * 2);
    background: currentColor;
  }
  .at-nav__polozka[aria-current='page'] > .at-icon {
    color: var(--at-accent-text);
  }
  /* Nedostupná položka: bez href, s aria-disabled="true", zámkem v místě počtu a důvodem
     v title nebo popisu. */
  .at-nav__polozka[aria-disabled='true'] {
    background: transparent;
    color: color-mix(in srgb, var(--at-muted) 75%, transparent);
    cursor: not-allowed;
  }
  .at-nav__polozka[aria-disabled='true'] > .at-icon {
    color: inherit;
  }

  /* ---------- Hlavička stránky ---------- */

  .at-hlavicka {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--at-space-3) var(--at-space-6);
    margin-block-end: var(--at-space-5);
  }
  .at-hlavicka__text {
    flex: 1 1 24rem;
    min-inline-size: 0;
  }
  .at-hlavicka__text > .at-drobky {
    margin-block-end: var(--at-space-1);
  }
  .at-hlavicka__nadpis {
    margin: 0;
    font-size: var(--at-font-size-h1);
    overflow-wrap: break-word;
  }
  .at-hlavicka__podtitul {
    max-inline-size: var(--at-layout-text-max);
    margin: var(--at-space-1) 0 0;
    color: var(--at-ink-soft);
  }
  .at-hlavicka__podtitul time {
    font-variant-numeric: tabular-nums lining-nums;
    white-space: nowrap;
  }
  .at-hlavicka__akce {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-2);
  }

  /* ---------- Drobečková navigace ---------- */

  .at-drobky {
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-tight);
  }
  .at-drobky > ol {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .at-drobky li {
    display: inline-flex;
    align-items: center;
    min-inline-size: 0;
  }
  .at-drobky li + li::before {
    content: '/';
    content: '/' / '';
    padding-inline: var(--at-space-2);
    color: var(--at-muted);
  }
  .at-drobky a {
    display: inline-flex;
    align-items: center;
    min-block-size: var(--at-control-height);
    overflow-wrap: anywhere;
  }
  .at-drobky [aria-current='page'] {
    color: var(--at-ink);
    font-weight: var(--at-font-weight-medium);
    text-decoration: none;
    overflow-wrap: anywhere;
  }

  /* ---------- Panel ----------
     Sekce obsahu s nadpisem. Tvar dávají tokeny vzhledu: --at-panel-border (Tiskopis 0, sekce
     na papíře odděluje jen linka pod nadpisem), --at-panel-padding (vnitřní odsazení) a
     --at-panel-gap (mezera k dalšímu bloku), zaoblení --at-radius-surface. */

  .at-panel {
    min-inline-size: 0;
    margin-block-end: var(--at-panel-gap);
    border: var(--at-panel-border) solid var(--at-panel-border-color);
    border-radius: var(--at-radius-surface);
    background: var(--at-surface-1);
  }
  .at-panel[aria-busy='true'] {
    cursor: progress;
  }
  .at-panel__hlava,
  .at-inspektor__hlava {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--at-space-1) var(--at-space-4);
    padding: var(--at-space-3) var(--at-space-4);
    border-block-end: var(--at-panel-head-rule-width) solid var(--at-panel-head-rule);
  }
  .at-panel__hlava {
    padding: max(var(--at-space-3), calc(var(--at-panel-padding) * 0.75)) var(--at-panel-padding);
  }
  .at-panel__nadpis,
  .at-inspektor__nadpis,
  .at-dialog__nadpis {
    flex: 1 1 auto;
    min-inline-size: 0;
    margin: 0;
    font-size: var(--at-font-size-h3);
    overflow-wrap: break-word;
  }
  .at-panel__meta {
    margin: 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-panel__akce {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    align-self: center;
    gap: var(--at-space-2);
    margin-inline-start: auto;
  }
  .at-panel__telo {
    padding: max(var(--at-space-4), var(--at-panel-padding)) var(--at-panel-padding);
  }
  .at-panel__telo > :last-child {
    margin-block-end: 0;
  }
  /* Mřížka údajů přímo v těle panelu nekreslí vlastní vnější rám tam, kde ho kreslí panel
     (--at-nested-frame 0 v Dílně a Atomysu): žádná karta v kartě, zůstanou linky buněk. */
  .at-panel__telo > .at-popisove-pole {
    border-width: var(--at-nested-frame);
  }
  /* Seznam, který kreslí vlastní horní linku, ji hned pod linkou záhlaví panelu nezdvojí. */
  .at-panel__telo > .at-korektury:first-child {
    border-block-start: 0;
  }
  /* Tabulka nebo seznam až k okrajům panelu. Krajní buňky tabulky drží odsazení panelu, takže
     text sloupců lícuje s nadpisem. */
  .at-panel__telo--plne {
    padding: 0;
  }
  .at-panel__telo--plne .at-table tr > :first-child {
    padding-inline-start: max(var(--at-space-3), var(--at-panel-padding));
  }
  .at-panel__telo--plne .at-table tr > :last-child {
    padding-inline-end: max(var(--at-space-3), var(--at-panel-padding));
  }
  .at-panel__pata {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-2) var(--at-space-4);
    padding: var(--at-space-2) var(--at-panel-padding);
    border-block-start: var(--at-border-rule) solid var(--at-rule);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
  }

  /* ---------- Bloky obsahu ----------
     Panely vedle sebe ve sloupcích nejméně 22 rem. Když se dva sloupce nevejdou (obsah užší
     než asi 760 px), jdou bloky pod sebe. Mezery dává --at-panel-gap vzhledu. Oddíl stojí za
     panelem, aby nulový okraj bloku přebil okraj panelu.
       <div class="at-bloky"> <section class="at-panel">…</section> … </div>
     .at-bloky--bok: hlavní blok a užší boční sloupec šířky inspektoru (výjimky a program dne);
     pod sebe jdou, když na hlavní blok nezbude 26 rem. .at-bloky__cely zabere celý řádek. */

  .at-bloky {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
    align-items: start;
    gap: var(--at-panel-gap);
    margin-block-end: var(--at-panel-gap);
  }
  .at-bloky > * {
    min-inline-size: 0;
    margin-block: 0;
  }
  .at-bloky__cely {
    grid-column: 1 / -1;
  }
  .at-bloky--bok {
    display: flex;
    flex-wrap: wrap;
  }
  .at-bloky--bok > * {
    flex: 1 1 min(100%, var(--at-layout-inspector));
  }
  .at-bloky--bok > :first-child {
    flex: 999 1 min(100%, 26rem);
  }

  /* ---------- Inspektor ---------- */

  .at-inspektor {
    display: flex;
    flex-direction: column;
    min-inline-size: 0;
    border-inline-start: var(--at-border-rule) solid var(--at-rule);
    background: var(--at-surface-1);
  }
  .at-inspektor__hlava {
    flex-wrap: nowrap;
    align-items: flex-start;
    gap: var(--at-space-2);
    padding-inline-end: var(--at-space-2);
  }
  .at-inspektor__nadpis {
    padding-block: var(--at-space-1);
  }
  .at-inspektor__hlava > .at-btn {
    margin-block: calc(var(--at-space-1) * -1);
  }
  .at-inspektor__telo {
    flex: 1 1 auto;
    padding: var(--at-space-4);
    overflow-wrap: break-word;
  }
  .at-inspektor__telo > :last-child {
    margin-block-end: 0;
  }
  .at-inspektor__pata {
    display: flex;
    flex-wrap: wrap;
    gap: var(--at-space-2);
    padding: var(--at-space-3) var(--at-space-4);
    border-block-start: var(--at-border-rule) solid var(--at-rule);
  }

  /* ---------- Záložky (role="tablist") ----------
     Vybraná záložka (aria-selected="true"): linka pod textem v barvě akcentu a text ink. */

  .at-zalozky {
    display: flex;
    gap: var(--at-space-1);
    margin: 0 0 var(--at-space-4);
    padding: 0;
    overflow-x: auto;
    border-block-end: var(--at-border-rule) solid var(--at-rule);
    scrollbar-width: thin;
  }
  .at-zalozky__zalozka {
    display: inline-flex;
    flex: none;
    align-items: center;
    gap: var(--at-space-2);
    min-block-size: var(--at-control-height);
    margin: 0;
    padding: 0 var(--at-space-3);
    border: 0;
    border-block-end: calc(var(--at-bar-edge) + var(--at-border-rule)) solid transparent;
    border-start-start-radius: var(--at-radius-control);
    border-start-end-radius: var(--at-radius-control);
    background: transparent;
    color: var(--at-muted);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-tight);
    white-space: nowrap;
  }
  .at-zalozky__zalozka:focus-visible {
    outline-offset: calc(var(--at-border-focus) * -1);
  }
  .at-zalozky__zalozka > .at-icon {
    inline-size: 1.125em;
    block-size: 1.125em;
    fill: currentColor;
  }
  .at-zalozky__zalozka:hover {
    background: color-mix(in srgb, var(--at-ink) 5%, transparent);
    color: var(--at-ink);
  }
  .at-zalozky__zalozka[aria-selected='true'] {
    border-block-end-color: var(--at-accent-text);
    color: var(--at-ink);
  }
  .at-zalozky__zalozka:is(:disabled, [aria-disabled='true']) {
    background: transparent;
    color: color-mix(in srgb, var(--at-muted) 60%, transparent);
    cursor: not-allowed;
  }
  .at-zalozky__pocet {
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-regular);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
  }

  /* ---------- Dialog (nativní <dialog>) ----------
     Otevírá se showModal(); ::backdrop kreslí překryv --at-overlay. Rám ruleStrong ve všech
     vzhledech a motivech: v tmavém motivu dialog od překryvu neoddělí samotný stín. Bezpečná
     akce (Zpět, Zrušit) stojí v patě první a má atribut autofocus, takže na ni po otevření
     padne fokus; hlavní akce je vpravo. Potvrzovací dialog se otevírá jen nad platným
     formulářem.
       <dialog class="at-dialog" aria-labelledby="d-nadpis" aria-describedby="d-popis">
         <form method="dialog"> <header class="at-dialog__hlava">…</header>
           <div class="at-dialog__telo">…</div>
           <footer class="at-dialog__pata">
             <button class="at-btn" value="zpet" autofocus>Zpět k úpravám</button>
             <button class="at-btn at-btn--primary" value="ok">Vystavit fakturu</button>
           </footer></form></dialog> */

  .at-dialog {
    inline-size: min(32rem, calc(100vw - 2 * var(--at-space-4)));
    max-inline-size: none;
    max-block-size: calc(100dvh - 2 * var(--at-space-4));
    margin: auto;
    padding: 0;
    border: var(--at-border-rule) solid var(--at-rule-strong);
    border-radius: var(--at-radius-dialog);
    background: var(--at-surface-1);
    color: var(--at-ink);
    box-shadow: var(--at-shadow-layer);
  }
  .at-dialog[open] {
    z-index: var(--at-z-dialog);
    display: flex;
    flex-direction: column;
    animation: at-vstup var(--at-motion-base) var(--at-motion-ease);
  }
  .at-dialog::backdrop {
    background: var(--at-overlay);
  }
  .at-dialog--siroky {
    inline-size: min(48rem, calc(100vw - 2 * var(--at-space-4)));
  }
  .at-dialog[aria-busy='true'] {
    cursor: progress;
  }
  .at-dialog > form {
    display: contents;
  }
  .at-dialog__hlava {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    gap: var(--at-space-1) var(--at-space-3);
    padding: var(--at-space-4) var(--at-space-5) var(--at-space-3);
    border-block-end: var(--at-border-rule) solid var(--at-dialog-head-rule);
  }
  .at-dialog__hlava > .at-btn {
    margin-block: calc(var(--at-space-1) * -1);
    margin-inline-end: calc(var(--at-space-2) * -1);
  }
  .at-dialog__popis {
    flex: 1 1 100%;
    margin: 0;
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
  }
  .at-dialog__telo {
    flex: 1 1 auto;
    padding: var(--at-space-4) var(--at-space-5);
    overflow-y: auto;
    overflow-wrap: break-word;
  }
  .at-dialog__telo > :last-child {
    margin-block-end: 0;
  }
  .at-dialog__pata {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: var(--at-space-2);
    padding: var(--at-space-3) var(--at-space-5) var(--at-space-4);
    border-block-start: var(--at-border-rule) solid var(--at-rule);
    background: var(--at-dialog-foot-surface);
  }

  /* Vstup plovoucí vrstvy (dialog, oznámení): krátké vysunutí o space-2 a zprůhlednění. */
  @keyframes at-vstup {
    from {
      opacity: 0;
      transform: translateY(var(--at-space-2));
    }
  }

  /* ---------- Oznámení (toast) ----------
     Oblast existuje od načtení stránky a obsahuje dvě živé oblasti; aplikace do nich oznámení
     jen vkládá (čtečky spolehlivě hlásí změnu v oblasti, která už v DOM byla):
       <div class="at-oznameni-oblast" role="region" aria-label="Oznámení">
         <div class="at-oznameni-oblast__fronta" aria-live="polite"></div>   potvrzení
         <div class="at-oznameni-oblast__fronta" role="alert"></div>         chyby
       </div>
       vkládá se: <div class="at-oznameni at-oznameni--uspech">…</div>
     Potvrzení se po 8 s zavře samo, ale ne dřív, než z něj odejde myš i fokus; chyba se
     nezavírá sama, jen tlačítkem Zavřít. Tón nese ikona v barvě stavu a nadpis. Barevný pruh
     na začátku oznámení není: potvrzení ho nemá, patří jen výjimkám ve „Vyžaduje pozornost“. */

  .at-oznameni-oblast {
    position: fixed;
    z-index: var(--at-z-toast);
    inset-block-end: var(--at-space-4);
    inset-inline-end: var(--at-space-4);
    display: flex;
    flex-direction: column;
    gap: var(--at-space-2);
    inline-size: min(26rem, calc(100vw - 2 * var(--at-space-4)));
    pointer-events: none;
  }
  .at-oznameni-oblast__fronta {
    display: flex;
    flex-direction: column;
    gap: var(--at-space-2);
  }
  .at-oznameni-oblast .at-oznameni {
    box-shadow: var(--at-shadow-layer);
    pointer-events: auto;
    animation: at-vstup var(--at-motion-base) var(--at-motion-ease);
  }

  .at-oznameni {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: start;
    gap: var(--at-space-1) var(--at-space-3);
    padding: var(--at-space-3) var(--at-space-2) var(--at-space-3) var(--at-space-3);
    border: var(--at-border-rule) solid var(--at-rule-strong);
    border-radius: var(--at-radius-control);
    background: var(--at-surface-1);
    color: var(--at-ink);
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-body);
  }
  .at-oznameni__ikona {
    grid-column: 1;
    inline-size: 1.25em;
    block-size: 1.25em;
    margin-block-start: 0.1em;
    fill: currentColor;
    color: var(--at-info);
  }
  .at-oznameni__text {
    grid-column: 2;
    min-inline-size: 0;
    overflow-wrap: break-word;
  }
  .at-oznameni__nadpis {
    display: block;
    color: var(--at-ink);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-semibold);
    line-height: var(--at-line-height-heading);
  }
  .at-oznameni__zprava {
    margin: var(--at-space-1) 0 0;
    color: var(--at-ink-soft);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-oznameni__akce {
    display: flex;
    flex-wrap: wrap;
    gap: var(--at-space-2) var(--at-space-4);
    grid-column: 2;
  }
  .at-oznameni > .at-btn {
    grid-column: 3;
    grid-row: 1;
    margin-block: calc(var(--at-space-2) * -1);
  }

  .at-oznameni--uspech > .at-oznameni__ikona {
    color: var(--at-success);
  }
  .at-oznameni--varovani > .at-oznameni__ikona {
    color: var(--at-warning);
  }
  .at-oznameni--chyba > .at-oznameni__ikona {
    color: var(--at-danger);
  }


  /* ---------- Pruh prostředí ----------
     Jediné místo pro upozornění, že nejde o ostrý provoz: DEV, STAGING a „Ukázková data“.
     Stojí nad lištou přes celou šířku, název slovem a věta, co to pro uživatele znamená.
     STAGING má plochu warning, DEV info, ukázková data klidnou plochu surface2 a název
     v přerušovaném rámečku jako štítek .at-ukazka-data. Víc pruhů nad sebou se nedává:
     staging s ukázkovými daty to řekne jednou větou. */

  .at-prostredi {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--at-space-1) var(--at-space-3);
    margin: 0;
    padding: var(--at-space-2) var(--at-space-4);
    background: var(--at-warning);
    color: var(--at-surface-1);
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-tight);
  }
  /* Výchozí podoba je STAGING; modifikátor ji pojmenuje v HTML. */
  .at-prostredi--staging {
    background: var(--at-warning);
  }
  .at-prostredi--dev {
    background: var(--at-info);
  }
  .at-prostredi--ukazka {
    border-block-end: var(--at-border-rule) solid var(--at-rule);
    background: var(--at-surface-2);
    color: var(--at-ink);
  }
  .at-prostredi--ukazka > .at-prostredi__nazev {
    padding-inline: var(--at-space-2);
    border: var(--at-border-rule) dashed var(--at-rule-strong);
    border-radius: var(--at-radius-control);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    letter-spacing: 0;
  }
  .at-prostredi__nazev {
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-label);
    letter-spacing: var(--at-label-tracking);
  }
  .at-prostredi a {
    color: inherit;
  }
  .at-prostredi :focus-visible {
    outline-color: currentColor;
  }

  /* ---------- Omezení pohybu ---------- */

  @media (prefers-reduced-motion: reduce) {
    .at-dialog[open],
    .at-oznameni-oblast .at-oznameni {
      animation: none;
    }
  }

  /* ---------- Vynucené barvy (Windows kontrastní režim) ---------- */

  @media (forced-colors: active) {
    /* Plochy akcentu v kontrastním režimu zmizí; aktivní položku navigace ponese linka. */
    .at-nav__polozka[aria-current='page'] {
      padding-inline-start: calc(var(--at-space-3) - var(--at-bar-edge));
      border-inline-start: var(--at-bar-edge) solid Highlight;
    }
    .at-zalozky__zalozka[aria-selected='true'] {
      border-block-end-color: Highlight;
    }
    .at-nav__polozka[aria-disabled='true'],
    .at-zalozky__zalozka:is(:disabled, [aria-disabled='true']) {
      color: GrayText;
    }
    .at-prostredi {
      border-block-end: calc(var(--at-bar-edge) * 2) solid CanvasText;
    }
  }

  /* ---------- Tisk ---------- */

  @media print {
    .at-app {
      display: block;
      min-block-size: 0;
    }
    .at-app > .at-nav,
    .at-app > .at-inspektor,
    .at-bar__menu,
    .at-bar__hledat,
    .at-bar__akce,
    .at-oznameni-oblast {
      display: none;
    }
  }
}

/* Atomys Design Language — komponenty marketingového webu produktu.
 *
 * Stránka webu, hlavička, úvod (jedna věcná věta jako nadpis), blok důkazu přes celou šířku,
 * sekce, rejstřík nástrojů jako tabulka, číslovaný postup, ceník, časté otázky a patička
 * s tiráží. Web produktu je plocha pro návštěvníka bez účtu: má pevný vzhled Tiskopis
 * (<html data-vzhled="tiskopis" data-vzhled-pevny>, viz PRAVIDLA.md) a volbu vzhledu
 * prohlížejícího nepřebírá; motiv se řídí systémem nebo volbou motivu v hlavičce. Komponenty
 * čtou jen tokeny, takže fungují i v galerii přepínající vzhled. Rejstřík i ceník jsou
 * .at-table a přebírají její podobu.
 *
 * Kompozice stránky (pořadí je závazné):
 *   <body class="at-web">               plocha surface-1, v tmavém motivu grafit
 *     <a class="at-skip-link" href="#obsah">Přeskočit na obsah</a>
 *     <header class="at-web-hlavicka">  název produktu, 3–5 položek, pod 64 rem Nabídka
 *     <main id="obsah">
 *       <section class="at-uvod">       nadpis h1.at-uvod__nadpis: jedna věta jedním řezem
 *                                       a barvou (název produktu nese hlavička), volitelně
 *                                       perex p.at-uvod__perex v běžné velikosti textu,
 *         <figure class="at-dukaz">     pod nimi skutečný vstup a výstup přes celou šířku,
 *         <div class="at-uvod__akce">   pod důkazem hlavní a nejvýš jedna vedlejší akce
 *       <section class="at-web-sekce">  rejstřík nástrojů, ceník, časté otázky
 *     <footer class="at-paticka">       tiráž: provozovatel, IČO, ověření, podmínky, značka
 *
 * Tvrzení o produktu (limity, lhůty, formáty, šablony účetních programů, povinnosti ze
 * zákona) patří na web jen ověřená proti kódu; jinak obecně bez čísel, nebo se štítkem
 * .at-ukazka-data „Ukázkový text“.
 *
 * Spoléhá na: .at-icon, .at-btn a .at-link (10-ovladani.css), .at-table a .at-ukazka-data
 * (30-data.css), .at-num, .at-sr-only a .at-skip-link (zaklad.css). Značka Atomys patří jen do
 * .at-paticka__znacka, a to plochá jednobarevná (assets/svg/logos/atomys-lockup-plochy.svg).
 * Stavy: aria-current, aria-expanded, aria-busy, [open], :disabled. Nabídku hlavičky ovládá
 * dist/ovladani.js; bez něj je panel hlavičky vidět stále a tlačítko Nabídka se nekreslí.
 */
@layer atomys.komponenty {
  /* ---------- Stránka webu ---------- */
  /* Web stojí na papíře surface-1, ne na šedém plátně aplikace. V tmavém motivu je plocha
     grafitová (surface-2) a hlavička s patičkou jsou o stupeň tmavší pásy (bar, surface-1):
     tmavý web tak nestojí na téměř černé s jediným barevným tlačítkem. Soukromé proměnné
     --_web-* čtou komponenty níže; mimo .at-web platí jejich výchozí hodnota. */
  .at-web {
    --_web-plocha: light-dark(var(--at-surface-1), var(--at-surface-2));
    --_web-pas: var(--at-surface-1);
    --_web-studna: light-dark(var(--at-surface-2), var(--at-surface-1));
    --_web-linka: light-dark(var(--at-rule), var(--at-rule-strong));
    background: var(--_web-plocha);
    color: var(--at-ink);
  }

  /* ---------- Hlavička webu ---------- */
  /* Název produktu vlevo, 3–5 položek, jazyk textem, motiv, jedna akce. Hrana v barvě
     oblasti je dole a ve všech vzhledech stejně silná. Kotvou kontejneru je sama hlavička,
     takže se sbalí do pojmenované nabídky i v úzkém sloupci náhledu. */
  .at-web-hlavicka {
    container: at-web-hlavicka / inline-size;
    background: var(--at-bar);
    color: var(--at-on-bar);
    border-block-end: var(--at-bar-edge) solid var(--at-on-bar-accent);
  }
  .at-web-hlavicka :focus-visible {
    outline-color: var(--at-on-bar);
  }
  .at-web-hlavicka__vnitrek {
    display: flex;
    align-items: center;
    gap: 0 var(--at-space-6);
    min-block-size: calc(var(--at-control-height) + var(--at-space-5));
    padding-inline: max(var(--at-layout-gutter), calc((100% - var(--at-layout-page-max)) / 2));
  }
  .at-web-hlavicka__produkt {
    display: inline-flex;
    align-items: center;
    min-block-size: var(--at-control-height);
    color: var(--at-on-bar);
    font-size: var(--at-font-size-h4);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-control);
    text-decoration: none;
    white-space: nowrap;
  }
  .at-web-hlavicka__produkt:hover {
    text-decoration: underline;
    text-underline-offset: 0.25em;
  }
  .at-web-hlavicka__domena {
    color: var(--at-bar-muted);
    font-weight: var(--at-font-weight-medium);
  }
  .at-web-hlavicka__panel {
    display: flex;
    flex: 1 1 auto;
    align-items: center;
    align-self: stretch;
    gap: var(--at-space-4) var(--at-space-6);
    min-inline-size: 0;
  }
  .at-web-hlavicka__nav {
    display: flex;
    align-self: stretch;
  }
  .at-web-hlavicka__nav ul {
    display: flex;
    gap: var(--at-space-1);
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .at-web-hlavicka__nav li {
    display: flex;
  }
  /* Aktivní položka: text, řez a linka, která přeruší hranu lišty. */
  .at-web-hlavicka__nav a {
    display: flex;
    align-items: center;
    padding-inline: var(--at-space-3);
    margin-block-end: calc(var(--at-bar-edge) * -1);
    border-block-end: calc(var(--at-bar-edge) + var(--at-border-focus)) solid transparent;
    color: var(--at-bar-muted);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    text-decoration: none;
    white-space: nowrap;
  }
  .at-web-hlavicka__nav a:hover {
    color: var(--at-on-bar);
  }
  .at-web-hlavicka__nav a[aria-current='page'] {
    border-block-end-color: var(--at-on-bar);
    color: var(--at-on-bar);
  }
  .at-web-hlavicka__volby {
    display: flex;
    align-items: center;
    gap: var(--at-space-4);
    margin-inline-start: auto;
  }
  /* Jazyk jako text CS / EN / SK, bez vlajek. Aktuální jazyk nese řez a podtržení. */
  .at-web-hlavicka__jazyky {
    display: flex;
    align-items: center;
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: var(--at-font-size-small);
  }
  .at-web-hlavicka__jazyky li {
    display: flex;
    align-items: center;
  }
  .at-web-hlavicka__jazyky li + li::before {
    content: '/';
    content: '/' / '';
    color: var(--at-bar-muted);
  }
  .at-web-hlavicka__jazyky a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-block-size: var(--at-control-height);
    min-inline-size: var(--at-control-height);
    color: var(--at-bar-muted);
    font-weight: var(--at-font-weight-medium);
    font-stretch: var(--at-stretch-control);
    text-decoration: none;
  }
  .at-web-hlavicka__jazyky a:hover {
    color: var(--at-on-bar);
    text-decoration: underline;
  }
  .at-web-hlavicka__jazyky a[aria-current='true'] {
    color: var(--at-on-bar);
    font-weight: var(--at-font-weight-semibold);
    text-decoration: underline;
    text-decoration-thickness: var(--at-border-focus);
    text-underline-offset: 0.3em;
  }
  /* Volba motivu: nativní výběr s trvale čitelným názvem vybrané možnosti. */
  .at-web-hlavicka__motiv {
    position: relative;
    display: inline-flex;
    align-items: center;
  }
  .at-web-hlavicka__motiv select {
    appearance: none;
    min-block-size: var(--at-control-height);
    padding-block: 0;
    padding-inline: var(--at-space-3) calc(var(--at-space-3) + 1.25em);
    border: var(--at-border-rule) solid var(--at-bar-field-border);
    border-radius: var(--at-radius-control);
    background: var(--at-bar-field);
    color: var(--at-on-bar);
    font-size: var(--at-font-size-small);
    font-stretch: var(--at-stretch-control);
    cursor: pointer;
  }
  .at-web-hlavicka__motiv .at-icon {
    position: absolute;
    inset-inline-end: var(--at-space-2);
    color: var(--at-bar-muted);
    pointer-events: none;
  }
  /* Jediná akce hlavičky a tlačítko nabídky mají barvy lišty, ne akcent oblasti. */
  .at-web-hlavicka__akce,
  .at-web-hlavicka__menu {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--at-space-2);
    min-block-size: var(--at-control-height);
    padding-inline: var(--at-space-4);
    border: var(--at-border-rule) solid var(--at-bar-field-border);
    border-radius: var(--at-radius-control);
    background: transparent;
    color: var(--at-on-bar);
    font-size: var(--at-font-size-table);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-control);
    line-height: var(--at-line-height-tight);
    text-decoration: none;
    white-space: nowrap;
  }
  .at-web-hlavicka__akce:hover,
  .at-web-hlavicka__menu:hover,
  .at-web-hlavicka__menu[aria-expanded='true'] {
    background: var(--at-bar-field);
  }
  .at-web-hlavicka__menu {
    display: none;
  }

  /* Úzká hlavička: nabídka pod pojmenovaným tlačítkem jako vložený panel. Otevřený stav
     nese aria-expanded tlačítka; Esc, zavření a návrat fokusu obstará dist/ovladani.js. Bez
     skriptu (html bez data-at-ovladani) je panel vidět stále a tlačítko se nekreslí. */
  @container at-web-hlavicka (width < 64rem) {
    .at-web-hlavicka__vnitrek {
      flex-wrap: wrap;
      column-gap: var(--at-space-3);
    }
    /* Řádek s názvem a tlačítkem drží výšku lišty i při otevřeném panelu. */
    .at-web-hlavicka__produkt {
      min-block-size: calc(var(--at-control-height) + var(--at-space-5));
    }
    :root[data-at-ovladani] .at-web-hlavicka__menu {
      display: inline-flex;
      margin-inline-start: auto;
    }
    .at-web-hlavicka__panel {
      flex: 1 0 100%;
      flex-direction: column;
      align-items: stretch;
      gap: var(--at-space-4);
      padding-block: var(--at-space-2) var(--at-space-5);
      border-block-start: var(--at-border-rule) solid var(--at-bar-rule);
    }
    :root[data-at-ovladani] .at-web-hlavicka__menu[aria-expanded='false'] + .at-web-hlavicka__panel {
      display: none;
    }
    .at-web-hlavicka__nav ul {
      flex: 1;
      flex-direction: column;
      gap: 0;
    }
    .at-web-hlavicka__nav a {
      flex: 1;
      min-block-size: var(--at-touch-target);
      margin-block-end: 0;
      border-block-end: 0;
      border-inline-start: var(--at-bar-edge) solid transparent;
    }
    .at-web-hlavicka__nav a[aria-current='page'] {
      border-inline-start-color: var(--at-on-bar);
      font-weight: var(--at-font-weight-semibold);
    }
    .at-web-hlavicka__volby {
      flex-wrap: wrap;
      justify-content: space-between;
      margin-inline-start: 0;
    }
    .at-web-hlavicka__akce {
      flex: 1 0 100%;
      min-block-size: var(--at-touch-target);
    }
  }

  /* ---------- Úvod (první viewport) ---------- */
  /* Žádný velký nadpis vedle makety: nahoře jedna věcná věta střední velikosti jedním řezem
     a jednou barvou (název produktu nese hlavička; tučný název s šedým pokračováním věty je
     šablonový vzorec), pod ní přes celou šířku blok důkazu se skutečným vstupem a výstupem
     a teprve pod ním akce. Perex pod nadpisem je nepovinný a má velikost běžného textu. */
  .at-uvod {
    /* Rytmus mezi větou, důkazem a akcemi podle vzhledu: Dílna hustší, Atomys vzdušnější. */
    --_uvod-mezera: max(var(--at-space-5), var(--at-panel-gap, 0rem));
    container: at-uvod / inline-size;
    padding-block: var(--at-space-8);
    padding-inline: max(var(--at-layout-gutter), calc((100% - var(--at-layout-page-max)) / 2));
  }
  .at-uvod__hlava {
    max-inline-size: var(--at-layout-text-max);
    margin: 0 0 var(--_uvod-mezera);
  }
  .at-uvod__nadpis {
    margin: 0;
    color: var(--at-ink);
    font-size: var(--at-font-size-h2);
    font-weight: var(--at-heading-weight);
    line-height: var(--at-line-height-heading);
    text-wrap: pretty;
  }
  .at-uvod__perex {
    margin: var(--at-space-3) 0 0;
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-text);
  }
  @container at-uvod (width >= 48rem) {
    .at-uvod__nadpis {
      font-size: var(--at-font-size-h1);
    }
  }
  .at-uvod__akce {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-3) var(--at-space-6);
    margin-block-start: var(--_uvod-mezera);
  }
  .at-uvod__akce > .at-btn {
    min-block-size: var(--at-touch-target);
    padding-inline: var(--at-space-5);
  }
  /* Nejvýše jedna vedlejší akce: textový odkaz s cílem aspoň výšky ovladače. */
  .at-uvod__akce > a:not(.at-btn) {
    display: inline-flex;
    align-items: center;
    min-block-size: var(--at-control-height);
    font-weight: var(--at-font-weight-medium);
  }
  .at-uvod__poznamka {
    max-inline-size: var(--at-layout-text-max);
    margin: var(--at-space-3) 0 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }
  @container at-uvod (width < 26rem) {
    .at-uvod__akce > .at-btn {
      flex: 1 1 100%;
    }
  }

  /* ---------- Sekce webu ---------- */
  /* Sekce oddělují linky, ne střídavé pruhy pozadí. Linka nese oddělení, mezera nad a pod ní
     je proto střídmá (--at-layout-section-space, nejvýš 3 rem). Obsah v mřížce stránky. */
  .at-web-sekce {
    padding-block: var(--at-layout-section-space);
    padding-inline: max(var(--at-layout-gutter), calc((100% - var(--at-layout-page-max)) / 2));
    border-block-start: var(--at-border-rule) solid var(--_web-linka, var(--at-rule));
  }
  .at-web-sekce__hlava {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--at-space-2) var(--at-space-6);
    margin-block-end: var(--at-space-6);
  }
  .at-web-sekce__hlava > :is(h2, h3) {
    margin: 0;
    font-size: var(--at-font-size-h2);
  }
  .at-web-sekce__hlava > p {
    flex: 1 1 20rem;
    max-inline-size: var(--at-layout-text-max);
    margin: 0;
    color: var(--at-ink-soft);
  }

  /* ---------- Rejstřík nástrojů ---------- */
  /* Tabulka .at-table: řádek na nástroj, sloupce Nástroj, Vstup a Výstup. Záhlaví má podobu
     datové tabulky vzhledu. Na úzké ploše se řádek složí (nástroj přes celou šířku, Vstup a
     Výstup vedle sebe) a popisky sloupců se ukážou u hodnot z atributu data-popisek. Popisek je
     i v přístupném textu, takže hodnota nezůstane bez popisku ani v prohlížeči, který při
     složení řádku ztratí sémantiku tabulky.
     Odkaz na nástroj je v barvě ink s podtržením jako každý odkaz v datové tabulce. */
  .at-rejstrik {
    container: at-rejstrik / inline-size;
  }
  .at-rejstrik > .at-table {
    background: transparent;
    font-size: var(--at-font-size-text);
  }
  .at-rejstrik > .at-table thead th:first-child {
    inline-size: 50%;
  }
  .at-rejstrik > .at-table tbody > tr > :is(th, td) {
    block-size: auto;
    padding-block: var(--at-space-4);
    vertical-align: top;
  }
  .at-rejstrik > .at-table tbody th {
    font-weight: var(--at-font-weight-regular);
  }
  .at-rejstrik__nazev {
    position: relative;
    color: var(--at-ink);
    font-size: var(--at-font-size-h3);
    font-weight: var(--at-font-weight-semibold);
    overflow-wrap: anywhere;
  }
  /* Cíl odkazu aspoň --at-control-height i u jednoho řádku textu. */
  .at-rejstrik__nazev::after {
    content: '';
    position: absolute;
    inset: 50% auto auto 50%;
    inline-size: 100%;
    block-size: max(100%, var(--at-control-height));
    translate: -50% -50%;
  }
  .at-rejstrik__popis {
    display: block;
    max-inline-size: var(--at-layout-text-max);
    margin-block-start: var(--at-space-1);
    color: var(--at-ink-soft);
  }
  /* Nástroj, který ještě neběží: bez odkazu, stav textem. */
  .at-rejstrik__stav {
    display: block;
    margin-block-start: var(--at-space-1);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-medium);
  }
  @container at-rejstrik (width < 40rem) {
    .at-rejstrik > .at-table thead {
      position: absolute;
      inline-size: 1px;
      block-size: 1px;
      overflow: hidden;
      clip-path: inset(50%);
      white-space: nowrap;
    }
    .at-rejstrik > .at-table tbody > tr {
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: var(--at-space-3) var(--at-space-4);
      padding-block: var(--at-space-4);
      border-block-end: var(--at-border-rule) solid var(--at-rule);
    }
    .at-rejstrik > .at-table tbody > tr > :is(th, td) {
      display: block;
      padding: 0;
      border: 0;
    }
    .at-rejstrik > .at-table tbody > tr > th {
      grid-column: 1 / -1;
    }
    /* Popisek sloupce v podobě záhlaví tabulky (řez, šířka a velikost písmen vzhledu). */
    .at-rejstrik > .at-table tbody > tr > td::before {
      content: attr(data-popisek);
      display: block;
      margin-block-end: var(--at-space-1);
      color: var(--at-ink);
      font-size: var(--at-font-size-small);
      font-weight: var(--at-font-weight-semibold);
      font-stretch: var(--at-stretch-label);
      letter-spacing: var(--at-label-tracking);
      text-transform: var(--at-label-case);
    }
  }

  /* ---------- Postup ---------- */
  /* Obyčejný číslovaný seznam v textové šířce, tam kde pořadí je obsahem (převzetí, objednání
     servisu). Žádné sloupce stejných kroků s velkou číslicí a linkou nad každým: to je šablonový
     blok „Jak to funguje“. Postup, který ukazuje už důkaz nahoře, se na web nedává znovu. */
  .at-kroky {
    max-inline-size: var(--at-layout-text-max);
    margin: 0;
    padding-inline-start: 1.5em;
    list-style: decimal;
  }
  .at-kroky__krok {
    min-inline-size: 0;
    padding-inline-start: var(--at-space-1);
  }
  .at-kroky__krok + .at-kroky__krok {
    margin-block-start: var(--at-space-4);
  }
  .at-kroky__krok::marker {
    color: var(--at-ink);
    font-weight: var(--at-font-weight-semibold);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-kroky__nazev {
    margin: 0 0 var(--at-space-1);
    font-size: var(--at-font-size-h4);
  }
  .at-kroky__popis {
    margin: 0;
    color: var(--at-ink-soft);
  }
  .at-kroky__udaj {
    display: block;
    margin-block-start: var(--at-space-1);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-variant-numeric: tabular-nums lining-nums;
  }

  /* ---------- Blok důkazu: skutečný vstup a výstup ---------- */
  /* <figure class="at-dukaz"> hlava, .at-dukaz__kroky se dvěma .at-dukaz__krok (Vstup,
     Výstup), .at-dukaz__kontrola s větou o výsledku a volitelně tiráž. Na široké ploše stojí
     vstup a výstup vedle sebe, jinak pod sebou; pořadí v HTML je pořadí čtení. */
  .at-dukaz {
    container: at-dukaz / inline-size;
    margin: 0;
    overflow: clip;
    border: var(--at-border-rule) solid var(--at-rule-strong);
    border-radius: var(--at-radius-surface);
    background: var(--_web-plocha, var(--at-surface-1));
    color: var(--at-ink);
  }
  .at-dukaz[aria-busy='true'] {
    cursor: progress;
  }
  .at-dukaz__hlava {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--at-space-2) var(--at-space-4);
    padding: var(--at-space-3) var(--at-space-5);
    border-block-end: var(--at-border-rule) solid var(--at-rule);
  }
  .at-dukaz__nadpis {
    margin: 0;
    font-size: var(--at-font-size-h4);
  }
  .at-dukaz__kroky {
    display: grid;
  }
  .at-dukaz__krok {
    min-inline-size: 0;
    padding: var(--at-space-4) var(--at-space-5) var(--at-space-5);
  }
  .at-dukaz__krok + .at-dukaz__krok {
    border-block-start: var(--at-border-rule) solid var(--at-rule);
  }
  @container at-dukaz (width >= 64rem) {
    .at-dukaz__kroky {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .at-dukaz__krok + .at-dukaz__krok {
      border-block-start: 0;
      border-inline-start: var(--at-border-rule) solid var(--at-rule);
    }
  }
  /* Role Vstup / Výstup je prostý tučný popisek, ne destička ani verzálky. */
  .at-dukaz__popisek {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--at-space-1) var(--at-space-3);
    margin: 0 0 var(--at-space-3);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
  }
  .at-dukaz__role {
    color: var(--at-ink);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-semibold);
  }
  /* Posuvná oblast pro široký obsah; v HTML má tabindex="0", roli region a název. Tabulky
     v důkazu mají .at-table--skladana, takže se na úzké ploše složí po záznamech a do stran se
     neposouvají (popisky sloupců z data-popisek). */
  .at-dukaz__obsah {
    overflow-x: auto;
    overscroll-behavior-inline: contain;
  }
  @container at-dukaz (width < 40rem) {
    .at-dukaz__papir .at-table--skladana > tbody > tr {
      padding-inline: 0;
    }
    /* Názvy polí souboru jsou identifikátory: popisek v Mono, jak je v souboru. */
    .at-dukaz__krok > .at-dukaz__obsah .at-table--skladana > tbody > tr > [data-popisek]::before {
      font-family: var(--at-font-data);
      letter-spacing: 0;
      text-transform: none;
    }
  }
  /* Výstup jako datová tabulka .at-table (30-data.css), v důkazu jen menší a nižší. */
  .at-dukaz .at-table {
    background: transparent;
    font-size: var(--at-font-size-small);
  }
  .at-dukaz .at-table :is(thead, tbody, tfoot) > tr > :is(td, th) {
    padding-inline: var(--at-space-2);
  }
  .at-dukaz .at-table :is(tbody, tfoot) > tr > :is(td, th) {
    block-size: auto;
    padding-block: var(--at-space-2);
    vertical-align: top;
  }
  /* Název sloupce souboru (kod, cena_bez_dph) je identifikátor: Mono, jak je v souboru. */
  .at-dukaz__pole {
    font-family: var(--at-font-data);
    font-weight: var(--at-font-weight-medium);
    letter-spacing: 0;
    text-transform: none;
  }

  /* Vstup, který je tiskovým výstupem (PDF, sken dokladu): bílý papír i v tmavém motivu.
     color-scheme: light přepne tokeny uvnitř na světlé hodnoty. Bez ořezových značek
     a jiných tiskových ozdob. */
  .at-dukaz__papir {
    color-scheme: light;
    max-inline-size: 46rem;
    padding: var(--at-space-4) var(--at-space-5);
    border: var(--at-border-rule) solid var(--at-rule-strong);
    background: var(--at-surface-1);
    color: var(--at-ink);
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-label);
  }
  .at-dukaz__papir-hlava {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: var(--at-space-2) var(--at-space-6);
    margin-block-end: var(--at-space-3);
  }
  .at-dukaz__papir-hlava > p {
    margin: 0;
  }
  .at-dukaz__papir table {
    inline-size: 100%;
    margin: 0;
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-dukaz__papir :is(th, td) {
    padding: var(--at-space-1) var(--at-space-2);
    border-block-end: var(--at-border-rule) solid var(--at-rule);
    text-align: start;
    vertical-align: top;
  }
  .at-dukaz__papir :is(th, td):first-child {
    padding-inline-start: 0;
  }
  .at-dukaz__papir :is(th, td):last-child {
    padding-inline-end: 0;
  }
  .at-dukaz__papir thead th {
    border-block-end-color: var(--at-ink);
    color: var(--at-ink-soft);
    font-weight: var(--at-font-weight-semibold);
    white-space: nowrap;
  }
  .at-dukaz__papir .at-num {
    text-align: end;
  }
  .at-dukaz__papir-souhrn {
    margin: var(--at-space-2) 0 0;
    text-align: end;
  }

  /* Výpis souboru (XML, CSV): strojová data v Mono. Nezalamuje se, na úzké ploše se posouvá;
     číslo řádku se nekopíruje. Výpis je detail pod důkazem, ne první věc stránky. */
  .at-dukaz__vypis {
    margin: 0;
    padding: var(--at-space-2) var(--at-space-3);
    overflow-x: auto;
    border: var(--at-border-rule) solid var(--at-rule);
    border-radius: var(--at-radius-control);
    background: var(--_web-studna, var(--at-surface-2));
    color: var(--at-ink);
    font-family: var(--at-font-data);
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-body);
    white-space: pre;
    tab-size: 2;
  }
  /* Výpis po řádcích: všechny řádky jsou široké jako nejdelší, takže podklad nálezu vede
     přes celou posouvanou šířku. */
  .at-dukaz__vypis:has(> .at-dukaz__radek) {
    display: grid;
    grid-template-columns: minmax(100%, max-content);
  }
  .at-dukaz__radek {
    display: block;
  }
  .at-dukaz__cislo {
    display: inline-block;
    inline-size: 4ch;
    color: var(--at-muted);
    font-variant-numeric: tabular-nums;
    user-select: none;
  }
  /* Řádek s nálezem: podklad tónu chyby a vedle něj vždy text nálezu. Barevný levý pruh
     nemá, ten patří jen výjimkám v bloku „Vyžaduje pozornost“. */
  .at-dukaz__vypis mark.at-dukaz__radek {
    margin-inline: calc(var(--at-space-3) * -1);
    padding-inline: var(--at-space-3);
    background: var(--at-danger-soft);
    color: var(--at-ink);
  }
  .at-dukaz__nalez {
    margin-inline-start: var(--at-space-3);
    color: var(--at-danger);
    font-family: var(--at-font-ui);
    font-weight: var(--at-font-weight-semibold);
  }
  /* Hodnota doplněná převodem: podtržená, podklad akcentu jako „vybráno“. */
  .at-dukaz__vypis ins {
    background: var(--at-accent-soft);
    color: var(--at-accent-text);
    text-decoration-line: underline;
    text-decoration-thickness: var(--at-border-focus);
    text-underline-offset: 0.2em;
  }
  .at-dukaz__vypis del {
    color: var(--at-danger);
    text-decoration-thickness: var(--at-border-focus);
  }
  /* Výsledek kontroly pod vstupem a výstupem: ikona tónu a věta s čísly, bez levého pruhu. */
  .at-dukaz__kontrola {
    display: flex;
    align-items: flex-start;
    gap: var(--at-space-2);
    margin: 0;
    padding: var(--at-space-3) var(--at-space-5);
    border-block-start: var(--at-border-rule) solid var(--at-rule);
    color: var(--at-ink);
    font-weight: var(--at-font-weight-medium);
  }
  .at-dukaz__kontrola .at-icon {
    flex: none;
    margin-block-start: 0.15em;
    color: var(--at-info);
  }
  .at-dukaz__kontrola--uspech .at-icon {
    color: var(--at-success);
  }
  .at-dukaz__kontrola--chyba .at-icon {
    color: var(--at-danger);
  }
  .at-dukaz__prazdny {
    margin: 0;
    padding: var(--at-space-4);
    border: var(--at-border-rule) dashed var(--at-rule-strong);
    border-radius: var(--at-radius-control);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
  }
  .at-dukaz__tiraz {
    padding: var(--at-space-2) var(--at-space-5) var(--at-space-3);
    border-block-start: var(--at-border-rule) solid var(--at-rule);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }

  /* ---------- Ceník jako tabulka ---------- */
  .at-cenik {
    overflow-x: auto;
    border: var(--at-border-rule) solid var(--at-rule);
    border-radius: var(--at-radius-surface);
    background: var(--_web-plocha, var(--at-surface-1));
  }
  /* Tabulka je .at-table (30-data.css): záhlaví a linky mají stejnou podobu jako datové
     tabulky daného vzhledu. Ceník jen rozšíří buňky a zarovná je nahoru. */
  .at-cenik .at-table {
    min-inline-size: 36rem;
    background: transparent;
    font-size: var(--at-font-size-text);
  }
  .at-cenik .at-table :is(thead, tbody, tfoot) > tr > :is(th, td) {
    block-size: auto;
    padding: var(--at-space-3) var(--at-space-4);
    vertical-align: top;
  }
  .at-cenik .at-table thead > tr > th {
    font-size: var(--at-font-size-text);
    vertical-align: bottom;
  }
  .at-cenik .at-table tbody th {
    color: var(--at-ink-soft);
    font-weight: var(--at-font-weight-regular);
  }
  .at-cenik .at-table tfoot > tr > :is(th, td) {
    border-block-start: 0;
    font-weight: var(--at-font-weight-regular);
  }
  .at-cenik__cena {
    display: block;
    color: var(--at-ink);
    font-size: var(--at-font-size-h2);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
    line-height: var(--at-line-height-tight);
    white-space: nowrap;
  }
  .at-cenik__obdobi {
    display: block;
    margin-block-start: var(--at-space-1);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }
  .at-cenik__ne {
    color: var(--at-muted);
  }
  /* Tarif, který uživatel má: linka akcentu nad sloupcem a text „Váš tarif“. */
  .at-cenik .at-table thead th[aria-current='true'] {
    border-block-start: var(--at-bar-edge) solid var(--at-accent-text);
  }
  /* Text je v barvě záhlaví: v Dílně je záhlaví tmavé a akcent by na něm nebyl čitelný. */
  .at-cenik__stav {
    display: block;
    color: inherit;
    font-weight: var(--at-font-weight-regular);
    font-size: var(--at-font-size-small);
    letter-spacing: 0;
    text-transform: none;
  }

  /* ---------- Časté otázky ---------- */
  .at-faq {
    margin: 0;
    border-block-start: var(--at-border-rule) solid var(--_web-linka, var(--at-rule));
  }
  .at-faq__polozka {
    border-block-end: var(--at-border-rule) solid var(--_web-linka, var(--at-rule));
  }
  .at-faq__otazka {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--at-space-4);
    min-block-size: var(--at-touch-target);
    padding-block: var(--at-space-3);
    font-size: var(--at-font-size-h4);
    font-weight: var(--at-font-weight-semibold);
    list-style: none;
    cursor: pointer;
  }
  .at-faq__otazka::-webkit-details-marker {
    display: none;
  }
  .at-faq__otazka:hover {
    text-decoration: underline;
    text-underline-offset: 0.2em;
  }
  .at-faq__otazka .at-icon {
    flex: none;
    color: var(--at-muted);
    transition: transform var(--at-motion-fast) var(--at-motion-ease);
  }
  .at-faq__polozka[open] > .at-faq__otazka .at-icon {
    transform: rotate(180deg);
  }
  .at-faq__odpoved {
    max-inline-size: var(--at-layout-text-max);
    padding-block-end: var(--at-space-4);
    color: var(--at-ink-soft);
  }
  .at-faq__odpoved > :last-child {
    margin-block-end: 0;
  }

  /* ---------- Patička s tiráží ---------- */
  /* Povinná na každé stránce webu: provozovatel s IČO a sídlem, ověření pravidel s datem,
     podmínky a jediné místo pro značku Atomys, plochou a jednobarevnou v barvě textu (lockup
     s gradientem a září patří jen na prezentační plochy značky). V tmavém motivu je patička
     o stupeň tmavší pás.
       <div class="at-paticka__znacka"><span>Služba skupiny</span>
         <a href="…"><svg class="at-paticka__logo" viewBox="21 34 1707 293" role="img"
           aria-label="Atomys"><use href="…/atomys-lockup-plochy.svg#znacka"></use></svg></a></div> */
  .at-paticka {
    container: at-paticka / inline-size;
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    gap: var(--at-space-6) var(--at-space-10);
    padding-block: var(--at-space-8) var(--at-space-10);
    padding-inline: max(var(--at-layout-gutter), calc((100% - var(--at-layout-page-max)) / 2));
    border-block-start: var(--at-border-rule) solid var(--_web-linka, var(--at-rule));
    background: var(--_web-pas, transparent);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
  }
  .at-paticka p {
    margin: 0 0 var(--at-space-2);
  }
  .at-paticka__tiraz {
    flex: 2 1 24rem;
    min-inline-size: 0;
  }
  .at-paticka__produkt {
    color: var(--at-ink);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-semibold);
  }
  .at-paticka__overeni {
    display: flex;
    align-items: flex-start;
    gap: var(--at-space-2);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-paticka__overeni .at-icon {
    flex: none;
    margin-block-start: 0.15em;
    color: var(--at-success);
  }
  .at-paticka__odkazy {
    flex: 1 1 12rem;
  }
  .at-paticka__odkazy ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .at-paticka__odkazy a {
    display: inline-flex;
    align-items: center;
    min-block-size: var(--at-control-height);
    color: var(--at-ink-soft);
  }
  .at-paticka__znacka {
    display: flex;
    flex: 0 1 auto;
    flex-direction: column;
    gap: var(--at-space-2);
    margin-inline-start: auto;
  }
  .at-paticka__znacka a {
    display: block;
  }
  .at-paticka__logo {
    display: block;
    inline-size: 9rem;
    max-inline-size: 100%;
    block-size: auto;
    aspect-ratio: 1707 / 293;
    color: var(--at-ink);
    fill: currentColor;
  }
  /* Když se lockup zalomí pod tiráž, zůstane vlevo pod ní. */
  @container at-paticka (width < 64rem) {
    .at-paticka__znacka {
      margin-inline-start: 0;
    }
  }

  /* ---------- Vysoký kontrast ---------- */
  @media (forced-colors: active) {
    .at-dukaz__vypis mark.at-dukaz__radek {
      outline: var(--at-border-rule) solid;
    }
  }
}

/* Doklad a jeho kontrola (upravisdoc, upravpdf, mojefaktura)
 *
 * .at-doklad          list dokladu; na obrazovce sleduje motiv, v tisku je bílý papír A4
 * .at-doklad--nahled  náhled tiskového výstupu (PDF): bílý papír ve vzhledu Tiskopis i v tmavém motivu
 * .at-popisove-pole   údaje jen ke čtení v buňkách s popiskem v rohu (metadata souboru podle ISO 7200)
 * .at-razitko         auditní událost s datem a osobou, jen když odpovídá stavu
 * .at-korektura       číslo nálezu na místě chyby (v buňce dokladu, v řádku XML) i v seznamu
 * .at-korektury       seznam nálezů: Místo, Proč, Náprava, řádek zdroje a akce s konkrétní hodnotou
 * .at-rekapitulace    rekapitulace DPH po sazbách
 * .at-souhrn          Celkem k úhradě
 * .at-kod-obrazovky   kód obrazovky pro hotline, kopírovatelný
 * .at-qr              obal QR Platby (kód SPAYD generuje server)
 *
 * List dokladu je na obrazovce plocha surface-1 a v tmavém motivu zůstává tmavý: obrazovka
 * ukazuje vytěžená data, ne tiskový výstup, a bílý list v tmavém rozhraní oslňuje. Bílý papír
 * má náhled tiskového výstupu a tisk. Tiskový výstup vidí třetí strana, proto nepřebírá volbu
 * prohlížejícího: náhled nese vzhled Tiskopis a světlý motiv atributy, stejně ve všech vzhledech.
 *   <article class="at-doklad at-doklad--nahled" data-vzhled="tiskopis" data-theme="light">
 * Samotná třída přepne color-scheme na light (tokeny v light-dark() pak dají světlé hodnoty),
 * atribut data-vzhled vrátí neutrály, linky a akcent Tiskopisu i ve vzhledu Dílna a Atomys.
 *
 * Jedna komponenta korektury pro všechny vzhledy. Značka má tvar rámečku se zaoblením
 * --at-radius-control (Tiskopis 2 px, Dílna 0, Atomys 4 px), jiné rozdíly mezi vzhledy nemá.
 * Poznámka korektury nemá barevný levý pruh (ten patří jen bloku „Vyžaduje pozornost“).
 *
 * Spoléhá na: .at-icon a .at-btn (10-ovladani.css), .at-sr-only, .at-data, .at-nowrap (zaklad.css).
 * Údaje dokladu kreslí .at-tiskopis (20-formulare.css), položky .at-table (30-data.css).
 */
@layer atomys.komponenty {
  /* ---------- List dokladu ---------- */

  /* List je samostatný objekt (karta podle pravidel), proto má rám ve všech vzhledech. */
  .at-doklad {
    container: at-doklad / inline-size;
    padding: var(--at-space-5);
    border: var(--at-border-rule) solid var(--at-rule);
    border-radius: var(--at-radius-surface);
    background: var(--at-surface-1);
    color: var(--at-ink);
  }

  /* Náhled tiskového výstupu: bílý list A4 i v tmavém motivu (viz úvod souboru). */
  .at-doklad--nahled {
    color-scheme: light;
    inline-size: 100%;
    max-inline-size: 52rem;
    aspect-ratio: 210 / 297;
    padding: var(--at-space-10) var(--at-space-10) var(--at-space-8);
    border-color: var(--at-rule-strong);
    border-radius: 0;
  }

  .at-doklad__hlava {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--at-space-1) var(--at-space-4);
    margin-block-end: var(--at-space-3);
  }
  * + .at-doklad__hlava {
    margin-block-start: var(--at-space-6);
  }
  .at-doklad__nazev {
    margin: 0;
    font-size: var(--at-font-size-h3);
  }
  .at-doklad__meta {
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }

  /* Závěr listu: poznámka nebo QR Platba vlevo, rekapitulace a souhrn vpravo. */
  .at-doklad__zaver {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--at-space-5) var(--at-space-8);
    margin-block-start: var(--at-space-5);
  }
  .at-doklad__zaver > * {
    flex: 1 1 14rem;
    min-inline-size: 0;
  }
  /* Rekapitulace se čtyřmi sloupci se na nejužším displeji raději posune, než aby se čísla slila. */
  .at-doklad__zaver > .at-doklad__soucty {
    flex: 0 1 26rem;
    overflow-x: auto;
  }
  .at-doklad__poznamka {
    margin: 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }

  @container at-doklad (max-width: 36rem) {
    .at-doklad__zaver > .at-doklad__soucty {
      flex-basis: 100%;
    }
  }
  /* Na telefonu náhled nedrží poměr A4, jinak by pod obsahem zůstal prázdný papír. */
  @media (max-width: 40rem) {
    .at-doklad,
    .at-doklad--nahled {
      padding: var(--at-space-3);
    }
    .at-doklad--nahled {
      aspect-ratio: auto;
    }
  }

  /* ---------- Popisové pole: buňky s popiskem v rohu ---------- */

  /* Rám a mřížka: rám drží kontejner, buňky kreslí linku nahoře a vlevo a o její šířku přesahují,
     takže krajní linky schová rám (overflow: hidden) a vnitřní linky se nezdvojí. Barvy dávají
     tokeny --at-grid-frame a --at-grid-rule (Tiskopis rám inkoustem jako rohové razítko výkresu
     a mřížka ruleStrong). V těle panelu, který kreslí vlastní rám, se vnější rám vypne
     (--at-nested-frame, 40-rozvrzeni.css). */
  .at-popisove-pole {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    overflow: hidden;
    border: var(--at-border-rule) solid var(--at-grid-frame);
    border-radius: var(--at-radius-control);
    background: var(--at-surface-1);
    color: var(--at-ink);
  }
  .at-popisove-pole__bunka {
    position: relative;
    min-inline-size: 0;
    margin-block-start: calc(var(--at-border-rule) * -1);
    margin-inline-start: calc(var(--at-border-rule) * -1);
    padding: var(--at-space-1) var(--at-space-3) var(--at-space-2);
    border-block-start: var(--at-border-rule) solid var(--at-grid-rule);
    border-inline-start: var(--at-border-rule) solid var(--at-grid-rule);
  }
  .at-popisove-pole__bunka--pul {
    grid-column: span 2;
  }
  .at-popisove-pole__bunka--cela {
    grid-column: 1 / -1;
  }
  .at-popisove-pole__bunka--dve-radky {
    grid-row: span 2;
  }
  .at-popisove-pole__bunka > dt {
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-stretch: var(--at-stretch-label);
    font-weight: var(--at-font-weight-medium);
    line-height: var(--at-line-height-tight);
  }
  .at-popisove-pole__bunka > dd {
    margin: var(--at-space-1) 0 0;
    font-size: var(--at-font-size-table);
    line-height: var(--at-line-height-heading);
    font-variant-numeric: tabular-nums lining-nums;
    overflow-wrap: anywhere;
  }
  .at-popisove-pole__nazev {
    font-weight: var(--at-font-weight-semibold);
  }
  /* Chybějící údaj: text „neuvedeno“ nebo „chybí“ tlumeně, nikdy prázdná buňka. */
  .at-popisove-pole__bunka--prazdna > dd {
    color: var(--at-muted);
  }
  /* Chybný údaj: rámeček uvnitř buňky, text v barvě chyby a korekturní značka v hodnotě. */
  .at-popisove-pole__bunka--chyba {
    z-index: 1;
    outline: calc(var(--at-border-rule) * 2) solid var(--at-danger);
    outline-offset: calc(var(--at-border-rule) * -3);
  }
  .at-popisove-pole__bunka--chyba > dd {
    color: var(--at-danger);
  }
  .at-popisove-pole__bunka > dd > .at-razitko {
    margin-block: var(--at-space-1);
  }

  @media (max-width: 40rem) {
    .at-popisove-pole {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .at-popisove-pole__bunka--pul {
      grid-column: 1 / -1;
    }
  }

  /* ---------- Razítko: auditní událost s datem a osobou ----------
   * Jen u auditní události a jen tehdy, když odpovídá stavu: kontrola bez chyb, schválení,
   * storno. U kontroly s chybami se razítko nedává, stav nese věta („Kontrola 25. 9. 2026
   * 10:42 · 2 chyby“, štítek .at-stav--chyba z 30-data.css). Na náhledu tiskového výstupu
   * razítko není, doklad nese vlastní údaje (Vystaveno, Splatnost).
   * Barva podle stavového slovníku, modifikátory stejné jako u .at-stav: --uspech = hotovo
   * (zkontrolováno bez chyb, schváleno), --chyba = problém (stornováno), bez modifikátoru záznam
   * bez hodnocení (přijato, předáno). Stav vždy nese i slovo události.
   * <span class="at-razitko at-razitko--uspech"><span class="at-razitko__udalost">Zkontrolováno</span>
   *   <span class="at-razitko__udaj"><time datetime="2026-09-25T10:42">25. 9. 2026 10:42</time>, L. H.</span></span> */

  /* Plný rám a vnější tenká linka, bez textury, rozpití a natočení. Malá písmena jako
     všechny stavové štítky (verzálky jsou jen v záhlaví tabulky Dílny). */
  .at-razitko {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    max-inline-size: 16rem;
    margin: calc(var(--at-border-rule) * 3);
    padding: var(--at-space-1) var(--at-space-3);
    border: calc(var(--at-border-rule) * 2) solid currentColor;
    border-radius: var(--at-radius-control);
    outline: var(--at-border-rule) solid currentColor;
    outline-offset: calc(var(--at-border-rule) * 2);
    color: var(--at-ink-soft);
    line-height: var(--at-line-height-tight);
    text-align: center;
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-razitko--uspech {
    color: var(--at-success);
  }
  .at-razitko--chyba {
    color: var(--at-danger);
  }
  .at-razitko__udalost {
    font-size: var(--at-font-size-text);
    font-stretch: var(--at-stretch-label);
    font-weight: var(--at-font-weight-semibold);
  }
  .at-razitko__udaj {
    font-size: var(--at-font-size-small);
    font-stretch: var(--at-stretch-number);
    font-weight: var(--at-font-weight-medium);
  }
  .at-razitko abbr[title] {
    text-decoration: none;
  }

  /* ---------- Korekturní značka ----------
   * Číslo nálezu. Na místě chyby je to odkaz na poznámku v seznamu (<a class="at-korektura"
   * href="#korektura-2">), v seznamu a v řádku XML prostý <span>. Písmo --at-font-size-small
   * roste s hustotou. Tón: bez modifikátoru chyba, --varovani a --uspech (opraveno) jako
   * ve slovníku stavů. */

  .at-korektura {
    position: relative;
    display: inline-grid;
    place-items: center;
    min-inline-size: 1.5em;
    block-size: 1.5em;
    margin-inline: 0.2em 0.1em;
    padding-inline: 0.2em;
    border: calc(var(--at-border-rule) * 1.5) solid currentColor;
    border-radius: var(--at-radius-control);
    color: var(--at-danger);
    font-family: var(--at-font-ui);
    font-size: var(--at-font-size-small);
    font-stretch: var(--at-stretch-number);
    font-style: normal;
    font-variant-numeric: tabular-nums lining-nums;
    font-weight: var(--at-font-weight-semibold);
    line-height: 1;
    letter-spacing: 0;
    text-decoration: none;
    vertical-align: 0.3em;
  }
  .at-korektura--varovani {
    border-style: dashed;
    color: var(--at-warning);
  }
  .at-korektura--uspech {
    color: var(--at-success);
  }
  a.at-korektura:hover {
    background: color-mix(in srgb, currentColor 14%, transparent);
  }
  /* Cíl odkazu: značka v textu je malá, klepnutí proto chytá neviditelná plocha vysoká
     a široká jako ovladač v dané hustotě (36, 44 a v dotyku 52 px), na střed značky. */
  a.at-korektura::after {
    content: '';
    position: absolute;
    inset-block-start: 50%;
    inset-inline-start: 50%;
    inline-size: max(100%, var(--at-control-height));
    block-size: max(100%, var(--at-control-height));
    translate: -50% -50%;
  }

  /* ---------- Korektury: poznámky na okraji ---------- */

  /* Seznam je kontejner: v úzkém bočním sloupci (i na širokém monitoru) jdou popisky Místo,
     Proč a Náprava nad hodnotu, aby se XPath nelámal uprostřed slova. */
  .at-korektury {
    container: at-korektury / inline-size;
    margin: 0;
    padding: 0;
    list-style: none;
    border-block-start: var(--at-border-rule) solid var(--at-rule-strong);
  }
  .at-korektury__polozka {
    display: grid;
    grid-template-columns: 2em minmax(0, 1fr);
    column-gap: var(--at-space-3);
    padding: var(--at-space-4) var(--at-space-3);
    border-block-end: var(--at-border-rule) solid var(--at-rule);
    scroll-margin-block: var(--at-space-8);
  }
  .at-korektury__polozka > * {
    grid-column: 2;
  }
  .at-korektury__polozka > .at-korektura {
    grid-column: 1;
    grid-row: 1 / span 8;
    align-self: start;
    justify-self: start;
    min-inline-size: 1.75em;
    block-size: 1.75em;
    margin: 0;
    border-width: calc(var(--at-border-rule) * 2);
    font-size: var(--at-font-size-small);
    vertical-align: baseline;
  }
  /* Vybraná poznámka (skok ze značky v dokladu nebo aria-current z aplikace): plocha výběru
     a vyplněná značka, takže výběr nese i tvar. */
  .at-korektury__polozka:is(:target, [aria-current='true']) {
    background: var(--at-accent-soft);
  }
  .at-korektury__polozka:is(:target, [aria-current='true']) > .at-korektura {
    border-color: var(--at-danger);
    background: var(--at-danger);
    color: var(--at-surface-1);
  }
  .at-korektury__polozka:is(:target, [aria-current='true']) > .at-korektura--varovani {
    border-color: var(--at-warning);
    background: var(--at-warning);
  }
  .at-korektury__polozka:is(:target, [aria-current='true']) > .at-korektura--uspech {
    border-color: var(--at-success);
    background: var(--at-success);
  }

  .at-korektury__nadpis {
    margin: 0;
    font-size: var(--at-font-size-h4);
    line-height: var(--at-line-height-heading);
  }
  .at-korektury__udaje {
    display: grid;
    grid-template-columns: minmax(4.5rem, max-content) minmax(0, 1fr);
    gap: var(--at-space-1) var(--at-space-3);
    margin: var(--at-space-2) 0 0;
    font-size: var(--at-font-size-small);
  }
  .at-korektury__udaje dt {
    color: var(--at-muted);
    font-stretch: var(--at-stretch-label);
    font-weight: var(--at-font-weight-medium);
  }
  .at-korektury__udaje dd {
    min-inline-size: 0;
    margin: 0;
  }
  .at-korektury__udaje code {
    overflow-wrap: anywhere;
  }
  /* Místo nálezu je strojový údaj: XPath i číslo řádku písmem Mono.
     <dd class="at-korektury__misto">Invoice/<wbr>TaxPointDate, řádek 21</dd> */
  .at-korektury__misto {
    font-family: var(--at-font-data);
    font-size: 0.9375em;
    letter-spacing: 0;
    overflow-wrap: anywhere;
  }
  @container at-korektury (inline-size < 24rem) {
    .at-korektury__udaje {
      grid-template-columns: minmax(0, 1fr);
      row-gap: 0;
    }
    .at-korektury__udaje dd + dt {
      margin-block-start: var(--at-space-2);
    }
  }

  /* Řádek zdrojového XML: chybná hodnota přeškrtnutá, opravená dvakrát podtržená.
     Řádek se v úzkém sloupci zalamuje jako v editoru kódu (s visícím odsazením za číslem
     řádku), aby opravená hodnota nikdy nezmizela za okrajem. Chybná a opravená hodnota jsou
     nedělitelné celky: zlom mezi nimi ani uvnitř nich nesmí vytvořit zdánlivě jinou hodnotu
     („2026-09-312“ a „026-09-22“). Uvnitř značky se řádek zlomí jen tehdy, když se nevejde.
     position: relative drží skrytý text pro čtečky (.at-sr-only) uvnitř řádku, jinak by
     rozšířil stránku. */
  .at-korektury__xml {
    position: relative;
    margin: var(--at-space-3) 0 0;
    padding: var(--at-space-1) var(--at-space-3) var(--at-space-1) calc(var(--at-space-3) + 4ch);
    overflow-x: auto;
    border: var(--at-border-rule) solid var(--at-rule);
    border-radius: var(--at-radius-control);
    background: var(--at-surface-2);
    color: var(--at-ink-soft);
    font-family: var(--at-font-data);
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-body);
    text-indent: -4ch;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
  }
  .at-korektury__radek {
    display: inline-block;
    min-inline-size: 4ch;
    color: var(--at-muted);
    text-indent: 0;
    user-select: none;
  }
  .at-korektury__xml :is(del, ins) {
    display: inline-block;
    max-inline-size: 100%;
    text-indent: 0;
  }
  .at-korektury__xml del + ins {
    margin-inline-start: 1ch;
  }
  .at-korektury__xml del {
    color: var(--at-danger);
    text-decoration-line: line-through;
    text-decoration-thickness: calc(var(--at-border-rule) * 2);
  }
  .at-korektury__xml ins {
    color: var(--at-ink);
    text-decoration-line: underline;
    text-decoration-style: double;
    text-underline-offset: 0.25em;
  }
  .at-korektury__xml .at-korektura {
    text-indent: 0;
    vertical-align: 0.15em;
  }

  .at-korektury__akce {
    display: flex;
    flex-wrap: wrap;
    gap: var(--at-space-2);
    margin-block-start: var(--at-space-3);
  }
  .at-korektury__stav {
    display: flex;
    gap: var(--at-space-2);
    align-items: baseline;
    margin: var(--at-space-2) 0 0;
    color: var(--at-success);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-medium);
  }
  .at-korektury__stav > .at-icon {
    flex: none;
    align-self: center;
  }
  .at-korektury__prazdny {
    display: flex;
    gap: var(--at-space-2);
    align-items: baseline;
    margin: 0;
    padding: var(--at-space-4) var(--at-space-3);
    border-block-end: var(--at-border-rule) solid var(--at-rule);
    color: var(--at-ink-soft);
  }
  .at-korektury__prazdny > .at-icon {
    flex: none;
    align-self: center;
    color: var(--at-success);
  }

  /* ---------- Rekapitulace DPH ---------- */

  .at-rekapitulace {
    inline-size: 100%;
    font-size: var(--at-font-size-table);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-rekapitulace caption {
    padding-block-end: var(--at-space-2);
    color: var(--at-ink);
    font-weight: var(--at-font-weight-semibold);
    text-align: start;
  }
  .at-rekapitulace :is(th, td) {
    padding: var(--at-space-2) 0 var(--at-space-2) var(--at-space-4);
    text-align: end;
    vertical-align: baseline;
    white-space: nowrap;
  }
  .at-rekapitulace :is(th, td):first-child {
    padding-inline-start: 0;
    text-align: start;
    white-space: normal;
  }
  .at-rekapitulace thead th {
    padding-block: var(--at-space-1) var(--at-space-2);
    border-block-end: var(--at-border-rule) solid var(--at-rule-strong);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    font-stretch: var(--at-stretch-label);
    letter-spacing: var(--at-label-tracking);
    text-transform: var(--at-label-case);
    vertical-align: bottom;
  }
  .at-rekapitulace :is(tbody, tfoot) :is(th, td) {
    border-block-end: var(--at-border-rule) solid var(--at-rule);
  }
  .at-rekapitulace :is(tbody, tfoot) th {
    font-weight: var(--at-font-weight-regular);
  }
  .at-rekapitulace td {
    font-stretch: var(--at-stretch-number);
  }
  .at-rekapitulace tfoot th {
    color: var(--at-ink-soft);
  }
  /* Řádek součtu sazeb. Linka je dvojnásobná, aby ji ve sloučených okrajích tabulky
     nepřekryla linka řádku nad ní. */
  .at-rekapitulace .at-rekapitulace__soucet :is(th, td) {
    border-block-start: calc(var(--at-border-rule) * 2) solid var(--at-rule-strong);
    color: var(--at-ink);
    font-weight: var(--at-font-weight-semibold);
  }

  /* Úzký displej: menší písmo, užší mezery a zalomené záhlaví, čtyři sloupce se vejdou. */
  @media (max-width: 40rem) {
    .at-rekapitulace {
      font-size: var(--at-font-size-small);
    }
    .at-rekapitulace :is(th, td) {
      padding-inline-start: var(--at-space-2);
    }
    .at-rekapitulace thead th {
      white-space: normal;
    }
  }

  /* Doklad bez DPH: jeden řádek s vysvětlením místo sazeb. */
  .at-rekapitulace td.at-rekapitulace__prazdny {
    padding-inline-start: 0;
    color: var(--at-muted);
    text-align: start;
    white-space: normal;
  }

  /* ---------- Souhrn k úhradě ----------
   * <div class="at-souhrn"><dl class="at-souhrn__radky">
   *   <div class="at-souhrn__radek"><dt>…</dt><dd>…</dd></div>
   *   <div class="at-souhrn__celkem"><dt>Celkem k úhradě</dt><dd>9 667,00 Kč</dd></div>
   * </dl><p class="at-souhrn__pozn">…</p></div> */

  .at-souhrn {
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-souhrn__radky {
    margin: 0;
  }
  .at-souhrn__radek,
  .at-souhrn__celkem {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--at-space-1) var(--at-space-4);
  }
  .at-souhrn__radek {
    padding-block: var(--at-space-2);
    border-block-end: var(--at-border-rule) solid var(--at-rule);
    font-size: var(--at-font-size-table);
  }
  .at-souhrn__radek > dt {
    color: var(--at-ink-soft);
  }
  .at-souhrn dd {
    margin: 0;
    font-stretch: var(--at-stretch-number);
    text-align: end;
    white-space: nowrap;
  }
  /* Konečný součet: v Tiskopisu pod ním dvojitá linka jako v účetní knize (--at-total-rule-width). */
  .at-souhrn__celkem {
    padding-block: var(--at-space-3) var(--at-space-2);
    border-block-start: calc(var(--at-border-rule) * 2) solid var(--at-ink);
    border-block-end: var(--at-total-rule-width) double var(--at-ink);
  }
  .at-souhrn__celkem > dt {
    font-weight: var(--at-font-weight-semibold);
  }
  .at-souhrn__celkem > dd {
    font-size: var(--at-font-size-h1);
    font-weight: var(--at-font-weight-semibold);
    line-height: var(--at-line-height-tight);
    letter-spacing: var(--at-tracking-heading);
  }
  .at-souhrn__pozn {
    margin: var(--at-space-2) 0 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }
  /* Uhrazeno: nulová částka se nezvětšuje, stav říká text. */
  .at-souhrn--uhrazeno .at-souhrn__celkem > dd {
    font-size: var(--at-font-size-h4);
  }
  .at-souhrn__stav {
    margin-inline-end: var(--at-space-1);
    color: var(--at-success);
    font-weight: var(--at-font-weight-medium);
  }
  .at-souhrn__stav > .at-icon {
    margin-inline-end: var(--at-space-1);
  }

  /* ---------- Kód obrazovky pro hotline ---------- */

  .at-kod-obrazovky {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--at-space-1) var(--at-space-2);
    margin: 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }
  .at-kod-obrazovky__kod {
    padding: 0 var(--at-space-1);
    border: var(--at-border-rule) solid var(--at-rule-strong);
    border-radius: var(--at-radius-control);
    background: var(--at-surface-1);
    color: var(--at-ink);
    font-family: var(--at-font-data);
    letter-spacing: 0;
    white-space: nowrap;
    user-select: all;
  }
  /* Tlačítko Kopírovat je .at-btn .at-btn--small .at-btn--quiet z 10-ovladani.css.
     Oznámení o zkopírování (role="status") zůstává v DOM i prázdné, aby ho čtečka ohlásila. */
  .at-kod-obrazovky__stav {
    display: inline-flex;
    gap: var(--at-space-1);
    align-items: center;
    color: var(--at-ink-soft);
    font-weight: var(--at-font-weight-medium);
  }
  .at-kod-obrazovky__stav > .at-icon {
    color: var(--at-success);
  }

  /* ---------- QR Platba ---------- */

  .at-qr {
    display: inline-grid;
    justify-items: start;
    gap: var(--at-space-2);
    max-inline-size: 100%;
    margin: 0;
  }
  /* Kód je vždy tmavý na světlém podkladu (čtečky bank inverzní kód nečtou), proto obal drží
     světlý motiv i v tmavém rozhraní a v režimu vynucených barev. */
  .at-qr__kod {
    color-scheme: light;
    forced-color-adjust: none;
    display: grid;
    place-items: center;
    inline-size: 10rem;
    aspect-ratio: 1;
    padding: var(--at-space-2);
    border: var(--at-border-rule) solid var(--at-rule);
    border-radius: var(--at-radius-control);
    background: var(--at-surface-1);
    color: var(--at-ink);
  }
  .at-qr__kod > :is(img, svg) {
    display: block;
    inline-size: 100%;
    block-size: 100%;
  }
  .at-qr__popisek {
    display: grid;
    gap: 0;
    max-inline-size: 16rem;
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-heading);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-qr__nazev {
    font-weight: var(--at-font-weight-semibold);
  }
  .at-qr__udaje {
    color: var(--at-muted);
  }
  /* Načítání a chyba: prázdný rámeček s textem místo kódu, bez animace. */
  .at-qr[aria-busy='true'] .at-qr__kod,
  .at-qr--chyba .at-qr__kod {
    color-scheme: inherit;
    forced-color-adjust: auto;
    padding: var(--at-space-3);
    border-style: dashed;
    border-color: var(--at-rule-strong);
    background: transparent;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-heading);
    text-align: center;
  }
  .at-qr--chyba .at-qr__kod {
    border-color: var(--at-danger);
    color: var(--at-danger);
  }

  /* ---------- Vynucené barvy ---------- */

  @media (forced-colors: active) {
    .at-korektury__polozka:is(:target, [aria-current='true']) {
      outline: calc(var(--at-border-rule) * 2) solid Highlight;
      outline-offset: calc(var(--at-border-rule) * -2);
    }
    .at-korektury__polozka:is(:target, [aria-current='true']) > .at-korektura {
      forced-color-adjust: none;
      border-color: Highlight;
      background: Highlight;
      color: HighlightText;
    }
  }

  /* ---------- Tisk: list A4 v barvách světlého motivu ---------- */

  @media print {
    .at-doklad,
    .at-popisove-pole,
    .at-razitko,
    .at-korektura,
    .at-korektury,
    .at-rekapitulace,
    .at-souhrn,
    .at-kod-obrazovky,
    .at-qr {
      color-scheme: light;
    }
    .at-doklad,
    .at-doklad--nahled {
      max-inline-size: none;
      aspect-ratio: auto;
      padding: 0;
      border: 0;
      border-radius: 0;
      background: transparent;
    }
    .at-doklad__zaver > .at-doklad__soucty {
      overflow: visible;
    }
    .at-popisove-pole,
    .at-korektury__polozka,
    .at-rekapitulace,
    .at-souhrn,
    .at-qr,
    .at-razitko {
      break-inside: avoid;
    }
    .at-doklad__zaver {
      break-inside: avoid;
    }
    .at-korektury__polozka:is(:target, [aria-current='true']) {
      background: transparent;
    }
    .at-korektury__xml {
      overflow: visible;
    }
    .at-korektury__akce,
    .at-kod-obrazovky .at-btn,
    .at-kod-obrazovky__stav {
      display: none;
    }
    .at-qr__kod {
      inline-size: 35mm;
      padding: 2mm;
    }
  }
}

/* Atomys Design Language 2.0 — stavy a průběh.
 *
 * .at-aktivita  indikátor aktivity: segmentovaný kruh v inline SVG, vždy vedle textu
 * .at-postup    průběh po fázích (Načtení → Rozpoznání → Kontrola → Export)
 * .at-prubeh    měřitelný průběh nad nativním <progress> („7 z 12 stran“)
 * .at-hlaseni   hlášení: info, úspěch, varování, chyba
 * .at-fronta    fronta nahraných souborů
 * .at-kostra    statická kostra prvního načtení tabulky
 *
 * Pravidla načítání (docs/PRAVIDLA.md, oddíl 6): do 150 ms nic; krátká akce mění text
 * v tlačítku a smí mít indikátor; známý průběh ukazuje skutečné množství; fáze jen podle
 * skutečných událostí; žádná procenta navíc, shimmer ani poskakující tečky.
 *
 * Stavové barvy mají všude stejný význam: probíhá = info, čeká = warning, problém = danger,
 * hotovo = success. Akcent oblasti stav nikdy nenese. Stavová slova malými písmeny.
 *
 * Vzhledy se liší jen tokeny: barvy, zaoblení (--at-radius-*), šířka popisků
 * (--at-stretch-label) a verzálky v záhlaví náhradní tabulky kostry (--at-label-case).
 */
@layer atomys.komponenty {
  /* ---------- Indikátor aktivity ----------
   * <svg class="at-aktivita" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
   *   <circle class="at-aktivita__stopa" cx="12" cy="12" r="10.5"/>
   *   <circle class="at-aktivita__tahy" cx="12" cy="12" r="10.5"/>
   * </svg> Ukládám změny…
   * Dvě kružnice: tlumená stopa a tři nestejné tahy (28 %, 14 % a 8 % obvodu).
   * Barvu dědí přes currentColor, otáčí se jen transformací, --at-motion-spin na otáčku (animace
   * at-otoceni z 10-ovladani.css, stejná jako v tlačítku s aria-busy).
   * Velikost je v em textu vedle, takže roste s hustotou: výchozí 1,15 em jako ikona
   * (v kanceláři asi 17 px), --stredni 1,35 em u nahrávání, --velka 1,6 em v prázdném panelu.
   * Tloušťka čáry v jednotkách viewBoxu klesá s velikostí, aby zůstala asi 2 px.
   * Do .at-btn[aria-busy="true"] se nevkládá: tlačítko kreslí indikátor samo (10-ovladani.css). */
  .at-aktivita {
    --_velikost: 1.15em;
    display: inline-block;
    flex: none;
    inline-size: var(--_velikost);
    block-size: var(--_velikost);
    /* Střed kruhu ve výšce 0,35 em nad účařím, ve všech velikostech. */
    vertical-align: calc(0.35em - var(--_velikost) / 2);
    overflow: visible;
    fill: none;
    stroke-width: 2.8;
    animation: at-otoceni var(--at-motion-spin) linear infinite;
  }
  .at-aktivita--stredni {
    --_velikost: 1.35em;
    stroke-width: 2.4;
  }
  .at-aktivita--velka {
    --_velikost: 1.6em;
    stroke-width: 2;
  }
  .at-aktivita__stopa,
  .at-aktivita__tahy {
    fill: none;
  }
  .at-aktivita__stopa {
    stroke: color-mix(in srgb, currentColor 22%, transparent);
  }
  /* Obvod kružnice r = 10,5 je 65,97; délky tahů a mezer odpovídají 28 10 14 10 8 30 %. */
  .at-aktivita__tahy {
    stroke: currentColor;
    stroke-dasharray: 18.47 6.6 9.24 6.6 5.28 19.79;
    stroke-linecap: butt;
  }

  /* Otáčení at-otoceni je společné s indikátorem v tlačítku (10-ovladani.css). */

  /* ---------- Průběh po fázích ----------
   * <ol class="at-postup" aria-label="…">
   *   <li class="at-postup__faze at-postup__faze--hotovo">…</li>
   *   <li class="at-postup__faze" aria-current="step">…</li>
   *   <li class="at-postup__faze at-postup__faze--chyba" aria-current="step">…</li>
   * Každá fáze má číslo, název a stav slovem; barva linky stav jen doplňuje. Barvy mají
   * význam stavů z PRAVIDLA.md: hotovo = success, probíhá = info, problém = danger;
   * fáze, která teprve přijde, je neutrální. Akcent oblasti stav nenese. */
  .at-postup {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(9.5rem, 1fr));
    gap: var(--at-space-4) var(--at-space-1);
    margin: 0 0 var(--at-space-4);
    padding: 0;
    list-style: none;
    font-size: var(--at-font-size-small);
    line-height: var(--at-line-height-body);
  }
  .at-postup__faze {
    display: flex;
    flex-direction: column;
    gap: var(--at-space-1);
    min-inline-size: 0;
    padding: var(--at-space-2) var(--at-space-3) 0 0;
    border-block-start: var(--at-space-1) solid var(--at-rule);
    color: var(--at-muted);
  }
  .at-postup__nazev {
    display: flex;
    gap: var(--at-space-2);
    align-items: baseline;
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-semibold);
    line-height: var(--at-line-height-heading);
  }
  .at-postup__cislo {
    color: var(--at-muted);
    font-weight: var(--at-font-weight-regular);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
  }
  /* Stav fáze má podobu .at-stav (30-data.css), včetně raženého obrysu v Dílně. */
  .at-postup__stav {
    display: inline-flex;
    gap: var(--at-space-1);
    align-items: center;
    align-self: flex-start;
    padding: var(--at-stav-border-width) var(--at-stav-padding-inline);
    border: var(--at-stav-border-width) solid currentColor;
    border-radius: var(--at-radius-control);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-label);
  }
  .at-postup__ikona {
    flex: none;
    inline-size: 1.25em;
    block-size: 1.25em;
    fill: currentColor;
  }
  .at-postup__detail {
    color: var(--at-ink-soft);
    font-variant-numeric: tabular-nums lining-nums;
    overflow-wrap: anywhere;
  }

  .at-postup__faze--hotovo {
    border-block-start-color: var(--at-success);
  }
  .at-postup__faze--hotovo .at-postup__nazev {
    color: var(--at-ink);
  }
  .at-postup__faze--hotovo .at-postup__stav {
    color: var(--at-success);
  }

  .at-postup__faze[aria-current='step'] {
    border-block-start-color: var(--at-info);
  }
  .at-postup__faze[aria-current='step'] .at-postup__nazev {
    color: var(--at-ink);
  }
  .at-postup__faze[aria-current='step'] .at-postup__stav {
    color: var(--at-info);
  }

  .at-postup__faze--chyba,
  .at-postup__faze--chyba[aria-current='step'] {
    border-block-start-color: var(--at-danger);
  }
  .at-postup__faze--chyba .at-postup__nazev {
    color: var(--at-ink);
  }
  .at-postup__faze--chyba .at-postup__stav,
  .at-postup__faze--chyba[aria-current='step'] .at-postup__stav {
    color: var(--at-danger);
  }
  .at-postup__faze--chyba .at-postup__detail {
    color: var(--at-ink);
  }

  /* ---------- Měřitelný průběh ----------
   * <div class="at-prubeh">
   *   <label class="at-prubeh__popis" for="p">Rozpoznávám text…</label>
   *   <span class="at-prubeh__hodnota" aria-hidden="true">7 z 12 stran</span>
   *   <progress class="at-prubeh__linka" id="p" max="12" value="7"
   *     aria-valuetext="7 z 12 stran">7 z 12 stran</progress>
   *   <p class="at-prubeh__pozn" role="status">Běží od 10:41. …</p>
   * Jen skutečně měřitelný podíl. Bez value (neznámá doba) linka zůstane prázdná, místo ní
   * patří .at-aktivita s pravdivým textem. Hodnota se mění bez animace. Výplň má barvu
   * stavu „probíhá“ (info), ne akcentu.
   * Hlášení čtečce: množství nese aria-valuetext linky (čte se při přechodu na ni), viditelné
   * __hodnota je proto aria-hidden. Poznámka __pozn je živá oblast role="status" (aria-live
   * polite) a aplikace do ní píše jen milníky: začátek, přechod do běhu na pozadí, dokončení
   * s výsledkem a chybu. Běžící čas ani každý krok do ní nepatří, čtečka by nestíhala;
   * místo odpočtu uveďte začátek („Běží od 10:41“). Chyba, která běh zastaví, patří do
   * .at-hlaseni s role="alert".
   * Tón výplně podle slovníku stavů: běžící průběh info, dokončený .at-prubeh--hotovo
   * (success), zastavený chybou .at-prubeh--chyba (danger). Slovo v __pozn stav nese vždy. */
  .at-prubeh {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: var(--at-space-1) var(--at-space-4);
    align-items: baseline;
    margin: 0 0 var(--at-space-4);
  }
  .at-prubeh__popis {
    min-inline-size: 0;
    color: var(--at-ink);
    font-weight: var(--at-font-weight-medium);
    overflow-wrap: anywhere;
  }
  .at-prubeh__hodnota {
    color: var(--at-ink);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-number);
    font-variant-numeric: tabular-nums lining-nums;
    text-align: end;
    white-space: nowrap;
  }
  .at-prubeh__linka {
    grid-column: 1 / -1;
    display: block;
    inline-size: 100%;
    block-size: var(--at-space-3);
    margin: 0;
    padding: 0;
    border: var(--at-border-rule) solid var(--at-field-border);
    border-radius: var(--at-radius-control);
    background: var(--at-surface-1);
    color: var(--at-info);
    overflow: hidden;
    -webkit-appearance: none;
    appearance: none;
  }
  .at-prubeh__linka::-webkit-progress-bar {
    background: var(--at-surface-1);
  }
  .at-prubeh__linka::-webkit-progress-value {
    background: var(--at-info);
  }
  .at-prubeh__linka::-moz-progress-bar {
    background: var(--at-info);
  }
  .at-prubeh__linka:indeterminate::-moz-progress-bar {
    inline-size: 0;
    animation: none;
  }
  .at-prubeh--hotovo .at-prubeh__linka {
    color: var(--at-success);
  }
  .at-prubeh--hotovo .at-prubeh__linka::-webkit-progress-value {
    background: var(--at-success);
  }
  .at-prubeh--hotovo .at-prubeh__linka::-moz-progress-bar {
    background: var(--at-success);
  }
  .at-prubeh--chyba .at-prubeh__linka {
    color: var(--at-danger);
  }
  .at-prubeh--chyba .at-prubeh__linka::-webkit-progress-value {
    background: var(--at-danger);
  }
  .at-prubeh--chyba .at-prubeh__linka::-moz-progress-bar {
    background: var(--at-danger);
  }
  .at-prubeh__pozn {
    grid-column: 1 / -1;
    margin: 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-prubeh__akce {
    grid-column: 1 / -1;
    display: flex;
    flex-wrap: wrap;
    gap: var(--at-space-2);
    margin-block-start: var(--at-space-2);
  }

  /* ---------- Hlášení ----------
   * <div class="at-hlaseni at-hlaseni--chyba" role="alert">
   *   <svg class="at-icon at-hlaseni__ikona" aria-hidden="true">…</svg>
   *   <h3 class="at-hlaseni__nadpis">…</h3>
   *   <div class="at-hlaseni__text"><p>…</p></div>
   *   <div class="at-hlaseni__akce">…</div>
   * Info a úspěch role="status", chyba a naléhavé varování role="alert".
   * Druh nese ikona a nadpis, rám v barvě stavu je jen doplněk. Rám má tloušťku
   * --at-bar-edge jako souhrn chyb formuláře (.at-error-summary), chyba tak vypadá všude stejně. */
  .at-hlaseni {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: var(--at-space-1) var(--at-space-3);
    align-items: start;
    margin: 0 0 var(--at-space-4);
    padding: var(--at-space-3) var(--at-space-4);
    border: var(--at-bar-edge) solid var(--at-info);
    border-radius: var(--at-radius-surface);
    background: var(--at-surface-1);
    color: var(--at-ink);
  }
  .at-hlaseni > * {
    grid-column: 2;
    min-inline-size: 0;
    margin: 0;
  }
  .at-hlaseni > .at-hlaseni__ikona {
    grid-column: 1;
    grid-row: 1;
    flex: none;
    inline-size: 1.25em;
    block-size: 1.25em;
    color: var(--at-info);
    fill: currentColor;
  }
  /* Bez nadpisu stojí ikona u prvního řádku textu (proklad 1,5). */
  .at-hlaseni:not(:has(.at-hlaseni__nadpis)) > .at-hlaseni__ikona {
    margin-block-start: 0.125em;
  }
  .at-hlaseni__nadpis {
    color: var(--at-ink);
    font-size: var(--at-font-size-text);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-heading);
    line-height: var(--at-line-height-heading);
    letter-spacing: var(--at-tracking-heading);
  }
  .at-hlaseni__text {
    color: var(--at-ink-soft);
    overflow-wrap: break-word;
  }
  .at-hlaseni__text > :last-child {
    margin-block-end: 0;
  }
  .at-hlaseni__text > * {
    margin-block: 0 var(--at-space-2);
  }
  .at-hlaseni__akce {
    display: flex;
    flex-wrap: wrap;
    gap: var(--at-space-2);
    align-items: center;
    padding-block-start: var(--at-space-2);
  }

  /* Výchozí tón je info; modifikátor --info ho pojmenuje v HTML. */
  .at-hlaseni--info {
    border-color: var(--at-info);
  }
  .at-hlaseni--uspech {
    border-color: var(--at-success);
  }
  .at-hlaseni--uspech > .at-hlaseni__ikona {
    color: var(--at-success);
  }
  .at-hlaseni--varovani {
    border-color: var(--at-warning);
  }
  .at-hlaseni--varovani > .at-hlaseni__ikona {
    color: var(--at-warning);
  }
  .at-hlaseni--chyba {
    border-color: var(--at-danger);
  }
  .at-hlaseni--chyba > .at-hlaseni__ikona {
    color: var(--at-danger);
  }

  /* ---------- Fronta souborů ----------
   * <ul class="at-fronta" role="list">
   *   <li class="at-fronta__polozka" aria-busy="true|false">
   *     ikona · soubor (název + meta) · velikost · fáze · výsledek · akce
   * Zpracovávaná položka má aria-busy="true" (fáze v barvě info), výsledek nese slovo
   * a ikona ve fázi (--uspech, --varovani, --chyba); soubor ve frontě je neutrální. Sloupce
   * řádků lícují přes subgrid; v úzkém kontejneru se řádek skládá pod sebe.
   * Nad frontou stojí souhrnná věta s role="status" („5 souborů: 2 převedené, 1 chyba…“),
   * kterou aplikace přepíše, když soubor skončí nebo selže. Změny uvnitř řádků se čtečce
   * nehlásí jednotlivě. */
  .at-fronta {
    container: at-fronta / inline-size;
    display: grid;
    grid-template-columns: auto minmax(0, 1.5fr) auto auto minmax(0, 1.4fr) auto;
    column-gap: var(--at-space-4);
    margin: 0 0 var(--at-space-4);
    padding: 0;
    list-style: none;
    border-block-start: var(--at-border-rule) solid var(--at-rule-strong);
    font-size: var(--at-font-size-table);
    line-height: var(--at-line-height-body);
    font-variant-numeric: tabular-nums lining-nums;
  }
  .at-fronta__polozka {
    grid-column: 1 / -1;
    display: grid;
    grid-template-columns: subgrid;
    align-items: center;
    min-block-size: var(--at-row-height);
    padding: var(--at-space-2) 0;
    border-block-end: var(--at-border-rule) solid var(--at-rule);
  }
  .at-fronta__ikona {
    flex: none;
    inline-size: 1.5em;
    block-size: 1.5em;
    color: var(--at-ink-soft);
    fill: currentColor;
  }
  .at-fronta__soubor {
    display: flex;
    flex-direction: column;
    min-inline-size: 0;
  }
  .at-fronta__nazev {
    color: var(--at-ink);
    font-weight: var(--at-font-weight-medium);
    overflow-wrap: anywhere;
  }
  .at-fronta__meta {
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }
  .at-fronta__velikost {
    color: var(--at-ink-soft);
    font-stretch: var(--at-stretch-number);
    text-align: end;
    white-space: nowrap;
  }
  /* Fáze souboru má podobu .at-stav (30-data.css), včetně raženého obrysu v Dílně. */
  .at-fronta__faze {
    display: inline-flex;
    gap: var(--at-space-1);
    align-items: center;
    justify-self: start;
    padding: var(--at-stav-border-width) var(--at-stav-padding-inline);
    border: var(--at-stav-border-width) solid currentColor;
    border-radius: var(--at-radius-control);
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-label);
    white-space: nowrap;
  }
  .at-fronta__faze > svg:not(.at-aktivita) {
    flex: none;
    inline-size: 1.25em;
    block-size: 1.25em;
    fill: currentColor;
  }
  .at-fronta__polozka[aria-busy='true'] .at-fronta__faze {
    color: var(--at-info);
  }
  .at-fronta__faze--uspech {
    color: var(--at-success);
  }
  .at-fronta__faze--varovani {
    color: var(--at-warning);
  }
  .at-fronta__faze--chyba {
    color: var(--at-danger);
  }
  .at-fronta__vysledek {
    min-inline-size: 0;
    color: var(--at-ink-soft);
    overflow-wrap: break-word;
  }
  .at-fronta__akce {
    display: flex;
    flex-wrap: wrap;
    gap: var(--at-space-2);
    align-items: center;
    justify-content: flex-end;
  }
  .at-fronta__prazdny {
    grid-column: 1 / -1;
    padding: var(--at-space-4) 0;
    border-block-end: var(--at-border-rule) solid var(--at-rule);
    color: var(--at-muted);
  }

  @container at-fronta (max-width: 46rem) {
    .at-fronta__polozka {
      grid-template-columns: auto minmax(0, 1fr) auto;
      grid-template-areas:
        'ikona soubor velikost'
        '. faze faze'
        '. vysledek vysledek'
        '. akce akce';
      gap: var(--at-space-1) var(--at-space-3);
      align-items: start;
      padding-block: var(--at-space-3);
    }
    .at-fronta__ikona {
      grid-area: ikona;
    }
    .at-fronta__soubor {
      grid-area: soubor;
    }
    .at-fronta__velikost {
      grid-area: velikost;
    }
    .at-fronta__faze {
      grid-area: faze;
      justify-self: start;
    }
    .at-fronta__vysledek {
      grid-area: vysledek;
    }
    .at-fronta__akce {
      grid-area: akce;
      justify-content: flex-start;
      padding-block-start: var(--at-space-1);
    }
  }

  /* ---------- Statická kostra prvního načtení ----------
   * <table class="at-table at-kostra" aria-busy="true"> se skutečnou hlavičkou a
   * řádky, jejichž buňky obsahují <span class="at-kostra__blok"></span>.
   * Zachovává hlavičku, šířky sloupců i výšku řádku, nic se nepohybuje. Stavová věta
   * s role="status" stojí mimo tabulku. Vzhled tabulky dává .at-table; pravidla níže
   * v :where() jsou jen náhrada s nulovou specifičností, když .at-table chybí. */
  :where(table.at-kostra) {
    inline-size: 100%;
    border-collapse: collapse;
    font-size: var(--at-font-size-table);
    background: var(--at-surface-1);
  }
  :where(table.at-kostra) :where(th, td) {
    padding: 0 var(--at-space-3);
    border-block-end: var(--at-border-rule) solid var(--at-rule);
    text-align: start;
    vertical-align: middle;
  }
  :where(table.at-kostra) :where(th) {
    block-size: var(--at-row-height);
    background: var(--at-table-head);
    color: var(--at-on-table-head);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-label);
    letter-spacing: var(--at-label-tracking);
    text-transform: var(--at-label-case);
    white-space: nowrap;
  }
  :where(table.at-kostra) :where(th.at-num) {
    text-align: end;
  }
  .at-kostra td {
    block-size: var(--at-row-height);
  }
  .at-kostra__blok {
    display: block;
    inline-size: 72%;
    max-inline-size: 16rem;
    block-size: 0.625em;
    border-radius: var(--at-radius-control);
    background: var(--at-rule);
  }
  :where(.at-kostra tr:nth-child(3n + 2)) .at-kostra__blok {
    inline-size: 56%;
  }
  :where(.at-kostra tr:nth-child(3n)) .at-kostra__blok {
    inline-size: 86%;
  }
  .at-kostra__blok--kratky {
    inline-size: 40%;
  }
  /* Číselný sloupec: blok vpravo a délky jako u částek, ne podle šířky sloupce. */
  .at-kostra .at-num > .at-kostra__blok {
    inline-size: 5.5em;
    margin-inline-start: auto;
  }
  .at-kostra tr:nth-child(3n + 2) .at-num > .at-kostra__blok {
    inline-size: 4em;
  }
  .at-kostra tr:nth-child(3n) .at-num > .at-kostra__blok {
    inline-size: 6.5em;
  }

  /* ---------- Omezení pohybu a vynucené barvy ---------- */
  @media (prefers-reduced-motion: reduce) {
    .at-aktivita {
      animation: none;
    }
  }

  @media (forced-colors: active) {
    .at-aktivita__stopa {
      stroke: GrayText;
    }
    .at-postup__faze {
      border-block-start-color: GrayText;
      border-block-start-style: dashed;
    }
    .at-postup__faze--hotovo,
    .at-postup__faze--chyba {
      border-block-start-color: CanvasText;
      border-block-start-style: solid;
    }
    .at-postup__faze[aria-current='step'] {
      border-block-start-color: Highlight;
      border-block-start-style: solid;
    }
    .at-prubeh__linka {
      forced-color-adjust: none;
      border-color: CanvasText;
      background: Canvas;
    }
    .at-prubeh__linka::-webkit-progress-bar {
      background: Canvas;
    }
    .at-prubeh__linka::-webkit-progress-value {
      background: Highlight;
    }
    .at-prubeh__linka::-moz-progress-bar {
      background: Highlight;
    }
    .at-kostra__blok {
      border: var(--at-border-rule) solid GrayText;
    }
  }
}

/* Atomys Design Language — volba vzhledu v nastavení aplikace (.at-volba-vzhledu).
 *
 * Formulář se třemi skupinami přepínačů: name="vzhled" (tiskopis, dilna, atomys),
 * name="motiv" (system, light, dark) a name="hustota" (kancelar, dilna, dotyk).
 * Napojuje se voláním atomysVzhled.pripojit(formular) z dist/vzhled.js.
 *
 * Každá možnost vzhledu je velký štítek s přepínačem a živým náhledem
 * .at-volba-vzhledu__nahled. Náhled nese vlastní data-vzhled, takže se na něm tokeny
 * přepočítají a kreslí ho skutečné hodnoty daného vzhledu; motiv a oblast dědí ze stránky.
 * Konstrukci (plocha obsahu, rám panelu, linka pod záhlavím tabulky, ražený štítek stavu)
 * čte náhled ze stejných tokenů konstrukce jako skutečné komponenty, takže se od nich
 * nerozejde. Jednotka v záhlaví je .at-table__jednotka a zůstává malými písmeny.
 * Formulář form.at-volba-vzhledu se napojí sám (dist/vzhled.js), vložený skript není potřeba.
 *
 * Motiv a hustota používají segmentový přepínač .at-segment a ikony .at-icon
 * z 10-ovladani.css; tento soubor je nedefinuje, řeší jen rozvržení skupin kolem nich.
 */
@layer atomys.komponenty {
  /* ---------- Formulář a skupiny ---------- */

  .at-volba-vzhledu {
    display: grid;
    gap: var(--at-space-8);
    margin: 0;
  }

  .at-volba-vzhledu__skupina {
    min-inline-size: 0;
    margin: 0;
    padding: 0;
    border: 0;
  }

  .at-volba-vzhledu__legenda {
    padding: 0 0 var(--at-space-1);
    color: var(--at-ink);
    font-size: var(--at-font-size-h3);
    font-weight: var(--at-heading-weight);
    font-stretch: var(--at-stretch-heading);
    line-height: var(--at-line-height-heading);
    letter-spacing: var(--at-tracking-heading);
  }

  .at-volba-vzhledu__popis {
    max-inline-size: var(--at-layout-text-max);
    margin: 0 0 var(--at-space-4);
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
  }

  .at-volba-vzhledu__napoveda {
    max-inline-size: var(--at-layout-text-max);
    margin: var(--at-space-2) 0 0;
    color: var(--at-muted);
    font-size: var(--at-font-size-small);
  }

  .at-volba-vzhledu__moznosti {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 18rem), 1fr));
    gap: var(--at-space-4);
  }

  /* Motiv a hustota vedle sebe, na úzké obrazovce pod sebou. */
  .at-volba-vzhledu__volby {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
    gap: var(--at-space-6) var(--at-space-8);
  }

  /* ---------- Možnost vzhledu: velký štítek s přepínačem ---------- */

  .at-volba-vzhledu__moznost {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    grid-template-areas:
      'nahled nahled nahled'
      'vstup nazev vybrano'
      '. veta veta';
    align-content: start;
    align-items: start;
    gap: var(--at-space-1) var(--at-space-2);
    padding: var(--at-space-3);
    border: var(--at-border-rule) solid var(--at-rule-strong);
    border-radius: var(--at-radius-surface);
    background: var(--at-surface-1);
    color: var(--at-ink);
    cursor: pointer;
  }

  .at-volba-vzhledu__moznost:hover {
    border-color: var(--at-field-border);
  }

  .at-volba-vzhledu__moznost:active {
    background: var(--at-surface-2);
  }

  /* Vybraná možnost: silnější rám v akcentu a značka „Vybráno“ (čitelné i bez barvy).
     Odsazení se zmenší o přidanou tloušťku rámu, aby obsah neposkočil. */
  .at-volba-vzhledu__moznost:has(.at-volba-vzhledu__vstup:checked) {
    padding: calc(var(--at-space-3) - var(--at-border-rule));
    border-width: calc(var(--at-border-rule) * 2);
    border-color: var(--at-accent-text);
  }

  .at-volba-vzhledu__moznost:has(.at-volba-vzhledu__vstup:focus-visible) {
    outline: var(--at-border-focus) solid var(--at-focus);
    outline-offset: var(--at-border-focus);
  }

  .at-volba-vzhledu__moznost:has(.at-volba-vzhledu__vstup:disabled) {
    border-style: dashed;
    border-color: var(--at-rule-strong);
    background: var(--at-surface-1);
    color: var(--at-muted);
    cursor: not-allowed;
  }

  .at-volba-vzhledu__moznost:has(.at-volba-vzhledu__vstup:disabled) .at-volba-vzhledu__nahled {
    opacity: 0.45;
  }

  .at-volba-vzhledu[aria-busy='true'] .at-volba-vzhledu__moznost {
    cursor: progress;
  }

  /* Přepínač je vysoký jako první řádek názvu (proklad 1,2), sedí k němu i u dlouhého názvu.
     Zvolený přepínač je ukazatel výběru, proto barva --accent-text: výplň --accent má
     v tmavém motivu proti ploše méně než 3 : 1. */
  .at-volba-vzhledu__vstup {
    grid-area: vstup;
    inline-size: calc(var(--at-line-height-heading) * 1em);
    block-size: calc(var(--at-line-height-heading) * 1em);
    margin: 0;
    accent-color: var(--at-accent-text);
    cursor: inherit;
  }

  .at-volba-vzhledu__nazev {
    grid-area: nazev;
    font-weight: var(--at-font-weight-semibold);
    line-height: var(--at-line-height-heading);
  }

  .at-volba-vzhledu__veta {
    grid-area: veta;
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
    text-wrap: pretty;
  }

  .at-volba-vzhledu__moznost:has(.at-volba-vzhledu__vstup:disabled) .at-volba-vzhledu__veta {
    color: var(--at-muted);
  }

  .at-volba-vzhledu__vybrano {
    grid-area: vybrano;
    align-self: center;
    display: none;
    align-items: center;
    gap: var(--at-space-1);
    color: var(--at-accent-text);
    font-size: var(--at-font-size-small);
    font-weight: var(--at-font-weight-semibold);
    white-space: nowrap;
  }

  .at-volba-vzhledu__moznost:has(.at-volba-vzhledu__vstup:checked) .at-volba-vzhledu__vybrano {
    display: inline-flex;
  }

  /* ---------- Živý náhled vzhledu ----------
     Vše uvnitř čte tokeny vzhledu z data-vzhled náhledu. Velikosti jsou pevné (micro),
     náhled je zmenšenina a hustotu stránky nepřebírá. Ukazuje identitu vzhledu jako kostra
     aplikace: Tiskopis kreslí obsah na papíře bez rámečku panelu, Dílna a Atomys kladou panel
     na plátno; plochu, rám a rozestupy berou tokeny --at-content-surface, --at-panel-border,
     --at-panel-border-color a --at-panel-gap. Lišta má hranu oblasti dole ve všech vzhledech. */

  .at-volba-vzhledu__nahled {
    grid-area: nahled;
    display: block;
    margin-block-end: var(--at-space-2);
    overflow: hidden;
    border: var(--at-border-rule) solid var(--at-rule);
    border-radius: var(--at-radius-surface);
    background: var(--at-canvas);
    color: var(--at-ink);
    font-family: var(--at-font-ui);
    font-size: var(--at-font-size-micro);
    font-weight: var(--at-font-weight-regular);
    line-height: var(--at-line-height-heading);
    font-variant-numeric: tabular-nums lining-nums;
    container-type: inline-size;
    user-select: none;
  }

  .at-volba-vzhledu__lista {
    display: flex;
    align-items: center;
    gap: var(--at-space-3);
    padding: var(--at-space-2) var(--at-space-3);
    border-block-end: var(--at-bar-edge) solid var(--at-on-bar-accent);
    background: var(--at-bar);
    color: var(--at-on-bar);
  }

  .at-volba-vzhledu__znacka {
    font-weight: var(--at-font-weight-semibold);
    white-space: nowrap;
  }

  .at-volba-vzhledu__hledani {
    flex: 1;
    min-inline-size: 0;
    padding: var(--at-space-1) var(--at-space-2);
    overflow: hidden;
    border: var(--at-border-rule) solid var(--at-bar-field-border);
    border-radius: var(--at-radius-control);
    background: var(--at-bar-field);
    color: var(--at-bar-muted);
    white-space: nowrap;
    text-overflow: ellipsis;
  }

  .at-volba-vzhledu__obsah {
    display: grid;
    gap: max(var(--at-space-1), calc(var(--at-panel-gap) / 3));
    padding: calc(var(--at-space-2) + var(--at-panel-padding) / 4) var(--at-space-3);
    background: var(--at-content-surface);
  }

  .at-volba-vzhledu__hlava {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--at-space-2);
  }

  .at-volba-vzhledu__titulek {
    min-inline-size: 0;
    color: var(--at-ink);
    font-weight: var(--at-heading-weight);
    font-stretch: var(--at-stretch-heading);
  }

  .at-volba-vzhledu__tlacitko {
    display: inline-flex;
    align-items: center;
    gap: var(--at-space-1);
    padding: var(--at-space-1) var(--at-space-2);
    border: var(--at-border-rule) solid var(--at-accent-border);
    border-radius: var(--at-radius-control);
    background: var(--at-accent);
    color: var(--at-on-accent);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-control);
    white-space: nowrap;
  }

  .at-volba-vzhledu__panel {
    display: block;
    overflow: hidden;
    border: var(--at-panel-border) solid var(--at-panel-border-color);
    border-radius: var(--at-radius-surface);
    background: var(--at-surface-1);
  }

  .at-volba-vzhledu__tabulka {
    display: table;
    inline-size: 100%;
    border-collapse: collapse;
  }

  .at-volba-vzhledu__zahlavi,
  .at-volba-vzhledu__radek {
    display: table-row;
  }

  .at-volba-vzhledu__zahlavi > *,
  .at-volba-vzhledu__radek > * {
    display: table-cell;
    padding: var(--at-space-1) var(--at-space-2);
    vertical-align: middle;
    white-space: nowrap;
  }

  .at-volba-vzhledu__zahlavi > * {
    border-block-end: var(--at-table-head-rule-width) solid var(--at-table-head-rule);
    background: var(--at-table-head);
    color: var(--at-on-table-head);
    font-weight: var(--at-font-weight-semibold);
    font-stretch: var(--at-stretch-label);
    text-transform: var(--at-label-case);
    letter-spacing: var(--at-label-tracking);
  }

  .at-volba-vzhledu__zahlavi > * + * {
    border-inline-start: var(--at-table-head-divider) solid
      color-mix(in srgb, var(--at-on-table-head) 22%, transparent);
  }

  .at-volba-vzhledu__radek > * {
    border-block-end: var(--at-border-rule) solid var(--at-rule);
  }

  .at-volba-vzhledu__radek:last-child > * {
    border-block-end: 0;
  }

  .at-volba-vzhledu__nahled .at-num {
    font-stretch: var(--at-stretch-number);
  }

  .at-volba-vzhledu__odkaz {
    color: var(--at-accent-text);
    font-weight: var(--at-font-weight-medium);
    text-decoration-line: underline;
    text-decoration-thickness: var(--at-border-rule);
    text-underline-offset: 0.2em;
  }

  /* Stavový štítek náhledu: ikona a text v barvě stavu bez výplně, Dílna ražený obrys v barvě
     stavu (stejné tokeny jako .at-stav). */
  .at-volba-vzhledu__stav {
    display: inline-flex;
    align-items: center;
    gap: var(--at-space-1);
    padding: 0 var(--at-stav-padding-inline);
    border: var(--at-stav-border-width) solid currentColor;
    border-radius: var(--at-radius-control);
    color: var(--at-warning);
    font-weight: var(--at-stav-weight);
    font-stretch: var(--at-stretch-control);
    white-space: nowrap;
  }

  .at-volba-vzhledu__stav--hotovo {
    color: var(--at-success);
  }

  /* Úzká možnost (tři sloupce na menším monitoru, telefon): hledání v liště by jen
     ořezávalo text, odsazení se zmenší; na nejužší ploše zmizí sloupec částek. */
  @container (inline-size < 20rem) {
    .at-volba-vzhledu__hledani {
      display: none;
    }
    .at-volba-vzhledu__obsah {
      padding: var(--at-space-2);
    }
    .at-volba-vzhledu__zahlavi > *,
    .at-volba-vzhledu__radek > * {
      padding-inline: var(--at-space-1);
    }
  }

  @container (inline-size < 15.5rem) {
    .at-volba-vzhledu__tabulka .at-num {
      display: none;
    }
  }

  /* ---------- Zpráva o uložení volby ---------- */

  .at-volba-vzhledu__zprava {
    display: flex;
    align-items: baseline;
    gap: var(--at-space-2);
    max-inline-size: var(--at-layout-text-max);
    margin: 0;
    color: var(--at-ink-soft);
    font-size: var(--at-font-size-small);
  }

  .at-volba-vzhledu__zprava > .at-icon {
    align-self: center;
  }

  .at-volba-vzhledu[aria-busy='true'] .at-volba-vzhledu__zprava {
    color: var(--at-muted);
  }

  .at-volba-vzhledu__zprava[role='alert'] {
    color: var(--at-danger);
    font-weight: var(--at-font-weight-medium);
  }

  /* ---------- Vysoký kontrast ---------- */

  @media (forced-colors: active) {
    .at-volba-vzhledu__moznost:has(.at-volba-vzhledu__vstup:checked) {
      border-color: Highlight;
    }
    .at-volba-vzhledu__moznost:has(.at-volba-vzhledu__vstup:disabled) {
      border-color: GrayText;
      color: GrayText;
    }
  }
}
