/* AU ONE ERP · construction/polish-v2.css
   Extracted verbatim from construction.html lines 2292-2423. */
/* ═══════════════════════════════════════════════════════════════════
   AU One — Premium Polish Layer v2
   UI ONLY. Every selector below already exists in the markup/JS — no new
   classes, no HTML changes, no logic touched. Same-specificity + later in
   the cascade than the base rules above, so these values win without !important.
   Ported verbatim from the standalone estimator.html's own polish pass — see
   project memory [[project-estimator-standalone-migration]] for its origin.
   ═══════════════════════════════════════════════════════════════════ */

/* ─── Cards: soft elevation, hairline border, larger radius, better padding ─── */
.card{border-radius:var(--r-lg);padding:17px 19px;box-shadow:var(--shadow-1)}
.hcard{border-radius:var(--r-lg);padding:18px 19px;box-shadow:var(--shadow-1)}
@media(hover:hover){ .hcard:hover{box-shadow:var(--shadow-2)} }
.sumcard{border-radius:var(--r-lg);box-shadow:var(--shadow-1);border-color:var(--line)}
.ostile{border-radius:var(--r-lg);box-shadow:var(--shadow-1)}
.hrow{border-radius:var(--r-md)}
.acctstrip{border-radius:var(--r-md);padding:11px 14px}
.crewbox,.afocuspanel{border-radius:var(--r-md)}

