/* BrewCSS v3.0 — Reinheitsgebot Edition
   BeerCSS + Bones.css + GridForms
   WCAG 2.1 AA — Semantic HTML — M3 Tokens
   Only 3 ingredients: Settings, Elements, Helpers */

/* ── Scrollbar ── */
*{scrollbar-width:thin;scrollbar-color:var(--outline) transparent}
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--outline);border-radius:3px}
::-webkit-scrollbar-thumb:hover{background:var(--on-surface-variant)}

/* ══════════════════════════════════════════
   1. SETTINGS — CSS Variables (M3 Tokens)
   ══════════════════════════════════════════ */
:root{
  /* M3 Color Tokens */
  --primary:#6750a4;--on-primary:#fff;--primary-container:#e9ddff;--on-primary-container:#22005d;
  --secondary:#625b71;--on-secondary:#fff;--secondary-container:#e8def8;--on-secondary-container:#1e192b;
  --tertiary:#7e5260;--on-tertiary:#fff;--tertiary-container:#ffd9e3;--on-tertiary-container:#31101d;
  --error:#b91c1c;--on-error:#fff;--error-container:#ffdad6;--on-error-container:#410002;
  --background:#eae8e3;--on-background:#1a1a1a;
  --surface:#fff;--on-surface:#1a1a1a;--surface-variant:#e7e0eb;--on-surface-variant:#49454e;
  --outline:#bbb8b2;--outline-variant:#cac4cf;
  --inverse-surface:#2d2d2d;--inverse-on-surface:#f4eff4;--inverse-primary:#cfbcff;
  --surface-dim:#ded8de;--surface-bright:#fef7ff;
  --surface-container:#f3edf7;--surface-container-high:#ece6f0;--surface-container-highest:#e6e0e9;
  /* Extended Palette */
  --success:#1a6e35;--warning:#7a5800;
  /* Functional aliases */
  --focus-ring:#6750a4;
  --font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  --font-mono:"SF Mono","Fira Code",Consolas,monospace;
}
.dark{
  --primary:#cfbcff;--on-primary:#381e72;--primary-container:#4f378a;--on-primary-container:#e9ddff;
  --secondary:#cbc2db;--on-secondary:#332d41;--secondary-container:#4a4458;--on-secondary-container:#e8def8;
  --tertiary:#efb8c8;--on-tertiary:#4a2532;--tertiary-container:#633b48;--on-tertiary-container:#ffd9e3;
  --error:#f87171;--on-error:#601410;--error-container:#8c1d18;--on-error-container:#ffdad6;
  --background:#1a1a1a;--on-background:#e8e8e8;
  --surface:#232323;--on-surface:#e8e8e8;--surface-variant:#49454e;--on-surface-variant:#cac4cf;
  --outline:#555;--outline-variant:#49454e;
  --inverse-surface:#e6e0e9;--inverse-on-surface:#1c1b1f;--inverse-primary:#6750a4;
  --surface-dim:#141218;--surface-bright:#3b383e;
  --surface-container:#211f26;--surface-container-high:#2b2930;--surface-container-highest:#36343b;
  --success:#6cc98a;--warning:#e8b44c;
  --focus-ring:#cfbcff;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
.skip{position:absolute;top:-200%;left:50%;transform:translateX(-50%);padding:10px 24px;background:var(--inverse-surface);color:var(--inverse-on-surface);font-size:.9rem;font-weight:700;z-index:9999;border:3px solid var(--focus-ring);text-decoration:none;white-space:nowrap}
.skip:focus{top:8px}
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
:focus{outline:none}:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px;z-index:5}

/* ══════════════════════════════════════════
   2. ELEMENTS — Semantic HTML Tags
   ══════════════════════════════════════════ */

/* ── Typography ── */
h1{font-size:2rem;font-weight:800;line-height:1.2;margin:0 0 .4em}
h2{font-size:1.5rem;font-weight:700;line-height:1.25;margin:0 0 .4em}
h3{font-size:1.2rem;font-weight:700;margin:0 0 .3em}
h4{font-size:1.05rem;font-weight:700;margin:0 0 .3em}
h5{font-size:.92rem;font-weight:600;margin:0 0 .2em}
h6{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant);margin:0 0 .3em}
p{margin:0 0 .8rem;max-width:62ch;line-height:1.6}
a{color:var(--primary);text-decoration:underline;cursor:pointer}a:hover{text-decoration:none}
small{font-size:.8rem;color:var(--on-surface-variant)}
code{font-family:var(--font-mono);font-size:.82em;background:color-mix(in srgb,var(--outline) 25%,var(--surface));padding:1px 5px;border:1px solid var(--outline)}
kbd{font-family:var(--font-mono);font-size:.78em;padding:2px 6px;border:1px solid var(--outline);background:var(--surface);border-radius:2px}
hr{border:none;border-top:1px solid var(--outline);margin:1rem 0}
blockquote{border-left:3px solid var(--inverse-surface);padding:8px 14px;margin:0 0 .8rem;color:var(--on-surface-variant);font-style:italic;background:color-mix(in srgb,var(--outline) 10%,var(--surface))}

