/* Laterite admin stylesheet.
*
* One self-contained asset (no build step, no Node): design tokens as custom
* properties, then semantic component classes. Cascade layers keep the order
* predictable so a plugin or application can override framework styles from an
* unlayered rule without specificity fights. Dark mode swaps the semantic
* variables under [data-theme="dark"]. */
@font-face{font-family:"Space Grotesk";src:url("fonts/space-grotesk-500.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Space Grotesk";src:url("fonts/space-grotesk-600.woff2") format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Space Grotesk";src:url("fonts/space-grotesk-700.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:"IBM Plex Sans";src:url("fonts/ibm-plex-sans-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"IBM Plex Sans";src:url("fonts/ibm-plex-sans-600.woff2") format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"IBM Plex Mono";src:url("fonts/ibm-plex-mono-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"IBM Plex Mono";src:url("fonts/ibm-plex-mono-600.woff2") format("woff2");font-weight:600;font-style:normal;font-display:swap}
@layer tokens, base, components;
@layer tokens{
:root{
/* Laterite Red */
--red-50:#FBF1ED;--red-100:#F5DCD3;--red-200:#E9B9A8;--red-300:#DA917A;--red-400:#CE6C4E;
--red-500:#C44E2F;--red-600:#A83F24;--red-700:#86311B;--red-800:#632415;--red-900:#3F170D;
/* Ferro Charcoal */
--ferro-950:#160F0C;--ferro-900:#1E1714;--ferro-800:#2A211C;--ferro-700:#3A2F28;
--ferro-600:#4B3E35;--ferro-500:#5F5147;--ferro-400:#7A6A5E;
/* Bone / Kaolin */
--bone-50:#FDFAF6;--bone-100:#F9F4EC;--bone-200:#F4EDE4;--bone-300:#EADFD1;--bone-400:#DBCCB9;--bone-500:#C7B49D;
/* Ochre / Amber */
--ochre-50:#FDF6EA;--ochre-100:#FBEEDA;--ochre-300:#EBC183;--ochre-500:#D98E32;--ochre-600:#BC7724;--ochre-700:#A9681E;
/* Slate */
--slate-50:#F1F3F4;--slate-100:#E4E7E9;--slate-200:#C7CCCF;--slate-300:#9AA2A7;
--slate-400:#767E84;--slate-500:#5A6166;--slate-600:#464C50;--slate-700:#33383B;--slate-800:#242829;
/* Semantic hues */
--green-100:#E3EDE6;--green-500:#2F5A3B;--green-700:#244832;
--danger-100:#F6DCD7;--danger-500:#9E3220;--danger-700:#7A2517;
--ocean-500:#274C5A;
/* Alpha utilities */
--alpha-ferro-06:rgba(42,33,28,.06);--alpha-ferro-10:rgba(42,33,28,.10);--alpha-ferro-16:rgba(42,33,28,.16);
--alpha-red-08:rgba(196,78,47,.08);--alpha-red-16:rgba(196,78,47,.16);
--alpha-bone-08:rgba(244,237,228,.08);--alpha-bone-14:rgba(244,237,228,.14);
/* Type */
--font-display:"Space Grotesk","Poppins",system-ui,sans-serif;
--font-body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
--font-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
--fs-10:10px;--fs-11:11px;--fs-12:12px;--fs-13:13px;--fs-14:14px;--fs-15:15px;--fs-16:16px;
--fs-18:18px;--fs-20:20px;--fs-24:24px;--fs-28:28px;--fs-32:32px;--fs-40:40px;
--fw-regular:400;--fw-medium:500;--fw-semibold:600;--fw-bold:700;
--lh-tight:1.1;--lh-snug:1.25;--lh-normal:1.45;--lh-relaxed:1.6;
--ls-caps:.09em;--ls-caps-wide:.14em;--ls-display:-.02em;
/* Spacing + chrome */
--space-4:8px;--space-5:12px;--space-6:16px;--space-7:20px;--space-8:24px;--space-9:32px;
--topnav-h:66px;--sidebar-w:270px;--control-h:40px;--control-h-sm:32px;--control-h-lg:48px;
--page-gutter:32px;--card-pad:20px;--side-panel-w:350px;--login-form-col-w:480px;--note-max:720px;
/* Radius */
--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--radius-brick:10px;--radius-pill:999px;
--radius-control:8px;--radius-card:8px;
/* Elevation (warm, Ferro-tinted) */
--shadow-sm:0 1px 2px rgba(42,33,28,.07),0 1px 1px rgba(42,33,28,.04);
--shadow-card:0 1px 3px rgba(42,33,28,.08),0 1px 2px rgba(42,33,28,.04);
--shadow-md:0 4px 12px rgba(42,33,28,.10);
--shadow-lg:0 12px 32px rgba(42,33,28,.14);
--shadow-inset-dark:inset 0 1px 2px rgba(0,0,0,.35);
--ring-focus:0 0 0 3px rgba(196,78,47,.24);
--ring-focus-danger:0 0 0 3px rgba(158,50,32,.24);
/* Motion */
--dur-fast:120ms;--ease-standard:cubic-bezier(.2,.8,.3,1);
--transition-control:background-color var(--dur-fast) var(--ease-standard),border-color var(--dur-fast) var(--ease-standard),color var(--dur-fast) var(--ease-standard),box-shadow var(--dur-fast) var(--ease-standard);
/* Semantic aliases (light) */
--surface-page:var(--bone-200);--surface-card:#FFFCF8;--surface-raised:var(--bone-50);--surface-sunken:var(--bone-300);
--surface-nav:var(--ferro-800);--surface-sidebar:var(--ferro-700);--surface-sidebar-active:rgba(244,237,228,.09);
--surface-toolbar:var(--bone-100);--surface-row-hover:var(--red-50);
--surface-input:#FFFFFF;--icon-clear:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235A6166' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");--icon-calendar:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235A6166' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M16 2v4M8 2v4M3 10h18'/%3E%3C/svg%3E");--icon-check:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");--select-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235A6166' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");--surface-input-disabled:var(--bone-200);--surface-overlay:rgba(42,33,28,.48);
--text-heading:var(--ferro-800);--text-body:var(--ferro-700);--text-muted:var(--slate-500);--text-subtle:var(--slate-400);
--text-inverse:var(--bone-200);--text-inverse-muted:var(--slate-300);--text-link:var(--red-500);--text-link-hover:var(--red-600);--text-on-accent:#FFF7F2;
--border-subtle:var(--bone-300);--border-default:var(--bone-400);--border-strong:var(--slate-300);--border-input:var(--slate-200);
--accent:var(--red-500);--accent-hover:var(--red-600);--accent-active:var(--red-700);--accent-subtle:var(--red-50);--accent-quiet:var(--alpha-red-08);
--attention:var(--ochre-500);--attention-subtle:var(--ochre-100);--attention-text:var(--ochre-700);
--success:var(--green-500);--success-subtle:var(--green-100);--danger:var(--danger-500);--danger-subtle:var(--danger-100);--info:var(--ocean-500);--neutral-badge:var(--slate-100);
}
[data-theme="dark"]{
--surface-page:var(--ferro-900);--surface-card:var(--ferro-800);--surface-raised:var(--ferro-700);--surface-sunken:var(--ferro-950);
--surface-nav:var(--ferro-950);--surface-sidebar:var(--ferro-800);--surface-sidebar-active:rgba(244,237,228,.07);
--surface-toolbar:var(--ferro-800);--surface-row-hover:rgba(196,78,47,.10);
--surface-input:var(--ferro-900);--surface-input-disabled:var(--ferro-700);--icon-clear:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239AA2A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");--icon-calendar:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239AA2A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M16 2v4M8 2v4M3 10h18'/%3E%3C/svg%3E");--select-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239AA2A7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");--surface-overlay:rgba(10,7,5,.62);
--text-heading:var(--bone-100);--text-body:var(--bone-200);--text-muted:var(--slate-300);--text-subtle:var(--slate-400);
--text-inverse:var(--ferro-800);--text-inverse-muted:var(--ferro-600);--text-link:var(--red-300);--text-link-hover:var(--red-200);
--border-subtle:rgba(244,237,228,.09);--border-default:rgba(244,237,228,.14);--border-strong:rgba(244,237,228,.22);--border-input:rgba(244,237,228,.16);
--accent-subtle:rgba(196,78,47,.14);--accent-quiet:rgba(196,78,47,.10);
--attention-subtle:rgba(217,142,50,.16);--attention-text:var(--ochre-300);--success-subtle:rgba(47,90,59,.22);--danger-subtle:rgba(158,50,32,.24);--neutral-badge:rgba(244,237,228,.10);
}
}
@layer base{
*,*::before,*::after{box-sizing:border-box}
html{color-scheme:light}
html[data-theme="dark"]{color-scheme:dark}
body{margin:0;background:var(--surface-page);color:var(--text-body);font-family:var(--font-body);font-size:var(--fs-14);line-height:var(--lh-normal);-webkit-font-smoothing:antialiased}
h1,h2,h3,h4,h5{font-family:var(--font-display);color:var(--text-heading);letter-spacing:var(--ls-display);margin:0;font-weight:var(--fw-semibold);line-height:var(--lh-snug)}
h1{font-size:var(--fs-32)}h2{font-size:var(--fs-24)}h3{font-size:var(--fs-18)}
a{color:var(--text-link);text-decoration:none;transition:color var(--dur-fast) var(--ease-standard)}
a:hover{color:var(--text-link-hover);text-decoration:underline;text-underline-offset:2px}
:focus-visible{outline:none;box-shadow:var(--ring-focus)}
.lat-eyebrow{font-size:var(--fs-11);font-weight:var(--fw-semibold);letter-spacing:var(--ls-caps-wide);text-transform:uppercase;color:var(--text-muted)}
}
@layer components{
/* App shell */
.lat-app{min-height:100vh;display:flex;flex-direction:column;background:var(--surface-page)}
.lat-body{flex:1;display:flex;min-height:0}
.lat-main{flex:1;min-width:0;overflow-y:auto}
.lat-page{padding:var(--page-gutter)}
/* Top navigation */
.lat-topnav{height:var(--topnav-h);flex:0 0 auto;display:flex;align-items:stretch;background:var(--surface-nav);color:var(--text-inverse);padding-right:16px;position:relative;z-index:20}
.lat-topnav__brand{display:flex;align-items:center;gap:10px;padding:0 22px 0 20px;text-decoration:none}
.lat-topnav__brand:hover{text-decoration:none}
.lat-topnav__brand img{height:30px}
.lat-topnav__wordmark{font-family:var(--font-display);font-weight:var(--fw-semibold);font-size:var(--fs-18);letter-spacing:-.02em;color:var(--bone-100)}
.lat-topnav__nav{display:flex;align-items:stretch;gap:2px}
.lat-topnav__section{display:flex;align-items:center;justify-content:center;gap:8px;min-width:78px;padding:0 16px;border:0;cursor:pointer;background:transparent;color:var(--slate-300);font-family:var(--font-body);font-size:var(--fs-11);font-weight:var(--fw-medium);letter-spacing:var(--ls-caps);text-transform:uppercase;text-decoration:none;transition:var(--transition-control)}
.lat-topnav__section:hover{background:var(--alpha-bone-08);color:var(--bone-100);text-decoration:none}
.lat-topnav__section.is-active{background:var(--alpha-bone-08);color:var(--bone-100);font-weight:var(--fw-semibold);box-shadow:inset 0 -3px 0 var(--accent)}
.lat-topnav__ico{display:inline-flex;align-items:center;opacity:.85}
.lat-topnav__ico svg{width:15px;height:15px}
.lat-topnav__section.is-active .lat-topnav__ico,.lat-topnav__section:hover .lat-topnav__ico{opacity:1}
.lat-topnav__spacer{flex:1}
.lat-topnav__right{display:flex;align-items:center;gap:12px}
.lat-avatar{width:36px;height:36px;border-radius:var(--radius-lg);background:var(--red-600);color:#FFF7F2;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:var(--fw-semibold);font-size:var(--fs-13)}
.lat-usermenu{position:relative}
.lat-usermenu>summary{list-style:none;cursor:pointer}
.lat-usermenu>summary::-webkit-details-marker{display:none}
.lat-usermenu__panel{position:absolute;top:calc(100% + 8px);right:0;min-width:200px;background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:6px;z-index:40}
.lat-usermenu__name{padding:8px 10px 6px;font-size:var(--fs-12);color:var(--text-muted);border-bottom:1px solid var(--border-subtle);margin-bottom:4px}
.lat-usermenu__item{display:block;width:100%;text-align:left;padding:8px 10px;font-family:var(--font-body);font-size:var(--fs-13);color:var(--text-body);background:transparent;border:0;border-radius:var(--radius-control);cursor:pointer;text-decoration:none}
.lat-usermenu__item:hover{background:var(--accent-subtle)}
.lat-usermenu__poweredby{display:flex;align-items:center;gap:6px;margin-top:4px;padding:8px 10px;border-top:1px solid var(--border-subtle);font-family:var(--font-body);font-size:var(--fs-11);color:var(--text-subtle);text-decoration:none}
.lat-usermenu__poweredby img{width:14px;height:14px;opacity:.7}
.lat-usermenu__poweredby:hover{color:var(--text-muted)}
.lat-modebtn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;font-size:16px;border-radius:var(--radius-control);border:1px solid rgba(244,237,228,.22);background:transparent;color:var(--bone-200);cursor:pointer;transition:var(--transition-control)}
/* The link out to the site: same footprint as the mode button beside it, so
the two read as one group of controls. */
.lat-topnav__out{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--radius-control);border:1px solid rgba(244,237,228,.22);color:var(--bone-200);text-decoration:none;transition:var(--transition-control)}
.lat-topnav__out:hover{background:var(--alpha-bone-08)}
.lat-topnav__out svg{width:17px;height:17px}
.lat-modebtn:hover{background:var(--alpha-bone-08)}
/* Context sidebar: a full-height rail flush beside the main content, warm to
match the Ferro chrome. Groups are collapsible; items are icon + title +
description. */
.lat-sidebar{width:var(--sidebar-w);flex:0 0 auto;align-self:stretch;background:var(--surface-sidebar);color:var(--text-inverse);display:flex;flex-direction:column;overflow-y:auto;padding:10px 0 16px}
.lat-sidebar__group{padding:4px 0}
.lat-sidebar__grouphead{display:flex;align-items:center;gap:8px;padding:7px 16px;cursor:pointer;list-style:none;font-size:var(--fs-11);font-weight:var(--fw-semibold);letter-spacing:var(--ls-caps-wide);text-transform:uppercase;color:var(--bone-500);user-select:none;transition:color var(--dur-fast) var(--ease-standard)}
.lat-sidebar__grouphead::-webkit-details-marker{display:none}
.lat-sidebar__grouphead::marker{content:""}
.lat-sidebar__grouphead:hover{color:var(--bone-200)}
.lat-sidebar__chevron{margin-left:auto;display:flex;color:var(--bone-500);transition:transform var(--dur-fast) var(--ease-standard)}
.lat-sidebar__chevron svg{width:14px;height:14px;display:block}
.lat-sidebar__group:not([open]) .lat-sidebar__chevron{transform:rotate(-90deg)}
.lat-sidebar__item{display:flex;gap:11px;align-items:flex-start;width:100%;padding:9px 14px 9px 13px;border-left:3px solid transparent;color:inherit;text-decoration:none;transition:var(--transition-control)}
.lat-sidebar__item:hover{background:var(--alpha-bone-08);text-decoration:none}
.lat-sidebar__item.is-active{border-left-color:var(--accent);background:var(--surface-sidebar-active)}
.lat-sidebar__icon{flex:0 0 auto;display:flex;color:var(--bone-500);margin-top:1px}
.lat-sidebar__icon svg{width:18px;height:18px;display:block}
.lat-sidebar__item:hover .lat-sidebar__icon{color:var(--bone-200)}
.lat-sidebar__item.is-active .lat-sidebar__icon{color:var(--accent)}
.lat-sidebar__text{display:flex;flex-direction:column;min-width:0}
.lat-sidebar__title{font-size:var(--fs-13);font-weight:var(--fw-semibold);color:var(--bone-200)}
.lat-sidebar__item.is-active .lat-sidebar__title{color:var(--bone-100)}
.lat-sidebar__desc{font-size:var(--fs-12);line-height:1.4;color:var(--bone-500);margin-top:2px}
/* Buttons */
.lat-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:var(--control-h);padding:0 16px;font-family:var(--font-body);font-size:var(--fs-13);font-weight:var(--fw-semibold);border-radius:var(--radius-control);border:1px solid transparent;cursor:pointer;white-space:nowrap;text-decoration:none;transition:var(--transition-control)}
.lat-btn:hover{text-decoration:none}
.lat-btn--primary{background:var(--accent);color:var(--text-on-accent)}
.lat-btn--primary:hover{background:var(--accent-hover)}
.lat-btn--primary:active{background:var(--accent-active)}
.lat-btn--secondary{background:transparent;color:var(--text-body);border-color:var(--border-strong)}
.lat-btn--secondary:hover{background:var(--accent-quiet)}
.lat-btn--ghost{background:transparent;color:var(--text-muted)}
.lat-btn--ghost:hover{background:var(--accent-quiet)}
.lat-btn--danger{background:var(--danger);color:#FFF7F2}
.lat-btn--lg{height:var(--control-h-lg);padding:0 22px;font-size:var(--fs-15)}
.lat-btn--sm{height:var(--control-h-sm);padding:0 12px;font-size:var(--fs-12)}
.lat-btn--icon{padding:0;width:var(--control-h-sm);flex:0 0 auto}
.lat-btn--icon svg{width:16px;height:16px}
.lat-btn--block{display:flex;width:100%}
.lat-btn:disabled{background:var(--bone-200);color:var(--slate-300);cursor:not-allowed;border-color:transparent}
/* Fields + inputs */
.lat-field{display:block;margin-bottom:16px}
.lat-field__label{display:block;font-size:var(--fs-13);font-weight:var(--fw-medium);color:var(--text-body);margin-bottom:6px}
.lat-field__req{color:var(--accent);margin-left:3px}
.lat-field__help{margin:0 0 10px;font-size:var(--fs-12);color:var(--text-muted);flex-basis:100%}
.lat-field__opt{color:var(--text-muted);font-weight:var(--fw-regular);font-size:var(--fs-12)}
.lat-input{width:100%;height:var(--control-h);padding:0 12px;font-family:var(--font-body);font-size:var(--fs-13);color:var(--text-body);background:var(--surface-input);border:1px solid var(--border-input);border-radius:var(--radius-control);outline:none;transition:var(--transition-control)}
.lat-input:focus{border-color:var(--accent);box-shadow:var(--ring-focus)}
.lat-input:disabled{background:var(--surface-input-disabled);cursor:not-allowed}
/* A select is a .lat-input with the browser's own chrome removed and our
chevron drawn in; the open list stays the platform's. */
.lat-select{appearance:none;-webkit-appearance:none;padding-right:34px;background-image:var(--select-chevron);background-repeat:no-repeat;background-position:right 10px center;background-size:16px 16px;cursor:pointer}
.lat-select:disabled{cursor:not-allowed}
.lat-select[multiple]{padding-right:12px;background-image:none;height:auto}
.lat-select::-ms-expand{display:none}
/* Checkbox, radio and switch draw their own box: the platform's differs per OS
and follows none of the tokens. */
input[type=checkbox],input[type=radio]{appearance:none;-webkit-appearance:none;width:16px;height:16px;margin:0;flex:0 0 auto;display:inline-grid;place-content:center;vertical-align:middle;background:var(--surface-input);border:1px solid var(--border-input);border-radius:4px;cursor:pointer;transition:var(--transition-control)}
input[type=radio]{border-radius:50%}
input[type=checkbox]::before,input[type=radio]::before{content:"";width:10px;height:10px;transform:scale(0);transition:transform var(--dur-fast) var(--ease-standard);background:var(--text-on-accent);-webkit-mask:var(--icon-check) center/contain no-repeat;mask:var(--icon-check) center/contain no-repeat}
input[type=radio]::before{width:8px;height:8px;border-radius:50%;-webkit-mask:none;mask:none}
input[type=checkbox]:checked,input[type=radio]:checked{background:var(--accent);border-color:var(--accent)}
input[type=checkbox]:checked::before,input[type=radio]:checked::before{transform:scale(1)}
input[type=checkbox]:indeterminate{background:var(--accent);border-color:var(--accent)}
input[type=checkbox]:indeterminate::before{transform:scale(1);width:8px;height:2px;border-radius:1px;-webkit-mask:none;mask:none}
input[type=checkbox]:disabled,input[type=radio]:disabled{opacity:.5;cursor:not-allowed}
input[type=checkbox].lat-switch{width:36px;height:20px;display:inline-block;border-radius:999px;border:0;background:var(--border-strong);position:relative}
input[type=checkbox].lat-switch::before{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:var(--shadow-sm);-webkit-mask:none;mask:none;transform:none}
input[type=checkbox].lat-switch:checked{background:var(--accent);border-color:var(--accent)}
input[type=checkbox].lat-switch:checked::before{transform:translateX(16px)}
.lat-radios{display:flex;flex-direction:column;gap:6px}
/* The platform's search and date chrome: the glyphs become ours, the date
picker itself stays the platform's and follows color-scheme. */
input[type=search]{appearance:none;-webkit-appearance:none}
input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-results-button,input[type=search]::-webkit-search-results-decoration{display:none}
input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none;width:14px;height:14px;margin-left:6px;background:var(--icon-clear) center/14px no-repeat;cursor:pointer}
input[type=date]::-webkit-calendar-picker-indicator{width:16px;height:16px;background:var(--icon-calendar) center/16px no-repeat;opacity:1;cursor:pointer}
.lat-input::placeholder{color:var(--text-subtle);opacity:1}
.lat-input:-webkit-autofill,.lat-input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px var(--surface-input) inset;-webkit-text-fill-color:var(--text-body);caret-color:var(--text-body)}
::selection{background:var(--accent-subtle)}
.lat-main,.lat-sidebar,.lat-drawer__panel,.lat-tablewrap,.lat-colpicker,.lat-menu__panel{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}
/* Where the browser can render the open list in-page (customizable select),
it takes the menu panel's look; elsewhere the platform's popup stands. */
@supports (appearance:base-select){
.lat-select,.lat-select::picker(select){appearance:base-select}
.lat-select{background-image:none;padding-right:10px;gap:8px;align-items:center}
.lat-select::picker-icon{content:"";width:16px;height:16px;flex:0 0 auto;background:var(--select-chevron) no-repeat center/16px 16px;transition:transform var(--dur-fast) var(--ease-standard)}
.lat-select:open::picker-icon{transform:rotate(180deg)}
.lat-select::picker(select){margin:6px 0 0;min-width:anchor-size(width);padding:6px;background:var(--surface-card);color:var(--text-body);font-family:var(--font-body);font-size:var(--fs-13);border:1px solid var(--border-subtle);border-radius:var(--radius-card);box-shadow:var(--shadow-md)}
.lat-select option{padding:7px 10px;border-radius:var(--radius-sm);cursor:pointer}
.lat-select option:hover,.lat-select option:focus-visible{background:var(--surface-row-hover);outline:none}
.lat-select option:checked{color:var(--accent);font-weight:var(--fw-semibold)}
.lat-select option::checkmark{display:none}
}
textarea.lat-input{height:auto;min-height:6rem;padding:8px 12px;line-height:1.5;resize:vertical}
.lat-input--lg{height:var(--control-h-lg)}
.lat-input-group{display:flex;align-items:stretch}
.lat-input-group .lat-input{flex:1;width:auto;min-width:0;border-radius:0}
.lat-input-group>:first-child{border-top-left-radius:var(--radius-control);border-bottom-left-radius:var(--radius-control)}
.lat-input-group>:last-child{border-top-right-radius:var(--radius-control);border-bottom-right-radius:var(--radius-control)}
.lat-input-group>:not(:first-child){margin-left:-1px}
.lat-input-group__btn,.lat-input-group__affix{display:flex;align-items:center;height:var(--control-h);padding:0 12px;font-size:var(--fs-13);color:var(--text-muted);background:var(--surface-sunken);border:1px solid var(--border-input);white-space:nowrap}
.lat-input-group__btn{cursor:pointer;transition:var(--transition-control)}
.lat-input-group__btn:hover{background:var(--accent-quiet);color:var(--accent)}
.lat-input-group__btn.is-copied{color:var(--success);background:var(--success-subtle)}
.lat-check{display:flex;align-items:center;gap:8px;font-size:var(--fs-13);color:var(--text-body);cursor:pointer}
.lat-check input{width:16px;height:16px}
.lat-permgroup{border:1px solid var(--border-subtle);border-radius:var(--radius-control);padding:12px 14px;margin:14px 0 0}
.lat-permgroup__legend{padding:0 6px;font-size:var(--fs-11);font-weight:var(--fw-semibold);letter-spacing:var(--ls-caps);text-transform:uppercase;color:var(--text-muted)}
.lat-permgroup .lat-check{padding:5px 0}
.lat-permrow{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:7px 0;border-top:1px solid var(--border-subtle)}
.lat-permrow:first-of-type{border-top:0}
.lat-permrow__label{font-size:var(--fs-13);color:var(--text-body)}
.lat-permrow__states{display:flex;gap:14px;flex:0 0 auto}
.lat-permstate{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-12);color:var(--text-muted);cursor:pointer}
.lat-permrow.is-locked{opacity:.55}
.lat-check.is-locked{opacity:.55;cursor:not-allowed}
.lat-code{margin-left:auto;font-family:var(--font-mono);font-size:var(--fs-11);color:var(--text-subtle)}
.lat-permrow.is-locked .lat-permstate{cursor:not-allowed}
.lat-checklist{display:flex;flex-direction:column;gap:10px}
.lat-checklist__bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.lat-checklist__bar[hidden],.lat-checklist__item[hidden],.lat-checklist__group[hidden],.lat-checklist__parent[hidden]{display:none}
.lat-checklist__search{flex:1 1 220px;max-width:320px}
.lat-checklist__search .lat-input{height:var(--control-h-sm);font-size:var(--fs-13)}
.lat-checklist__total{margin-left:auto;font-size:var(--fs-12);color:var(--text-muted);font-variant-numeric:tabular-nums}
.lat-checklist__list{border:1px solid var(--border-subtle);border-radius:var(--radius-card);background:var(--surface-card);overflow:hidden}
.lat-checklist__list:empty{display:none}
.lat-checklist__list > .lat-checklist__item{padding:8px 14px}
.lat-checklist__list > .lat-checklist__item + .lat-checklist__item{border-top:1px solid var(--border-subtle)}
.lat-checklist__group{border-bottom:1px solid var(--border-subtle)}
.lat-checklist__group:last-child{border-bottom:0}
.lat-checklist__summary{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;list-style:none;transition:background .12s}
.lat-checklist__summary:hover{background:var(--surface-row-hover)}
.lat-checklist__summary::-webkit-details-marker{display:none}
.lat-checklist__summary::before{content:"";flex:none;width:0;height:0;border-left:5px solid var(--text-muted);border-top:4px solid transparent;border-bottom:4px solid transparent;transition:transform .12s}
.lat-checklist__group[open] > .lat-checklist__summary::before{transform:rotate(90deg)}
.lat-checklist__group[open] > .lat-checklist__summary{border-bottom:1px solid var(--border-subtle)}
.lat-checklist__parent{width:16px;height:16px;flex:none;margin:0}
.lat-checklist__title{flex:1 1 auto;min-width:0;font-size:var(--fs-13);font-weight:var(--fw-semibold);color:var(--text-heading)}
.lat-checklist__count{flex:none;font-size:var(--fs-12);color:var(--text-muted);font-variant-numeric:tabular-nums}
.lat-checklist__items{padding:6px 14px 8px 39px;background:var(--surface-raised)}
.lat-checklist__items > .lat-checklist__item{padding:5px 0}
.lat-checklist__items > .lat-checklist__group{margin:6px 0;border:1px solid var(--border-subtle);border-radius:var(--radius-control);background:var(--surface-card);overflow:hidden}
.lat-checklist__item{align-items:flex-start}
.lat-checklist__item input{flex:none;margin:2px 0 0}
.lat-checklist__label{flex:1 1 auto;min-width:0}
.lat-checklist__note{display:block;margin-top:1px;font-size:var(--fs-12);color:var(--text-muted)}
.lat-checklist__item.is-locked input:disabled{opacity:1}
.lat-checklist.is-locked .lat-checklist__item{opacity:1;cursor:default}
.lat-checklist.is-locked .lat-checklist__item input:disabled{opacity:.5}
.lat-checklist__empty{margin:0;font-size:var(--fs-13);color:var(--text-muted)}
.lat-checklist__empty[hidden]{display:none}
@media (prefers-reduced-motion:reduce){.lat-checklist__summary,.lat-checklist__summary::before{transition:none}}
.lat-facts{display:flex;flex-wrap:wrap;gap:8px 32px;margin:0 0 18px}
.lat-facts dt{font-size:var(--fs-11);text-transform:uppercase;letter-spacing:var(--ls-caps);color:var(--text-muted);margin-bottom:2px}
.lat-facts dd{margin:0;font-size:var(--fs-13);color:var(--text-body)}
/* A screen's opening explanation: sits above the card, reads as prose rather
than as a field's help. Wider than the sidebar, so it has room to say why
the screen exists. */
.lat-note{max-width:var(--note-max);font-size:var(--fs-13);color:var(--text-muted);margin:0 0 16px;line-height:1.55}
/* Icons reference a shared sprite, so the outer element owns every presentation
attribute: a symbol carrying its own could not be restyled from here. */
.lat-icon{width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
/* Direction carries meaning for some glyphs and not others; the set says which. */
[dir="rtl"] .lat-icon[data-mirror]{transform:scaleX(-1)}
/* A name that did not resolve. Deliberately unlike any real icon. */
.lat-icon--missing{opacity:.6}
.lat-help{font-size:var(--fs-12);color:var(--text-muted);margin:4px 0 0}
.lat-badge{display:inline-block;font-size:var(--fs-12);color:var(--text-muted);border:1px solid var(--border-subtle);border-radius:999px;padding:1px 8px;margin-left:6px}
.lat-field__error{font-size:var(--fs-12);color:var(--danger);margin:4px 0 0}
/* Cards */
/* A form reads better at a measure than stretched across the page, so a card
holding one is capped. A card holding a repeater is not: a row of four columns
at 720px is the cramped, misaligned thing this cap was causing. */
/* Fields lay out on a twelve-column grid: a field takes the whole row unless
its span says otherwise, and rows wrap as they fill. */
.lat-fields{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:20px}
.lat-fields>.lat-field{grid-column:span 12;min-width:0}
.lat-fields>.lat-field--1{grid-column:span 1}
.lat-fields>.lat-field--2{grid-column:span 2}
.lat-fields>.lat-field--3{grid-column:span 3}
.lat-fields>.lat-field--4{grid-column:span 4}
.lat-fields>.lat-field--5{grid-column:span 5}
.lat-fields>.lat-field--6{grid-column:span 6}
.lat-fields>.lat-field--7{grid-column:span 7}
.lat-fields>.lat-field--8{grid-column:span 8}
.lat-fields>.lat-field--9{grid-column:span 9}
.lat-fields>.lat-field--10{grid-column:span 10}
.lat-fields>.lat-field--11{grid-column:span 11}
.lat-fields>.lat-field--break{grid-column-start:1}
.lat-card{background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:var(--card-pad)}
.lat-card__label{font-size:var(--fs-11);font-weight:var(--fw-semibold);letter-spacing:var(--ls-caps-wide);text-transform:uppercase;color:var(--text-muted);margin-bottom:10px}
.lat-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}
/* Alerts */
.lat-alert{background:var(--danger-subtle);color:var(--danger-700);padding:10px 12px;border-radius:var(--radius-md);font-size:var(--fs-13);margin-bottom:16px}
.lat-alert--ok{background:var(--success-subtle);color:var(--success)}
.lat-flashes{position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:10px;width:min(520px,calc(100vw - 32px));pointer-events:none}
.lat-flash{pointer-events:auto;position:relative;padding:12px 40px 12px 16px;border-radius:var(--radius-card);color:var(--text-on-accent);font-size:var(--fs-13);line-height:1.4;box-shadow:var(--shadow-lg);animation:lat-flash-in .18s var(--ease-standard)}
.lat-flash.is-leaving{animation:lat-flash-out .18s var(--ease-standard) forwards}
.lat-flash.is-success{background:var(--success)}
.lat-flash.is-error{background:var(--danger-700)}
.lat-flash.is-info{background:var(--info)}
.lat-flash__close{position:absolute;top:50%;right:8px;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:none;border:0;padding:0;color:inherit;font-size:20px;line-height:1;cursor:pointer;opacity:.7;transition:opacity var(--dur-fast) var(--ease-standard)}
.lat-flash__close:hover{opacity:1}
@keyframes lat-flash-in{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}
@keyframes lat-flash-out{from{opacity:1;transform:none}to{opacity:0;transform:translateY(-10px)}}
/* Status pill (a coloured dot plus a label, used in list rows) */
.lat-status{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-12);font-weight:var(--fw-medium)}
.lat-status::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.lat-status--on{color:var(--success)}
.lat-status--off{color:var(--text-muted)}
.lat-status--quarantined{color:var(--danger)}
/* Page toolbar + breadcrumb */
.lat-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:20px}
.lat-toolbar h1{font-size:var(--fs-24);margin:0;margin-right:auto}
.lat-toolbar h2{font-size:var(--fs-16);margin:0;margin-right:auto}
/* A second section on a page needs air above it, or its heading reads as
part of the card it follows. */
.lat-toolbar--section{margin-top:32px;margin-bottom:12px}
.lat-sectionintro{margin:0 0 16px}
.lat-toolbar__actions{display:flex;gap:8px;align-items:center}
.lat-titleblock{margin-right:auto}
.lat-titleblock h1{margin-right:0}
.lat-eyebrow{font-size:var(--fs-11);font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:var(--ls-caps);color:var(--text-muted);margin:0 0 3px}
.lat-breadcrumb{display:flex;align-items:center;gap:8px;font-size:var(--fs-12);color:var(--text-muted);margin-bottom:14px}
.lat-breadcrumb a{color:var(--text-muted)}
.lat-breadcrumb a:hover{color:var(--text-link)}
/* Table */
.lat-tablewrap{background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-card);box-shadow:var(--shadow-card);overflow:hidden}
.lat-table{width:100%;border-collapse:collapse;font-size:var(--fs-13)}
.lat-table th{text-align:left;padding:11px 16px;font-size:var(--fs-11);font-weight:var(--fw-semibold);letter-spacing:var(--ls-caps);text-transform:uppercase;color:var(--text-muted);background:var(--surface-toolbar);border-bottom:1px solid var(--border-default)}
.lat-table td{padding:12px 16px;border-bottom:1px solid var(--border-subtle);color:var(--text-body)}
.lat-table tbody tr:last-child td{border-bottom:0}
.lat-table tbody tr:hover{background:var(--surface-row-hover)}
.lat-col--left{text-align:left}
.lat-col--center{text-align:center}
.lat-col--right{text-align:right}
.lat-table__actions{text-align:right;white-space:nowrap}
.lat-table__empty{padding:28px 16px;text-align:center;color:var(--text-muted)}
/* List footer + pager */
.lat-listfoot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:14px;font-size:var(--fs-12);color:var(--text-muted)}
.lat-pager{display:flex;gap:6px}
/* Form action bar */
.lat-actions{display:flex;align-items:center;gap:10px;margin-top:20px;padding-top:16px;border-top:1px solid var(--border-subtle)}
/* Off-canvas menu (small screens) */
.lat-topnav__burger{display:none;align-items:center;justify-content:center;width:48px;border:0;background:transparent;color:var(--bone-200);font-size:20px;cursor:pointer}
.lat-drawer{position:fixed;inset:0;z-index:50;visibility:hidden}
.lat-drawer.is-open{visibility:visible}
.lat-drawer__backdrop{position:absolute;inset:0;background:var(--surface-overlay);opacity:0;transition:opacity var(--dur-base) var(--ease-standard)}
.lat-drawer.is-open .lat-drawer__backdrop{opacity:1}
.lat-drawer__panel{position:absolute;top:0;left:0;bottom:0;width:270px;max-width:82vw;background:var(--surface-sidebar);color:var(--text-inverse);transform:translateX(-100%);transition:transform var(--dur-base) var(--ease-standard);display:flex;flex-direction:column;overflow-y:auto}
.lat-drawer.is-open .lat-drawer__panel{transform:none}
.lat-drawer__brand{display:flex;align-items:center;gap:10px;padding:18px;border-bottom:1px solid var(--alpha-bone-08)}
.lat-drawer__brand img{height:28px}
.lat-drawer__brand span{font-family:var(--font-display);font-weight:var(--fw-semibold);font-size:var(--fs-16);color:var(--bone-100)}
.lat-drawer__item{display:block;padding:13px 18px;color:var(--slate-300);text-decoration:none;font-size:var(--fs-13);font-weight:var(--fw-medium);text-transform:uppercase;letter-spacing:var(--ls-caps);border-left:3px solid transparent}
.lat-drawer__item:hover{background:var(--alpha-bone-08);color:var(--bone-100);text-decoration:none}
.lat-drawer__item.is-active{background:var(--alpha-bone-08);color:var(--bone-100);border-left-color:var(--accent)}
/* Settings index items */
.lat-settingsitem{display:block;padding:14px 16px;border-bottom:1px solid var(--border-subtle);text-decoration:none;color:inherit}
.lat-settingsitem:last-child{border-bottom:0}
.lat-settingsitem:hover{background:var(--surface-row-hover);text-decoration:none}
.lat-settingsitem__label{display:block;font-weight:var(--fw-semibold);font-size:var(--fs-14);color:var(--text-heading)}
.lat-settingsitem__desc{display:block;font-size:var(--fs-12);color:var(--text-muted);margin-top:3px}
/* Login (two-column) */
.lat-login{min-height:100vh;display:flex;background:var(--surface-page)}
.lat-login__form{position:relative;width:var(--login-form-col-w);flex:0 0 var(--login-form-col-w);display:flex;flex-direction:column;justify-content:center;padding:48px 56px;background:var(--surface-page)}
.lat-login__inner{width:100%;max-width:372px}
.lat-login__brand{display:flex;align-items:center;gap:12px;margin-bottom:30px}
.lat-login__brand img{height:44px}
.lat-login__brand h1{font-family:var(--font-display);font-size:28px;font-weight:600;letter-spacing:-.03em;color:var(--text-heading)}
.lat-login__title{font-family:var(--font-display);font-size:22px;font-weight:500;letter-spacing:-.02em;color:var(--text-heading);margin:0}
.lat-login__lead{font-size:var(--fs-14);color:var(--text-muted);margin:8px 0 28px}
.lat-login__forgot{margin-top:20px;font-size:var(--fs-13);color:var(--text-muted)}
.lat-poweredby{position:absolute;left:56px;bottom:36px;display:inline-flex;align-items:center;gap:6px;font-family:var(--font-body);font-size:var(--fs-12);color:var(--text-subtle);text-decoration:none}
.lat-poweredby img{width:14px;height:14px;opacity:.75}
.lat-poweredby:hover{color:var(--text-muted)}
.lat-login__hero{flex:1 1 auto;position:relative;min-width:0;overflow:hidden;background:var(--ferro-900)}
.lat-hero-blob{position:absolute;border-radius:50%;filter:blur(90px);animation:lat-blob var(--blob-d,22s) var(--ease-standard) infinite}
.lat-hero-blob--1{top:-12%;left:4%;width:620px;height:620px;background:rgba(196,78,47,.72);--blob-d:19s}
.lat-hero-blob--2{top:44%;left:46%;width:480px;height:480px;background:rgba(217,142,50,.46);--blob-d:23s}
.lat-hero-blob--3{top:58%;left:-8%;width:540px;height:540px;background:rgba(134,49,27,.62);--blob-d:27s}
@keyframes lat-blob{0%{transform:translate(0,0) scale(1)}50%{transform:translate(6%,-5%) scale(1.14)}100%{transform:translate(0,0) scale(1)}}
.lat-hero__caption{position:absolute;left:44px;bottom:40px;right:44px}
.lat-hero__eyebrow{font-size:var(--fs-11);font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--bone-200)}
.lat-hero__tag{font-family:var(--font-display);font-size:30px;font-weight:600;letter-spacing:-.02em;color:#FFF7F2;margin-top:10px;max-width:460px;line-height:1.2}
/* List search box, in the toolbar beside the title. */
/* List bar: search box plus filter controls, above the table. */
.lat-listbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.lat-listbar__actions{display:flex;gap:8px;align-items:center}
.lat-listbar__divider{width:1px;height:18px;background:var(--border-strong);margin:0 4px}
.lat-listbar__search{width:min(240px,40vw);height:var(--control-h-sm);font-size:var(--fs-12)}
.lat-listbar__tools{display:flex;gap:8px;align-items:center;margin-left:auto}
/* Sits on the table card as its top strip, not as a card of its own: floating it
above put a second tinted bar directly over the tinted column header, reading
as a detached copy of it. Radii and the shared border join the two. */
.lat-filterbar{display:flex;gap:16px;align-items:center;flex-wrap:wrap;padding:10px 16px;background:var(--surface-card);border:1px solid var(--border-subtle);border-bottom:0;border-radius:var(--radius-card) var(--radius-card) 0 0}
.lat-filterbar ~ #lat-list>.lat-tablewrap{border-top-left-radius:0;border-top-right-radius:0}
.lat-filterbar__filter{display:flex;gap:8px;align-items:center}
.lat-filterbar__label{font-size:var(--fs-12);color:var(--text-muted);white-space:nowrap}
.lat-filterbar__label::after{content:":"}
.lat-filterbar .lat-input{height:var(--control-h-sm);font-size:var(--fs-12)}
.lat-filterbar__clear{margin-left:auto;font-size:var(--fs-12);color:var(--text-muted);display:none}
/* The bar never swaps, so the swapped region carries the state and this reads
it. Same browser generation the stylesheet already assumes for @layer. */
.lat-page:has(#lat-list[data-filtered="true"]) .lat-filterbar__clear{display:inline}
.lat-filterbar__clear:hover{color:var(--accent)}
/* Repeater: a list of rows in a form. */
.lat-repeater{display:flex;flex-direction:column;gap:10px}
.lat-repeater__rows{display:flex;flex-direction:column;gap:10px}
.lat-repeater__row{display:flex;gap:10px;align-items:flex-start;flex-wrap:wrap;padding:12px;background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:var(--radius-card)}
/* List mode: rows collapse to the line that names them, so an Add button reads
as adding to a list rather than growing a wall of columns. The rows share one
bordered container with dividers, like a table, rather than floating as
separate cards. */
.lat-repeater--list .lat-repeater__rows--filled{border:1px solid var(--border-subtle);border-radius:var(--radius-card);overflow:hidden;background:var(--surface-card);margin-bottom:12px}
.lat-repeater--list .lat-repeater__row{display:block;padding:0;margin:0;border:0;border-bottom:1px solid var(--border-subtle);border-radius:0;background:transparent}
.lat-repeater--list .lat-repeater__row:last-child{border-bottom:0}
.lat-repeater__summary{display:flex;align-items:center;gap:10px;padding:11px 14px;cursor:pointer;list-style:none;transition:background .12s}
.lat-repeater__summary:hover{background:var(--surface-row-hover)}
.lat-repeater__summary::-webkit-details-marker{display:none}
.lat-repeater__summary::before{content:"";flex:none;width:0;height:0;border-left:5px solid var(--text-muted);border-top:4px solid transparent;border-bottom:4px solid transparent;transition:transform .12s}
.lat-repeater__row[open] > .lat-repeater__summary::before{transform:rotate(90deg)}
.lat-repeater__row[open] > .lat-repeater__summary{border-bottom:1px solid var(--border-subtle)}
.lat-repeater__title{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fs-13);font-weight:var(--fw-semibold)}
.lat-repeater__untitled{color:var(--text-muted);font-weight:400}
/* The remove control stays quiet until the row is under the pointer, so a list
of rules does not read as a column of buttons. */
.lat-repeater--list .lat-repeater__remove{opacity:0;transition:opacity .12s}
.lat-repeater__summary:hover .lat-repeater__remove,
.lat-repeater__remove:focus-visible{opacity:1}
/* Equal columns, and every cell in a grid row shares its height, so a one-line
input beside a text area reads as one row rather than two ragged ones. */
.lat-repeater__fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px 16px;padding:14px;background:var(--surface-sunken)}
.lat-repeater__fields > .lat-field{min-width:0;margin:0}
/* A fixed height, not a stretch to fill: a cell carrying help text would
otherwise squeeze its control shorter than the one beside it, which is the
ragged look this layout exists to avoid. Two control heights reads as a text
area without towering over the single-line fields next to it. */
.lat-repeater__fields textarea.lat-input{height:calc(var(--control-h) * 2);min-height:calc(var(--control-h) * 2)}
.lat-repeater__fields .lat-help{margin-top:6px}
@media (prefers-reduced-motion:reduce){.lat-repeater__summary,.lat-repeater__summary::before,.lat-repeater--list .lat-repeater__remove{transition:none}}
.lat-repeater__row .lat-field{flex:1;min-width:150px;margin:0}
.lat-repeater__add{align-self:flex-start}
/* A small disclosure menu (export formats), and toolbar button icons. */
.lat-menu{position:relative}
.lat-menu>summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center}
.lat-menu>summary::-webkit-details-marker{display:none}
.lat-menu__panel{position:absolute;z-index:50;top:calc(100% + 6px);right:0;min-width:140px;padding:6px;background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-card);box-shadow:var(--shadow-md);display:flex;flex-direction:column}
.lat-menu__panel a{padding:7px 10px;border-radius:var(--radius-sm);color:var(--text-body);font-size:var(--fs-13)}
.lat-menu__panel a:hover{background:var(--surface-row-hover);text-decoration:none}
.lat-btn__icon{display:inline-flex;width:15px;height:15px;margin-right:6px}
.lat-btn__icon svg{width:100%;height:100%}
/* Column picker: a native disclosure holding the choices. */
.lat-colpicker{position:absolute;z-index:50;top:calc(100% + 6px);right:0;min-width:200px;padding:12px;background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-card);box-shadow:var(--shadow-md)}
.lat-colpicker .lat-check{display:flex;gap:8px;align-items:center;padding:3px 0}
.lat-colpicker button{margin-top:10px;width:100%}
.lat-colpicker__size{display:flex;flex-direction:column;gap:4px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border-subtle);font-size:var(--fs-12);color:var(--text-muted)}
.lat-colpicker__size .lat-input{height:var(--control-h-sm);font-size:var(--fs-12)}
/* Bulk selection and the confirm dialog. */
.lat-table__pick{width:36px;text-align:center}
.lat-modal{position:fixed;inset:0;z-index:400;display:none}
.lat-modal.is-open{display:block}
.lat-modal__backdrop{position:absolute;inset:0;background:var(--surface-overlay)}
.lat-modal__panel{position:relative;margin:18vh auto 0;width:min(420px,calc(100vw - 32px));background:var(--surface-card);border-radius:var(--radius-card);box-shadow:var(--shadow-lg);padding:20px}
.lat-modal__text{margin:0 0 18px;color:var(--text-body)}
.lat-modal__actions{display:flex;gap:8px;justify-content:flex-end}
.lat-btn--danger{background:var(--danger);color:var(--text-on-accent);border-color:transparent}
.lat-btn--danger:hover{background:var(--danger-700)}
/* Sortable column headers. */
.lat-sort{display:inline-flex;align-items:center;gap:5px;color:inherit;text-decoration:none;white-space:nowrap}
.lat-sort:hover{color:var(--accent)}
.lat-sort__arrow{font-size:9px;line-height:1;color:var(--accent)}
.lat-sort.is-active{color:var(--text)}
/* Request feedback: the top progress bar and the in-flight control state. */
.lat-progress{position:fixed;top:0;left:0;height:2px;width:100%;z-index:300;background:var(--accent);transform:scaleX(0);transform-origin:0 50%;opacity:0;pointer-events:none}
.lat-progress.is-active{opacity:1;animation:lat-progress-grow 8s var(--ease-standard) forwards}
.lat-progress.is-done{animation:none;transform:scaleX(1);opacity:0;transition:opacity .2s var(--ease-standard)}
@keyframes lat-progress-grow{0%{transform:scaleX(0)}40%{transform:scaleX(.6)}100%{transform:scaleX(.94)}}
form.htmx-request .lat-btn--primary{background:var(--bone-200);color:var(--slate-300);border-color:transparent;cursor:progress}
form.htmx-request .lat-btn--ghost{pointer-events:none;opacity:.5}
@media (prefers-reduced-motion:reduce){
.lat-progress.is-active{animation:none;transform:scaleX(1)}
}
@media (max-width:768px){
.lat-login__hero{display:none}
.lat-login__form{width:100%;flex:1 1 auto;padding:32px 24px}
.lat-login__inner{margin:0 auto}
.lat-poweredby{left:24px;bottom:24px}
}
/* Below --bp-md: collapse the inline nav into the off-canvas drawer */
@media (max-width:1100px){.lat-fields>.lat-field--1,.lat-fields>.lat-field--2,.lat-fields>.lat-field--3{grid-column:span 6}}
@media (max-width:768px){.lat-fields>.lat-field{grid-column:span 12}}
@media (max-width:992px){
.lat-topnav__burger{display:flex}
.lat-topnav__nav{display:none}
.lat-topnav__brand{padding-left:6px}
}
/* Below --bp-sm: tighten chrome, let tables scroll, drop the wordmark, and
stack the context rail above the content instead of beside it. */
@media (max-width:768px){
.lat-page{padding:18px}
.lat-topnav__wordmark{display:none}
.lat-tablewrap{overflow-x:auto}
.lat-toolbar h1{font-size:var(--fs-20)}
/* The action row wraps here, and a right-pushed search stub on its own line
reads as a mistake: give the tools the whole line and let the box fill it. */
.lat-listbar__tools{margin-left:0;width:100%}
.lat-listbar__search{flex:1;width:auto}
.lat-body{flex-direction:column}
.lat-sidebar{width:auto;align-self:stretch}
}
}