/* ─── Buttons: olive primary (soft gradient), neutral secondary, quiet ghost ─── */
.prim2{
  background:linear-gradient(180deg,color-mix(in srgb,var(--olive) 88%,#fff 12%),var(--olive));
  border-radius:var(--r-md);
  box-shadow:0 1px 2px rgba(20,24,28,.16),inset 0 0 0 1px color-mix(in srgb,var(--olive) 55%,transparent);
  letter-spacing:.005em;
}
.prim2:not(:disabled):hover{filter:brightness(1.04)}
.ghost2{border-radius:var(--r-md);border-color:var(--line2)}
.mini{border-radius:var(--r-sm);font-weight:800}
.acctstrip button{border-radius:var(--r-sm)}
.hbig{border-radius:var(--r-md)}
.installbanner .ibyes,.installbanner .ibno{border-radius:var(--r-sm)}

/* ─── Inputs: consistent radius, calmer border, olive focus (was orange glow) ─── */
.acform input,.setfield input,.afocussearch,#authEmail,#authPass{border-radius:var(--r-sm)}
.acform input:focus{box-shadow:0 0 0 3px rgba(var(--olive-rgb),.16)}

/* ─── Header: quieter surface, clearer title hierarchy ─── */
header{background:var(--ink);box-shadow:0 1px 0 rgba(255,255,255,.04) inset,0 6px 20px -6px rgba(0,0,0,.35)}
.brandtxt h1{font-size:16.5px;font-weight:800;letter-spacing:-.01em;line-height:1.15}
.brandtxt small{font-size:11px;color:rgba(255,255,255,.55);font-weight:600;letter-spacing:.01em}
.burger{border-radius:var(--r-sm);transition:background-color var(--dur-2)}
.burger:hover{background:rgba(255,255,255,.18)}

/* ─── Bottom action bar: same treatment as header for shell consistency ─── */
.bottom{box-shadow:0 -1px 0 rgba(255,255,255,.04) inset,0 -6px 20px -6px rgba(0,0,0,.35)}
.bottom .go{border-radius:var(--r-sm);box-shadow:0 2px 8px -2px rgba(var(--olive-rgb),.35)}

/* ─── Tradebar + roofing/electrical/plumbing sub-tab pills ─── */
.tradebar{background:var(--paper2)}
.tb-phase{border-radius:999px;font-weight:700}
.tb-trade{border-radius:var(--r-sm)}
.rsub{border-radius:var(--r-sm)}
@media(hover:hover){
  .tb-phase:not(.on):hover,.tb-trade:not(.on):hover{background:var(--paper3)}
}

/* ─── Drawer / sidebar nav: Linear-style active indicator + hover ─── */
.drawer{background:var(--ink);box-shadow:4px 0 32px rgba(0,0,0,.35)}
.navitem{border-radius:var(--r-sm);gap:11px}
.navitem:hover{background:rgba(255,255,255,.06);color:#fff}
.navitem.on{background:rgba(255,255,255,.08);color:#fff;border-left-color:var(--olive)}
.nicon{display:inline-flex;flex:none;opacity:.85}
.navitem.on .nicon{opacity:1}
.nicon svg{width:18px;height:18px}

/* ─── Home hero + section rhythm ─── */
.homehero{padding:20px 10px 12px}
.homehero h2{font-size:23px;font-weight:800}
.secttl{margin:14px 2px 10px}
.osgrid{gap:13px}
.osico{border-radius:var(--r-md)}
.osname{font-size:14px}

/* ─── Tables (Summary / BOQ): alternating rows, hover highlight, cleaner type ─── */
.sumcard table th{font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;font-weight:800;padding:9px 11px}
.sumcard table td{padding:8px 11px;font-variant-numeric:tabular-nums}
.sumcard table tbody tr:not(.sub){transition:background-color var(--dur-2)}
@media(hover:hover){
  .sumcard table tbody tr:not(.sub):hover{background:var(--paper3)}
}
.sumcard table tbody tr:not(.sub):nth-child(even){background:rgba(127,138,74,.045)}
html[data-theme="dark"] .sumcard table tbody tr:not(.sub):nth-child(even){background:rgba(163,178,94,.05)}
.boq td,.boq th{font-variant-numeric:tabular-nums}
@media(hover:hover){
  .boq tbody tr:not(.subt):not(.lab):hover td{background:rgba(0,0,0,.035)}
}

/* ─── Dashboard KPI cards: larger numbers, smaller labels, more air ─── */
.dashcard{border-radius:var(--r-lg);padding:18px 18px 16px;box-shadow:var(--shadow-1)}
.dashk{border-radius:var(--r-sm);padding:10px 12px}
.dashkl,.dashminil{font-size:10px;letter-spacing:.05em;text-transform:uppercase;font-weight:800;color:var(--muted)}
.dashkv,.dashminiv{font-variant-numeric:tabular-nums;letter-spacing:-.01em}

/* ─── Status badges: quieter fills, consistent shape ─── */
.osbadge,.asrc,.aband{border-radius:999px;font-weight:800;letter-spacing:.04em}

/* ─── Typography rhythm ─── */
.secttl{font-size:11.5px}
.hint{line-height:1.5}

/* ─── Motion: everything here stays under 200ms per the brief ─── */
.hcard,.card,.ostile,.tb-phase,.tb-trade,.navitem,.mini,.prim2,.ghost2{transition-duration:var(--dur-2)}
@media (prefers-reduced-motion: reduce){
  .hcard,.card,.ostile,.tb-phase,.tb-trade,.navitem,.mini,.prim2,.ghost2,.dashcard,header,.bottom{transition:none!important;animation:none!important}
}

/* ─── Mobile: larger touch targets, no cramped controls ─── */
@media(max-width:480px){
  .osgrid{grid-template-columns:repeat(2,1fr);gap:10px}
  .ostile{min-height:112px;padding:15px 10px}
  .hcard{padding:15px 16px}
  .mini{padding:8px 12px;min-height:36px}
  .prim2,.ghost2{min-height:46px}
}

/* ─── Summary's grand-total card: the visual anchor of the whole app ─── */
.grand{border-radius:var(--r-lg);padding:19px 20px 21px;box-shadow:var(--shadow-2);position:relative;overflow:hidden}
.grand::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--olive),transparent 75%);opacity:.8}
.grand .line{padding:7px 0}
.grand .big{padding-top:15px}
.grand .big .v{font-size:29px;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.grand .line .v{font-variant-numeric:tabular-nums}

/* ─── Fixed bottom-corner elements (help FAB, AU-core FAB, bottom total bar)
   float on top of the page — main{padding:16px 14px 0} had zero bottom
   clearance, so a long list's last 1-2 rows can end up visually underneath
   them. .helpfab sits at bottom:90px (42px tall) — the tallest of the three —
   so 130px clears all of them with room to spare. Longhand so it wins over
   the earlier shorthand `padding:...0` rules without !important. ─── */
main{padding-bottom:calc(130px + env(safe-area-inset-bottom))}
body.weblayout main#main{padding-bottom:calc(130px + env(safe-area-inset-bottom))}