/* ── Header (top app bar) ── */
header{display:flex;align-items:stretch;background:var(--inverse-surface);border-bottom:2px solid var(--inverse-surface);position:sticky;top:0;z-index:50;min-height:48px}
header button,header a.button{display:flex;align-items:center;padding:0 14px;color:var(--inverse-on-surface);font-size:.8rem;font-weight:500;border:none;background:transparent;border-right:1px solid rgba(255,255,255,.12);cursor:pointer;transition:background .12s;gap:6px;white-space:nowrap;font-family:var(--font-family);min-height:48px;text-decoration:none}
header button:hover,header a.button:hover{background:rgba(255,255,255,.1)}
header .brand{font-weight:700;font-size:.88rem}
header .spacer{flex:1;border:none}

/* ── Nav — Drawer (left/right) ── */
nav.left{position:fixed;top:0;bottom:0;left:0;width:260px;background:var(--surface);border-right:2px solid var(--inverse-surface);z-index:55;display:flex;flex-direction:column;overflow-y:auto;transform:translateX(-100%);transition:transform .25s ease,visibility .25s;visibility:hidden}
nav.left.open{transform:translateX(0);visibility:visible}
nav.right{position:fixed;top:0;bottom:0;left:auto;right:0;width:300px;background:var(--surface);border-left:2px solid var(--inverse-surface);z-index:55;display:flex;flex-direction:column;overflow-y:auto;transform:translateX(100%);transition:transform .25s ease,visibility .25s;visibility:hidden}
nav.right.open{transform:translateX(0);visibility:visible}
nav.left > h6,nav.right > h6{padding:12px 16px;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;background:var(--inverse-surface);color:var(--inverse-on-surface);border-bottom:1px solid var(--inverse-surface);display:flex;align-items:center;gap:10px;min-height:48px;margin:0}
nav.left a,nav.left button,nav.right a,nav.right button{display:flex;align-items:center;gap:12px;padding:12px 18px;font-size:.85rem;color:var(--on-surface);border:none;border-bottom:1px solid var(--outline);background:transparent;width:100%;text-align:left;cursor:pointer;font-family:var(--font-family);min-height:48px;transition:background .12s;text-decoration:none}
nav.left a:hover,nav.left button:hover,nav.right a:hover,nav.right button:hover{background:var(--surface-container-highest)}
nav.left a[aria-current="page"],nav.left button[aria-current="page"],nav.right a[aria-current="page"],nav.right button[aria-current="page"]{font-weight:700;border-left:3px solid var(--inverse-surface);padding-left:15px;background:var(--surface-container-highest)}
nav.left .label,nav.right .label{padding:10px 18px 4px;font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--on-surface-variant)}

/* ── Nav — Rail (vertical sidebar) ── */
nav.rail{position:fixed;left:0;top:48px;bottom:0;width:72px;background:var(--surface);border-right:2px solid var(--inverse-surface);z-index:40;display:flex;flex-direction:column;align-items:center;padding-top:0;gap:0;overflow-y:auto}
nav.rail a,nav.rail button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:8px 0;width:100%;font-size:.54rem;font-weight:600;color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.03em;text-align:center;border:none;border-bottom:1px solid var(--outline);background:transparent;cursor:pointer;font-family:var(--font-family);min-height:48px;transition:background .12s;text-decoration:none}
nav.rail a:hover,nav.rail button:hover,nav.rail a[aria-current="page"],nav.rail button[aria-current="page"]{background:var(--surface-container-highest);color:var(--on-surface)}
nav.rail i,nav.rail .ic{font-size:1.2rem;font-style:normal;line-height:1}

/* ── Nav — Bottom ── */
nav.bottom{position:fixed;bottom:0;left:0;right:0;display:flex;background:var(--surface);border-top:2px solid var(--inverse-surface);z-index:45}
nav.bottom a,nav.bottom button{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 4px;font-size:.58rem;font-weight:600;color:var(--on-surface-variant);border:none;border-right:1px solid var(--outline);text-transform:uppercase;letter-spacing:.03em;background:transparent;cursor:pointer;font-family:var(--font-family);min-height:48px;transition:background .1s;text-decoration:none}
nav.bottom a:last-child,nav.bottom button:last-child{border-right:none}
nav.bottom a:hover,nav.bottom button:hover,nav.bottom a[aria-current="page"],nav.bottom button[aria-current="page"]{background:var(--surface-container-highest);color:var(--on-surface)}
nav.bottom i,nav.bottom .ic{font-size:1.1rem;font-style:normal}

