/* =================================================================
   VKS Marketing V2 — "Operational calm" design system
   ================================================================= */
:root{
  /* brand + accent (oklch, perceptual) */
  --brand:oklch(0.56 0.13 245); --brand-deep:oklch(0.30 0.075 255); --brand-ink:oklch(0.22 0.06 258);
  --brand-soft:oklch(0.95 0.03 245); --brand-mid:oklch(0.46 0.13 248);
  --accent:oklch(0.70 0.15 52);  --accent-soft:oklch(0.95 0.05 60);
  /* tinted neutrals — no pure black/white */
  --bg:oklch(0.975 0.006 250); --surface:oklch(0.995 0.003 250); --surface-2:oklch(0.962 0.007 250);
  --line:oklch(0.90 0.012 252); --line-2:oklch(0.84 0.016 252);
  --ink:oklch(0.26 0.03 258); --ink-2:oklch(0.44 0.022 258); --ink-3:oklch(0.56 0.02 258);
  /* status */
  --danger:oklch(0.56 0.19 27); --danger-soft:oklch(0.95 0.04 27);
  --warn:oklch(0.70 0.14 65); --warn-soft:oklch(0.95 0.05 75);
  --ok:oklch(0.60 0.13 158); --ok-soft:oklch(0.95 0.05 160);
  --info:var(--brand); --info-soft:var(--brand-soft);
  --plum:oklch(0.55 0.17 300); --plum-soft:oklch(0.95 0.04 300);
  /* fonts */
  --display:'Noto Sans','Noto Sans Lao',sans-serif;
  --body:'Noto Sans','Noto Sans Lao',sans-serif;
  --lao:'Noto Sans Lao','Noto Sans',sans-serif;
  --mono:'JetBrains Mono','Noto Sans Lao',ui-monospace,monospace;
  /* fluid type scale */
  --t-xs:clamp(10.5px,0.66rem,11px); --t-sm:clamp(12px,0.78rem,12.5px); --t-base:14px;
  --t-md:clamp(15px,1rem,16px); --t-lg:clamp(18px,1.3vw,20px); --t-xl:clamp(23px,2.4vw,28px); --t-2xl:clamp(28px,3.4vw,38px);
  /* radius/shadow */
  --r-xs:7px; --r-sm:10px; --r:13px; --r-lg:18px; --r-xl:24px;
  /* spacing scale (4-based) */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:22px; --s6:30px;
  --sh-sm:0 1px 2px oklch(0.4 0.05 258/.07); --sh:0 6px 22px oklch(0.4 0.05 258/.09); --sh-lg:0 24px 64px oklch(0.3 0.06 258/.22);
  /* z */
  --z-nav:30; --z-dd:200; --z-scrim:400; --z-panel:401; --z-toast:600; --z-login:700;
  --sb:264px;
  /* motion (iOS) */
  --ease-spring:cubic-bezier(0.34,1.56,0.64,1); --ease-sheet:cubic-bezier(0.32,0.72,0,1); --ease-std:cubic-bezier(0.4,0,0.2,1); --ease-emil-out:cubic-bezier(0.23,1,0.32,1);
  --d-fast:180ms; --d-base:260ms; --d-sheet:360ms;
}
*{box-sizing:border-box}
html,body{margin:0}
body{font-family:var(--body);background:var(--bg);color:var(--ink);font-size:var(--t-base);line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
[x-cloak]{display:none!important}
.lao,:lang(lo){font-family:var(--lao);line-height:1.5}
h1,h2,h3,h4{margin:0;font-family:var(--display);font-weight:700;letter-spacing:-.015em;line-height:1.1}
.num{font-family:var(--mono);font-feature-settings:"tnum" 1;letter-spacing:-.02em}
button{font-family:inherit;color:inherit}
/* preflight-lite: replaces the resets Tailwind CDN used to provide (removed 2026-06-09) */
p,ul,ol,figure,blockquote,dl,dd{margin:0}
ul,ol{list-style:none;padding:0}
img,svg,video,canvas{display:block;max-width:100%}
table{border-collapse:collapse;border-spacing:0}
button,input,select,textarea{font-family:inherit;font-size:100%;line-height:inherit;color:inherit}
button{background:none;border:0;cursor:pointer}
a{color:inherit;text-decoration:none}
hr{border:0;border-top:1px solid var(--line)}
::selection{background:var(--brand);color:white}
.material-symbols-outlined{font-variation-settings:'opsz' 20}

a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible,[role=button]:focus-visible,.dd-trigger:focus-visible{
  outline:2.5px solid var(--brand);outline-offset:2px;border-radius:var(--r-xs)}

/* ---- buttons ---- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:40px;padding:0 17px;border-radius:var(--r-sm);font-weight:600;font-size:var(--t-base);border:1px solid transparent;cursor:pointer;transition:transform var(--d-fast) var(--ease-spring),background .15s,box-shadow .15s;white-space:nowrap}
.btn:active{transform:scale(.96)}
.btn .material-symbols-outlined{font-size:19px}
.btn-primary{background:var(--brand);color:white;box-shadow:0 1px 0 oklch(0.3 0.06 258/.3),inset 0 1px 0 oklch(1 0 0/.15)}
.btn-primary:hover{background:var(--brand-mid)}
.btn-accent{background:var(--accent);color:oklch(0.27 0.06 50)}
.btn-ghost{background:var(--surface);color:var(--ink);border-color:var(--line-2)}
.btn-ghost:hover{background:var(--surface-2)}
.btn-danger{background:var(--danger);color:white}
.btn-sm{height:33px;padding:0 12px;font-size:var(--t-sm);border-radius:var(--r-xs)}
.btn-icon{width:40px;height:40px;padding:0;border-radius:var(--r-sm);display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;color:var(--ink-2);cursor:pointer}
.btn-icon:hover{background:var(--surface-2)}
.btn:disabled{opacity:.5;cursor:not-allowed}

/* ---- fields ---- */
.field{display:block;margin-bottom:18px}
.label{display:inline-block;font-size:13px;font-weight:600;color:var(--ink);margin-bottom:7px;letter-spacing:-.005em}
.req{color:var(--danger);font-weight:700}
.hint{font-size:var(--t-xs);color:var(--ink-3);margin-top:5px}
.input,.textarea{width:100%;height:46px;padding:0 14px;border:1.5px solid var(--line-2);border-radius:var(--r-sm);font-size:14.5px;background:var(--surface-2);color:var(--ink);transition:border-color .15s,box-shadow .15s,background .15s;font-family:inherit}
.textarea{height:auto;min-height:84px;padding:11px 14px;line-height:1.5}
.input:hover,.textarea:hover{border-color:var(--ink-3)}
.input:focus,.textarea:focus{border-color:var(--brand);background:var(--surface);box-shadow:0 0 0 4px var(--brand-soft);outline:none}
.input::placeholder,.textarea::placeholder{color:var(--ink-3)}
.input[aria-invalid=true]{border-color:var(--danger);background:var(--danger-soft);box-shadow:0 0 0 4px var(--danger-soft)}
.input[type=date],.input[type=time]{cursor:pointer}
.input[type=date]::-webkit-calendar-picker-indicator,.input[type=time]::-webkit-calendar-picker-indicator{opacity:.55;cursor:pointer}
.input[type=date]:hover::-webkit-calendar-picker-indicator,.input[type=time]:hover::-webkit-calendar-picker-indicator{opacity:.95}
.field-err{font-size:var(--t-xs);color:var(--danger);margin-top:5px;font-weight:600}
@media(max-width:768px){.input,.textarea,.dd-trigger,.search input{font-size:16px!important}}

.search{position:relative}
.search .material-symbols-outlined{position:absolute;left:12px;top:50%;transform:translateY(-50%);font-size:20px;color:var(--ink-3);pointer-events:none}
.search input{width:100%;height:42px;padding:0 12px 0 39px;border:1.5px solid var(--line-2);border-radius:999px;background:var(--surface-2);font-size:var(--t-base);font-family:inherit;color:var(--ink);transition:.15s}
.search input:hover{border-color:var(--ink-3)}
.search input:focus{border-color:var(--brand);background:var(--surface);box-shadow:0 0 0 4px var(--brand-soft);outline:none}

/* ---- dropdown ---- */
.dd{position:relative}
.dd-trigger{width:100%;height:46px;padding:0 10px 0 14px;display:flex;align-items:center;justify-content:space-between;gap:8px;border:1.5px solid var(--line-2);border-radius:var(--r-sm);background:var(--surface-2);font-size:14.5px;color:var(--ink);cursor:pointer;transition:.15s}
.dd-trigger:hover{border-color:var(--ink-3)}
.dd-trigger.is-open{border-color:var(--brand);background:var(--surface);box-shadow:0 0 0 4px var(--brand-soft)}
.dd-trigger .material-symbols-outlined{color:var(--ink-2)}
.dd-trigger .ph{color:var(--ink-3)}
.dd-panel{position:fixed;z-index:9999;left:0;top:0;width:auto;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh-lg);padding:6px;max-height:280px;overflow:auto}
.dd-opt{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:var(--r-xs);font-size:var(--t-base);cursor:pointer;color:var(--ink)}
.dd-opt:hover,.dd-opt.is-active{background:var(--brand-soft)}
.dd-opt .material-symbols-outlined{font-size:18px;margin-left:auto;color:var(--brand)}
.dd-opt .dd-id{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);margin-left:auto;white-space:nowrap}
.dd-opt .dd-id + .material-symbols-outlined{margin-left:8px}
.dd-search{position:sticky;top:-6px;margin:-6px -6px 4px;padding:9px 11px;display:flex;align-items:center;gap:8px;background:var(--surface);border-bottom:1px solid var(--line);z-index:2}
.dd-search .material-symbols-outlined{font-size:18px;color:var(--ink-3)}
.dd-search input{flex:1;min-width:0;border:none;outline:none;background:transparent;font-family:inherit;font-size:14px;color:var(--ink)}
.dd-search .dd-clr{cursor:pointer;color:var(--ink-3)}
.dd-meta{padding:1px 10px 6px;font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.dd-empty{padding:22px 14px;text-align:center;color:var(--ink-3);font-size:var(--t-sm)}
.tbl-sites .num,.tbl-sites td,.tbl-sites th{font-family:var(--body);font-variant-numeric:tabular-nums;letter-spacing:0}
.noto-nums .num{font-family:var(--body);font-variant-numeric:tabular-nums;letter-spacing:0}
.cl-type{flex:1;border:1.5px solid var(--line-2);border-radius:var(--r);padding:13px 10px;cursor:pointer;background:var(--surface);display:flex;flex-direction:column;align-items:center;gap:5px;text-align:center;transition:border-color .15s,background .15s}
.cl-type .ic{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;background:var(--surface-2);color:var(--ink-3)}
.cl-type .ic .material-symbols-outlined{font-size:17px}
.cl-type .tt{font-weight:700;font-size:var(--t-sm)}
.cl-type .ds{font-size:10px;color:var(--ink-3);line-height:1.3}
.cl-type.sel-w{border-color:var(--warn);background:var(--warn-soft)}
.cl-type.sel-w .ic{background:var(--warn);color:#fff}
.cl-type.sel-d{border-color:var(--danger);background:var(--danger-soft)}
.cl-type.sel-d .ic{background:var(--danger);color:#fff}

/* ---- surfaces ---- */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm)}
.pad{padding:clamp(14px,1.6vw,20px)}
.divide-top{border-top:1px solid var(--line)}

/* ---- page header ---- */
.page{padding:clamp(18px,2.4vw,30px) clamp(14px,2.6vw,34px) 120px;max-width:1320px}
.eyebrow{font-size:var(--t-xs);font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--brand-mid)}
.h-page{font-family:var(--display);font-size:var(--t-xl);font-weight:800;margin-top:4px}
.sub{font-size:var(--t-sm);color:var(--ink-3);margin-top:3px}
.head-row{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:clamp(16px,2vw,26px)}
/* mobile: page name lives in the m-top app bar; drop the eyebrow + big title + header Add button (FAB owns add) */
@media(max-width:768px){
  .head-row .eyebrow,.head-row .h-page,.head-row .sub,.hd-add{display:none}
  .head-row{margin-bottom:10px}
}
.dash-grid{display:grid;grid-template-columns:1fr;gap:20px}
@media(min-width:1000px){.dash-grid{grid-template-columns:1.65fr 1fr}}
.dtab{padding:13px 6px;border:none;border-bottom:2.5px solid transparent;background:transparent;font-size:var(--t-sm);font-weight:600;color:var(--ink-3);cursor:pointer;white-space:nowrap}
.dtab:hover{color:var(--ink-2)}
.dtab.on{color:var(--brand-mid);border-bottom-color:var(--brand);font-weight:700}
.sub-label{font-size:var(--t-xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);margin:6px 0 9px}
.bill-grid{display:grid;grid-template-columns:1fr;gap:16px}
@media(min-width:680px){.bill-grid{grid-template-columns:1.05fr .95fr}}

/* ---- KPI strip (banded, not generic cards) ---- */
.kpi-strip{display:flex;flex-wrap:wrap;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;margin-bottom:22px}
.kpi-cell{flex:1;min-width:140px;background:var(--surface);padding:15px 18px;position:relative}
.kpi-cell.tap{cursor:pointer;transition:background .15s}.kpi-cell.tap:hover{background:var(--surface-2)}
.kpi-k{font-size:var(--t-xs);font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);display:flex;align-items:center;gap:6px}
.kpi-v{font-family:var(--mono);font-size:clamp(21px,1.9vw,25px);font-weight:700;margin-top:8px;line-height:1}
.kpi-f{font-size:var(--t-xs);color:var(--ink-3);margin-top:6px}
.kpi-cell.hero{background:var(--surface-2)}
.kpi-cell.hero .kpi-k{color:var(--ink-2)}
.kpi-cell.hero .kpi-v{font-size:clamp(31px,3.4vw,40px);font-weight:800}
.h-sec{font-family:var(--display);font-size:var(--t-lg);font-weight:700;letter-spacing:-.01em}

/* ---- chips/badges ---- */
.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;font-size:var(--t-xs);font-weight:700;line-height:1.5}
.badge.ok{background:var(--ok-soft);color:var(--ok)}
.badge.warn{background:var(--warn-soft);color:var(--warn)}
.badge.danger{background:var(--danger-soft);color:var(--danger)}
.badge.info{background:var(--info-soft);color:var(--brand-mid)}
.badge.plum{background:var(--plum-soft);color:var(--plum)}
.cat-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:var(--r-xs);font-size:var(--t-xs);font-weight:700;white-space:nowrap}
.pill{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;min-height:36px;border-radius:999px;border:1.5px solid var(--line-2);background:var(--surface);font-size:var(--t-sm);font-weight:600;color:var(--ink-2);cursor:pointer;white-space:nowrap;transition:.12s}
.pill:hover{border-color:var(--ink-3)}
.pill.on{background:var(--brand);color:white;border-color:var(--brand)}
.pill .ct{font-family:var(--mono);opacity:.7;font-size:11px}
.countdown{font-family:var(--mono);font-weight:600;font-size:var(--t-xs)}

/* ---- segmented tabs ---- */
.seg{display:inline-flex;gap:3px;background:var(--surface-2);padding:4px;border-radius:var(--r);border:1px solid var(--line);max-width:100%;overflow:auto}
.seg button{padding:8px 15px;border:none;border-radius:var(--r-sm);font-weight:700;font-size:var(--t-sm);cursor:pointer;color:var(--ink-2);background:transparent;white-space:nowrap;display:flex;align-items:center;gap:6px}
.seg button.on{background:var(--surface);color:var(--brand-mid);box-shadow:var(--sh-sm)}

/* ---- table ---- */
.tbl{width:100%;border-collapse:collapse;font-size:var(--t-sm)}
.tbl th{text-align:left;font-family:var(--mono);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);padding:11px 12px;border-bottom:1.5px solid var(--line-2);position:sticky;top:0;background:var(--surface-2);white-space:nowrap}
.tbl th.sortable{cursor:pointer;user-select:none}
.tbl th.sortable:hover{color:var(--ink)}
.tbl td{padding:13px 16px;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl th{padding-left:16px;padding-right:16px}
.tbl tbody tr:hover{background:var(--surface-2)}
.tbl tr.sel{background:var(--brand-soft)}
.tbl td.num,.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}

/* ---- skeleton/empty ---- */
.skel{background:linear-gradient(90deg,var(--surface-2) 25%,var(--line) 37%,var(--surface-2) 63%);background-size:400% 100%;animation:shimmer 1.3s ease infinite;border-radius:var(--r-xs)}
@keyframes shimmer{0%{background-position:100% 0}100%{background-position:-100% 0}}
.empty{text-align:center;padding:46px 20px;color:var(--ink-3)}
.empty .material-symbols-outlined{font-size:44px;color:var(--line-2)}
.empty-t{font-family:var(--display);font-weight:700;color:var(--ink-2);margin-top:8px;font-size:var(--t-md)}

/* ---- kanban ---- */
.kb{display:flex;gap:14px;overflow-x:auto;padding-bottom:12px;scroll-snap-type:x proximity}
.kb-col{flex:0 0 270px;scroll-snap-align:start;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-lg);display:flex;flex-direction:column;max-height:72vh}
.kb-h{padding:12px 14px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}
.kb-b{padding:11px;display:flex;flex-direction:column;gap:11px;overflow-y:auto}
.kb-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:13px 14px;box-shadow:var(--sh-sm);cursor:grab}
.kb-card:hover{box-shadow:var(--sh);border-color:var(--line-2)}
.kb-card.dragging{opacity:.4}
.kb-col.over{outline:2px dashed var(--brand);outline-offset:-4px;background:var(--brand-soft)}

