/* ============================================================
   Freeconomy Today — Brand Stylesheet
   Single source of truth for colors, type & shared components.
   Usage: <link rel="stylesheet" href="/freeconomy-recycling/assets/css/brand.css">
   Icons: add Material Symbols Rounded font link (see style-guide.html)
   ============================================================ */

/* ---------- Design tokens ---------- */
:root{
  /* Forest green scale */
  --forest-950:#0a1f12;
  --forest-900:#0f2c19;
  --forest-800:#143d24;
  --forest-700:#1b5a30;
  --forest:#228B22;        /* brand primary */
  --forest-600:#2e9e44;
  --leaf:#5cb85c;
  --mint:#e9f5ec;
  --mint-2:#f4faf5;

  /* Accent (use sparingly — ratings/warnings only) */
  --amber:#e8a13a;

  /* Neutrals */
  --ink:#13221a;           /* headings / primary text */
  --muted:#5b6b60;         /* secondary text */
  --line:#dfe8e1;          /* borders */
  --card:#ffffff;
  --bg-page:#ffffff;
  --bg-alt:#f4faf5;        /* equals --mint-2 */

  /* Shape & elevation */
  --radius:16px;
  --radius-sm:12px;
  --radius-pill:999px;
  --shadow-sm:0 1px 2px rgba(15,44,25,.06),0 2px 8px rgba(15,44,25,.06);
  --shadow-md:0 4px 14px rgba(15,44,25,.10),0 12px 32px rgba(15,44,25,.10);

  /* Type */
  --font-display:'Manrope',sans-serif;
  --font-body:'Inter',sans-serif;

  /* Space scale (use these, not magic numbers) */
  --sp-1:8px; --sp-2:16px; --sp-3:24px; --sp-4:32px; --sp-5:48px; --sp-6:96px;

  /* Semantic (used by error/required markers; not part of brand palette) */
  --red-500:#dc2626;
}

/* ---------- Base ---------- */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
section[id]{scroll-margin-top:96px}
body{font-family:var(--font-body);color:var(--ink);background:var(--bg-page);line-height:1.6;font-size:16px}
a{text-decoration:none;color:inherit}
ul{list-style:none}
img{max-width:100%}
h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.02em;line-height:1.18;font-weight:800;color:var(--ink)}

/* Material Symbols base — pages must still load the font link */
.material-symbols-rounded{font-family:'Material Symbols Rounded';font-weight:400;font-style:normal;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;font-variation-settings:'FILL' 0,'wght' 500,'GRAD' 0,'opsz' 24;vertical-align:middle;line-height:1}
/* Legacy icon class (field_renderer / View::serviceIcon) — alias to the loaded Rounded font */
.material-symbols-outlined{font-family:'Material Symbols Rounded';font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;font-variation-settings:'FILL' 0,'wght' 400,'GRAD' 0,'opsz' 24;-webkit-font-smoothing:antialiased}
.mi-fill{font-variation-settings:'FILL' 1,'wght' 500,'GRAD' 0,'opsz' 24}

/* ---------- Layout ---------- */
.container{width:min(1180px,92%);margin-inline:auto}
.section{padding:var(--sp-6) 0}
.section.alt{background:var(--bg-alt)}
.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-3)}
.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-3)}
.grid-3>*,.grid-2>*{min-width:0}
@media(max-width:980px){.grid-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){.grid-3,.grid-2{grid-template-columns:1fr}}
.section-center{text-align:center;margin-top:44px}

/* Breadcrumbs */
.crumbs{padding:18px 0;font-size:13.5px;color:var(--muted)}
.crumbs a{color:var(--muted)}
.crumbs a:hover{color:var(--forest)}
.crumbs .material-symbols-rounded{font-size:15px;vertical-align:-2px}

/* Section header (kicker + title + lead) */
.sec-head{max-width:680px;margin:0 auto 56px;text-align:center}
.sec-head.left{margin:0 0 48px;text-align:left}
.kicker{display:inline-flex;align-items:center;gap:8px;color:var(--forest);font-weight:700;font-size:13px;
  letter-spacing:.14em;text-transform:uppercase;margin-bottom:14px}
.kicker::before{content:"";width:26px;height:2px;background:var(--forest);border-radius:2px}
.sec-head h2{font-size:clamp(28px,3.4vw,40px);margin-bottom:14px}
.sec-head p{color:var(--muted);font-size:16.5px}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-display);font-weight:700;font-size:15px;
  padding:14px 26px;border-radius:var(--radius-pill);border:1px solid transparent;cursor:pointer;transition:.2s;white-space:nowrap}
.btn .material-symbols-rounded{font-size:20px;transition:transform .2s}
.btn:hover .material-symbols-rounded.arrow{transform:translateX(3px)}
.btn-primary{background:var(--forest);color:#fff;box-shadow:0 6px 18px rgba(34,139,34,.35)}
.btn-primary:hover{background:var(--forest-700);transform:translateY(-2px)}
.btn-outline{border-color:var(--forest);color:var(--forest)}
.btn-outline:hover{background:var(--mint)}
.btn-ghost{border-color:rgba(255,255,255,.35);color:#fff}
.btn-ghost:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.6)}
.btn-sm{padding:10px 18px;font-size:14px}
.btn-block{width:100%;justify-content:center}

/* ---------- Status alerts ---------- */
.alert{display:flex;gap:10px;align-items:flex-start;border-radius:var(--radius-sm);padding:14px 16px;font-size:14px;border:1px solid;line-height:1.5}
.alert[hidden]{display:none}
.alert .material-symbols-rounded{font-size:20px;margin-top:1px;flex-shrink:0}
.alert a{font-weight:600;text-decoration:underline}
.alert-success{background:#dcfce7;border-color:#bbf7d0;color:#166534}
.alert-error{background:#fee2e2;border-color:#fecaca;color:#991b1b}
.alert-info{background:var(--mint);border-color:#c4e2ca;color:var(--forest-800)}
.alert-warning{background:#fef3c7;border-color:#fde68a;color:#92400e}

/* ---------- Cards ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:30px;transition:.25s;position:relative;overflow-wrap:break-word}
/* Hover lift is for clickable marketing cards only — .grid-3 grids (services,
   articles, testimonials) get it automatically; opt in elsewhere with .card-lift.
   Functional panels (filters, forms, dashboards) must not move on hover. */
.card-lift:hover,.grid-3 .card:hover{transform:translateY(-5px);box-shadow:var(--shadow-md);border-color:#bcd9c2}
.card h3{font-size:19px;margin-bottom:8px}
.card p{color:var(--muted);font-size:14.5px;margin-bottom:16px}
.card .icon{width:56px;height:56px;border-radius:14px;background:var(--mint);color:var(--forest);
  display:grid;place-items:center;margin-bottom:20px}
.card .icon .material-symbols-rounded{font-size:30px}
.card ul li{display:flex;gap:8px;align-items:flex-start;font-size:13.5px;color:#41544a;padding:4px 0}
.card ul .material-symbols-rounded{font-size:17px;color:var(--forest);margin-top:2px}
.card .more{position:absolute;top:26px;right:24px;color:var(--forest);opacity:0;transition:.2s}
.card:hover .more{opacity:1}
/* Article cards (knowledge base): linked title + meta row */
.card h3 a{color:inherit}
.card h3 a:hover{color:var(--forest)}
.card-meta{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center;font-size:13px;color:var(--muted)}
.card-meta .material-symbols-rounded{font-size:16px;color:var(--forest)}

/* Dark panel (stats blocks, impact panel, CTA) */
.panel-dark{background:linear-gradient(160deg,var(--forest-900),var(--forest-700));border-radius:24px;color:#fff;
  padding:40px 36px;box-shadow:var(--shadow-md)}
.panel-dark h3{color:#fff;font-size:22px}
.panel-dark p{color:#c4dbcc;font-size:14.5px}

/* ---------- Badges, chips & tags ---------- */
.eyebrow{display:inline-flex;align-items:center;gap:8px;background:rgba(92,184,92,.16);border:1px solid rgba(92,184,92,.35);
  color:#b9e4c2;font-size:13px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;padding:8px 16px;border-radius:var(--radius-pill)}
.eyebrow .material-symbols-rounded{font-size:17px}
.badge{display:inline-flex;align-items:center;gap:6px;background:var(--mint);color:var(--forest-800);
  font-size:12.5px;font-weight:600;padding:4px 12px;border-radius:var(--radius-pill);border:1px solid #c4e2ca}
.badge .material-symbols-rounded{font-size:16px}
.area{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:#fff;border-radius:var(--radius-pill);
  padding:10px 18px;font-size:14px;font-weight:500;color:#33443a;transition:.2s}
.area:hover{border-color:var(--forest);color:var(--forest);background:var(--mint)}
.area .material-symbols-rounded{font-size:17px;color:var(--forest)}
/* Interactive filter chips (one-click table filters) — active state mirrors .pagination .current */
.chip{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid var(--line);border-radius:var(--radius-pill);
  padding:6px 14px;font-size:13.5px;font-weight:500;color:#41544a;cursor:pointer;transition:.15s;text-decoration:none}
.chip:hover{border-color:var(--forest);background:var(--mint);color:var(--forest)}
.chip--active,.chip--active:hover{background:var(--forest);border-color:var(--forest);color:#fff;font-weight:600}
.chip-row{display:flex;gap:6px;flex-wrap:wrap;align-items:center}

/* ---------- Form fields (display-only style) ---------- */
.label{display:block;font-size:13.5px;font-weight:600;margin-bottom:6px;color:var(--ink);font-family:var(--font-display)}
.field{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:var(--radius-sm);
  padding:12px 14px;font-size:14.5px;color:#41544a;background:#fff}
.field:focus-within{border-color:var(--forest);box-shadow:0 0 0 3px rgba(34,139,34,.12)}
.field .material-symbols-rounded{font-size:20px;color:var(--forest)}
.field input,.field textarea{border:0;outline:0;flex:1;font:inherit;color:var(--ink);background:transparent}
.field-check{display:flex;gap:10px;align-items:center;font-size:14px;color:#41544a}
.field-check input{width:18px;height:18px;accent-color:var(--forest);cursor:pointer;flex-shrink:0}
.field-check label{cursor:pointer}

/* ---------- Long-form prose (knowledge base article bodies) ---------- */
.prose{max-width:72ch}
.prose h2{font-size:24px;margin:36px 0 12px}
.prose h3{font-size:19px;margin:28px 0 10px}
.prose p{color:#33443a;font-size:15.5px;margin-bottom:14px}
.prose ul,.prose ol{margin:0 0 16px 22px}
.prose ul li{list-style:disc}
.prose ol li{list-style:decimal}
.prose li{color:#33443a;font-size:15.5px;margin-bottom:8px}
.prose strong{color:var(--ink)}
.prose a{color:var(--forest);font-weight:600}
.prose a:hover{text-decoration:underline}
.prose img{border-radius:var(--radius-sm);border:1px solid var(--line);margin:8px 0 16px}
.prose code{background:var(--mint);border:1px solid #c4e2ca;border-radius:6px;padding:1px 6px;font-size:13.5px;color:var(--forest-800)}
.field select{appearance:none;-webkit-appearance:none;border:0;outline:0;flex:1;min-width:0;font:inherit;color:var(--ink);
  background:transparent url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23228B22' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") no-repeat right 4px center/16px;
  padding-right:28px;cursor:pointer}
.field select:focus{outline:0}
.field select option{background:#fff;color:var(--ink);font-family:var(--font-body)}
.field select option:checked{background:var(--mint);color:var(--forest-800)}

/* ---------- Dark bands ---------- */
.band-dark{background:linear-gradient(135deg,var(--forest-950),var(--forest-800));color:#fff;position:relative;overflow:hidden}
.band-dark::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(600px 300px at 90% 0%,rgba(92,184,92,.25),transparent 60%)}
.band-dark>.container{position:relative}

/* Topbar */
.topbar{background:var(--forest-950);color:#cfe3d5;font-size:13.5px}
.topbar .container{display:flex;justify-content:space-between;align-items:center;min-height:38px;gap:16px;flex-wrap:wrap}
.topbar span{display:inline-flex;align-items:center;gap:6px}
.topbar .material-symbols-rounded{font-size:16px;color:#8fc79b}
.topbar-left{display:flex;gap:20px}
@media(max-width:640px){.topbar-left span:last-child{display:none}}

/* Stats */
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:28px;text-align:center}
@media(max-width:860px){.stats-grid{grid-template-columns:repeat(2,1fr)}}
.stat .material-symbols-rounded{font-size:34px;color:#7fd98a;margin-bottom:10px}
.stat b{display:block;font-family:var(--font-display);font-weight:800;font-size:clamp(30px,3.4vw,42px);letter-spacing:-.02em}
.stat span{color:#b9d2c1;font-size:14px}

/* ---------- Brand mark ---------- */
.brand{display:flex;align-items:center;gap:12px}
.brand-logo{height:48px;width:48px;border-radius:12px;object-fit:cover;flex-shrink:0}
.brand-mark{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,var(--forest) 0%,#32CD32 100%);
  display:grid;place-items:center;color:#fff;flex-shrink:0}
.brand-mark .material-symbols-rounded{font-size:26px;font-variation-settings:'FILL' 1,'wght' 500}
.brand-name{font-family:var(--font-display);font-weight:800;font-size:19px;line-height:1.15;color:var(--ink)}
.brand-name em{font-style:normal;color:var(--forest);display:block;font-size:12.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase}

/* ---------- Reveal animation ---------- */
.reveal{opacity:0;transform:translateY(22px);transition:opacity .6s ease,transform .6s ease}
.reveal.visible{opacity:1;transform:none}

/* ---------- Site header (every page) ----------
   Guest: nav links + phone + Sign In + Get a Quote.
   Logged in: same links + .nav-user chip + notifications + Sign Out. */
.site-header{background:rgba(255,255,255,.92);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:100}
.site-header.scrolled{box-shadow:var(--shadow-sm)}
.skip-to-content{position:absolute;left:-9999px;top:0;background:var(--forest);color:#fff;padding:10px 18px;border-radius:0 0 8px 0;z-index:300}
.skip-to-content:focus{left:0}
.nav{display:flex;align-items:center;justify-content:space-between;height:76px;gap:24px}
.nav-links{display:flex;gap:6px}
.nav-links a{font-weight:500;font-size:15px;color:#33443a;padding:10px 14px;border-radius:8px;transition:.15s;white-space:nowrap}
.nav-links a:hover,.nav-links a[aria-current="page"]{color:var(--forest);background:var(--mint)}
.nav-cta{display:flex;align-items:center;gap:12px}
/* Sign In duplicated into the mobile drawer (see brand.php); hidden on desktop */
.nav-signin{display:none}
.nav-phone{display:flex;align-items:center;gap:8px;font-weight:600;font-size:15px;color:var(--forest-800);white-space:nowrap}
.nav-phone .material-symbols-rounded{font-size:20px;color:var(--forest)}
@media(max-width:1320px){.nav-phone{display:none}}
.menu-btn{display:none}
@media(max-width:980px){
  .nav-links{display:none}
  .menu-btn{display:block;background:none;border:0;cursor:pointer;color:var(--forest-900)}
  .menu-btn .material-symbols-rounded{font-size:30px}
  .nav-cta .btn{padding:10px 18px;font-size:14px}
  .nav-cta .btn .arrow{display:none}
  header.nav-open .nav-links,.nav.mobile-open .nav-links{display:flex;flex-direction:column;position:absolute;top:76px;left:0;right:0;background:#fff;border-bottom:1px solid var(--line);padding:12px 4%;box-shadow:var(--shadow-md)}
  .nav.mobile-open .nav-signin{display:block}
}
/* ≤640px: brand mark shrinks so CTA + hamburger fit the bar; Sign In lives in the drawer */
@media(max-width:640px){
  .nav-cta .btn-outline{display:none}
  .brand-logo{height:40px;width:40px}
  .brand-name{font-size:17px}
  .brand-name em{font-size:11px}
}
/* ≤360px legacy phones: tighten header until it fits */
@media(max-width:360px){
  .nav{gap:14px}
  .nav-cta{gap:8px}
  .nav-cta .btn{padding:10px 14px}
  .brand-logo{height:36px;width:36px}
  .brand-name{font-size:16px}
}
/* Logged-in extras */
.nav-icon-btn{position:relative;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;color:var(--forest-800);background:var(--mint);border:0;cursor:pointer}
.nav-icon-btn:hover{background:#dcefe0}
.nav-icon-btn .material-symbols-rounded{font-size:21px}
.nav-icon-btn .badge-dot{position:absolute;top:7px;right:7px;width:9px;height:9px;border-radius:50%;background:var(--amber);border:2px solid #fff}
.nav-user{display:flex;align-items:center;gap:10px}
.nav-user .avatar{width:38px;height:38px;border-radius:50%;background:var(--forest);color:#fff;display:grid;place-items:center;font-family:var(--font-display);font-weight:800;font-size:14px}
.nav-user b{font-size:14px;color:var(--ink);font-family:var(--font-display);line-height:1.2}
.nav-user small{display:block;color:var(--muted);font-size:12px;line-height:1.3}
/* ≤640px: name collapses to avatar; in admin the Sign Out button moves into the drawer account block */
@media(max-width:640px){.nav-user b,.nav-user small{display:none}}

/* ---------- Auth pages (login / register) ---------- */
.auth-main{padding:64px 24px 96px;display:grid;place-items:start center}
.auth-card{width:min(480px,100%)}
.auth-card .card{padding:40px 36px}
.auth-head h1{font-size:28px;margin-bottom:6px}
.auth-head p{color:var(--muted);font-size:15px;margin-bottom:28px}
.auth-head .alert{margin-bottom:20px}
.auth-links{margin-top:24px;display:flex;flex-direction:column;gap:10px;font-size:14px;text-align:center}
.auth-links a{color:var(--forest);font-weight:600}
.auth-links a:hover{text-decoration:underline}
.auth-links span{color:var(--muted)}
.auth-card .form-group{margin-bottom:18px}
.auth-card form button[type="submit"]{margin-top:26px}
.auth-links ~ .alert{margin-top:24px}
@media(max-width:640px){.auth-main{padding:48px 16px 64px}.auth-card .card{padding:32px 24px}}

/* ---------- Site footer (every page) ---------- */
.site-footer{background:var(--forest-950);color:#a9c4b2;padding:72px 0 0;font-size:14px}
.site-footer .brand-name{color:#fff}
.site-footer .brand-name em{color:#7fd98a}
.foot-grid .brand{margin-bottom:16px}
.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1.2fr;gap:44px;padding-bottom:52px}
@media(max-width:980px){.foot-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:560px){.foot-grid{grid-template-columns:1fr}}
.foot-grid h4{font-family:var(--font-display);color:#fff;font-size:15px;margin-bottom:18px;letter-spacing:.04em;text-transform:uppercase}
.foot-grid ul li{margin-bottom:11px}
.foot-grid ul a:hover{color:#fff}
.foot-desc{max-width:34ch}
.fline{display:flex;gap:10px;align-items:flex-start;margin-bottom:12px}
.fline .material-symbols-rounded{font-size:19px;color:#7fd98a;margin-top:2px}
.foot-regulatory,.footer-regulatory{border-top:1px solid rgba(255,255,255,.08);padding:18px 0;font-size:12px;line-height:1.6;color:#7d9a86}
.foot-regulatory p,.footer-regulatory p{margin:0}
.foot-bottom{border-top:1px solid rgba(255,255,255,.08);padding:22px 0;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:13px;color:#7d9a86}
.foot-bottom .material-symbols-rounded{font-size:16px;vertical-align:-3px}
.foot-grid-brand{margin-bottom:16px}

/* ---------- Status badges (extend .badge) ---------- */
.badge-warning{background:#fef3c7;border-color:#fde68a;color:#92400e}
.badge-danger{background:#fee2e2;border-color:#fecaca;color:#991b1b}
.field-error{display:block;margin-top:6px;font-size:12.5px;color:#991b1b}
.badge-success{background:#dcfce7;border-color:#bbf7d0;color:#166534}

/* ---------- Admin shell ----------
   Sidebar + content below the standard header. Admin nav lives in the sidebar. */
.admin-shell{display:grid;grid-template-columns:250px 1fr;align-items:stretch}
.admin-sidebar{background:var(--forest-950);color:#a9c4b2;padding:24px 14px;display:flex;flex-direction:column;gap:4px}
.admin-sidebar .side-label{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#5f7f6b;padding:14px 12px 6px;font-weight:700}
/* Accordion group toggle — collapsed by default; the active chain auto-expands. */
.side-toggle{display:flex;align-items:center;gap:12px;width:100%;padding:10px 12px;border:0;border-radius:10px;background:transparent;font:inherit;font-size:13.5px;font-weight:700;letter-spacing:.02em;color:#a9c4b2;cursor:pointer;text-align:left}
.side-toggle .material-symbols-rounded{font-size:20px;color:#8fc79b}
.side-toggle:hover{background:rgba(255,255,255,.06);color:#fff}
.side-toggle__label{flex:1;min-width:0}
.side-toggle__chev{font-size:18px;margin-left:auto;color:#5f7f6b;transition:transform .15s}
.side-toggle--open .side-toggle__chev{transform:rotate(180deg)}
.side-toggle--open{color:#fff}
.side-toggle--sub{padding:8px 12px 8px 20px;font-size:12.5px;font-weight:600;color:#8fae99}
.side-toggle--sub .material-symbols-rounded{font-size:16px}
.side-group[hidden]{display:none}
.side-group .side-label{padding-top:10px}
/* Hierarchy indentation — one step per level; nested groups get a guide rail. */
.side-group > .side-link,
.side-group > .side-toggle,
.side-group > .side-label{margin-left:18px}
.side-group > .side-toggle--sub,
.side-group > .side-label--sub{margin-left:30px}
.side-group > .side-group{margin-left:22px;padding-left:8px;border-left:1px solid rgba(255,255,255,.14)}
.side-link{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:10px;font-size:14px;font-weight:500;color:#cfe3d5}
.side-link .material-symbols-rounded{font-size:20px;color:#8fc79b}
.side-link:hover{background:rgba(255,255,255,.06);color:#fff}
.side-link.active{background:var(--forest);color:#fff}
.side-link.active .material-symbols-rounded{color:#fff}
.side-link .count{margin-left:auto;background:var(--amber);color:#3d2b00;font-size:11px;font-weight:700;border-radius:var(--radius-pill);padding:1px 8px}
.side-account{display:none;margin-top:auto;padding:14px 12px;border-top:1px solid rgba(255,255,255,.1);align-items:center;gap:10px}
.side-account .avatar{width:38px;height:38px;border-radius:50%;background:var(--forest);color:#fff;display:grid;place-items:center;font-family:var(--font-display);font-weight:800;font-size:14px;flex-shrink:0}
.side-account b{display:block;font-family:var(--font-display);color:#fff;font-size:14px;line-height:1.2}
.side-account small{color:#8fc79b;font-size:12px;line-height:1.3}
.side-account .btn{margin-left:auto}
.admin-main{min-width:0;background:var(--bg-alt)}
.content-pad{padding:32px 36px 64px;display:flex;flex-direction:column;gap:28px}

/* One primary nav per context: on admin pages the sidebar is the ONLY primary nav —
   the header carries utilities only (bell, account, sign out). ≤900px the sidebar
   becomes an off-canvas drawer triggered by the header menu button. */
.nav-start{display:flex;align-items:center;gap:12px}
.admin-menu-btn{display:none;width:44px;height:44px;border-radius:10px;border:1px solid var(--line);background:#fff;color:var(--forest-900);cursor:pointer;place-items:center}
.admin-menu-btn:hover{background:var(--mint)}
.admin-menu-btn .material-symbols-rounded{font-size:24px}
.admin-header .nav-user .avatar{cursor:pointer}
@media(max-width:640px){.admin-header .signout-btn{display:none}}
.admin-drawer-overlay{position:fixed;inset:0;background:rgba(10,31,18,.55);z-index:190;border:0;cursor:pointer;opacity:0;pointer-events:none;transition:opacity .25s}
@media(max-width:900px){
  .admin-shell{grid-template-columns:1fr}
  .admin-menu-btn{display:grid}
  .admin-sidebar{position:fixed;top:0;bottom:0;left:0;width:min(300px,84vw);z-index:200;transform:translateX(-105%);transition:transform .25s ease;overflow-y:auto}
  .admin-shell.drawer-open .admin-sidebar{transform:none;box-shadow:var(--shadow-md)}
  .admin-shell.drawer-open .admin-drawer-overlay{opacity:1;pointer-events:auto}
  .side-account{display:flex}
}

/* ---------- Page head ---------- */
.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;flex-wrap:wrap;margin-bottom:24px}
.page-head>*{min-width:0}
.page-head h1{font-size:clamp(24px,2.6vw,32px)}
.page-head p{color:var(--muted);font-size:14.5px;margin-top:4px}
.page-actions,.page-head-actions{display:flex;gap:12px;flex-wrap:wrap}
@media(max-width:520px){.page-actions,.page-head-actions{width:100%;margin-top:14px}}

/* ---------- KPI cards ---------- */
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:20px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:22px;display:flex;gap:16px;align-items:center}
.kpi .icon{width:48px;height:48px;border-radius:12px;background:var(--mint);color:var(--forest);display:grid;place-items:center;flex-shrink:0}
.kpi .icon .material-symbols-rounded{font-size:26px}
.kpi b{display:block;font-family:var(--font-display);font-weight:800;font-size:26px;letter-spacing:-.02em;line-height:1.1}
.kpi span{color:var(--muted);font-size:13px}

/* ---------- Tables ---------- */
.table-wrap{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:auto}
.table{width:100%;border-collapse:collapse;font-size:14px;min-width:760px}
.table tfoot td{padding:12px 16px;border-top:2px solid var(--forest);font-weight:700;background:var(--mint-2)}
.table th{font-family:var(--font-display);font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:var(--mint-2);text-align:left;padding:12px 16px;border-bottom:1px solid var(--line);white-space:nowrap}
.table td{padding:13px 16px;border-bottom:1px solid var(--line);vertical-align:middle}
.table tbody tr:last-child td{border-bottom:0}
.table tbody tr:hover{background:var(--mint-2)}
.table .ref{font-family:var(--font-display);font-weight:700;color:var(--forest)}

/* Mobile-first responsive tables — docs/01_site_features/styling_and_themeing/mobile-first-principles.md
   Pattern 1: tag th/td with data-priority="1|2|3" (P3 hides ≤1023px, P2 hides ≤767px).
   Pattern 2: ≤639px rows become stacked cards (each td needs data-label; first P1 cell gets class "no-label" as card title). */
@media (max-width:1023px){
  .table th[data-priority="3"],.table td[data-priority="3"]{display:none}
}
@media (max-width:767px){
  .table th[data-priority="2"],.table td[data-priority="2"]{display:none}
}
@media (max-width:639px){
  .table-wrap{background:transparent;border:0;border-radius:0;overflow:visible}
  .table thead{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
  .table,.table tbody,.table tr,.table td{display:block;width:100%;min-width:0}
  .table tr{border:1px solid var(--line);border-radius:16px;margin-bottom:16px;overflow:hidden;background:#fff;box-shadow:var(--shadow-sm);transition:box-shadow .15s}
  .table tr:hover{box-shadow:var(--shadow-md)}
  .table td{display:flex;justify-content:space-between;align-items:center;gap:16px;text-align:right;overflow-wrap:anywhere;padding:11px 16px;border-bottom:1px solid rgba(223,232,225,.5)}
  .table td:first-child{display:block;text-align:left;background:var(--bg-alt);padding:14px 16px;font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);border-bottom:1px solid var(--line)}
  .table td:first-child::before{content:none;display:none}
  .table td:first-child *{text-align:left}
  .table td:first-child.no-label{justify-content:flex-start;text-align:left}
  .table td:last-child{background:var(--mint-2);padding:10px 16px;border-top:1px solid var(--line);border-bottom:0}
  .table td::before{content:attr(data-label);font-weight:600;color:var(--muted);text-align:left;font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;flex-shrink:0;overflow-wrap:normal}
  .table td.no-label::before{content:none}
  .table td.no-label:not(:first-child){justify-content:flex-end}
  /* Touch targets: ≥44px on phones (rule lives after the .row-actions base rules below — equal specificity, source order wins) */
}

/* ---------- Progress ---------- */
.progress{height:8px;border-radius:var(--radius-pill);background:var(--mint);overflow:hidden}
.progress>span{display:block;height:100%;background:var(--forest);border-radius:var(--radius-pill)}

/* ---------- Table row actions & meta helpers ---------- */
.row-actions{display:flex;gap:6px}
.row-actions form{display:inline-flex;margin:0}
.table-card-head{display:flex;justify-content:space-between;align-items:center;width:100%}
.quote-date-mobile{display:none}
.cell-meta{display:flex;flex-direction:column;gap:2px;text-align:left}
.cell-meta b{color:var(--ink);font-size:14px}
.cell-meta small{color:var(--muted);font-size:12px}
.quote-amount{font-family:var(--font-display);font-size:15px;color:var(--forest);font-weight:700}

/* ---------- Photo grid (submitted uploads) ---------- */
.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px}
.photo-grid__item{display:block;border-radius:var(--radius-sm);overflow:hidden;border:1px solid var(--line)}
.photo-grid__img{width:100%;aspect-ratio:1;object-fit:cover;display:block;transition:transform .2s}
.photo-grid__item:hover .photo-grid__img{transform:scale(1.05)}
.row-actions a:not(.btn),.row-actions button:not(.btn){width:32px;height:32px;border-radius:8px;display:grid;place-items:center;color:var(--muted);border:1px solid var(--line);background:#fff;cursor:pointer;transition:.15s}
.row-actions a:not(.btn):hover,.row-actions button:not(.btn):hover{color:var(--forest);border-color:var(--forest);background:var(--mint)}
.row-actions .material-symbols-rounded{font-size:18px}
@media (max-width:639px){
  .row-actions a:not(.btn),.row-actions button:not(.btn){width:44px;height:44px}
  /* In collapsed card cells, badges stay on one line and wrap as a group instead of
     breaking per-character (td sets overflow-wrap:anywhere) or overflowing the ~145px value column. */
  .table td{flex-wrap:wrap}
  .table td .badge{white-space:nowrap}
  /* Row-action buttons become 44×44 icon-only touch targets; drop the
     label text (the data-label row caption already says "ACTION"). */
  .row-actions .btn-label, .table .btn-label{display:none}
  .row-actions .btn{padding:0;width:44px;height:44px;justify-content:center}
  /* Even on .row-actions-less cells, action buttons inside collapsed card rows
     should be icon-only touch targets — drop label text. */
  .table .btn .btn-label{display:none}
  .table .btn{padding:0;width:44px;height:44px;justify-content:center}
  .quote-date-mobile{display:inline-block;font-size:12px;color:var(--muted);font-weight:500}
  .table td .cell-meta{text-align:right;align-items:flex-end}
}

/* ---------- Table toolbar, sorting & pagination ----------
   Search + filter row (.filters), sortable headers (th.sortable), and the
   .table-foot (showing-count + .pagination). Ported from
   admin-quotes-mockup.html; sorting is the shared table-wide pattern. */
.filters{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
.filters .field{min-width:240px;flex:1;max-width:340px;background:#fff}
.filters .field:has(select){flex:0 1 220px;min-width:180px}
.table-foot{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:14px 16px;flex-wrap:wrap}
.table-foot small{color:var(--muted);font-size:13px}
.pagination{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.pagination a,.pagination span{min-width:34px;height:34px;display:grid;place-items:center;border-radius:8px;border:1px solid var(--line);font-size:13.5px;font-weight:500;color:var(--ink);background:#fff;padding:0 8px}
.pagination a:hover{border-color:var(--forest);color:var(--forest)}
.pagination .current{background:var(--forest);border-color:var(--forest);color:#fff;font-weight:600}
.pagination .material-symbols-rounded{font-size:18px}
/* Sortable headers — markup:
   <th class="sortable">Label <span class="material-symbols-rounded">unfold_more</span></th>
   Sorted: add .sorted-asc/.sorted-desc and swap the glyph to arrow_upward/arrow_downward. */
.table th.sortable{cursor:pointer;user-select:none}
.table th.sortable .material-symbols-rounded{font-size:16px;vertical-align:-3px;margin-left:2px;color:var(--muted);opacity:.55;transition:.15s}
.table th.sortable:hover{color:var(--forest)}
.table th.sortable:hover .material-symbols-rounded{opacity:1;color:var(--forest)}
.table th.sorted-asc .material-symbols-rounded,.table th.sorted-desc .material-symbols-rounded{opacity:1;color:var(--forest)}

/* ---------- Hero (public marketing pages) ---------- */
.hero{position:relative;color:#fff;overflow:hidden;
  background:linear-gradient(150deg,var(--forest-950) 0%,var(--forest-900) 45%,var(--forest-800) 100%)}
.hero::before{content:"";position:absolute;inset:0;
  background:radial-gradient(700px 400px at 85% 10%,rgba(92,184,92,.28),transparent 60%),
             radial-gradient(600px 500px at -5% 100%,rgba(34,139,34,.35),transparent 60%)}
.hero-grid{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:64px;align-items:center;padding:96px 0 110px}
.hero-title{font-family:var(--font-display);font-weight:800;font-size:clamp(34px,4.6vw,54px);line-height:1.12;letter-spacing:-.02em;color:#fff;margin-bottom:20px}
.hero-hl{color:#7fd98a}
.hero-lead{font-size:18px;color:#c9dccf;max-width:54ch;margin-bottom:32px}
.hero-actions{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:44px}
.hero-points{display:flex;gap:26px;flex-wrap:wrap}
.hero-points span{display:inline-flex;align-items:center;gap:8px;font-size:14.5px;color:#dcebe0}
.hero-points .material-symbols-rounded{font-size:19px;color:#7fd98a}
/* Hero search pill — search bar for dark hero pages (knowledge base) */
.hero-search{display:flex;align-items:center;gap:8px;background:#fff;border-radius:var(--radius-pill);padding:6px 6px 6px 18px;max-width:600px;margin:0 auto;box-shadow:var(--shadow-md)}
.hero-search .material-symbols-rounded{font-size:22px;color:var(--muted)}
.hero-search input{border:0;outline:0;flex:1;font:inherit;font-size:15px;color:var(--ink);background:transparent;min-width:0}
.hero-visual{position:relative}
.hero-card{position:relative;z-index:2;padding:28px;border-radius:20px}
.hero-card h3{display:flex;align-items:center;gap:10px;margin-bottom:4px;font-size:18px}
.hero-card h3 .material-symbols-rounded{color:var(--forest)}
.hero-card-sub{font-size:13.5px;color:var(--muted);margin-bottom:18px}
.hero-card .field{margin-bottom:12px}
.hero-card .field small{margin-left:auto;font-size:12px;color:var(--muted);background:var(--mint-2);border:1px solid var(--line);border-radius:6px;padding:2px 8px}
.hero-card .btn{width:100%;justify-content:center;margin-top:6px}
.hero-card-note{display:flex;align-items:center;gap:8px;justify-content:center;margin-top:14px;font-size:12.5px;color:var(--muted)}
.hero-card-note .material-symbols-rounded{font-size:16px;color:var(--forest)}
@media(max-width:980px){
  .hero-grid{grid-template-columns:1fr;padding:64px 0 80px;gap:56px}
}

/* ---------- Trust strip ---------- */
.trust-strip{display:flex;justify-content:space-between;gap:24px;padding:22px 0;flex-wrap:wrap;color:#a9c4b2}
.trust-strip span{display:inline-flex;align-items:center;gap:9px;font-size:13.5px;font-weight:500}
.trust-strip .material-symbols-rounded{font-size:20px;color:#7fd98a}
@media(max-width:760px){.trust-strip{justify-content:flex-start}}

/* ---------- Stats padding variant ---------- */
.stats-pad{padding:72px 0}

/* ---------- Split media (text + panel, e.g. outlets) ---------- */
.split-2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:64px;align-items:center}
.split-title{font-family:var(--font-display);font-weight:800;font-size:clamp(28px,3.4vw,40px);line-height:1.18;letter-spacing:-.02em;margin-bottom:14px}
.icon-list{list-style:none}
.icon-list li{display:flex;gap:14px;padding:14px 0;border-bottom:1px solid var(--line)}
.icon-list li:last-child{border-bottom:0}
.icon-list .material-symbols-rounded{color:var(--forest);font-size:24px}
.icon-list b{font-family:var(--font-display);font-size:15.5px}
.icon-list .icon-list-sub{color:var(--muted);font-size:14px}
.icon-list-cta{margin-top:28px}
@media(max-width:980px){.split-2{grid-template-columns:1fr;gap:44px}}

/* ---------- Panel rows (dark panel metric rows) ---------- */
.panel-row{display:flex;justify-content:space-between;padding:13px 0;border-bottom:1px solid rgba(255,255,255,.12);font-size:14.5px}
.panel-row:last-child{border-bottom:0}
.panel-row>span{display:flex;align-items:center;gap:10px;color:#dcebe0}
.panel-row .material-symbols-rounded{font-size:20px;color:#7fd98a}
.panel-row b{font-family:var(--font-display);font-size:18px}

/* ---------- CTA panel ---------- */
.cta-panel{text-align:center;padding:72px 60px;border-radius:28px}
.cta-panel h2{font-size:clamp(28px,3.6vw,40px);margin-bottom:14px;color:#fff}
.cta-panel-sub{color:#c9dccf;max-width:56ch;margin:0 auto 34px}
.cta-actions{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}
.cta-note{margin-top:26px;font-size:13.5px;color:#9db8a6}
.cta-note span{display:inline-flex;align-items:center;gap:6px}
.cta-note .material-symbols-rounded{font-size:17px;color:#7fd98a}
@media(max-width:640px){.cta-panel{padding:48px 24px}}

/* ---------- Instant-price widget (front-page hero card) ----------
   Fields are rendered by field_renderer with admin-on-theme__* classes
   (app.css dependency — see style guide §12). These rules restyle the
   widget to the brand field look: trimmed location pair, inputs stacked,
   mockup-row styling. Map + distance summary are ALWAYS hidden in the
   quick quote — !important beats the app.css link that loads after
   brand.css in the body. */
/* Field controls (field_renderer.php emits these on every brand surface) —
   styled ONCE, globally. Page scopes must not re-style the bare control
   classes; contextual variants (--sm, dark theme, invalid, location-pair)
   override below with higher specificity. */
.admin-on-theme__field-input,
.admin-on-theme__field-select,
.admin-on-theme__field-textarea,
.admin-on-theme__form-input,
.admin-on-theme__form-select,
.admin-on-theme__form-textarea{width:100%;border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 14px;font:inherit;font-size:15px;color:var(--ink);background:#fff;transition:border-color .15s,box-shadow .15s}
.admin-on-theme__field-input:focus,
.admin-on-theme__field-select:focus,
.admin-on-theme__field-textarea:focus,
.admin-on-theme__form-input:focus,
.admin-on-theme__form-select:focus,
.admin-on-theme__form-textarea:focus{outline:0;border-color:var(--forest);box-shadow:0 0 0 3px rgba(34,139,34,.12)}
.admin-on-theme__field-textarea,
.admin-on-theme__form-textarea{resize:vertical;min-height:96px}
.admin-on-theme__field-input::placeholder,
.admin-on-theme__form-input::placeholder{color:#9aab9f}
.hero-card .admin-on-theme__field-card{margin:0;padding:0;background:transparent;border:0}
.hero-card .admin-on-theme__form-group{margin:0}
.hero-card .admin-on-theme__field-label,
.hero-card .admin-on-theme__field-sub-label,
.hero-card .admin-on-theme__form-hint,
.hero-card .admin-on-theme__location-pair__map,
.hero-card .admin-on-theme__location-pair__summary{display:none !important}
.hero-card .admin-on-theme__location-pair{background:transparent;border:0;padding:0;margin-bottom:0;box-shadow:none}
.hero-card .admin-on-theme__location-pair__locations{display:flex;flex-direction:column;gap:12px;margin-bottom:0}
.hero-card .admin-on-theme__location-pair__input-wrap{display:flex;flex-direction:column;gap:6px}
.hero-card .admin-on-theme__form-label{font-family:var(--font-display);font-weight:600;font-size:13px;color:var(--ink)}
.hero-card form .btn{margin-top:16px}
.hero-card .admin-on-theme__location-pair__error:empty{display:none}

/* ---------- Quote wizard (quick quote steps — style guide §12) ----------
   Production classes (admin-on-theme__*, .wizard-step, .wizard-nav) restyled
   with brand tokens. One outer card (.wizard-card): step kicker + service
   title + fields, mirroring the approved mockup. No progress pills — the
   step kicker counter tracks position. Fieldsets are chrome-less inside. */
/* width:100% — inside the logged-in shell (.app-page flex column) auto margins
   disable stretch and collapse the wizard to fit-content; explicit width keeps
   it identical to the public layout. */
.quote-wizard{max-width:760px;margin:0 auto;width:100%;display:flex;flex-direction:column;gap:20px}
.quote-wizard .wizard-card{padding:36px}
.quote-wizard .wizard-step-head{margin-bottom:26px}
.quote-wizard .step-kicker{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--forest);margin-bottom:8px}
.quote-wizard .wizard-title{font-family:var(--font-display);font-weight:800;font-size:24px;letter-spacing:-.02em;color:var(--ink)}
.quote-wizard .admin-on-theme__card{background:transparent;border:0;border-radius:0}
.quote-wizard fieldset.admin-on-theme__card{margin:0;padding:0;min-inline-size:0;scroll-margin-top:110px}
.quote-wizard .admin-on-theme__card-body{padding:0}
.quote-wizard .admin-on-theme__quote-fields-grid{display:grid;gap:20px}
.quote-wizard .admin-on-theme__field-card{margin:0;background:transparent;border:0;padding:0}
.quote-wizard .admin-on-theme__form-group{margin:0}
.quote-wizard .admin-on-theme__field-label{display:flex;align-items:center;gap:6px;font-family:var(--font-display);font-weight:600;font-size:14px;color:var(--ink);margin-bottom:8px}
.quote-wizard .admin-on-theme__field-label .material-symbols-outlined{font-size:18px;color:var(--forest)}
.quote-wizard .admin-on-theme__field-hint{font-size:12.5px;color:var(--muted)}
.quote-wizard .admin-on-theme__field-hint a{color:var(--forest);font-weight:600}
.quote-wizard .admin-on-theme__form-hint,.quote-wizard .admin-on-theme__form-help{font-size:13px;color:var(--muted)}
.quote-wizard .admin-on-theme__field-sub-label{display:none}
/* location_pair: hide the group label + hint — mockup shows only per-input labels */
.quote-wizard .admin-on-theme__form-group[data-field-type="location_pair"] > .admin-on-theme__field-label,
.quote-wizard .admin-on-theme__form-group[data-field-type="location_pair"] > .admin-on-theme__form-hint{display:none}
.quote-wizard .admin-on-theme__banner--info{background:var(--mint);border:1px solid #c4e2ca;border-radius:12px;padding:12px 14px;margin-bottom:16px}
.quote-wizard .wizard-single-link{margin-top:20px;font-size:12.5px;color:var(--muted)}
.quote-wizard .wizard-single-link a{color:var(--muted);text-decoration:underline}
.quote-wizard .wizard-nav{display:flex;justify-content:space-between;gap:12px;margin-top:26px;padding-top:24px;border-top:1px solid var(--line)}
/* Location pair — flattened like the mockup card; map kept on the full wizard */
.quote-wizard .admin-on-theme__location-pair{background:transparent;border:0;padding:0;border-radius:0}
.quote-wizard .admin-on-theme__location-pair__locations{display:flex;flex-direction:column;gap:16px;margin-bottom:0}
.quote-wizard .admin-on-theme__form-label{font-family:var(--font-display);font-weight:600;font-size:14px;color:var(--ink)}
.quote-wizard .admin-on-theme__location-pair .leaflet-container{height:180px;border-radius:10px}
.quote-wizard .admin-on-theme__location-pair__summary{background:var(--mint);border:1px solid #c4e2ca;border-radius:10px;padding:10px 12px;color:var(--forest-800);font-weight:600;font-size:14px}
.quote-wizard .admin-on-theme__location-pair__summary:empty{display:none}
.quote-wizard .admin-on-theme__location-pair__error{background:#fee2e2;border:1px solid #fecaca;color:#991b1b;border-radius:10px;padding:10px 12px;font-size:14px}
.quote-wizard .admin-on-theme__location-pair__error:empty{display:none}
/* Sticky live estimate */
.quote-wizard .admin-on-theme__quote-estimate-card{position:sticky;bottom:12px;z-index:5;box-shadow:var(--shadow-md)}
.quote-wizard .admin-on-theme__quote-estimate-card .admin-on-theme__card-body{padding:18px 20px}
.quote-wizard .wizard-estimate-row{display:flex;align-items:center;justify-content:space-between;gap:16px}
.quote-wizard #estTotal{font-size:1.4rem;color:var(--forest)}
.quote-wizard .admin-on-theme__quote-estimate-list{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}
.quote-wizard .admin-on-theme__quote-actions{margin-top:20px;display:flex;gap:12px;flex-wrap:wrap}

/* ---------- /quote classic form (unified one-page quote) ----------
   Same contract as .quote-wizard above: render_field() keeps emitting
   admin-on-theme__* markup (shared with the admin field-editor preview);
   this scope restyles it with brand tokens. brand.css only — app.css is
   NOT loaded on /quote. The --ase-* legacy vars are bridged here solely
   for the few inline style="" attributes field_renderer emits. */
.quote-page{
  --ase-primary:var(--forest);
  --ase-primary-dark:var(--forest-700);
  --ase-primary-container:var(--mint);
  --ase-text:var(--ink);
  --ase-text-muted:var(--muted);
  --ase-outline-variant:var(--line);
  --ase-warning:var(--amber);
}
/* Card chrome */
.quote-page .admin-on-theme__card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;min-width:0}
.quote-page .admin-on-theme__card-header{display:flex;justify-content:space-between;align-items:center;padding:16px 22px;background:var(--mint-2);border-bottom:1px solid var(--line)}
.quote-page .admin-on-theme__card-header--accent{background:linear-gradient(135deg,var(--mint) 0%,var(--mint-2) 100%);border-bottom-color:var(--forest)}
.quote-page .admin-on-theme__card-header--warning{background:#fef3c7;color:#92400e;border-bottom-color:var(--amber)}
.quote-page .admin-on-theme__card-title{font-family:var(--font-display);font-size:15.5px;font-weight:700;color:var(--ink);margin:0;display:flex;align-items:center;gap:8px}
.quote-page .admin-on-theme__card-body{padding:22px;min-width:0}
/* Form */
.quote-page .admin-on-theme__form{display:flex;flex-direction:column;gap:20px}
.quote-page .admin-on-theme__form-group{display:flex;flex-direction:column;gap:8px}
.quote-page .admin-on-theme__form-group--wide{grid-column:span 2}
.quote-page .admin-on-theme__field-label{display:block;font-family:var(--font-display);font-weight:600;font-size:14px;color:var(--ink);margin-bottom:2px}
.quote-page .admin-on-theme__field-label .req{color:#991b1b}
.quote-page .admin-on-theme__field-hint,.quote-page .admin-on-theme__form-help{font-size:12.5px;color:var(--muted)}
.quote-page .admin-on-theme__field-sub-label{display:block;font-size:13px;color:var(--muted);font-weight:400}
.quote-page input[type=checkbox],.quote-page input[type=radio],.quote-page input[type=range]{accent-color:var(--forest)}
/* Field card + widget family (render_field output) */
.quote-page .admin-on-theme__field-card{background:var(--mint-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:16px 18px;display:flex;flex-direction:column;gap:6px}
.quote-page .admin-on-theme__field-card-group{display:grid;gap:14px}
.quote-page .admin-on-theme__field-wrap{max-width:420px}
.quote-page .admin-on-theme__field-step{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.quote-page .admin-on-theme__field-title{margin:4px 0 12px;font-size:16px}
.quote-page .admin-on-theme__field-with-total{display:flex;align-items:stretch;gap:8px}
.quote-page .admin-on-theme__field-with-total input[type=number]{flex:1}
.quote-page .admin-on-theme__field-line-total{display:inline-flex;align-items:center;padding:5px 10px;background:var(--mint);color:var(--forest-700);border-radius:8px;font-weight:700;font-size:14px;white-space:nowrap;position:relative;cursor:help}
.quote-page .admin-on-theme__field-line-breakdown{position:absolute;top:calc(100% + 6px);right:0;background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 13px;min-width:200px;box-shadow:var(--shadow-md);font-size:13px;font-weight:500;color:var(--ink);opacity:0;visibility:hidden;transform:translateY(-4px);transition:.15s;z-index:100}
.quote-page .admin-on-theme__field-line-total:hover .admin-on-theme__field-line-breakdown{opacity:1;visibility:visible;transform:none}
.quote-page .admin-on-theme__field-line-breakdown-row{display:flex;justify-content:space-between;gap:16px;padding:2px 0}
.quote-page .admin-on-theme__field-chip-group,.quote-page .admin-on-theme__field-radio-group{display:flex;gap:6px;flex-wrap:wrap}
.quote-page .admin-on-theme__field-chip-group .chip{background:#fff;border:1px solid var(--line);padding:6px 12px;border-radius:var(--radius-pill);font-size:13.5px;cursor:pointer;transition:.15s}
.quote-page .admin-on-theme__field-chip-group .chip:hover{border-color:var(--forest);background:var(--mint)}
.quote-page .admin-on-theme__field-stepper{display:inline-flex;align-items:center}
.quote-page .admin-on-theme__field-stepper-btn{width:36px;height:36px;border-radius:50%;border:2px solid var(--forest);background:#fff;color:var(--forest);font-size:19px;font-weight:700;cursor:pointer;display:grid;place-items:center;line-height:1;transition:.15s;flex-shrink:0}
.quote-page .admin-on-theme__field-stepper-btn:hover{background:var(--forest);color:#fff}
.quote-page .admin-on-theme__field-stepper-input{width:56px;text-align:center;font-size:20px;font-weight:700;border:0;background:transparent;color:var(--ink);margin:0 4px;appearance:textfield;-moz-appearance:textfield}
.quote-page .admin-on-theme__field-stepper-input::-webkit-inner-spin-button,.quote-page .admin-on-theme__field-stepper-input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}
.quote-page .admin-on-theme__field-range{width:100%;accent-color:var(--forest)}
.quote-page .admin-on-theme__field-range-row{display:flex;align-items:center;gap:10px}
.quote-page .admin-on-theme__field-range-value{font-family:var(--font-display);font-weight:700;color:var(--forest);min-width:52px;text-align:right}
.quote-page .admin-on-theme__field-toggle{display:inline-flex;gap:6px}
.quote-page .admin-on-theme__field-toggle button{background:#fff;border:1px solid var(--line);padding:6px 14px;border-radius:var(--radius-pill);cursor:pointer;font:inherit;font-size:13.5px;transition:.15s}
.quote-page .admin-on-theme__field-toggle button.is-active,.quote-page .admin-on-theme__field-toggle label.is-active button{background:var(--mint);border-color:var(--forest)}
.quote-page .admin-on-theme__field-item-row{display:grid;grid-template-columns:1fr auto;gap:6px;align-items:center;padding:6px 0;border-bottom:1px solid var(--line)}
.quote-page .admin-on-theme__field-item-row:last-child{border-bottom:0}
.quote-page .admin-on-theme__field-item-row .qty input{width:50px;text-align:center;border:1px solid var(--line);border-radius:var(--radius-sm);padding:3px}
/* Inventory pickers (card-grid / pill-row / item-grid) */
.quote-page .admin-on-theme__inv-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:12px}
.quote-page .admin-on-theme__inv-card{display:flex;flex-direction:column;align-items:center;gap:6px;border:2px solid var(--line);border-radius:var(--radius-sm);padding:16px 12px;cursor:pointer;text-align:center;background:#fff;position:relative;transition:.2s;user-select:none}
.quote-page .admin-on-theme__inv-card:hover,.quote-page .admin-on-theme__inv-card.active{border-color:var(--forest);background:var(--mint)}
.quote-page .admin-on-theme__inv-card-check{position:absolute;opacity:0;width:0;height:0}
.quote-page .admin-on-theme__inv-card-check-mark{position:absolute;top:6px;right:6px;width:20px;height:20px;border-radius:50%;background:var(--forest);color:#fff;display:none;align-items:center;justify-content:center}
.quote-page .admin-on-theme__inv-card.active .admin-on-theme__inv-card-check-mark{display:flex}
.quote-page .admin-on-theme__inv-card-icon{font-size:32px}
.quote-page .admin-on-theme__inv-card-name{font-size:12.8px;font-weight:700;color:var(--ink)}
.quote-page .admin-on-theme__inv-card-price{font-size:12.8px;font-weight:800;color:var(--forest-700)}
.quote-page .admin-on-theme__inv-pill-row{display:flex;flex-wrap:wrap;gap:8px}
.quote-page .admin-on-theme__inv-pill{display:inline-flex;align-items:center;gap:6px;border:1.5px solid var(--line);border-radius:var(--radius-pill);padding:7px 16px;cursor:pointer;font-size:14px;font-weight:600;transition:.2s;background:#fff;user-select:none;position:relative}
.quote-page .admin-on-theme__inv-pill:hover{border-color:var(--forest);background:var(--mint)}
.quote-page .admin-on-theme__inv-pill.active{border-color:var(--forest);background:var(--forest);color:#fff}
.quote-page .admin-on-theme__inv-pill-check{position:absolute;opacity:0;width:0;height:0}
.quote-page .admin-on-theme__inv-pill-price{font-size:12px;opacity:.7}
.quote-page .admin-on-theme__inv-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.quote-page .admin-on-theme__inv-grid-item{display:flex;flex-direction:column;align-items:center;gap:5px;border:2px solid var(--line);border-radius:var(--radius-sm);padding:14px;cursor:pointer;text-align:center;background:#fff;position:relative;transition:.2s;user-select:none}
.quote-page .admin-on-theme__inv-grid-item:hover,.quote-page .admin-on-theme__inv-grid-item.active{border-color:var(--forest);background:var(--mint)}
.quote-page .admin-on-theme__inv-grid-check{position:absolute;opacity:0;width:0;height:0}
.quote-page .admin-on-theme__inv-grid-icon{font-size:28px}
.quote-page .admin-on-theme__inv-grid-name{font-size:12.8px;font-weight:700;color:var(--ink)}
.quote-page .admin-on-theme__inv-grid-price{font-size:12.8px;font-weight:800;color:var(--forest-700)}
/* Banner / alert */
.quote-page .admin-on-theme__banner{display:flex;align-items:flex-start;gap:12px;padding:12px 16px;border-radius:var(--radius-sm);border:1px solid #c4e2ca;background:var(--mint);color:var(--forest-800);font-size:14px;margin-bottom:16px}
.quote-page .admin-on-theme__banner--info a{color:var(--forest);font-weight:600}
.quote-page .admin-on-theme__alert{display:flex;gap:10px;align-items:flex-start;border-radius:var(--radius-sm);padding:14px 16px;font-size:14px;border:1px solid var(--line)}
.quote-page .admin-on-theme__alert--info{background:var(--mint);border-color:#c4e2ca;color:var(--forest-800)}
/* Radio + customer typeahead */
.quote-page .admin-on-theme__radio-label{display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:14.5px;color:#33443a;padding:8px 10px;border-radius:var(--radius-sm);transition:.15s;border:1px solid transparent}
.quote-page .admin-on-theme__radio-label:hover{background:var(--mint)}
.quote-page .admin-on-theme__radio-label input{margin-top:3px;flex-shrink:0}
.quote-page .admin-on-theme__quote-mode-toggle{display:flex;flex-wrap:wrap;gap:8px 20px;margin-bottom:4px}
.quote-page .admin-on-theme__quote-search-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.quote-page .admin-on-theme__quote-search-row input[type=text]{flex:1;min-width:240px}
.quote-page .admin-on-theme__user-search-results{margin-top:6px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;max-height:240px;overflow-y:auto}
.quote-page .admin-on-theme__user-search-row{padding:8px 10px;cursor:pointer;border-bottom:1px solid var(--line);font-size:15px}
.quote-page .admin-on-theme__user-search-row:last-child{border-bottom:0}
.quote-page .admin-on-theme__user-search-row:hover{background:var(--mint)}
.quote-page .admin-on-theme__user-search-email{color:var(--muted);font-size:13.5px;margin-left:6px}
.quote-page .admin-on-theme__user-search-empty{padding:10px;color:var(--muted);font-size:14px}
.quote-page .admin-on-theme__user-search-selected{margin-top:8px;padding:8px 10px;background:var(--mint);border:1px solid #c4e2ca;border-radius:var(--radius-sm);font-size:14px;color:var(--forest-800)}
.quote-page .admin-on-theme__user-search-warning{margin-top:8px;background:#fef3c7;border:1px solid var(--amber);border-radius:var(--radius-sm);padding:8px 10px;font-size:13.5px;color:#92400e}
/* Split layout: form + sticky estimate */
.quote-page .admin-on-theme__quote-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:24px;align-items:start;width:min(1180px,92%);margin-inline:auto;padding:var(--sp-4) 0 var(--sp-6)}
.quote-page .admin-on-theme__quote-main{display:flex;flex-direction:column;gap:20px;min-width:0}
.quote-page .admin-on-theme__quote-sidebar{position:sticky;top:90px}
.quote-page .admin-on-theme__quote-fields-grid{display:grid;gap:14px}
.quote-page .admin-on-theme__quote-customer-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px 20px}
.quote-page .admin-on-theme__quote-actions{display:flex;gap:12px;align-items:center;margin-top:4px;flex-wrap:wrap}
.quote-page .admin-on-theme__quote-send-link .admin-on-theme__form-help{display:block}
@media(max-width:960px){
  .quote-page .admin-on-theme__quote-layout{grid-template-columns:1fr}
  .quote-page .admin-on-theme__quote-sidebar{position:static;order:99;margin-top:4px}
}
@media(max-width:720px){.quote-page .admin-on-theme__quote-customer-grid{grid-template-columns:1fr}}
/* Estimate card */
.quote-page .admin-on-theme__quote-estimate-card{border:2px solid var(--forest)}
.quote-page .admin-on-theme__quote-estimate-total{display:flex;justify-content:space-between;align-items:baseline;padding:14px 16px;background:var(--mint-2);border-radius:var(--radius-sm);margin:14px 0}
.quote-page .admin-on-theme__quote-estimate-total span{color:var(--muted);font-size:12px}
.quote-page .admin-on-theme__quote-estimate-total strong{color:var(--forest-700);font-size:22px;font-weight:800;font-family:var(--font-display)}
.admin-on-theme__quote-estimate-list,
.quote-page .admin-on-theme__quote-estimate-list,
.quote-wizard .admin-on-theme__quote-estimate-list{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:3px}
.admin-on-theme__quote-estimate-list li,
.quote-page .admin-on-theme__quote-estimate-list li,
.quote-wizard .admin-on-theme__quote-estimate-list li{display:flex;justify-content:space-between;align-items:baseline;padding:4px 0;border-bottom:1px solid var(--line);font-size:12.8px;line-height:1.35;gap:12px}
.admin-on-theme__quote-estimate-list li:last-child,
.quote-page .admin-on-theme__quote-estimate-list li:last-child,
.quote-wizard .admin-on-theme__quote-estimate-list li:last-child{border-bottom:0}
.admin-on-theme__quote-estimate-line,
.quote-page .admin-on-theme__quote-estimate-line,
.quote-wizard .admin-on-theme__quote-estimate-line{display:flex;flex-direction:column;flex:1;gap:2px;min-width:0}
.admin-on-theme__quote-estimate-line-main,
.quote-page .admin-on-theme__quote-estimate-line-main,
.quote-wizard .admin-on-theme__quote-estimate-line-main{display:flex;justify-content:space-between;align-items:baseline;gap:12px;width:100%}
.admin-on-theme__quote-estimate-meta,
.quote-page .admin-on-theme__quote-estimate-meta,
.quote-wizard .admin-on-theme__quote-estimate-meta{font-size:11px;color:var(--muted);line-height:1.3}
.admin-on-theme__quote-estimate-list li.quote-est--discount,
.admin-on-theme__quote-estimate-list li.quote-est--discount strong,
.admin-on-theme__quote-estimate-list li.quote-est--discount .admin-on-theme__quote-estimate-meta{color:#15803d}
.admin-on-theme__quote-estimate-list li.quote-est--targeted{padding-left:16px;border-left:2px solid #bbf7d0;border-bottom-color:#bbf7d0}
.admin-on-theme__quote-estimate-list li.quote-est--targeted::before{content:'\21B3 ';color:#15803d;font-size:11px;margin-right:2px}
.admin-on-theme__quote-estimate-list li.quote-est-inv-header{font-weight:600;color:var(--ink);border-bottom:none;padding-top:6px;font-size:13.5px}
.admin-on-theme__quote-estimate-list li.quote-est-inv-subheader{font-weight:600;color:var(--ink);background:transparent;padding:8px 0 3px;margin-top:8px;border-top:1px solid var(--line);border-bottom:0;font-size:13.5px}
.admin-on-theme__quote-estimate-list li.quote-est-inv-subheader:first-of-type{border-top:0;margin-top:2px}
.admin-on-theme__quote-estimate-list li.quote-est-inv-item{font-style:italic;font-size:12px;color:var(--muted);padding:2px 0 2px 14px;border:0;display:flex;justify-content:space-between;align-items:baseline;gap:12px}
.admin-on-theme__quote-estimate-list li.quote-est-inv-item strong{font-style:normal;font-weight:600;color:var(--ink);white-space:nowrap;margin-left:auto}
.admin-on-theme__quote-estimate-list li.quote-est-inv-total{font-weight:600;margin-top:2px;padding-top:7px;border-top:1px dashed var(--line);border-bottom:0;display:flex;justify-content:space-between;align-items:baseline;gap:12px}
.admin-on-theme__quote-estimate-list li.quote-est-inv-total strong{white-space:nowrap;margin-left:auto}
.admin-on-theme__quote-estimate-line-main strong{white-space:nowrap;margin-left:auto}
.admin-on-theme__quote-estimate-list li.admin-on-theme__quote-estimate-empty{color:var(--muted);justify-content:center;border:0;padding:12px 0;font-style:italic}
/* Mobile sticky price pill */
.quote-page .admin-on-theme__quote-mobile-sticky{display:none;position:sticky;top:84px;z-index:50;background:var(--forest);color:#fff;padding:10px 16px;margin:-6px 0 16px;border-radius:var(--radius-sm);align-items:center;justify-content:space-between;box-shadow:var(--shadow-md);font-size:15px;transition:opacity .2s,transform .2s}
.quote-page .admin-on-theme__quote-mobile-sticky.is-hidden{opacity:0;transform:translateY(-100%);pointer-events:none}
.quote-page .admin-on-theme__quote-mobile-sticky-label{font-size:12px;text-transform:uppercase;letter-spacing:.05em;opacity:.85}
.quote-page .admin-on-theme__quote-mobile-sticky-total{font-size:18px;font-weight:700;font-family:var(--font-display)}
@media(max-width:960px){.quote-page .admin-on-theme__quote-mobile-sticky{display:flex}}
/* Buttons \2014 brand button family */
.quote-page .admin-on-theme__btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--font-display);font-weight:700;font-size:15px;padding:12px 24px;border-radius:var(--radius-pill);border:1px solid transparent;cursor:pointer;transition:.2s;text-decoration:none;white-space:nowrap}
.quote-page .admin-on-theme__btn:hover{transform:translateY(-1px)}
.quote-page .admin-on-theme__btn--primary{background:var(--forest);color:#fff;box-shadow:0 6px 18px rgba(34,139,34,.35)}
.quote-page .admin-on-theme__btn--primary:hover{background:var(--forest-700)}
.quote-page .admin-on-theme__btn--secondary,.quote-page .admin-on-theme__btn--ghost{background:#fff;border-color:var(--line);color:var(--ink)}
.quote-page .admin-on-theme__btn--secondary:hover,.quote-page .admin-on-theme__btn--ghost:hover{border-color:var(--forest);color:var(--forest);background:var(--mint)}
.quote-page .admin-on-theme__btn--lg{padding:16px 32px;font-size:16px}
.quote-page .admin-on-theme__btn--sm{padding:8px 16px;font-size:13.5px}
.quote-page .admin-on-theme__btn-link{background:none;border:0;color:var(--forest);font:inherit;cursor:pointer;padding:0;text-decoration:underline}
/* What happens next (form branch inline card) */
.quote-page .admin-on-theme__quote-next-steps{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px;color:#33443a;font-size:14.5px}
.quote-page .admin-on-theme__quote-next-steps-card{margin-top:4px}

/* ---------- /quote landing (brand sections \2014 homepage rhythm) ---------- */
.kb-quote-hero .container{padding:72px 0 80px;text-align:center}
.kb-quote-hero .eyebrow{margin-bottom:20px}
.kb-quote-hero .hero-lead{margin-left:auto;margin-right:auto}
.kb-quote-hero-slim .container{padding:48px 0 56px}
.kb-crumbs-light{justify-content:center;display:flex;align-items:center;gap:4px;font-size:13.5px;color:#c9dccf;margin-bottom:18px}
.kb-crumbs-light a{color:#c9dccf;text-decoration:underline}
.kb-crumbs-light .material-symbols-rounded{font-size:15px}
.kb-picker-section{padding-top:var(--sp-5)}
.kb-service-card{display:flex;flex-direction:column}
.kb-service-card h3{margin-bottom:6px}
.kb-service-card p{margin-bottom:14px}
.kb-service-card .kb-cta{margin-top:auto}
.kb-service-card-form{gap:14px}
.kb-service-card-form .btn{margin-top:auto;justify-content:center}
.kb-cta{display:inline-flex;align-items:center;gap:6px;color:var(--forest);font-weight:600;font-size:14px}
.kb-cta .material-symbols-rounded{font-size:17px;transition:transform .2s}
.kb-service-card:hover .kb-cta .material-symbols-rounded{transform:translateX(3px)}
@media(max-width:640px){
  .kb-services{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-2)}
  .kb-service-card{padding:20px 18px}
  .kb-service-card .icon{width:44px;height:44px;border-radius:11px;margin-bottom:12px}
  .kb-service-card .icon .material-symbols-rounded{font-size:24px}
  .kb-service-card h3{font-size:15.5px}
  .kb-service-card p{font-size:13px}
  .kb-cta{font-size:13px}
  .kb-service-card-form{grid-column:1/-1}
  .kb-quote-hero .container{padding:56px 0 64px}
}
.kb-next-panel{text-align:left}
.kb-steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:22px}
.kb-steps li{display:flex;gap:12px;align-items:flex-start}
.kb-step-num{width:30px;height:30px;border-radius:50%;background:var(--forest);color:#fff;display:grid;place-items:center;font-family:var(--font-display);font-weight:800;font-size:13.5px;flex-shrink:0}
.kb-steps strong{display:block;font-family:var(--font-display);color:#fff;font-size:15px;line-height:1.25;margin-bottom:2px}
.kb-steps small{color:#c4dbcc;font-size:13px;line-height:1.4}
.kb-empty{max-width:480px;margin:0 auto;text-align:center}
.kb-empty .icon{margin-inline:auto}

/* ---------- Location pair widget (render_field location_pair) ----------
   Shared by .quote-page, .quote-wizard and the front-page .hero-card.
   Functional styles ported from app.css; brand tokens throughout. */
.quote-page .admin-on-theme__location-pair,
.quote-wizard .admin-on-theme__location-pair,
.hero-card .admin-on-theme__location-pair{position:relative;margin-bottom:24px}
.quote-page .admin-on-theme__location-pair__locations,
.quote-wizard .admin-on-theme__location-pair__locations,
.hero-card .admin-on-theme__location-pair__locations{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:8px}
@media(max-width:600px){.quote-page .admin-on-theme__location-pair__locations,.quote-wizard .admin-on-theme__location-pair__locations,.hero-card .admin-on-theme__location-pair__locations{grid-template-columns:1fr}}
.quote-page .admin-on-theme__location-pair__input-wrap,
.quote-wizard .admin-on-theme__location-pair__input-wrap,
.hero-card .admin-on-theme__location-pair__input-wrap{position:relative}
.quote-page .admin-on-theme__location-pair__suggestions,
.quote-wizard .admin-on-theme__location-pair__suggestions,
.hero-card .admin-on-theme__location-pair__suggestions{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid var(--line);border-top:0;border-radius:0 0 var(--radius-sm) var(--radius-sm);max-height:280px;overflow-y:auto;z-index:1000;box-shadow:var(--shadow-md);display:none}
.quote-page .admin-on-theme__location-pair__suggestion,
.quote-wizard .admin-on-theme__location-pair__suggestion,
.hero-card .admin-on-theme__location-pair__suggestion{padding:10px 14px;cursor:pointer;border-bottom:1px solid var(--mint-2);transition:background-color .1s}
.quote-page .admin-on-theme__location-pair__suggestion:hover,
.quote-wizard .admin-on-theme__location-pair__suggestion:hover,
.hero-card .admin-on-theme__location-pair__suggestion:hover{background-color:var(--mint)}
.quote-page .admin-on-theme__location-pair__suggestion:last-child,
.quote-wizard .admin-on-theme__location-pair__suggestion:last-child,
.hero-card .admin-on-theme__location-pair__suggestion:last-child{border-bottom:0}
.quote-page .admin-on-theme__location-pair__suggestion--empty,
.quote-wizard .admin-on-theme__location-pair__suggestion--empty,
.hero-card .admin-on-theme__location-pair__suggestion--empty{color:var(--muted);cursor:default;font-style:italic}
.quote-page .admin-on-theme__location-pair__suggestion--empty:hover,
.quote-wizard .admin-on-theme__location-pair__suggestion--empty:hover,
.hero-card .admin-on-theme__location-pair__suggestion--empty:hover{background-color:transparent}
.quote-page .admin-on-theme__location-pair__suggestion--loading,
.quote-wizard .admin-on-theme__location-pair__suggestion--loading,
.hero-card .admin-on-theme__location-pair__suggestion--loading{color:var(--muted);cursor:default;font-style:italic}
.quote-page .admin-on-theme__location-pair__suggestion--loading:hover,
.quote-wizard .admin-on-theme__location-pair__suggestion--loading:hover,
.hero-card .admin-on-theme__location-pair__suggestion--loading:hover{background-color:transparent}
.quote-page .admin-on-theme__location-pair__suggestion-primary,
.quote-wizard .admin-on-theme__location-pair__suggestion-primary,
.hero-card .admin-on-theme__location-pair__suggestion-primary{font-weight:600;color:var(--ink);margin-bottom:2px}
.quote-page .admin-on-theme__location-pair__suggestion-secondary,
.quote-wizard .admin-on-theme__location-pair__suggestion-secondary,
.hero-card .admin-on-theme__location-pair__suggestion-secondary{font-size:12.8px;color:var(--muted)}
.quote-page .admin-on-theme__location-pair__map,
.quote-wizard .admin-on-theme__location-pair__map{width:100%;height:320px;border-radius:var(--radius-sm);border:1px solid var(--line);margin:12px 0;display:none;z-index:0}
.quote-page .admin-on-theme__location-pair__marker{background:transparent!important;border:none!important}
.quote-page .admin-on-theme__location-pair__marker-pin{color:#fff;border-radius:50%;width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:15px;border:3px solid #fff;box-shadow:0 2px 6px rgba(0,0,0,.35)}
.quote-page .admin-on-theme__location-pair__marker-pin--ghost{opacity:.6;animation:kb-marker-pulse 1.4s ease-in-out infinite}
@keyframes kb-marker-pulse{0%,100%{transform:scale(1);opacity:.55}50%{transform:scale(1.15);opacity:1}}
.quote-page .admin-on-theme__location-pair__spinner,
.quote-wizard .admin-on-theme__location-pair__spinner,
.hero-card .admin-on-theme__location-pair__spinner{display:inline-block;width:14px;height:14px;border:2px solid var(--line);border-top-color:var(--forest);border-radius:50%;animation:kb-spin .7s linear infinite;vertical-align:middle;margin-right:6px}
@keyframes kb-spin{to{transform:rotate(360deg)}}
.quote-page .admin-on-theme__location-pair .admin-on-theme__form-input--invalid,
.quote-wizard .admin-on-theme__location-pair .admin-on-theme__form-input--invalid,
.hero-card .admin-on-theme__location-pair .admin-on-theme__form-input--invalid{border-color:#dc2626;box-shadow:0 0 0 3px rgba(220,38,38,.1)}
.quote-page .admin-on-theme__location-pair__summary:empty,
.quote-wizard .admin-on-theme__location-pair__summary:empty,
.hero-card .admin-on-theme__location-pair__summary:empty{display:none}
.quote-page .admin-on-theme__location-pair__summary,.quote-page .admin-on-theme__location-pair__error{background:var(--mint);border:1px solid #c4e2ca;border-radius:var(--radius-sm);padding:10px 12px;color:var(--forest-800);font-weight:600;font-size:14px}
.quote-page .admin-on-theme__location-pair__error{background:#fee2e2;border-color:#fecaca;color:#991b1b;font-weight:400}
.quote-page .admin-on-theme__location-pair__error:empty,.hero-card .admin-on-theme__location-pair__error:empty{display:none}

/* .app-page — primitives with no legacy rules (styled fresh to brand) +
   base card/form/button look. Generic legacy vars used by view inline
   styles are mapped on the shell body. */
.app-shell-page{
  --color-primary:var(--forest);
  --color-primary-dark:var(--forest-700);
  --color-primary-700:var(--forest-700);
  --color-primary-100:var(--mint);
  --color-success:#15803d;
  --color-success-dark:#166534;
  --color-success-light:#dcfce7;
  --color-warning:var(--amber);
  --color-error:#dc2626;
  --color-error-dark:#991b1b;
  --color-error-light:#fee2e2;
  --text-primary:var(--ink);
  --text-main:var(--ink);
  --text-muted:var(--muted);
  --bg-surface:#fff;
  --bg-surface-alt:var(--bg-alt);
  --bg-hover:var(--mint);
  --border-color:var(--line);
  --radius-md:var(--radius-sm);
  --radius-lg:14px;
  --radius-xl:20px;
  --font-size-sm:13.5px;
  --font-size-lg:17px;
  --font-size-2xl:24px;
  --font-weight-bold:700;
  --color-background:#fff;
  --color-background-secondary:var(--bg-alt);
  --color-border:var(--line);
  --color-text-light:var(--muted);
  --color-text-muted:var(--muted);
  --font-weight-medium:500;
}
.app-page .admin-on-theme__card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.app-page .admin-on-theme__card-header{background:var(--mint-2)}
.app-page .admin-on-theme__card-title{font-family:var(--font-display);font-size:15.5px;letter-spacing:-.01em}
.app-page .admin-on-theme__card-title .fas,.app-page .admin-on-theme__card-title .material-symbols-rounded,.app-page .admin-on-theme__card-title .material-symbols-outlined{color:var(--forest)}
.app-page .admin-on-theme__btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--font-display);font-weight:700;font-size:14.5px;padding:11px 22px;border-radius:var(--radius-pill);border:1px solid transparent;cursor:pointer;transition:.2s;text-decoration:none;white-space:nowrap}
.app-page .admin-on-theme__btn:hover{text-decoration:none}
.app-page .admin-on-theme__btn--primary{background:var(--forest);color:#fff}
.app-page .admin-on-theme__btn--primary:hover{background:var(--forest-700)}
.app-page .admin-on-theme__btn--secondary{background:#fff;border-color:var(--line);color:var(--ink)}
.app-page .admin-on-theme__btn--secondary:hover{border-color:var(--forest);color:var(--forest)}
.app-page .admin-on-theme__btn--ghost{background:transparent;border-color:var(--forest);color:var(--forest)}
.app-page .admin-on-theme__btn--ghost:hover{background:var(--mint)}
.app-page .admin-on-theme__btn--danger{background:#fee2e2;border-color:#fecaca;color:#991b1b}
.app-page .admin-on-theme__banner{background:var(--mint);border:1px solid #c4e2ca;color:var(--forest-800)}
.app-page .admin-on-theme__alert--info{background:var(--mint);border-color:#c4e2ca;color:var(--forest-800)}
.app-page input[type=checkbox],.app-page input[type=radio],.app-page input[type=range]{accent-color:var(--forest)}
/* KPI cards */
.app-page .admin-on-theme__kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px}
.app-page .admin-on-theme__kpi-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:20px;transition:.2s;display:block}
.app-page .admin-on-theme__kpi-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:#bcd9c2}
.app-page .admin-on-theme__kpi-value{display:block;font-family:var(--font-display);font-weight:800;font-size:28px;letter-spacing:-.02em;color:var(--ink);line-height:1.1}
.app-page .admin-on-theme__kpi-label{display:block;color:var(--muted);font-size:13px;margin-top:4px}
/* Quick actions */
.app-page .admin-on-theme__quick-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.app-page .admin-on-theme__quick-action{display:flex;flex-direction:column;align-items:center;gap:8px;padding:18px 12px;background:var(--mint-2);border:1px solid var(--line);border-radius:var(--radius-sm);text-align:center;font-size:13.5px;font-weight:600;color:var(--forest-800);transition:.2s}
.app-page .admin-on-theme__quick-action:hover{border-color:var(--forest);background:var(--mint);transform:translateY(-2px)}
.app-page .admin-on-theme__quick-action .fas{color:var(--forest);font-size:18px}
/* Period tabs */
.app-page .admin-on-theme__period-tabs{display:inline-flex;gap:6px;background:var(--mint-2);border:1px solid var(--line);border-radius:var(--radius-pill);padding:4px;flex-wrap:wrap}
.app-page .admin-on-theme__period-tab{border:0;background:transparent;border-radius:var(--radius-pill);padding:7px 16px;font:inherit;font-size:13.5px;font-weight:600;color:var(--muted);cursor:pointer;transition:.15s}
.app-page .admin-on-theme__period-tab:hover{color:var(--forest)}
.app-page .admin-on-theme__period-tab--active,.app-page .admin-on-theme__period-tab.admin-on-theme__period-tab--active{background:var(--forest);color:#fff}
/* Attention items */
.app-page .admin-on-theme__attention-item{display:flex;align-items:center;gap:12px;background:var(--mint);border:1px solid #c4e2ca;border-radius:var(--radius-sm);padding:12px 16px;margin-bottom:10px;color:var(--forest-800);transition:.15s}
.app-page .admin-on-theme__attention-item:hover{border-color:var(--forest)}
.app-page .admin-on-theme__attention-text b{font-family:var(--font-display)}
/* Sub sections */
.app-page .admin-on-theme__sub-section{border:1px solid var(--line);border-radius:var(--radius-sm);padding:16px;margin-top:12px;background:var(--mint-2)}
.app-page .admin-on-theme__sub-title{font-family:var(--font-display);font-weight:700;font-size:13.5px;color:var(--forest-800);margin-bottom:10px}
.app-page .admin-on-theme__sub-row{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-bottom:1px solid var(--line);font-size:14px}
.app-page .admin-on-theme__sub-row:last-child{border-bottom:0}

/* ---------- Customer app pages (.app-page) ----------
   Dashboard / profile / quotes / payments / customer-stock on the
   brand app shell. Functional styles ported from app.css for the
   admin-on-theme classes these views use; brand tokens via the var
   bridge below. brand.css only — app.css is not loaded. */
.app-page{
  --ase-primary:var(--forest);
  --ase-primary-dark:var(--forest-700);
  --ase-primary-container:var(--mint);
  --ase-primary-soft:var(--mint);
  --ase-surface:#ffffff;
  --ase-surface-alt:var(--bg-alt);
  --ase-surface-variant:var(--mint-2);
  --ase-surface-container:var(--mint-2);
  --ase-surface-container-low:var(--bg-alt);
  --ase-surface-container-high:var(--mint);
  --ase-surface-low:var(--mint-2);
  --ase-surface-dim:var(--line);
  --ase-bg-surface:var(--bg-alt);
  --ase-border:var(--line);
  --ase-outline:var(--muted);
  --ase-outline-variant:var(--line);
  --ase-text:var(--ink);
  --ase-text-muted:var(--muted);
  --ase-info:var(--forest-800);
  --ase-info-container:var(--mint);
  --ase-warning:var(--amber);
  --ase-radius-sm:var(--radius-sm);
  --ase-radius:var(--radius);
  --ase-radius-md:var(--radius-sm);
  --ase-radius-lg:14px;
}

.app-page /* ---------- Hero Section ---------- */
.admin-on-theme__hero,
.app-page .admin-service-edit__hero{
margin-bottom: 3rem;
}
.app-page /* Utility modifiers */
.admin-on-theme__hero--flush,
.app-page .admin-on-theme__card--flush{
margin-bottom: 0;
}
.app-page .admin-on-theme__btn--mt{
margin-top: 1rem;
}
.app-page .admin-on-theme__card-body--scroll{
overflow-x: auto;
}
.app-page .admin-on-theme__hero-inner--between{
display: flex; justify-content: space-between; align-items: center;
}
.app-page .admin-on-theme__form-select--sm{
max-width: 16rem;
}
.app-page .admin-on-theme__form-input--sm{
max-width: 11rem;
}
.app-page .admin-on-theme__form-input--xs{
max-width: 9rem;
}
.app-page .admin-on-theme__p--flush{
margin-top: 0;
}
.app-page .admin-on-theme__hero-inner,
.app-page .admin-service-edit__hero-inner{
position: relative;
  overflow: hidden;
  background: linear-gradient(135deg, var(--bg-alt) 0%, var(--mint) 100%);
  border-radius: 2rem;
  padding: 3rem;
}
.app-page .admin-on-theme__hero-glow,
.app-page .admin-service-edit__hero-glow{
position: absolute;
  top: -5rem;
  right: -5rem;
  width: 22rem;
  height: 22rem;
  background: var(--forest-600);
  opacity: 0.25;
  border-radius: 50%;
  filter: blur(70px);
  pointer-events: none;
}
.app-page .admin-on-theme__hero-content,
.app-page .admin-service-edit__hero-content{
position: relative;
  z-index: 1;
  max-width: 48rem;
}
.app-page .admin-on-theme__hero-badge,
.app-page .admin-service-edit__hero-badge{
display: inline-block;
  padding: 0.375rem 1rem;
  background: var(--forest);
  color: var(--ase-on-primary);
  border-radius: 9999px;
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-bottom: 1.5rem;
}
.app-page .admin-on-theme__hero-title,
.app-page .admin-service-edit__hero-title{
font-size: clamp(2rem, 4vw, 2.75rem);
  font-weight: 700;
  line-height: 1.1;
  color: var(--text-color, #1a202c);
  margin: 0 0 1.25rem;
}
.app-page .admin-on-theme__hero-title--accent{
color: var(--ase-primary-dark);
  display: block;
}
.app-page .admin-on-theme__hero-subtitle{
font-size: 1.05rem;
  color: var(--text-muted, #4a5568);
  line-height: 1.6;
  margin: 0 0 1.75rem;
  max-width: 38rem;
}
.app-page .admin-on-theme__hero-actions{
display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  align-items: center;
  margin-bottom: 1.5rem;
}
.app-page .admin-on-theme__hero-meta{
display: flex;
  flex-wrap: wrap;
  gap: 1.25rem;
  font-size: 0.875rem;
  color: var(--ase-primary-dark);
  font-weight: 500;
}
.app-page .admin-on-theme__hero-meta-item{
display: inline-flex;
  align-items: center;
  gap: 0.4rem;
}
.app-page .admin-on-theme__hero-meta-dot{
width: 0.55rem;
  height: 0.55rem;
  border-radius: 50%;
  display: inline-block;
}
.app-page .admin-on-theme__hero-meta-dot--active{
background: var(--forest);
  box-shadow: 0 0 0 3px rgba(34, 139, 34, 0.15);
}
.app-page .admin-on-theme__hero-meta-dot--inactive{
background: #9ca3af;
  box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.15);
}
.app-page /* Legacy admin-on-theme__btn aliases */
.admin-on-theme__btn{
display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  padding: 0.6rem 1.25rem;
  border-radius: 0.625rem;
  font-weight: 600;
  font-size: 0.875rem;
  text-decoration: none;
  cursor: pointer;
  transition: all 0.2s ease;
  border: none;
  font-family: inherit;
}
.app-page .admin-on-theme__btn--primary{
background: linear-gradient(135deg, var(--forest) 0%, var(--forest-600) 100%);
  color: white;
  box-shadow: 0 2px 8px rgba(34, 139, 34, 0.2);
}
.app-page .admin-on-theme__btn--primary:hover{
transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(34, 139, 34, 0.3);
}
.app-page .admin-on-theme__btn--ghost{
background: white;
  color: var(--ase-primary-dark);
  border: 1px solid var(--line);
}
.app-page .admin-on-theme__btn--ghost:hover{
background: var(--bg-alt);
  border-color: var(--forest);
}
.app-page .admin-on-theme__btn--danger{
background: var(--red-500);
  color: white;
}
.app-page .admin-on-theme__btn--warning{
background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
  color: white;
  box-shadow: 0 2px 8px rgba(217, 119, 6, 0.2);
}
.app-page .admin-on-theme__btn--warning:hover{
background: linear-gradient(135deg, #d97706 0%, #b45309 100%);
}
.app-page .admin-on-theme__action-form > .admin-on-theme__btn{
flex: 1;
}
.app-page .admin-on-theme__btn--sm{
padding: 0.35rem 0.75rem;
  font-size: 0.78rem;
}
.app-page .admin-on-theme__btn--lg{
padding: 0.875rem 1.5rem;
  font-size: 0.95rem;
}
.app-page /* ============================================================
   Stats Cards
   ============================================================ */
.admin-on-theme__stats-grid{
display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1rem;
  margin-bottom: 2rem;
}
.app-page /* ============================================================
   Filters Section
   ============================================================ */
.admin-on-theme__filters{
background: white;
  border: 1px solid var(--line);
  border-radius: 1rem;
  padding: 1.5rem;
  margin-bottom: 2rem;
}
.app-page .admin-on-theme__filters-header{
display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 1rem;
}
.app-page .admin-on-theme__filters-title{
font-size: 1rem;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.app-page .admin-on-theme__filters-form{
display: flex;
  flex-direction: column;
  gap: 1rem;
}
.app-page .admin-on-theme__filters-row{
display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 1rem;
  align-items: end;
}
.app-page .admin-on-theme__filter-group{
display: flex;
  flex-direction: column;
  gap: 0.25rem;
}
.app-page .admin-on-theme__filter-group label{
font-size: 0.875rem;
  font-weight: 500;
  color: var(--ink);
}
.app-page .admin-on-theme__filter-group--actions{
justify-content: flex-end;
}
.app-page .admin-on-theme__filter-group--span-2{
grid-column: span 2;
}
.app-page .admin-on-theme__detail-label{
font-weight: 600;
  color: var(--muted);
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.app-page .admin-on-theme__detail-value{
color: var(--ink);
  font-weight: 500;
}
.app-page .admin-on-theme__detail-value--multiline{
white-space: pre-wrap;
  line-height: 1.6;
}
.app-page .admin-on-theme__detail-value--mono{
font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 0.85rem;
}
.app-page /* Profit / loss colouring inside detail values */
.admin-on-theme__detail-value--profit{
color: var(--ase-primary-dark); font-weight: 700;
}
.app-page .admin-on-theme__detail-value--loss{
color: #dc2626; font-weight: 700;
}
.app-page .admin-on-theme__detail-value--neutral{
color: var(--ink); font-weight: 700;
}
.app-page /* Pill badges used in the show page header (SKU,
.app-page item code) */
.admin-on-theme__pill{
display: inline-block;
  padding: 0.25rem 0.75rem;
  background: var(--bg-alt);
  color: var(--ink);
  border-radius: 9999px;
  font-size: 0.78rem;
  font-weight: 600;
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  border: 1px solid var(--line);
}
.app-page .admin-on-theme__pill-row{
display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-top: 0.75rem;
  align-items: center;
}
.app-page .admin-on-theme__filter-input,
.app-page .admin-on-theme__filter-select{
padding: 0.625rem 0.875rem;
  border: 1px solid var(--line);
  border-radius: 0.625rem;
  font-size: 0.9rem;
  color: var(--ink);
  background: white;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
  width: 100%;
}
.app-page .admin-on-theme__filter-input:focus,
.app-page .admin-on-theme__filter-select:focus{
outline: none;
  border-color: var(--forest);
  box-shadow: 0 0 0 3px rgba(34, 139, 34, 0.1);
}
.app-page .admin-on-theme__grid{
display: grid;
  gap: 1.5rem;
}
.app-page .admin-on-theme__grid--two-col{
grid-template-columns: 1fr 320px;
}
.app-page .admin-on-theme__grid-main{
display: flex;
  flex-direction: column;
  gap: 1.5rem;
  /* ponytail: default grid item min-width is auto, so a single long-titled
  * list-item / table would stretch the column past the viewport and
  * drag the whole page wider. min-width:0 lets the column honour its
  * 1fr share and lets the inner overflow-x:auto wrapper handle long
  * content instead. */
  min-width: 0;
}
.app-page .admin-on-theme__grid-sidebar{
display: flex;
  flex-direction: column;
  gap: 1.5rem;
  min-width: 0;
}
.app-page /* Page-level cap: anything that does overflow (long titles,
.app-page fixed-width
 * tables) becomes scrollable INSIDE its card instead of widening the body. */
.admin-on-theme__card-body{
min-width: 0;
}
.app-page .admin-on-theme__card{
min-width: 0;
}
.app-page /* On mobile the estimate moves to the bottom so users see fields
     * first and the price last — natural reading flow. */
    .admin-on-theme__grid-sidebar{
order: 99;
  margin-top: 1.5rem;
}
.app-page /* ============================================================
   Card Component
   ============================================================ */
.admin-on-theme__card{
background: white;
  border: 1px solid var(--line);
  border-radius: 1rem;
  overflow: hidden;
}
.app-page .admin-on-theme__card-header{
display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1rem 1.25rem;
  background: var(--bg-alt);
  border-bottom: 1px solid var(--line);
}
.app-page .admin-on-theme__card-header h2,
.app-page .admin-on-theme__card-header h3{
margin: 0;
  font-size: 1rem;
  font-weight: 600;
  color: var(--ase-text-primary, #111);
}
.app-page .admin-on-theme__card-header--primary{
background: linear-gradient(135deg, var(--mint) 0%, var(--bg-alt) 100%);
  border-bottom-color: var(--forest);
}
.app-page .admin-on-theme__card-title{
font-size: 0.85rem;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
.app-page .admin-on-theme__card-title i,
.app-page .admin-on-theme__card-title .fas{
color: var(--forest);
}
.app-page .admin-on-theme__card-body{
padding: 1.25rem;
}
.app-page /* ============================================================
   Details Grid (Key-Value Pairs)
   ============================================================ */
.admin-on-theme__details-grid{
display: flex;
  flex-direction: column;
  gap: 1rem;
}
.app-page .admin-on-theme__detail-item{
display: grid;
  grid-template-columns: 160px 1fr;
  gap: 1rem;
  padding-bottom: 1rem;
  border-bottom: 1px solid var(--mint);
}
.app-page .admin-on-theme__detail-item:last-child{
border-bottom: none;
  padding-bottom: 0;
}
.app-page .admin-on-theme__detail-label{
font-size: 0.85rem;
  font-weight: 600;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.025em;
}
.app-page .admin-on-theme__detail-value{
font-size: 0.9rem;
  color: var(--ink);
  line-height: 1.5;
}
.app-page /* ============================================================
   Status Badges (Extended)
   ============================================================ */
.admin-on-theme__status-badge{
display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  padding: 0.25rem 0.625rem;
  border-radius: 9999px;
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: capitalize;
  white-space: nowrap;
}
.app-page .admin-on-theme__status-badge--pending{
background: rgba(245, 158, 11, 0.1);
  color: #b45309;
}
.app-page .admin-on-theme__status-badge--approved,
.app-page .admin-on-theme__status-badge--accepted{
background: rgba(16, 185, 129, 0.1);
  color: #047857;
}
.app-page .admin-on-theme__status-badge--rejected{
background: rgba(239, 68, 68, 0.1);
  color: #b91c1c;
}
.app-page .admin-on-theme__status-badge--submitted{
background: rgba(34, 139, 34, 0.1);
  color: #006400;
}
.app-page .admin-on-theme__status-badge--under-review{
background: rgba(245, 158, 11, 0.1);
  color: #b45309;
}
.app-page /* ============================================================
   Button Variants (Missing)
   ============================================================ */
.admin-on-theme__btn--success,
.app-page .btn--success{
background: linear-gradient(135deg, #10b981 0%, #059669 100%);
  color: white;
  box-shadow: 0 2px 8px rgba(16, 185, 129, 0.2);
}
.app-page .admin-on-theme__btn--success:hover,
.app-page .btn--success:hover{
transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);
}
.app-page .admin-on-theme__btn--block,
.app-page .btn--block{
width: 100%;
  justify-content: flex-start;
}
.app-page /* ============================================================
   Standalone Table (No Section Wrapper)
   ============================================================ */
.admin-on-theme__table{
width: 100%;
  border-collapse: collapse;
}
.app-page .admin-on-theme__table thead{
background: var(--bg-alt);
  border-bottom: 2px solid var(--line);
}
.app-page .admin-on-theme__table thead th{
padding: 0.75rem 1rem;
  text-align: left;
  font-size: 0.72rem;
  font-weight: 700;
  color: var(--ase-primary-dark);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  white-space: nowrap;
}
.app-page .admin-on-theme__table tbody tr{
border-bottom: 1px solid var(--line);
  transition: background 0.15s ease;
}
.app-page .admin-on-theme__table tbody tr:hover{
background: var(--mint);
}
.app-page .admin-on-theme__table tbody tr:last-child{
border-bottom: none;
}
.app-page .admin-on-theme__table tbody td{
padding: 0.75rem 1rem;
  font-size: 0.875rem;
  color: var(--ink);
  vertical-align: middle;
}
.app-page /* ============================================================
   Table Section
   ============================================================ */
.admin-on-theme__table-section{
background: white;
  border: 1px solid var(--line);
  border-radius: 1rem;
  overflow: hidden;
  margin-bottom: 2rem;
}
.app-page .admin-on-theme__table-header{
display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1rem 1.5rem;
  background: var(--bg-alt);
  border-bottom: 1px solid var(--line);
}
.app-page .admin-on-theme__table-title{
font-size: 1rem;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.app-page /* Optional meta slot in the table header (e.g. "45 total"). */
.admin-on-theme__table-meta{
font-size: 0.8rem;
  color: var(--muted);
  font-weight: 500;
}
.app-page /* Note: .admin-on-theme__table-scroll is defined further down (line ~5029)
   with the full set of rules — overflow-x:auto,
.app-page table-layout:fixed,
.app-page per-cell padding/word-wrap. Don't re-declare it here. */

/* ============================================================
   Responsive Inventory Table — Priority+ columns + card layout
   ------------------------------------------------------------
   8-column admin table (Item,
.app-page SKU,
.app-page Category,
.app-page Condition,
.app-page Acquisition,
.app-page Value,
.app-page Status,
.app-page Actions) was unreadable below ~640px:
   columns shrank to ~50px and text wrapped vertically (single
   letters per line). Standard admin-tool pattern (Linear,
.app-page Stripe,
.app-page GitHub Issues): progressive hide by priority,
.app-page then transform
   to label/value cards at the narrowest breakpoint.

   Columns are tagged in the view via `data-priority="1|2|3"`:
     1 = essential (Item,
.app-page Status,
.app-page Actions) — always visible
     2 = secondary (Category,
.app-page Condition,
.app-page Value) — hidden ≤767px
     3 = tertiary (SKU,
.app-page Acquisition) — hidden ≤1023px

   Below 640px the table layout collapses into stacked cards; each
   row is bordered with label/value pairs from `data-label`. Actions
   stay as a button row at the card bottom.

   Reference: https://css-tricks.com/responsive-data-tables/
   ============================================================ */

/* Tablet (≤1023px): hide tertiary columns first */
@media (max-width: 1023px){
.admin-on-theme__table th[data-priority="3"],
  .admin-on-theme__table td[data-priority="3"] { display: none;
}
.app-page /* Header row: visually hidden but kept in the DOM for screen readers */
    .admin-on-theme__table thead{
position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}
.app-page /* Stack everything vertically */
    .admin-on-theme__table,
.app-page .admin-on-theme__table tbody,
.app-page .admin-on-theme__table tr,
.app-page .admin-on-theme__table td{
display: block;
  width: 100% !important;
}
.app-page .admin-on-theme__table tr{
background: white;
  border: 1px solid var(--line);
  border-radius: 0.75rem;
  margin-bottom: 1rem;
  padding: 1rem;
}
.app-page /* First remaining cell (Item) becomes the card title */
    .admin-on-theme__table td[data-priority="1"]:first-child{
font-size: 1.05rem;
  font-weight: 700;
  color: var(--ink);
  padding: 0 0 0.75rem;
  border-bottom: 1px solid var(--line);
  margin-bottom: 0.75rem;
  display: block;
}
.app-page /* Other P1 cells (Status) become label/value rows */
    .admin-on-theme__table td[data-priority="1"]:not(:first-child):not(:last-child){
display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  padding: 0.4rem 0;
  border: none;
}
.app-page .admin-on-theme__table td[data-priority="1"]:not(:first-child):not(:last-child)::before{
content: attr(data-label);
  flex: 0 0 auto;
  font-weight: 600;
  color: var(--muted);
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.app-page .admin-on-theme__table td[data-priority="1"]:not(:first-child):not(:last-child) > *{
margin-left: auto;
}
.app-page /* Actions row at the bottom,
.app-page full-width button strip */
    .admin-on-theme__table td[data-priority="1"]:last-child{
margin-top: 0.75rem;
  padding-top: 0.75rem;
  border-top: 1px solid var(--line);
  display: flex;
  justify-content: flex-end;
  gap: 0.5rem;
}
.app-page /* Actions cell has data-label="Actions" but we don't render it — buttons are self-evident */

    /* Touch targets: bump to 44x44 minimum (iOS HIG),
.app-page 48x48 ideal */
    .admin-on-theme__action-btn{
min-width: 44px;
  min-height: 44px;
  font-size: 1.05rem;
  padding: 0.6rem;
}
}

.admin-on-theme__record-count{
font-size: 0.875rem;
  color: var(--muted);
}
.app-page .admin-on-theme__table-wrapper{
overflow-x: auto;
}
.app-page /* Action Buttons in Table - Solid colored,
.app-page rounded with border,
.app-page no icons */
.admin-on-theme__actions{
display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
}
.app-page .admin-on-theme__action-btn{
display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.4rem 0.9rem;
  border-radius: 0.5rem;
  border: 1px solid transparent;
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
  text-decoration: none;
  font-size: 0.8rem;
  font-weight: 600;
  line-height: 1.2;
}
.app-page /* View - Lighter green outline (subtle/secondary) */
.admin-on-theme__action-btn--view{
background: var(--bg-alt);
  color: var(--ase-primary-dark);
  border-color: var(--line);
}
.app-page .admin-on-theme__action-btn--view:hover{
background: var(--mint);
  border-color: var(--forest);
  color: var(--ase-primary-dark);
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(34, 139, 34, 0.15);
}
.app-page /* Edit - Green (primary brand) */
.admin-on-theme__action-btn--edit{
background: var(--mint);
  color: var(--ase-primary-dark);
  border-color: var(--forest);
}
.app-page .admin-on-theme__action-btn--edit:hover{
background: var(--forest);
  color: white;
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(34, 139, 34, 0.25);
}
.app-page /* Delete/Reject - Red */
.admin-on-theme__action-btn--delete,
.app-page .admin-on-theme__action-btn--reject{
background: var(--ase-danger-container);
  color: var(--red-500);
  border-color: var(--red-500);
}
.app-page .admin-on-theme__action-btn--delete:hover,
.app-page .admin-on-theme__action-btn--reject:hover{
background: var(--red-500);
  color: white;
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(220, 38, 38, 0.25);
}
.app-page /* Approve/Accept/Convert - Solid green */
.admin-on-theme__action-btn--approve,
.app-page .admin-on-theme__action-btn--convert,
.app-page .admin-on-theme__action-btn--accept{
background: var(--forest);
  color: white;
  border-color: var(--forest);
}
.app-page .admin-on-theme__action-btn--approve:hover,
.app-page .admin-on-theme__action-btn--convert:hover,
.app-page .admin-on-theme__action-btn--accept:hover{
background: var(--forest-600);
  color: white;
  border-color: var(--forest-600);
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(34, 139, 34, 0.4);
}
.app-page /* Resend/Assign/Edit neutral - Amber */
.admin-on-theme__action-btn--resend,
.app-page .admin-on-theme__action-btn--assign{
background: rgba(245, 158, 11, 0.15);
  color: #b45309;
  border-color: #f59e0b;
}
.app-page .admin-on-theme__action-btn--resend:hover,
.app-page .admin-on-theme__action-btn--assign:hover{
background: #f59e0b;
  color: white;
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(245, 158, 11, 0.3);
}
.app-page .admin-on-theme__empty-state{
text-align: center;
  padding: 3rem 1.5rem;
  background: var(--bg-alt);
  border: 1px dashed var(--line);
  border-radius: 1rem;
  margin: 1.5rem 0;
}
.app-page .admin-on-theme__empty-state-icon{
font-size: 3rem; margin-bottom: 0.75rem;
}
.app-page .admin-on-theme__empty-state-title{
font-size: 1.25rem; font-weight: 700; margin: 0 0 0.5rem; color: var(--ink);
}
.app-page .admin-on-theme__empty-state-text{
color: var(--muted); margin: 0 0 1.25rem;
}
.app-page /* ============================================================
   Empty State
   ============================================================ */
.admin-on-theme__empty{
text-align: center;
  padding: 3rem 2rem;
}
.app-page .admin-on-theme__empty-icon{
font-size: 3.5rem;
  margin-bottom: 1rem;
  opacity: 0.5;
}
.app-page .admin-on-theme__empty h3{
font-size: 1.25rem;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 0.5rem;
}
.app-page .admin-on-theme__empty p{
color: var(--muted);
  margin: 0;
}
.app-page .admin-on-theme__empty a{
color: var(--forest);
}
.app-page /* ============================================================
   Pagination
   ============================================================ */
.admin-on-theme__pagination{
display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1rem 0;
  flex-wrap: wrap;
  gap: 1rem;
}
.app-page .admin-on-theme__pagination-info{
font-size: 0.875rem;
  color: var(--muted);
}
.app-page .admin-on-theme__pagination-nav{
display: flex;
  gap: 0.5rem;
}
.app-page .admin-on-theme__pagination-link{
display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 36px;
  height: 36px;
  padding: 0 0.75rem;
  border: 1px solid var(--line);
  border-radius: 0.5rem;
  background: white;
  color: var(--ink);
  font-size: 0.875rem;
  font-weight: 500;
  text-decoration: none;
  transition: all 0.15s ease;
}
.app-page .admin-on-theme__pagination-link:hover{
background: var(--forest);
  color: white;
  border-color: var(--forest);
}
.app-page .admin-on-theme__pagination-link--active{
background: var(--forest);
  color: white;
  border-color: var(--forest);
}
.app-page .admin-on-theme__hero-inner{
padding: 2rem;
  border-radius: 1.5rem;
}
.app-page .admin-on-theme__stats-grid{
grid-template-columns: repeat(2, 1fr);
}
.app-page .admin-on-theme__filters-row{
grid-template-columns: 1fr 1fr;
}
.app-page .admin-on-theme__hero-title{
font-size: 1.75rem;
}
.app-page .admin-on-theme__stats-grid{
grid-template-columns: 1fr 1fr;
}
.app-page .admin-on-theme__filters-row{
grid-template-columns: 1fr;
}
.app-page .admin-on-theme__filter-group--actions{
flex-direction: column;
}
.app-page .admin-on-theme__filter-group--actions .admin-on-theme__btn{
width: 100%;
}
.app-page .admin-on-theme__pagination{
flex-direction: column;
  align-items: stretch;
}
.app-page .admin-on-theme__pagination-nav{
justify-content: center;
}
.app-page /* Button group — flex row,
.app-page gap 0.5rem,
.app-page no wrap by default */
.admin-on-theme__btn-group{
display: flex;
  gap: 0.5rem;
  align-items: center;
  flex-wrap: wrap;
}
.app-page /* Render a <form> inline so it sits next to a sibling button (e.g. Delete) */
.admin-on-theme__inline-form{
display: inline;
}
.app-page /* Muted subtitle line rendered below a card title (e.g. article excerpt) */
.admin-on-theme__card-subtitle{
margin: 0.75rem 0 0;
  color: var(--muted);
}
.app-page /* Icon-led meta line below a card body (category / author / date / views) */
.admin-on-theme__card-meta{
display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  font-size: 0.8rem;
  color: var(--muted);
}
.app-page /* Top-bordered footer with right-aligned admin actions (Edit / Delete) */
.admin-on-theme__card-actions{
padding: 0.75rem 1.25rem;
  border-top: 1px solid var(--line);
  display: flex;
  gap: 0.5rem;
  align-items: center;
  justify-content: flex-end;
  flex-wrap: wrap;
}
.app-page /* Top-bordered footer with last-updated text on the left + nav buttons right */
.admin-on-theme__card-footer{
padding: 1rem 1.5rem;
  border-top: 1px solid var(--line);
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.75rem;
}
.app-page /* Details-grid with extra bottom space (used above the article body) */
.admin-on-theme__details-grid--spaced{
margin-bottom: 1.5rem;
}
.app-page /* Multi-select form field (e.g. role assignment — taller than single select) */
.admin-on-theme__form-select--multi{
height: 120px;
}
.app-page [data-theme="dark"] .admin-on-theme__hero-inner{
background: linear-gradient(135deg, #0b1a0e 0%, #142e18 60%, #0d2412 100%);
  border: 1px solid rgba(34, 197, 94, 0.25);
  box-shadow: 0 15px 35px -10px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(74, 222, 128, 0.15);
}
.app-page [data-theme="dark"] .admin-on-theme__hero-glow{
background: radial-gradient(circle, rgba(34, 197, 94, 0.4) 0%, rgba(21, 128, 61, 0.15) 60%, transparent 80%);
  opacity: 0.7;
  filter: blur(55px);
}
.app-page [data-theme="dark"] .admin-on-theme__hero-badge{
background: linear-gradient(135deg, #15803d 0%, #166534 100%);
  color: #ffffff;
  box-shadow: 0 0 12px rgba(34, 197, 94, 0.4);
  border: 1px solid rgba(74, 222, 128, 0.3);
}
.app-page [data-theme="dark"] .stat-card,
.app-page [data-theme="dark"] .admin-on-theme__filters,
.app-page [data-theme="dark"] .admin-on-theme__table-section{
background: #101d12;
  border-color: #1f3823;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
}
.app-page [data-theme="dark"] .admin-on-theme__btn--ghost{
background: rgba(21, 128, 61, 0.15);
  color: #86efac;
  border: 1px solid #203b25;
}
.app-page [data-theme="dark"] .admin-on-theme__btn--ghost:hover{
background: rgba(34, 197, 94, 0.25);
  border-color: #22c55e;
  color: #ffffff;
  box-shadow: 0 0 12px rgba(34, 197, 94, 0.2);
}
.app-page [data-theme="dark"] .admin-on-theme__hero-title,
.app-page [data-theme="dark"] .admin-on-theme__table-title,
.app-page [data-theme="dark"] .stat-card__value{
color: #f0fdf4;
}
.app-page /* Dark theme: Cards */
[data-theme="dark"] .admin-on-theme__card{
background: #101d12;
  border-color: #1f3823;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.4);
}
.app-page [data-theme="dark"] .admin-on-theme__card-header{
background: #0b150c;
  border-bottom-color: #1f3823;
}
.app-page [data-theme="dark"] .admin-on-theme__card-header--primary{
background: rgba(21, 128, 61, 0.25);
  border-bottom: 1px solid rgba(34, 197, 94, 0.3);
}
.app-page [data-theme="dark"] .admin-on-theme__card-title{
color: #f0fdf4;
}
.app-page [data-theme="dark"] .admin-on-theme__detail-item{
border-bottom-color: #182c1b;
}
.app-page [data-theme="dark"] .admin-on-theme__detail-label{
color: #94a3b8;
}
.app-page [data-theme="dark"] .admin-on-theme__detail-value{
color: #f0fdf4;
}
.app-page /* Dark theme: Forms */
[data-theme="dark"] .admin-on-theme__form-textarea,
.app-page [data-theme="dark"] .admin-on-theme__form-input,
.app-page [data-theme="dark"] .admin-on-theme__form-select{
background: #09120a;
  border-color: #203b25;
  color: #f0fdf4;
}
.app-page [data-theme="dark"] .admin-on-theme__form-textarea:focus,
.app-page [data-theme="dark"] .admin-on-theme__form-input:focus,
.app-page [data-theme="dark"] .admin-on-theme__form-select:focus{
border-color: #22c55e;
  box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.25);
  outline: none;
}
.app-page /* Dark theme: Table (standalone) */
[data-theme="dark"] .admin-on-theme__table{
color: #f0fdf4;
}
.app-page [data-theme="dark"] .admin-on-theme__table thead{
background: #0b150c;
  border-bottom-color: #1f3823;
}
.app-page [data-theme="dark"] .admin-on-theme__table thead th{
color: #86efac;
}
.app-page [data-theme="dark"] .admin-on-theme__table tbody tr{
border-bottom-color: #182c1b;
}
.app-page [data-theme="dark"] .admin-on-theme__table tbody tr:hover{
background: rgba(34, 197, 94, 0.1);
}
.app-page [data-theme="dark"] .admin-on-theme__table tbody td{
color: #e2e8f0;
}


/* Validation: red border on input when no-match error shown */
.admin-on-theme__location-pair .admin-on-theme__form-input--invalid{
border-color: #dc2626;
  box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1);
}
.app-page /* ============================================================
   Filter result count line (e.g. "3 of 7 services")
   Lives next to the table title.
   ============================================================ */
.admin-on-theme__record-count--muted{
color: var(--muted);
  font-weight: 500;
}
.app-page /* ============================================================
   List Items (row of icon + body + meta + arrow)
   Used by dashboards and any list rendered inside a card.
   ============================================================ */
.admin-on-theme__list-item{
display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.75rem 0;
  border-bottom: 1px solid var(--ase-border-light, #f3f4f6);
}
.app-page .admin-on-theme__list-item:last-child{
border-bottom: none;
}
.app-page .admin-on-theme__list-item--link{
text-decoration: none;
  color: inherit;
  transition: background 0.15s ease;
  margin: 0 -1.25rem;
  padding-left: 1.25rem;
  padding-right: 1.25rem;
}
.app-page .admin-on-theme__list-item--link:hover{
background: var(--ase-bg-surface, #f9fafb);
}
.app-page /* Stacked variant: header row + sub-content (e.g. pattern header + day chips) */
.admin-on-theme__list-item--stacked{
flex-direction: column;
  align-items: stretch;
  gap: 0.75rem;
}
.app-page .admin-on-theme__list-item-row{
display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  width: 100%;
}
.app-page .admin-on-theme__list-item-actions{
display: flex;
  gap: 0.5rem;
  align-items: center;
  justify-content: flex-end;
}
.app-page .admin-on-theme__list-icon{
flex-shrink: 0;
}
.app-page /* Round avatar (40px circle in primary colour) used as lead icon in a list-item */
.admin-on-theme__list-icon--avatar{
width: 40px;
  height: 40px;
  background: var(--forest);
  color: #fff;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.app-page .admin-on-theme__list-body{
flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 0.125rem;
}
.app-page .admin-on-theme__list-title{
font-weight: 500;
  font-size: 0.875rem;
  color: var(--ase-text, #111827);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.app-page .admin-on-theme__list-subtitle{
font-size: 0.8125rem;
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.app-page .admin-on-theme__list-meta{
flex-shrink: 0;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.125rem;
}
.app-page .admin-on-theme__list-date{
font-size: 0.8125rem;
  color: var(--muted);
  white-space: nowrap;
}
.app-page .admin-on-theme__list-arrow{
color: var(--muted);
  font-size: 0.75rem;
  margin-left: 0.5rem;
}
.app-page /* ============================================================
   Details Grid column variants
   Default grid is 3 columns. These modifiers override the count.
   ============================================================ */
.admin-on-theme__details-grid--two-col{
grid-template-columns: repeat(2, 1fr);
}
.app-page .admin-on-theme__details-grid--three-col{
grid-template-columns: repeat(3, 1fr);
}
.app-page .admin-on-theme__details-grid--four-col{
grid-template-columns: repeat(4, 1fr);
}
.app-page .admin-on-theme__details-grid--six-col{
grid-template-columns: repeat(6, 1fr);
}
.app-page .admin-on-theme__details-grid--seven-col{
grid-template-columns: repeat(7, 1fr); gap: 0.5rem;
}
.app-page /* ============================================================
   Day-chip — small availability indicator (green = available)
   ============================================================ */
.admin-on-theme__day-chip{
text-align: center;
  padding: 0.5rem 0.25rem;
  border-radius: 6px;
  background: var(--ase-bg-surface, #f3f4f6);
  color: var(--muted);
  font-size: 0.75rem;
  font-weight: 600;
}
.app-page .admin-on-theme__day-chip--available{
background: var(--forest);
  color: #fff;
}
.app-page /* ============================================================
   Status Grid + Status Tile (compact centred stat cards)
   The admin dashboard uses this pattern: a 3-column grid of small
   bordered tiles,
.app-page each showing a value + label,
.app-page centred.
   ============================================================ */
.admin-on-theme__status-grid{
display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0.75rem;
  margin-bottom: 1rem;
}


.admin-on-theme__status-tile{
background: var(--ase-bg-surface, #f9fafb);
  border: 1px solid var(--ase-border, #e5e7eb);
  border-radius: var(--ase-radius-md, 0.5rem);
  padding: 0.875rem;
  text-align: center;
}
.app-page .admin-on-theme__status-tile-value{
font-size: 1.5rem;
  font-weight: 700;
  color: var(--ase-text, #111827);
  line-height: 1.2;
}
.app-page .admin-on-theme__status-tile-label{
font-size: 0.75rem;
  color: var(--muted);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  margin-top: 0.25rem;
}
.app-page .admin-on-theme__card-subtitle{
margin: 0 0 0.75rem 0;
  font-size: 0.9rem;
  color: var(--ase-text, #111827);
}
.app-page /* ============================================================
   Alert (flash messages at the top of a page)
   ============================================================ */
.admin-on-theme__alert{
display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.875rem 1rem;
  border-radius: 0.5rem;
  margin-bottom: 1rem;
  border: 1px solid transparent;
}
.app-page .admin-on-theme__alert--success{
background: rgba(16, 185, 129, 0.1);
  color: #047857;
  border-color: rgba(16, 185, 129, 0.3);
}
.app-page .admin-on-theme__alert--error{
background: rgba(239, 68, 68, 0.1);
  color: #b91c1c;
  border-color: rgba(239, 68, 68, 0.3);
}
.app-page .admin-on-theme__alert--info{
background: rgba(33, 150, 243, 0.1);
  color: #0c5460;
  border-color: rgba(33, 150, 243, 0.3);
}
.app-page /* ============================================================
   Security page additions (dashboard/security.php)
   ------------------------------------------------------------
   Alert variant,
.app-page color utilities,
.app-page score ring,
.app-page feature tiles,
.app-page danger zone,
.app-page password strength meter,
.app-page login-history table.
   ============================================================ */

/* Warning variant for flash messages */
.admin-on-theme__alert--warning{
background: rgba(234, 179, 8, 0.1);
  color: #92400e;
  border-color: rgba(234, 179, 8, 0.3);
}
.app-page .admin-on-theme__score-tile .admin-on-theme__card-subtitle{
text-transform: uppercase;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.05em;
  align-self: stretch;
  text-align: left;
  margin: 0 0 0.5rem 0;
}
.app-page .admin-on-theme__card-header--accent{
background: linear-gradient(135deg, var(--mint) 0%, var(--bg-alt) 100%);
  border-bottom-color: var(--forest);
}
.app-page .admin-on-theme__card-header > h3,
.app-page .admin-on-theme__card-header > h2{
flex: 1 1 100%; min-width: 0;
}
.app-page .admin-on-theme__card-header > a{
align-self: flex-start;
}


/* Danger zone */
.admin-on-theme__card-header--danger{
background: linear-gradient(135deg, rgba(239, 68, 68, 0.1) 0%, rgba(220, 38, 38, 0.05) 100%);
}
.app-page .admin-on-theme__alert--warning{
background: rgba(245, 158, 11, 0.1);
  color: #92400e;
  border-color: rgba(245, 158, 11, 0.3);
}
.app-page .admin-on-theme__address-actions .admin-on-theme__action-btn{
width: 100%;
  justify-content: center;
}
.app-page /* ============================================================
   User Settings page additions (notifications.php + related)
   ------------------------------------------------------------
   Used by app/Views/user/settings/*.php converted to the
   admin-on-theme BEM framework. Kept here (instead of inline
   styles in the view) so the look stays consistent.
   ============================================================ */

.admin-on-theme__alert--warning{
background: rgba(245, 158, 11, 0.1);
  color: #92400e;
  border-color: rgba(245, 158, 11, 0.3);
}
.app-page /* Quick Actions strip (notifications.php top bar) */
.admin-on-theme__quick-actions{
display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  flex-wrap: wrap;
}
.app-page .admin-on-theme__quick-actions-text{
flex: 1;
  min-width: 0;
}
.app-page .admin-on-theme__quick-actions-title{
margin: 0 0 0.25rem;
  font-size: 1rem;
  font-weight: 600;
  color: var(--ink);
}
.app-page .admin-on-theme__quick-actions-buttons{
display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
}
.app-page /* Toggle row used inside list-item (notifications.php rows) */
.admin-on-theme__list-item--toggle{
padding: 1rem 1.25rem;
  border: 1px solid var(--ase-border-light, #f3f4f6);
  border-radius: 0.625rem;
  margin-bottom: 0.75rem;
  background: var(--ase-bg-surface, #fff);
}
.app-page .admin-on-theme__list-item--toggle:last-child{
margin-bottom: 0;
}
.app-page .admin-on-theme__list-item--disabled{
opacity: 0.6;
}
.app-page /* ============================================================
   Emergency Contacts page — additions
   ------------------------------------------------------------
   One-off layout/helpers for app/Views/user/settings/emergency-contacts.php.
   Puts the form sidebar on the LEFT (standard __grid--two-col puts
   it on the right). Also adds a contact-detail row,
.app-page info-box callout,
.app-page warning alert variant,
.app-page form-hint text,
.app-page and a text variant for the
   status-tile value (used to show a primary contact name with ellipsis).
   ============================================================ */
.admin-on-theme__grid--two-col-left{
grid-template-columns: 380px 1fr;
}


.admin-on-theme__alert--warning{
background: rgba(245, 158, 11, 0.1);
  color: #92400e;
  border-color: rgba(245, 158, 11, 0.3);
}
.app-page .admin-on-theme__status-tile-value--text{
font-size: 1rem;
  line-height: 1.2;
  font-weight: 600;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.app-page .admin-on-theme__form-help{
display: block;
  font-size: 0.8rem;
  color: var(--muted);
  margin-top: 0.25rem;
}
.app-page .admin-on-theme__form-input--disabled{
background: var(--ase-bg-surface, #f3f4f6);
  cursor: not-allowed;
  opacity: 0.7;
}
.app-page /* Full-width detail item (spans every column in a multi-col details grid) */
.admin-on-theme__detail-item--full{
grid-column: 1 / -1;
}
.app-page /* ============================================================
   Profile page (PLAN-roles-and-profile-consolidation)
   ============================================================ */

/* Utility: small horizontal margin between adjacent inline elements */
.admin-on-theme__ml-1{
margin-left: 0.5rem;
}
.app-page .admin-on-theme__ml-2{
margin-left: 0.75rem;
}
.app-page /* Status badge: missing "draft" variant for application rows */
.admin-on-theme__status-badge--draft{
background: #fef3c7;
  color: #92400e;
}
.app-page /* Empty state — explicit title/text classes (existing __empty only had h3/p) */
.admin-on-theme__empty-title{
margin: 0.5rem 0 0.25rem 0;
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--ase-text-primary, #111);
}
.app-page .admin-on-theme__empty-text{
margin: 0;
  color: var(--muted);
}
.app-page /* Pagination ellipsis (existing only had link + active) */
.admin-on-theme__pagination-ellipsis{
padding: 0 0.5rem;
  color: var(--muted);
}
.app-page /* Status badges */
.admin-on-theme__status-badge{
display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  padding: 0.25rem 0.75rem;
  border-radius: 9999px;
  font-size: 0.8125rem;
  font-weight: 600;
}
.app-page .admin-on-theme__status-badge--verified{
background: rgba(16, 185, 129, 0.1);
  color: #047857;
}
.app-page /* ============================================================
   Buttons
   ============================================================ */

.admin-on-theme__btn{
display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  padding: 0.75rem 1.5rem;
  border-radius: 0.5rem;
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
  border: none;
  transition: background 0.2s ease, opacity 0.2s ease;
}
.app-page .admin-on-theme__btn:hover{
opacity: 0.9;
}
.app-page .admin-on-theme__btn--primary{
background: var(--ase-primary, #228b22);
  color: #fff;
}
.app-page .admin-on-theme__btn--secondary{
background: var(--ase-bg-surface, #f3f4f6);
  color: var(--ase-text-primary, #111);
  border: 1px solid var(--ase-outline-variant, #e5e7eb);
}
.app-page .admin-on-theme__btn--sm{
padding: 0.5rem 1rem;
  font-size: 0.875rem;
}
.app-page .admin-on-theme__btn-link{
background: none;
  border: none;
  color: var(--ase-primary, #228b22);
  font-size: inherit;
  cursor: pointer;
  padding: 0;
  text-decoration: underline;
}
.app-page .admin-on-theme__btn-link:hover{
opacity: 0.8;
}
.app-page /* ============================================================
   Soft Registration Banner (Q5)
   ============================================================ */

.admin-on-theme__banner{
display: flex;
  align-items: flex-start;
  gap: 0.75rem;
  padding: 1rem 1.25rem;
  border-radius: 0.75rem;
  border: 1px solid transparent;
}
.app-page .admin-on-theme__banner--soft{
background: rgba(33, 150, 243, 0.06);
  border-color: rgba(33, 150, 243, 0.2);
}
.app-page .admin-on-theme__banner-icon{
font-size: 1.5rem;
  flex-shrink: 0;
  margin-top: 0.125rem;
}
.app-page .admin-on-theme__banner-content{
flex: 1;
}
.app-page .admin-on-theme__banner-content strong{
display: block;
  font-size: 0.9375rem;
  margin-bottom: 0.25rem;
  color: var(--ase-text, #111827);
}
.app-page .admin-on-theme__banner-content p{
margin: 0 0 0.75rem;
  font-size: 0.875rem;
  color: var(--muted);
  line-height: 1.5;
}
.app-page /* =============================================================================
 * #569 — Filter chip BEM block (low visual weight,
.app-page with active variant)
 * ============================================================================= */
.admin-on-theme__filter-chips{
display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 10px;
  align-items: center;
}
.app-page .admin-on-theme__chip{
padding: 4px 10px;
  border-radius: 999px;
  border: 1px solid var(--color-border, #e5e7eb);
  font-size: 0.85rem;
  text-decoration: none;
  color: var(--color-text, #111827);
  background: transparent;
  transition: background 0.15s ease, border-color 0.15s ease;
}
.app-page .admin-on-theme__chip:hover{
background: var(--color-background-secondary, #f3f4f6);
}
.app-page .admin-on-theme__chip--active{
background: #fef3c7;
  border-color: #d97706;
  color: #92400e;
  font-weight: 600;
}
.app-page .admin-on-theme__chip--active[href*="created_by=me"]{
background: #dbeafe;
  border-color: #1e40af;
  color: #1e40af;
}
.app-page /* =============================================================================
 * Dashboard mobile fixes — keep cards equal-width and let long tables scroll
 * inside their card rather than widening the page.
 * ============================================================================= */

/* Scrollable table host (Open Bugs / anything with many long cells).
 * `table-layout: fixed` is set on the <table> itself so cells share width
 * predictably and wrap text instead of pushing the column wider. */
.admin-on-theme__table-scroll{
overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  max-width: 100%;
}
.app-page .admin-on-theme__table-scroll table{
width: 100%;
  table-layout: fixed;
  border-collapse: collapse;
  font-size: 0.825rem;
}
.app-page .admin-on-theme__table-scroll th,
.app-page .admin-on-theme__table-scroll td{
padding: 0.55rem 0.75rem;
  border-bottom: 1px solid var(--ase-border, #e5e7eb);
  vertical-align: top;
  text-align: left;
  /* ponytail: `break-word` so long bug titles wrap instead of forcing a
  * horizontal scroll on the whole page; the wrapper above still allows
  * per-card scroll if the title is truly huge. */
  word-wrap: break-word;
  overflow-wrap: anywhere;
}
.app-page .admin-on-theme__table-scroll th{
font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--muted);
  background: var(--ase-surface-container-low, #f9fafb);
}
.app-page .admin-on-theme__table-scroll tr:last-child td{
border-bottom: none;
}
.app-page /* Status pill colours used by the bugs table */
.admin-on-theme__pill{
display: inline-block;
  padding: 0.1rem 0.55rem;
  border-radius: 9999px;
  font-size: 0.7rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  white-space: nowrap;
}
.app-page .admin-on-theme__pill--new{
background: #fef3c7; color: #92400e;
}
.app-page .admin-on-theme__pill--progress{
background: #cffafe; color: #155e75;
}
.app-page .admin-on-theme__pill--waiting{
background: #f3e8ff; color: #6b21a8;
}
.app-page .admin-on-theme__pill--blocked{
background: #fee2e2; color: #b91c1c;
}
.app-page .admin-on-theme__pill--done{
background: #dcfce7; color: #15803d;
}
.app-page .admin-on-theme__pill--muted{
background: #f3f4f6; color: #4b5563;
}
.app-page /* Development Progress — single 100% inline bar split by status.
 * Each segment is a <div class="admin-on-theme__progress-segment--<key>">;
 * widths are inline %s; the row is a flex container so segments line up
 * and overflow-x:hidden on the row clips the rounded ends cleanly. */
.admin-on-theme__progress-bar-split{
display: flex;
  height: 8px;
  width: 100%;
  background: rgba(0, 0, 0, 0.06);
  border-radius: 4px;
  overflow: hidden;
  min-width: 0;
}
.app-page .admin-on-theme__progress-segment{
height: 100%;
  flex: 0 0 auto;          /* width comes from inline style */
  transition: width 0.3s ease;
}
.app-page .admin-on-theme__progress-segment--new{
background: #f59e0b;
}
.app-page /* In-progress = cyan,
.app-page Waiting = saturated purple. Previously both sat in
 * the same mid-blue/purple range and read as the same colour on small
 * bars / low-quality screens. Cyan vs purple is unambiguous on white and
 * dark backgrounds. */
.admin-on-theme__progress-segment--progress{
background: #06b6d4;
}
.app-page .admin-on-theme__progress-segment--waiting{
background: #a855f7;
}
.app-page .admin-on-theme__progress-segment--blocked{
background: #ef4444;
}
.app-page .admin-on-theme__progress-segment--done{
background: #10b981;
}
.app-page .admin-on-theme__progress-legend{
display: flex;
  flex-wrap: wrap;
  gap: 0.6rem 1rem;
  font-size: 0.75rem;
  color: var(--muted);
  margin-top: 0.6rem;
}
.app-page .admin-on-theme__progress-legend span{
display: inline-flex;
  align-items: center;
  gap: 0.3rem;
}
.app-page /* =============================================================================
 * Open Bugs — stacked rows (replaces an earlier table that didn't fit on mobile)
 *   Left border = priority colour,
.app-page title wraps freely,
.app-page meta line shows
 *   status pill + date + priority label. Whole row is clickable,
.app-page the
 *   trailing icon button just opens the Leantime ticket in a new tab.
 * ============================================================================= */
.admin-on-theme__bug-list{
display: flex;
  flex-direction: column;
  gap: 0.5rem;
  max-height: 340px;
  overflow-y: auto;
  padding-right: 0.25rem; /* room for the scrollbar */
}
.app-page .admin-on-theme__bug-row{
display: flex;
  align-items: flex-start;
  gap: 0.6rem;
  padding: 0.55rem 0.7rem 0.55rem 0.6rem;
  background: var(--ase-bg-surface, rgba(0, 0, 0, 0.02));
  border-radius: 6px;
  border-left: 3px solid #6b7280;
  text-decoration: none;
  color: inherit;
  transition: background 0.15s ease;
}
.app-page .admin-on-theme__bug-row:hover{
background: rgba(0, 0, 0, 0.05);
}
.app-page .admin-on-theme__bug-row--prio-high{
border-left-color: #ef4444;
}
.app-page .admin-on-theme__bug-row--prio-medium{
border-left-color: #f59e0b;
}
.app-page .admin-on-theme__bug-row--prio-low{
border-left-color: #6b7280;
}
.app-page .admin-on-theme__bug-body{
flex: 1;
  min-width: 0; /* let the title wrap, not push the row */
}
.app-page .admin-on-theme__bug-title{
font-size: 0.825rem;
  font-weight: 600;
  color: var(--ase-text, #111827);
  text-decoration: none;
  /* ponytail: titles vary wildly in length (single words vs full sentences) —
  * `break-word` + `overflow-wrap:anywhere` ensures even unbroken strings
  * wrap inside the card instead of forcing a page-wide horizontal scroll. */
  word-wrap: break-word;
  overflow-wrap: anywhere;
  line-height: 1.35;
  display: block;
}
.app-page .admin-on-theme__bug-title:hover{
text-decoration: underline;
}
.app-page .admin-on-theme__bug-meta{
display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.4rem 0.6rem;
  margin-top: 0.3rem;
  font-size: 0.7rem;
  color: var(--muted);
}
.app-page .admin-on-theme__bug-meta-sep{
color: var(--ase-outline, #c0c9bb);
}


/* Warning variant of card header (admin overrides block) */
.admin-on-theme__card-header--warning{
background: #fef3c7;
  color: #92400e;
  border-bottom-color: #f59e0b;
}
.app-page /* Banner info variant (signed-in notice) */
.admin-on-theme__banner--info{
background: var(--ase-primary-container, #dcfce7);
  color: var(--forest-900);
  border: 1px solid var(--ase-primary, #228B22);
  padding: 0.6rem 0.9rem;
  border-radius: 8px;
  margin-bottom: 1rem;
}
.app-page /* ============================================================
   Roles & Permissions admin page (admin/user-roles.php) — Layout A
   - Card-header row layout (title on left,
.app-page actions on right)
   - Role tile grid (existing pattern,
.app-page reused)
   - Effective-permissions list: one row per permission,
.app-page status
     icon,
.app-page name + key + source,
.app-page inline grant + expiry controls
   ============================================================ */
.admin-on-theme__card-header--row{
display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}
.app-page .admin-on-theme__card-header--row .admin-on-theme__card-title{
margin: 0;
}
.app-page .admin-on-theme__card-header--row .admin-on-theme__card-sub{
margin: .25rem 0 0;
}
.app-page .admin-on-theme__card-footer{
padding: 1rem 1.25rem;
  border-top: 1px solid var(--line);
  background: var(--ase-surface-low, #fafafa);
  border-bottom-left-radius: var(--ase-radius-lg, 12px);
  border-bottom-right-radius: var(--ase-radius-lg, 12px);
}
.app-page .admin-on-theme__card-footer--row{
display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}

.app-page .admin-on-theme__card-footer--row{
display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}

/* Decorative hero glow stays inside its hero (was bleeding past the viewport) */
.app-page .admin-on-theme__hero{overflow:hidden}

/* ---------- Dashboard primitives (logged-in shell) ----------
   Used by dashboard/customer.php, dashboard/index.php, and admin pages.
   Shared with the approved admin-dashboard-mockup.html design. */
.dash-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:28px}
.dash-grid>div{display:flex;flex-direction:column;gap:28px;min-width:0}
@media(max-width:1080px){.dash-grid{grid-template-columns:1fr}}
/* Page wrapper: same flex-column rhythm as .content-pad (kills ad-hoc margins).
   `.app-page` is the generic logged-in-shell wrapper (any role can use it);
   the `.customer-*` ones stay for now for pages that lean on per-domain chrome. */
.customer-dashboard,.customer-quotes-page,.customer-stock-page,.app-page{display:flex;flex-direction:column;gap:28px}
/* dashboard/index.php wraps all role sections in .container (plain block) —
   without this the section rhythm breaks at every .container child boundary
   (e.g. .customer-dashboard → Security Overview card rendered with no gap). */
.content-pad .container{display:flex;flex-direction:column;gap:28px}
/* In-card row that acts like a link (used in KB category lists, item listings) */
.card-link-row{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:var(--radius-sm);border:1px solid var(--line);background:#fff;color:var(--text);text-decoration:none;transition:border-color .15s,box-shadow .15s}
.card-link-row:hover{border-color:var(--forest);box-shadow:0 4px 12px rgba(34,139,34,.06)}
.card-link-row.is-active{border-color:var(--forest);background:var(--mint-2)}
.card-link-row .icon{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-sm);background:var(--mint-2);color:var(--forest)}
.card-link-row > span:not(.icon):not(.badge){flex:1;min-width:0}
.card-link-row b{display:block;font-family:var(--font-display);font-size:15px;color:var(--forest)}
.card-link-row small{display:block;color:var(--muted);font-size:13px;margin-top:2px}
.card-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}
.card-head h3{font-size:17px;font-family:var(--font-display)}
.card-head .card-link{margin-top:0}
.card-head .badge .material-symbols-rounded{font-size:16px}
.attention-item,.application-item{display:flex;align-items:center;gap:14px;padding:13px 0;border-bottom:1px solid var(--line)}
.attention-item:last-child,.application-item:last-child{border-bottom:0}
.attention-item>.material-symbols-rounded,.application-item>.material-symbols-rounded{font-size:22px;color:var(--forest);flex-shrink:0}
.attention-item b,.application-item b{display:block;font-size:14px;font-family:var(--font-display);color:var(--ink)}
.attention-item small,.application-item small{color:var(--muted);font-size:12.5px}
.attention-item .badge,.application-item .badge{margin-left:auto;flex-shrink:0}
.card-link{font-size:13.5px;font-weight:600;color:var(--forest);display:inline-flex;align-items:center;gap:4px;margin-top:16px}
.card-link .material-symbols-rounded{font-size:17px;transition:transform .2s}
.card-link:hover .material-symbols-rounded{transform:translateX(3px)}
/* In-card pagination row (used by components/action-required.php + stock listing) */
.card-pagination{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
.card-pagination .btn{flex-shrink:0}
.card-pagination-info{font-size:12px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
@media(max-width:480px){
  .card-pagination-info{flex:0 1 auto;white-space:normal;text-align:center}
  .card-pagination{flex-wrap:wrap;justify-content:space-between;row-gap:6px;column-gap:8px}
}
.card-pagination .btn[disabled]{opacity:.4;cursor:not-allowed;pointer-events:none}
/* Table flush inside a card (card chrome is enough).
   Tables in narrow dashboard cards must shrink to fit their container —
   full-page tables keep min-width:760px for readability. */
.card-flush{border:0;border-radius:0}
.card-flush .table{min-width:0}
.card-flush .table th,
.card-flush .table td{padding:10px 12px}
.card-flush .table th{font-size:11px}
/* Muted footnotes inside cards (empty states, helper text) */
.card-note{font-size:13px;color:var(--muted);margin:0}
.card .card-note{margin-top:14px}
/* Empty-state card (nothing matches the current filter) */
.card.is-empty{text-align:center;max-width:520px;margin-inline:auto}
.card.is-empty .icon{margin-inline:auto}
/* Sub-label under a .ref in a table cell ("Quote" / "Job") */
.ref-sub{display:block;font-size:12px;color:var(--muted)}
/* Monospace identifier chip (container codes, invoice ids) */
.code-chip{background:var(--mint);padding:2px 8px;border-radius:6px;font-family:ui-monospace,Consolas,monospace;font-size:13px;color:var(--forest-800)}
/* Vertical button stack inside cards (Quick Actions) */
.btn-stack{display:flex;flex-direction:column;gap:8px}

/* ---------- Detail grid — label/value tiles inside cards ----------
   Markup:
   <div class="detail-grid">
     <div class="detail"><span class="detail-label">Label</span><b class="detail-value">Value</b></div>
     <div class="detail detail--wide">…full-width row (notes, addresses)…</div>
   </div> */
.detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.detail-grid>.detail{border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 14px;min-width:0}
.detail-grid>.detail--wide{grid-column:1/-1}
.detail-grid .detail-label{display:block;font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:2px}
.detail-grid .detail-value{display:block;font-size:14px;font-weight:500;color:var(--ink);overflow-wrap:anywhere}
.detail-grid .detail-value small{color:var(--muted);font-weight:400}
/* Content that follows a detail grid inside a card (notes link, locked-account alert). */
.card .detail-grid + .card-note,
.card .detail-grid + .alert{margin-top:12px}

/* ---------- Help card — collapsible <details> explainer ----------
   <details class="card help-card"><summary><span class="material-symbols-rounded">info</span> Title</summary>
   <div class="help-card-body">…</div></details> */
.help-card{padding:0}
.help-card summary{display:flex;align-items:center;gap:8px;padding:14px 18px;font-weight:600;font-family:var(--font-display);cursor:pointer;list-style:none}
.help-card summary::-webkit-details-marker{display:none}
.help-card summary .material-symbols-rounded{color:var(--forest);font-size:20px}
.help-card-body{padding:0 18px 16px;font-size:14px;color:var(--muted)}
.help-card-body ol,.help-card-body ul{margin:8px 0;padding-left:20px}
.help-card-body code{background:var(--mint-2);border-radius:6px;padding:1px 6px;font-size:13px;color:var(--forest-800)}

/* Utility */
.text-center{text-align:center}
.text-right{text-align:right}
.btn-block{width:100%;justify-content:center}
.quote-total-amount{font-family:var(--font-display);font-size:26px;font-weight:800;color:var(--forest);margin:0}

/* ---------- Quote pricing breakdown table (section-pricing partial) ---------- */
.pricing-table .pricing-input{width:70px;padding:5px 8px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:13.5px;color:var(--ink);background:#fff}
.pricing-table .pricing-input:focus{outline:0;border-color:var(--forest);box-shadow:0 0 0 3px rgba(34,139,34,.12)}
.pricing-table .pricing-desc-input{width:100%}
.pricing-row-field-header td{background:var(--mint-2);font-weight:700;padding:10px 16px;border-top:2px solid var(--line);border-bottom:1px solid var(--line)}
.pricing-row-parent td{font-weight:600;padding:8px 16px 8px 20px;background:rgba(0,0,0,.02);border-top:1px solid var(--line)}
.pricing-cell-indent{padding-left:24px}
.pricing-row-pct{background:var(--mint-2);font-style:italic}
.pricing-row-subtotal td{border-top:2px solid var(--line)}
.pricing-total-cell{font-size:16px}
.pricing-row-negative .pricing-amount-text{color:#b91c1c}
.pricing-actions{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;margin-top:16px}
.pricing-input-group{display:inline-flex;align-items:center;gap:4px}
.pricing-input-group .remove-new-manual-item{width:28px;height:28px;border:1px solid var(--line);background:#fff;color:var(--muted);border-radius:8px;cursor:pointer;display:grid;place-items:center}
.pricing-input-group .remove-new-manual-item:hover{color:var(--forest);border-color:var(--forest);background:var(--mint)}
.pricing-input-group .remove-new-manual-item .material-symbols-rounded{font-size:16px}
/* Forms following content inside a card need separation. */
.card > form{margin-top:12px}

/* ---------- Quote manifest (section-manifest partial) ---------- */
.manifest-addresses{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}
@media(max-width:640px){.manifest-addresses{grid-template-columns:1fr}}
.manifest-address{border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 14px;font-size:14px}
.manifest-address .detail-label{display:flex;align-items:center;gap:6px;margin-bottom:4px}
.manifest-address .material-symbols-rounded{font-size:16px;color:var(--forest)}
.manifest-group-row th{background:var(--mint-2);font-family:var(--font-display);font-size:12px;text-transform:none;letter-spacing:0;color:var(--ink);padding:10px 16px}
.bb-expired{color:#b91c1c;font-weight:700}
.bb-soon{color:#b45309;font-weight:600}

/* ---------- Quote status timeline (section-status-timeline partial) ---------- */
.status-timeline{list-style:none;margin:0;padding:0;position:relative}
.status-timeline__entry{position:relative;padding:12px 0 12px 28px}
.status-timeline__entry::before{content:'';position:absolute;left:0;top:18px;width:12px;height:12px;border-radius:50%;background:var(--forest);border:3px solid #fff;box-shadow:0 0 0 1px var(--line)}
.status-timeline__entry[data-status="cancelled"]::before{background:#dc2626}
.status-timeline__entry[data-status="declined"]::before{background:#f59e0b}
.status-timeline__entry[data-status="paid"]::before{background:#10b981}
.status-timeline__entry[data-status="converted_to_job"]::before{background:#059669}
.status-timeline__title{font-weight:600}
.status-timeline__meta{font-size:13px;color:var(--muted);margin-top:2px;display:flex;gap:12px;flex-wrap:wrap}
.status-timeline__comment{margin-top:8px;padding:8px 10px;background:var(--mint-2);border-radius:8px;font-size:13.5px;color:var(--ink)}

/* =============================================================================
 * Admin quote view page (/admin/quotes/{id}, quote/admin/view.php).
 * Markup is standard brand kit (+ shared quote partials re-skinned under
 * .app-page); page-scoped additions only.
 * ============================================================================= */
.admin-quote-view-page .quote-revision{border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 14px}
.admin-quote-view-page .quote-revision-head{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.admin-quote-view-page .quote-revision-head b:first-child{color:var(--ink)}
.admin-quote-view-page .quote-revision-total{color:var(--forest);font-family:var(--font-display)}
.admin-quote-view-page .quote-revision-table{margin-top:8px}
.admin-quote-view-page .quote-send-history-title{margin:16px 0 8px}
.admin-quote-view-page #reassignRegisteredPanel{position:relative}
.admin-quote-view-page #reassignUserSearchResults{position:absolute;z-index:100;left:0;right:0;max-height:220px;overflow-y:auto;background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);box-shadow:0 4px 12px rgba(0,0,0,.1);display:none}
.admin-quote-view-page #reassignSelectedUserCard{display:none;margin-top:8px;padding:8px 12px;background:var(--mint);border:1px solid var(--forest);border-radius:var(--radius-sm);font-size:14px}

/* =============================================================================
 * Admin quote edit page (/admin/quotes/{id}/edit, quote/admin/edit.php).
 * Markup is standard brand kit (+ shared quote partials re-skinned under
 * .app-page); page-scoped additions only.
 * ============================================================================= */
.admin-quote-edit-page .quote-edit-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}
.admin-quote-edit-page .quote-edit-grid .field{min-width:0}
.admin-quote-edit-page .quote-edit-grid .field input{min-width:0;width:100%}
@media(max-width:767px){.admin-quote-edit-page .quote-edit-grid{grid-template-columns:1fr}}
.admin-quote-edit-page .quote-edit-grid .form-group{margin:0}
.admin-quote-edit-page .admin-on-theme__pct-row{display:grid;grid-template-columns:1fr 140px 100px auto;gap:12px;align-items:center;margin-bottom:12px}
.admin-quote-edit-page .admin-on-theme__pct-row .form-group{margin:0}
.admin-quote-edit-page .admin-on-theme__pct-row input[type="text"],
.admin-quote-edit-page .admin-on-theme__pct-row input[type="number"]{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:10px;font:inherit;color:var(--ink);background:#fff}
.admin-quote-edit-page .admin-on-theme__pct-row input:focus{outline:0;border-color:var(--forest);box-shadow:0 0 0 3px rgba(34,139,34,.12)}
@media(max-width:767px){.admin-quote-edit-page .admin-on-theme__pct-row{grid-template-columns:1fr;gap:8px}}
.admin-quote-edit-page .pct-input-group{display:flex;align-items:stretch}
.admin-quote-edit-page .pct-input-group input{border-radius:10px 0 0 10px}
.admin-quote-edit-page .pct-input-group-text{display:inline-flex;align-items:center;padding:0 10px;border:1px solid var(--line);border-left:none;border-radius:0 10px 10px 0;font-size:13px;color:var(--muted);background:var(--mint-2)}
.admin-quote-edit-page .pct-row-preview{text-align:right}
.admin-quote-edit-page .pct-row-remove{text-align:right}
.admin-quote-edit-page .quote-edit-actions{display:flex;gap:12px;align-items:center}
.admin-quote-edit-page .quote-total-preview{margin-left:auto;color:var(--muted);font-size:13px}
.admin-quote-edit-page .quote-help-list{margin:0;padding-left:20px;font-size:14px;color:var(--muted)}
.admin-quote-edit-page .quote-help-list li{margin-bottom:8px}
/* Food surplus item (customer dashboard, FDD-11) */
.food-item{display:flex;align-items:center;gap:14px;padding:14px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--mint-2)}
.food-item+.food-item{margin-top:12px}
.food-item>.material-symbols-rounded{font-size:24px;color:var(--forest);flex-shrink:0}
.food-item b{display:block;font-size:14px}
.food-item small{color:var(--muted);font-size:12.5px;display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.food-item .material-symbols-rounded.tiny{font-size:15px;color:var(--muted)}
.food-item .btn{margin-left:auto;flex-shrink:0}
@media(max-width:640px){.food-item{flex-wrap:wrap}.food-item .btn{margin-left:0;width:100%;justify-content:center}}
/* Mini status tiles (Pending/Open/InProgress/Completed) */
.mini-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.mini-tile{background:var(--mint-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:14px 10px;text-align:center}
.mini-tile b{display:block;font-family:var(--font-display);font-weight:800;font-size:22px;margin-bottom:4px;color:var(--ink)}
.mini-tile .badge{margin:0}
/* Milestone progress */
.milestone{display:flex;align-items:center;gap:14px;padding:10px 0;border-bottom:1px solid var(--line)}
.milestone:last-child{border-bottom:0}
.milestone-name{flex:1;font-size:14px;color:var(--ink)}
.milestone-pct{font-family:var(--font-display);font-weight:700;color:var(--forest-700);font-size:13.5px;min-width:46px;text-align:right}
.progress-bar{flex:1.2;height:8px;background:var(--mint);border-radius:var(--radius-pill);overflow:hidden}
.progress-bar>span{display:block;height:100%;width:var(--pct,0%);background:var(--forest);border-radius:var(--radius-pill);transition:width .4s ease}
/* Section action row (used between sections) */
.section-action{display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-bottom:14px}
@media(max-width:640px){.mini-tiles{grid-template-columns:repeat(2,1fr)}}

/* ---------- Knowledge Base — customer portal ----------
   Polished variant of the +0 customer KB landing. Same primitives as the
   customer-stock page so the dashboards feel like one product. Scoped under
   `.kb-*` classes so they cannot leak onto other pages. */
.kb-search{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.kb-search .field{flex:1;min-width:240px;max-width:560px;background:#fff}
.kb-tip{display:flex;gap:10px;align-items:flex-start;color:var(--muted);font-size:13px;margin:-6px 0 4px;padding:10px 14px;background:var(--mint-2);border:1px solid var(--line);border-radius:var(--radius-sm)}
.kb-tip .material-symbols-rounded{color:var(--forest);font-size:17px;flex-shrink:0;margin-top:1px}
/* Category tiles (3-up desktop, 2-up tablet, 1-up mobile — same rhythm as
   the public mosaic; active state matches the existing +0 aria-current look) */
.kb-cat-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-3)}
@media(max-width:980px){.kb-cat-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){.kb-cat-grid{grid-template-columns:1fr}}
.kb-cat-tile{position:relative;display:flex;flex-direction:column;gap:8px;padding:22px 22px 24px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);text-decoration:none;color:inherit;transition:.25s}
.kb-cat-tile:hover{transform:translateY(-5px);box-shadow:var(--shadow-md);border-color:#bcd9c2}
.kb-cat-tile .icon{width:48px;height:48px;border-radius:12px;background:var(--mint);color:var(--forest);display:grid;place-items:center;flex-shrink:0}
.kb-cat-tile .icon .material-symbols-rounded{font-size:26px}
.kb-cat-tile h3{font-family:var(--font-display);font-size:16px;color:var(--ink);margin:0;letter-spacing:-.01em}
.kb-cat-tile p{color:var(--muted);font-size:13px;margin:0;line-height:1.45}
.kb-cat-tile .kb-cat-count{position:absolute;top:18px;right:20px;background:var(--mint);color:var(--forest-800);border-radius:var(--radius-pill);padding:3px 10px;font-size:12px;font-weight:700;font-family:var(--font-display)}
.kb-cat-tile.is-active{border-color:var(--forest);box-shadow:0 0 0 3px rgba(34,139,34,.12);background:var(--mint-2)}
.kb-cat-tile.is-active .kb-cat-count{background:var(--forest);color:#fff}
/* Article list rows: richer than `.card-link-row` (meta + type badge + arrow).
   Same markup is rendered server-side for the AJAX fragment. */
.kb-list{display:flex;flex-direction:column;gap:10px}
.kb-list-item{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;color:var(--text);text-decoration:none;transition:border-color .15s,box-shadow .15s,transform .15s}
.kb-list-item:hover{border-color:var(--forest);box-shadow:0 4px 12px rgba(34,139,34,.06);transform:translateX(2px)}
.kb-list-icon{width:40px;height:40px;border-radius:var(--radius-sm);background:var(--mint-2);color:var(--forest);display:grid;place-items:center;flex-shrink:0}
.kb-list-icon .material-symbols-rounded{font-size:22px}
.kb-list-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.kb-list-body b{display:block;font-family:var(--font-display);font-size:15.5px;color:var(--ink);letter-spacing:-.01em}
.kb-list-body small{display:block;color:var(--muted);font-size:13.5px;line-height:1.45}
.kb-list-meta{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;margin-top:4px;font-size:12.5px;color:var(--muted)}
.kb-list-meta .badge{font-size:12px;padding:3px 9px}
.kb-list-meta .material-symbols-rounded{font-size:15px;color:var(--forest)}
.kb-list-arrow{color:var(--muted);font-size:24px;transition:transform .2s,color .2s;flex-shrink:0}
.kb-list-item:hover .kb-list-arrow{color:var(--forest);transform:translateX(3px)}
@media(max-width:640px){.kb-list-item{align-items:flex-start}.kb-list-arrow{display:none}.kb-list-meta{font-size:12px}}
/* Loading state shown inside #kb-list-region while the AJAX swap is in flight */
.kb-loading{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:13.5px;padding:18px 0}
.kb-loading .material-symbols-rounded{color:var(--forest);animation:kb-spin 1s linear infinite}
@keyframes kb-spin{to{transform:rotate(360deg)}}

/* ---------- Knowledge Base — article detail ----------
   Shared two-column layout + sticky TOC + actions card. Used by both the
   public article view (show.php) and the customer-portal variant
   (show-app.php). The marketing hero on show.php stacks on top of this. */
.kb-article-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;grid-template-areas:"body side" "after side";gap:48px;align-items:start;padding:56px 0 72px}
.kb-article-layout .kb-article-body{grid-area:body}
.kb-article-layout .kb-article-after{grid-area:after}
.kb-article-layout .kb-article-side{grid-area:side}
.kb-article-side{display:flex;flex-direction:column;gap:20px;position:sticky;top:100px}
.kb-article-layout .toc h3{font-size:15px;margin-bottom:10px}
.kb-article-layout .toc ul{display:flex;flex-direction:column;gap:2px}
.kb-article-layout .toc a{display:block;padding:7px 10px;border-radius:8px;font-size:14px;color:#33443a}
.kb-article-layout .toc a:hover,.kb-article-layout .toc a.current{color:var(--forest);background:var(--mint)}
.kb-article-layout .toc a.sub{padding-left:22px;font-size:13.5px}
.kb-article-after{text-align:center;padding:26px 30px}
.kb-article-after .row-actions{justify-content:center;margin-bottom:18px}
.kb-article-after p{font-size:14.5px;margin-bottom:14px}
.kb-article-after .feedback-btns{display:flex;gap:10px;justify-content:center}
.kb-article-after .thanks{margin:0;color:var(--forest);font-weight:600;font-size:14px}
.kb-article-updated{font-size:13px;color:var(--muted);margin-top:24px}
@media(max-width:980px){
  .kb-article-layout{grid-template-columns:1fr;grid-template-areas:"side" "body" "after";gap:36px;padding:44px 0 56px}
  .kb-article-side{position:static}
}
/* =============================================================================
 * Profile page (/profile tabbed settings, app/Views/profile/).
 * Page components only — markup uses the standard brand kit (.card, .field,
 * .label, .btn, .alert, .badge, .grid-2). Scoped under .profile-page.
 * ============================================================================= */

/* Tab content visibility — one tab at a time (JS in _script.php toggles .is-active).
   Active sections reuse the shell's flex column rhythm (28px gap, like .app-page). */
[data-tab-content]{display:none}
[data-tab-content].is-active{display:flex;flex-direction:column;gap:28px}

/* Tab pills */
.profile-tabs{display:flex;flex-wrap:wrap;gap:.5rem;padding:.5rem 0 1.5rem;border-bottom:1px solid var(--line)}
.profile-tabs__tab{padding:.5rem 1.1rem;border-radius:var(--radius-pill);color:var(--muted);font:inherit;font-weight:600;font-size:.95rem;border:1px solid transparent;background:transparent;cursor:pointer;transition:.15s}
.profile-tabs__tab:hover{background:var(--mint);color:var(--forest-800)}
.profile-tabs__tab--active{background:var(--forest);color:#fff;border-color:var(--forest)}

/* Card head icon alignment + sub-section kickers inside cards */
.profile-page .card-head h3,.dashboard-page .card-head h3{display:flex;align-items:center;gap:8px}
.profile-page .card-head h3 .material-symbols-rounded,.dashboard-page .card-head h3 .material-symbols-rounded{font-size:20px;color:var(--forest)}
.profile-page .card-head h3 .material-symbols-rounded{font-size:20px;color:var(--forest)}
.profile-page h4.kicker{margin:1.75rem 0 .25rem}
.profile-page .card-head + h4.kicker,
.profile-page form > h4.kicker:first-child{margin-top:0}

/* Forms: labelled fields (.label + .field), 2-up rows via .grid-2 */
.profile-page .profile-form{display:grid;gap:20px}
.profile-page .grid-2{gap:20px}
.profile-page .req{color:#991b1b;margin-left:2px}
.profile-page .field input:disabled{color:var(--muted)}
.profile-page .field:has(textarea),.profile-page .field:has(select[multiple]){align-items:flex-start}
.profile-page .field textarea{resize:vertical;min-height:0;padding:0}
.profile-page .field select[multiple]{background:none;padding-right:0;height:auto}

/* Missing-field indicators (PP1/PP2): amber ring + pulse on the field wrapper */
.profile-page .field:has([data-missing="1"]){border-color:var(--amber);box-shadow:0 0 0 3px rgba(232,161,58,.15)}
.profile-page .field.profile-field--pulse{animation:profile-missing-pulse 1.4s ease-in-out 2}
.profile-page .profile-btn--pulse{box-shadow:0 0 0 3px rgba(232,161,58,.3);animation:profile-missing-pulse 1.4s ease-in-out 2}
@keyframes profile-missing-pulse{0%,100%{box-shadow:0 0 0 3px rgba(232,161,58,.15)}50%{box-shadow:0 0 0 6px rgba(232,161,58,.35)}}
.profile-missing-list{margin:.5rem 0 0;padding-left:1.25rem}
.profile-missing-list code{background:var(--mint);padding:.1rem .4rem;border-radius:4px;font-size:.85em}

/* Form footer (right-aligned save row) — shared by settings/profile forms */
.form-footer{display:flex;gap:12px;justify-content:flex-end;flex-wrap:wrap;margin-top:4px;padding-top:16px;border-top:1px solid var(--line)}
.form-footer--flush{border-top:none;padding-top:0;margin-top:.5rem}

/* Incomplete-banner dismiss button pushed to the right edge of the alert */
.profile-banner-dismiss{margin-left:auto}
.profile-banner-dismiss .btn{padding:6px;min-width:32px;min-height:32px}

/* Password strength meter + requirements checklist (security tab) */
.profile-strength{display:grid;gap:8px}
.profile-strength-head{display:flex;justify-content:space-between;margin:0}
.profile-strength-head .label{margin:0}
.profile-strength-text{font-size:.85rem;font-weight:600;color:var(--muted);transition:color .3s}
.profile-strength-track{height:4px;background:var(--line);border-radius:2px;overflow:hidden}
.profile-strength-bar{height:100%;width:var(--strength-width,0%);background:#b42318;transition:width .3s,background-color .3s}
.profile-strength-bar[data-level="weak"]{background:#b42318}
.profile-strength-bar[data-level="fair"]{background:var(--amber)}
.profile-strength-bar[data-level="good"]{background:#8a8f3c}
.profile-strength-bar[data-level="strong"]{background:var(--forest)}
.profile-reqs{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:.25rem .5rem;font-size:.8rem;color:var(--muted)}
.profile-req{transition:color .3s}
.profile-req--met{color:var(--forest);font-weight:600}
.profile-req--met::before{content:'✓ ';font-weight:700}

/* Per-role completion bars */
.profile-completion{padding:10px 0;border-bottom:1px solid var(--line)}
.profile-completion:last-child{border-bottom:none;padding-bottom:0}
.profile-completion__label{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}
.profile-completion__label>span:first-child{font-weight:600;color:var(--ink)}
.profile-completion__pct{font-family:var(--font-display);font-weight:700;color:var(--forest-700);font-size:13.5px;font-variant-numeric:tabular-nums}
.profile-completion__track{height:8px;background:var(--mint);border-radius:var(--radius-pill);overflow:hidden}
.profile-completion__bar{width:0;height:100%;background:var(--forest);border-radius:var(--radius-pill);transition:width .4s ease}
.profile-completion__bar--complete{background:var(--forest)}
.profile-completion__bar--good{background:var(--leaf)}
.profile-completion__bar--attention{background:var(--amber)}

/* Page-head identity row (name + role badges) and completion card */
.profile-identity{display:flex;align-items:center;flex-wrap:wrap;gap:.4rem;margin-top:8px}
.profile-identity .material-symbols-rounded{font-size:1rem;color:var(--forest)}
.profile-identity__sep{color:var(--muted)}
.kb-completion-card .card-head h3{display:flex;align-items:center;gap:8px;margin:0}
.kb-completion-card .card-head .material-symbols-rounded{font-size:20px;color:var(--forest)}

/* Empty state inside a card (no addresses yet) */
.profile-empty{display:flex;align-items:center;justify-content:center;gap:8px;padding:24px 0;color:var(--muted)}
.profile-empty .material-symbols-rounded{font-size:20px;color:var(--forest)}

/* Add Address modal + postcode type-ahead */
.profile-modal[hidden]{display:none}
.profile-modal{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center}
.profile-modal__backdrop{position:absolute;inset:0;background:rgba(10,31,18,.55)}
.profile-modal__panel{position:relative;background:#fff;border-radius:var(--radius-sm);width:min(640px,92vw);max-height:92vh;overflow-y:auto;box-shadow:0 25px 60px rgba(10,31,18,.35);display:flex;flex-direction:column}
.profile-modal__header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--line);background:linear-gradient(135deg,var(--forest-800) 0%,var(--forest-700) 100%);color:#fff;border-radius:var(--radius-sm) var(--radius-sm) 0 0}
.profile-modal__title{margin:0;font-size:1.1rem;font-weight:700;display:flex;align-items:center;gap:8px}
.profile-modal__title .material-symbols-rounded{font-size:20px}
.profile-modal__close{background:rgba(255,255,255,.15);border:none;color:#fff;width:32px;height:32px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center}
.profile-modal__close:hover{background:rgba(255,255,255,.3)}
.profile-modal__close .material-symbols-rounded{font-size:18px}
.profile-modal__body{padding:1.25rem}
.profile-relative{position:relative}
.profile-suggestions{position:absolute;z-index:10;top:100%;left:0;right:0;margin:.25rem 0 0;padding:0;list-style:none;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 4px 12px rgba(10,31,18,.08);max-height:280px;overflow-y:auto}
.profile-suggestions[hidden]{display:none}
.profile-suggestions li{padding:.6rem .75rem;cursor:pointer;border-bottom:1px solid var(--line);font-size:.95rem}
.profile-suggestions li:last-child{border-bottom:none}
.profile-suggestions li:hover{background:var(--mint)}
.profile-suggestions li.active{background:var(--mint);color:var(--forest-800)}
.profile-suggestions li small{color:var(--muted);display:block;margin-top:2px}
.profile-suggestions .empty{color:var(--muted);font-style:italic;cursor:default}
.profile-suggestions .empty:hover{background:transparent}

/* Address rows use .card-link-row; inline forms inside .row-actions must not
   break the flex layout */
.

/* Address rows use .card-link-row; inline forms inside .row-actions must not
   break the flex layout, and the actions column must not stretch */
.row-actions form{display:contents}
.card-link-row .row-actions{flex:0 0 auto;margin-left:auto}

@media(max-width:700px){
  .profile-page .grid-2{grid-template-columns:1fr}
  .profile-reqs{grid-template-columns:1fr}
}

/* =============================================================================
 * Settings — notification preferences page (/settings/notifications).
 * Markup uses the standard brand kit; these are page-scoped additions only.
 * ============================================================================= */

/* Preference toggle rows: full-width .field-check with title + description */
.settings-notifications-page .settings-form{display:flex;flex-direction:column;gap:28px}
.settings-notifications-page .field-check{align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--line)}
.settings-notifications-page .field-check:last-child{border-bottom:none;padding-bottom:0}
.settings-notifications-page .field-check input{margin-top:2px}
.settings-notifications-page .field-check label{flex:1;min-width:0}
.settings-notifications-page .field-check label b{display:block;font-family:var(--font-display);font-size:14px;color:var(--ink);font-weight:700}
.settings-notifications-page .field-check label small{display:block;color:var(--muted);font-size:13px;margin-top:3px}
.settings-notifications-page .field-check.is-disabled{opacity:.55}
.settings-notifications-page .field-check .badge{margin-left:8px}

/* Help section headings inside the card */
.settings-notifications-page .card h4.kicker{margin:1.5rem 0 .5rem}
.settings-notifications-page .card > h4.kicker:first-of-type{margin-top:0}
.settings-notifications-page .btn-group{display:inline-flex;gap:12px}
.settings-notifications-page ul{list-style:disc;padding-left:22px;display:grid;gap:6px;font-size:14.5px;color:#33443a}

/* =============================================================================
 * Contractor dashboard (/dashboard, dashboard/index.php contractor widgets).
 * Markup is standard brand kit; page-scoped additions only.
 * ============================================================================= */

/* Job offer / active job widgets */
.dashboard-page .widget-title{font-family:var(--font-display);font-size:15.5px;margin:0 0 10px}
.dashboard-page .job-cards-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:24px}
.dashboard-page .job-cards-row .card > p{margin:0 0 10px;color:#33443a;font-size:14.5px}

/* Dashboard widget list rows stack with the shell rhythm */
.dashboard-page .card .card-link-row + .card-link-row{margin-top:10px}

/* Empty states inside cards */
.empty-note{display:flex;flex-direction:column;align-items:center;gap:6px;padding:20px 0;color:var(--muted);text-align:center}
.empty-note .material-symbols-rounded{font-size:22px;color:var(--forest)}
.dashboard-page .empty-note + .btn{align-self:flex-start}

/* =============================================================================
 * Contractor jobs page (/contractor/jobs, contractor/jobs/index.php).
 * Markup is standard brand kit; page-scoped additions only.
 * ============================================================================= */

/* Row-actions: POST forms (e.g. Accept/Reject/Withdraw) sit inline next to
   <a> buttons. The form is transparent to the flex layout; the inner <button>
   inherits .row-actions button sizing. */
.row-actions form{display:inline}

/* KPI tiles become click-to-filter on this page (data-status-filter set in JS). */
.contractor-jobs-page .kpi[data-status-filter]{cursor:pointer;transition:transform .15s,box-shadow .15s,border-color .15s}
.contractor-jobs-page .kpi[data-status-filter]:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:#bcd9c2}

/* Empty-state CTA spacing inside the assignments card. */
.contractor-jobs-page .card.is-empty .btn{margin-top:14px}

/* =============================================================================
 * Contractor job view (/contractor/jobs/view/{id}, contractor/jobs/view.php).
 * Markup is standard brand kit; page-scoped additions only.
 * ============================================================================= */

/* Tab nav (Overview / Route / History). Reuses the .profile-tabs pattern
   visually; selector names kept distinct so this can generalise later. */
.contractor-job-view-page .tabs{display:flex;flex-wrap:wrap;gap:.5rem;padding:.25rem 0 1.5rem;border-bottom:1px solid var(--line)}
.contractor-job-view-page .tab-btn{padding:.55rem 1.15rem;border-radius:var(--radius-pill);color:var(--muted);font:inherit;font-weight:600;font-size:.95rem;border:1px solid transparent;background:transparent;cursor:pointer;transition:.15s;display:inline-flex;align-items:center;gap:6px}
.contractor-job-view-page .tab-btn:hover{background:var(--mint);color:var(--forest-800)}
.contractor-job-view-page .tab-btn.is-active{background:var(--forest);color:#fff;border-color:var(--forest)}
.contractor-job-view-page .tab-btn .material-symbols-rounded{font-size:18px}
.contractor-job-view-page .tab-panel{display:none}
.contractor-job-view-page .tab-panel.is-active{display:flex;flex-direction:column;gap:28px;animation:fadeIn .2s ease}
/* Sidebar cards also stack with the same rhythm as the main content. */
.contractor-job-view-page aside[aria-label="Job actions"]{display:flex;flex-direction:column;gap:28px}
@keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}

/* Two-column layout: main content + actions sidebar. Collapses on mobile. */
.contractor-job-view-page .job-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:24px}
@media(max-width:980px){.contractor-job-view-page .job-layout{grid-template-columns:1fr}}

/* Two-column responsive details list (key/value pairs). */
.contractor-job-view-page .detail-list{display:grid;grid-template-columns:160px 1fr;gap:10px 18px;align-items:start}
.contractor-job-view-page .detail-list dt{color:var(--muted);font-weight:600;font-size:13.5px}
.contractor-job-view-page .detail-list dd{margin:0;color:var(--ink);font-size:14.5px;overflow-wrap:anywhere}
@media(max-width:639px){.contractor-job-view-page .detail-list{grid-template-columns:1fr;gap:2px 10px}.contractor-job-view-page .detail-list dt{padding-top:8px}.contractor-job-view-page .detail-list dt:first-child{padding-top:0}}

/* Map container (Leaflet). */
.contractor-job-view-page #job-map{height:460px;border-radius:0 0 var(--radius) var(--radius);overflow:hidden}

/* Turn-by-turn direction rows. */
.contractor-job-view-page .direction-step{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);align-items:flex-start}
.contractor-job-view-page .direction-step:last-child{border-bottom:0}
.contractor-job-view-page .direction-step .step-icon{width:32px;height:32px;border-radius:50%;background:var(--mint);color:var(--forest);display:grid;place-items:center;flex-shrink:0}
.contractor-job-view-page .direction-step .step-icon .material-symbols-rounded{font-size:18px}
.contractor-job-view-page .direction-step .step-body{flex:1;min-width:0}
.contractor-job-view-page .direction-step .step-text{font-size:14.5px;color:var(--ink)}
.contractor-job-view-page .direction-step .step-meta{font-size:12.5px;color:var(--muted);margin-top:2px}

/* Timeline (status history). */
.contractor-job-view-page .timeline{display:flex;flex-direction:column;gap:14px;margin:0;padding:0;list-style:none}
.contractor-job-view-page .timeline-item{display:grid;grid-template-columns:12px 1fr;gap:14px;align-items:flex-start}
.contractor-job-view-page .timeline-dot{width:10px;height:10px;border-radius:50%;background:var(--forest);margin-top:6px;box-shadow:0 0 0 4px var(--mint)}
.contractor-job-view-page .timeline-body{font-size:14px}
.contractor-job-view-page .timeline-status{font-weight:600;color:var(--ink)}
.contractor-job-view-page .timeline-meta{color:var(--muted);font-size:12.5px;margin-top:2px}
.contractor-job-view-page .timeline-notes{margin-top:6px;padding:8px 12px;background:var(--mint-2);border-radius:8px;color:#33443a;font-size:13.5px}

/* Photo gallery (lightbox-able). */
.contractor-job-view-page .photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}
.contractor-job-view-page .photo-item{position:relative;aspect-ratio:4/3;overflow:hidden;border-radius:12px;border:1px solid var(--line);cursor:pointer;transition:transform .15s,box-shadow .15s}
.contractor-job-view-page .photo-item:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.contractor-job-view-page .photo-item img{width:100%;height:100%;object-fit:cover;display:block}
.contractor-job-view-page .photo-caption{position:absolute;left:0;right:0;bottom:0;padding:6px 10px;background:linear-gradient(to top,rgba(0,0,0,.65),transparent);font-size:11.5px;color:#fff}

/* Action stack in the sidebar — one primary button per view (Accept/Start/Complete). */
.contractor-job-view-page .action-stack{display:flex;flex-direction:column;gap:10px}
.contractor-job-view-page .action-stack .btn{justify-content:center}

/* Notes list inside a card. */
.contractor-job-view-page .note-item{padding:12px 0;border-bottom:1px solid var(--line)}
.contractor-job-view-page .note-item:last-child{border-bottom:0}
.contractor-job-view-page .note-meta{display:flex;justify-content:space-between;align-items:center;font-size:12.5px;color:var(--muted);margin-bottom:4px}
.contractor-job-view-page .note-content{font-size:14px;color:var(--ink);white-space:pre-wrap}

/* Status/priority meta row beneath the page head. */
.contractor-job-view-page .job-meta-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px}

/* =============================================================================
 * Modal pattern (overlay + form-style). Reusable across pages.
 *
 *   .modal         — full-screen overlay (centered via grid)
 *   .modal[hidden] — closed state
 *   .modal-close   — floating close button (lightbox variant)
 *   .modal-figure  — lightbox content (image + caption)
 *   .modal-card    — form-style modal card
 *   .modal-head    — card header (title + close)
 *   .modal-close-btn — close button on the card
 *
 * Markup toggles [hidden] on .modal to open/close; JS sets a [hidden] toggle.
 * ============================================================================= */
.modal{position:fixed;inset:0;background:rgba(10,31,18,.85);z-index:300;display:grid;place-items:center;align-items:center;justify-content:center;padding:24px}
.modal[hidden]{display:none}
.modal-close{position:absolute;top:16px;right:16px;width:44px;height:44px;background:rgba(255,255,255,.1);border:0;border-radius:50%;color:#fff;cursor:pointer;display:grid;place-items:center}
.modal-figure{margin:0;max-width:min(1100px,100%);text-align:center}
.modal-figure img{max-width:100%;max-height:80vh;object-fit:contain;border-radius:12px;display:block}
.modal-figure figcaption{margin-top:12px;color:#cfe3d5;font-size:14px;font-weight:600}
.modal-card{background:#fff;border-radius:18px;width:min(560px,92%);max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-md)}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:18px 22px;border-bottom:1px solid var(--line)}
.modal-head h3{margin:0;font-size:17px;font-family:var(--font-display);display:flex;align-items:center;gap:8px}
.modal-head h3 .material-symbols-rounded{color:var(--forest);font-size:22px}
.modal-close-btn{width:36px;height:36px;border-radius:50%;border:1px solid var(--line);background:#fff;color:var(--muted);cursor:pointer;display:grid;place-items:center}
.modal-close-btn:hover{color:var(--forest);border-color:var(--forest);background:var(--mint)}
.modal-card form{padding:18px 22px;display:flex;flex-direction:column;gap:14px}
/* ---------- Employee application review (admin/employees/review) ----------
   Scoped under the page bodyClass (.admin-page .employees-page). Decision
   forms stack with a divider; office-fields form rows keep card rhythm. */
.employees-page .decision-form + .decision-form{margin-top:20px;padding-top:20px;border-top:1px solid var(--line)}
.employees-page .decision-form .field{margin-bottom:14px}
.employees-page .card form .grid-2,
.employees-page .card form .form-group{margin-bottom:20px}
.employees-page .card form .grid-2:last-of-type{margin-bottom:0}

.modal-card .form-footer{border-top:1px solid var(--line);padding-top:14px;margin-top:6px}

/* Non-form modal content (confirm dialogs): body, footer and label/value rows. */
.modal-body{padding:18px 22px;display:flex;flex-direction:column;gap:14px}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:0 22px 18px}
.modal-details{border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden;font-size:14px}
.modal-details>div{display:flex;justify-content:space-between;gap:16px;padding:10px 14px}
.modal-details>div+div{border-top:1px solid var(--line)}
.modal-details span{color:var(--muted)}

/* =============================================================================
 * Form helpers (reusable across pages).
 * ============================================================================= */

/* Required-field marker — used inside any .label. */
.req{color:var(--amber);font-weight:700}

/* Bare textarea outside .field — bordered, focus rings match the brand input. */
textarea{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:12px;font-family:var(--font-body);color:var(--ink);background:#fff;resize:vertical}
textarea:focus{outline:0;border-color:var(--forest);box-shadow:0 0 0 3px rgba(34,139,34,.12)}

/* Standalone time input — used in time-picker rows (e.g. availability pattern
   / exception forms, schedule pickers, ad-hoc time inputs). */
.field-time{width:130px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;font:inherit;color:var(--ink);background:#fff}
.field-time:focus{outline:0;border-color:var(--forest);box-shadow:0 0 0 3px rgba(34,139,34,.12)}

/* Time-picker row stack: .time-slots > .time-slot-row*[N] (time + 'to' + time
   + remove). Collapse to full-width stacked rows on narrow screens. */
.time-slots{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.time-slot-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.slot-remove{padding:6px 10px}
@media(max-width:480px){
  .field-time{width:100%}
  .time-slot-row{flex-direction:column;align-items:stretch}
}

/* =============================================================================
 * Toggleable status-chip row.
 *
 *   .day-chips              — flex row of pills
 *   .day-chip.is-on         — highlighted (working/active)
 *   .day-chip.is-off        — dimmed (off/inactive)
 *   .day-chip small         — secondary text inside the pill
 *
 * Originally used for the 7 weekday chips in contractor availability;
 * reusable for any "set of toggleable yes/no states" display.
 * ============================================================================= */
.day-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.day-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--radius-pill);border:1px solid var(--line);font-size:13px;font-weight:600;background:#fff;color:var(--muted);line-height:1}
.day-chip small{font-weight:500;color:inherit;opacity:.85;font-size:11.5px}
.day-chip.is-on{background:var(--mint);border-color:#c4e2ca;color:var(--forest-800)}
.day-chip.is-off{opacity:.55}

/* =============================================================================
 * Checkbox-with-content row (collapsible section toggle).
 *
 *   .day-list               — vertical stack of .day-row items
 *   .day-row                — single bordered row
 *   .day-row__toggle        — grid: [checkbox] [name] [hint]
 *   .day-row__toggle input  — checkbox itself
 *   .day-row__hint          — right-aligned status hint ("3 slots" / "Off")
 *   .day-row__slots         — content area revealed when toggle is on
 *
 * Originally used for the per-day schedule editor in the availability pattern
 * form; reusable for any "enable section, then configure its contents" pattern.
 * ============================================================================= */
.day-list{display:flex;flex-direction:column;gap:14px}
.day-row{padding:14px 16px;border:1px solid var(--line);border-radius:var(--radius);background:#fff}
.day-row__toggle{display:grid;grid-template-columns:18px 1fr auto;align-items:center;gap:10px;cursor:pointer;font-family:var(--font-display);font-weight:700;color:var(--ink);font-size:15px}
.day-row__toggle input[type="checkbox"]{width:18px;height:18px;accent-color:var(--forest);cursor:pointer}
.day-row__hint{font-weight:500;font-size:12.5px}
.day-row__slots{margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}

/* =============================================================================
 * Contractor availability index (/contractor/availability).
 * Markup is standard brand kit; page-scoped additions only.
 *
 * Page-specific (here): the two-column layout and the data-model row layouts
 * (.pattern-list / .pattern-row*, .exception-list / .exception-row*).
 * Reusable bits (.day-chips / .day-chip) live in the general catalog above.
 * ============================================================================= */

/* Two-column responsive layout (patterns + exceptions sidebar). */
.contractor-availability-page .contractor-availability-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:28px;align-items:start}
@media(max-width:1023px){.contractor-availability-page .contractor-availability-layout{grid-template-columns:1fr}}

/* Pattern rows: stacked card with weekly day chips + actions. */
.contractor-availability-page .pattern-list{display:flex;flex-direction:column;gap:14px}
.contractor-availability-page .pattern-row{padding:16px;border:1px solid var(--line);border-radius:var(--radius);background:#fff;transition:border-color .15s,box-shadow .15s}
.contractor-availability-page .pattern-row:hover{border-color:#bcd9c2;box-shadow:var(--shadow-sm)}
.contractor-availability-page .pattern-row__head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;margin-bottom:12px}
.contractor-availability-page .pattern-row__head b.pattern-name{font-family:var(--font-display);font-size:15.5px;color:var(--ink)}
.contractor-availability-page .pattern-range{display:inline-flex;align-items:center;gap:6px;margin-top:4px;font-size:13px;color:var(--muted)}
.contractor-availability-page .pattern-range .material-symbols-rounded{font-size:16px;color:var(--forest)}
.contractor-availability-page .pattern-row__actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.contractor-availability-page .pattern-notes{margin:10px 0 0;font-size:13.5px}

/* "Edit / Delete" buttons collapse to icon-only on narrow screens. */
@media(max-width:480px){
  .contractor-availability-page .pattern-row__actions .btn-label{display:none}
}

/* Exception rows: one date + reason + slots + delete action. */
.contractor-availability-page .exception-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.contractor-availability-page .exception-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:12px;border:1px solid var(--line);border-radius:var(--radius);background:#fff}
.contractor-availability-page .exception-row__main{min-width:0;flex:1}
.contractor-availability-page .exception-date{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-display);font-size:14.5px;color:var(--ink)}
.contractor-availability-page .exception-date .material-symbols-rounded{font-size:18px;color:var(--forest)}
.contractor-availability-page .exception-reason{margin-top:4px;font-size:13px}
.contractor-availability-page .exception-slots{display:inline-flex;align-items:center;gap:6px;margin-top:6px;font-size:13px;color:var(--muted)}
.contractor-availability-page .exception-slots .material-symbols-rounded{font-size:16px}
.contractor-availability-page .exception-row__actions{display:flex;gap:8px;align-items:center;flex-shrink:0}
@media(max-width:480px){
  .contractor-availability-page .exception-row{flex-direction:column;align-items:stretch}
  .contractor-availability-page .exception-row__actions{justify-content:flex-end}
}

/* =============================================================================
 * Admin dashboard (/dashboard for admin role).
 *
 * Multi-role page — contractor section already uses brand catalog; admin section
 * adds these page-scoped bits only.
 *
 *   .period-tabs        — 4-up filter (this/last week + month), updates KPI values
 *   .attention-list     — stacked rows with right-aligned badge (uses .card-link-row)
 *   .stat-tile          — single value + label tile (used inside .card for KPI breakdowns)
 *   .kpi-link           — tile variant for clickable KPIs (whole card is a link)
 *   .job-stat           — small numeric tile inside job/quote overview cards
 *   .quick-action-tile  — square clickable tile for admin shortcuts
 *   .seg-progress       — multi-segment status bar (Leantime milestones)
 *   .seg-progress .seg  — single segment (color by --seg-tone)
 *   .bug-row            — single bug entry in the dev admin sidebar
 *
 * All tokens, no hex. All under .dashboard-page (multi-role page bodyClass).
 * ============================================================================= */
.dashboard-page .period-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px}
.dashboard-page .period-tabs .btn{padding:8px 14px;font-size:13px}
.dashboard-page .period-tabs .btn.is-active{background:var(--forest);color:#fff;border-color:var(--forest)}
.dashboard-page .attention-list{display:flex;flex-direction:column;gap:0}
.dashboard-page .attention-list>.card-link-row{border-left:0;border-right:0;border-radius:0;padding-top:16px;padding-bottom:16px}
.dashboard-page .attention-list>.card-link-row:first-child{border-top:0}
.dashboard-page .attention-list>.card-link-row:last-child{border-bottom:0}
.dashboard-page .stat-tile{background:var(--mint-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:14px 10px;text-align:center}
.dashboard-page .stat-tile b{display:block;font-family:var(--font-display);font-weight:800;font-size:20px;color:var(--ink);line-height:1.1}
.dashboard-page .stat-tile small{color:var(--muted);font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;margin-top:4px;display:block}
.dashboard-page .job-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}
.dashboard-page .job-stat{background:var(--mint-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:14px;text-align:center}
.dashboard-page .job-stat b{display:block;font-family:var(--font-display);font-weight:800;font-size:22px;color:var(--ink)}
.dashboard-page .job-stat small{color:var(--muted);font-size:12px;display:block;margin-top:4px}
.dashboard-page .quick-action-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:10px}
.dashboard-page .quick-action-tile{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;color:var(--ink);text-decoration:none;transition:border-color .15s,background .15s}
.dashboard-page .quick-action-tile:hover{border-color:var(--forest);background:var(--mint-2);color:var(--forest-800)}
.dashboard-page .quick-action-tile .material-symbols-rounded{font-size:24px;color:var(--forest)}
.dashboard-page .quick-action-tile span{font-size:13px;font-weight:600;text-align:center}
.dashboard-page .seg-progress{display:flex;height:8px;border-radius:var(--radius-pill);overflow:hidden;background:var(--mint);gap:1px}
.dashboard-page .seg-progress .seg{height:100%;transition:width .3s ease}
.dashboard-page .seg-progress .seg[data-tone="new"]{background:#3b82f6}
.dashboard-page .seg-progress .seg[data-tone="progress"]{background:var(--amber)}
.dashboard-page .seg-progress .seg[data-tone="waiting"]{background:#94a3b8}
.dashboard-page .seg-progress .seg[data-tone="blocked"]{background:#ef4444}
.dashboard-page .seg-progress .seg[data-tone="done"]{background:var(--forest)}
.dashboard-page .seg-legend{display:flex;flex-wrap:wrap;gap:10px 16px;margin-top:12px;font-size:12px;color:var(--muted)}
.dashboard-page .seg-legend span{display:inline-flex;align-items:center;gap:6px}
.dashboard-page .seg-legend .dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.dashboard-page .seg-legend .dot[data-tone="new"]{background:#3b82f6}
.dashboard-page .seg-legend .dot[data-tone="progress"]{background:var(--amber)}
.dashboard-page .seg-legend .dot[data-tone="waiting"]{background:#94a3b8}
.dashboard-page .seg-legend .dot[data-tone="blocked"]{background:#ef4444}
.dashboard-page .seg-legend .dot[data-tone="done"]{background:var(--forest)}
.dashboard-page .ms-list{display:flex;flex-direction:column;gap:14px}
.dashboard-page .ms-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:13px;margin-bottom:6px}
.dashboard-page .ms-row b{color:var(--ink);overflow-wrap:anywhere;min-width:0;font-size:13px}
.dashboard-page .ms-row .ms-pct{font-weight:700;font-size:12.5px;color:var(--muted);white-space:nowrap}
.dashboard-page .card-stat-footer{margin-top:14px;text-align:center;color:var(--muted);font-size:13px}
.dashboard-page .card-stat-footer strong{color:var(--ink)}
.dashboard-page .kicker.is-section{margin-top:18px}
.dashboard-page .bb-row{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:var(--radius-sm);border:1px solid var(--line);background:#fff;color:var(--text);text-decoration:none;transition:border-color .15s,box-shadow .15s}
.dashboard-page .bb-row.is-bare{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0;background:transparent}
.dashboard-page .bb-row.is-bare:hover{background:none;box-shadow:none}
.dashboard-page .bb-row .icon{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-sm);background:var(--mint-2);color:var(--forest);flex-shrink:0}
.dashboard-page .bb-row .icon .material-symbols-rounded{font-size:20px}
.dashboard-page .bb-row .bb-days{font-weight:600;white-space:nowrap}
.dashboard-page .bb-row .bb-days.is-red{color:#ef4444}
.dashboard-page .bb-row .bb-days.is-amber{color:var(--amber)}
.dashboard-page .tone-red{color:#ef4444}
.dashboard-page .tone-amber{color:var(--amber)}
.dashboard-page .tone-success{color:#16a34a}
.dashboard-page .icon-danger .material-symbols-rounded{color:#ef4444}
.dashboard-page .icon-warn .material-symbols-rounded{color:var(--amber)}
.dashboard-page .icon-success .material-symbols-rounded{color:#16a34a}
.dashboard-page .job-stat .b.tone-red{color:#dc2626}
.dashboard-page .job-stat .b.tone-amber{color:var(--amber)}
.dashboard-page .job-stat .b.tone-success{color:#16a34a}
.dashboard-page .job-stat .b.tone-muted{color:var(--muted)}
.card .card-cta{margin-top:12px}
.card .table-wrap.is-spaced{margin-top:16px}
.dashboard-page .bug-row{display:flex;align-items:flex-start;gap:10px;padding:10px 0;border-bottom:1px solid var(--line);text-decoration:none;color:inherit;transition:background .15s;min-width:0}
.dashboard-page .bug-row:last-child{border-bottom:0}
.dashboard-page .bug-row:hover{background:var(--mint-2)}
.dashboard-page .bug-row b{display:block;font-size:14px;color:var(--ink);margin-bottom:4px;line-height:1.35;overflow-wrap:break-word;min-width:0;max-width:100%}
.dashboard-page .bug-row small{color:var(--muted);font-size:12px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
.dashboard-page .bug-row small>*{min-width:0}
.dashboard-page .bug-row .pill-prio{display:inline-flex;padding:1px 8px;border-radius:var(--radius-pill);font-size:11px;font-weight:600;flex-shrink:1;min-width:0}
.dashboard-page .bug-row .pill-prio[data-prio="1"]{background:#fee2e2;color:#991b1b}
.dashboard-page .bug-row .pill-prio[data-prio="2"]{background:#fef3c7;color:#92400e}
.dashboard-page .bug-row .pill-prio[data-prio="3"]{background:#dcfce7;color:#166534}
.dashboard-page .kpi-link{display:block;background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:22px;text-align:center;color:inherit;text-decoration:none;transition:border-color .15s,box-shadow .15s,transform .15s}
.dashboard-page .kpi-link:hover{border-color:var(--forest);box-shadow:0 4px 14px rgba(34,139,34,.12);transform:translateY(-2px);color:inherit}
.dashboard-page .kpi-link b{display:block;font-family:var(--font-display);font-weight:800;font-size:24px;color:var(--forest);line-height:1.1;margin-bottom:4px}
.dashboard-page .kpi-link small{color:var(--muted);font-size:12.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:600}
.dashboard-page .welcome-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px;max-width:980px;margin:0 auto}
.dashboard-page .welcome-card{display:flex;flex-direction:column;gap:16px;padding:32px 28px;border:1px solid var(--line);border-radius:var(--radius);background:#fff;transition:border-color .2s,box-shadow .2s,transform .2s}
.dashboard-page .welcome-card:hover{border-color:var(--forest);box-shadow:var(--shadow-md);transform:translateY(-3px)}
.dashboard-page .welcome-card .welcome-icon{width:64px;height:64px;border-radius:16px;background:var(--mint);color:var(--forest);display:grid;place-items:center}
.dashboard-page .welcome-card .welcome-icon .material-symbols-rounded{font-size:34px}
.dashboard-page .welcome-card h2{font-family:var(--font-display);font-size:22px;color:var(--ink)}
.dashboard-page .welcome-card p{color:var(--muted);font-size:14.5px;line-height:1.55;margin:0}
.dashboard-page .welcome-card ul{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}
.dashboard-page .welcome-card ul li{display:flex;gap:8px;align-items:flex-start;font-size:14px;color:var(--ink)}
.dashboard-page .welcome-card ul li .material-symbols-rounded{color:var(--forest);font-size:18px;margin-top:2px}
.dashboard-page .welcome-hero{background:linear-gradient(135deg,var(--forest-900) 0%,var(--forest-700) 100%);color:#fff;padding:56px 0;text-align:center;margin-bottom:-48px;position:relative;z-index:1}
.dashboard-page .welcome-hero h1{font-family:var(--font-display);font-size:clamp(28px,4vw,40px);font-weight:800;margin-bottom:8px}
.dashboard-page .welcome-hero p{font-size:16px;opacity:.92;max-width:560px;margin:0 auto}
@media(max-width:640px){
  .dashboard-page .welcome-hero{padding:40px 0;margin-bottom:-32px}
  .dashboard-page .welcome-card{padding:24px 20px}
  .dashboard-page .quick-action-grid{grid-template-columns:repeat(2,1fr)}
}

/* =============================================================================
 * Admin-form chrome (employee invites, contractor applications, etc.).
 *
 *   .form-section     vertical rhythm wrapper around a group of fields
 *   .required-mark   red asterisk after a required label
 *   .form-hint       helper text below a field
 *   .form-error      per-field validation error (icon + message)
 *   .stat-grid       4-up tile grid (page-level KPI counts, top of admin pages)
 *   .stat-tile       single tile inside .stat-grid (number + label)
 *   .stat-tile .tone-red/.tone-amber/.tone-success/.tone-muted
 *
 * All under .admin-page so other surfaces aren't affected. Tokens only.
 * ============================================================================= */
.admin-page .form-section{display:flex;flex-direction:column;gap:18px}
.admin-page .required-mark{color:#dc2626;margin-left:2px;font-weight:700}
.admin-page .form-hint{display:block;color:var(--muted);font-size:13px;margin-top:6px;line-height:1.4}
.admin-page .form-error{display:flex;gap:6px;align-items:flex-start;color:#991b1b;font-size:13px;margin-top:6px;line-height:1.4}
.admin-page .form-error .material-symbols-rounded{font-size:16px;flex-shrink:0;color:#dc2626}
.admin-page .form-input.is-invalid,
.admin-page .field.is-invalid{border-color:#ef4444;box-shadow:0 0 0 3px rgba(239,68,68,.12)}
/* ponytail: form-input compat + width caps + row-between */
.admin-page .form-input{padding:.5rem .75rem}
.admin-page .admin-stat-grid-3{grid-template-columns:repeat(3,1fr)}
.admin-page .admin-stat-grid-4{grid-template-columns:repeat(4,1fr)}
.admin-page .filter-field{flex:1;min-width:160px}
.admin-page .filter-field--sm{min-width:120px}
.admin-page .section-head-sm{margin:0;font-size:1.1rem}
.admin-page .u-form-narrow{max-width:800px}
.admin-page .u-form-narrower{max-width:600px}
.admin-page .u-form-wide{max-width:1200px}
.admin-page .u-row-between{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}
.admin-page .u-pad-block{padding:2rem 0}
.admin-page .u-mar-top-1{margin-top:1rem}
.admin-page .u-note{font-size:.85rem;color:var(--muted)}
/* .stat-grid/.stat-tile: .admin-page + .agent-dashboard-page (food distribution)
   (agent dashboard reuses this component instead of forking a local tile) */
.admin-page .stat-grid,.agent-dashboard-page .stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:14px;margin-bottom:8px}
.admin-page .stat-tile,.agent-dashboard-page .stat-tile{background:var(--mint-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:18px 14px;text-align:center}
.admin-page .stat-tile .stat-tile-icon,.agent-dashboard-page .stat-tile .stat-tile-icon{font-size:26px;color:var(--forest);margin-bottom:6px;display:inline-flex}
.admin-page .stat-tile .stat-tile-value,.agent-dashboard-page .stat-tile .stat-tile-value{display:block;font-family:var(--font-display);font-weight:800;font-size:24px;line-height:1.1;color:var(--ink)}
.admin-page .stat-tile .stat-tile-label,.agent-dashboard-page .stat-tile .stat-tile-label{display:block;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;margin-top:6px}
.admin-page .stat-tile.tone-pending .stat-tile-value,.agent-dashboard-page .stat-tile.tone-pending .stat-tile-value{color:var(--amber)}
.admin-page .stat-tile.tone-approved .stat-tile-value,.agent-dashboard-page .stat-tile.tone-approved .stat-tile-value{color:#16a34a}
.admin-page .stat-tile.tone-rejected .stat-tile-value,.agent-dashboard-page .stat-tile.tone-rejected .stat-tile-value{color:#dc2626}
.admin-page .stat-tile.tone-neutral .stat-tile-value{color:var(--ink)}
.admin-page .form-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding-top:18px;border-top:1px solid var(--line);margin-top:8px}
.admin-page .alert-list{padding-left:20px;color:var(--ink);line-height:1.7;font-size:14px}
.admin-page .alert-list li{margin-bottom:4px}
@media(max-width:640px){
  .admin-page .form-actions{flex-direction:column;align-items:stretch}
  .admin-page .form-actions .btn{width:100%;justify-content:center}
}

/* ---------- Quote landing — embedded first-step form cards ----------
   Instant-price service cards on /quote carry the wizard's step 1 with
   the same flattened field chrome as the front-page .hero-card
   (style guide §12 contract): no field-card box, no labels/hints,
   no map or distance summary. Kept after the location-pair section
   so these overrides win the cascade. */
.kb-service-card-form .admin-on-theme__field-card{margin:0;padding:0;background:transparent;border:0}
.kb-service-card-form .admin-on-theme__form-group{margin:0}
.kb-service-card-form .admin-on-theme__field-label,
.kb-service-card-form .admin-on-theme__field-sub-label,
.kb-service-card-form .admin-on-theme__field-hint,
.kb-service-card-form .admin-on-theme__form-hint,
.kb-service-card-form .admin-on-theme__location-pair__map,
.kb-service-card-form .admin-on-theme__location-pair__summary{display:none !important}
.kb-service-card-form .admin-on-theme__location-pair{background:transparent;border:0;padding:0;margin-bottom:0;box-shadow:none}
.kb-service-card-form .admin-on-theme__location-pair__locations{display:flex;flex-direction:column;gap:12px;margin-bottom:0}
.kb-service-card-form .admin-on-theme__location-pair__input-wrap{display:flex;flex-direction:column;gap:6px}
.kb-service-card-form .admin-on-theme__form-label{font-family:var(--font-display);font-weight:600;font-size:13px;color:var(--ink)}

/* ---------- Service Application pages (admin) ----------
   Compact lists in cards: strip bullets, reduce spacing. */
.service-application-review-page .card ul,
.service-applications-page .card ul{list-style:none;padding:0;margin:0}
.service-application-review-page .card ul li,
.service-applications-page .card ul li{padding:0.25rem 0}
.service-application-review-page .card .card-actions-stack{display:flex;flex-direction:column;gap:0.5rem}
/* Icon inside compact lists: 1rem, vertical-middle */
.service-application-review-page .card .material-symbols-rounded{font-size:1rem;vertical-align:middle}
/* card-note margin after detail-grid */
.service-application-review-page .card .detail-grid+.card-note{margin-top:0.75rem}

/* ---- Contractor pages ---- */
.contractor-page .admin-tabs,
.contractor-form-page .admin-tabs{display:flex;gap:4px;border-bottom:2px solid var(--line);margin-bottom:24px;overflow-x:auto}
.contractor-page .admin-tab,
.contractor-form-page .admin-tab{display:inline-flex;align-items:center;padding:8px 16px;font-size:14px;font-weight:500;color:var(--muted);border-radius:var(--radius-sm) var(--radius-sm) 0 0;text-decoration:none;white-space:nowrap;transition:color .15s,background .15s}
.contractor-page .admin-tab:hover,
.contractor-form-page .admin-tab:hover{color:var(--ink);background:var(--mint)}
.contractor-page .admin-tab.is-active,
.contractor-form-page .admin-tab.is-active{color:var(--forest);border-bottom:2px solid var(--forest);margin-bottom:-2px;font-weight:600}

/* Service tags */
.service-tag-list{display:flex;flex-wrap:wrap;gap:8px;padding:12px 0}
.service-tag{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:var(--radius-sm);font-size:13px;font-weight:500;border:1px solid}
.service-tag--approved{background:var(--mint);color:var(--forest);border-color:var(--forest)}
.service-tag--rejected{background:#fff5f5;color:var(--red-500);border-color:var(--red-500)}
.service-tag--pending{background:#fef9c3;color:#92400e;border-color:#eab308}
.service-tag--inactive{background:var(--off-white);color:var(--muted);border-color:var(--line)}
.service-tag-primary{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--forest);background:var(--mint);padding:1px 5px;border-radius:3px;border:1px solid var(--forest)}

/* Utilities for brand views */
.t-center{text-align:center}
.t-mono{font-family:monospace}
.mb-1{margin-bottom:.25rem}
.mb-2{margin-bottom:.5rem}
.mb-3{margin-bottom:.75rem}
.py-5{padding-top:2rem;padding-bottom:2rem}
.py-2{padding-top:.5rem;padding-bottom:.5rem}
.rating-big{font-size:3rem;font-weight:700;color:var(--forest-500)}
.card-max-w{max-width:800px}
.card-hide{display:none}
.field-required{color:var(--red-500)}
/* Icon colors in eligibility list */
.service-application-review-page .card li .material-symbols-rounded{color:var(--line)}
.service-application-review-page .card li.is-active .material-symbols-rounded{color:var(--forest)}
/* Pagination current-page indicator (page scope) */
.admin-contractor-applications-page .btn--active{pointer-events:none;opacity:.45}

/* Spacing between table and form-group inside the same card (page scope) */
/*ponytail: card internal rhythm, add card--stacked class if this pattern recurs */
.admin-contractor-application-review-page .form-group--spaced-top{margin-top:var(--sp-3)}

/* ---------- Availability list page ---------- */
.admin-contractor-availability-page .active-filter-badges{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:16px}
.admin-contractor-availability-page .badge-remove{font-weight:700;color:inherit;text-decoration:none;margin-left:4px;font-size:16px;line-height:1;opacity:.7}
.admin-contractor-availability-page .badge-remove:hover{opacity:1}

/* ---------- Calendar page ---------- */
/* Calendar grid rendered by JS; day cells are dynamically inserted */
.admin-contractor-calendar-page .admin-contractor-calendar-page__calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.admin-contractor-calendar-page .calendar-day{background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);padding:8px;min-height:80px;cursor:pointer;transition:all .2s}
.admin-contractor-calendar-page .calendar-day:hover{background:var(--mint-2);border-color:var(--forest)}
.admin-contractor-calendar-page .calendar-day.available{background:var(--mint-2);border-color:var(--forest)}
.admin-contractor-calendar-page .calendar-day.full{background:#fee2e2;border-color:#ef4444;cursor:not-allowed}
.admin-contractor-calendar-page .calendar-day.empty{background:transparent;border-color:transparent;cursor:default}
.admin-contractor-calendar-page .calendar-day-number{font-weight:700;font-size:.875rem;color:var(--ink);margin-bottom:4px}
.admin-contractor-calendar-page .calendar-day-count{font-size:.75rem;font-weight:600;color:var(--forest)}
.admin-contractor-calendar-page .calendar-day.full .calendar-day-count{color:#dc2626}
.admin-contractor-calendar-page .calendar-weekday-header{text-align:center;font-weight:600;color:var(--forest);padding:8px;background:var(--mint-2);border-radius:var(--radius-sm);font-size:.8125rem}
.admin-contractor-calendar-page .calendar-nav{display:flex;gap:8px}
.admin-contractor-calendar-page .field--narrow{max-width:280px}

/* ============================================================
   Fleet Management pages — admin/fleet/* + admin/vehicle-types/*
   Generic, token-driven components. Style guide §11 admin/portal kit
   extended for fleet use (tabs, breadcrumbs, KPI tiles, empty states,
   detail/label grids).
   ============================================================ */

/* Breadcrumbs (Fleet uses Admin → Fleet → Vehicles → Detail pattern). */
.crumbs-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:13.5px;color:var(--muted);margin-bottom:14px}
.crumbs-row a{color:var(--muted);text-decoration:none}
.crumbs-row a:hover{color:var(--forest)}
.crumbs-row .material-symbols-rounded{font-size:15px;vertical-align:-2px;color:var(--muted)}
.crumbs-row .crumbs-sep{color:var(--muted);opacity:.6}
.crumbs-row .crumbs-current{color:var(--ink);font-weight:600}

/* Page-level section spacing (inside `.app-page`). */
.page-section{margin-bottom:var(--sp-4)}
.page-section-title{font-family:var(--font-display);font-weight:700;font-size:18px;margin-bottom:12px;display:flex;align-items:center;gap:8px;color:var(--ink)}
.page-section-title .material-symbols-rounded{font-size:20px;color:var(--forest)}

/* 2-up / 3-up grids for sibling cards. */
.grid-2-up{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
.grid-3-up{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
@media(max-width:760px){.grid-2-up,.grid-3-up{grid-template-columns:1fr}}

/* KPI tiles — count + label, with leading icon. Brand equivalent of the
   legacy .admin-on-theme__stat-tile. Used in fleet dashboards. */
.kpi-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:var(--sp-4)}
.kpi-tile{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px;display:flex;align-items:center;gap:14px}
.kpi-tile .kpi-tile__icon{width:40px;height:40px;border-radius:10px;background:var(--mint);color:var(--forest);display:grid;place-items:center;flex-shrink:0}
.kpi-tile .kpi-tile__icon .material-symbols-rounded{font-size:22px}
.kpi-tile .kpi-tile__body{display:flex;flex-direction:column;min-width:0}
.kpi-tile .kpi-tile__value{font-family:var(--font-display);font-weight:800;font-size:22px;line-height:1.1;color:var(--ink)}
.kpi-tile .kpi-tile__label{font-size:12.5px;color:var(--muted);margin-top:2px}

/* Tab navigation (vehicle view / edit / contractor vehicle / compliance detail). */
.tabs-nav{display:flex;flex-wrap:wrap;gap:6px;padding:6px;background:var(--mint-2);border:1px solid var(--line);border-radius:var(--radius-pill);margin-bottom:20px;width:fit-content;max-width:100%}
.tabs-nav__btn{padding:8px 16px;border-radius:var(--radius-pill);border:1px solid transparent;background:transparent;color:var(--muted);font:inherit;font-weight:600;font-size:13.5px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:.15s}
.tabs-nav__btn:hover{background:#fff;color:var(--forest-800)}
.tabs-nav__btn.is-active{background:var(--forest);color:#fff;border-color:var(--forest);box-shadow:var(--shadow-sm)}
.tabs-nav__btn .material-symbols-rounded{font-size:18px}
.tab-panel{display:none}
.tab-panel.is-active{display:flex;flex-direction:column;gap:20px;animation:fadeIn .18s ease}
@keyframes fadeIn{from{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}

/* Detail grid (key/value pairs inside a card). Brand equivalent of legacy
   admin-on-theme__details-grid + admin-on-theme__detail-item. */
.detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.detail-grid .detail{border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 14px;background:#fff;min-width:0}
.detail-grid .detail--wide{grid-column:1/-1}
.detail-grid .detail-label{display:block;font-size:11.5px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px}
.detail-grid .detail-value{display:block;font-size:14px;font-weight:500;color:var(--ink);overflow-wrap:anywhere}
.detail-grid .detail-value small{color:var(--muted);font-weight:400}
.detail-grid .detail-value .badge{margin-top:4px}

/* Identity / avatar cell inside a card (owner chip, driver card). */
.identity-cell{display:flex;align-items:center;gap:12px}
.avatar-circle{width:44px;height:44px;border-radius:50%;background:var(--mint);color:var(--forest);display:grid;place-items:center;font-family:var(--font-display);font-weight:800;font-size:16px;flex-shrink:0}

/* Empty state (no rows / no results). */
.empty-state{text-align:center;padding:48px 24px;color:var(--muted)}
.empty-state .empty-icon{font-size:48px;margin-bottom:12px;color:var(--forest);opacity:.7}
.empty-state .empty-icon .material-symbols-rounded{font-size:48px}
.empty-state h3{font-family:var(--font-display);font-size:18px;color:var(--ink);margin-bottom:6px}
.empty-state p{margin-bottom:18px;font-size:14px}

/* Filter row (search + dropdown + actions). Brand equivalent of the
   legacy admin-on-theme__filters block. */
.filter-bar{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;margin-bottom:18px}
.filter-bar .field{flex:1;min-width:200px;max-width:340px;background:#fff}
.filter-bar .field:has(select){flex:0 1 220px;min-width:160px}
.filter-bar .filter-actions{display:flex;gap:8px;align-items:center}

/* Toolbar row above a card (record count + bulk actions). */
.table-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.table-toolbar .table-toolbar__count{font-size:13px;color:var(--muted)}
.table-toolbar .table-toolbar__count b{color:var(--ink);font-family:var(--font-display)}

/* Form layout helpers (vehicle create/edit uses .form-grid + .form-group spans). */
.form-section + .form-section{margin-top:32px;padding-top:24px;border-top:1px solid var(--line)}
.form-section-title{font-family:var(--font-display);font-weight:700;font-size:16px;margin-bottom:16px;display:flex;align-items:center;gap:8px;color:var(--ink)}
.form-section-title .material-symbols-rounded{font-size:20px;color:var(--forest)}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.form-grid .form-group--full{grid-column:1/-1}
@media(max-width:760px){.form-grid{grid-template-columns:1fr}}
.form-actions{display:flex;gap:12px;justify-content:flex-end;flex-wrap:wrap;margin-top:24px;padding-top:18px;border-top:1px solid var(--line)}
.form-actions .form-actions--spacer{margin-right:auto}

/* Required-asterisk on labels (small + accessible). */
.label .req{color:var(--red-500);margin-left:2px}

/* Form-group error state (red border on the wrapper). */
.form-group.is-error .field,
.form-group.is-error input,
.form-group.is-error select,
.form-group.is-error textarea{border-color:#dc2626;box-shadow:0 0 0 3px rgba(220,38,38,.1)}
.form-error{color:#dc2626;font-size:13px;margin-top:6px;display:flex;align-items:center;gap:4px}
.form-hint{color:var(--muted);font-size:13px;margin-top:6px;display:block}

/* Record-count badge (small, on a card-head). */
.card .card-head .record-count{font-size:13px;color:var(--muted);font-weight:500}

/* Utility helpers (avoid inline styles in views — recipe §7). */
.card + .card{margin-top:24px}
/* ...but not inside grid containers — the grid gap already spaces them there.
   Equal specificity, so this must come after the rule above. */
.grid-2 > .card + .card,
.grid-3 > .card + .card,
.dash-grid .card{margin-top:0}
.kpi-tiles + .card{margin-top:24px}
.card.spaced-top{margin-top:24px}
.card.full-row{grid-column:1/-1}
.pre-wrap{white-space:pre-wrap;margin:0}
.empty-note{padding:18px 0 0;margin:0;color:var(--muted);font-size:14px}
.muted-note{color:var(--muted);font-size:14px}
.field.muted{background:var(--mint-2)}
.identity-cell.between{justify-content:space-between}
.icon-inline{font-size:14px;vertical-align:-2px;color:var(--muted)}
.icon-inline--forest{font-size:14px;vertical-align:-2px;color:var(--forest)}
.icon-inline--md{font-size:16px;vertical-align:-2px;color:var(--forest)}
.icon-inline--radio{font-size:18px;color:var(--forest);vertical-align:-3px}
.tab-panel[hidden]{display:none}
.detail.detail--centered{text-align:center}
.row-actions.detail-row--end{margin-left:auto}

/* Stock actions expander (admin/customer-stock/stock_index).
   summary = the trigger button (collapsed). .__body revealed on click. */
.stock-actions{margin:0}
.stock-actions > summary{list-style:none;cursor:pointer}
.stock-actions > summary::-webkit-details-marker{display:none}
.stock-actions__body{display:flex;flex-direction:column;gap:14px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
/* Catalogue-uncatalogued merge row helpers. */
.merge-label{margin:0;flex:1}
.merge-id-field{max-width:8rem}
.spaced-top{margin-top:18px}
.note-pad-bottom{padding-bottom:8px}
.filter-bar--flush{margin:0}
.filter-bar--narrow{margin-bottom:14px}
.page-section-title--sm{font-size:14px;margin-top:8px}
.kpi-tile__value--sm{font-size:16px}
.detail-value--strong{color:var(--forest);font-weight:700}
.muted-input{background:var(--mint-2)}

/* ---- utilities (replace inline styles in views — recipe §7) ---- */
.icon-muted{margin-right:6px}
.icon-muted-sm{margin-right:3px}
.filter-row{display:flex;gap:var(--sp-2);align-items:flex-end}
.card-note-row{border-top:1px solid var(--line);padding-top:var(--sp-2);margin-top:var(--sp-2)}
.badge-color-swatch{display:inline-block;width:16px;height:16px;border-radius:50%;border:2px solid var(--line);vertical-align:middle}
.btn-delete{display:inline}
.form-actions-end{justify-content:flex-end}
.link-inherit{color:inherit}
.flex-wrap{flex-wrap:wrap}
.mt-sm{margin-top:var(--sp-1)}
/* inventory-nodes-page: dynamic color swatch via CSS custom prop (recipe §7: CSS custom props exception) */
.inventory-categories-page .badge-color-swatch{background-color:var(--swatch,transparent)}
.section-gap{margin-top:var(--sp-3)}

/* ---- inventory-items-page (admin/inventory/items/*) ---- */
.inventory-items-page .filter-card{margin-bottom:18px}
.inventory-items-page .filter-bar .field--wide{flex:2;min-width:200px}
.inventory-items-page .filter-bar .field--narrow{flex:0 1 200px;min-width:140px}
.inventory-items-page .filter-bar .field--flush input,
.inventory-items-page .filter-bar .field--flush select{border:none;outline:none;font-size:14px;background:transparent;box-shadow:none}
.inventory-items-page .filter-bar .field--flush .material-symbols-rounded{font-size:18px;color:var(--muted);flex-shrink:0}
.inventory-items-page .filter-bar .field--flush .field--wide{flex:2}
.inventory-items-page code{font-size:12px}
.inventory-items-page .badge--none{background:var(--line);color:var(--muted)}
.inventory-items-page .btn-action-icon .material-symbols-rounded{font-size:16px}
.inventory-items-page .form-grid .field-check-row{margin-top:4px}
.inventory-items-page .form-actions--end{justify-content:flex-end}
.inventory-items-page .storage-form-section{margin-top:24px}
.inventory-items-page .detail-grid--compact{margin-bottom:16px}
.inventory-items-page .photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}
.inventory-items-page .photo-thumb{border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden;position:relative}
.inventory-items-page .photo-thumb img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block}
.inventory-items-page .photo-meta{padding:6px 8px;font-size:12px;color:var(--muted);display:flex;justify-content:space-between;align-items:center}
.inventory-items-page .photo-actions{padding:4px 6px 6px;display:flex;gap:4px}
.inventory-items-page .photo-actions .btn{flex:1;font-size:11px;padding:4px}
.inventory-items-page .alert--compact{margin-bottom:16px}
.inventory-items-page .radio-stack{display:flex;flex-direction:column;gap:8px}
.inventory-items-page .form-static{padding:8px 0}
.inventory-items-page .inline-flex-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.inventory-items-page .kpi-tiles--3cols{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.inventory-items-page .icon-sm{font-size:14px}
.inventory-items-page .icon-md{font-size:16px}
.inventory-items-page .form-grid--photo-upload{grid-template-columns:1fr 1fr 1fr auto;align-items:flex-end}
.inventory-items-page .form-group--inline-end{display:flex;align-items:flex-end;gap:8px}
.inventory-items-page .badge--sm{font-size:10px}
.inventory-items-page .status-history{list-style:none;margin:0;padding:0}
.inventory-items-page .status-history li{padding:8px 0;border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.inventory-items-page .empty-state--centered{text-align:center;padding:24px 0}
.inventory-items-page .empty-state--centered .muted-note{margin:8px 0 16px}
.inventory-items-page .alert--spaced{margin-bottom:20px}
.inventory-items-page .status-history__meta{margin-left:auto}
.inventory-items-page .photo-form{margin-bottom:16px}
.inventory-items-page .icon-muted{color:var(--muted)}
.inventory-items-page .card .empty-icon .material-symbols-rounded{font-size:36px!important}
.inventory-items-page .note-block{margin:12px 0 20px}
.inventory-items-page .empty-note--centered{text-align:center;padding:24px}
.inventory-items-page .btn-check-icon .material-symbols-rounded{font-size:14px}


/* ---- partials ---- */
.card-footer-actions{margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}
.card-footer-actions .material-symbols-rounded{font-size:16px}

/* ---- Inventory pages ---- */
.table--numeric{text-align:right}
.admin-page .tone-muted .stat-tile-value{color:var(--muted)}
.inventory-page .progress-bar__fill{display:block;height:100%;width:var(--pct,0%);background:var(--forest);border-radius:var(--radius-pill);transition:width .4s ease}
.field-check{display:flex;align-items:center;gap:8px;cursor:pointer}
.field-check input[type=checkbox]{width:16px;height:16px;accent-color:var(--forest)}

/* ---- Inventory page ---- */
.inventory-page .kpi-tiles--flush{margin-bottom:0}
.inventory-page .kpi-tile__value--sm{font-size:16px;font-weight:700}
.inventory-page [data-tree-depth="1"]{padding-left:24px}
.inventory-page [data-tree-depth="2"]{padding-left:48px}
.inventory-page [data-tree-depth="3"]{padding-left:72px}
.inventory-page [data-tree-depth="4"]{padding-left:96px}
.inventory-page [data-tree-depth="5"]{padding-left:120px}
.inventory-page [data-tree-depth="6"]{padding-left:144px}
.inventory-page [data-tree-depth="7"]{padding-left:168px}
.inventory-page [data-tree-depth="8"]{padding-left:192px}
.inventory-page .empty-state--flush{padding:0}
.inventory-page .mt-16{margin-top:16px}
.inventory-page ul{margin:0;padding-left:1.25rem}
.inventory-page .card-note--flush{margin-top:0}
.inventory-page .field--wide{flex:2}
.inventory-page .form-grid .form-group{margin-bottom:16px}
.inventory-page .form-grid .form-group:last-child{margin-bottom:0}
.inventory-page .btn-reset{margin-top:8px}


/* =============================================================================
 * Phase 5 — inventory costs & sales pages (admin/inventory/costs/*, admin/inventory/sales/*)
 * Scoped under .inventory-costs-page / .inventory-sales-page.
 * ============================================================================= */

/* Neutral/default status badge (brand.css has .badge-warning/success/danger). */
.badge-default{background:var(--mint);border-color:#c4e2ca;color:var(--forest-800)}

/* inventory-costs-page: quick-link cards in reporting dashboard use kpi as a tile. */
.inventory-costs-page .kpi[href]{cursor:pointer}

/* Profit / loss inline text colouring in table cells: the existing
   .app-page .admin-on-theme__detail-value--profit
/loss utilities cover these pages. */

/* inventory-costs/sales: replace inline styles (recipe §7). */
.inventory-costs-page .card-filter-form,
.inventory-sales-page .card-filter-form{display:flex;gap:1rem;align-items:flex-end;flex-wrap:wrap}
.inventory-costs-page .field-narrow,
.inventory-sales-page .field-narrow{flex:0 0 160px;min-width:0}
.inventory-costs-page .field-auto,
.inventory-sales-page .field-auto{flex:0 0 auto;align-self:flex-end}
.inventory-costs-page .label-tight,
.inventory-sales-page .label-tight{margin:0}
.inventory-costs-page select.full-width,
.inventory-sales-page select.full-width{width:100%}
.inventory-costs-page .card-note-centered,
.inventory-sales-page .card-note-centered{text-align:center}
.inventory-costs-page .kpi-nav,
.inventory-sales-page .kpi-nav{display:flex;flex-wrap:wrap;gap:0.5rem;align-items:center}
.inventory-costs-page .kpi-nav .kpi,
.inventory-sales-page .kpi-nav .kpi{text-decoration:none;color:inherit}
/* Replace inline margin-bottom on filter-status cards (index.php filter badges). */
.inventory-costs-page .card-gap-top,
.inventory-sales-page .card-gap-top{margin-top:1rem}

/* =============================================================================
 * inventory-bulk-move-page (admin/inventory/bulk-move.php)
 * Bulk-move item picker — scrollable list, checkbox selection.
 * ============================================================================= */
.inventory-bulk-move-page .bulk-move-items {
    margin-top: 1rem;
    display: grid;
    grid-template-columns: 1fr;
    gap: 0.5rem;
    max-height: 360px;
    overflow-y: auto;
    padding: 0.5rem;
    background: var(--mint-2);
    border: 1px solid var(--line);
    border-radius: var(--radius);
}
.inventory-bulk-move-page .bulk-move-item {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
    padding: 0.6rem 0.75rem;
    background: white;
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    cursor: pointer;
}
.inventory-bulk-move-page .bulk-move-item:hover { background: var(--mint); }
.inventory-bulk-move-page .bulk-move-empty {
    text-align: center;
    padding: 2rem 0;
    color: var(--muted);
    font-size: 14px;
}
.inventory-bulk-move-page .bulk-move-empty--loading { color: var(--muted); }
.inventory-bulk-move-page .bulk-move-empty--error { color: var(--red-500); }
.inventory-bulk-move-page .bulk-move-moving {
    padding: 1rem 0;
    color: var(--muted);
    font-size: 14px;
}
.inventory-bulk-move-page .bulk-move-errors {
    margin: 0.5rem 0 0;
    padding-left: 1.5rem;
    color: var(--red-500);
    font-size: 14px;
}

/* form-group base (no global margin — page scopes it) */
.form-group { margin-bottom: 16px; }
.form-group:last-child { margin-bottom: 0; }
/* Action group inside a grid-2 row: label hidden, buttons inline. */
.form-group--actions { display: flex; align-items: flex-end; gap: 8px; }
.form-group--actions .label { display: none; }

/* Table empty state row */
.table-empty { text-align: center; padding: 2rem 0; color: var(--muted); font-size: 14px; }

/* inventory-dashboard-page (admin/inventory/dashboard/index.php) */
.inventory-dashboard-page .card-metric { font-size: 36px; font-weight: 800; font-family: var(--font-display); color: var(--ink); margin: 8px 0 0; line-height: 1; }
.inventory-dashboard-page .progress-bar { margin-bottom: 6px; }
/* Activity row: icon + text block in a table cell */
.inventory-dashboard-page .activity-row { display: flex; gap: 12px; align-items: flex-start; }
.inventory-dashboard-page .activity-row .material-symbols-rounded { font-size: 20px; color: var(--muted); flex-shrink: 0; margin-top: 2px; }

/* ---- Auth pages ---- */

/* Centered auth-head variant */
.auth-page .auth-head--centered { text-align: center; }

/* Button stacks and rows */
.auth-page .btn-stack { display: flex; flex-direction: column; gap: 0.75rem; }
.auth-page .btn-row { display: flex; gap: 0.75rem; flex-wrap: wrap; justify-content: center; }

/* register-select.php */
.register-select-page .select-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; margin-bottom: 2rem; }
@media (max-width: 640px) { .register-select-page .select-grid { grid-template-columns: 1fr; } }

.register-select-page .select-card {
    border: 2px solid var(--line);
    border-radius: 1.25rem;
    padding: 1.75rem;
    text-decoration: none;
    color: inherit;
    display: flex;
    flex-direction: column;
    gap: 1rem;
    transition: all 0.2s ease;
}
.register-select-page .select-card:hover { border-color: var(--forest); transform: translateY(-2px); box-shadow: var(--shadow-md); }

.register-select-page .select-card--accent { background: var(--forest); color: white; border-color: var(--forest); }
.register-select-page .select-card--accent:hover { border-color: var(--forest-dark); }

.register-select-page .select-card-header { display: flex; align-items: center; gap: 0.75rem; }
.register-select-page .select-card-icon { font-size: 2rem; width: 3.5rem; height: 3.5rem; border-radius: 1rem; display: flex; align-items: center; justify-content: center; }
.register-select-page .select-card:not(.select-card--accent) .select-card-icon { background: var(--mint); color: var(--forest); }
.register-select-page .select-card--accent .select-card-icon { background: rgba(255,255,255,0.2); color: white; }

.register-select-page .select-card-desc { font-size: 0.9rem; color: var(--text-muted); line-height: 1.5; margin: 0; }
.register-select-page .select-card--accent .select-card-desc { color: rgba(255,255,255,0.85); }

.register-select-page .select-card-features { list-style: none; margin: 0; padding: 0; flex-grow: 1; }
.register-select-page .select-card-features li { display: flex; align-items: center; gap: 0.5rem; font-size: 0.875rem; margin-bottom: 0.375rem; }
.register-select-page .select-card-features li .material-symbols-rounded { font-size: 1rem; color: var(--alert-success); }
.register-select-page .select-card--accent .select-card-features li .material-symbols-rounded { color: var(--mint); }

.register-select-page .select-card-cta { font-weight: 700; display: flex; align-items: center; gap: 0.25rem; margin-top: auto; }
.register-select-page .select-card:not(.select-card--accent) .select-card-cta { color: var(--forest); }
.register-select-page .select-card--accent .select-card-cta { color: var(--mint); }

.register-select-page .trust-row { display: flex; justify-content: center; gap: 1.5rem; font-size: 0.8rem; color: var(--text-muted); margin-bottom: 1.5rem; flex-wrap: wrap; }
.register-select-page .trust-row span { display: flex; align-items: center; gap: 0.25rem; }
.register-select-page .trust-row .material-symbols-rounded { font-size: 1rem; color: var(--alert-success); }

/* timeline/status step rows (account-pending, account-suspended) */
.auth-page .step-list { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 1rem; }
.auth-page .step-row { display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem; background: var(--bg-secondary); border-radius: 0.5rem; }
.auth-page .step-row--pending { opacity: 0.5; }
.auth-page .step-row .step-icon { width: 2rem; height: 2rem; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1rem; flex-shrink: 0; }
.auth-page .step-row .step-icon--done { background: var(--alert-success); color: white; }
.auth-page .step-row .step-icon--current { background: var(--info); color: white; }
.auth-page .step-row .step-icon--pending { background: var(--line); color: var(--text-muted); border: 2px solid var(--line); }
.auth-page .step-row .step-icon--support { background: var(--forest); }
.auth-page .step-list ul, .auth-page .step-list ol { margin: 0.5rem 0 0 1.25rem; padding: 0; }
.auth-page .card-note ul, .auth-page .card-note ol, .auth-page .alert ul, .auth-page .alert ol { margin: 0.5rem 0 0 1.25rem; padding: 0; }

/* badge pill */
.auth-page .badge-pill { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1.25rem; border-radius: 1.5rem; font-weight: 600; }
.auth-page .badge-pill--pending { background: rgba(23,162,184,0.1); border: 2px solid var(--info); color: var(--info); }
.auth-page .badge-pill--suspended { background: rgba(220,53,69,0.1); border: 2px solid var(--alert-error); color: var(--alert-error); }

/* hidden-on-load helper (replaces JS-inline display:none on contractor_details) */
#contractor_details { display: none; }

/* centered auth-head large icon */
.auth-page .auth-head--centered .material-symbols-rounded:first-child { font-size: 3rem; display: block; margin: 0 auto 1rem; }

/* spacing helpers for auth pages */
.auth-page .gap-sm { margin-bottom: 0.5rem; }
.auth-page .gap-md { margin-bottom: 1rem; }
.auth-page .gap-lg { margin-bottom: 1.5rem; }

/* =============================================================================
 * Auth registration landing pages (customer/index.php, contractor/index.php)
 * Scoped under .register-landing (set as bodyClass by the layout or
 * directly on <main>). Landing pages are rich marketing surfaces — use
 * scoped layout helpers so brand.css stays clean.
 * ============================================================================= */

.register-landing {
  padding: 3rem 1rem 4rem;
}
.register-landing__container {
  max-width: 84rem;
  margin: 0 auto;
}

/* Hero */
.register-landing__hero {
  margin-bottom: 5rem;
}
.register-landing__hero-inner {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: 3rem;
  background: var(--mint);
  border-radius: 2rem;
  padding: 3rem;
  position: relative;
  overflow: hidden;
}
@media (max-width: 768px) {
  .register-landing__hero-inner {
    grid-template-columns: 1fr;
    gap: 2rem;
    padding: 2rem;
  }
}
.register-landing__hero-badge {
  display: inline-block;
  margin-bottom: 1.5rem;
}
.register-landing__hero-title {
  font-size: clamp(2.25rem, 4.5vw, 3.25rem);
  font-weight: 700;
  line-height: 1.1;
  margin: 0 0 1.5rem;
}
.register-landing__hero-title--accent {
  color: var(--forest);
  display: block;
}
.register-landing__hero-subtitle {
  font-size: 1.125rem;
  color: var(--text-muted);
  line-height: 1.6;
  margin-bottom: 2rem;
  max-width: 35rem;
}
.register-landing__hero-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  align-items: center;
  margin-bottom: 2rem;
}
.register-landing__hero-link {
  color: var(--forest);
  font-weight: 600;
  text-decoration: none;
  padding: 0.75rem 1rem;
}
.register-landing__hero-link span {
  text-decoration: underline;
}
.register-landing__trust {
  display: flex;
  flex-wrap: wrap;
  gap: 1.25rem;
  font-size: 0.875rem;
  color: var(--forest);
  font-weight: 500;
}
.register-landing__trust-item {
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
}
.register-landing__trust-item .material-symbols-rounded {
  font-size: 1em;
  vertical-align: middle;
  color: var(--forest);
}
/* Hero visual panel */
.register-landing__hero-visual {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 320px;
}
@media (max-width: 768px) {
  .register-landing__hero-visual { min-height: auto; }
  .register-landing__hero-visual { order: -1; }
}
.register-landing__glow {
  position: absolute;
  top: -2.5rem;
  right: -2.5rem;
  width: 18rem;
  height: 18rem;
  background: var(--lime);
  opacity: 0.3;
  border-radius: 50%;
  filter: blur(60px);
  pointer-events: none;
}
.register-landing__mini-cards {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 360px;
  display: flex;
  flex-direction: column;
  gap: 1rem;
}
.register-landing__mini-card {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 1rem 1.25rem;
  background: white;
  border-radius: 1rem;
  box-shadow: 0 10px 30px rgba(0,0,0,0.08);
}
.register-landing__mini-card--1 { transform: translateX(-0.75rem); }
.register-landing__mini-card--2 { transform: translateX(0.75rem); }
.register-landing__mini-card--3 { transform: translateX(-0.25rem); }
@media (max-width: 768px) {
  .register-landing__mini-card--1,
  .register-landing__mini-card--2,
  .register-landing__mini-card--3 { transform: none; }
}
.register-landing__mini-icon {
  font-size: 1.75rem;
  width: 3rem;
  height: 3rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--mint);
  border-radius: 0.75rem;
  flex-shrink: 0;
  color: var(--forest);
}
.register-landing__mini-card strong { display: block; font-size: 0.95rem; color: var(--ink); }
.register-landing__mini-card small { display: block; font-size: 0.8rem; color: var(--text-muted); margin-top: 0.125rem; }

/* Section header */
.register-landing__section {
  margin-bottom: 5rem;
  text-align: center;
}
.register-landing__section-title {
  font-size: 2.25rem;
  font-weight: 700;
  margin: 0 0 0.75rem;
}
.register-landing__section-subtitle {
  font-size: 1.125rem;
  color: var(--text-muted);
  margin: 0 0 3rem;
}

/* Steps grid (4-up) */
.register-landing__steps-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1.25rem;
}
@media (max-width: 900px) { .register-landing__steps-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 540px) { .register-landing__steps-grid { grid-template-columns: 1fr; } }

/* Benefits grid (2x2) */
.register-landing__benefits-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1.25rem;
}
@media (max-width: 640px) { .register-landing__benefits-grid { grid-template-columns: 1fr; } }

/* Step card with big number */
.register-landing__step-card {
  text-align: left;
  position: relative;
  padding: 1.75rem;
}
.register-landing__step-num {
  position: absolute;
  top: 1rem;
  right: 1.25rem;
  font-size: 2.5rem;
  font-weight: 800;
  color: var(--mint);
  line-height: 1;
}
.register-landing__step-icon {
  width: 3rem;
  height: 3rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--mint);
  border-radius: 0.75rem;
  margin-bottom: 1rem;
  color: var(--forest);
}

/* Benefit card — primary (gradient) */
.register-landing__benefit--primary {
  background: linear-gradient(135deg, var(--forest) 0%, var(--forest-dark) 100%);
  color: white;
}
.register-landing__benefit--primary .register-landing__benefit-title,
.register-landing__benefit--primary .register-landing__benefit-desc { color: white; }
.register-landing__benefit--primary .register-landing__benefit-icon {
  background: rgba(255,255,255,0.2);
  color: white;
}

.register-landing__benefit-icon {
  width: 2.75rem;
  height: 2.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--mint);
  border-radius: 0.75rem;
  margin-bottom: 1rem;
  color: var(--forest);
}
.register-landing__benefit-title {
  font-size: 1.125rem;
  font-weight: 700;
  margin: 0 0 0.5rem;
  color: var(--ink);
}
.register-landing__benefit-desc {
  font-size: 0.9rem;
  line-height: 1.5;
  color: var(--text-muted);
  margin: 0;
}

/* CTA banner */
.register-landing__cta {
  background: linear-gradient(135deg, var(--forest) 0%, var(--forest-dark) 100%);
  border-radius: 2rem;
  padding: 4rem 2rem;
  text-align: center;
  position: relative;
  overflow: hidden;
}
.register-landing__cta-title {
  font-size: clamp(1.75rem, 3.5vw, 2.5rem);
  font-weight: 700;
  color: white;
  line-height: 1.15;
  margin: 0 0 1rem;
  position: relative;
  z-index: 1;
}
.register-landing__cta-title--accent {
  color: var(--lime);
  display: block;
}
.register-landing__cta-subtitle {
  color: rgba(255,255,255,0.85);
  font-size: 1.05rem;
  margin: 0 0 2rem;
  position: relative;
  z-index: 1;
}
.register-landing__cta-actions {
  position: relative;
  z-index: 1;
}
.register-landing__cta-note {
  color: rgba(255,255,255,0.7);
  font-size: 0.875rem;
  font-weight: 500;
  margin-top: 1rem;
}

/* ---- Contractor-specific landing grid ---- */
.register-landing__contractor-grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-template-rows: repeat(2, 12rem);
  gap: 1.5rem;
}
@media (max-width: 900px) {
  .register-landing__contractor-grid { grid-template-columns: repeat(2, 1fr); grid-template-rows: auto; }
}
@media (max-width: 540px) {
  .register-landing__contractor-grid { grid-template-columns: 1fr; }
}
.register-landing__benefit-card--large { grid-column: span 7; }
.register-landing__benefit-card--tall   { grid-column: span 5; grid-row: span 2; background: var(--forest); color: white; }
.register-landing__benefit-card--small { grid-column: span 5; }
.register-landing__benefit-card--wide  { grid-column: span 7; }
@media (max-width: 900px) {
  .register-landing__benefit-card--large,
  .register-landing__benefit-card--tall,
  .register-landing__benefit-card--small,
  .register-landing__benefit-card--wide { grid-column: span 1; grid-row: span 1; }
}
.register-landing__benefit-card--tall .register-landing__benefit-title,
.register-landing__benefit-card--tall .register-landing__benefit-desc { color: white; }

/* Roadmap step rows */
.register-landing__roadmap {
  display: grid;
  grid-template-columns: 1fr 12rem;
  gap: 2rem;
  margin-bottom: 3rem;
}
.register-landing__roadmap--reverse { grid-template-columns: 12rem 1fr; }
@media (max-width: 640px) {
  .register-landing__roadmap,
  .register-landing__roadmap--reverse { grid-template-columns: 1fr; }
}
.register-landing__roadmap-card {
  padding: 2.5rem;
  border-radius: 1.5rem;
  background: var(--mint);
}
.register-landing__roadmap-card--first { border-left: 8px solid var(--forest); }
.register-landing__roadmap-meta {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 1.5rem;
  background: var(--bg-secondary);
  border-radius: 1.5rem;
  font-weight: 500;
  font-size: 0.875rem;
  color: var(--ink);
}

/* form-section rhythm (used in wizard cards) */
.form-section { margin-bottom: 2rem; }
.form-section + .form-section { margin-top: 2rem; padding-top: 1.5rem; border-top: 1px solid var(--line); }
.form-section h3 { margin-bottom: 0.5rem; }

/* address card in customer step3 */
.address-card { background: var(--bg-secondary); border-radius: var(--radius); padding: 1.5rem; margin-bottom: 1.5rem; }

/* consent sections */
.consents-section { margin-bottom: 2rem; }
.consents-section ul { list-style: disc; padding-left: 1.5rem; margin: 0.5rem 0 0; }
.consents-section li { margin-bottom: 0.5rem; }

/* has-error ring for form validation */
.has-error { outline: 2px solid var(--danger); outline-offset: 2px; border-radius: var(--radius); }

/* password strength meter (register.php) */
.strength-meter { margin-top: 0.5rem; }
.strength-bar { height: 4px; background: var(--line); border-radius: 2px; margin-bottom: 0.25rem; }
.strength-label { font-size: 12px; color: var(--muted); }

/* requirement items */
.password-requirements { list-style: none; margin: 0.5rem 0 0; padding: 0; }
.requirement-item { display: flex; align-items: center; gap: 0.375rem; font-size: 12px; color: var(--muted); margin-bottom: 0.25rem; }
.requirement-item .material-symbols-rounded { font-size: 14px; }

/* role selection grid */
.role-selection-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; margin-bottom: 0.5rem; }
@media (max-width: 480px) { .role-selection-grid { grid-template-columns: 1fr; } }
.role-option { }
.role-description { margin: 0.25rem 0 0; }

/* registration wizard progress badges */
.step-progress { display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 1.5rem; }

/* address card: remove-btn margin */
.address-card .btn-remove { margin-bottom: 0.75rem; }

/* phone field: no-inner-border input inside .field */
.field--phone-input input { border: none !important; background: transparent !important; outline: none !important; padding-left: 0.25rem; flex: 1; box-shadow: none !important; }

/* consent item with left offset */
.consent-item-label { margin-left: 2rem; display: block; }

/* has-error for terms validation */
.field-check.has-error label { outline: 2px solid var(--danger); outline-offset: 2px; border-radius: var(--radius); padding: 0.5rem; }

/* inline-flex inline-block for trust items */
.trust-inline { display: inline-flex; align-items: center; gap: 0.375rem; }

/* =============================================================================
 * Register completion page (contractor/complete.php)
 * Scoped under .register-complete.
 * ============================================================================= */
.register-complete .card { text-align: center; }

/* Success circle animation */
.register-complete .success-circle {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--lime) 0%, var(--forest) 100%);
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto 2rem;
  animation: popIn 0.5s ease-out;
}
@keyframes popIn {
  0% { transform: scale(0); opacity: 0; }
  50% { transform: scale(1.1); }
  100% { transform: scale(1); opacity: 1; }
}

/* status rows */
.register-complete .status-rows { display: flex; flex-direction: column; gap: 1rem; margin-bottom: 2rem; text-align: left; }
.register-complete .status-row {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 1rem;
  border-radius: var(--radius);
  border-left: 4px solid var(--line);
}
.register-complete .status-row--done { background: linear-gradient(135deg, var(--lime) 0%, var(--forest) 100%); border-left-color: var(--forest); }
.register-complete .status-row--current { background: var(--mint); border-left-color: var(--forest); }
.register-complete .status-row--pending { background: var(--surface); border-left-color: var(--line); opacity: 0.7; }
.register-complete .status-dot { width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0; }
.register-complete .status-dot--done { background: var(--forest); }
.register-complete .status-dot--current { background: var(--forest); animation: pulse 2s infinite; }
.register-complete .status-dot--pending { background: var(--line); }
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.register-complete .status-body { flex: 1; }
.register-complete .status-body h4 { font-weight: 600; margin: 0 0 0.25rem; }
.register-complete .status-body p { font-size: 0.875rem; color: var(--text-muted); margin: 0; }

/* outcomes grid */
.register-complete .outcomes-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-bottom: 2rem; text-align: center; }
@media (max-width: 600px) { .register-complete .outcomes-grid { grid-template-columns: 1fr; } }
.register-complete .outcome-card { padding: 1.5rem; border-radius: var(--radius); border: 2px solid var(--line); background: var(--surface); }
.register-complete .outcome-card--yes { background: var(--mint); border-color: var(--forest); }
.register-complete .outcome-card--warn { background: var(--surface); border-color: var(--amber); }
.register-complete .outcome-card--no { background: var(--surface); border-color: var(--danger); }
.register-complete .outcome-card .material-symbols-rounded { font-size: 2rem; margin-bottom: 0.5rem; display: block; }
.register-complete .outcome-card--yes .material-symbols-rounded { color: var(--forest); }
.register-complete .outcome-card--warn .material-symbols-rounded { color: var(--amber); }
.register-complete .outcome-card--no .material-symbols-rounded { color: var(--danger); }

/* while-you-wait badges */
.register-complete .while-wait { margin-bottom: 1.5rem; text-align: left; }
.register-complete .while-wait h3 { font-weight: 600; margin: 0 0 1rem; }
.register-complete .while-wait-badges { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.register-complete .while-wait-badges .badge { text-decoration: none; }

/* section helpers */
.register-complete .section-left { text-align: left; margin-bottom: 2rem; }
.register-complete .section-left h2 { font-size: 1.25rem; font-weight: 700; margin: 0 0 1.5rem; }
.register-complete .section-left h3 { font-size: 1.125rem; font-weight: 600; margin: 0 0 0.75rem; }
.register-complete .section-left p { font-size: 0.875rem; color: var(--text-muted); margin: 0; }

/* auth-card max-width for wizard forms */
.auth-card--narrow { max-width: 52rem; }

/* step badge row */
.step-badges { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.5rem; }

/* kicker variants */
.kicker--muted { color: var(--text-muted); }
.kicker--muted::before { background: var(--text-muted); }

/* consent block */
.consent-check {
  margin-top: 1rem;
  padding: 1rem;
  background: var(--mint);
  border-radius: var(--radius);
}
.consent-check--optional {
  margin-top: 1rem;
  padding: 1rem;
  background: var(--surface);
  border-radius: var(--radius);
}
.consent-check label { font-weight: 600; }
.consent-check .card-note { margin-left: 0; display: block; margin-top: 0.25rem; }

/* gdpr checklist */
.gdpr-checklist { list-style: none; margin: 0; padding: 0; }
.gdpr-checklist li { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; font-size: 0.875rem; }
.gdpr-checklist .material-symbols-rounded { color: var(--forest); font-size: 1.2em; flex-shrink: 0; }

/* step-form-section with kicker title */
.step-form-section { margin-bottom: 2rem; }
.step-form-section + .step-form-section { margin-top: 2rem; padding-top: 1.5rem; border-top: 1px solid var(--line); }
.step-form-section h3 { margin-bottom: 0.5rem; }
.step-form-section h4 { margin: 1.5rem 0 0.5rem; }

/* icon in kicker */
.kicker .material-symbols-rounded { font-size: 1em; vertical-align: middle; }

/* grid-12 for contractor 12-col layout */
.grid-12 { display: grid; grid-template-columns: repeat(12, 1fr); gap: 1.5rem; }

/* service checkbox grid */
.svc-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr)); gap: 0.5rem; }

/* phone prefix wrapper inside .field */
.phone-prefix { padding: 0 0.5rem; color: var(--text-muted); border-right: 1px solid var(--line); margin-right: 0.25rem; white-space: nowrap; }

/* auth-head centered */
.auth-head--center { text-align: center; }
.auth-head--center .material-symbols-rounded { font-size: 3rem; display: block; margin: 0 auto 1rem; }

/* verify email card note */
.verify-email-box { text-align: center; background: var(--mint); padding: 1rem; border-radius: var(--radius); margin: 1rem 0; word-break: break-all; font-weight: 600; }

/* verify page section helpers */
.verify-whats-next { margin: 1.5rem 0; }
.verify-whats-next ol { padding-left: 1.5rem; }
.verify-whats-next li { margin-bottom: 0.5rem; }

/* complete page final action */
.complete-final-action { padding-top: 2rem; border-top: 1px solid var(--line); }

/* register terms debug box */
.reg-debug { font-family: monospace; font-size: 0.8rem; }
.reg-debug ol { margin: 0.5rem 0 0 1.5rem; font-size: 0.75rem; }

/* field-check with margin-bottom (used in address form JS) */
.field-check--gap { margin-bottom: 1rem; }

/* consent note — indented small under a consent block */
.consent-note { margin-left: 2rem; display: block; margin-bottom: 1.5rem; }

/* verify page helpers */
.verify-email-box { text-align: center; background: var(--mint); padding: 1rem; border-radius: var(--radius); margin: 1rem 0; word-break: break-all; font-weight: 600; }
.verify-whats-next { margin: 1.5rem 0; }
.verify-whats-next h4 { margin: 0 0 0.75rem; font-weight: 600; }
.verify-whats-next ol { padding-left: 1.5rem; }
.verify-whats-next li { margin-bottom: 0.5rem; }
.auth-page .step-list .p { margin: 0; font-size: 0.875rem; color: var(--text-muted); }
.auth-page .step-list p { margin: 0; font-size: 0.875rem; color: var(--text-muted); }
/* form helper text */
.form-hint { font-size: 0.8rem; color: var(--text-muted); margin: 0.25rem 0 0; }

/* register-select-page layout */
.register-select-page .card { padding: 3rem; }
.register-select-page .select-note { text-align: center; color: var(--text-muted); font-size: 0.875rem; }

/* auth-page spacing and utility helpers */
.auth-page .mt-sm { margin-top: 0.5rem; }
.auth-page .mt-md { margin-top: 1rem; }
.auth-page .mt-lg { margin-top: 1.5rem; }
.auth-page .mb-sm { margin-bottom: 0.5rem; }
.auth-page .mb-md { margin-bottom: 1rem; }
.auth-page .mb-lg { margin-bottom: 1.5rem; }

/* inner icon size inside step-icon / badge-pill */
.step-icon .material-symbols-rounded,
.badge-pill .material-symbols-rounded { font-size: 1rem; }

/* scoped role-description in auth pages */
.auth-page .role-description { margin: 0.25rem 0 0; }

/* auth-page element-level overrides (used for one-off typography in marketing pages) */
.auth-page .text-left { text-align: left; }
.auth-page .text-center { text-align: center; }
.auth-page .h1-lg { font-size: 2.5rem; font-weight: 700; color: var(--forest); margin: 0 0 1rem; }
.auth-page .p-lg { font-size: 1.125rem; color: var(--text-muted); }
.auth-page .h4-md { font-size: 1.125rem; font-weight: 600; margin: 0 0 0.5rem; }
.auth-page .p-sm { font-size: 0.875rem; color: var(--text-muted); margin: 0; }
.auth-page .p-sm--muted { font-size: 0.8rem; color: rgba(255,255,255,0.7); }
.auth-page .strong-white { color: white; display: block; }
.auth-page .strong-muted { color: rgba(255,255,255,0.7); display: block; }

/* hero benefit list rows in contractor hero */
.hero-benefit-list { display: flex; flex-direction: column; gap: 1.5rem; padding: 2rem; background: var(--forest); border-radius: 1.5rem; width: 100%; max-width: 360px; }
.hero-benefit-row { display: flex; align-items: center; gap: 1rem; }
.hero-benefit-row .material-symbols-rounded { color: white; }
.hero-benefit-row strong { color: white; display: block; }
.hero-benefit-row small { color: rgba(255,255,255,0.7); }

/* landing benefit card — reusable text sizes */
.benefit-title-lg { font-size: 1.25rem; font-weight: 700; margin: 0 0 0.75rem; }
.benefit-title-md { font-size: 1.0625rem; font-weight: 700; margin: 0 0 0.5rem; }

/* register-complete inner sections need left-align */
.register-complete .section-left { text-align: left; }
.register-complete .card > h1 { font-size: 2.5rem; font-weight: 700; color: var(--forest); margin: 0 0 1rem; }
.register-complete .card > p { font-size: 1.125rem; color: var(--text-muted); }
.register-complete .status-row .material-symbols-rounded { flex-shrink: 0; }
.register-complete .outcome-card h4 { font-weight: 600; margin: 0 0 0.5rem; }
.register-complete .outcome-card p { font-size: 0.8rem; color: var(--text-muted); margin: 0; }

/* kicker h3 override for landing step cards */
.register-landing .kicker.h3 { font-size: inherit; }

/* alert margin overrides */
.alert--gap-top { margin-top: 2rem; }
.alert--gap-bottom { margin-bottom: 2rem; }

/* card flex layout helpers */
.card-flex-row { display: flex; align-items: center; gap: 1.5rem; padding: 2rem; }
.card-flex-col { display: flex; flex-direction: column; justify-content: center; text-align: left; }

/* CTA primary button override inside dark CTA section */
.register-landing__cta .btn-primary { background: white; color: var(--forest); }
.register-landing__cta .btn-primary:hover { background: var(--mint); }

/* glow small variant */
.register-landing__glow--sm { width: 16rem; height: 16rem; }

/* CTA hero variant */
.register-landing__cta--hero { border-radius: 3rem; padding: 6rem 3rem; }

/* step badge in auth-head */
.auth-page .step-num-badge { margin-bottom: 0.75rem; display: inline-block; }

/* margin-bottom utilities */
.mb-sm { margin-bottom: 0.5rem; }
.mb-md { margin-bottom: 1rem; }
.mb-lg { margin-bottom: 1.5rem; }
.mb-xl { margin-bottom: 2rem; }

/* alert with top margin */
.alert-mb-xl { margin-bottom: 2rem; }

/* status badges row inside complete/terms */
.register-complete__status-badges { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.75rem; }

/* complete page element classes */
.success-icon { font-size: 4rem; color: white; }
.h1-lg { font-size: 2.5rem; font-weight: 700; color: var(--forest); margin: 0 0 1rem; }
.p-lg { font-size: 1.125rem; color: var(--text-muted); }
.h4-md { font-size: 1.125rem; font-weight: 600; margin: 0 0 0.5rem; }
.p-sm { font-size: 0.875rem; color: var(--text-muted); margin: 0; }
.text-success { color: var(--forest); }
.text-muted-color { color: var(--text-muted); }

/* badge links */
.badge-link { text-decoration: none; }

/* icon inline in status rows */
.status-icon { flex-shrink: 0; }
.status-icon--success { color: var(--forest); }
.status-icon--muted { color: var(--text-muted); }

/* alert with top margin */
.alert-mt-lg { margin-top: 2rem; }

/* tall card benefit icon (white glass) */
.register-landing__benefit-icon--glass { background: rgba(255,255,255,0.2); color: white; }

/* =============================================================================
 * Knowledge Base — article admin pages (.articles-admin-page)
 * Ported from admin-on-theme markup. Uses brand primitives only.
 * ============================================================================= */

/* ---------- Article hero (admin forms: categories, form, upload, revisions, diff, feedback) ---------- */
.articles-admin-page .page-head .kicker{margin-bottom:6px}
.articles-admin-page .page-head p{font-size:15px}

/* ---------- Editor host (Quill rich-text editor wrapper) ---------- */
.articles-admin-page .editor-host,
.editor-host{min-height:320px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff}
.editor-host .ql-toolbar{border-radius:var(--radius-sm) var(--radius-sm) 0 0;border-color:var(--line)!important}
.editor-host .ql-container{border-radius:0 0 var(--radius-sm) var(--radius-sm);border-color:var(--line)!important;font-size:15px}
.editor-host .ql-editor{min-height:260px}

/* ---------- Feedback-pct inline indicator (used in form feedback sidebar, feedback-index/show) ---------- */
.articles-admin-page .feedback-pct,
.feedback-pct{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:var(--radius-sm);font-size:13px;font-weight:600}
.articles-admin-page .feedback-pct.tone-good,
.feedback-pct.tone-good{background:var(--mint);color:var(--forest-800)}
.articles-admin-page .feedback-pct.tone-ok,
.feedback-pct.tone-ok{background:#fef3c7;color:#92400e}
.articles-admin-page .feedback-pct.tone-bad,
.feedback-pct.tone-bad{background:#fee2e2;color:#991b1b}
.articles-admin-page .feedback-pct.tone-neutral,
.feedback-pct.tone-neutral{background:var(--mint-2);color:var(--muted)}
.articles-admin-page .feedback-btns-row,
.feedback-btns-row{display:flex;gap:8px;align-items:center;margin-bottom:10px}

/* ---------- Revision diff panels ---------- */
.articles-admin-page .diff-panel,
.diff-panel{max-height:600px;overflow-y:auto;border:1px solid var(--line);border-radius:var(--radius-sm);padding:1rem}

/* ---------- Sub-table row indent ---------- */
.sub-row{color:var(--muted);font-size:13.5px}
.sub-row-prefix{color:var(--line);margin-right:6px;font-family:monospace}

/* ---------- Form feedback sidebar ---------- */
.articles-admin-page .card-head h3 .material-symbols-rounded,
.articles-admin-page .card-head h4 .material-symbols-rounded{font-size:18px;vertical-align:-3px;margin-right:4px;color:var(--forest)}
.upload-summary-trigger{cursor:pointer;list-style:none}
.upload-summary-trigger::-webkit-details-marker{display:none}

/* =============================================================================
 * Knowledge Base — public article detail (show.php + show-app.php)
 * Hero + print overrides extracted from inline <style> blocks.
 * ============================================================================= */

/* ---------- Public article hero (dark hero section) ---------- */
.kb-art-hero .container{padding:56px 0 64px}
.kb-art-hero .kb-badges{margin-bottom:18px}
.kb-art-hero .hero-title{font-size:clamp(28px,3.4vw,42px);max-width:26ch}
.kb-art-hero .hero-lead{margin-bottom:22px}
.kb-art-hero .card-meta{color:#c9dccf}
.kb-art-hero .card-meta .material-symbols-rounded{color:#7fd98a}
.kb-art-hero .hero-lead a{color:#fff;text-decoration:underline}
.kb-badges{display:flex;gap:8px;flex-wrap:wrap}
.kb-sim-banner{margin-bottom:24px;text-align:left}

/* ---------- Logged-in article page (show-app.php) — breadcrumb meta line ---------- */
.crumbs-meta{margin:0 0 6px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.crumbs-meta a{color:var(--muted);text-decoration:none}
.crumbs-meta a:hover{color:var(--forest)}
.crumbs-sep-icon{font-size:14px;vertical-align:-2px;color:var(--muted)}

/* ---------- attention-stack: flex column for the "About this article" card body ---------- */
.attention-stack{display:flex;flex-direction:column;gap:10px}

/* ---------- related-list: flex column for the related articles card body ---------- */
.related-list{display:flex;flex-direction:column;gap:10px}

/* ---------- Print scoping for KB article pages ---------- */
@media print {
    body * { visibility: hidden; }
    .kb-art-page, .kb-art-page *,
    .kb-article-app, .kb-article-app * { visibility: visible; }
    .kb-art-page, .kb-article-app { position: absolute; left: 0; top: 0; width: 100%; }
    .kb-article-layout { display: block; }
    .kb-art-hero, .crumbs, .kb-article-after, .kb-article-side,
    .site-header, .site-footer, .topbar, .kb-article-updated,
    .kb-article-side .toc { display: none !important; }
    .prose { font-size: 11pt; max-width: none; }
    h1, h2, h3 { page-break-after: avoid; }
    pre, blockquote { page-break-inside: avoid; }
}

/* Margin utilities */
.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:2rem}

/* Layout utilities */
.tar{text-align:right}.tal{text-align:left}.tac{text-align:center}
.flex-1{flex:1}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}
.d-block{display:block}.d-flex{display:flex}
.gap-sm{gap:.5rem}.gap-md{gap:1rem}
.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}

/* Table column width helpers */
.col-70{width:70px}.col-80{width:80px}.col-90{width:90px}.col-100{width:100px}.col-110{width:110px}.col-140{width:140px}.col-200{width:200px}

/* Small override: stat tile value same size as label (not oversized) */
.stat-tile-value--sm{font-size:1rem}

/* Additional spacing utilities */
.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:2rem}
.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}
.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}

/* Layout extras */
.align-stretch{align-items:stretch}.d-inline{display:inline}

/* =============================================================================
 * Food Admin Pages — scoped under food-* bodyClass tokens
 * Stat-tile tone variants for food dashboard pages
 * ============================================================================= */

/* Stat-tile tone variants */
.stat-tile.tone-purple .stat-tile-value{color:#8b5cf6}
.stat-tile.tone-info .stat-tile-value{color:#3b82f6}
.stat-tile.tone-neutral .stat-tile-value{color:var(--muted)}

/* Food admin pages: detail grid inside cards */
.food-collections-page .detail,
.food-claimants-page .detail,
.food-locations-page .detail,
.food-vendors-page .detail,
.food-impact-page .detail,
.food-analytics-page .detail,
.food-hubs-page .detail{margin-bottom:12px}
.food-collections-page .detail:last-child,
.food-claimants-page .detail:last-child,
.food-locations-page .detail:last-child,
.food-vendors-page .detail:last-child,
.food-impact-page .detail:last-child,
.food-analytics-page .detail:last-child,
.food-hubs-page .detail:last-child{margin-bottom:0}

/* Food admin: progress bar inside table cells */
.food-impact-page .progress,
.food-analytics-page .progress{height:8px}

/* Food admin: badge-info for verified claims */
.badge-info{background:rgba(59,130,246,0.12);border-color:rgba(59,130,246,0.25);color:#2563eb}

/* Food admin: empty-note for empty states */
.empty-note{display:flex;flex-direction:column;align-items:center;gap:12px;padding:3rem;text-align:center}
.empty-note .material-symbols-rounded{font-size:48px;color:var(--line)}
.empty-note p{color:var(--muted);font-size:15px}
.empty-note p b{color:var(--ink)}

/* Food admin: card-head h3 with icon */
.card-head h3{display:flex;align-items:center;gap:8px}
.card-head h3 .material-symbols-rounded{font-size:20px;color:var(--forest)}

/* Food admin: form-group spacing */
.form-group{margin-bottom:1rem}

/* Food admin: card-head meta right */
.card-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px}

/* Food admin: stat-grid responsive fallback */
@media(max-width:640px){
  .stat-grid{grid-template-columns:repeat(2,1fr)}
}

/* =============================================================================
 * Email Admin pages (.email-admin-page)
 * Ported from admin-on-theme markup. Uses brand primitives only.
 * ============================================================================= */

/* Stats grid — same tone scale as applications.php */
.email-admin-page .tone-neutral{background:#eef2ee}
.email-admin-page .tone-pending{background:#fef9ec}
.email-admin-page .tone-approved{background:#edf7ed}
.email-admin-page .tone-rejected{background:#fef2f2}
.email-admin-page .tone-neutral .stat-tile-icon{color:#5b6b60}
.email-admin-page .tone-pending .stat-tile-icon{color:#d97706}
.email-admin-page .tone-approved .stat-tile-icon{color:#16a34a}
.email-admin-page .tone-rejected .stat-tile-icon{color:#dc2626}

/* Email list inside a card */
.email-list{list-style:none;margin:0;padding:0}
.email-list-item{padding:.75rem 0;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:.75rem;align-items:flex-start}
.email-list-item:last-child{border-bottom:none}
.email-list-main{min-width:0;flex:1}
.email-list-recipient{font-weight:600;color:var(--ink);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.email-list-meta{text-align:right;flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:.25rem}

/* Quick links row */
.quick-links{display:flex;gap:.5rem;flex-wrap:wrap}

/* Card list (recommendations) */
.card-list{list-style:none;margin:0;padding:0}
.card-list li{display:flex;gap:8px;align-items:flex-start;font-size:13.5px;color:#41544a;padding:6px 0;border-bottom:1px solid var(--line)}
.card-list li:last-child{border-bottom:none}
.card-list .material-symbols-rounded{font-size:17px;color:var(--forest);margin-top:1px}

/* Code block (monospace in cards) */
.code-block{display:block;font-family:ui-monospace,monospace;font-size:.85rem;background:#ecefe6;padding:.75rem 1rem;border-radius:var(--radius-sm);word-break:break-word;margin:0}

/* Code editor textarea */
.code-editor{font-family:ui-monospace,monospace;font-size:.85rem;line-height:1.5;width:100%;border:1px solid var(--line);border-radius:var(--radius-sm);padding:.75rem 1rem;resize:vertical;outline:0}
.code-editor:focus{border-color:var(--forest);box-shadow:0 0 0 3px rgba(34,139,34,.12)}

/* Code inline */
code{font-family:ui-monospace,monospace;font-size:.8rem;background:#ecefe6;padding:.1rem .4rem;border-radius:.25rem}
.code-missing{background:#fee2e2;color:#991b1b}

/* Validation rows */
.validation-list{list-style:none;margin:0;padding:0}
.validation-row{padding:.6rem 0;border-bottom:1px solid var(--line);display:flex;gap:8px;align-items:flex-start}
.validation-row:last-child{border-bottom:none}
.validation-row code{margin-left:.5rem}
.validation-row div{display:flex;flex-wrap:wrap;gap:.25rem}
.validation-row--ok .material-symbols-rounded{color:#16a34a}
.validation-row--error .material-symbols-rounded{color:#dc2626}
.validation-row--warning .material-symbols-rounded{color:#d97706}

/* Preview host (iframe wrapper) */
.preview-host{background:#f7fbf1;border:1px solid var(--line);border-radius:var(--radius);padding:1rem}
.preview-host iframe{width:100%;height:520px;background:white;border-radius:.5rem;border:1px solid var(--line)}

/* Form footer (action row at bottom of forms) */
.form-footer{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center;margin-top:1.5rem}

/* Config grid */
.config-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem}
.config-item{display:flex;flex-direction:column;gap:.25rem}
.config-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}
.config-value{font-weight:600;color:var(--ink)}

/* Action cards grid */
.action-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem}
.action-card{background:#ecefe6;border-radius:.5rem;padding:1rem;text-align:center;display:flex;flex-direction:column;align-items:center;gap:.5rem}
.action-card-icon{font-size:2rem;color:var(--forest)}
.action-card strong{font-size:.9rem}
.action-card small{font-size:.8rem}

/* Health grid */
.health-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:1rem}
.health-tile{text-align:center;padding:.75rem;background:#ecefe6;border-radius:.5rem}
.health-tile-value{font-size:1.5rem;font-weight:700;color:var(--ink)}
.health-tile-label{font-size:.75rem;text-transform:uppercase;color:var(--muted)}

/* Tone text colours */
.tone-approved-text{color:#16a34a}
.tone-pending-text{color:#d97706}
.tone-rejected-text{color:#dc2626}

/* Email modal */
.email-modal{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center}
.email-modal-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.5);backdrop-filter:blur(4px)}
.email-modal-panel{position:relative;background:white;border-radius:12px;max-width:900px;width:90%;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.email-modal-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--line)}
.email-modal-header h2{margin:0;font-size:1.1rem}
.email-modal-body{flex:1;overflow:auto;padding:1.5rem}
.email-preview-meta{display:flex;flex-direction:column;gap:.5rem;font-size:.9rem;margin-bottom:1rem}
.email-preview-meta strong{font-weight:600}
.email-preview-meta iframe{width:100%;height:400px;border:1px solid var(--line);border-radius:.5rem;background:white}

/* Empty note (centred) */
.empty-note{text-align:center;padding:2rem;color:var(--muted)}
.empty-note .material-symbols-rounded{font-size:2.5rem;color:var(--forest);display:block;margin-bottom:.5rem}
.empty-note p{margin:.5rem 0 0}

/* Filters row */
.filters{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center}

/* Row actions */
.row-actions{display:flex;gap:.4rem;justify-content:flex-end}

/* Truncate cell */
.truncate-cell{max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Pagination row */
.pagination{display:flex;justify-content:center;gap:.5rem;margin-top:1.5rem;flex-wrap:wrap}

/* Form row (side by side) */
.form-row{display:flex;gap:.75rem;align-items:flex-end;flex-wrap:wrap}

/* =============================================================================
 * Schema Check page (.schema-check-page)
 * Ported from admin-on-theme markup. Uses brand primitives only.
 * ============================================================================= */
.schema-check-page .row-missing{background:#fff3f3}
.schema-check-page .row-warning{background:#fff7e6}
.schema-check-page .code-inline{font-family:ui-monospace,monospace}

/* =============================================================================
 * Intake page (.intake-page)
 * Ported from admin-on-theme markup. Uses brand primitives only.
 * ============================================================================= */
.intake-page table.table{min-width:700px}
.intake-page .field input[type=text],
.intake-page .field input[type=number],
.intake-page .field select{width:100%}
.intake-page table .field{padding:8px 10px}

/* Input width helpers inside fields (intake table) */
.field .inp-70{width:70px}.field .inp-80{width:80px}.field .inp-90{width:90px}.field .inp-100{width:100px}

/* Icon size helpers */
.icon-xs{font-size:13px}.icon-sm{font-size:14px}.icon-md{font-size:18px}

/* =============================================================================
   Admin pages scope — all admin-*-page bodyClass selectors
   Tokens only; layout/margin from brand-app shell.
   ============================================================================= */

/* Edit user page */
.admin-edit-user-page .kicker { font-size: 1rem; }
.admin-edit-user-page .required { color: #dc2626; font-weight: 700; margin-left: 2px; }
.admin-edit-user-page code { font-size: 0.75rem; }

/* Create user page */
.admin-create-user-page .required { color: #dc2626; font-weight: 700; margin-left: 2px; }

/* Delete user page */
.admin-delete-user-page .card--narrow { max-width: 600px; margin: 0 auto; }
.admin-delete-user-page .card--danger { background: #fef2f2; border: 1px solid #fecaca; }
.admin-delete-user-page .card-head--danger { text-align: center; border-bottom-color: #fecaca; }

/* Audit / security pages */
.admin-audit-users-page .empty-icon,
.admin-audit-roles-page .empty-icon,
.admin-security-audit-page .empty-icon { font-size: 2.5rem; opacity: 0.3; }
.admin-security-audit-page .mono { font-family: monospace; font-size: 0.875rem; white-space: nowrap; }

/* Analytics / testing pages */
.admin-analytics-page .empty-icon { font-size: 2rem; opacity: 0.3; }
.admin-testing-page .stat-value,
.admin-test-runs-page .stat-value { font-size: 1.5rem; font-weight: 700; }

/* Coming-soon disabled actions */
.coming-soon-disabled { opacity: 0.5; pointer-events: none; }

/* Delete-user danger card variants */
.admin-delete-user-page .card--info { background: var(--mint-2); border: 1px solid var(--line); }
.admin-delete-user-page .card-head--danger { text-align: center; border-bottom-color: #fecaca; }

/* Shared admin utility classes */
.align-end { align-items: end; }
.form-footer--center { justify-content: center; }
.form-footer--top { margin-top: 1rem; padding-top: 0; border-top: none; }
.mono { font-family: monospace; font-size: 0.875rem; white-space: nowrap; }
.desc-bold { font-weight: 500; margin-bottom: 0.25rem; }
.page-badge { padding: 0.5rem 1rem; }
.badge--sm { font-size: 0.7rem; }
.inline-form { display: inline; }
.coming-soon-disabled { opacity: 0.5; pointer-events: none; }
.stat-value { font-size: 1.5rem; font-weight: 700; }
.empty-icon { font-size: 2rem; opacity: 0.3; }
.card--narrow { max-width: 600px; margin: 0 auto; }

/* ================================================================
   Jobs Admin Page — scoped under .jobs-admin-page
   Essential layout tokens for calendar and contractor-assign JS only.
   All other styles use brand tokens (--forest, --mint, --line, etc.).
   ================================================================ */
.jobs-admin-page .calendar-grid {
    grid-template-columns: repeat(7, 1fr);
    gap: 4px;
    min-height: 400px;
}
.jobs-admin-page .calendar-grid > div:first-child,
.jobs-admin-page .calendar-grid > div:nth-child(2),
.jobs-admin-page .calendar-grid > div:nth-child(3),
.jobs-admin-page .calendar-grid > div:nth-child(4),
.jobs-admin-page .calendar-grid > div:nth-child(5),
.jobs-admin-page .calendar-grid > div:nth-child(6),
.jobs-admin-page .calendar-grid > div:nth-child(7) {
    background: var(--mint);
    padding: 0.5rem;
    font-weight: 700;
    font-size: 0.75rem;
    text-align: center;
    color: var(--forest);
    border-radius: var(--radius-sm) var(--radius-sm) 0 0;
}
.jobs-admin-page .calendar-grid > div:not(:first-child):not(:nth-child(2)):not(:nth-child(3)):not(:nth-child(4)):not(:nth-child(5)):not(:nth-child(6)):not(:nth-child(7)) {
    border: 1px solid var(--line);
    padding: 0.5rem;
    min-height: 70px;
    cursor: pointer;
    background: #fff;
    border-radius: 0 0 var(--radius-sm) var(--radius-sm);
    transition: border-color 0.15s;
}
.jobs-admin-page .calendar-grid > div:not(:first-child):not(:nth-child(2)):not(:nth-child(3)):not(:nth-child(4)):not(:nth-child(5)):not(:nth-child(6)):not(:nth-child(7)):hover {
    border-color: var(--forest);
}
.jobs-admin-page .calendar-grid .has-jobs {
    background: var(--mint);
}

/* Week view */
.jobs-admin-page .week-grid {
    display: grid;
    gap: 1px;
    background: var(--line);
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    overflow: hidden;
}

/* Contractor selection card — selected state */
.jobs-admin-page .contractor-card.selected {
    border-color: var(--forest) !important;
    background: var(--mint) !important;
}
.jobs-admin-page .contractor-card.inactive {
    opacity: 0.6;
}

/* Stat tile tone variants for jobs status breakdown */
.stat-tile.tone-rejected { background: #fef2f2; }
.stat-tile.tone-rejected .stat-tile-icon { color: #dc2626; }
.stat-tile.tone-approved .stat-tile-icon { color: var(--forest); }
.stat-tile.tone-pending .stat-tile-icon { color: #f59e0b; }

/* Leantime page overrides */
.leantime-page .grid-2 { margin-bottom: 0; }

/* Leantime: tab nav row */
.leantime-page .tab-nav { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.5rem; }

/* Leantime: chip row inside stat/filter cards */
.leantime-page .chip-row-wrap { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1rem; }

/* Leantime: side-by-side charts in overview tab */
.leantime-page .charts-pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.5rem; margin-bottom: 1.5rem; }

/* Leantime: goals summary card grid */
.leantime-page .goals-summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1rem; }

/* Leantime: chart cards inside dashboard layout */
.leantime-page .dash-grid { display: grid; grid-template-columns: 1fr 320px; gap: 1.5rem; align-items: start; }
@media (max-width: 1024px) { .leantime-page .dash-grid { grid-template-columns: 1fr; } }

/* Leantime: stat tile stat-tile override for metrics grid */
.leantime-page .stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 1rem; }

/* Leantime: progress bar inline decoration (no width — width is dynamic) */
.leantime-page .progress-fill { height: 100%; border-radius: 3px; background: var(--forest); }
.leantime-page .progress-track { height: 6px; background: var(--line); border-radius: 3px; overflow: hidden; }

/* Leantime: ticket group card bottom margin */
.leantime-page .ticket-group-card { margin-bottom: 1.5rem; }

/* Leantime: health score large number */
.leantime-page .health-score { font-size: 3.5rem; font-weight: 900; color: var(--forest); line-height: 1; }

/* Leantime: goal card internal padding */
.leantime-page .goal-card-inner { padding: 1.25rem; }

/* Leantime: milestone table cell sizing */
.leantime-page .milestone-name-col { width: 250px; }
.leantime-page .milestone-pct-col { width: 260px; }
.leantime-page .milestone-done-col { text-align: right; }
.leantime-page .ticket-id-col { width: 80px; }
.leantime-page .ticket-type-col { width: 90px; }
.leantime-page .ticket-status-col { width: 130px; }
.leantime-page .ticket-prio-col { width: 90px; }
.leantime-page .ticket-milestone-col { width: 160px; }
.leantime-page .ticket-assignee-col { width: 150px; }
.leantime-page .ticket-due-col { width: 100px; }

/* Jobs admin: status filter chip row */
.jobs-admin-page .status-chip-row { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1rem; }

/* Jobs admin: payment status chip row */
.jobs-admin-page .payment-chip-row { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.5rem; }

/* Jobs admin: pagination bar */
.jobs-admin-page .pagination-bar { display: flex; justify-content: space-between; align-items: center; padding: 1rem 0; flex-wrap: wrap; gap: 1rem; }

/* Jobs admin: tab content display logic (handled inline via JS toggle, class here for reference) */
.jobs-admin-page .tab-pane { display: none; }
.jobs-admin-page .tab-pane.is-active { display: block; }

/* Jobs admin: status/payment filter chip rows */
.jobs-admin-page .status-chip-row,
.jobs-admin-page .payment-chip-row { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1rem; }
.jobs-admin-page .payment-chip-row { margin-bottom: 1.5rem; }

/* Jobs admin: pagination bar */
.jobs-admin-page .pagination-bar { display: flex; justify-content: space-between; align-items: center; padding: 1rem 0; flex-wrap: wrap; gap: 1rem; }

/* Jobs admin: active pagination page number */
.jobs-admin-page .page-current { background: var(--forest); color: #fff; cursor: default; }

/* Badge size variants */
.badge--sm { font-size: 0.7rem; padding: 1px 6px; }

/* Leantime: dash-grid override for wider sidebar */
.leantime-page .leantime-dash { grid-template-columns: 1fr 320px; }
@media (max-width: 1024px) { .leantime-page .leantime-dash { grid-template-columns: 1fr; } }

/* Leantime: charts-pair grid */
.leantime-page .charts-pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.5rem; margin-bottom: 1.5rem; }
.leantime-page .goals-summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1rem; }
.leantime-page .health-score { font-size: 3.5rem; font-weight: 900; color: var(--forest); line-height: 1; }
.leantime-page .goal-card-inner { padding: 1.25rem; }
.leantime-page .progress-track { height: 6px; background: var(--line); border-radius: 3px; overflow: hidden; }
.leantime-page .ticket-group-card { margin-bottom: 1.5rem; }
.leantime-page .tab-nav { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.5rem; }
.leantime-page .chip-row-wrap { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1rem; }
.leantime-page .milestone-name-col { width: 250px; }
.leantime-page .milestone-pct-col { width: 260px; }
.leantime-page .milestone-done-col { text-align: right; }
.leantime-page .ticket-id-col { width: 80px; }
.leantime-page .ticket-type-col { width: 90px; }
.leantime-page .ticket-status-col { width: 130px; }
.leantime-page .ticket-prio-col { width: 90px; }
.leantime-page .ticket-milestone-col { width: 160px; }
.leantime-page .ticket-assignee-col { width: 150px; }
.leantime-page .ticket-due-col { width: 100px; }

/* ================================================================
   Additional page-scoped layout rules (migrated from inline styles)
   ================================================================ */

/* Jobs admin: contractor assign page */
.jobs-admin-page .contractor-card-wrap { display: flex; flex-direction: column; gap: 0.75rem; }

/* Jobs admin: contractor card internal */
.jobs-admin-page .contractor-card { border: 2px solid var(--line); border-radius: var(--radius); background: #fff; transition: all 0.2s; }
.jobs-admin-page .contractor-card.selected { border-color: var(--forest); background: var(--mint); }
.jobs-admin-page .contractor-card.inactive { opacity: 0.6; }

/* Jobs admin: sticky action bar at bottom */
.jobs-admin-page .sticky-actions { display: flex; justify-content: flex-end; gap: 1rem; padding: 1.5rem; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); margin-top: 1rem; position: sticky; bottom: 1rem; box-shadow: var(--shadow-md); }

/* Jobs admin: admin actions bar */
.jobs-admin-page .admin-actions-bar { display: flex; justify-content: flex-end; gap: 0.75rem; }

/* Jobs admin: card section spacing */
.jobs-admin-page .card-section-gap { margin-bottom: 1.5rem; }

/* Jobs admin: inline flex containers */
.jobs-admin-page .inline-flex { display: flex; }
.jobs-admin-page .flex-wrap { flex-wrap: wrap; }
.jobs-admin-page .flex-col { flex-direction: column; }
.jobs-admin-page .gap-half { gap: 0.5rem; }
.jobs-admin-page .gap-1 { gap: 1rem; }
.jobs-admin-page .gap-2 { gap: 1.5rem; }
.jobs-admin-page .items-center { align-items: center; }
.jobs-admin-page .items-start { align-items: flex-start; }
.jobs-admin-page .justify-between { justify-content: space-between; }
.jobs-admin-page .justify-center { justify-content: center; }

/* Jobs admin: image grid in edit/view2 */
.jobs-admin-page .image-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 0.75rem; }
.jobs-admin-page .image-item-wrap { border: 1px solid var(--line); padding: 0.625rem; border-radius: var(--radius-sm); }
.jobs-admin-page .image-thumb-wrap { position: relative; padding-top: 75%; overflow: hidden; border-radius: 4px; background: var(--mint); margin-bottom: 0.5rem; }
.jobs-admin-page .image-thumb-wrap img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }

/* Jobs admin: form field rows */
.jobs-admin-page .field-group { display: flex; flex-direction: column; gap: 1rem; }

/* Jobs admin: linked quote card (green bg) */
.jobs-admin-page .linked-quote-card { background: #f0fdf4; border: 1px solid var(--forest); margin-bottom: 1.5rem; }

/* Jobs admin: alert/warning card */
.jobs-admin-page .alert-card { border-color: #f59e0b; background: #fffbeb; margin-bottom: 1.5rem; padding: 1rem 1.5rem; }

/* Jobs admin: danger zone card */
.jobs-admin-page .danger-card { border-color: #fca5a5; }
.jobs-admin-page .danger-card .card-head { background: #fef2f2; }

/* Jobs admin: modal overlay */
.jobs-admin-page .modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.9); z-index: 10000; display: flex; align-items: center; justify-content: center; flex-direction: column; }
.jobs-admin-page .modal-dialog { background: #fff; padding: 2rem; border-radius: var(--radius); max-width: 400px; width: 90%; text-align: center; }
.jobs-admin-page .modal-close { position: absolute; top: 1rem; right: 1.5rem; color: #fff; font-size: 2rem; cursor: pointer; font-weight: 700; }

/* Jobs admin: progress bars in view2 */
.jobs-admin-page .progress-bar-wrap { display: flex; align-items: center; gap: 0.75rem; min-width: 120px; }
.jobs-admin-page .progress-bar-track { flex: 1; height: 6px; background: var(--line); border-radius: 3px; overflow: hidden; }
.jobs-admin-page .progress-bar-fill { height: 100%; background: var(--forest); border-radius: 3px; }

/* Jobs admin: deprecation warning */
.jobs-admin-page .deprecation-card { background: #fffbeb; border: 2px solid #f59e0b; border-radius: var(--radius-sm); padding: 15px 20px; margin-bottom: 20px; display: flex; align-items: center; gap: 12px; }

/* Jobs admin: internal info box */
.jobs-admin-page .internal-info-box { display: flex; gap: 0.75rem; align-items: center; flex-wrap: wrap; }

/* Jobs admin: directions panel */
.jobs-admin-page .directions-panel { max-height: 300px; overflow-y: auto; border: 1px solid var(--line); border-radius: var(--radius-sm); background: var(--bg-alt); padding: 1rem; }

/* Jobs admin: calendar event styles */
.jobs-admin-page .calendar-day-cell { border: 1px solid var(--line); padding: 0.5rem; min-height: 70px; cursor: pointer; background: #fff; border-radius: 0 0 var(--radius-sm) var(--radius-sm); transition: border-color 0.15s; }
.jobs-admin-page .calendar-day-cell:hover { border-color: var(--forest); }
.jobs-admin-page .calendar-day-cell.has-jobs { background: var(--mint); }
.jobs-admin-page .calendar-header-cell { background: var(--mint); padding: 0.5rem; font-weight: 700; font-size: 0.75rem; text-align: center; color: var(--forest); border-radius: var(--radius-sm) var(--radius-sm) 0 0; }

/* Jobs admin: chart containers (canvas parents) */
.jobs-admin-page .chart-container { height: 240px; position: relative; }
.jobs-admin-page .chart-container-lg { height: 320px; position: relative; }
.jobs-admin-page .chart-container-xl { height: 360px; position: relative; }

/* Jobs admin: multi-select with explicit height */
.jobs-admin-page select[multiple] { height: 100px; }

/* Jobs admin: override checkbox card */
.jobs-admin-page .override-card { margin-top: 1rem; padding: 0.875rem; background: #fffbeb; border: 1px solid #fde68a; border-radius: var(--radius-sm); }

/* =============================================================================
 * Services admin pages (.services-admin-page) — scope tokens only,
 * layout from brand-app shell. Modal/form layout from brand primitives.
 * ============================================================================= */
.services-admin-page .code-inline {
  font-family: ui-monospace, monospace;
  font-size: 0.75rem;
  background: var(--mint);
  padding: 1px 6px;
  border-radius: 4px;
}

/* Modal overlay */
.services-admin-page .modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(15, 44, 25, 0.4);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
}
.services-admin-page .modal-overlay[hidden] { display: none; }
.services-admin-page .modal-panel {
  background: #ffffff;
  border-radius: var(--radius);
  width: min(560px, 100%);
  max-height: calc(100vh - 2rem);
  overflow-y: auto;
  box-shadow: var(--shadow-md);
}
.services-admin-page .modal-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1.25rem 1.5rem;
  background: var(--bg-alt);
  border-bottom: 1px solid var(--line);
  border-radius: var(--radius) var(--radius) 0 0;
}
.services-admin-page .modal-header h3 { margin: 0; font-size: 1.1rem; font-weight: 700; }
.services-admin-page .modal-close {
  background: var(--mint);
  border: none;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  cursor: pointer;
  font-size: 1.25rem;
  color: var(--muted);
  transition: all 0.2s;
}
.services-admin-page .modal-close:hover { background: var(--line); color: var(--ink); transform: rotate(90deg); }
.services-admin-page .modal-panel form { padding: 1.5rem; display: flex; flex-direction: column; gap: 1rem; }
.services-admin-page .modal-panel .field { gap: 0.4rem; }
.services-admin-page .modal-panel .form-footer { padding: 1rem 1.5rem; background: var(--bg-alt); border-top: 1px solid var(--line); border-radius: 0 0 var(--radius) var(--radius); display: flex; justify-content: flex-end; gap: 0.75rem; }

/* Icon picker button in modal */
.services-admin-page .icon-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  width: 100%;
  padding: 0.55rem 0.85rem;
  background: #ffffff;
  border: 1.5px solid var(--line);
  border-radius: var(--radius-sm);
  cursor: pointer;
  font-family: inherit;
  font-size: 0.85rem;
  text-align: left;
  color: var(--ink);
  transition: all 0.2s;
}
.services-admin-page .icon-btn:hover { border-color: var(--forest); }
.services-admin-page .icon-btn .material-symbols-rounded { font-size: 1.3rem !important; min-width: 1.7rem; text-align: center; color: var(--forest); }

/* Status tabs (services list) */
.services-admin-page .status-tabs { display: flex; gap: 0.25rem; padding: 1rem 0; flex-wrap: wrap; }
.services-admin-page .status-tab {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.5rem 1rem; border-radius: var(--radius-pill);
  background: white; border: 1px solid var(--line);
  color: var(--muted); text-decoration: none; font-size: 0.875rem; font-weight: 600;
  transition: all 0.15s;
}
.services-admin-page .status-tab:hover { border-color: var(--forest); color: var(--forest); }
.services-admin-page .status-tab.active { background: var(--forest); border-color: var(--forest); color: white; }
.services-admin-page .tab-count { background: rgba(0,0,0,0.08); padding: 1px 6px; border-radius: 999px; font-size: 0.75rem; }
.services-admin-page .status-tab.active .tab-count { background: rgba(255,255,255,0.25); }

/* Sort links */
.services-admin-page .sort-link { color: inherit; text-decoration: none; }
.services-admin-page .sort-link:hover { color: var(--forest); }
.services-admin-page .sort-indicator { color: var(--muted); }

/* Inline forms in action cells */
.services-admin-page .inline-form { display: inline; }
.services-admin-page .row-actions { display: flex; flex-wrap: wrap; gap: 0.35rem; align-items: center; }
.services-admin-page .empty-note { text-align: center; padding: 2rem; color: var(--muted); }
.services-admin-page .empty-note .material-symbols-rounded { font-size: 3rem; opacity: 0.3; display: block; margin: 0 auto 1rem; }
.services-admin-page .empty-note p { margin: 0.25rem 0; }
.services-admin-page .empty-note a { color: var(--forest); }

/* Toast notification */
.services-admin-page .toast {
  position: fixed; top: 1.5rem; right: 1.5rem; z-index: 9999;
  min-width: 320px; max-width: 480px; padding: 1rem 1.25rem;
  border-radius: var(--radius-sm); background: white;
  box-shadow: var(--shadow-md); display: flex; align-items: center;
  justify-content: space-between; gap: 0.75rem; font-size: 0.9rem;
  font-weight: 500; border-left: 4px solid; animation: toast-in 0.25s ease;
}
.services-admin-page .toast--success { border-left-color: var(--forest); color: var(--forest); background: var(--mint); }
.services-admin-page .toast--error { border-left-color: var(--red-500); color: var(--red-500); background: #fef2f2; }
.services-admin-page .toast__close { background: none; border: none; font-size: 1.4rem; cursor: pointer; color: inherit; opacity: 0.6; padding: 0; }
.services-admin-page .toast__close:hover { opacity: 1; }
@keyframes toast-in { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }

/* Tabs in edit page */
.services-admin-page .tab-nav { display: flex; gap: 0.25rem; padding: 1rem 0 0; flex-wrap: wrap; border-bottom: 2px solid var(--line); }
.services-admin-page .tab-btn {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.65rem 1.25rem; border-radius: var(--radius-sm) var(--radius-sm) 0 0;
  background: transparent; border: 1px solid transparent; border-bottom: none;
  cursor: pointer; font-size: 0.9rem; font-weight: 600; color: var(--muted);
  transition: all 0.15s; font-family: inherit;
}
.services-admin-page .tab-btn:hover { color: var(--ink); background: var(--mint); }
.services-admin-page .tab-btn.active { background: white; border-color: var(--line); border-bottom-color: white; color: var(--forest); }
.services-admin-page .tab-btn .material-symbols-rounded { font-size: 1.1rem; }
.services-admin-page .tab-badge { background: var(--mint); color: var(--forest); padding: 1px 6px; border-radius: 999px; font-size: 0.7rem; }
.services-admin-page .tab-btn.active .tab-badge { background: var(--forest); color: white; }
.services-admin-page .tab-panels { padding-top: 0; }
.services-admin-page .tab-panel { display: none; }
.services-admin-page .tab-panel.active { display: block; }

/* Service form partial */
.services-admin-page .service-form { display: flex; flex-direction: column; gap: 1.5rem; }
.services-admin-page .service-form .required { color: var(--red-500); font-weight: 700; }

/* Stat value in service detail */
.services-admin-page .stat-value { font-size: 1.5rem; font-weight: 700; color: var(--forest); }

/* Accent text in page-head h1 */
.services-admin-page .accent { color: var(--forest); }

/* =============================================================================
 * Roles & Permissions admin pages (.roles-admin-page) — scope tokens only.
 * ============================================================================= */
.roles-admin-page .code-inline {
  font-family: ui-monospace, monospace;
  font-size: 0.75rem;
  background: var(--mint);
  padding: 1px 6px;
  border-radius: 4px;
}

/* Permission check rows */
.roles-admin-page .permission-check { padding: 0.75rem; background: white; border: 1px solid var(--line); border-radius: var(--radius-sm); margin-bottom: 0.5rem; }
.roles-admin-page .permission-check:hover { border-color: var(--forest); }

/* Danger card */
.roles-admin-page .card--danger { background: #fef2f2; border-color: #fecaca; }
.roles-admin-page .card-head--danger { border-bottom-color: #fecaca; }

/* Simple list */
.roles-admin-page .simple-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.35rem; }



/* =============================================================================
 * Services admin pages (.services-admin-page) scope tokens
 * ============================================================================= */
.services-admin-page .code-inline { font-family: ui-monospace, monospace; font-size: 0.75rem; background: var(--mint); padding: 1px 6px; border-radius: 4px; }
.services-admin-page .modal-overlay { position: fixed; inset: 0; background: rgba(15, 44, 25, 0.4); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); z-index: 2000; display: flex; align-items: center; justify-content: center; padding: 1rem; }
.services-admin-page .modal-overlay[hidden] { display: none; }
.services-admin-page .modal-panel { background: #ffffff; border-radius: var(--radius); width: min(560px, 100%); max-height: calc(100vh - 2rem); overflow-y: auto; box-shadow: var(--shadow-md); }
.services-admin-page .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 1.25rem 1.5rem; background: var(--bg-alt); border-bottom: 1px solid var(--line); border-radius: var(--radius) var(--radius) 0 0; }
.services-admin-page .modal-header h3 { margin: 0; font-size: 1.1rem; font-weight: 700; }
.services-admin-page .modal-close { background: var(--mint); border: none; width: 32px; height: 32px; border-radius: 50%; cursor: pointer; font-size: 1.25rem; color: var(--muted); transition: all 0.2s; }
.services-admin-page .modal-close:hover { background: var(--line); color: var(--ink); transform: rotate(90deg); }
.services-admin-page .modal-panel form { padding: 1.5rem; display: flex; flex-direction: column; gap: 1rem; }
.services-admin-page .modal-panel .field { gap: 0.4rem; }
.services-admin-page .modal-panel .form-footer { padding: 1rem 1.5rem; background: var(--bg-alt); border-top: 1px solid var(--line); border-radius: 0 0 var(--radius) var(--radius); display: flex; justify-content: flex-end; gap: 0.75rem; }
.services-admin-page .icon-btn { display: inline-flex; align-items: center; gap: 0.55rem; width: 100%; padding: 0.55rem 0.85rem; background: #ffffff; border: 1.5px solid var(--line); border-radius: var(--radius-sm); cursor: pointer; font-family: inherit; font-size: 0.85rem; text-align: left; color: var(--ink); transition: all 0.2s; }
.services-admin-page .icon-btn:hover { border-color: var(--forest); }
.services-admin-page .icon-btn .material-symbols-rounded { font-size: 1.3rem !important; min-width: 1.7rem; text-align: center; color: var(--forest); }
.services-admin-page .status-tabs { display: flex; gap: 0.25rem; padding: 1rem 0; flex-wrap: wrap; }
.services-admin-page .status-tab { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1rem; border-radius: var(--radius-pill); background: white; border: 1px solid var(--line); color: var(--muted); text-decoration: none; font-size: 0.875rem; font-weight: 600; transition: all 0.15s; }
.services-admin-page .status-tab:hover { border-color: var(--forest); color: var(--forest); }
.services-admin-page .status-tab.active { background: var(--forest); border-color: var(--forest); color: white; }
.services-admin-page .tab-count { background: rgba(0,0,0,0.08); padding: 1px 6px; border-radius: 999px; font-size: 0.75rem; }
.services-admin-page .status-tab.active .tab-count { background: rgba(255,255,255,0.25); }
.services-admin-page .sort-link { color: inherit; text-decoration: none; }
.services-admin-page .sort-link:hover { color: var(--forest); }
.services-admin-page .sort-indicator { color: var(--muted); }
.services-admin-page .inline-form { display: inline; }
.services-admin-page .row-actions { display: flex; flex-wrap: wrap; gap: 0.35rem; align-items: center; }
.services-admin-page .empty-note { text-align: center; padding: 2rem; color: var(--muted); }
.services-admin-page .empty-note .material-symbols-rounded { font-size: 3rem; opacity: 0.3; display: block; margin: 0 auto 1rem; }
.services-admin-page .empty-note p { margin: 0.25rem 0; }
.services-admin-page .empty-note a { color: var(--forest); }
.services-admin-page .toast { position: fixed; top: 1.5rem; right: 1.5rem; z-index: 9999; min-width: 320px; max-width: 480px; padding: 1rem 1.25rem; border-radius: var(--radius-sm); background: white; box-shadow: var(--shadow-md); display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; font-size: 0.9rem; font-weight: 500; border-left: 4px solid; animation: toast-in 0.25s ease; }
.services-admin-page .toast--success { border-left-color: var(--forest); color: var(--forest); background: var(--mint); }
.services-admin-page .toast--error { border-left-color: var(--red-500); color: var(--red-500); background: #fef2f2; }
.services-admin-page .toast__close { background: none; border: none; font-size: 1.4rem; cursor: pointer; color: inherit; opacity: 0.6; padding: 0; }
.services-admin-page .toast__close:hover { opacity: 1; }
@keyframes toast-in { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
.services-admin-page .tab-nav { display: flex; gap: 0.25rem; padding: 1rem 0 0; flex-wrap: wrap; border-bottom: 2px solid var(--line); }
.services-admin-page .tab-btn { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.65rem 1.25rem; border-radius: var(--radius-sm) var(--radius-sm) 0 0; background: transparent; border: 1px solid transparent; border-bottom: none; cursor: pointer; font-size: 0.9rem; font-weight: 600; color: var(--muted); transition: all 0.15s; font-family: inherit; }
.services-admin-page .tab-btn:hover { color: var(--ink); background: var(--mint); }
.services-admin-page .tab-btn.active { background: white; border-color: var(--line); border-bottom-color: white; color: var(--forest); }
.services-admin-page .tab-btn .material-symbols-rounded { font-size: 1.1rem; }
.services-admin-page .tab-badge { background: var(--mint); color: var(--forest); padding: 1px 6px; border-radius: 999px; font-size: 0.7rem; }
.services-admin-page .tab-btn.active .tab-badge { background: var(--forest); color: white; }
.services-admin-page .tab-panels { padding-top: 0; }
.services-admin-page .tab-panel { display: none; }
.services-admin-page .tab-panel.active { display: block; }
.services-admin-page .service-form { display: flex; flex-direction: column; gap: 1.5rem; }
.services-admin-page .service-form .required { color: var(--red-500); font-weight: 700; }
.services-admin-page .stat-value { font-size: 1.5rem; font-weight: 700; color: var(--forest); }
.services-admin-page .accent { color: var(--forest); }

/* =============================================================================
 * Roles admin pages (.roles-admin-page) scope tokens
 * ============================================================================= */
.roles-admin-page .code-inline { font-family: ui-monospace, monospace; font-size: 0.75rem; background: var(--mint); padding: 1px 6px; border-radius: 4px; }
.roles-admin-page .permission-check { padding: 0.75rem; background: white; border: 1px solid var(--line); border-radius: var(--radius-sm); margin-bottom: 0.5rem; }
.roles-admin-page .permission-check:hover { border-color: var(--forest); }
.roles-admin-page .card--danger { background: #fef2f2; border-color: #fecaca; }
.roles-admin-page .card-head--danger { border-bottom-color: #fecaca; }
.roles-admin-page .simple-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.35rem; }
.roles-admin-page .simple-list li { padding: 0.4rem 0; border-bottom: 1px solid var(--line); display: flex; justify-content: space-between; align-items: center; }
.roles-admin-page .simple-list li:last-child { border-bottom: none; }
.roles-admin-page .stat-value { font-size: 1.5rem; font-weight: 700; color: var(--forest); }

/* =============================================================================
 * Permissions admin pages (.permissions-admin-page) scope tokens
 * ============================================================================= */
.permissions-admin-page .code-inline { font-family: ui-monospace, monospace; font-size: 0.75rem; background: var(--mint); padding: 1px 6px; border-radius: 4px; }
.permissions-admin-page .card--danger { background: #fef2f2; border-color: #fecaca; }
.permissions-admin-page .card-head--danger { border-bottom-color: #fecaca; }
.permissions-admin-page .simple-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.35rem; }
.permissions-admin-page .simple-list li { padding: 0.4rem 0; border-bottom: 1px solid var(--line); display: flex; justify-content: space-between; align-items: center; }
.permissions-admin-page .simple-list li:last-child { border-bottom: none; }
.permissions-admin-page .stat-value { font-size: 1.5rem; font-weight: 700; color: var(--forest); }

/* admin/edit-user.php — moved from inline <style> (scoped under page bodyClass) */
/* Role picker tiles — scoped under admin-edit-user-page */
.admin-edit-user-page .role-tile {
    display: flex;
    align-items: flex-start;
    gap: 0.75rem;
    padding: 0.875rem 1rem;
    border: 2px solid var(--line);
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: border-color 0.15s ease, background 0.15s ease;
}
.admin-edit-user-page .role-tile:hover { border-color: var(--forest); }
.admin-edit-user-page .role-tile.is-checked,
.admin-edit-user-page .role-tile:has(input:checked) {
    border-color: var(--forest);
    background: var(--mint-2);
}
.admin-edit-user-page .role-tile input[type="checkbox"] {
    margin-top: 0.25rem;
    width: 18px;
    height: 18px;
    flex-shrink: 0;
}
.admin-edit-user-page .role-tile-body { flex: 1; min-width: 0; }
.admin-edit-user-page .role-tile-title {
    font-weight: 600;
    color: var(--ink);
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

/* admin/delete-user.php — moved from inline <style> (scoped under page bodyClass) */
/* Delete user page — scoped under admin-delete-user-page */
.admin-delete-user-page .card--danger-zone {
    border: 2px solid #dc2626;
}
.admin-delete-user-page .card-head--danger {
    text-align: center;
    border-bottom-color: #fecaca;
}
.admin-delete-user-page .warning-icon {
    font-size: 3rem;
    color: #dc2626;
    display: block;
    margin-bottom: 0.5rem;
}
.admin-delete-user-page .text-danger { color: #dc2626; }
.admin-delete-user-page .text-danger-dark { color: #991b1b; margin-bottom: 0.5rem; }
.admin-delete-user-page .text-center { text-align: center; }
.admin-delete-user-page .mb-2 { margin-bottom: 1.5rem; }
.admin-delete-user-page .user-avatar-row {
    display: flex;
    align-items: center;
    gap: 1rem;
    margin-bottom: 1rem;
}
.admin-delete-user-page .user-avatar {
    width: 50px;
    height: 50px;
    background: var(--forest);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-weight: 700;
    font-size: 1.25rem;
}
.admin-delete-user-page .fw-600 { font-weight: 600; }
.admin-delete-user-page .text-muted { color: var(--muted); }
.admin-delete-user-page .danger-list {
    color: #7f1d1d;
    line-height: 1.7;
    padding-left: 1.25rem;
}

/* admin/audit/users.php — moved from inline <style> (scoped under page bodyClass) */
/* Audit report sections — scoped under admin-audit-users-page */
.admin-audit-users-page .audit-section {
    background: var(--mint-2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    margin-bottom: 1.25rem;
    overflow: hidden;
}
.admin-audit-users-page .audit-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 1rem;
    padding: 1.25rem 1.5rem;
    background: var(--surface);
    border-bottom: 1px solid var(--line);
    flex-wrap: wrap;
}
.admin-audit-users-page .audit-title {
    margin: 0 0 0.25rem;
    font-size: 1.25rem;
}
.admin-audit-users-page .audit-subtitle {
    margin: 0;
    color: var(--muted);
    font-size: 0.9rem;
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
}
.admin-audit-users-page .audit-meta {
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
    align-items: center;
}
.admin-audit-users-page .audit-flags {
    padding: 0.75rem 1.5rem;
    background: rgba(220,38,38,0.05);
    border-bottom: 1px solid var(--line);
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
}
.admin-audit-users-page .audit-body {
    padding: 1.25rem 1.5rem;
    display: grid;
    gap: 1rem;
}
.admin-audit-users-page .audit-category {
    background: var(--surface);
    border-radius: var(--radius-sm);
    padding: 1rem 1.25rem;
}
.admin-audit-users-page .audit-category-title {
    margin: 0 0 0.5rem;
    font-size: 0.95rem;
    color: var(--forest);
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.admin-audit-users-page .perm-category { margin-bottom: 0.75rem; }
.admin-audit-users-page .perm-category-title {
    margin: 0 0 0.25rem;
    font-size: 0.85rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--forest);
}
.admin-audit-users-page .perm-audit-list {
    margin: 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: 0.4rem;
}
.admin-audit-users-page .perm-audit-list li {
    padding: 0.4rem 0.6rem;
    background: var(--mint-2);
    border-radius: var(--radius-sm);
    border-left: 3px solid var(--forest);
    font-size: 0.9rem;
}
.admin-audit-users-page .audit-footer {
    padding: 1rem 1.5rem;
    background: var(--surface);
    border-top: 1px solid var(--line);
    display: flex;
    gap: 0.5rem;
    justify-content: flex-end;
}
.admin-audit-users-page .card--narrow { max-width: 900px; margin: 0 auto 1.5rem; }
.admin-audit-users-page .issue-group { margin-bottom: 1rem; }
.admin-audit-users-page .issue-title {
    margin: 0 0 0.5rem;
    font-size: 0.9rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--muted);
}
.admin-audit-users-page .badge-row { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.admin-audit-users-page .empty-icon { font-size: 2.5rem; opacity: 0.3; }
.admin-audit-users-page .count-badge { margin-left: 0.5rem; }
.admin-audit-users-page .sub { opacity: 0.7; }
.admin-audit-users-page .code-username { font-size: 0.85rem; font-weight: 400; color: var(--muted); }
.admin-audit-users-page .code-sm { font-size: 0.7rem; opacity: 0.7; }
.admin-audit-users-page .code-sm-muted { font-size: 0.7rem; color: var(--muted); }
@media print {
    .admin-audit-users-page .audit-footer { display: none; }
    .admin-audit-users-page .audit-section { break-inside: avoid; }
}

/* admin/audit/roles.php — moved from inline <style> (scoped under page bodyClass) */
/* Audit report sections — scoped under admin-audit-roles-page */
.admin-audit-roles-page .audit-section {
    background: var(--mint-2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    margin-bottom: 1.25rem;
    overflow: hidden;
}
.admin-audit-roles-page .audit-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 1rem;
    padding: 1.25rem 1.5rem;
    background: var(--surface);
    border-bottom: 1px solid var(--line);
    flex-wrap: wrap;
}
.admin-audit-roles-page .audit-title {
    margin: 0 0 0.25rem;
    font-size: 1.25rem;
}
.admin-audit-roles-page .audit-subtitle {
    margin: 0;
    color: var(--muted);
    font-size: 0.9rem;
}
.admin-audit-roles-page .audit-meta {
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
    align-items: center;
}
.admin-audit-roles-page .audit-body {
    padding: 1.25rem 1.5rem;
    display: grid;
    gap: 1rem;
}
.admin-audit-roles-page .audit-category {
    background: var(--surface);
    border-radius: var(--radius-sm);
    padding: 1rem 1.25rem;
}
.admin-audit-roles-page .audit-category-title {
    margin: 0 0 0.5rem;
    font-size: 0.95rem;
    color: var(--forest);
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.admin-audit-roles-page .perm-audit-list {
    margin: 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: 0.5rem;
}
.admin-audit-roles-page .perm-audit-list li {
    padding: 0.5rem 0.75rem;
    background: var(--mint-2);
    border-radius: var(--radius-sm);
    border-left: 3px solid var(--forest);
}
.admin-audit-roles-page .audit-footer {
    padding: 1rem 1.5rem;
    background: var(--surface);
    border-top: 1px solid var(--line);
    display: flex;
    gap: 0.5rem;
    justify-content: flex-end;
}
.admin-audit-roles-page .audit-empty {
    padding: 1.5rem;
    text-align: center;
}
.admin-audit-roles-page .card--narrow { max-width: 900px; margin: 0 auto 1.5rem; }
.admin-audit-roles-page .issue-group { margin-bottom: 1.5rem; }
.admin-audit-roles-page .issue-title {
    margin: 0 0 0.5rem;
    font-size: 0.9rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--muted);
}
.admin-audit-roles-page .badge-row { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.5rem; }
.admin-audit-roles-page .empty-icon { font-size: 2.5rem; opacity: 0.3; }
.admin-audit-roles-page .count-badge { margin-left: 0.5rem; }
.admin-audit-roles-page .code-username { font-size: 0.85rem; font-weight: 400; color: var(--muted); }
.admin-audit-roles-page .code-sm-muted { font-size: 0.75rem; color: var(--muted); }
@media print {
    .admin-audit-roles-page .audit-footer { display: none; }
    .admin-audit-roles-page .audit-section { break-inside: avoid; }
}

/* admin/user-roles.php — moved from inline <style> (scoped under page bodyClass) */
/* Role tiles — scoped under admin-user-roles-page */
.admin-user-roles-page .role-tile {
    display: flex;
    align-items: flex-start;
    gap: 0.75rem;
    padding: 0.875rem 1rem;
    border: 2px solid var(--line);
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: border-color 0.15s ease, background 0.15s ease;
}
.admin-user-roles-page .role-tile:hover { border-color: var(--forest); }
.admin-user-roles-page .role-tile.is-checked,
.admin-user-roles-page .role-tile:has(input:checked) { border-color: var(--forest); background: var(--mint-2); }
.admin-user-roles-page .role-tile input[type="checkbox"] {
    margin-top: 0.25rem;
    width: 18px;
    height: 18px;
    flex-shrink: 0;
}
.admin-user-roles-page .role-tile-body { flex: 1; min-width: 0; }
.admin-user-roles-page .role-tile-title {
    font-weight: 600;
    color: var(--ink);
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

/* Permission rows */
.admin-user-roles-page .perm-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}
.admin-user-roles-page .perm-row {
    display: flex;
    align-items: flex-start;
    gap: 0.75rem;
    padding: 0.875rem 1rem;
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    transition: background 0.1s;
}
.admin-user-roles-page .perm-row--direct,
.admin-user-roles-page .perm-row--both { background: var(--mint-2); border-color: var(--forest); }
.admin-user-roles-page .perm-row--expired { background: #fef3c7; border-color: var(--amber); }
.admin-user-roles-page .perm-row--inherited { opacity: 0.75; }
.admin-user-roles-page .perm-row-icon { flex-shrink: 0; margin-top: 0.125rem; }
.admin-user-roles-page .perm-row-info { flex: 1; min-width: 0; }
.admin-user-roles-page .perm-row-title {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
    margin-bottom: 0.25rem;
}
.admin-user-roles-page .perm-row-controls {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-shrink: 0;
}
.admin-user-roles-page .perm-row-controls input[type="date"] {
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    padding: 0.25rem 0.5rem;
    font-size: 0.875rem;
    width: 150px;
}
.admin-user-roles-page .perm-filter-row { flex-direction: row; gap: 0.75rem; margin-bottom: 1rem; }
.admin-user-roles-page .perm-search-input { flex: 1; }
.admin-user-roles-page .muted-dot { padding: 0.125rem 0.5rem; opacity: 0.4; }
.admin-user-roles-page .muted-text { opacity: 0.5; }
.admin-user-roles-page .nowrap { white-space: nowrap; }
.admin-user-roles-page .btn-row { display: flex; gap: 0.5rem; }

/* admin/role-permissions.php — moved from inline <style> (scoped under page bodyClass) */
/* Permission row tiles — scoped under admin-role-permissions-page */
.admin-role-permissions-page .perm-row {
    display: flex;
    align-items: flex-start;
    gap: 0.75rem;
    padding: 0.75rem 1rem;
    border: 2px solid transparent;
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: border-color 0.15s ease, background 0.15s ease;
}
.admin-role-permissions-page .perm-row:hover { border-color: var(--forest); }
.admin-role-permissions-page .perm-row.is-checked,
.admin-role-permissions-page .perm-row:has(input:checked) { border-color: var(--forest); background: var(--mint-2); }
.admin-role-permissions-page .perm-row input[type="checkbox"] {
    margin-top: 0.25rem;
    width: 18px;
    height: 18px;
    flex-shrink: 0;
}

/* admin/security-audit.php — moved from inline <style> (scoped under page bodyClass) */
/* Security audit row highlight — scoped under admin-security-audit-page */
.admin-security-audit-page .row-error td { background: #fff5f5; }


/* Services admin: table column helpers */
.services-admin-page .table .col-icon { width: 50px; text-align: center; font-size: 1.5rem; }
.services-admin-page .table .col-num { text-align: right; }
.services-admin-page .empty-note p { margin: 0.25rem 0; }
.services-admin-page .empty-note a { color: var(--forest); }

/* Roles admin: kicker size override for small kickers */
.roles-admin-page .kicker { font-size: 0.75rem; }

/* Permissions admin: kicker size override */
.permissions-admin-page .kicker { font-size: 0.75rem; }


/* Shared: card-note padding overrides for empty states */
.services-admin-page .card-note { padding: 1rem 0; }
.services-admin-page .card-note:first-child { padding-top: 0; }
.roles-admin-page .card-note { padding: 1rem 0; }
.permissions-admin-page .card-note { padding: 1rem 0; }

/* ============================================================
   Food admin pages — scoped brand component additions
   ============================================================ */

/* Kicker danger variant (anti-abuse section) */
.kicker--danger{color:var(--red-500)}
.kicker--danger::before{background:var(--red-500)}

/* Danger / success outline buttons (suspension actions) */
.btn-danger-outline{border-color:var(--red-500);color:var(--red-500)}
.btn-danger-outline:hover{background:#fee2e2}
.btn-success-outline{border-color:#16a34a;color:#16a34a}
.btn-success-outline:hover{background:#dcfce7}

/* Text kg — key metric styling */
.text-kg{color:#059669;font-weight:700}

/* Queue section headers (collection inspection) */
.queue-band{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.25rem;border-bottom:1px solid var(--line)}
.queue-band--primary{background:rgba(16,185,129,.05);color:#065f46}
.queue-band--secondary{background:rgba(245,158,11,.05);border-top:2px solid var(--line);color:#92400e}
.queue-band h4{margin:0;font-size:1rem}

/* Purple category badge (collection items) */
.badge-purple{background:rgba(139,92,246,.1);color:#8b5cf6}

/* Address block (locations form) */
.address-block{background:var(--mint-2);border:1px solid var(--line);border-radius:var(--radius);padding:1.25rem;margin-bottom:var(--sp-3)}
.address-block .form-group{margin-bottom:var(--sp-2)}
.address-block .form-group:last-child{margin-bottom:0}

/* Form actions row (create/edit pages) */
.form-actions{display:flex;gap:1rem;padding-top:1rem;border-top:1px solid var(--line)}

/* Leaderboard podium */
.podium{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:1.5rem;align-items:end}
.podium__item{display:flex;flex-direction:column;align-items:center;gap:.5rem}
.podium__rank{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:800;font-size:1.2rem}
.podium__name{font-weight:700;color:var(--muted);font-size:.8rem}
.podium__email{font-size:.75rem;color:var(--muted);text-align:center;max-width:120px;word-break:break-all}
.podium__card{background:var(--mint-2);border-radius:var(--radius);padding:1.25rem;width:100%;text-align:center;border:1px solid var(--line)}
.podium__kg{font-size:1.75rem;font-weight:900;color:#059669}
.podium__claims{font-size:.78rem;color:var(--muted);margin-top:.25rem}

/* Rank numbers in leaderboard table */
.rank-num{font-weight:700}
.rank-num--1{color:#ffd700}
.rank-num--2{color:#c0c0c0}
.rank-num--3{color:#cd7f32}

/* Top-3 row highlight in rankings table */
.row-top3{background:rgba(16,185,129,.04)}

/* Region cards (impact report) */
.region-card{border-top:4px solid var(--forest);background:var(--mint-2);border-radius:var(--radius);padding:1.25rem;border-left:1px solid var(--line);border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.region-card__name{font-size:1rem;font-weight:700;margin-bottom:.5rem}
.region-card__kg{font-size:1.5rem;font-weight:800;color:var(--forest)}
.region-card__kg span{font-size:.85rem;font-weight:400;color:var(--muted)}
.region-card__collections{font-size:.85rem;color:var(--muted);margin-top:.25rem}

/* Today row highlight in time series */
.row-today{background:rgba(34,139,34,.08)}

/* Vendor bars (analytics dashboard) */
.vendor-bars{display:flex;flex-direction:column;gap:1rem}
.vendor-bar{display:flex;align-items:center;gap:1rem}
.vendor-bar__name{flex:0 0 140px;font-weight:600;font-size:.9rem}
.vendor-bar__track{flex:1;background:var(--mint);height:12px;border-radius:6px;overflow:hidden}
.vendor-bar__fill{background:var(--forest);height:100%;border-radius:6px}
.vendor-bar__count{flex:0 0 110px;text-align:right;color:var(--muted);font-size:.85rem}

/* Fair-use stat large number */
.fair-use-stat{font-size:3.5rem;font-weight:800;color:var(--amber);line-height:1;margin-bottom:.5rem}
.fair-use-label{font-weight:700;font-size:1rem;margin-bottom:1rem}

/* Hub stat tiles (distribution hubs page) */
.hub-tile{display:flex;flex-direction:column;gap:.75rem}
.hub-tile__head{display:flex;align-items:center;gap:.5rem}
.hub-tile__head .material-symbols-rounded{font-size:1.5rem}
.hub-tile__numbers{display:flex;justify-content:space-between;align-items:baseline}
.hub-tile__count{font-size:2rem;font-weight:900;color:var(--forest)}
.hub-tile__meta{font-size:.78rem;color:var(--muted);text-align:right}
.hub-tile__vendors{font-size:.78rem;color:var(--muted);margin-top:.5rem}

/* Location banner (vendor edit) */
.location-banner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;padding:1rem 1.25rem}

/* Field textarea stack variant */
.field--stack{flex-direction:column;align-items:stretch}

/* Code token inside detail values */
.detail-code{background:var(--mint);padding:.1rem .4rem;border-radius:4px}

/* Suspension form grid */
.suspension-form-grid{display:grid;grid-template-columns:160px 1fr 160px 200px auto;gap:.75rem;align-items:end;flex-wrap:wrap}

/* Word-break on email/code in tables */
.code-wrap{word-break:break-all}

/* Quick nav row */
.quick-nav{display:flex;gap:.75rem;flex-wrap:wrap;margin-bottom:1rem}

/* Region cards grid override */
.region-cards{gap:1rem}

/* Fair-use body padding */
.fair-use-body{text-align:center;padding:2rem 1.5rem}

/* Photo grid item thumbnail — fixed size variant used in collection inspection */
.photo-grid__item--thumb{width:60px;height:60px;border-radius:.4rem;border:1px solid var(--line);object-fit:cover;cursor:zoom-in}

/* Share message textarea (collection inspection) */
.share-textarea{height:110px;font-family:monospace;font-size:.82rem;line-height:1.4;resize:vertical;border:0;background:transparent}

/* Audit event type badge */
.badge-event{background:rgba(59,130,246,.1);color:#2563eb}

/* Today badge margin in tables */
.badge-today{margin-left:.5rem}

/* services admin — qar tab chrome (moved from inline styles) */
.services-admin-page .qar-icon-sm{font-size:1rem}
.services-admin-page .qar-push-right{margin-left:auto}
.services-admin-page .qar-row{display:flex;align-items:center;gap:.75rem}
.services-admin-page .qar-opt-add-row{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.5rem}
.services-admin-page .qar-grid-2col{display:grid;grid-template-columns:1fr 120px;gap:.75rem;margin-top:.75rem}
.services-admin-page .qar-text-dim{color:var(--muted);font-size:.8rem}
.services-admin-page .qar-hint-tight{margin:.35rem 0 0}
.services-admin-page .qar-field-tight{margin-bottom:.75rem}
.services-admin-page .qar-push-down{margin-top:1.25rem}
.services-admin-page .qar-inherit-badge .material-symbols-outlined{font-size:.85rem;vertical-align:-2px}

/* ---- Scoped tokens for admin page bodyClass values ---- */

/* .page-head children */
.page-eyebrow{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--forest);margin-bottom:6px}
.page-title{font-family:var(--font-display);font-weight:800;font-size:clamp(22px,2.5vw,30px);letter-spacing:-.02em;color:var(--ink)}
.page-subtitle{color:var(--muted);font-size:14px;margin-top:4px}

/* Section title */
.section-title{font-family:var(--font-display);font-weight:700;font-size:18px;color:var(--ink);margin-bottom:16px;margin-top:32px}

/* Alert variants not covered by brand base */
.alert-success{background:#dcfce7;border-color:#bbf7d0;color:#166534}
.alert-danger{background:#fee2e2;border-color:#fecaca;color:#991b1b}
.alert-info{background:var(--mint);border-color:#c4e2ca;color:var(--forest-800)}
.alert-warning{background:#fef3c7;border-color:#fde68a;color:#92400e}

/* Badge variants */
.badge-success{background:#dcfce7;color:#166534}
.badge-danger{background:#fee2e2;color:#991b1b}
.badge-info{background:#dbeafe;color:#1e40af}
.badge-warning{background:#fef3c7;color:#92400e}
.badge-secondary{background:#f1f5f9;color:#475569}
.badge-outline{background:transparent;border:1px solid var(--line);color:var(--ink)}

/* Form scoped */
.admin-page .form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}
.admin-page .form-group{margin-bottom:16px}
.admin-page .form-label{display:block;font-size:13px;font-weight:600;color:var(--ink);margin-bottom:4px}
.admin-page .form-label--required::after{content:" *";color:#dc2626}
.admin-page .form-input{width:100%;padding:8px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);font:inherit;color:var(--ink);background:#fff;transition:border-color .2s,box-shadow .2s}
.admin-page .form-input:focus{outline:0;border-color:var(--forest);box-shadow:0 0 0 3px rgba(34,139,34,.12)}
.admin-page .form-select{width:100%;padding:8px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);font:inherit;color:var(--ink);background:#fff;transition:border-color .2s,box-shadow .2s}
.admin-page .form-select:focus{outline:0;border-color:var(--forest);box-shadow:0 0 0 3px rgba(34,139,34,.12)}
.admin-page .form-hint{font-size:12px;color:var(--muted);margin-top:4px}
.admin-page .form-hint--error{color:#dc2626}
.admin-page .form-section{margin-bottom:24px}
.admin-page .col-span-2{grid-column:1/-1}

/* Table scoped */
.admin-page .table-wrap{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:auto}
.admin-page .table{width:100%;border-collapse:collapse;font-size:14px}
.admin-page .table th,.admin-page .table td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--line)}
.admin-page .table th{background:var(--bg-alt);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.admin-page .table tbody tr:hover{background:var(--mint-2)}

/* Detail table (inside card-body) */
.admin-page .detail-table{width:100%;border-collapse:collapse;font-size:14px}
.admin-page .detail-table th,.admin-page .detail-table td{padding:8px 0;border-bottom:1px solid var(--line)}
.admin-page .detail-table th{font-weight:600;color:var(--muted);font-size:12px;text-transform:uppercase;width:140px;padding-right:16px}

/* Card scoped */
.admin-page .card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.admin-page .card-head{padding:12px 16px;border-bottom:1px solid var(--line);background:var(--bg-alt)}
.admin-page .card-head h3{font-family:var(--font-display);font-weight:700;font-size:15px;margin:0}
.admin-page .card-body{padding:16px}
.admin-page .card-foot{padding:12px 16px;border-top:1px solid var(--line);background:var(--bg-alt)}
.admin-page .col-span-2{grid-column:1/-1}

/* Grid scoped */
.admin-page .grid{display:grid;gap:1.5rem}
.admin-page .grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}
@media (max-width:640px){.admin-page .grid-2{grid-template-columns:1fr}}

/* Privacy & Safeguarding panel */
.admin-page .privacy-box{background:var(--bg-alt);border:1px solid var(--line);border-radius:var(--radius-sm);padding:1.25rem;margin-bottom:1.5rem}
.admin-page .radio-stack{display:flex;flex-direction:column;gap:0.75rem;margin-top:0.5rem}
.admin-page .radio-option{display:flex;align-items:flex-start;gap:0.5rem;cursor:pointer}
.admin-page .radio-option input[type="radio"]{margin-top:0.25rem}
.admin-page .radio-option strong{display:inline-flex;align-items:center;gap:6px}
.admin-page .radio-option strong .material-symbols-rounded{font-size:18px;color:var(--forest)}
.admin-page .field-check label .material-symbols-rounded{font-size:18px;color:var(--forest);vertical-align:-3px;margin-right:4px}

/* Pagination scoped */
.admin-page .pagination{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.admin-page .pagination a,.admin-page .pagination span{min-width:34px;height:34px;display:grid;place-items:center;border-radius:8px;border:1px solid var(--line);font-size:13.5px;font-weight:500;color:var(--ink);background:#fff;padding:0 8px}
.admin-page .pagination a:hover{border-color:var(--forest);color:var(--forest)}

/* Empty state scoped */
.admin-page .empty-state{text-align:center;padding:48px 24px;color:var(--muted)}
.admin-page .empty-state h3{font-family:var(--font-display);font-size:18px;color:var(--ink);margin-bottom:6px}
.admin-page .empty-state p{margin-bottom:18px;font-size:14px}

/* Breadcrumb scoped */
.admin-page .breadcrumb{display:flex;gap:8px;align-items:center;font-size:13px;color:var(--muted);margin-bottom:12px}
.admin-page .breadcrumb a{color:var(--muted)}
.admin-page .breadcrumb a:hover{color:var(--forest)}
.admin-page .breadcrumb-sep{color:var(--line)}

/* Filter bar */
.admin-page .filter-bar{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;padding:12px 16px;background:var(--bg-alt);border-radius:var(--radius-sm);margin-bottom:16px}
.admin-page .filter-bar .form-group{margin-bottom:0}

/* Cell helpers */
.admin-page .code{font-family:monospace;background:var(--bg-alt);padding:2px 6px;border-radius:4px;font-size:13px}

/* Button size tweaks in tables */
.admin-page .table .btn{padding:4px 10px;font-size:13px}

/* Back link */
.back-link{display:inline-flex;align-items:center;gap:6px;color:var(--muted);margin-bottom:1rem;font-size:14px}
.back-link:hover{color:var(--forest)}

/* ponytail: inline-style cleanup additions */
.admin-page .u-mar-bottom-1{margin-bottom:1rem}
.admin-page .u-ml-1{margin-left:.25rem}
.admin-page .u-mb-1{margin-bottom:1rem}
.admin-page .u-mb-half{margin-bottom:.5rem}
.admin-page .u-mt-half{margin-top:.5rem}
.admin-page .u-color-danger{color:#991b1b}
.admin-page .u-border-dashed{border-style:dashed}
.admin-page .u-border-forest{border-color:var(--forest)}
.admin-page .u-modal-close{background:none;border:none;font-size:1.5rem;cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center}
.admin-page .u-mono{font-family:monospace}
.admin-page .u-word-break{word-break:break-all}
.admin-page .u-pill{padding:.1rem .55rem;border-radius:999px;font-size:.7rem;font-weight:600}
.admin-page .u-pill-blue{background:#e0e7ff;color:#4338ca}
.admin-page .u-pill-green{background:#dcfce7;color:#166534}
.admin-page .u-pill-red{background:#fee2e2;color:#991b1b}
.admin-page .u-pill-yellow{background:#fef3c7;color:#92400e}
.admin-page .u-pill-purple{background:#dbeafe;color:#1e40af}
.admin-page .u-pill-indigo{background:#e0e7ff;color:#3730a3}
.admin-page .u-ml-auto{margin-left:auto}
.admin-page .u-flex-1{flex:1}
.admin-page .u-gap-half{gap:.25rem}
.admin-page .u-ml-1{margin-left:.25rem}
.admin-page .u-mb-1{margin-bottom:1rem}
.admin-page .u-mb-half{margin-bottom:.5rem}
.admin-page .u-color-danger{color:#991b1b}
.admin-page .u-border-dashed{border-style:dashed}
.admin-page .u-border-forest{border-color:var(--forest)}
.admin-page .u-modal-close{background:none;border:none;font-size:1.5rem;cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center}
.admin-page .u-mono{font-family:monospace}
.admin-page .u-word-break{word-break:break-all}
.admin-page .u-ml-1{margin-left:.25rem}
.admin-page .u-mb-1{margin-bottom:1rem}
.admin-page .u-mb-half{margin-bottom:.5rem}
.admin-page .u-color-danger{color:#991b1b}
.admin-page .u-border-dashed{border-style:dashed}
.admin-page .u-border-forest{border-color:var(--forest)}
.admin-page .u-mar-bottom-2{margin-bottom:2rem}
.admin-page .u-mar-top-2{margin-top:2rem}
.admin-page .u-pad-top-1{padding-top:1rem}
.admin-page .u-pad-top-2{padding-top:2rem}
.admin-page .u-pad-1{padding:1rem}
.admin-page .u-pad-1-5{padding:1.5rem}
.admin-page .u-mono{font-family:monospace}
.admin-page .u-inline{display:inline}
.admin-page .u-inline-flex{display:inline-flex}
.admin-page .u-w-full{width:100%}
.admin-page .u-max-w-300{max-width:300px}
.admin-page .u-min-w-0{min-width:0}
.admin-page .u-flex{display:flex}
.admin-page .u-flex-wrap{flex-wrap:wrap}
.admin-page .u-flex-col{flex-direction:column}
.admin-page .u-flex-center{align-items:center}
.admin-page .u-flex-end{align-items:flex-end}
.admin-page .u-flex-1{flex:1}
.admin-page .u-flex-shrink-0{flex-shrink:0}
.admin-page .u-justify-between{justify-content:space-between}
.admin-page .u-justify-end{justify-content:flex-end}
.admin-page .u-gap-1{gap:.5rem}
.admin-page .u-gap-2{gap:1rem}
.admin-page .u-gap-3{gap:1.5rem}
.admin-page .u-gap-4{gap:2rem}
.admin-page .u-text-right{text-align:right}
.admin-page .u-text-center{text-align:center}
.admin-page .u-border-top{border-top:1px solid var(--line)}
.admin-page .u-border-bottom{border-bottom:1px solid var(--line)}
.admin-page .u-color-muted{color:var(--muted)}
.admin-page .u-color-amber{color:var(--amber)}
.admin-page .u-color-forest{color:var(--forest)}
.admin-page .u-bg-alt{background:var(--bg-alt)}
.admin-page .u-rounded-sm{border-radius:var(--radius-sm)}
.admin-page .u-rounded-pill{border-radius:var(--radius-pill)}
.admin-page .u-overflow-auto{overflow:auto}
.admin-page .u-overflow-hidden{overflow:hidden}
.admin-page .u-overflow-y-auto{overflow-y:auto}
.admin-page .u-relative{position:relative}
.admin-page .u-opacity-50{opacity:.5}
.admin-page .u-border{border:1px solid var(--line)}
.admin-page .u-border-forest{border-color:var(--forest)}
.admin-page .u-font-sm{font-size:.85rem}
.admin-page .u-font-bold{font-weight:700}
.admin-page .u-cursor-pointer{cursor:pointer}
.admin-page .u-white-space-nowrap{white-space:nowrap}
.admin-page .u-object-fit-cover{object-fit:cover}
.admin-page .u-display-grid{display:grid}
.admin-page .u-grid-cols-2{grid-template-columns:repeat(2,1fr)}
.admin-page .u-grid-cols-auto{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.admin-page .u-grid-cols-auto-fill{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}
.admin-page .u-grid-gap-1{gap:.5rem}
.admin-page .u-grid-gap-2{gap:1rem}
.admin-page .u-mb-0{margin-bottom:0}
/* payments/exclusions.php */
.admin-page .u-icon-md{font-size:1.25rem}
/* payments/mi.php */
.admin-page .u-max-w-200{max-width:200px}
/* payments/square-mi.php */
.admin-page .u-code-sm{font-size:.8rem}
/* contractor-rates/create.php */
.admin-page .u-contractor-check{display:flex;align-items:center;gap:.5rem}
/* contractor-rates/edit.php */
.admin-page .u-mar-top-2{margin-top:2rem}
.admin-page .u-contractor-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.75rem;margin-top:1rem}
.admin-page .u-rate-summary-grid{grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1rem}
/* settings/icons.php */
.admin-page .u-form-min-w{min-width:200px}
.admin-page .u-form-min-w-lg{min-width:220px}
.admin-page .u-form-min-w-md{min-width:160px}
.admin-page .u-icon-lg{font-size:2rem}
.admin-page .u-icon-search{min-width:220px;max-width:360px;border-radius:50px}
.admin-page .u-icon-label{color:#333}
.admin-page .u-code-copy{padding:1px 7px}
.admin-page .u-icon-empty{padding:2.5rem;color:#999}
/* gamified_testing/create.php */
.admin-page .u-pad-top-none{padding-top:0}
.admin-page .u-action-btn{width:50px;height:50px;border-radius:var(--radius-pill);border:2px solid var(--forest);background:#fff;color:var(--forest);font-size:1.25rem;cursor:pointer;display:grid;place-items:center}
.admin-page .u-action-btn--fail{border-color:var(--red-500);color:var(--red-500)}
.admin-page .u-badge-lg{padding:.5rem 1rem}
.admin-page .u-steps-label{font-weight:600;text-transform:uppercase;color:var(--muted);display:block;margin-bottom:.5rem}
.admin-page .u-steps-list{margin:0;padding-left:1.25rem;font-size:.85rem}
.admin-page .u-preview-card{max-width:300px;margin:0 auto;border-radius:15px;overflow:hidden}
/* migrations.php */
.admin-page .u-italic{font-style:italic}
.admin-page .u-search-wrap{flex:1;gap:.5rem;padding:.25rem .5rem}
.admin-page .u-search-input{flex:1;border:none;background:transparent;padding:.5rem;outline:none}
.admin-page .u-mig-meta{gap:1rem;margin-bottom:1rem;font-size:.9rem}
.admin-page .u-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1000;align-items:center;justify-content:center;background:rgba(0,0,0,.5)}
.admin-page .u-modal-content{background:#fff;border-radius:12px;max-width:800px;width:90%;max-height:90vh;display:flex;flex-direction:column;position:relative}
.admin-page .u-modal-header{padding:1rem 1.5rem;border-bottom:1px solid var(--line)}
.admin-page .u-modal-body{padding:1.5rem;overflow-y:auto}
.admin-page .u-modal-pre{margin:0;padding:1rem;background:#1a1a1a;color:#e2e8f0;border-radius:8px;font-size:.85rem;line-height:1.5;overflow-x:auto}
.admin-page .u-modal-footer{padding:1rem 1.5rem;border-top:1px solid var(--line);justify-content:flex-end}
/* catalogue/index.php & edit.php */
.catalogue-import-form{display:inline-flex;margin:0}
.catalogue-file-input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.admin-page .u-color-placeholder{color:#ccc}
.admin-page .u-icon-cell{width:1.75rem}
.admin-page .u-icon-preview-sm{display:inline-flex;align-items:center;justify-content:center;width:1.4rem;height:1.4rem;border-radius:4px;font-size:1rem}
.admin-page .u-bg-edit-row{background:#fef9c3}
.admin-page .u-grid-variation-row{grid-template-columns:1.5fr 2fr 2fr 1fr 1fr auto auto;gap:.5rem;align-items:end}
.admin-page .u-grid-variation-add{grid-template-columns:2fr 2fr 1fr auto;gap:.5rem;align-items:end}
/* marketplace/delivery_options.php */
.admin-page .u-mar-top-quarter{margin-top:.25rem}
.admin-page .u-mar-bottom-quarter{margin-bottom:.25rem}
.admin-page .u-mar-top-half{margin-top:.5rem}
.admin-page .u-mar-1-0{margin:1rem 0}
.admin-page .u-pad-2{padding:2rem 1rem}
.admin-page .u-grid-4col{grid-template-columns:repeat(4,1fr)}
.admin-page .delivery-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:1rem 1.25rem}
.admin-page .u-mt-0{margin-top:0}
.admin-page .u-pill{padding:.1rem .55rem;border-radius:999px;font-size:.7rem;font-weight:600}
.admin-page .u-pill-blue{background:#e0e7ff;color:#4338ca}
.admin-page .u-pill-green{background:#dcfce7;color:#166534}
.admin-page .u-pill-red{background:#fee2e2;color:#991b1b}
.admin-page .u-pill-yellow{background:#fef3c7;color:#92400e}
.admin-page .u-pill-purple{background:#dbeafe;color:#1e40af}

/* ponytail: settings + icons inline-style cleanup */
.admin-page .u-mar-bottom-2{margin-bottom:2rem}
.admin-page .u-pad-bottom-0{padding-bottom:0}
.admin-page .u-rounded-lg{border-radius:12px}
.admin-page .u-rounded-8{border-radius:8px}
.admin-page .u-bg-white{background:#fff}
.admin-page .u-inline-block{display:inline-block}
.admin-page .u-opacity-0{opacity:0}
.admin-page .u-absolute-tr{position:absolute;top:4px;right:4px}\n.admin-page .u-mar-x-0{margin-left:0;margin-right:0}
.admin-page .u-pad-top-half{padding-top:.5rem}\n.admin-page .u-mt-1{margin-top:1rem}\n.admin-page .u-min-w-160{min-width:160px}\n.admin-page .u-min-w-200{min-width:200px}\n.admin-page .u-min-w-220{min-width:220px}\n.admin-page .u-max-w-360{max-width:360px}
.admin-page .u-form-min-w{min-width:200px}\n.admin-page .u-form-min-w-lg{min-width:220px}\n.admin-page .u-form-min-w-md{min-width:160px}\n.admin-page .u-icon-lg{font-size:2rem}
.admin-page .u-ml-half{margin-left:.5rem}\n.admin-page .u-mb-half{margin-bottom:.5rem}\n.admin-page .u-mt-half{margin-top:.5rem}\n.admin-page .u-mb-2{margin-bottom:2rem}
.admin-page .u-mb-1-5{margin-bottom:1.5rem}\n.admin-page .u-mt-1-5{margin-top:1.5rem}
.admin-page .u-gap-half{gap:.5rem}
.admin-page .u-icon-sm{font-size:1.25rem}
/* settings/icons.php */
.admin-page .u-mar-bottom-1-5{margin-bottom:1.5rem}
/* marketplace/delivery_options.php */
.admin-page .u-card-inactive{opacity:.55}
.admin-page .u-text-white{color:#fff}
.admin-page .u-mt-sm{margin-top:10px}

/* ---------- Secrets module (admin/secrets/*) ----------
 * Page-scoped under .secrets-page. Lives at the END of brand.css per
 * the page-rebrand recipe §6 ("Truly page-scoped bits go in a commented
 * block at the end of brand.css, scoped under the page's bodyClass").
 *
 * Components:
 *   .field-action     — a .field variant that appends a button (show/hide
 *                       password, copy-to-clipboard, etc.) without breaking
 *                       the existing icon+input flex layout.
 *   .share-list       — vertical stack of selectable rows, one per
 *                       permission or user. Hosts .field-check.
 *   .share-category   — collapsible group of permissions by category.
 *   .picker-search    — search input for the user picker; pairs with the
 *                       existing brand .field chrome (icon + input) but
 *                       adds a JS-only "filter the list below" behaviour.
 *   .picker-empty     — shown when the user's search has zero matches.
 *   .reveal-value     — readonly plaintext input on the reveal page.
 *   .reveal-countdown — the "auto-clears in N s" hint.
 *
 * Form layout uses existing .form-section / .form-section-title /
 * .form-grid / .form-group. Form width is unconstrained (fills the
 * content area); we use the existing brand 2-col grid for paired fields
 * and full-width for single fields.
 */
@media (max-width:640px){
  .secrets-page .form-grid{grid-template-columns:1fr}
}
.secrets-page .field-action{display:flex;align-items:center;gap:6px}
.secrets-page .field-action input{flex:1;min-width:0}
.secrets-page .field-action button{flex-shrink:0;background:transparent;border:0;padding:6px 8px;border-radius:8px;color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:background .15s,color .15s}
.secrets-page .field-action button:hover{background:var(--mint-2);color:var(--forest)}
.secrets-page .field-action button .material-symbols-rounded{font-size:20px}
.secrets-page .share-picker-card{display:flex;flex-direction:column}
.secrets-page .share-picker-card .card-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);margin-bottom:var(--sp-1)}
.secrets-page .share-picker-card .card-head h3{display:flex;align-items:center;gap:8px;font-size:16px;margin:0}
.secrets-page .share-scroll-wrap{max-height:360px;overflow-y:auto;border:1px solid var(--line);border-radius:var(--radius-sm);padding:6px;background:#fff}
.secrets-page .share-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1px}
.secrets-page .share-list > li{display:flex;flex-direction:column;gap:1px}
.secrets-page .share-category{margin-bottom:6px}
.secrets-page .share-category:last-child{margin-bottom:0}
.secrets-page .share-category-label{display:block;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--forest);margin:10px 8px 4px}
.secrets-page .share-category:first-child .share-category-label{margin-top:2px}
.secrets-page .share-category-items{display:flex;flex-direction:column;gap:1px}
.secrets-page .share-list .field-check{padding:8px 10px;border-radius:8px;transition:background .12s;align-items:flex-start;cursor:pointer}
.secrets-page .share-list .field-check:hover{background:var(--mint-2)}
.secrets-page .share-list .field-check.is-selected{background:var(--mint);font-weight:500}
.secrets-page .share-list .field-check small{display:block;color:var(--muted);font-size:12px;margin-top:2px;font-weight:400}
.secrets-page .share-list .field-check input[type=checkbox]{margin-top:3px;flex-shrink:0}
.secrets-page .picker-search{margin-bottom:10px}
.secrets-page .picker-search .field{margin:0}
.secrets-page .secrets-sharing-grid{margin-top:24px}
.secrets-page [hidden],
.secrets-page .is-hidden{display:none !important}
.secrets-page .picker-empty{margin:24px 12px;text-align:center;color:var(--muted)}
.secrets-page .reveal-value{font-family:'SFMono-Regular',Consolas,'Liberation Mono',Menlo,monospace;font-size:14px;letter-spacing:.01em}
.secrets-page .reveal-countdown{font-variant-numeric:tabular-nums;color:var(--muted);font-size:13px;margin-top:6px}

/* ---------- Admin dashboard stat-card link (secrets tile) ----------
 * Removes the default link colour/underline so the tile matches the
 * surrounding div-based stat cards.
 */
.admin-page .stat-card-link{text-decoration:none;color:inherit;display:flex}
.admin-page .stat-card-link:hover{color:inherit}
.admin-page .stat-card-link .stat-tile{width:100%;transition:transform .15s,box-shadow .15s,border-color .15s}
.admin-page .stat-card-link:hover .stat-tile{transform:translateY(-2px);box-shadow:var(--shadow-sm);border-color:var(--forest)}
.admin-page .stat-card-link .stat-tile.is-active{border-color:var(--forest);box-shadow:0 0 0 2px var(--forest)}

/* ============================================================
   Food claim (public) — bodyClass: .public-food-claim-page
   Centred guest-flow panels + OTP code input variant.
   ============================================================ */
.public-food-claim-page .claim-narrow{max-width:620px;margin:0 auto}
.public-food-claim-page .claim-code-input{text-align:center;font-family:var(--font-display);font-size:24px;letter-spacing:.3em}
.public-food-claim-page .claim-narrow > .alert{margin-bottom:20px}
.public-food-claim-page .card + .alert{margin-top:24px}
.public-food-claim-page .card .alert{margin:16px 0}
.public-food-claim-page .card .card-head + .alert{margin-top:0}
.public-food-claim-page .card .alert + .detail-grid{margin-top:16px}

/* ---------- Agent dashboard (food distribution) — bodyClass .agent-dashboard-page ---------- */
.agent-dashboard-page .countdown{font-variant-numeric:tabular-nums}
.agent-dashboard-page .card.is-empty .btn{margin-top:14px}

/* User cell with avatar in tables and cards */
.user-cell{display:flex;align-items:center;gap:12px;text-align:left}
.user-cell .avatar-circle{width:38px;height:38px;font-size:14px;border-radius:10px}
.user-cell-meta{display:flex;flex-direction:column;gap:1px}
.user-cell-meta strong{color:var(--ink);font-family:var(--font-display);font-size:14.5px}
.user-cell-meta small{color:var(--muted);font-size:12px}

/* Action hover tones */
.row-actions .action-approve:hover{color:#15803d;border-color:#15803d;background:#dcfce7}
.row-actions .action-decline:hover{color:#b91c1c;border-color:#b91c1c;background:#fee2e2}

/* Table card action bar (for Option B labeled actions) */
.table-card-actions{display:flex;gap:8px;align-items:center}
@media (max-width:639px){
  .table-card-actions{display:flex;gap:8px;width:100%}
  .table-card-actions .btn{flex:1;width:auto;height:42px;padding:0 14px;justify-content:center}
}

/* ---------- Knowledge Base RBAC & Audience Management ---------- */
.kb-sim-bar{padding:12px 16px;background:var(--surface-alt,#f8fafc);border-radius:var(--radius-sm);border:1px solid var(--line)}
.field-select-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.field-select-row > label{margin:0;font-size:13.5px;color:var(--ink);display:inline-flex;align-items:center;gap:6px}
.kb-sim-form{display:inline-flex;margin:0}
.kb-sim-select{height:36px;padding:0 12px;font-size:13.5px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;color:var(--ink);cursor:pointer}
.kb-list-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 16px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;transition:border-color .15s,box-shadow .15s}
.kb-list-row:hover{border-color:var(--forest);box-shadow:0 4px 12px rgba(34,139,34,.06)}
.kb-list-main{display:flex;align-items:center;gap:14px;flex:1;min-width:0;text-decoration:none;color:inherit}
.kb-list-manage-actions{flex-shrink:0;margin-left:auto}
.kb-badge-pinned{background:#fef3c7;color:#92400e;border:1px solid #fde68a}
.kb-ack-card{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 20px;border-radius:var(--radius-sm);background:var(--mint);border-left:4px solid var(--forest);margin-bottom:24px}
.kb-ack-card.is-acknowledged{background:var(--surface-alt,#f8fafc);border-left-color:var(--line)}
.kb-ack-card .kb-ack-body{flex:1}
.kb-ack-card .kb-ack-body b{display:block;font-size:14.5px;color:var(--ink);margin-bottom:4px}
.kb-ack-card .kb-ack-body p{margin:0;font-size:13.5px;color:var(--muted)}
.kb-ack-card form{margin:0}
@media (max-width:640px){
  .kb-list-row{flex-direction:column;align-items:stretch;gap:10px}
  .kb-list-manage-actions{align-self:flex-end}
}