/* ── Overlay ── */
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:52;opacity:0;pointer-events:none;transition:opacity .2s}
.overlay.visible{opacity:1;pointer-events:auto}
.overlay-full{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:60;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px}
.container{width:100%;max-width:1100px;margin:0 auto;padding:0 1rem}

/* ── Button ── */
button,a.button{display:inline-flex;align-items:center;justify-content:center;gap:6px;font-family:var(--font-family);font-size:.82rem;font-weight:600;line-height:1;padding:10px 18px;background:var(--inverse-surface);color:var(--inverse-on-surface);border:2px solid var(--inverse-surface);cursor:pointer;transition:all .12s;white-space:nowrap;text-decoration:none;min-height:44px;min-width:44px}
button:hover,a.button:hover{background:color-mix(in srgb,var(--inverse-surface) 85%,var(--surface));border-color:color-mix(in srgb,var(--inverse-surface) 85%,var(--surface))}
button:active,a.button:active{transform:translateY(1px)}
button[disabled],button[aria-disabled="true"],a.button[disabled],a.button[aria-disabled="true"]{opacity:.45;cursor:not-allowed;pointer-events:none}
/* Button helpers */
button.border,a.button.border{background:transparent;color:var(--inverse-surface)}
button.border:hover,a.button.border:hover{background:var(--inverse-surface);color:var(--inverse-on-surface)}
button.primary,a.button.primary{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}
button.primary:hover,a.button.primary:hover{background:color-mix(in srgb,var(--primary) 85%,#000);border-color:color-mix(in srgb,var(--primary) 85%,#000)}
button.secondary,a.button.secondary{background:var(--secondary);border-color:var(--secondary);color:var(--on-secondary)}
button.secondary:hover,a.button.secondary:hover{background:color-mix(in srgb,var(--secondary) 85%,#000);border-color:color-mix(in srgb,var(--secondary) 85%,#000)}
button.tertiary,a.button.tertiary{background:var(--tertiary);border-color:var(--tertiary);color:var(--on-tertiary)}
button.tertiary:hover,a.button.tertiary:hover{background:color-mix(in srgb,var(--tertiary) 85%,#000);border-color:color-mix(in srgb,var(--tertiary) 85%,#000)}
button.error,a.button.error{background:var(--error);border-color:var(--error);color:var(--on-error)}
button.error:hover,a.button.error:hover{background:color-mix(in srgb,var(--error) 85%,#000);border-color:color-mix(in srgb,var(--error) 85%,#000)}
button.success,a.button.success{background:var(--success);border-color:var(--success);color:#fff}
button.warning,a.button.warning{background:var(--warning);border-color:var(--warning);color:#fff}
button.fill,a.button.fill{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}
button.fill:hover,a.button.fill:hover{background:color-mix(in srgb,var(--primary) 85%,#000);border-color:color-mix(in srgb,var(--primary) 85%,#000)}
button.transparent,a.button.transparent{background:transparent;border-color:transparent;color:var(--on-surface)}
button.transparent:hover,a.button.transparent:hover{background:color-mix(in srgb,var(--on-surface) 8%,transparent)}
/* Button sizes */
button.small,a.button.small{padding:6px 12px;font-size:.72rem;min-height:36px;min-width:36px}
button.large,a.button.large{padding:12px 26px;font-size:.92rem}
button.extra,a.button.extra{padding:14px 32px;font-size:1rem}
/* Button shapes */
button.circle,a.button.circle{border-radius:50%;width:44px;height:44px;padding:0;font-size:1.05rem}
button.circle.small,a.button.circle.small{width:36px;height:36px;font-size:.9rem;min-height:36px;min-width:36px}
button.circle.large,a.button.circle.large{width:52px;height:52px;font-size:1.2rem}
button.circle.extra,a.button.circle.extra{position:fixed;bottom:62px;right:20px;width:56px;height:56px;padding:0;font-size:1.3rem;z-index:30;box-shadow:0 4px 12px rgba(0,0,0,.25)}
button.round,a.button.round{border-radius:24px}
button.extend,a.button.extend{width:100%}
button.extend.circle,a.button.extend.circle{position:fixed;bottom:62px;right:20px;width:auto;height:auto;padding:14px 24px;font-size:.9rem;z-index:30;box-shadow:0 4px 12px rgba(0,0,0,.25);border-radius:28px;gap:8px}
button.responsive,a.button.responsive{min-width:0}
@media(max-width:640px){button.responsive span,a.button.responsive span{display:none}}
/* Segmented buttons */
.segmented{display:inline-flex;border:2px solid var(--inverse-surface)}
.segmented button{border:none;border-right:1px solid var(--outline);background:var(--surface);color:var(--on-surface);font-size:.76rem;padding:8px 16px}
.segmented button:last-child{border-right:none}.segmented button:hover{background:var(--surface-container-highest)}.segmented button[aria-pressed="true"]{background:var(--inverse-surface);color:var(--inverse-on-surface)}
.segmented.round{border-radius:24px;overflow:hidden}.segmented.round button:first-child{border-radius:22px 0 0 22px}.segmented.round button:last-child{border-radius:0 22px 22px 0}

/* ── Article (Card) ── */
article{background:var(--surface);border:1px solid var(--inverse-surface);overflow:hidden}
article > h6,article > header{padding:8px 12px;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;background:var(--inverse-surface);color:var(--inverse-on-surface);border-bottom:1px solid var(--inverse-surface);margin:0}
article > div{padding:14px}
article > nav,article > footer{padding:8px 12px;border-top:1px solid var(--outline);background:color-mix(in srgb,var(--outline) 12%,var(--surface));display:flex;align-items:center;justify-content:flex-end;gap:6px}
article.flat{border-color:var(--outline)}
article.flat > h6,article.flat > header{background:color-mix(in srgb,var(--outline) 20%,var(--surface));color:var(--on-surface)}
article.border{border-width:2px}
article.elevate{box-shadow:0 2px 6px rgba(0,0,0,.15);border-color:var(--outline)}
article.fill{background:var(--primary-container);border-color:var(--primary)}
article.round{border-radius:16px;overflow:hidden}
article.small{max-width:260px}
article.medium{max-width:360px}

/* ── Chip ── */
.chip{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;font-size:.72rem;font-weight:600;border:1px solid var(--inverse-surface);background:var(--surface);color:var(--on-surface)}
.chip.fill{background:var(--inverse-surface);color:var(--inverse-on-surface);border-color:var(--inverse-surface)}
.chip.primary{background:var(--primary);color:var(--on-primary);border-color:var(--primary)}
.chip.secondary{background:var(--secondary);color:var(--on-secondary);border-color:var(--secondary)}
.chip.tertiary{background:var(--tertiary);color:var(--on-tertiary);border-color:var(--tertiary)}
.chip.error{background:var(--error);color:var(--on-error);border-color:var(--error)}
.chip.success{background:var(--success);color:#fff;border-color:var(--success)}
.chip.warning{background:var(--warning);color:#fff;border-color:var(--warning)}
.chip.round{border-radius:16px}.chip.circle{border-radius:50%;width:32px;height:32px;padding:0;justify-content:center}
.chip .close{cursor:pointer;opacity:.7;font-size:.7rem;background:none;border:none;color:inherit;padding:2px;min-width:20px;min-height:20px;display:inline-flex;align-items:center;justify-content:center}.chip .close:hover{opacity:1}

/* ── Badge ── */
.badge-wrap{position:relative;display:inline-flex}
.badge{position:absolute;top:-6px;right:-6px;min-width:18px;height:18px;padding:0 5px;font-size:.58rem;font-weight:700;background:var(--error);color:var(--on-error);border-radius:9px;display:flex;align-items:center;justify-content:center;line-height:1}
.badge.dot{min-width:10px;height:10px;padding:0}
.badge.left{right:auto;left:-6px}.badge.bottom{top:auto;bottom:-6px}
.badge.primary{background:var(--primary);color:var(--on-primary)}
.badge.secondary{background:var(--secondary);color:var(--on-secondary)}

/* ── Form Fields ── */
.field{margin-bottom:1rem}.field>label{display:block;font-size:.8rem;font-weight:600;margin-bottom:4px}
.field input,.field textarea,.field select{display:block;width:100%;font-family:var(--font-family);font-size:1rem;color:var(--on-surface);background:var(--surface);border:1px solid var(--outline);padding:8px 10px;outline:none;transition:border-color .12s,background .12s;min-height:44px}
.field input:focus-visible,.field textarea:focus-visible,.field select:focus-visible{outline:3px solid var(--focus-ring);outline-offset:1px}
.field input::placeholder,.field textarea::placeholder{color:var(--on-surface-variant)}
.field textarea{min-height:5rem;resize:vertical}
.field select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23595959'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:28px}
.field .hint{display:block;margin-top:3px;font-size:.72rem;color:var(--on-surface-variant)}
.field.error input,.field.error select,.field.error textarea{border-color:var(--error);border-width:2px}.field.error .hint{color:var(--error);font-weight:600}
.field input:disabled,.field select:disabled,.field textarea:disabled{opacity:.45;cursor:not-allowed}
.field.fill input,.field.fill select{background:color-mix(in srgb,var(--outline) 15%,var(--surface));border-color:transparent;border-bottom:2px solid var(--outline)}
.field.fill input:focus-visible,.field.fill select:focus-visible{border-bottom-color:var(--inverse-surface);background:var(--surface-container-highest)}
.field.border input,.field.border select,.field.border textarea{border:2px solid var(--inverse-surface)}
.field.round input,.field.round select{border-radius:24px;padding-left:16px;padding-right:16px}
.field.prefix{position:relative}.field.prefix input{padding-left:36px}.field.prefix i{position:absolute;left:10px;top:34px;font-style:normal}
.field.suffix{position:relative}.field.suffix input{padding-right:36px}.field.suffix i{position:absolute;right:10px;top:34px;font-style:normal}

/* ── Checkbox / Radio ── */
label.checkbox,label.radio{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:.88rem;padding:4px 0;user-select:none;min-height:44px}
label.checkbox input,label.radio input{width:20px;height:20px;accent-color:var(--inverse-surface);cursor:pointer;margin:0;flex-shrink:0}
label.checkbox.icon input{display:none}label.checkbox.icon .mark{font-size:1.2rem;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:2px solid var(--outline);background:var(--surface);transition:all .15s}
label.checkbox.icon input:checked+.mark{background:var(--inverse-surface);color:var(--inverse-on-surface);border-color:var(--inverse-surface)}
label.radio.icon input{display:none}label.radio.icon .mark{font-size:1.2rem;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:2px solid var(--outline);border-radius:50%;background:var(--surface);transition:all .15s}
label.radio.icon input:checked+.mark{background:var(--inverse-surface);color:var(--inverse-on-surface);border-color:var(--inverse-surface)}

/* ── Switch ── */
.switch-row{display:flex;align-items:center;gap:10px;min-height:44px}
.switch{width:48px;height:28px;background:var(--outline);border:2px solid var(--inverse-surface);position:relative;transition:background .2s;flex-shrink:0;cursor:pointer}
.switch::after{content:'';position:absolute;left:3px;top:3px;width:18px;height:18px;background:var(--surface);border:1px solid var(--inverse-surface);transition:transform .2s}
.switch[aria-checked="true"]{background:var(--inverse-surface)}.switch[aria-checked="true"]::after{transform:translateX(20px);background:#fff}

/* ── Slider ── */
.slider input[type="range"]{-webkit-appearance:none;appearance:none;width:100%;height:8px;background:var(--outline);outline:none;cursor:pointer;border:1px solid var(--inverse-surface)}
.slider input[type="range"]::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;background:var(--inverse-surface);border:2px solid var(--inverse-surface);cursor:pointer}

/* ── Tabs ── */
.tabs{display:flex;border:2px solid var(--inverse-surface);background:var(--surface);overflow-x:auto}
.tabs [role="tab"]{flex:1;text-align:center;padding:10px 14px;font-size:.76rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--on-surface-variant);border:none;border-right:1px solid var(--outline);cursor:pointer;background:transparent;font-family:var(--font-family);white-space:nowrap;min-height:44px;transition:background .1s}
.tabs [role="tab"]:last-child{border-right:none}.tabs [role="tab"]:hover{background:var(--surface-container-highest)}.tabs [role="tab"][aria-selected="true"]{background:var(--inverse-surface);color:var(--inverse-on-surface)}
.tabs [role="tab"]:focus-visible{outline:3px solid var(--focus-ring);outline-offset:-3px}
.tabs.vertical{flex-direction:column;width:180px}.tabs.vertical [role="tab"]{text-align:left;border-right:none;border-bottom:1px solid var(--outline)}.tabs.vertical [role="tab"]:last-child{border-bottom:none}

/* ── Table ── */
table{width:100%;border-collapse:collapse;font-size:.84rem;border:1px solid var(--inverse-surface)}
caption{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--on-surface-variant);padding:8px 0;text-align:left;caption-side:top}
thead{background:var(--inverse-surface);color:var(--inverse-on-surface)}
th{font-weight:700;text-align:left;padding:8px 11px;font-size:.7rem;text-transform:uppercase;letter-spacing:.05em}
td{padding:8px 11px;border-bottom:1px solid var(--outline);border-right:1px solid var(--outline)}td:last-child{border-right:none}
tbody tr:hover{background:var(--surface-container-highest)}
table.stripes tbody tr:nth-child(even){background:color-mix(in srgb,var(--outline) 12%,var(--surface))}
table.border td,table.border th{border:1px solid var(--outline)}

/* ── Dialog ── */
dialog,.dialog-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:60;display:flex;align-items:center;justify-content:center;padding:1rem}
dialog > article,.dialog{background:var(--surface);border:2px solid var(--inverse-surface);width:100%;max-width:480px;max-height:85vh;overflow-y:auto}
.dialog.left{position:fixed;left:0;top:0;bottom:0;max-width:340px;max-height:100vh}
.dialog.right{position:fixed;right:0;top:0;bottom:0;max-width:340px;max-height:100vh}
.dialog.top{position:fixed;top:0;left:0;right:0;max-width:100%;max-height:50vh}
.dialog.bottom{position:fixed;bottom:0;left:0;right:0;max-width:100%;max-height:50vh}
.dialog.full{max-width:100%;max-height:100vh;width:100%;height:100%}
.dialog.round{border-radius:24px;overflow:hidden}
.dialog.modal{box-shadow:0 8px 32px rgba(0,0,0,.25)}

/* ── Menu ── */
.menu-wrap{position:relative;display:inline-block}
menu,.menu{position:absolute;top:100%;left:0;min-width:200px;background:var(--surface);border:1px solid var(--inverse-surface);box-shadow:0 4px 16px rgba(0,0,0,.12);z-index:25;display:none;list-style:none}
menu.open,.menu.open{display:block}menu.right,.menu.right{left:auto;right:0}
menu [role="menuitem"],.menu [role="menuitem"]{display:flex;align-items:center;gap:10px;padding:10px 14px;font-size:.84rem;color:var(--on-surface);border:none;border-bottom:1px solid var(--outline);background:transparent;width:100%;text-align:left;cursor:pointer;font-family:var(--font-family);min-height:44px;transition:background .1s}
menu [role="menuitem"]:last-child,.menu [role="menuitem"]:last-child{border-bottom:none}
menu [role="menuitem"]:hover,.menu [role="menuitem"]:hover,menu [role="menuitem"]:focus,.menu [role="menuitem"]:focus{background:var(--surface-container-highest);outline:none}
menu .label,.menu .label{padding:6px 14px;font-size:.64rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--on-surface-variant);background:color-mix(in srgb,var(--outline) 15%,var(--surface));border-bottom:1px solid var(--outline)}

/* ── List ── */
ul.list,ol.list{border:1px solid var(--inverse-surface);background:var(--surface);list-style:none;padding:0;margin:0}
ul.list li,ol.list li{display:flex;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--outline);font-size:.88rem;transition:background .1s}
ul.list li:last-child,ol.list li:last-child{border-bottom:none}
ul.list li:hover,ol.list li:hover{background:var(--surface-container-highest)}
ul.list i,ol.list i,ul.list .ic,ol.list .ic{font-size:1.15rem;flex-shrink:0;width:24px;text-align:center;font-style:normal}
ul.list .text,ol.list .text{flex:1;min-width:0}
ul.list .text small,ol.list .text small{display:block;font-size:.74rem;color:var(--on-surface-variant);margin-top:1px}
ul.list .arrow,ol.list .arrow{flex-shrink:0;color:var(--on-surface-variant);font-size:.8rem}
ul.list li.clickable,ol.list li.clickable{cursor:pointer}

/* ── Accordion (details) ── */
details{border:1px solid var(--inverse-surface);background:var(--surface)}details+details{border-top:none}
details > summary{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;font-size:.88rem;font-weight:600;cursor:pointer;border:none;background:transparent;width:100%;text-align:left;font-family:var(--font-family);color:var(--on-surface);min-height:48px;transition:background .12s;list-style:none}
details > summary::-webkit-details-marker{display:none}
details > summary:hover{background:var(--surface-container-highest)}
details > summary .arrow{transition:transform .2s;font-size:.7rem;font-style:normal}
details[open] > summary .arrow{transform:rotate(180deg)}
details > div{padding:4px 14px 14px;font-size:.88rem;color:var(--on-surface-variant);line-height:1.6}
/* Also support class-based accordion for JS-driven */
.accordion{border:1px solid var(--inverse-surface);background:var(--surface)}.accordion+.accordion{border-top:none}
.accordion-trigger{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;font-size:.88rem;font-weight:600;cursor:pointer;border:none;background:transparent;width:100%;text-align:left;font-family:var(--font-family);color:var(--on-surface);min-height:48px;transition:background .12s}
.accordion-trigger:hover{background:var(--surface-container-highest)}
.accordion-trigger .arrow{transition:transform .2s;font-size:.7rem;font-style:normal}
.accordion-trigger[aria-expanded="true"] .arrow{transform:rotate(180deg)}
.accordion-panel{padding:4px 14px 14px;font-size:.88rem;color:var(--on-surface-variant);line-height:1.6}

/* ── Progress ── */
progress,.progress{width:100%;height:8px;background:color-mix(in srgb,var(--outline) 40%,var(--surface));overflow:hidden;border:1px solid var(--outline)}
.progress-fill{height:100%;background:var(--inverse-surface);transition:width .3s}
.progress.primary .progress-fill{background:var(--primary)}
.progress-indeterminate{width:100%;height:8px;background:color-mix(in srgb,var(--outline) 40%,var(--surface));overflow:hidden;border:1px solid var(--outline);position:relative}
.progress-indeterminate::after{content:'';position:absolute;left:-40%;top:0;bottom:0;width:40%;background:var(--inverse-surface);animation:progress-ind 1.4s infinite ease-in-out}
@keyframes progress-ind{0%{left:-40%}100%{left:100%}}
.spinner{width:40px;height:40px;border:4px solid var(--outline);border-top-color:var(--inverse-surface);border-radius:50%;animation:spin 1s linear infinite}
.spinner.small{width:24px;height:24px;border-width:3px}.spinner.large{width:56px;height:56px;border-width:5px}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── Snackbar ── */
.snackbar{position:fixed;bottom:80px;left:50%;transform:translateX(-50%) translateY(120px);background:var(--inverse-surface);color:var(--inverse-on-surface);padding:10px 20px;font-size:.84rem;font-weight:500;border:2px solid var(--inverse-surface);box-shadow:0 4px 16px rgba(0,0,0,.25);z-index:70;display:flex;align-items:center;gap:14px;transition:transform .3s ease;white-space:nowrap}
.snackbar.top{bottom:auto;top:60px;transform:translateX(-50%) translateY(-120px)}
.snackbar.visible{transform:translateX(-50%) translateY(0)}

/* ── Tooltip ── */
.tooltip-wrap{position:relative;display:inline-flex}
.tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:var(--inverse-surface);color:var(--inverse-on-surface);padding:5px 10px;font-size:.7rem;font-weight:600;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s;z-index:20;border:1px solid var(--inverse-surface)}
.tooltip-wrap:hover .tooltip,.tooltip-wrap:focus-within .tooltip{opacity:1}
.tooltip.bottom{bottom:auto;top:calc(100% + 8px)}.tooltip.left{left:auto;right:calc(100% + 8px);bottom:auto;top:50%;transform:translateY(-50%)}.tooltip.right{left:calc(100% + 8px);bottom:auto;top:50%;transform:translateY(-50%);right:auto}

/* ── Page ── */
.page{display:none;padding:1rem;background:var(--surface);border:1px solid var(--inverse-surface)}.page.active{display:block;animation:page-in .25s ease}
@keyframes page-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* ── Shape ── */
.shape{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;background:var(--primary-container);border:1px solid var(--outline)}
.shape.circle{border-radius:50%}.shape.round{border-radius:16px}.shape.square{border-radius:0}
.shape.small{width:40px;height:40px}.shape.medium{width:64px;height:64px}.shape.large{width:96px;height:96px}
.shape.left-round{border-radius:16px 0 0 16px}.shape.right-round{border-radius:0 16px 16px 0}
.shape.top-round{border-radius:16px 16px 0 0}.shape.bottom-round{border-radius:0 0 16px 16px}

/* ── Divider ── */
.divider{height:1px;background:var(--outline);margin:.75rem 0}.divider.thick{height:2px;background:var(--inverse-surface)}
.divider.vertical{width:1px;height:auto;align-self:stretch;background:var(--outline);margin:0 .75rem}

/* ══════════════════════════════════════════
   3. HELPERS — Modifier Classes
   ══════════════════════════════════════════ */

/* ── GridForm (BrewCSS addition) ── */
.grid-form{border:2px solid var(--inverse-surface);background:var(--surface)}
.grid-form fieldset{border:none;padding:0;margin:0}.grid-form fieldset+fieldset{border-top:2px solid var(--inverse-surface)}
.grid-form legend{display:block;float:left;width:100%;padding:8px 12px;margin:0;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;background:var(--inverse-surface);color:var(--inverse-on-surface);border-bottom:1px solid var(--inverse-surface)}
.grid-form fieldset::after{content:'';display:table;clear:both}
.grid-form .row{display:grid;width:100%;border-bottom:1px solid var(--outline)}.grid-form fieldset>.row:last-child{border-bottom:none}
.grid-form .row.c2{grid-template-columns:repeat(2,1fr)}.grid-form .row.c3{grid-template-columns:repeat(3,1fr)}.grid-form .row.c4{grid-template-columns:repeat(4,1fr)}.grid-form .row.c5{grid-template-columns:repeat(5,1fr)}
.grid-form .cell{display:flex;flex-direction:column;min-width:0}.grid-form .cell.s2{grid-column:span 2}.grid-form .cell.s3{grid-column:span 3}
.grid-form .cell+.cell{border-left:1px solid var(--outline)}
.grid-form .cell>label{font-size:.66rem;font-weight:600;color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.05em;padding:4px 9px 0;line-height:1.7}
.grid-form .cell input,.grid-form .cell select{border:none;padding:4px 9px 6px;font-size:1rem;font-family:var(--font-family);background:transparent;color:var(--on-surface);flex:1;min-width:0;width:100%;outline:none;min-height:36px}
.grid-form .cell input:focus-visible,.grid-form .cell select:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}

/* ── Bones Grid (BrewCSS addition) ── */
.grid{display:grid;gap:0;border:1px solid var(--inverse-surface);background:var(--surface)}.grid>*{border-right:1px solid var(--outline);border-bottom:1px solid var(--outline);min-width:0}
.grid.gap{gap:12px;border:none;background:transparent}.grid.gap>*{border:none}

/* ── Layout helpers ── */
.row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:10px}
.spacer{flex:1;border:none}

/* ── Spacing helpers ── */
.padding{padding:1rem}.no-padding{padding:0}.small-padding{padding:.5rem}.medium-padding{padding:1rem}.large-padding{padding:2rem}
.margin{margin:1rem}.no-margin{margin:0}.small-margin{margin:.5rem}.medium-margin{margin:1rem}.large-margin{margin:2rem}

/* ── Visibility ── */
.responsive{display:block}
@media(max-width:640px){.hide-small{display:none!important}}
@media(min-width:641px){.hide-large{display:none!important}}

/* ── Overflow ── */
.overflow-x{overflow-x:auto}

/* ── Empty state ── */
.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center;background:var(--surface);border:1px solid var(--outline);color:var(--on-surface-variant);min-height:180px}

/* ── Template preview ── */
.template-preview{border:1px solid var(--inverse-surface);background:var(--surface);height:180px;display:flex;overflow:hidden;position:relative;cursor:pointer;transition:all .15s}
.template-preview:hover{box-shadow:0 4px 16px rgba(0,0,0,.15);transform:translateY(-2px)}
.template-preview .side{width:48px;background:var(--inverse-surface);display:flex;flex-direction:column;align-items:center;padding-top:6px;gap:6px;flex-shrink:0}
.template-preview .side.wide{width:140px;padding:8px;align-items:flex-start;gap:4px}
.template-preview .side .dot{width:6px;height:6px;background:rgba(255,255,255,.5);border-radius:50%}
.template-preview .side .dot.primary{background:var(--primary)}
.template-preview .side .bar{width:60%;height:4px;background:rgba(255,255,255,.3);border-radius:2px}
.template-preview .main{flex:1;display:flex;flex-direction:column}
.template-preview .top-bar{height:28px;background:var(--inverse-surface);border-bottom:1px solid var(--inverse-surface);display:flex;align-items:center;padding:0 8px;gap:4px}
.template-preview .top-bar .bar{width:30%;height:4px;background:rgba(255,255,255,.3);border-radius:2px}
.template-preview .body{flex:1;padding:6px;display:flex;flex-direction:column;gap:4px}
.template-preview .body .line{height:4px;background:var(--outline);border-radius:2px;width:80%}.template-preview .body .line.short{width:50%}.template-preview .body .line.full{width:100%}
.template-preview .body .box{flex:1;border:1px solid var(--outline);border-radius:4px}
.template-preview .bottom-bar{height:24px;background:var(--inverse-surface);border-top:1px solid var(--inverse-surface);display:flex;align-items:center;justify-content:space-around;padding:0 4px}
.template-preview .bottom-bar .dot{width:5px;height:5px;background:rgba(255,255,255,.4);border-radius:50%}
.template-preview .preview-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px;flex:1}
.template-preview .preview-grid .box{border:1px solid var(--outline);border-radius:4px}
.template-label{font-size:.72rem;font-weight:700;margin-top:6px;text-align:center;color:var(--on-surface-variant)}

/* ── Demo utilities ── */
.section{padding:2rem 0}.section+.section{border-top:2px solid var(--inverse-surface)}
.section-tag{font-size:.64rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--on-surface-variant);margin-bottom:3px}
.demo-cell{padding:8px;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--on-surface-variant);background:var(--surface);text-align:center;display:flex;align-items:center;justify-content:center;min-height:36px}
.demo-cell.dark{background:var(--inverse-surface);color:var(--inverse-on-surface)}
.text-small{font-size:.85rem}.text-tiny{font-size:.7rem}.text-muted{color:var(--on-surface-variant)}.text-bold{font-weight:700}.text-upper{text-transform:uppercase;letter-spacing:.05em}
.margin-bottom-0{margin-bottom:0}.margin-bottom-2{margin-bottom:.5rem}.margin-top-4{margin-top:1rem}.margin-top-6{margin-top:1.5rem}.no-padding{padding:0}.small-padding{padding:.75rem}

/* ── Responsive ── */
@media(max-width:640px){
  .grid-form .row{grid-template-columns:1fr!important}
  .grid-form .cell{grid-column:span 1!important}
  .grid-form .cell+.cell{border-left:none;border-top:1px solid var(--outline)}
  nav.rail{display:none}
  .hide-small{display:none!important}
}