/* ---- scrim + drawer + modal ---- */
.scrim{position:fixed;inset:0;background:oklch(0.3 0.05 258/.45);backdrop-filter:blur(3px);z-index:var(--z-scrim);animation:fade var(--d-base) var(--ease-std)}
@keyframes fade{from{opacity:0}}
.drawer{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(740px,94vw);max-height:88vh;background:var(--surface);z-index:var(--z-panel);box-shadow:var(--sh-lg);display:flex;flex-direction:column;border-radius:var(--r-xl);overflow:hidden;animation:popCenter var(--d-sheet) var(--ease-sheet)}
@keyframes popCenter{from{transform:translate(-50%,-50%) scale(.96);opacity:0}}
@keyframes slideUp{from{transform:translateY(100%)}}
.modal{position:fixed;inset:0;z-index:var(--z-panel);display:flex;align-items:flex-end;justify-content:center;pointer-events:none}
.modal::before{content:'';position:fixed;inset:0;background:oklch(0.3 0.05 258/.45);backdrop-filter:blur(3px);pointer-events:none;z-index:-1}
@media(min-width:769px){.modal{align-items:center;padding:24px}}
.modal-box{pointer-events:auto;background:var(--surface);width:100%;max-width:580px;max-height:92vh;overflow:auto;border-radius:var(--r-xl) var(--r-xl) 0 0;box-shadow:var(--sh-lg);display:flex;flex-direction:column;animation:popIn var(--d-sheet) var(--ease-sheet)}
@media(min-width:769px){.modal-box{border-radius:var(--r-xl)}}
.modal-box.wide{max-width:760px}
@keyframes popIn{from{transform:translateY(24px) scale(.97);opacity:0}}
.p-head{position:sticky;top:0;background:var(--surface);display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px 20px;border-bottom:1px solid var(--line);z-index:2}
.p-title{font-family:var(--display);font-size:var(--t-lg);font-weight:800}
.p-body{padding:20px}
.p-foot{position:sticky;bottom:0;background:var(--surface);display:flex;gap:9px;justify-content:flex-end;padding:14px 20px;border-top:1px solid var(--line);z-index:2}
.x-btn{width:38px;height:38px;border-radius:var(--r-sm);border:none;background:var(--surface-2);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ink-2)}
.x-btn:hover{background:var(--line)}

/* ---- toast ---- */
.toast-wrap{position:fixed;left:50%;transform:translateX(-50%);bottom:84px;z-index:var(--z-toast);display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
@media(min-width:769px){.toast-wrap{bottom:26px;left:auto;right:26px;transform:none;align-items:flex-end}}
.toast{pointer-events:auto;min-width:240px;display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:var(--r);box-shadow:var(--sh-lg);font-size:var(--t-base);font-weight:600;color:white;background:var(--ink);animation:popIn .25s ease}
.toast.success{background:var(--ok)}.toast.error{background:var(--danger)}.toast.info{background:var(--brand)}
.toast .material-symbols-outlined{font-size:20px}

/* =================================================================
   Shell — deep ink-blue brand rail
   ================================================================= */
.shell{display:flex;min-height:100vh}
.rail{width:var(--sb);flex-shrink:0;background:linear-gradient(180deg,var(--brand-ink),var(--brand-deep));color:oklch(0.86 0.02 255);padding:18px 14px;display:flex;flex-direction:column;gap:3px;position:sticky;top:0;height:100vh;overflow-y:auto;overflow-x:hidden;transition:width var(--d-base) var(--ease-sheet),padding var(--d-base) var(--ease-sheet)}
.rail-brand{display:flex;align-items:center;gap:11px;padding:4px 8px 18px}
.rail-logo{width:42px;height:42px;border-radius:var(--r);display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--brand),var(--brand-mid));flex-shrink:0;box-shadow:inset 0 1px 0 oklch(1 0 0/.25)}
.rail-logo .material-symbols-outlined{color:white;font-size:24px}
.rail-brand b{font-family:var(--display);color:white;font-size:var(--t-md);font-weight:800;line-height:1.1;display:block}
.rail-brand span{font-size:10px;color:oklch(0.72 0.04 255);letter-spacing:.06em}
.nav-sec{font-size:9.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:oklch(0.62 0.04 255);padding:14px 12px 6px}
.nav-i{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--r-sm);font-size:var(--t-base);font-weight:600;color:oklch(0.82 0.02 255);background:transparent;border:none;cursor:pointer;text-align:left;width:100%;position:relative;transition:.14s}
.nav-i:hover{background:oklch(1 0 0/.07);color:white}
.nav-i.on{background:oklch(1 0 0/.11);color:white}
.nav-i.on::before{content:"";position:absolute;left:-14px;top:50%;transform:translateY(-50%);width:4px;height:22px;border-radius:0 4px 4px 0;background:var(--accent)}
.nav-i .material-symbols-outlined{font-size:21px}
.nav-badge{margin-left:auto;background:var(--accent);color:oklch(0.27 0.06 50);font-size:10px;font-weight:800;min-width:19px;height:19px;border-radius:999px;display:flex;align-items:center;justify-content:center;padding:0 5px;font-family:var(--mono)}
.rail-user{margin-top:auto;display:flex;align-items:center;gap:10px;padding:10px;border-radius:var(--r-sm);border:1px solid oklch(1 0 0/.12);cursor:pointer;background:oklch(1 0 0/.04)}
.rail-user:hover{background:oklch(1 0 0/.09)}
.avatar{width:34px;height:34px;border-radius:999px;background:var(--accent);color:oklch(0.27 0.06 50);font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-family:var(--display)}
/* collapsible sidebar */
.rail-brand-txt{min-width:0}
.rail-foot{margin-top:auto;display:flex;flex-direction:column;gap:8px}
.rail-foot .rail-user{margin-top:0}
.rail-collapse{display:flex;align-items:center;gap:11px;padding:9px 12px;width:100%;border-radius:var(--r-sm);border:1px solid oklch(1 0 0/.1);background:oklch(1 0 0/.04);color:oklch(0.8 0.02 255);cursor:pointer;font-family:inherit;font-size:var(--t-sm);font-weight:600;text-align:left}
.rail-collapse:hover{background:oklch(1 0 0/.09);color:white}
.rail-collapse .material-symbols-outlined{font-size:20px}
.rail.collapsed{width:74px;padding:18px 10px}
.rail.collapsed .rail-brand-txt,.rail.collapsed .nav-sec,.rail.collapsed .nav-i span:not(.material-symbols-outlined):not(.nav-badge),.rail.collapsed .rail-collapse-lbl,.rail.collapsed .rail-user>div:not(.avatar),.rail.collapsed .rail-user>.material-symbols-outlined{display:none}
.rail.collapsed .rail-brand{flex-direction:column;justify-content:center;gap:9px;padding:4px 0 16px}
.rail.collapsed .nav-i{justify-content:center;padding:10px 0}
.rail.collapsed .nav-i.on::before{left:-10px}
.rail.collapsed .nav-badge{position:absolute;top:3px;right:8px;margin:0}
.rail.collapsed .rail-collapse{justify-content:center;padding:10px 0}
.rail.collapsed .rail-user{justify-content:center;padding:10px 0}
/* dark theme */
body.dark{
  --bg:oklch(0.205 0.018 258);--surface:oklch(0.25 0.02 258);--surface-2:oklch(0.295 0.02 258);
  --line:oklch(0.36 0.02 258);--line-2:oklch(0.44 0.022 258);
  --ink:oklch(0.95 0.01 258);--ink-2:oklch(0.80 0.015 258);--ink-3:oklch(0.64 0.02 258);
  --brand-soft:oklch(0.34 0.07 245);--accent-soft:oklch(0.36 0.07 60);--info-soft:oklch(0.34 0.07 245);
  --ok-soft:oklch(0.32 0.06 160);--warn-soft:oklch(0.35 0.06 75);--danger-soft:oklch(0.33 0.07 27);--plum-soft:oklch(0.34 0.07 300);
  --sh-sm:0 1px 2px oklch(0 0 0/.4);--sh:0 6px 22px oklch(0 0 0/.45);--sh-lg:0 24px 64px oklch(0 0 0/.6);
}
body.dark .topbar{background:oklch(0.25 0.02 258/.85)}
.main{flex:1;min-width:0;position:relative}
.topbar{display:none}
@media(min-width:769px){.topbar{display:flex;align-items:center;gap:12px;justify-content:flex-end;padding:12px 30px;position:sticky;top:0;background:oklch(0.975 0.006 250/.85);backdrop-filter:blur(10px);z-index:var(--z-nav);border-bottom:1px solid var(--line)}}
.lang-tg{display:inline-flex;border:1px solid var(--line-2);border-radius:999px;overflow:hidden;background:var(--surface)}
.lang-tg button{padding:5px 13px;font-size:var(--t-sm);font-weight:700;border:none;background:transparent;cursor:pointer;color:var(--ink-3)}
.lang-tg button.on{background:var(--brand);color:white}
.bell{position:relative}
.bell-b{position:absolute;top:2px;right:2px;background:var(--accent);color:oklch(0.27 0.06 50);font-size:9px;font-weight:800;min-width:16px;height:16px;border-radius:999px;display:flex;align-items:center;justify-content:center;padding:0 3px;font-family:var(--mono)}
.bottom-nav{display:none}.fab{display:none}
@media(max-width:768px){
  .rail{display:none}
  .bottom-nav{display:flex;position:fixed;bottom:0;left:0;right:0;background:var(--surface);border-top:1px solid var(--line);z-index:var(--z-nav);padding:6px 4px env(safe-area-inset-bottom)}
  .bottom-nav button{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 2px;border:none;background:transparent;font-size:10px;font-weight:600;color:var(--ink-3);cursor:pointer}
  .bottom-nav button.on{color:var(--brand)}
  .bottom-nav .material-symbols-outlined{font-size:23px}
  .fab{display:flex;position:fixed;right:16px;bottom:76px;width:56px;height:56px;border-radius:var(--r-lg);background:var(--brand);color:white;border:none;box-shadow:var(--sh-lg);z-index:var(--z-nav);align-items:center;justify-content:center;cursor:pointer}
  .fab .material-symbols-outlined{font-size:27px}
  .m-top{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;position:sticky;top:0;background:oklch(0.975 0.006 250/.9);backdrop-filter:blur(10px);z-index:var(--z-nav)}
  .drawer{top:auto;left:0;bottom:0;transform:none;width:100vw;max-height:92vh;border-radius:var(--r-xl) var(--r-xl) 0 0;animation:slideUp var(--d-sheet) var(--ease-sheet)}
}
@media(min-width:769px){.m-top{display:none}}

/* login */
.login{position:fixed;inset:0;z-index:var(--z-login);display:flex;align-items:center;justify-content:center;padding:20px;background:linear-gradient(135deg,var(--brand-ink),var(--brand-deep))}
.login-card{background:var(--surface);border-radius:var(--r-xl);box-shadow:var(--sh-lg);width:100%;max-width:392px;padding:32px 28px}
.otp{display:flex;gap:8px;justify-content:space-between}
.otp input{width:46px;height:56px;text-align:center;font-size:23px;font-weight:600;font-family:var(--mono);border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--surface)}
.otp input:focus{border-color:var(--brand);box-shadow:0 0 0 3.5px var(--brand-soft);outline:none}
.hint{font-size:var(--t-xs);background:var(--brand-soft);color:var(--brand-mid);border:1px dashed var(--brand);border-radius:var(--r-sm);padding:9px 11px;margin-top:14px;text-align:center}

/* wizard */
.wiz-steps{display:flex;align-items:center;gap:6px;margin-bottom:18px}
.wiz-dot{flex:1;height:5px;border-radius:999px;background:var(--line-2);transition:.25s}
.wiz-dot.done{background:var(--brand)}.wiz-dot.now{background:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}

/* gantt */
.gantt-row{display:grid;grid-template-columns:180px 1fr;align-items:center;border-bottom:1px solid var(--line)}
.gantt-name{padding:8px 12px;font-size:var(--t-sm);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-right:1px solid var(--line)}
.gantt-track{position:relative;height:38px}
.gantt-bar{position:absolute;top:9px;height:20px;border-radius:var(--r-xs);display:flex;align-items:center;padding:0 7px;font-size:10px;font-weight:700;color:white;overflow:hidden;cursor:pointer}
.gantt-grid{display:grid;grid-template-columns:repeat(12,1fr);position:absolute;inset:0}
.gantt-grid>div{border-right:1px solid var(--line)}
.gantt-today{position:absolute;top:0;bottom:0;width:2px;background:var(--accent);z-index:3}

/* stagger reveal */
.reveal>*{opacity:0;transform:translateY(10px);animation:rise .5s cubic-bezier(.16,1,.3,1) forwards}
.reveal>*:nth-child(1){animation-delay:.02s}.reveal>*:nth-child(2){animation-delay:.07s}.reveal>*:nth-child(3){animation-delay:.12s}.reveal>*:nth-child(4){animation-delay:.17s}.reveal>*:nth-child(5){animation-delay:.22s}.reveal>*:nth-child(6){animation-delay:.27s}
@keyframes rise{to{opacity:1;transform:none}}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip{position:absolute;left:8px;top:-48px;z-index:999;background:var(--brand);color:white;padding:9px 14px;border-radius:var(--r-xs);transition:.15s}.skip:focus{top:8px}
@media(prefers-reduced-motion:reduce){*,.reveal>*{animation-duration:.001ms!important;animation-delay:0!important;transition-duration:.001ms!important}}
@keyframes spin{to{transform:rotate(360deg)}}
/* iOS motion polish: spring tap-press on interactive elements + gated hover */
.pill,.btn-icon,.dd-trigger,.frow .up,.wiz-step,.rail-collapse,.x-btn,.lang-tg button,.nav-i,.notif-row,.kpi-cell.tap{transition:transform var(--d-fast) var(--ease-spring),background .15s,border-color .15s,color .15s,box-shadow .15s}
.pill:active,.btn-icon:active,.dd-trigger:active,.frow .up:active,.wiz-step:active,.rail-collapse:active,.x-btn:active,.lang-tg button:active{transform:scale(.95)}
.nav-i:active,.notif-row:active,.kpi-cell.tap:active{transform:scale(.985)}
@media (hover:hover) and (pointer:fine){
  .notif-row:hover,.frow:hover,.sp-row:hover{border-color:var(--line-2)}
  .pill:hover{border-color:var(--ink-3)}
}
.tbl tbody tr{transition:background .15s var(--ease-std)}
.bottom-nav button,.fab{transition:transform var(--d-fast) var(--ease-spring)}
.bottom-nav button:active{transform:scale(.9)}
.fab:active{transform:scale(.92)}
.cat-chip,.badge,.ctr-tag{transition:transform var(--d-fast) var(--ease-spring)}
@media (hover:hover) and (pointer:fine){.tbl tbody tr[style]:hover{background:var(--surface-2)}}
@media(prefers-reduced-motion:reduce){.pill,.btn-icon,.dd-trigger,.frow .up,.wiz-step,.rail-collapse,.x-btn,.lang-tg button,.nav-i,.notif-row,.kpi-cell.tap,.btn,.bottom-nav button,.fab{transform:none!important}}

/* ---- Edit-site wizard rail (shared by app + mockups, single source) ---- */
.wiz-rail{display:flex;gap:5px;border-bottom:1px solid var(--line);background:var(--surface-2);padding:11px 14px;overflow-x:auto}
.wiz-step{flex:1;min-width:64px;display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 5px;border-radius:var(--r-sm);border:1px solid transparent;background:none;cursor:pointer;font-family:inherit;font-size:10.5px;font-weight:600;color:var(--ink-3);white-space:nowrap;transition:background .15s,border-color .15s,color .15s}
.wiz-step .material-symbols-outlined{font-size:19px;color:var(--ink-3)}
.wiz-step:hover{background:var(--surface)}
.wiz-step.done{color:var(--ok)}
.wiz-step.done .material-symbols-outlined{color:var(--ok)}
.wiz-step.on{background:var(--surface);border-color:var(--brand);color:var(--brand-mid);box-shadow:0 1px 3px oklch(0.4 0.05 258/.1)}
.wiz-step.on .material-symbols-outlined{color:var(--brand-mid)}
.wiz-content{flex:1;min-width:0;padding:22px;overflow:auto;max-height:70vh}
/* contract document category rows */
.frow{display:flex;align-items:center;gap:11px;padding:9px 11px;border:1px solid var(--line);border-radius:var(--r-sm);margin-bottom:8px;transition:border-color .15s,background .15s}
.frow.done{border-color:oklch(0.60 0.13 158/.45);background:var(--ok-soft)}
.frow .fico{width:32px;height:32px;border-radius:var(--r-xs);display:grid;place-items:center;background:var(--brand-soft);color:var(--brand-mid);flex-shrink:0}
.frow.done .fico{background:var(--ok);color:white}
.frow .fico .material-symbols-outlined{font-size:18px}
.frow .ftext{flex:1;min-width:0}
.frow .fname{font-size:12.5px;font-weight:600;line-height:1.25}
.frow .ffolder{font-family:var(--mono);font-size:9px;color:var(--plum);display:flex;align-items:center;gap:3px;margin-top:2px}
.frow .ffolder .material-symbols-outlined{font-size:11px}
.frow .ffile{font-family:var(--mono);font-size:10px;color:var(--ok);margin-top:2px;word-break:break-all}
.frow .up{display:inline-flex;align-items:center;gap:5px;height:32px;padding:0 12px;border-radius:var(--r-xs);border:1px solid var(--line-2);background:var(--surface);font-size:11.5px;font-weight:600;cursor:pointer;color:var(--brand-mid);flex-shrink:0}
.frow.done .up{border-color:var(--ok);color:var(--ok)}
.frow .up .material-symbols-outlined{font-size:15px}

/* ---- Edit-site contract sections (shared by app + mockups) ---- */
.ctr-new{height:34px;padding:0 12px;border-radius:var(--r-sm);border:1.5px dashed var(--brand);background:var(--brand-soft);color:var(--brand-mid);font-family:inherit;font-weight:600;font-size:var(--t-sm);cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.ctr-card{border:1px solid var(--line);border-radius:var(--r);margin-bottom:10px;overflow:hidden}
.ctr-card.cur{border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in oklch,var(--brand) 8%,transparent)}
.ctr-head{display:flex;align-items:center;gap:11px;padding:13px 15px;cursor:pointer;background:var(--surface)}
.ctr-card.cur .ctr-head{background:var(--brand-soft)}
.ctr-head .ttl{font-family:var(--display);font-weight:700;font-size:15px}
.ctr-head .rng{font-family:var(--mono);font-size:11px;color:var(--ink-3);margin-top:1px}
.ctr-tag{font-family:var(--mono);font-size:9px;letter-spacing:.08em;text-transform:uppercase;padding:3px 8px;border-radius:var(--r-xs)}
.ctr-tag.cur{background:color-mix(in oklch,var(--ok) 15%,transparent);color:var(--ok)}
.ctr-tag.old{background:var(--surface-2);color:var(--ink-3)}
.ctr-body{padding:14px 15px;border-top:1px solid var(--line);background:var(--surface)}

.overlay-center{display:flex;align-items:center;justify-content:center}
/* .msheet: centered dialog on desktop, but docks + slides up from the bottom on mobile (like .modal) */
@media(max-width:768px){
  .msheet{align-items:flex-end!important;padding:0!important}
  .msheet>div{width:100%!important;max-width:none!important;border-radius:var(--r-xl) var(--r-xl) 0 0!important;animation:slideUp var(--d-sheet) var(--ease-sheet)!important;padding-bottom:calc(8px + env(safe-area-inset-bottom))}
  /* EVERY panel popup slides up from the bottom on mobile (no centered fade) */
  .modal-box{animation:slideUp var(--d-sheet) var(--ease-sheet)!important}
  .drawer{top:auto!important;left:0!important;bottom:0!important;transform:none!important;width:100%!important;max-width:none!important;max-height:90vh;border-radius:var(--r-xl) var(--r-xl) 0 0;animation:slideUp var(--d-sheet) var(--ease-sheet)!important}
}

/* ---- notifications rows ---- */
.notif-row{width:100%;display:flex;align-items:center;gap:11px;padding:11px 12px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);cursor:pointer;text-align:left;margin-bottom:7px;transition:border-color .15s,background .15s;font-family:inherit}
.notif-row:hover{border-color:var(--line-2);background:var(--surface-2)}

/* ============ Site detail full page (bento) ============ */
.sitepage{position:fixed;inset:0;z-index:var(--z-modal,60);background:var(--surface-2);overflow-y:auto;-webkit-overflow-scrolling:touch;animation:sitepageIn var(--d-sheet) var(--ease-sheet)}
@keyframes sitepageIn{from{opacity:0;transform:translateX(26px)}}
@media(max-width:768px){@keyframes sitepageIn{from{opacity:0;transform:translateY(100%)}}}
.sp-wrap{max-width:1180px;margin:0 auto;padding:12px 18px 28px}
.sp-crumb{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-3);margin-bottom:10px;flex-wrap:wrap}
.sp-crumb a{color:var(--ink-3);text-decoration:none;display:inline-flex;align-items:center;gap:4px;padding:4px 7px;border-radius:var(--r-xs);cursor:pointer;background:none;border:none;font-family:inherit;font-size:12px}
.sp-crumb a:hover{background:var(--line);color:var(--ink-2)}
.sp-crumb .cur{color:var(--ink-1);font-weight:600}
.sp-crumb .material-symbols-outlined{font-size:15px;color:#c2cbdc}
.sp-back{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;color:var(--brand);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xs);padding:5px 10px;cursor:pointer;margin-left:auto}
/* mobile: breadcrumb becomes a compact sticky back + name header */
@media(max-width:768px){
  .sp-crumb{position:sticky;top:0;z-index:6;background:rgba(255,255,255,.93);backdrop-filter:blur(8px);margin:-12px -18px 12px;padding:10px 16px;border-bottom:1px solid var(--line);flex-wrap:nowrap;gap:10px}
  .sp-crumb>a,.sp-crumb>.material-symbols-outlined{display:none}
  .sp-crumb .cur{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:700;color:var(--ink)}
  .sp-back{order:-1;margin-left:0}
}
/* mobile: gradient hero + quick-action grid replace the light hero + value card */
.sp-hero-m,.sp-qa-m{display:none}
@media(max-width:768px){
  .sp-hero,.spx-hero{display:none!important}
  .sp-hero-m{display:block;border-radius:18px;background:linear-gradient(160deg,var(--brand-ink),oklch(0.4 0.13 264));color:#fff;padding:16px 17px;margin-bottom:12px}
  .sp-qa-m{display:flex;gap:9px;margin-bottom:14px}
}
.sp-hero-m .shm-row1{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:9px}
.sp-hero-m .shm-chip{font-size:10px;font-weight:700;padding:3px 8px;border-radius:6px;background:rgba(255,255,255,.18);color:#fff}
.sp-hero-m .shm-stp{margin-left:auto;font-size:10px;font-weight:700;padding:3px 8px;border-radius:6px;color:#fff;background:rgba(255,255,255,.28)}
.sp-hero-m .shm-stp.ok{background:var(--ok)}.sp-hero-m .shm-stp.warn{background:var(--amber)}.sp-hero-m .shm-stp.bad{background:var(--danger)}.sp-hero-m .shm-stp.info{background:var(--info)}
.sp-hero-m .shm-title{font-family:var(--display);font-weight:800;font-size:18px;line-height:1.25}
.sp-hero-m .shm-loc{font-size:11.5px;opacity:.82;margin-top:3px;display:flex;align-items:center;gap:4px}
.sp-hero-m .shm-loc .material-symbols-outlined{font-size:14px}
.sp-hero-m .shm-val{margin-top:13px;padding-top:12px;border-top:1px solid rgba(255,255,255,.16)}
.sp-hero-m .shm-val .big{font-size:25px;font-weight:800;letter-spacing:-.02em}
.sp-hero-m .shm-sub{display:flex;gap:16px;margin-top:7px;font-size:11.5px;opacity:.85}
.sp-hero-m .shm-sub b{font-weight:700}
.sp-qa-m .qa-b{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;background:var(--surface);border:1px solid var(--line);border-radius:13px;padding:11px 4px;font-family:var(--lao);font-size:10.5px;font-weight:600;color:var(--ink-2);cursor:pointer;text-decoration:none}
.sp-qa-m .qa-b .material-symbols-outlined{font-size:20px;color:var(--brand)}
.sp-qa-m .qa-b.danger,.sp-qa-m .qa-b.danger .material-symbols-outlined{color:var(--danger)}
.sp-back:hover{background:var(--brand-soft)}
.sp-hero{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:12px 16px;display:flex;align-items:center;gap:14px;margin-bottom:12px;position:relative;overflow:hidden;flex-wrap:wrap}
.sp-hero::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px}
.sp-idico{width:42px;height:42px;border-radius:var(--r);background:var(--plum-soft);color:var(--plum);display:grid;place-items:center;flex-shrink:0;margin-left:3px}
.sp-hg{min-width:200px;flex:1}
.sp-title{font-family:var(--display);font-weight:800;font-size:19px;letter-spacing:-.02em;line-height:1.06}
.sp-en{font-size:11.5px;color:var(--ink-3)}
.sp-loc{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--ink-3);margin-top:3px}
.sp-loc a{color:var(--brand);text-decoration:none;font-weight:600;display:inline-flex;align-items:center;gap:3px}
.sp-loc .material-symbols-outlined{font-size:14px}
.sp-bento{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:minmax(60px,auto);gap:12px;grid-template-areas:"map map kexp kmon" "map map kgrd ktot" "con con bil bil" "ctc shf amn fil" "more more more more"}
@media(max-width:980px){.sp-bento{grid-template-columns:repeat(2,1fr);grid-template-areas:"map map" "kexp kmon" "kgrd ktot" "con con" "bil bil" "ctc shf" "amn fil" "more more"}}
@media(max-width:600px){.sp-bento{grid-template-columns:1fr;grid-template-areas:"map" "kexp" "kmon" "kgrd" "ktot" "con" "bil" "ctc" "shf" "amn" "fil" "more"}}
.sp-tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:13px 14px;overflow:hidden;min-width:0}
.sp-map{grid-area:map;padding:0;position:relative;min-height:190px}
.sp-map iframe{width:100%;height:100%;min-height:190px;border:0;display:block}
.sp-mapbar{position:absolute;left:10px;right:10px;bottom:10px;display:flex;align-items:center;gap:7px;padding:7px 11px;background:rgba(255,255,255,.93);border:1px solid var(--line);border-radius:var(--r-sm)}
.sp-mapbar .co{font-family:var(--mono,var(--mono));font-size:10.5px;color:var(--ink-2);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sp-mapbar a{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:var(--brand);text-decoration:none}
.sp-mapbar .material-symbols-outlined{font-size:15px}
.sp-mapempty{height:100%;min-height:190px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--ink-3);background:var(--surface-2)}
.sp-con{grid-area:con}.sp-bil{grid-area:bil}.sp-ctc{grid-area:ctc}.sp-shf{grid-area:shf}.sp-amn{grid-area:amn}.sp-fil{grid-area:fil}.sp-more{grid-area:more}
.sp-kpi{display:flex;flex-direction:column;justify-content:center;color:#fff;border:none}
.sp-kpi .kk{font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;opacity:.9}
.sp-kpi .kv{font-family:var(--display);font-weight:800;letter-spacing:-.02em;font-size:22px;line-height:1.05;margin-top:3px}
.sp-kpi .kf{font-size:10px;opacity:.85;margin-top:2px}
.k-exp{grid-area:kexp;background:linear-gradient(150deg,#e6960e,#c47a06)}
.k-mon{grid-area:kmon;background:linear-gradient(150deg,#3b82f6,#1d4ed8)}
.k-grd{grid-area:kgrd;background:linear-gradient(150deg,#9168ff,#7c4dff)}
.k-tot{grid-area:ktot;background:linear-gradient(150deg,#14b87a,#0f9d6a)}
.sp-lbl{font-size:10px;text-transform:uppercase;color:var(--ink-3);letter-spacing:.07em;font-weight:700;margin:0 0 9px;display:flex;align-items:center;gap:7px}
.sp-lbl .material-symbols-outlined{font-size:16px;color:var(--brand-mid)}
.sp-lbl .act{margin-left:auto;font-size:11px;font-weight:600;color:var(--brand);text-transform:none;letter-spacing:0;display:inline-flex;align-items:center;gap:3px;cursor:pointer}
.sp-lbl .act .material-symbols-outlined{font-size:15px;color:var(--brand)}
.sp-row{display:flex;align-items:center;gap:9px;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-sm);margin-bottom:6px}
.sp-row:last-child{margin-bottom:0}
.sp-av{width:28px;height:28px;border-radius:var(--r-xs);background:var(--brand-soft);color:var(--brand-mid);display:grid;place-items:center;font-weight:700;font-size:12px;flex-shrink:0}
.sp-renew{display:flex;align-items:center;justify-content:space-between;gap:8px;background:linear-gradient(135deg,var(--brand-soft),#eef4ff);border:1px solid #c9ddff;border-radius:var(--r-sm);padding:8px 11px;margin-bottom:10px}
.sp-fg{display:grid;grid-template-columns:1fr 1fr;gap:9px 14px}
.sp-fg .kpi-k{font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);font-weight:700;margin-bottom:2px}
.sp-bill{border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden}
.sp-bill .br{display:flex;justify-content:space-between;padding:6px 12px;border-bottom:1px solid var(--line);font-size:11.5px}
.sp-bill .br:last-child{border:none}.sp-bill .br span:first-child{color:var(--ink-2)}
.sp-bill .br.extra{background:#fbfdff}.sp-bill .br.total{background:var(--surface-2);font-weight:700}
.sp-amenchip{display:flex;align-items:center;gap:5px;padding:5px 8px;border:1px solid var(--line);border-radius:var(--r-sm);font-size:11px}
.sp-amenchip .material-symbols-outlined{font-size:15px;color:var(--brand-mid)}
.sp-moretabs{display:flex;gap:3px;border-bottom:1px solid var(--line);margin-bottom:11px;overflow-x:auto}
.sp-moretabs button{font-size:12px;font-weight:600;color:var(--ink-3);background:none;border:none;padding:7px 11px;border-bottom:2px solid transparent;cursor:pointer;white-space:nowrap;font-family:inherit}
.sp-moretabs button.on{color:var(--brand);border-color:var(--brand)}
.nw-chip{font-size:8.5px;font-weight:700;color:var(--ok);background:var(--ok-soft);border:1px solid #bce8d4;padding:1px 5px;border-radius:var(--r-xs)}

/* ============ Loading states ============ */
.loadbar{position:fixed;top:0;left:0;right:0;height:3px;z-index:var(--z-toast,600);background:transparent;overflow:hidden;pointer-events:none}
.loadbar>i{position:absolute;top:0;height:100%;width:35%;border-radius:0 3px 3px 0;background:linear-gradient(90deg,var(--brand),var(--plum));animation:loadslide 1.1s ease-in-out infinite}
@keyframes loadslide{0%{left:-35%}100%{left:100%}}
.sk{position:relative;overflow:hidden;background:rgba(15,23,41,.06);border-radius:var(--r-xs)}
.sk::after{content:'';position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(15,23,41,.05),transparent);animation:skshimmer 1.4s infinite}
@keyframes skshimmer{100%{transform:translateX(100%)}}
.sk-line{height:11px;border-radius:var(--r-xs)}
.sk-av{width:30px;height:30px;border-radius:var(--r-xs);flex-shrink:0}
.sk-row{display:grid;grid-template-columns:1fr 90px 110px 56px 90px;gap:14px;align-items:center;padding:13px 14px;border-bottom:1px solid var(--line)}
@media(max-width:768px){.sk-row{grid-template-columns:1fr 70px}.sk-row .sk-hide{display:none}}
.sk-card{border:1px solid var(--line);border-radius:var(--r);padding:18px;display:flex;flex-direction:column;gap:12px}
.up-row{display:flex;align-items:center;gap:11px;padding:11px 12px;border:1px solid var(--brand);border-radius:var(--r);background:var(--brand-soft);margin-bottom:8px}
.up-bar{height:5px;border-radius:3px;background:rgba(37,99,235,.15);overflow:hidden;margin-top:6px}
.up-bar>i{display:block;height:100%;width:30%;background:linear-gradient(90deg,var(--brand),var(--plum));border-radius:3px;animation:upgrow 1.6s ease-in-out infinite}
@keyframes upgrow{0%{width:10%}50%{width:80%}100%{width:10%}}
.saving-tag{font-size:9px;font-weight:700;color:var(--brand-mid);background:var(--brand-soft);border:1px solid #c9ddff;padding:1px 6px;border-radius:var(--r-xs);display:inline-flex;align-items:center;gap:4px}
@media(prefers-reduced-motion:reduce){.loadbar>i,.sk::after,.up-bar>i{animation:none}}

/* ============ Calendar / agenda page ============ */
/* unified calendar table */
.ag-seg{display:inline-flex;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:3px;gap:2px;flex-wrap:wrap}
.ag-seg button{border:none;background:none;font-family:inherit;font-size:12.5px;font-weight:600;color:var(--ink-2);padding:7px 12px;border-radius:var(--r-xs);cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:background .15s,color .15s}
.ag-seg button .ct{font-family:var(--mono);font-size:10px;background:var(--line);color:var(--ink-2);border-radius:var(--r-xs);padding:1px 6px}
.ag-seg button.on{background:var(--surface);color:var(--brand-mid);box-shadow:0 1px 3px oklch(0.4 0.05 258/.12)}
.ag-seg button.on .ct{background:var(--brand-soft);color:var(--brand-mid)}
.ag-kind{display:inline-flex;align-items:center;gap:6px;font-family:var(--lao);font-size:11.5px;font-weight:700;white-space:nowrap}
.ag-kind .d{width:8px;height:8px;border-radius:3px;flex-shrink:0}
.ag-kind.k-meet .d{background:var(--plum)} .ag-kind.k-guard .d{background:var(--ok)} .ag-kind.k-holi .d{background:var(--danger)}
.ag-st{font-family:var(--body);font-size:11px;font-weight:700;letter-spacing:.01em;padding:4px 9px;border-radius:var(--r-xs);white-space:nowrap}
.ag-st.up{background:var(--brand-soft);color:var(--brand-mid)}
.ag-st.done{background:var(--ok-soft);color:oklch(0.4 0.1 158)}
.ag-st.pend{background:var(--warn-soft);color:oklch(0.45 0.12 60)}
.ag-st.bad{background:var(--danger-soft);color:var(--danger)}
.ag-st.holi{background:var(--danger-soft);color:var(--danger)}
.ag-tabs{display:flex;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:3px}
.ag-tabs button{border:none;background:none;padding:7px 14px;border-radius:var(--r-xs);font-size:13px;font-weight:600;color:var(--ink-3);cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-family:inherit}
.ag-tabs button.on{background:var(--surface);color:var(--brand);box-shadow:0 1px 3px rgba(15,23,41,.08)}
/* mobile agenda list replaces grid + table; add via the per-page FAB */
.ag-mobile{display:none}
@media(max-width:768px){
  .ag-tabs,.cal-add-row{display:none!important}
  .ag-vcal,.ag-vtbl{display:none!important}
  .ag-mobile{display:block}
}
.agm-chips{display:flex;gap:7px;overflow-x:auto;padding-bottom:12px;scrollbar-width:none}
.agm-chips::-webkit-scrollbar{display:none}
.agm-chip{flex:0 0 auto;display:flex;align-items:center;gap:6px;font-family:var(--lao);font-size:12px;font-weight:600;padding:7px 12px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink-2);cursor:pointer;white-space:nowrap}
.agm-chip .d{width:8px;height:8px;border-radius:50%}
.agm-chip .ct{font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}
.agm-chip.on{background:var(--brand-soft);border-color:transparent;color:var(--brand-mid)}
.agm-grp{margin-bottom:4px}
.agm-dl{display:flex;align-items:baseline;gap:8px;padding:12px 2px 6px}
.agm-dl b{font-size:13px;font-weight:800}.agm-dl span{font-size:11px;color:var(--ink-3)}
.agm-ev{display:flex;align-items:center;gap:11px;background:var(--surface);border:1px solid var(--line);border-radius:13px;padding:11px 13px;margin-bottom:8px;cursor:pointer}
.agm-ev .bar{width:4px;align-self:stretch;border-radius:3px;flex:none;background:var(--ink-4)}
.agm-ev.k-meet .bar{background:var(--brand)}.agm-ev.k-guard .bar{background:var(--ok)}.agm-ev.k-holi .bar{background:var(--danger)}
.agm-ev .ev-ic{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;flex:none;background:var(--surface-2)}
.agm-ev.k-meet .ev-ic{background:var(--brand-soft);color:var(--brand-mid)}.agm-ev.k-guard .ev-ic{background:oklch(0.95 0.05 150);color:var(--ok-deep)}.agm-ev.k-holi .ev-ic{background:oklch(0.96 0.04 25);color:var(--danger)}
.agm-ev .ev-ic .material-symbols-outlined{font-size:18px}
.agm-ev .tl{font-weight:700;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.agm-ev .sb{font-size:11.5px;color:var(--ink-3);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.agm-ev .ev-st{font-size:10px;font-weight:700;color:var(--ink-3);white-space:nowrap;flex:none}
.ag-lyr{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;border-radius:var(--r-sm);border:1.5px solid var(--line);background:var(--surface);cursor:pointer;font-weight:600;font-size:12.5px;user-select:none}
.ag-lyr .sw{width:30px;height:17px;border-radius:var(--r-lg);background:var(--line);position:relative;transition:.2s;flex-shrink:0}
.ag-lyr .sw::after{content:'';position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:#fff;transition:.2s;box-shadow:0 1px 2px rgba(0,0,0,.2)}
.ag-lyr .dt{width:9px;height:9px;border-radius:50%}
.ag-lyr.meet .dt{background:var(--plum)}.ag-lyr.guard .dt{background:var(--ok)}.ag-lyr.holi .dt{background:var(--danger)}
.ag-lyr.on.meet{border-color:color-mix(in oklch,var(--plum) 40%,transparent);background:var(--plum-soft)}.ag-lyr.on.guard{border-color:#bce8d4;background:var(--ok-soft)}.ag-lyr.on.holi{border-color:#f4c4c9;background:var(--danger-soft)}
.ag-lyr.on.meet .sw{background:var(--plum)}.ag-lyr.on.guard .sw{background:var(--ok)}.ag-lyr.on.holi .sw{background:var(--danger)}
.ag-lyr.on .sw::after{left:15px}.ag-lyr.off{opacity:.5}
.ag-cal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.ag-dow{display:grid;grid-template-columns:repeat(7,1fr);background:var(--surface-2);border-bottom:1px solid var(--line)}
.ag-dow span{padding:9px 0;text-align:center;font-size:10px;font-weight:700;color:var(--ink-3);text-transform:uppercase;font-family:var(--mono);letter-spacing:.05em}
.ag-grid{display:grid;grid-template-columns:repeat(7,1fr)}
.ag-cell{min-height:88px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:6px 7px;position:relative}
.ag-cell:nth-child(7n){border-right:none}
.ag-cell.out{background:#fafbfd}.ag-cell.out .ag-dn{color:#cdd5e3}
.ag-dn{font-family:var(--mono,var(--mono));font-size:12px;font-weight:600;color:var(--ink-2)}
.ag-cell.today .ag-dn{background:var(--brand);color:#fff;border-radius:var(--r-xs);padding:1px 6px}
.ag-cell.holi{background:var(--danger-soft)}
.ag-holtag{display:inline-block;font-size:9px;font-weight:700;color:var(--danger);margin-top:3px;cursor:pointer}
.ag-ev{display:flex;align-items:center;gap:5px;margin-top:4px;font-size:10px;font-weight:600;padding:2px 5px;border-radius:var(--r-xs);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ag-ev .d{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.ag-ev.meet{background:var(--plum-soft);color:var(--plum)}.ag-ev.meet .d{background:var(--plum)}
.ag-ev.guard{background:var(--ok-soft);color:#0c7a52}.ag-ev.guard .d{background:var(--ok)}
.ag-qadd{position:absolute;top:5px;right:5px;width:19px;height:19px;border-radius:var(--r-xs);background:var(--brand);color:#fff;display:grid;place-items:center;border:none;cursor:pointer;opacity:0;transition:.15s;z-index:2}
.ag-cell:hover .ag-qadd{opacity:1}
.ag-ev.holi{background:var(--danger-soft);color:#b3392f}.ag-ev.holi .d{background:var(--danger)}
.ag-cell{cursor:pointer}
.ag-cell.sel{background:var(--brand-soft);box-shadow:inset 0 0 0 1px var(--brand)}
.ag-more{font-size:9.5px;color:var(--ink-3);font-weight:600;margin-top:3px;cursor:pointer}
.ag-more:hover{color:var(--brand-mid)}
/* calendar KPI strip + upcoming rail */
.ag-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;margin-bottom:12px}
@media(max-width:720px){.ag-kpis{grid-template-columns:repeat(2,1fr)}}
.ag-kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:11px 13px}
.ag-kpi .v{font-family:var(--display);font-weight:800;font-size:21px;letter-spacing:-.01em}
.ag-kpi .k{font-family:var(--mono);font-size:9px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);margin-top:3px}
.ag-kpi.m .v{color:var(--plum)}.ag-kpi.g .v{color:var(--ok)}.ag-kpi.h .v{color:var(--danger)}.ag-kpi.u .v{color:var(--brand-mid)}
.ag-layout{display:grid;grid-template-columns:1fr 280px;gap:14px;align-items:start}
@media(max-width:900px){.ag-layout{grid-template-columns:1fr}}
.ag-rail{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px}
.ag-rail-h{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin-bottom:10px}
.ag-up{display:flex;gap:10px;padding:9px 10px;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line);margin-bottom:7px;cursor:pointer}
.ag-up:hover{border-color:var(--brand)}
.ag-up .day{font-family:var(--display);font-weight:800;font-size:15px;line-height:1;text-align:center;min-width:30px}
.ag-up .day .mo{font-family:var(--mono);font-size:8px;font-weight:600;color:var(--ink-3);display:block;margin-top:2px}
.ag-up .t{font-size:12px;font-weight:600;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ag-up .s{font-size:10px;color:var(--ink-3);margin-top:1px;display:flex;align-items:center;gap:4px}
.ag-up .dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.ag-empty{font-size:11px;color:var(--ink-3);text-align:center;padding:18px 0}
/* add chooser */
.ag-chooser .box{background:var(--surface);border-radius:var(--r-lg);padding:8px;width:260px;box-shadow:var(--sh-lg);animation:popIn .2s cubic-bezier(.16,1,.3,1)}
.ag-chooser .opt{display:flex;align-items:center;gap:11px;padding:12px;border-radius:var(--r-sm);cursor:pointer}
.ag-chooser .opt:hover{background:var(--surface-2)}
.ag-chooser .opt .i{width:34px;height:34px;border-radius:var(--r-sm);display:grid;place-items:center;flex-shrink:0}
.ag-chooser .opt .tt{font-weight:700;font-size:13px}.ag-chooser .opt .ss{font-size:11px;color:var(--ink-3)}

/* ============ Site page left-rail layout ============ */
.sp-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:12px}
.sp-kpis>.sp-kpi{grid-area:auto}
@media(max-width:720px){.sp-kpis{grid-template-columns:repeat(2,1fr)}}
.sp-content .sp-map,.sp-content .sp-con,.sp-content .sp-bil,.sp-content .sp-ctc,.sp-content .sp-shf,.sp-content .sp-amn,.sp-content .sp-fil{grid-area:auto}
.sp-shell{display:block}
/* sticky top tab bar (was a left rail) */
.sp-rail{position:sticky;top:0;z-index:8;background:color-mix(in oklch,var(--bg) 88%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);margin:6px 0 16px}
.sp-rnav{display:flex;flex-direction:row;gap:2px;overflow-x:auto;flex-wrap:wrap}
@media(max-width:820px){.sp-rnav{flex-wrap:nowrap}}
.sp-rnav button{display:inline-flex;align-items:center;gap:8px;padding:12px 15px;border:none;background:none;border-bottom:2.5px solid transparent;cursor:pointer;font-size:13.5px;font-weight:600;color:var(--ink-3);white-space:nowrap;font-family:inherit}
.sp-rnav button:hover{color:var(--ink)}
.sp-rnav button.on{color:var(--brand-mid);border-bottom-color:var(--brand)}
.sp-rnav button .material-symbols-outlined{font-size:18px}
.sp-rnav .cnt{font-family:var(--mono);font-size:10px;background:var(--surface-2);border:1px solid var(--line);padding:1px 7px;border-radius:var(--r-lg);color:var(--ink-3)}
.sp-rnav button.on .cnt{background:var(--brand-soft);border-color:#bcd3ff;color:var(--brand-mid)}
.sp-rnav .cnt.alert{background:var(--danger-soft);border-color:var(--danger);color:var(--danger)}
.sp-rnav .cnt.alert{background:var(--danger-soft);border-color:#f4c4c9;color:var(--danger)}
/* --- restructured site overview (mockup-faithful) --- */
.spx-bill{display:grid;grid-template-columns:1.05fr 1fr;margin-bottom:16px;border-radius:var(--r-lg);background:var(--surface);border:1px solid var(--line);box-shadow:0 1px 2px oklch(0.4 0.05 258/.07);overflow:hidden}
.spx-hero{padding:22px 24px;background:linear-gradient(135deg,var(--brand-ink),var(--brand-deep));color:#fff;display:flex;flex-direction:column;gap:10px}
.spx-hero .k{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:oklch(0.82 0.04 255)}
.spx-hero .v{font-family:var(--display);font-weight:800;font-size:44px;letter-spacing:-.03em;line-height:1}
.spx-hero .sub{font-size:12.5px;color:oklch(0.82 0.04 255);display:flex;gap:16px;flex-wrap:wrap}
.spx-hero .sub b{color:#fff;font-family:var(--mono)}
.spx-hero .note{font-size:11px;color:oklch(0.82 0.04 255);margin-top:auto;line-height:1.5}
.spx-right{padding:18px 20px}
.spx-lbl{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);display:flex;align-items:center;gap:7px;margin-bottom:10px}
.spx-lbl .material-symbols-outlined{font-size:15px;color:var(--brand-mid)}
.spx-brk{display:flex;justify-content:space-between;align-items:baseline;padding:7px 0;font-size:13px;border-bottom:1px solid var(--line)}
.spx-brk .l{color:var(--ink-2)}.spx-brk .v{font-family:var(--mono);font-weight:600}
.spx-viewc{margin-top:12px;display:inline-flex;align-items:center;gap:5px;color:var(--brand-mid);font-weight:700;font-size:12.5px;cursor:pointer}
.spx-tbl{width:100%;border-collapse:collapse;font-size:13px}
.spx-tbl th{text-align:left;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);padding:10px 16px;border-bottom:1.5px solid var(--line-2);background:var(--surface-2)}
.spx-tbl th.r,.spx-tbl td.r{text-align:right}
.spx-tbl td{padding:11px 16px;border-bottom:1px solid var(--line)}
.spx-tbl tfoot td{font-weight:800;background:var(--surface-2)}
/* mobile: shift table stacks into one card per shift (label left / value right) */
@media(max-width:768px){
  .spx-tbl thead{display:none}
  .spx-tbl tbody tr{display:block;padding:11px 14px;border-bottom:1px solid var(--line)}
  .spx-tbl tbody tr:last-child{border-bottom:none}
  .spx-tbl tbody td{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:4px 0;border:none;text-align:right}
  .spx-tbl tbody td::before{content:attr(data-label);color:var(--ink-3);font-size:11px;font-weight:600;text-align:left}
  .spx-tbl tbody td:first-child{justify-content:flex-start;font-weight:700;margin-bottom:5px;padding-bottom:7px;border-bottom:1px dashed var(--line)}
  .spx-tbl tbody td:first-child::before{content:none}
  .spx-tbl tfoot tr{display:flex;justify-content:space-between;align-items:center;padding:12px 14px}
  .spx-tbl tfoot td{display:none;padding:0;border:none;background:none}
  .spx-tbl tfoot td:first-child,.spx-tbl tfoot td:last-child{display:block}
}
.spx-grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px;align-items:start}
.spx-amen{display:inline-flex;align-items:center;gap:5px;padding:5px 11px;border-radius:999px;border:1px solid var(--line-2);font-size:12px;font-weight:600;color:var(--ink-2);margin:0 6px 6px 0}
.spx-amen .material-symbols-outlined{font-size:15px}
@media(max-width:880px){.spx-bill,.spx-grid2{grid-template-columns:1fr}}
/* cost detail modal */
.cost-seg{display:inline-flex;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:3px}
.cost-seg button{border:none;background:none;font-family:inherit;font-size:12px;font-weight:700;padding:5px 13px;border-radius:999px;cursor:pointer;color:var(--ink-3)}
.cost-seg button.on{background:var(--brand);color:#fff}
.cost-sitehdr td{background:color-mix(in oklch,var(--brand) 7%,transparent);font-weight:800;font-family:var(--display)}
.cost-sitehdr .num{color:var(--brand-mid)}
.cost-hol{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--warn-soft);border-top:1px solid color-mix(in oklch,var(--warn) 25%,transparent)}
.cost-hol .t{font-weight:700;color:oklch(0.5 0.13 60);display:flex;align-items:center;gap:6px}
.cost-hol .amt{font-weight:800;color:oklch(0.5 0.13 60)}
.cost-holbtn{margin-left:auto;display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 12px;border-radius:999px;border:1.5px solid color-mix(in oklch,var(--warn) 45%,transparent);background:var(--surface);color:oklch(0.5 0.13 60);font-weight:700;font-size:12px;cursor:pointer}
.cost-tag{font-family:var(--mono);font-size:9px;font-weight:700;padding:1px 6px;border-radius:5px;background:var(--warn-soft);color:oklch(0.5 0.13 60)}
/* cost detail: month -> site -> shift */
.cm-list{padding:8px}
.cm-card{border:1px solid var(--line);border-radius:var(--r);margin-bottom:8px;overflow:hidden}
.cm-row{display:grid;grid-template-columns:1.4fr .8fr 1fr 1fr auto;gap:10px;align-items:center;padding:12px 14px;cursor:pointer;transition:.12s}
.cm-row:hover{background:var(--brand-soft)}
.cm-row .mn{display:flex;align-items:center;gap:8px;font-weight:700}
.cm-row .lbl{font-size:9px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.04em;display:block}
.cm-row .v{font-family:var(--mono);font-weight:600;text-align:right;font-feature-settings:"tnum" 1}
.cm-hb{display:inline-flex;align-items:center;gap:3px;font-family:var(--mono);font-size:10px;font-weight:700;padding:2px 8px;border-radius:999px;background:var(--warn-soft);color:oklch(0.5 0.13 60)}
.cm-hb.zero{background:var(--surface-2);color:var(--ink-3)}
.cm-holc{color:oklch(0.5 0.13 60)}
.cm-exp{border-top:1px dashed var(--line-2);background:var(--surface-2)}
.cm-sub{font-size:9.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);padding:10px 14px 4px;display:flex;align-items:center;gap:6px}
.cm-sub .material-symbols-outlined{font-size:14px;color:var(--brand-mid)}.cm-sub.h .material-symbols-outlined{color:var(--warn)}
.cm-t{width:100%;border-collapse:collapse;font-size:12px}
.cm-t th{text-align:left;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-3);padding:6px 14px;border-bottom:1px solid var(--line-2)}
.cm-t th.r,.cm-t td.r{text-align:right}.cm-t td{padding:7px 14px;border-bottom:1px solid var(--line)}
.cm-t .sname td{background:color-mix(in oklch,var(--brand) 7%,transparent);font-family:var(--display);font-weight:800;font-size:12.5px}
.cm-t .sname .num{color:var(--brand-mid)}
.cm-shc{display:flex;align-items:center;gap:7px;padding-left:8px}
.cm-ic{width:20px;height:20px;border-radius:5px;display:grid;place-items:center;flex-shrink:0}
.cm-ic.day{background:color-mix(in oklch,#f59e0b 16%,transparent);color:#b45309}.cm-ic.night{background:color-mix(in oklch,#6366f1 16%,transparent);color:#4338ca}
.cm-h{background:var(--warn-soft)}
.cm-h th{border-bottom-color:color-mix(in oklch,var(--warn) 25%,transparent)}.cm-h td{border-bottom-color:color-mix(in oklch,var(--warn) 18%,transparent)}
.cm-h .sname td{background:color-mix(in oklch,var(--warn) 12%,transparent)}.cm-h .sname .num{color:oklch(0.5 0.13 60)}
.cm-h td.amt,.cm-h td.rate{color:oklch(0.5 0.13 60);font-weight:700;font-family:var(--mono)}
.cm-h .foot td{font-weight:800;background:color-mix(in oklch,var(--warn) 9%,transparent)}
.cm-days{padding:8px 14px;font-size:11px;color:oklch(0.5 0.13 60);display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.cm-chip{font-family:var(--mono);background:var(--surface);border:1px solid color-mix(in oklch,var(--warn) 35%,transparent);border-radius:999px;padding:2px 9px;font-weight:600}
.cm-tot{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;font-weight:800;background:color-mix(in oklch,var(--brand) 6%,transparent)}.cm-tot .num{color:var(--brand-mid);font-family:var(--mono)}
/* policy toggle rows */
.tglrow{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line);cursor:pointer}
.tglrow:last-child{border-bottom:none}
.tglrow .ic{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;background:var(--surface-2);color:var(--ink-3);flex-shrink:0}
.tglrow.on .ic{background:var(--brand-soft);color:var(--brand-mid)}
.tglrow .tx{flex:1;min-width:0}
.tglrow .nm{font-weight:700;font-size:13.5px}
.tglrow .ds{font-size:11.5px;color:var(--ink-3);margin-top:1px}
.tgsw{position:relative;width:44px;height:25px;border-radius:999px;background:var(--line-2);transition:.18s;flex-shrink:0}
.tgsw.on{background:var(--brand)}
.tgsw::after{content:'';position:absolute;top:3px;left:3px;width:19px;height:19px;border-radius:50%;background:#fff;transition:.18s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.tgsw.on::after{left:22px}
/* choice chips (single-choice selectors: status/stage) */
.choice{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border-radius:999px;border:1.5px solid var(--line-2);font-size:12.5px;font-weight:600;cursor:pointer;background:var(--surface);color:var(--ink-2);font-family:inherit;transition:.12s}
.choice:hover{border-color:var(--line)}
.choice.on{font-weight:700}
/* config modal: live preview + color swatches */
.cfg-prev{display:flex;align-items:center;gap:11px;padding:12px 14px;border:1px dashed var(--line-2);border-radius:var(--r);background:var(--surface-2)}
.cfg-prev .pl{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3)}
.cfg-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;font-size:12.5px;font-weight:700}
.cfg-sw{width:30px;height:30px;border-radius:var(--r-xs);cursor:pointer;border:2px solid transparent;display:grid;place-items:center;padding:0}
.cfg-sw.on{box-shadow:0 0 0 2px var(--surface),0 0 0 4px currentColor}
.cfg-sw .material-symbols-outlined{font-size:17px;color:#fff}
.cfg-sw:not(.on) .material-symbols-outlined{display:none}
/* sites directory: metric strip + mono table headers + expiry badge */
.site-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:14px}
@media(max-width:640px){.site-strip{grid-template-columns:1fr 1fr}}
.site-m{border:1px solid var(--line);border-radius:var(--r);padding:13px 15px;background:var(--surface);box-shadow:0 1px 2px oklch(0.4 0.05 258/.07)}
.site-m .k{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.site-m .v{font-family:var(--display);font-weight:800;font-size:21px;margin-top:5px}
.site-m .v.b{color:var(--brand-mid)}
.tbl-sites thead th{font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);background:var(--surface-2);border-bottom:1.5px solid var(--line-2)}
.site-exp{display:inline-flex;flex-direction:column;align-items:flex-end;gap:2px}
.site-bdg{font-size:9.5px;font-weight:700;padding:1px 7px;border-radius:999px}
/* mobile: site cards replace the table */
.sites-cards{display:none}
@media(max-width:768px){
  .sites-tbl-panel{display:none}
  .sites-cards{display:flex;flex-direction:column;gap:10px}
}
.scard{position:relative;background:var(--surface);border:1px solid var(--line);border-radius:15px;padding:13px 14px 13px 17px;overflow:hidden;cursor:pointer}
.scard .acc{position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--ink-4)}
.scard.active .acc{background:var(--ok)}.scard.expiring .acc{background:var(--amber)}.scard.overdue .acc,.scard.ended .acc{background:var(--danger)}.scard.upcoming .acc{background:var(--info)}
.scard.ended{opacity:.7}
.scard-top{display:flex;align-items:flex-start;gap:10px}
.scard .nm{font-weight:700;font-size:14px;line-height:1.3}
.scard .id{font-size:10.5px;color:var(--ink-3);margin-top:2px}
.scard .stp{font-size:9.5px;font-weight:700;padding:4px 9px;border-radius:7px;white-space:nowrap;flex:none}
.scard .stp.ok{background:var(--ok-soft);color:var(--ok-deep)}.scard .stp.warn{background:var(--warn-soft);color:oklch(0.5 0.14 70)}.scard .stp.bad{background:var(--danger-soft);color:var(--danger)}.scard .stp.info{background:#e7effe;color:var(--info)}
.scard-stats{display:flex;align-items:center;gap:14px;margin-top:11px;padding-top:11px;border-top:1px solid var(--line)}
.scard .sst{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2)}
.scard .sst .material-symbols-outlined{font-size:16px;color:var(--ink-3)}
.scard .sst b{font-weight:700}
.scard .sst.exp{margin-left:auto;display:flex;align-items:center;gap:6px}
.scard .sst.exp .dleft{font-size:9.5px;font-weight:700;padding:2px 6px;border-radius:5px}
.scard .sst.exp .dleft.warn{background:var(--warn-soft);color:oklch(0.5 0.14 70)}.scard .sst.exp .dleft.bad{background:var(--danger-soft);color:var(--danger)}

/* ===== contracts mobile (portfolio hero + cards) ===== */
.ctr-mobile{display:none}
@media(max-width:768px){
  .ctr-desk{display:none}
  .ctr-mobile{display:flex;flex-direction:column;gap:0}
}
.ctr-hero{border-radius:20px;padding:17px 17px 15px;color:#fff;position:relative;overflow:hidden;background:linear-gradient(150deg,oklch(0.26 0.09 264),oklch(0.4 0.14 264) 60%,oklch(0.46 0.15 280))}
.ctr-hero::after{content:'';position:absolute;right:-30px;top:-30px;width:130px;height:130px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.16),transparent 70%)}
.ctr-hero .lbl{font-size:10px;letter-spacing:.06em;text-transform:uppercase;opacity:.78;font-weight:600}
.ctr-hero .big{font-weight:800;font-size:30px;letter-spacing:-.02em;margin-top:3px;line-height:1.05}
.ctr-hero .mini{display:flex;margin-top:14px;position:relative;z-index:1}
.ctr-hero .mi{flex:1;text-align:center}.ctr-hero .mi+.mi{border-left:1px solid rgba(255,255,255,.16)}
.ctr-hero .mi .n{font-weight:800;font-size:16px}
.ctr-hero .mi .k{font-size:9px;opacity:.72;margin-top:2px}
.ctr-health{margin-top:12px}
.ctr-health .hb{display:flex;height:8px;border-radius:6px;overflow:hidden;background:var(--line)}
.ctr-health .hb i{display:block}.ctr-health .hb .a{background:var(--ok)}.ctr-health .hb .w{background:var(--warn)}.ctr-health .hb .d{background:var(--danger)}
.ctr-health .hl{display:flex;gap:13px;margin-top:7px;font-size:10.5px;color:var(--ink-3)}
.ctr-health .hl span{display:flex;align-items:center;gap:4px}.ctr-health .hl b{color:var(--ink);font-weight:700}
.ctr-health .hl .dot{width:7px;height:7px;border-radius:50%}
.ctr-msearch{margin-top:13px}
.ctr-chips{display:flex;gap:7px;overflow-x:auto;padding:11px 0 3px;scrollbar-width:none}.ctr-chips::-webkit-scrollbar{display:none}
.ctr-chip{flex:0 0 auto;font-size:12px;font-weight:600;padding:7px 14px;border-radius:20px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink-2);cursor:pointer;transition:all .15s}
.ctr-chip.on{background:oklch(0.26 0.09 264);border-color:oklch(0.26 0.09 264);color:#fff}
.ctr-cards{display:flex;flex-direction:column;gap:9px;margin-top:6px}
.ccard{background:var(--surface);border:1px solid var(--line);border-radius:15px;padding:13px 14px;cursor:pointer;transition:transform .12s,border-color .12s}
.ccard:active{transform:scale(.985)}
.ccard.bad{opacity:.92}
.ccard-top{display:flex;align-items:center;gap:11px}
.ccard .cbadge{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;flex:none;font-weight:800;font-size:15px;line-height:1.05;text-align:center}
.ccard .cbadge small{font-size:8px;font-weight:600;opacity:.7}
.ccard.ok .cbadge{background:var(--ok-soft);color:var(--ok-deep)}
.ccard.warn .cbadge{background:var(--warn-soft);color:oklch(0.5 0.14 70)}
.ccard.bad .cbadge{background:var(--danger-soft);color:var(--danger)}
.ccard .cinfo{flex:1;min-width:0}
.ccard .cust{font-weight:700;font-size:13px;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ccard .no{font-size:10.5px;color:var(--ink-3);margin-top:2px}
.ccard .cnet{text-align:right;flex:none}.ccard .cnet .v{font-weight:800;font-size:13px;color:var(--brand-mid)}.ccard .cnet .k{font-size:8.5px;color:var(--ink-4);text-transform:uppercase}
.ccard-meta{display:flex;align-items:center;gap:13px;margin-top:11px}
.ccard .s{display:flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-2)}.ccard .s .material-symbols-outlined{font-size:14px;color:var(--ink-3)}.ccard .s b{font-weight:700;color:var(--ink)}
.ccard .cexp{margin-left:auto;text-align:right;min-width:92px}
.ccard .cexp .row{display:flex;align-items:center;justify-content:flex-end;gap:4px;font-size:10px;font-weight:600;margin-bottom:4px}
.ccard .cexp .row .material-symbols-outlined{font-size:13px}
.ccard .cexp.ok .row{color:var(--ok-deep)}.ccard .cexp.warn .row{color:oklch(0.5 0.14 70)}.ccard .cexp.bad .row{color:var(--danger)}
.ccard .cexp .bar{height:5px;border-radius:4px;background:var(--line);overflow:hidden}
.ccard .cexp .bar i{display:block;height:100%;border-radius:4px}
.ccard .cexp.ok .bar i{background:var(--ok)}.ccard .cexp.warn .bar i{background:var(--warn)}.ccard .cexp.bad .bar i{background:var(--danger)}
/* ===== contract detail mobile ===== */
.cd-mob{display:none}
@media(max-width:768px){
  .cd-desk{display:none}
  .cd-mob{display:block}
}
.cdm-hero{border-radius:19px;color:#fff;padding:16px 17px;position:relative;overflow:hidden;background:linear-gradient(155deg,var(--brand-ink,oklch(0.26 0.09 264)),oklch(0.4 0.14 264) 60%,oklch(0.47 0.15 282))}
.cdm-hero::after{content:'';position:absolute;right:-26px;top:-30px;width:120px;height:120px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.15),transparent 70%)}
.cdm-hero .r1{display:flex;align-items:center;gap:6px;margin-bottom:9px;position:relative;z-index:1}
.cdm-hero .ch{font-size:10px;font-weight:700;padding:3px 8px;border-radius:6px;background:rgba(255,255,255,.16);color:#fff}
.cdm-hero .cstp{margin-left:auto;font-size:10px;font-weight:700;padding:3px 9px;border-radius:6px;filter:brightness(1.6)}
.cdm-hero h1{font-size:17px;font-weight:800;line-height:1.25;position:relative;z-index:1}
.cdm-hero .val{margin-top:13px;padding-top:12px;border-top:1px solid rgba(255,255,255,.18);display:flex;align-items:flex-end;gap:6px;position:relative;z-index:1}
.cdm-hero .big{font-weight:800;font-size:22px;letter-spacing:-.01em;line-height:1}
.cdm-hero .u{font-size:10px;opacity:.78;margin-bottom:3px}
.cdm-hero .s2{display:flex;flex-wrap:wrap;gap:14px;margin-top:8px;font-size:11px;opacity:.88;position:relative;z-index:1}.cdm-hero .s2 b{font-weight:700}
.cdm-qa{display:flex;gap:8px;margin-top:13px}
.cdm-qa button,.cdm-qa .lnk{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;background:var(--surface);border:1px solid var(--line);border-radius:13px;padding:11px 3px;font-family:inherit;font-size:10px;font-weight:600;color:var(--ink-2);cursor:pointer;text-decoration:none}
.cdm-qa button:active{transform:scale(.95)}
.cdm-qa button.warn{background:var(--warn-soft);border-color:color-mix(in oklch,var(--warn) 40%,transparent)}
.cdm-qa .material-symbols-outlined{font-size:20px;color:var(--brand)}.cdm-qa button.warn .material-symbols-outlined{color:oklch(0.5 0.13 60)}
.cdm-tabs{display:flex;margin-top:15px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:3px}
.cdm-tabs button{flex:1;border:0;background:transparent;font-family:inherit;font-size:12px;font-weight:600;color:var(--ink-3);padding:8px 0;border-radius:9px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px}
.cdm-tabs button .n{font-size:8.5px;font-weight:700;background:var(--line);color:var(--ink-3);border-radius:8px;padding:1px 5px}
.cdm-tabs button.on{background:var(--brand-ink,oklch(0.26 0.09 264));color:#fff}.cdm-tabs button.on .n{background:rgba(255,255,255,.2);color:#fff}
.cdm-body{padding-top:13px}
.cdm-sect{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);margin:6px 2px 9px;display:flex;align-items:center;gap:6px}
.cdm-sect .material-symbols-outlined{font-size:15px;color:var(--brand)}
.cdm-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;margin-bottom:11px}
.cdm-ladder{padding:3px 15px}
.cdm-ladder .r{display:flex;justify-content:space-between;align-items:center;padding:11px 0;font-size:12.5px}
.cdm-ladder .r+.r{border-top:1px solid var(--line)}
.cdm-ladder .r .k{color:var(--ink-2);display:flex;align-items:center;gap:6px}
.cdm-ladder .r .k .pencil{font-size:14px;color:var(--brand);cursor:pointer}
.cdm-ladder .r .v{font-weight:600}
.cdm-ladder .r.hol{background:var(--warn-soft);margin:0 -15px;padding:9px 15px}.cdm-ladder .r.hol .k,.cdm-ladder .r.hol .v{color:oklch(0.5 0.13 60)}
.cdm-ladder .r.neg .v{color:var(--danger)}
.cdm-ladder .r.sum{border-top:1.5px solid var(--line-2)}.cdm-ladder .r.sum .k{font-weight:700;color:var(--ink)}
.cdm-ladder .r.final .k{font-weight:800;color:var(--ink)}.cdm-ladder .r.final .v{font-weight:800;font-size:14px;color:var(--brand-mid)}
.cdm-bbtn{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;border:1px dashed var(--line-2);background:var(--surface);border-radius:11px;padding:11px;font-family:inherit;font-size:12px;font-weight:600;color:var(--ink-2);cursor:pointer;margin-bottom:9px}
.cdm-bbtn.brand{border-style:solid;border-color:var(--brand);background:var(--brand-soft);color:var(--brand-mid)}
.cdm-bbtn .material-symbols-outlined{font-size:17px}
.cdm-comp{display:flex;padding:14px 4px}
.cdm-comp .c{flex:1;text-align:center}.cdm-comp .c+.c{border-left:1px solid var(--line)}
.cdm-comp .c .v{font-weight:800;font-size:15px}.cdm-comp .c .v.red{color:var(--danger)}
.cdm-comp .c .k{font-size:9px;color:var(--ink-3);text-transform:uppercase;margin-top:2px}
.cdm-empty{display:flex;align-items:center;gap:8px;padding:14px 15px;font-size:12px;color:var(--ink-2)}.cdm-empty .material-symbols-outlined{font-size:18px}
.cdm-scard{display:flex;align-items:center;gap:11px;background:var(--surface);border:1px solid var(--line);border-radius:13px;padding:11px 13px;margin-bottom:9px;cursor:pointer}
.cdm-scard:active{transform:scale(.99)}
.cdm-scard .ic{width:36px;height:36px;border-radius:10px;background:var(--brand-soft);color:var(--brand-mid);display:grid;place-items:center;flex:none}.cdm-scard .ic .material-symbols-outlined{font-size:19px}
.cdm-scard .nm{flex:1;min-width:0}.cdm-scard .nm .t{font-weight:700;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cdm-scard .nm .s{font-size:10px;color:var(--ink-3);margin-top:3px;display:flex;align-items:center;gap:7px}
.cdm-scard .g{text-align:right;flex:none}.cdm-scard .g .v{font-weight:700;font-size:12px;color:var(--ink)}.cdm-scard .g .k{font-size:8.5px;color:var(--ink-4)}
.cdm-crow{display:flex;justify-content:space-between;align-items:center;padding:11px 15px;font-size:12.5px}.cdm-crow+.cdm-crow{border-top:1px solid var(--line)}
.cdm-crow .k{color:var(--ink-3)}.cdm-crow a{color:var(--brand);text-decoration:none;font-weight:600;display:flex;align-items:center;gap:5px}
.cdm-doc{display:flex;align-items:flex-start;gap:10px;padding:11px 15px;font-size:12.5px}.cdm-doc+.cdm-doc{border-top:1px solid var(--line)}
.cdm-doc .material-symbols-outlined.f{font-size:17px;color:var(--ink-3);flex-shrink:0}
.cdm-doc .nm{flex:1;min-width:0}
.cdm-doc .fn{display:flex;align-items:center;gap:5px;font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--brand-mid);margin-top:2px}
.cdm-doc .fn span:first-child{cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.cdm-doc .up{width:30px;height:30px;border-radius:8px;border:1px solid var(--line-2);background:#fff;display:grid;place-items:center;color:var(--ink-2);cursor:pointer;flex-shrink:0}.cdm-doc .up .material-symbols-outlined{font-size:15px}
.cdm-scrim{position:fixed;inset:0;z-index:var(--z-scrim,400);background:rgba(15,20,40,.42);opacity:0;pointer-events:none;transition:opacity .25s}
.cdm-scrim.show{opacity:1;pointer-events:auto}
.cdm-sheet{position:fixed;left:0;right:0;bottom:0;z-index:var(--z-panel,401);background:var(--bg);border-radius:22px 22px 0 0;max-height:90%;display:flex;flex-direction:column;transform:translateY(100%);transition:transform .28s cubic-bezier(.32,.72,0,1)}
.cdm-sheet.show{transform:translateY(0)}
.cdm-sheet .grab{width:38px;height:4px;border-radius:3px;background:var(--line-2);margin:9px auto 4px}
.cdm-sheet .sh{display:flex;align-items:center;gap:8px;padding:6px 16px 12px;border-bottom:1px solid var(--line)}
.cdm-sheet .sh .ttl{flex:1}.cdm-sheet .sh .ttl b{font-size:15px;font-weight:800}.cdm-sheet .sh .ttl .sub{font-size:10.5px;color:var(--ink-3);margin-top:1px}
.cdm-sheet .sh .x{width:30px;height:30px;border-radius:9px;border:1px solid var(--line-2);background:#fff;display:grid;place-items:center;color:var(--ink-2);cursor:pointer}
.cdm-sheet .sb{overflow-y:auto;padding:14px 16px 20px}

/* ===== contract history mobile ===== */
.hh-mob{display:none}
@media(max-width:768px){
  .hh-desk{display:none!important}
  .hh-mob{display:block;padding:0 0 8px}
}
/* mobile views: Noto Sans everywhere (incl. currency/numbers), icons keep their font */
.hh-mob *:not(.material-symbols-outlined),
.cd-mob *:not(.material-symbols-outlined),
.ctr-mobile *:not(.material-symbols-outlined){font-family:'Noto Sans','Noto Sans Lao',sans-serif!important}
.hh-mob .num,.cd-mob .num,.ctr-mobile .num{font-variant-numeric:tabular-nums}
.hhm-terms{display:flex;gap:8px;overflow-x:auto;padding:12px 14px 4px;scrollbar-width:none}.hhm-terms::-webkit-scrollbar{display:none}
.hhm-tm{flex:0 0 auto;width:128px;border:1px solid var(--line-2);background:var(--surface);border-radius:13px;padding:10px 12px;cursor:pointer;position:relative;transition:all .15s}
.hhm-tm .dot{position:absolute;top:11px;right:11px;width:8px;height:8px;border-radius:50%;background:var(--line-2)}.hhm-tm .dot.cur{background:var(--ok)}
.hhm-tm.on{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand)}
.hhm-tm .lab{font-size:9px;color:var(--ink-4);text-transform:uppercase;letter-spacing:.04em;font-weight:700}
.hhm-tm .rng{font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;margin-top:4px}
.hhm-tm .net{font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--ink-2);margin-top:5px}
.hhm-delta{margin:12px 14px 0;border-radius:16px;padding:14px 15px;border:1px solid var(--line);background:var(--surface)}
.hhm-delta.up{background:linear-gradient(150deg,var(--ok-soft),var(--surface));border-color:color-mix(in oklch,var(--ok) 30%,transparent)}
.hhm-delta.dn{background:linear-gradient(150deg,var(--danger-soft),var(--surface));border-color:color-mix(in oklch,var(--danger) 25%,transparent)}
.hhm-delta .top{display:flex;align-items:center;gap:11px}
.hhm-delta .ic{width:38px;height:38px;border-radius:11px;background:#fff;border:1px solid var(--line);display:grid;place-items:center;color:var(--ok-deep);flex:none}.hhm-delta.dn .ic{color:var(--danger)}.hhm-delta .ic .material-symbols-outlined{font-size:21px}
.hhm-delta .lab{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3)}
.hhm-delta .act{font-family:'JetBrains Mono',monospace;font-weight:700;font-size:12px;margin-top:1px}
.hhm-delta .chip{margin-left:auto;font-family:'JetBrains Mono',monospace;font-size:14px;font-weight:800;color:var(--ok-deep);display:flex;align-items:center;gap:1px;flex:none}.hhm-delta.dn .chip{color:var(--danger)}.hhm-delta .chip .material-symbols-outlined{font-size:17px}
.hhm-delta .flow{display:flex;align-items:baseline;gap:8px;margin-top:11px;padding-top:11px;border-top:1px solid var(--line);flex-wrap:wrap}
.hhm-delta .flow .o{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink-4);text-decoration:line-through;text-decoration-color:var(--line-2)}
.hhm-delta .flow .ar{color:var(--ink-3);font-size:14px;align-self:center}
.hhm-delta .flow .n{font-family:'JetBrains Mono',monospace;font-size:18px;font-weight:800}
.hhm-delta .flow .u{font-size:10px;color:var(--ink-3)}
.hhm-pol{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:11px 14px 0}
.hhm-pol .pcell{background:var(--surface);border:1px solid var(--line);border-radius:11px;padding:9px 11px}
.hhm-pol .pcell .k{font-size:9px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.03em}
.hhm-pol .pcell .v{font-family:'JetBrains Mono',monospace;font-size:12.5px;font-weight:700;margin-top:3px;display:flex;align-items:center;gap:5px}
.hhm-pol .pcell .v .o{color:var(--ink-4);text-decoration:line-through;text-decoration-color:var(--line-2);font-size:11px}
.hhm-pol .pcell .v .material-symbols-outlined{font-size:12px;color:var(--ink-3)}
.hhm-pol .pcell.chg{border-color:color-mix(in oklch,var(--ok) 35%,transparent);background:var(--ok-soft)}.hhm-pol .pcell.chg .v .n{color:var(--ok-deep)}
.hhm-seg{display:flex;background:var(--surface);border:1px solid var(--line);border-radius:11px;padding:3px;margin:13px 14px 0}
.hhm-seg button{flex:1;border:0;background:transparent;font-family:inherit;font-size:11px;font-weight:600;color:var(--ink-3);padding:8px 0;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px}
.hhm-seg button.on{background:var(--brand);color:#fff}.hhm-seg button .material-symbols-outlined{font-size:15px}
.hhm-body{padding:0 14px}
.hhm-sect{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);margin:15px 2px 9px;display:flex;align-items:center;gap:6px}
.hhm-sect .material-symbols-outlined{font-size:15px;color:var(--brand)}
.hhm-sc{background:var(--surface);border:1px solid var(--line);border-radius:14px;margin-bottom:10px;overflow:hidden}
.hhm-sc .sc-h{display:flex;align-items:center;gap:10px;padding:12px 13px;cursor:pointer}
.hhm-sc .sc-h .ic{width:34px;height:34px;border-radius:9px;background:var(--brand-soft);color:var(--brand-mid);display:grid;place-items:center;flex:none}.hhm-sc .sc-h .ic .material-symbols-outlined{font-size:18px}
.hhm-sc .sc-h .nm{flex:1;min-width:0}
.hhm-sc .sc-h .nm .t{font-weight:700;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hhm-sc .sc-h .nm .sub{display:flex;align-items:center;gap:5px;margin-top:3px;font-family:'JetBrains Mono',monospace;font-size:10px;flex-wrap:wrap}
.hhm-sc .sc-h .nm .sub .o{color:var(--ink-4);text-decoration:line-through;text-decoration-color:var(--line-2)}
.hhm-sc .sc-h .nm .sub .material-symbols-outlined{font-size:11px;color:var(--ink-3)}
.hhm-sc .sc-h .nm .sub .n{font-weight:700;color:var(--ink)}
.hhm-sc .sc-h .rt{display:flex;flex-direction:column;align-items:flex-end;gap:5px;flex:none}
.hhm-sc .sc-h .dchip{font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:800;padding:2px 7px;border-radius:6px}
.hhm-sc .sc-h .dchip.up{background:var(--ok-soft);color:var(--ok-deep)}.hhm-sc .sc-h .dchip.same{background:var(--line);color:var(--ink-3)}
.hhm-sc .sc-h .chev{color:var(--ink-3);transition:transform .2s}.hhm-sc.open .sc-h .chev{transform:rotate(180deg)}
.hhm-sc .sc-x{display:none;border-top:1px solid var(--line);background:var(--surface-2)}.hhm-sc.open .sc-x{display:block}
.hhm-sc .shf{padding:11px 13px}.hhm-sc .shf+.shf{border-top:1px solid var(--line)}
.hhm-sc .shf-h{display:flex;align-items:center;gap:6px;margin-bottom:9px}
.hhm-sc .shf-h .material-symbols-outlined{font-size:14px}.hhm-sc .shf-h .day{color:var(--amber)}.hhm-sc .shf-h .night{color:var(--brand-mid)}
.hhm-sc .shf-h .tm2{font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700}
.hhm-sc .shf-h .badge{margin-left:auto;font-size:9.5px;font-weight:700;padding:2px 6px;border-radius:5px}
.hhm-sc .tiles{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.hhm-sc .tile{background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px 10px;min-width:0}
.hhm-sc .tile .k{font-size:9px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.02em}
.hhm-sc .tile .v{font-family:'JetBrains Mono',monospace;font-weight:800;font-size:13px;margin-top:3px;display:flex;align-items:center;gap:3px;white-space:nowrap}
.hhm-sc .tile .v .material-symbols-outlined{font-size:12px}
.hhm-sc .tile .w{font-family:'JetBrains Mono',monospace;font-size:9px;color:var(--ink-4);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hhm-sc .tile.up .v{color:var(--ok-deep)}.hhm-sc .tile.down .v{color:var(--danger)}.hhm-sc .tile.same .v{color:var(--ink-2)}
.hhm-sc .tile.hol{background:var(--plum-soft);border-color:color-mix(in oklch,var(--plum) 22%,transparent)}.hhm-sc .tile.hol .k{color:var(--plum)}.hhm-sc .tile.hol .v{color:var(--plum)}
.hhm-sc .tile.hol.tap{cursor:pointer}
.hhm-mc{background:var(--surface);border:1px solid var(--line);border-radius:12px;margin-bottom:9px;padding:11px 13px;display:flex;align-items:center;gap:10px}
.hhm-mc .mn{font-weight:700;font-size:12.5px;flex:1}
.hhm-mc .hb{font-size:9px;font-weight:700;padding:2px 7px;border-radius:5px;background:var(--plum-soft);color:var(--plum)}
.hhm-mc .tot{font-family:'JetBrains Mono',monospace;font-weight:800;font-size:12px;color:var(--plum)}
.hhm-empty{padding:24px 16px;text-align:center;font-size:12px;color:var(--ink-3)}
.hhm-meta{margin:8px 16px 18px;display:flex;align-items:center;gap:7px;font-size:11px;color:var(--ink-3)}
.hhm-meta .av{width:24px;height:24px;border-radius:50%;background:var(--brand-soft);color:var(--brand-mid);display:grid;place-items:center;font-weight:700;font-size:11px;flex:none}
.hhm-meta b{color:var(--ink-2)}

.site-bdg.ok{background:var(--ok-soft);color:var(--ok)}
.site-bdg.warn{background:var(--warn-soft);color:oklch(0.5 0.13 60)}
.site-bdg.danger{background:var(--danger-soft);color:var(--danger)}
.site-bdg.muted{background:var(--surface-2);color:var(--ink-3)}
.sp-2col{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start}
@media(max-width:680px){.sp-2col{grid-template-columns:1fr}}
.sp-2col .col{display:flex;flex-direction:column;gap:12px;min-width:0}
.sp-shiftrow{display:flex;align-items:center;gap:11px;padding:9px 11px;border:1px solid var(--line);border-radius:var(--r-sm);margin-bottom:7px}
.sp-shiftrow:last-child{margin-bottom:0}

/* ============ Site page contract docset grid ============ */
.sp-doc-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.sp-doc-count{font-size:11px;color:var(--ink-3);font-family:var(--mono)}
.sp-doc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
@media(max-width:900px){.sp-doc-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:560px){.sp-doc-grid{grid-template-columns:1fr}}
.sp-doccard{border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:12px 13px;display:flex;flex-direction:column;gap:8px}
.sp-doccard.done{border-color:#bfe6cf;background:linear-gradient(180deg,#f1faf4,#fbfffc)}
.sp-doccard-h{display:flex;align-items:center;gap:7px}
.sp-doccard-h .br{font-size:17px;color:var(--ink-3)}
.sp-doccard.done .sp-doccard-h .br{color:var(--ok,#16a34a)}
.sp-doccard-h .n{font-weight:800;font-size:13px;color:var(--ink-1)}
.sp-doccard-h .nm{font-weight:700;font-size:12.5px;color:var(--ink-1);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sp-doccard-h .bdg{font-size:9.5px;font-weight:700;padding:2px 7px;border-radius:var(--r-lg);flex-shrink:0}
.sp-doccard-h .bdg.ok{background:#dff3e6;color:var(--ok,#16a34a)}
.sp-doccard-h .bdg.miss{background:var(--surface-2);color:var(--ink-3)}
.sp-docfile{display:flex;align-items:center;gap:6px;padding:6px 9px;border-radius:var(--r-xs);background:rgba(255,255,255,.7);border:1px solid var(--line);cursor:pointer}
.sp-doccard:not(.done) .sp-docfile{background:var(--surface-2)}
.sp-docfile .fn{font-size:11px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.sp-docfile:hover{border-color:var(--brand)}
.sp-docup{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;color:var(--brand);cursor:pointer;align-self:flex-start}
.sp-docup:hover{color:var(--brand-mid)}

/* ============ Reusable calendar date field ============ */
.xdate{position:relative;display:flex;align-items:center}
.xdate-disp{width:100%;padding-right:38px!important;cursor:pointer}
.xdate-btn{position:absolute;right:5px;top:50%;transform:translateY(-50%);width:28px;height:28px;border:none;border-radius:var(--r-xs);background:var(--brand-soft);color:var(--brand-mid);cursor:pointer;display:grid;place-items:center}
.xdate-btn:hover{background:#dce8fd}
.xdate-btn .material-symbols-outlined{font-size:17px}
.xdate.xdate-dis{opacity:.5;pointer-events:none}
.xcalpop{z-index:var(--z-toast,600);width:292px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-lg);padding:14px;animation:popIn var(--d-base) var(--ease-sheet)}
.xcal-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.xcal-h .mo{font-family:var(--display);font-weight:700;font-size:15px;letter-spacing:-.01em}
.xcal-h button{width:32px;height:32px;border:none;border-radius:var(--r-sm);background:var(--surface-2);cursor:pointer;display:grid;place-items:center;color:var(--ink-2);transition:transform var(--d-fast) var(--ease-spring),background .15s}
.xcal-h button:hover{background:var(--line)}
.xcal-h button:active{transform:scale(.9)}
.xcal-h button .material-symbols-outlined{font-size:20px}
.xcal-wd{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin-bottom:2px}
.xcal-wd .wd{font-size:10px;font-weight:700;color:var(--ink-3);text-align:center;padding:2px 0 4px}
.xcal-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:34px;gap:3px}
.xcal-grid .day{position:relative;border:none;background:none;border-radius:var(--r-sm);height:34px;width:100%;min-width:0;display:grid;place-items:center;font-family:var(--mono);font-size:13px;color:var(--ink);cursor:pointer;transition:transform var(--d-fast) var(--ease-spring),background .15s,color .15s}
.xcal-grid .day:hover{background:var(--brand-soft)}
.xcal-grid .day:active{transform:scale(.9)}
.xcal-grid .day.empty{visibility:hidden;cursor:default}
.xcal-grid .day.today::after{content:'';position:absolute;bottom:5px;width:4px;height:4px;border-radius:50%;background:var(--brand)}
.xcal-grid .day.sel{background:var(--brand);color:#fff;font-weight:700}
.xcal-grid .day.today.sel::after{background:#fff}
.xcal-foot{display:flex;justify-content:space-between;margin-top:10px;padding-top:9px;border-top:1px solid var(--line)}
.xcal-foot button{border:none;background:none;font-family:inherit;font-size:12px;font-weight:700;color:var(--brand-mid);cursor:pointer;padding:6px 10px;border-radius:var(--r-xs);transition:background .15s}
.xcal-foot button:hover{background:var(--brand-soft)}
/* ===== mobile wheel date picker ===== */
.xwheel,.xwheel-scrim{display:none}
.xwheel-scrim{position:fixed;inset:0;z-index:9998;background:rgba(15,20,40,.4)}
.xwheel{position:fixed;left:0;right:0;bottom:0;z-index:9999;flex-direction:column;background:var(--surface);border-radius:20px 20px 0 0;box-shadow:0 -12px 34px rgba(20,30,60,.22);padding-bottom:max(10px,env(safe-area-inset-bottom));animation:slideUp var(--d-base,.28s) var(--ease-sheet,cubic-bezier(.32,.72,0,1))}
@media(max-width:768px){
  .xcalpop{display:none!important}
  .xwheel{display:flex}
  .xwheel-scrim{display:block}
}
.xwheel .xw-grab{width:38px;height:4px;border-radius:3px;background:var(--line-2);margin:9px auto 2px}
.xwheel .xw-h{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--line)}
.xwheel .xw-h b{font-size:14px;font-weight:800}
.xwheel .xw-h button{border:0;background:none;font-family:inherit;font-size:13px;font-weight:700;cursor:pointer;padding:6px 4px}
.xwheel .xw-h .c{color:var(--ink-3)}.xwheel .xw-h .ok{color:var(--brand-mid)}
.xwheel .xw-quick{display:flex;gap:7px;padding:11px 14px 4px;overflow-x:auto;scrollbar-width:none}.xwheel .xw-quick::-webkit-scrollbar{display:none}
.xwheel .xw-quick .chip{flex:0 0 auto;font-family:inherit;font-size:11.5px;font-weight:600;padding:7px 13px;border-radius:18px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink-2);cursor:pointer}
.xwheel .xw-quick .chip:active{background:var(--brand-soft);border-color:var(--brand);color:var(--brand-mid)}
.xwheel .xw-cols{position:relative;display:grid;grid-template-columns:.8fr 1.5fr 1fr;padding:8px 12px 14px}
.xwheel .xw-band{position:absolute;left:12px;right:12px;top:50%;transform:translateY(-50%);height:38px;background:var(--brand-soft);border-radius:10px;pointer-events:none;z-index:0}
.xwheel .xw-mask{position:absolute;left:0;right:0;top:8px;bottom:14px;pointer-events:none;z-index:2;background:linear-gradient(180deg,var(--surface),transparent 30%,transparent 70%,var(--surface))}
.xwheel .xw-col{position:relative;z-index:1;height:190px;overflow-y:auto;scroll-snap-type:y mandatory;padding:76px 0;scrollbar-width:none;text-align:center;-webkit-overflow-scrolling:touch}
.xwheel .xw-col::-webkit-scrollbar{display:none}
.xwheel .xw-col .it{height:38px;line-height:38px;scroll-snap-align:center;font-size:15px;color:var(--ink-4);font-weight:600;cursor:pointer;transition:color .12s,font-size .12s}
.xwheel .xw-col .it.on{color:var(--brand-ink);font-weight:800;font-size:17px}
/* compensation modal extras */
.comp-roll{border-radius:var(--r-sm);padding:10px 12px;display:flex;gap:9px;align-items:flex-start;font-size:var(--t-xs);line-height:1.5}
.comp-roll.inc{background:var(--brand-soft);color:var(--brand-mid)}
.comp-roll.out{background:var(--warn-soft);color:#9a6500}
.comp-roll .material-symbols-outlined{font-size:17px;flex-shrink:0}
.comp-drop{border:1.5px dashed var(--line-2);border-radius:var(--r-sm);padding:14px;text-align:center;cursor:pointer;color:var(--ink-3);font-size:var(--t-xs)}
.comp-drop:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}
.cgrp{display:flex;flex-direction:column;gap:11px}
.cgrp-h{display:flex;align-items:center;gap:7px;font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.cgrp-h .material-symbols-outlined{font-size:15px;color:var(--brand-mid)}
.cgrp-h::after{content:'';flex:1;height:1px;background:var(--line)}
.comp-seg{display:flex;gap:8px}
.comp-seg .pill{flex:1;justify-content:center;height:40px}
.up-tile{position:relative;aspect-ratio:4/3;border-radius:var(--r-sm);border:1px solid var(--brand);background-size:cover;background-position:center;overflow:hidden}
.up-tile.err{border-color:var(--danger)}
.up-tile-ov{position:absolute;inset:0;background:oklch(0.2 0.03 258/.55);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:#fff;padding:8px;text-align:center}
.up-tile-ov .pct{font-family:var(--mono);font-weight:700;font-size:16px}
.up-tile-ov .lbl{font-size:9px;opacity:.85}
.up-tile-bar{width:78%;height:5px;border-radius:3px;background:oklch(1 0 0/.28);overflow:hidden}
.up-tile-bar i{display:block;height:100%;background:#fff;border-radius:3px;transition:width .2s}
.up-tile-chk{position:absolute;top:5px;right:5px;width:22px;height:22px;border-radius:50%;background:var(--ok);color:#fff;display:grid;place-items:center;box-shadow:0 1px 4px oklch(0 0 0/.35)}
.up-tile-chk .material-symbols-outlined{font-size:15px}
.up-tile-err{position:absolute;inset:0;background:oklch(0.2 0.03 258/.62);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:#fff;font-size:10px;padding:6px;text-align:center;cursor:pointer}
.up-tile-err .material-symbols-outlined{font-size:20px;color:var(--danger)}

/* ============ Renew modal: tax checkbox + docset rows ============ */
.rn-chk{display:flex;align-items:center;gap:10px;border:1px solid var(--line-2);border-radius:var(--r-sm);padding:10px 12px;cursor:pointer}
.rn-chk .box{width:20px;height:20px;border-radius:var(--r-xs);border:2px solid var(--line-2);display:grid;place-items:center;flex-shrink:0;color:#fff;transition:.15s}
.rn-chk.on .box{background:var(--brand);border-color:var(--brand)}
.rn-chk .box .material-symbols-outlined{font-size:15px;opacity:0}
.rn-chk.on .box .material-symbols-outlined{opacity:1}
.rn-chk .tt{font-size:var(--t-sm);font-weight:600} .rn-chk .ss{font-size:10.5px;color:var(--ink-3)}
.docrow{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:var(--r-sm);padding:9px 11px;margin-bottom:7px}
.docrow.req{border-color:#f3d9a6;background:#fffaf0}
.docrow .n{width:22px;height:22px;border-radius:var(--r-xs);background:var(--surface-2);display:grid;place-items:center;font-family:var(--mono);font-weight:700;font-size:11px;color:var(--ink-2);flex-shrink:0}
.docrow .mid{flex:1;min-width:0}
.docrow .nm{font-size:var(--t-xs);font-weight:600;color:var(--ink-1)}
.docrow .st{font-size:10.5px;margin-top:1px;font-family:var(--mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.docrow .st.inh{color:var(--ink-3)} .docrow .st.empty{color:var(--warn)}
.docbtn{border:1px solid var(--line-2);background:var(--surface);color:var(--brand);font-family:inherit;font-weight:700;font-size:11px;padding:6px 11px;border-radius:var(--r-xs);cursor:pointer;white-space:nowrap}
.docbtn:hover{background:var(--brand-soft)}
.docbtn.amber{background:var(--warn);border-color:var(--warn);color:#fff}

/* Renew docset row: flex always in CSS (Alpine :style can never clobber it) */
.rndoc{display:flex!important;align-items:center;gap:11px;border:1px solid var(--line);border-radius:var(--r-sm);padding:9px 12px;margin-bottom:7px}
.rndoc.req{border-color:#f3d9a6;background:#fffaf0}
.rndoc .n{flex-shrink:0;width:24px;height:24px;border-radius:var(--r-xs);background:var(--surface-2);display:grid;place-items:center;font-family:var(--mono);font-weight:700;font-size:11px;color:var(--ink-2)}
.rndoc .mid{flex:1;min-width:0;overflow:hidden}
.rndoc .nm{font-size:var(--t-xs);font-weight:600;color:var(--ink-1);line-height:1.25}
.rndoc .st{font-size:10.5px;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rndoc .st.opt{color:var(--ink-3)} .rndoc .st.inh{color:var(--ok)} .rndoc .st.req{color:var(--warn)}

/* Site photo gallery tile (4:3 + hover caption/zoom) */
.sp-photo{position:relative;width:100%;aspect-ratio:4/3;border-radius:var(--r-sm);overflow:hidden;border:1px solid var(--line);cursor:pointer;background:var(--surface-2);padding:0;display:block;transition:transform .15s}
.sp-photo img{width:100%;height:100%;object-fit:cover;display:block}
.sp-photo:hover{transform:translateY(-1px);border-color:var(--brand)}
.sp-photo .zoom{position:absolute;top:6px;right:6px;width:24px;height:24px;border-radius:var(--r-xs);background:rgba(255,255,255,.88);display:grid;place-items:center;opacity:0;transition:opacity .15s}
.sp-photo .zoom .material-symbols-outlined{font-size:15px;color:var(--ink-1)}
.sp-photo .cap{position:absolute;left:0;right:0;bottom:0;padding:5px 8px;background:linear-gradient(0deg,rgba(15,22,40,.78),transparent);color:#fff;font-family:var(--mono);font-size:9.5px;opacity:0;transition:opacity .15s;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}
.sp-photo:hover .zoom,.sp-photo:hover .cap{opacity:1}
.sp-pgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}

/* Contract history popup: term rail + detail pane */
.hist-box{max-width:920px}
.hist-split{display:grid;grid-template-columns:200px 1fr;gap:0;padding:0;min-height:0}
@media(max-width:768px){.hist-split{grid-template-columns:1fr}}
.hist-rail{border-right:1px solid var(--line);padding:14px 12px;display:flex;flex-direction:column;gap:7px;background:var(--surface-2);overflow-y:auto;max-height:70vh}
@media(max-width:768px){.hist-rail{border-right:none;border-bottom:1px solid var(--line);flex-direction:row;overflow-x:auto;max-height:none}}
.hist-rail-lbl{font-size:9px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);padding:2px 4px 4px}
.hist-term{text-align:left;border:1px solid var(--line);background:var(--surface);border-radius:var(--r-sm);padding:9px 11px;cursor:pointer;transition:border-color .15s,background .15s;min-width:150px}
.hist-term:hover{border-color:var(--brand)}
.hist-term.on{border-color:var(--brand);background:var(--brand-soft)}
.hist-term .yr{font-family:var(--display);font-weight:800;font-size:14px;color:var(--ink-1)}
.hist-term .rg{font-size:9.5px;color:var(--ink-3);margin-top:2px}
.hist-term .vv{font-size:11px;color:var(--brand-mid);margin-top:5px;display:flex;justify-content:space-between;align-items:center;gap:6px;font-weight:700}
.hist-term .dc{font-size:9px;color:var(--ink-3);margin-top:4px;display:flex;align-items:center;gap:3px}
.hist-now{font-size:8px;font-weight:700;color:var(--ok);background:var(--ok-soft,#e6f6ec);border-radius:4px;padding:1px 5px}
.hist-detail{padding:18px 20px;overflow-y:auto;max-height:70vh}
.hist-dtop{display:flex;align-items:flex-start;gap:12px;margin-bottom:12px}
.hist-dtop>div:first-child{flex:1;min-width:0}
.hist-tbl{border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden}
.hist-tr{display:grid;grid-template-columns:1.4fr 1fr .6fr .9fr .9fr;gap:8px;padding:8px 12px;font-size:11.5px;align-items:center}
.hist-tr:not(:last-child){border-bottom:1px solid var(--line)}
.hist-tr.h{background:var(--surface-2);color:var(--ink-3);font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.hist-tr .r{text-align:right}
.hist-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.hist-meta>div{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:9px 11px}
.hist-empty{padding:12px;border:1px dashed var(--line-2);border-radius:var(--r-sm);text-align:center;color:var(--ink-3);font-size:var(--t-xs)}

/* ===== contract detail: grid2 fix + improved hierarchy ===== */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media(max-width:880px){.grid2{grid-template-columns:1fr}}
.cd-head{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;flex-wrap:wrap;margin:2px 0 22px}
.cd-titlerow{display:flex;align-items:center;gap:12px;margin:5px 0 8px;flex-wrap:wrap}
.cd-titlerow h1{font-family:var(--display);font-size:32px;font-weight:800;letter-spacing:-.02em;color:var(--brand-mid);margin:0}
.cd-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;color:var(--ink-3);font-size:13px}
.cd-meta .c{font-weight:600;color:var(--ink);font-size:15px}
.cd-meta .sep{width:3px;height:3px;border-radius:50%;background:var(--line-2)}
.cd-bill{display:grid;grid-template-columns:1.05fr 1fr;gap:0;margin-bottom:16px;overflow:visible;position:relative}
.cd-hero{padding:22px 24px;background:linear-gradient(135deg,var(--brand-ink),var(--brand-deep));color:#fff;display:flex;flex-direction:column;justify-content:space-between;gap:14px;border-radius:var(--r-lg) 0 0 var(--r-lg)}
@media(max-width:880px){.cd-hero{border-radius:var(--r-lg) var(--r-lg) 0 0}}
.cd-hero .k{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:oklch(0.82 0.04 255)}
.cd-hero .v{font-family:var(--display);font-weight:800;font-size:46px;letter-spacing:-.03em;line-height:1;margin:7px 0 4px}
.cd-hero .sub{font-size:12.5px;color:oklch(0.82 0.04 255);display:flex;gap:16px;flex-wrap:wrap;margin-top:2px}
.cd-hero .sub b{color:#fff;font-family:var(--mono)}
.cd-right{padding:18px 20px;display:flex;flex-direction:column}
.cd-brk{display:flex;justify-content:space-between;align-items:baseline;padding:7px 0;font-size:13.5px;border-bottom:1px solid var(--line)}
.cd-brk .lbl{color:var(--ink-2)}
.cd-brk .val{font-family:var(--mono);font-weight:600}
.cd-apply{margin-top:auto;padding-top:14px}
.cd-apply .ar{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;align-items:end}
.cd-empty{display:flex;align-items:center;gap:10px;padding:14px;border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink-3);font-size:12.5px}
.cd-controw{display:flex;justify-content:space-between;align-items:center;padding:8px 0;font-size:13px;border-bottom:1px solid var(--line)}
.cd-controw:last-child{border-bottom:none}
.cd-thist{display:flex;align-items:center;gap:10px;padding:11px 13px;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line);margin-bottom:7px}
.cd-thist .dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}
.cd-sech{display:flex;justify-content:space-between;align-items:center;padding:13px 16px;border-bottom:1px solid var(--line);font-weight:700;font-size:13.5px}

/* contract billing: two figures (before/after tax) + finalize popover */
.cd-hero .hcell{display:flex;flex-direction:column;gap:2px}
.cd-hero .hcell .hk{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:oklch(0.82 0.04 255)}
.cd-hero .hcell.pre .hv{font-family:var(--display);font-weight:800;font-size:28px;letter-spacing:-.03em;color:oklch(0.88 0.03 255)}
.cd-hero .hcell.post .hv{font-family:var(--display);font-weight:800;font-size:46px;letter-spacing:-.03em;line-height:1;margin-top:2px}
.cd-hero .hdiv{height:1px;background:oklch(1 0 0/.12);margin:2px 0}
.cd-hero .tag{font-size:8.5px;background:oklch(1 0 0/.16);padding:2px 7px;border-radius:5px;letter-spacing:.06em;margin-left:6px}
.cd-brk.sum{background:var(--surface-2);margin:4px -8px;padding:8px 10px;border-radius:8px;border-bottom:none}
.cd-brk.sum .lbl{font-weight:700;color:var(--ink)}.cd-brk.sum .val{font-weight:800}
.cd-brk.sum.final .val{color:var(--brand-mid);font-size:15px}
.cd-pencil{margin-left:6px;color:var(--brand-mid);cursor:pointer;font-size:14px;vertical-align:-2px}
.cd-setbtn{margin-top:13px;width:100%;height:38px;border:1.5px dashed var(--line-2);background:var(--surface-2);border-radius:var(--r-sm);color:var(--brand-mid);font-weight:700;font-family:inherit;font-size:12.5px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:7px}
.cd-setbtn:hover{border-color:var(--brand);background:var(--brand-soft)}
.cd-pop{position:absolute;top:8px;right:14px;width:330px;max-height:none;background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r);box-shadow:0 18px 50px oklch(0.3 0.06 258/.22);z-index:60;padding:16px}
@media(max-width:560px){.cd-pop{position:fixed;top:auto;bottom:14px;left:14px;right:14px;width:auto}}
.cd-prev{background:var(--surface-2);border-radius:var(--r-sm);padding:11px 13px;margin:11px 0}
.cd-pr{display:flex;justify-content:space-between;font-size:12px;padding:3px 0}
.cd-pr .l{color:var(--ink-3)}.cd-pr .v{font-family:var(--mono);font-weight:600}
.cd-pr.s{border-top:1px solid var(--line);margin-top:5px;padding-top:6px}.cd-pr.s .l{color:var(--ink);font-weight:700}
.cd-pr.f{border-top:1.5px solid var(--line-2);margin-top:5px;padding-top:7px}.cd-pr.f .l{color:var(--ink);font-weight:700}.cd-pr.f .v{color:var(--brand-mid);font-weight:800;font-size:14px}

/* contract history modal */
.hist-grid{display:grid;grid-template-columns:220px 1fr;min-height:480px}
.hist-rail{border-right:1px solid var(--line);background:var(--surface-2);padding:14px 12px;overflow:auto;max-height:74vh}
.hist-rk{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);padding:2px 6px 10px}
.hist-tn{position:relative;padding:9px 11px 9px 26px;border-radius:var(--r-sm);cursor:pointer;margin-bottom:3px}
.hist-tn:hover{background:oklch(1 0 0/.6)}
.hist-tn.sel{background:var(--surface);box-shadow:0 1px 3px oklch(0.4 0.05 258/.1);border:1px solid var(--line-2)}
.hist-tn::before{content:'';position:absolute;left:11px;top:0;bottom:0;width:2px;background:var(--line-2)}
.hist-tn .dot{position:absolute;left:6px;top:13px;width:11px;height:11px;border-radius:50%;background:var(--line-2);border:2px solid var(--surface-2)}
.hist-tn.cur .dot{background:var(--ok)}.hist-tn.sel .dot{background:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.hist-tn .yr{font-weight:700;font-size:12.5px}
.hist-tn .nt{font-size:11px;color:var(--ink-3)}
.hist-tn .cb{font-size:9px;font-weight:700;color:var(--ok);text-transform:uppercase;letter-spacing:.06em}
.hist-panel{padding:16px 18px;overflow:auto;max-height:74vh}
.hist-delta{display:flex;align-items:center;justify-content:center;gap:13px;padding:11px;border-radius:var(--r);background:linear-gradient(135deg,var(--brand-ink),oklch(0.30 0.075 255));color:#fff;margin-bottom:15px}
.hist-chip{font-weight:800;font-family:var(--mono);font-size:12.5px;padding:3px 10px;border-radius:8px;background:var(--ok);color:#06281a}
.hist-cards{display:grid;grid-template-columns:1fr 1fr;gap:13px}
.hist-card{border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.hist-card.cur{border-color:color-mix(in oklch,var(--ok) 35%,var(--line))}
.hist-ch{padding:11px 14px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}
.hist-card.old .hist-ch{background:var(--surface-2)}.hist-card.cur .hist-ch{background:var(--ok-soft)}
.hist-lab{font-size:9.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
@media(max-width:820px){.hist-grid{grid-template-columns:1fr}.hist-rail{display:flex;gap:8px;max-height:none;border-right:none;border-bottom:1px solid var(--line)}.hist-tn::before{display:none}.hist-cards{grid-template-columns:1fr}}

/* ===== Billing Tracker ===== */
.bt-year{display:flex;align-items:center;gap:2px;background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-sm);padding:3px}
.bt-year button{border:0;background:transparent;cursor:pointer;width:30px;height:30px;border-radius:7px;display:grid;place-items:center;color:var(--ink-2)}
.bt-year button:hover{background:var(--surface-2);color:var(--brand-mid)}
.bt-year span{font-weight:700;min-width:54px;text-align:center}
.bt-aging{display:flex;align-items:center;gap:18px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:11px 16px;margin-bottom:14px;flex-wrap:wrap}
.bt-abar{flex:1;min-width:160px;display:flex;height:10px;border-radius:6px;overflow:hidden;background:var(--surface-2)}
.bt-aleg{display:flex;gap:16px;flex-wrap:wrap;font-size:var(--t-xs);color:var(--ink-2)}
.bt-aleg span{display:inline-flex;align-items:center;gap:5px}
.bt-aleg i{width:9px;height:9px;border-radius:3px}
.bt-legend{display:flex;gap:14px;align-items:center;margin-bottom:11px;flex-wrap:wrap;font-size:var(--t-xs);color:var(--ink-2)}
.bt-legend>span{display:inline-flex;align-items:center;gap:5px}
.bt-sw{width:13px;height:13px;border-radius:4px;display:inline-block}
.bt-sw.paid{background:color-mix(in oklch,var(--ok) 32%,var(--surface))}
.bt-sw.due{background:color-mix(in oklch,var(--warn) 34%,var(--surface))}
.bt-sw.over{background:color-mix(in oklch,var(--danger) 30%,var(--surface))}
.bt-sw.none{background:var(--surface-2);border:1px solid var(--line-2)}
.bt-matrix{border-collapse:separate;border-spacing:0;width:100%;min-width:1120px}
.bt-matrix thead th{font-family:var(--mono);font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);font-weight:500;padding:10px 6px;border-bottom:1px solid var(--line);background:var(--surface-2);text-align:center;white-space:nowrap}
.bt-matrix th.bt-name{text-align:left;padding-left:15px;position:sticky;left:0;background:var(--surface-2);z-index:3;min-width:208px}
.bt-matrix th.bt-sumh{text-align:right;padding-right:14px}
.bt-matrix td{padding:0;border-bottom:1px solid var(--line);text-align:center}
td.bt-name{text-align:left;padding:9px 15px;position:sticky;left:0;background:var(--surface);z-index:1;border-right:1px solid var(--line)}
.bt-matrix tbody tr:hover td.bt-name{background:var(--surface-2)}
.bt-cust{font-weight:600;font-size:var(--t-sm)}
.bt-cmeta{font-size:10px;color:var(--ink-3);margin-top:2px}
.bt-cell{min-height:48px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;cursor:pointer;border-left:1px solid var(--line);padding:6px 2px;transition:background .15s}
.bt-cell:hover{background:var(--brand-soft)}
.bt-dot{width:22px;height:22px;border-radius:7px;display:grid;place-items:center;font-size:14px}
.bt-cell.paid .bt-dot{background:color-mix(in oklch,var(--ok) 18%,var(--surface));color:var(--ok)}
.bt-cell.due .bt-dot{background:color-mix(in oklch,var(--warn) 20%,var(--surface));color:oklch(0.55 0.13 65)}
.bt-cell.over .bt-dot{background:color-mix(in oklch,var(--danger) 18%,var(--surface));color:var(--danger)}
.bt-cell.cancelled .bt-dot{background:var(--surface-2);color:var(--ink-3)}
.bt-cell.none{cursor:default}
.bt-cell.none:hover{background:transparent}
.bt-cell.none .bt-dot{color:var(--line-2)}
.bt-amt{font-size:9.5px;color:var(--ink-2);line-height:1}
.bt-cell.over .bt-amt{color:var(--danger);font-weight:600}
td.bt-sum{text-align:right;padding:9px 14px;border-left:1px solid var(--line);white-space:nowrap}
.bt-sbil{font-size:10.5px;color:var(--ink-3)}
.bt-sout{font-size:var(--t-sm);font-weight:700;margin-top:2px}
.bt-sout.ow{color:var(--danger)}.bt-sout.cl{color:var(--ok)}
.bt-matrix tfoot td{padding:8px 6px;border-top:2px solid var(--line-2);background:var(--surface-2);text-align:center}
.bt-matrix tfoot td.bt-name{position:sticky;left:0;background:var(--surface-2);font-weight:700;font-size:var(--t-sm);z-index:1}
.bt-mt{display:flex;flex-direction:column;gap:1px}
.bt-mt .c{font-size:10px;color:var(--ok);font-weight:600}
.bt-mt .o{font-size:10px;color:var(--danger)}
/* v2: expected / out-of-term / term-end / end chip */
.bt-cell.exp .bt-dot{border:1.5px dashed var(--warn);color:var(--warn);background:var(--surface)}
.bt-cell.exp .bt-amt{color:var(--ink-3);font-style:italic}
.bt-cell.out{cursor:default;background:repeating-linear-gradient(45deg,transparent,transparent 5px,var(--surface-2) 5px,var(--surface-2) 7px)}
.bt-cell.out:hover{background:repeating-linear-gradient(45deg,transparent,transparent 5px,var(--surface-2) 5px,var(--surface-2) 7px)}
.bt-cell.out .bt-dot{color:var(--line-2)}
.bt-cell.cancelled .bt-dot{background:var(--surface-2);color:var(--ink-3)}
.bt-cell.termend{border-right:2px solid var(--brand-mid)}
.bt-endchip{font-family:var(--mono);font-size:9px;font-weight:600;padding:2px 6px;border-radius:5px;background:var(--brand-soft);color:var(--brand-mid);white-space:nowrap;margin-left:7px}
.bt-endchip.dead{background:var(--surface-2);color:var(--ink-3)}
td.bt-name.ended{background:var(--surface-2)}
.bt-cust{display:flex;align-items:center;gap:2px;flex-wrap:wrap}
/* profile month-chip grid */
.bt-pgrid{display:grid;grid-template-columns:repeat(6,1fr);gap:9px}
.bt-bfbtn{font-family:var(--lao);font-size:12px;font-weight:600;border:1px solid var(--plum);background:var(--plum-soft);color:var(--plum);border-radius:9px;padding:7px 12px;cursor:pointer;display:inline-flex;align-items:center;gap:5px}
.bt-bfbtn .material-symbols-outlined{font-size:15px}
/* bulk per-term backfill modal */
.bbf-term{border:1px solid var(--line);border-radius:11px;padding:9px 11px;background:var(--surface);cursor:pointer;transition:all .15s}
.bbf-term:hover{border-color:var(--line-2)}
.bbf-term.on{border-color:var(--plum);box-shadow:0 0 0 3px var(--plum-soft)}
.bbf-chip{font-size:9.5px;font-weight:700;padding:2px 6px;border-radius:5px;letter-spacing:.02em;font-family:var(--mono)}
.bbf-chip.done{background:var(--ok-soft);color:var(--ok-deep)}
.bbf-chip.part{background:var(--warn-soft);color:oklch(0.5 0.13 65)}
.bbf-chip.empty{background:var(--surface-2);color:var(--ink-3)}
.bbf-chip.cur{background:var(--brand-soft);color:var(--brand-mid)}
.bbf-row{display:grid;grid-template-columns:54px 1fr 122px 56px 104px;gap:9px;align-items:center;padding:7px 4px;border-bottom:1px solid var(--line);font-size:12.5px}
.bbf-rcpt{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:8px;cursor:pointer}
.bbf-rcpt .material-symbols-outlined{font-size:18px}
.bbf-rcpt.ok{color:var(--ok)}
.bbf-rcpt.up{border:1px dashed var(--line-2);color:var(--ink-3)}
.bbf-rcpt.up:hover{border-color:var(--brand);color:var(--brand)}
.bbf-rcpt.up.busy{border-style:solid;border-color:var(--brand);color:var(--brand);cursor:default}
.bbf-row:last-child{border-bottom:none}
.bbf-row.bbf-head{font-size:10px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);font-weight:700;border-bottom:1px solid var(--line-2)}
.bbf-row.paid{background:var(--ok-soft);border-radius:8px}
.bbf-row .xdate{margin:0}
.bbf-st{display:inline-flex;align-items:center;gap:5px;font-family:var(--lao);font-size:11px;font-weight:600;padding:6px 10px;border-radius:9px;cursor:pointer;border:1px solid var(--line-2);background:var(--surface)}
.bbf-st .material-symbols-outlined{font-size:15px}
.bbf-st.paid{background:var(--ok);border-color:var(--ok);color:#fff}
.bbf-st.unpaid{color:var(--ink-3)}
.bbf-st.locked{opacity:.55;border-style:dashed}
.bt-mchip{border:1px solid var(--line);border-radius:11px;padding:10px;cursor:pointer;transition:all .15s;background:var(--surface)}
.bt-mchip:hover{border-color:var(--brand);box-shadow:var(--sh)}
.bt-mchip .mn{font-family:var(--mono);font-size:10px;color:var(--ink-3);display:flex;justify-content:space-between;align-items:center}
.bt-mchip .mn .material-symbols-outlined{font-size:13px;color:var(--ink-3)}
.bt-mchip .mv{font-family:var(--mono);font-weight:700;font-size:13px;margin-top:5px}
.bt-mchip .stx{font-size:10px;font-weight:600;margin-top:3px}
.bt-mchip.paid{background:var(--ok-soft);border-color:color-mix(in oklch,var(--ok) 30%,var(--surface))} .bt-mchip.paid .stx{color:var(--ok)}
.bt-mchip.due .stx{color:oklch(0.55 0.13 65)}
.bt-mchip.over{background:var(--danger-soft);border-color:color-mix(in oklch,var(--danger) 25%,var(--surface))} .bt-mchip.over .stx{color:var(--danger)}
.bt-mchip.exp{border-style:dashed;border-color:var(--warn)} .bt-mchip.exp .stx{color:var(--warn)} .bt-mchip.exp .mv{color:var(--ink-3);font-style:italic}
.bt-mchip.out{opacity:.55;cursor:default} .bt-mchip.out:hover{border-color:var(--line);box-shadow:none} .bt-mchip.out .stx{color:var(--ink-3)}
@media(max-width:760px){.bt-pgrid{grid-template-columns:repeat(3,1fr)}}
/* add old contract - per-site cards */
.pt-scard{border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.pt-shd{display:flex;align-items:center;gap:8px;padding:9px 12px;background:var(--surface-2);border-bottom:1px solid var(--line)}
.pt-shd .id{font-family:var(--mono);font-size:10px;color:var(--ink-3);background:var(--surface);border:1px solid var(--line);padding:2px 7px;border-radius:5px}
.pt-shd .nm{font-family:var(--lao);font-weight:700;font-size:13px;flex:1}
.pt-shd .sub{font-family:var(--mono);font-weight:700;font-size:12px;color:var(--brand-mid)}
.pt-shrow{display:grid;grid-template-columns:1fr 70px 1fr 34px;gap:8px;align-items:end;padding:10px 12px;border-bottom:1px dashed var(--line)}
.pt-shrow .mini{font-size:9.5px;color:var(--ink-3);margin-bottom:3px;display:block}
.pt-shrow .input{padding:7px 9px;font-size:12px}
.pt-del{border:0;background:transparent;color:var(--ink-3);cursor:pointer;padding:7px 0;height:34px}
.pt-del:hover{color:var(--danger)}
.pt-addsh{font-family:var(--lao);font-size:11.5px;font-weight:600;color:var(--brand-mid);background:transparent;border:0;cursor:pointer;padding:8px 12px;display:inline-flex;align-items:center;gap:5px}
/* billing view toggle */
.bt-seg2{display:flex;gap:2px;background:var(--surface-2);border:1px solid var(--line-2);border-radius:10px;padding:3px}
.bt-seg2 button{border:0;background:transparent;cursor:pointer;width:34px;height:30px;border-radius:7px;display:grid;place-items:center;color:var(--ink-3)}
.bt-seg2 button .material-symbols-outlined{font-size:18px}
.bt-seg2 button.on{background:var(--surface);color:var(--brand-mid);box-shadow:var(--sh-sm)}
/* settings rail layout */
.set-grid{display:grid;grid-template-columns:208px 1fr;gap:16px;align-items:start}
.set-rail{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:8px;position:sticky;top:12px}
.set-rail button{width:100%;text-align:left;font-family:var(--lao);font-size:12.5px;font-weight:600;border:0;background:transparent;color:var(--ink-2);padding:9px 11px;border-radius:var(--r-sm);cursor:pointer;display:flex;align-items:center;gap:9px}
.set-rail button:hover{background:var(--surface-2)}
.set-rail button.on{background:var(--brand-soft);color:var(--brand-mid)}
.set-rail button .material-symbols-outlined{font-size:18px}
.set-content{min-width:0}
/* mobile-only settings list + section bottom sheet (hidden on desktop) */
.set-mlist,.set-scrim,.set-sheet-hd{display:none}
@media(max-width:760px){
  .set-grid{display:block}
  .set-rail{display:none}
  /* grouped list = the mobile Settings home */
  .set-mlist{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
  .set-mrow{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:13px 15px;border:0;border-bottom:1px solid var(--line);background:transparent;cursor:pointer}
  .set-mrow:last-child{border-bottom:none}
  .set-mrow:active{background:var(--surface-2)}
  .set-mrow .ic{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;background:var(--brand-soft);color:var(--brand-mid);flex:none}
  .set-mrow .ic .material-symbols-outlined{font-size:19px}
  .set-mrow .lb{flex:1;min-width:0;font-weight:600;font-size:14px;color:var(--ink)}
  .set-mrow .val{font-size:12.5px;color:var(--ink-3)}
  .set-mrow .chev{color:var(--ink-4);font-size:20px}
  /* tapping a row slides the section up as a bottom sheet */
  .set-scrim{display:block;position:fixed;inset:0;background:oklch(0.3 0.05 258/.45);backdrop-filter:blur(2px);opacity:0;pointer-events:none;transition:opacity .25s;z-index:var(--z-scrim)}
  .set-scrim.on{opacity:1;pointer-events:auto}
  .set-content{position:fixed;left:0;right:0;bottom:0;max-height:88vh;overflow:auto;background:var(--surface);border-radius:var(--r-xl) var(--r-xl) 0 0;box-shadow:var(--sh-lg);transform:translateY(100%);transition:transform .3s var(--ease-sheet);z-index:var(--z-scrim);padding:0 16px calc(16px + env(safe-area-inset-bottom))}
  .set-content.on{transform:translateY(0)}
  .set-content .panel{border:0;padding:0;background:transparent}
  .set-sheet-hd{display:flex;align-items:center;gap:10px;position:sticky;top:0;background:var(--surface);padding:14px 0 12px;border-bottom:1px solid var(--line);margin-bottom:14px;z-index:1}
  .set-sheet-hd h3{font-size:16px;font-weight:800}
}
@media(max-width:600px){
  /* members table: drop the secondary Scope column, tighten cells so name+role+actions fit */
  .set-members .set-col-scope{display:none}
  .set-members th,.set-members td{padding-left:10px;padding-right:10px}
  .set-members td{padding-top:10px;padding-bottom:10px}
}
/* site-profile tab cards (compensation / guards / meetings) */
.spx-cd{display:flex;align-items:center;gap:11px;border:1px solid var(--line);border-radius:11px;padding:10px 12px;margin-bottom:8px;cursor:pointer;background:var(--surface);transition:border-color .15s}
.spx-cd:hover{border-color:var(--brand)}
.spx-cd .ic{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;flex-shrink:0}
.spx-cd .ic .material-symbols-outlined{font-size:18px}
.spx-cd .main{flex:1;min-width:0}
.spx-cd .ti{font-family:var(--lao);font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.spx-cd .mt{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);margin-top:2px;display:flex;align-items:center;gap:6px}
.spx-cd .rt{text-align:right;flex-shrink:0}
.spx-addcta{width:100%;border:1.5px dashed var(--line-2);background:var(--surface-2);border-radius:11px;padding:10px;font-family:var(--lao);font-weight:600;font-size:12.5px;color:var(--brand-mid);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;margin-top:4px}
.spx-addcta:hover{border-color:var(--brand);background:var(--brand-soft)}
.spx-empty{font-family:var(--lao);font-size:12px;color:var(--ink-3);text-align:center;padding:14px}
/* site photo upload tile (view mode) */
.sp-photoup{aspect-ratio:4/3;border:1.5px dashed var(--line-2);background:var(--surface-2);border-radius:var(--r-sm);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;cursor:pointer;color:var(--brand-mid)}
.sp-photoup:hover{border-color:var(--brand);background:var(--brand-soft)}
.sp-photoup .material-symbols-outlined{font-size:24px}
.sp-photoup span:last-child{font-size:10.5px;font-weight:600}
/* site photo cover badge + hover actions */
.sp-photo.is-cover{outline:2px solid var(--accent);outline-offset:1px}
.sp-cover{position:absolute;top:6px;left:6px;z-index:2;display:inline-flex;align-items:center;gap:3px;font-size:9.5px;font-weight:700;background:var(--accent);color:#fff;padding:2px 7px;border-radius:20px}
.sp-cover .material-symbols-outlined{font-size:12px}
.sp-acts{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;gap:6px;padding:8px;opacity:0;transition:.15s;background:linear-gradient(180deg,transparent 55%,oklch(0.2 0.05 258/.5))}
.sp-photo:hover .sp-acts{opacity:1}
.sp-acts button{width:28px;height:28px;border-radius:8px;border:0;background:oklch(1 0 0/.92);color:var(--ink);cursor:pointer;display:grid;place-items:center}
.sp-acts button .material-symbols-outlined{font-size:16px}
.sp-acts button.del{color:var(--danger)}
/* contract table thumbnail */
.ctab-thumb{width:32px;height:32px;border-radius:9px;object-fit:cover;flex-shrink:0}
.ctab-thumb.ph{display:grid;place-items:center;color:#fff;font-family:var(--lao);font-weight:700;font-size:14px}
/* ===== History v2 ===== */
.hh-delta{background:linear-gradient(135deg,var(--brand-deep),var(--brand-ink));border-radius:var(--r);padding:13px 18px;color:#fff;display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-bottom:14px}
.hh-delta .k{font-family:var(--mono);font-size:8.5px;letter-spacing:.1em;text-transform:uppercase;opacity:.6}
.hh-delta .vr{display:flex;align-items:baseline;gap:6px;margin-top:3px}
.hh-delta .o{font-size:11px;opacity:.55;text-decoration:line-through}
.hh-delta .n{font-weight:800;font-size:17px}
.hh-delta .ar{opacity:.5;font-size:15px}.hh-delta .ar.sm{font-size:12px}
.hh-delta .hh-chip{font-family:var(--mono);font-size:10px;font-weight:700;padding:2px 6px;border-radius:6px;background:oklch(1 0 0/.15)}
.hh-delta .hh-chip.up{color:oklch(0.85 0.18 150)}.hh-delta .hh-chip.dn{color:oklch(0.8 0.13 25)}
.hh-delta .dv{width:1px;align-self:stretch;background:oklch(1 0 0/.15)}
.hh-cstat{display:flex;border-bottom:1px solid var(--line);border-top:1px solid var(--line)}
.hh-cstat .s{flex:1;padding:7px;text-align:center;border-right:1px solid var(--line)}.hh-cstat .s:last-child{border-right:0}
.hh-cstat .sk{font-family:var(--mono);font-size:8px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3)}
.hh-cstat .sv{font-weight:700;font-size:13px;margin-top:1px}
.hh-pol td,.hh-pol th{padding:8px 12px}.hh-pol tr.chg td{background:var(--warn-soft)}
.hh-diff{min-width:760px}
.hh-diff th.grp{text-align:center;border-left:1px solid var(--line)}.hh-diff th.grp.hol{color:var(--plum);background:var(--plum-soft)}
.hh-diff th.gl,.hh-diff td.gl{border-left:1px solid var(--line)}
.hh-diff td,.hh-diff th{padding:7px 10px;font-size:11.5px}
.hh-diff .hh-srow td{background:color-mix(in oklch,var(--brand) 4%,transparent);font-family:var(--lao)}
.hh-diff .hh-holcell{background:var(--plum-soft);color:var(--plum);font-weight:700;cursor:pointer;border-left:1px solid var(--line)}
.hh-diff .hh-holcell:hover{background:color-mix(in oklch,var(--plum) 16%,var(--surface))}
.hh-diff .hh-holcell.off{background:transparent;color:var(--ink-3);cursor:default}
.hh-hstrip{display:grid;grid-template-columns:repeat(12,1fr);gap:4px}
.hh-hstrip .mc{border:1px solid var(--line);border-radius:7px;padding:6px 2px;text-align:center;background:var(--surface)}
.hh-hstrip .mc.has{border-color:color-mix(in oklch,var(--plum) 30%,var(--surface));background:var(--plum-soft)}
.hh-hstrip .mn{font-family:var(--mono);font-size:8px;color:var(--ink-3)}
.hh-hstrip .dy{font-weight:800;font-size:13px;margin-top:2px;color:var(--ink-3)}.hh-hstrip .mc.has .dy{color:var(--plum)}
.hh-hstrip .am{font-size:7.5px;color:var(--plum);margin-top:1px}
@media(max-width:820px){.hh-delta{gap:10px}.hh-hstrip{grid-template-columns:repeat(6,1fr)}}
/* drawer */
.bt-scrim{position:fixed;inset:0;background:oklch(0.3 0.06 258/.28);backdrop-filter:blur(2px);z-index:var(--z-scrim)}
.bt-drawer{position:fixed;top:0;right:0;height:100%;width:392px;max-width:92vw;background:var(--surface);box-shadow:var(--sh-lg);transform:translateX(100%);transition:transform var(--d-sheet) var(--ease-sheet);z-index:var(--z-panel)}
.bt-drawer.on{transform:translateX(0)}
.bt-dh{padding:18px 20px;background:linear-gradient(135deg,var(--brand-deep),var(--brand-ink));color:#fff}
.bt-dinv{font-size:11px;opacity:.7}
.bt-dh h3{font-weight:700;font-size:var(--t-lg);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bt-dmeta{font-size:11px;opacity:.7;margin-top:3px}
.bt-db{padding:18px 20px;overflow:auto;flex:1}
.bt-sec{font-family:var(--mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin:4px 0 10px}
.bt-lr{display:grid;grid-template-columns:1fr auto;gap:8px;padding:6px 0;font-size:var(--t-sm);border-bottom:1px dashed var(--line)}
.bt-lr.disc span:last-child{color:var(--danger)}
.bt-lr.hol span{color:var(--plum);font-weight:600}
.bt-lr.net{border-bottom:0;border-top:2px solid var(--line-2);margin-top:4px;padding-top:9px}
.bt-lr.net span:first-child{font-weight:700}
.bt-lr.net span:last-child{font-weight:800;color:var(--brand);font-size:var(--t-md)}
.bt-seg{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:14px}
.bt-opt{border:1.5px solid var(--line-2);background:var(--surface);border-radius:var(--r-sm);padding:12px;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:4px;transition:all .15s}
.bt-opt .material-symbols-outlined{font-size:21px;color:var(--ink-3)}
.bt-opt span:last-child{font-weight:700;font-size:var(--t-sm);color:var(--ink-2)}
.bt-opt.paid.on{border-color:var(--ok);background:var(--ok-soft)}.bt-opt.paid.on .material-symbols-outlined,.bt-opt.paid.on span:last-child{color:var(--ok)}
.bt-opt.unpaid.on{border-color:var(--warn);background:var(--warn-soft)}.bt-opt.unpaid.on .material-symbols-outlined,.bt-opt.unpaid.on span:last-child{color:oklch(0.55 0.13 65)}
.bt-drop{display:flex;flex-direction:column;align-items:center;gap:4px;border:1.5px dashed var(--line-2);border-radius:var(--r-sm);padding:16px;text-align:center;cursor:pointer;background:var(--surface-2);transition:all .15s}
.bt-drop:hover{border-color:var(--brand);background:var(--brand-soft)}
.bt-drop .material-symbols-outlined{font-size:24px;color:var(--brand-mid)}
.bt-drop span:last-child{font-size:var(--t-sm);font-weight:600;color:var(--ink-2)}
.bt-drop.busy{pointer-events:none;opacity:.7}
.bt-files{margin-top:10px;display:flex;flex-direction:column;gap:7px}
.bt-file{display:flex;align-items:center;gap:9px;border:1px solid var(--line);border-radius:var(--r-sm);padding:9px 11px;background:var(--surface);cursor:pointer}
.bt-file:hover{border-color:var(--brand)}
.bt-file .fn{font-size:var(--t-xs)}
.bt-empty{font-size:var(--t-xs);color:var(--ink-3);text-align:center;padding:8px;border:1px dashed var(--line);border-radius:var(--r-sm)}
.bt-df{padding:14px 20px;border-top:1px solid var(--line);display:flex;gap:8px}
@media(max-width:820px){.bt-aging{gap:10px}.bt-drawer{width:100%}}
