
:root{
  --bg:#F7F4EF; --surface:#FFFFFF; --surface2:#EFEBE4; --line:#D6D0C7; --ink:#2B2825; --ink2:#6F6862; --ink3:#9A948C;
  --brand:#4C4845; --brand-ink:#FFFFFF; --gold:#B8893A; --tan:#E3C68F; --gold-soft:rgba(184,137,58,.14);
  --good:#2E7D4F; --warn:#D98A1E; --crit:#C0392B; --info:#3B6EA8; --good-soft:rgba(46,125,79,.14); --warn-soft:rgba(217,138,30,.16); --crit-soft:rgba(192,57,43,.14); --info-soft:rgba(59,110,168,.14);
  --pend:#C0392B; --inc:#D98A1E; --wh:#2E7D4F; --site:#1B5E3A; --own:#8A847C; --na:#C9C3BA;
  --ha:#B8893A; --av:#3B6EA8; --it:#2E7D4F; --lt:#C77B2E; --cin:#7A5AA6;
  --shadow:0 1px 2px rgba(43,40,37,.08),0 4px 14px rgba(43,40,37,.06);
  --font-ui:"Source Sans 3",system-ui,Segoe UI,Roboto,sans-serif; --font-head:"Barlow Semi Condensed","Arial Narrow",Arial,sans-serif; --font-mono:"IBM Plex Mono",Menlo,Consolas,monospace;
}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){ color-scheme:dark;
  --bg:#1C1A18; --surface:#262320; --surface2:#2F2B27; --line:#3E3934; --ink:#EDE8E0; --ink2:#B5ADA3; --ink3:#857D74; --brand:#15130F; --gold:#D3A657; --tan:#B08A4B; --gold-soft:rgba(211,166,87,.16);
  --good:#5BB381; --warn:#E6A24A; --crit:#E0685A; --info:#6E9BD6; --good-soft:rgba(91,179,129,.16); --warn-soft:rgba(230,162,74,.18); --crit-soft:rgba(224,104,90,.18); --info-soft:rgba(110,155,214,.18);
  --pend:#E0685A; --inc:#E6A24A; --wh:#5BB381; --site:#8FD3AA; --own:#8A847C; --na:#4A453F; --ha:#D3A657; --av:#6E9BD6; --it:#5BB381; --lt:#E29A54; --cin:#A98BD6; --shadow:0 1px 2px rgba(0,0,0,.4),0 6px 18px rgba(0,0,0,.3);}}
:root[data-theme="dark"]{ color-scheme:dark;
  --bg:#1C1A18; --surface:#262320; --surface2:#2F2B27; --line:#3E3934; --ink:#EDE8E0; --ink2:#B5ADA3; --ink3:#857D74; --brand:#15130F; --gold:#D3A657; --tan:#B08A4B; --gold-soft:rgba(211,166,87,.16);
  --good:#5BB381; --warn:#E6A24A; --crit:#E0685A; --info:#6E9BD6; --good-soft:rgba(91,179,129,.16); --warn-soft:rgba(230,162,74,.18); --crit-soft:rgba(224,104,90,.18); --info-soft:rgba(110,155,214,.18);
  --pend:#E0685A; --inc:#E6A24A; --wh:#5BB381; --site:#8FD3AA; --own:#8A847C; --na:#4A453F; --ha:#D3A657; --av:#6E9BD6; --it:#5BB381; --lt:#E29A54; --cin:#A98BD6; --shadow:0 1px 2px rgba(0,0,0,.4),0 6px 18px rgba(0,0,0,.3);}
*{box-sizing:border-box} html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.45 var(--font-ui);}
a{color:inherit}
button{font:inherit;color:inherit;cursor:pointer}
h1,h2,h3,h4{font-family:var(--font-head);margin:0;text-wrap:balance;line-height:1.15}
h1{font-size:26px;font-weight:600} h2{font-size:20px;font-weight:600} h3{font-size:16px;font-weight:600}
.mono{font-family:var(--font-mono);font-size:.92em}
.num{font-family:var(--font-head);font-variant-numeric:tabular-nums}
.eyebrow{font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink2);font-weight:600}
/* top bar */
.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:var(--brand);color:var(--brand-ink);border-bottom:3px solid var(--gold)}
.top .in{display:flex;align-items:center;gap:14px;padding:0 20px;min-height:54px;max-width:1440px;margin:0 auto;flex-wrap:nowrap}
.logo{font-family:var(--font-head);font-weight:600;letter-spacing:.12em;font-size:16px;text-transform:uppercase;white-space:nowrap}
.logo small{display:block;font-size:10px;letter-spacing:.14em;color:var(--tan);font-weight:500}
.nav{display:flex;gap:2px;margin-left:8px;flex-wrap:nowrap;flex:none}
.nav button{background:none;border:0;color:rgba(255,255,255,.75);padding:16px 8px;white-space:nowrap;border-bottom:3px solid transparent;margin-bottom:-3px;font-weight:600;font-family:var(--font-head);font-size:14px;letter-spacing:.03em;text-transform:uppercase}
.nav button.on{color:#fff;border-bottom-color:var(--tan)}
.spacer{flex:1}
.proj{font-size:12.5px;color:var(--tan);white-space:nowrap}
.user{position:relative}
.user>button{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);border-radius:999px;color:#fff;padding:5px 12px 5px 6px;display:flex;align-items:center;gap:8px;font-size:13.5px}
.avatar{width:26px;height:26px;border-radius:50%;background:var(--gold);color:#1e1b16;font-weight:700;font-family:var(--font-head);display:grid;place-items:center;font-size:12px}
.menu{position:absolute;right:0;top:calc(100% + 8px);background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);min-width:210px;padding:6px;z-index:30}
.menu button{display:block;width:100%;text-align:left;background:none;border:0;padding:9px 10px;border-radius:7px}
.menu button:hover{background:var(--surface2)}
.menu .who{padding:8px 10px;border-bottom:1px solid var(--line);margin-bottom:4px;font-size:13px;color:var(--ink2)}
/* page */
.wrap{max-width:1440px;margin:0 auto;padding:22px 20px 60px}
.pagehead{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:18px}
.pagehead p{margin:4px 0 0;color:var(--ink2);max-width:70ch}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px 18px;box-shadow:var(--shadow);min-width:0}
.card .hd{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
.card .hd h2{font-size:17px}
.arrow{width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:var(--surface2);display:grid;place-items:center;color:var(--ink2);flex:none}
.arrow:hover{background:var(--gold-soft);color:var(--gold);border-color:var(--gold)}
.arrow svg{width:16px;height:16px}
/* kpi */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.kpi .v{font-family:var(--font-head);font-size:28px;font-weight:600;line-height:1;margin-top:6px;font-variant-numeric:tabular-nums}
.kpi .s{font-size:12px;color:var(--ink2);margin-top:4px}
/* pills */
.pill{display:inline-flex;align-items:center;gap:6px;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600;line-height:1.5;white-space:nowrap}
.pill i{width:7px;height:7px;border-radius:50%;background:currentColor;display:inline-block}
.p-good{background:var(--good-soft);color:var(--good)} .p-warn{background:var(--warn-soft);color:var(--warn)} .p-crit{background:var(--crit-soft);color:var(--crit)} .p-info{background:var(--info-soft);color:var(--info)} .p-mute{background:var(--surface2);color:var(--ink2)} .p-gold{background:var(--gold-soft);color:var(--gold)}
.sys{display:inline-block;padding:1px 7px;border-radius:5px;font-family:var(--font-head);font-weight:600;font-size:12px;letter-spacing:.04em;color:#fff}
.sys{background:var(--ink3)} .sys-HA{background:var(--ha)} .sys-AV{background:var(--av)} .sys-IT{background:var(--it)} .sys-LT{background:var(--lt)} .sys-CIN{background:var(--cin)}
/* risk banner */
.risks{display:grid;gap:8px;margin-bottom:16px}
.risk{display:flex;gap:12px;align-items:flex-start;padding:10px 14px;border-radius:10px;border:1px solid var(--line);background:var(--surface);border-left-width:5px}
.risk.critical{border-left-color:var(--crit)} .risk.warning{border-left-color:var(--warn)} .risk.info{border-left-color:var(--info)}
.risk .t{font-size:14px} .risk .a{font-size:12px;color:var(--ink2)}
/* donuts */
.donuts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.donut{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px;position:relative;display:flex;flex-direction:column;align-items:center;gap:8px}
.donut .arrow{position:absolute;top:8px;right:8px;width:26px;height:26px}
.donut>svg{width:96px;height:96px}
.donut .lbl{font-weight:600;text-align:center;font-size:14px;line-height:1.2} .donut .sub{font-size:11.5px;color:var(--ink2);text-align:center}
.donut.big>svg{width:130px;height:130px}
.dval{font-family:var(--font-head);font-weight:600;font-size:22px;fill:var(--ink)} .dval.sm{font-size:18px}
.dsub{font-size:9px;fill:var(--ink2);text-transform:uppercase;letter-spacing:.08em}
.legend{display:flex;flex-wrap:wrap;gap:6px 12px;font-size:12px;color:var(--ink2)} .legend i{width:9px;height:9px;border-radius:2px;display:inline-block;margin-right:5px;vertical-align:-1px}
.lvl{margin-top:18px} .lvl h3{margin-bottom:10px;display:flex;align-items:baseline;gap:10px} .lvl h3 span{font-weight:400;color:var(--ink2);font-size:13px;font-family:var(--font-ui)}
/* lists & tables */
.list{display:flex;flex-direction:column}
.row{display:grid;grid-template-columns:78px 1fr auto;gap:12px;align-items:center;padding:9px 0;border-top:1px solid var(--line);cursor:pointer}
.row:first-child{border-top:0}
.row:hover{background:var(--surface2);margin:0 -10px;padding-left:10px;padding-right:10px;border-radius:6px}
.row .d{font-family:var(--font-head);font-weight:600;font-size:15px;color:var(--gold);font-variant-numeric:tabular-nums}
.row .d small{display:block;font-size:11px;color:var(--ink3);font-weight:500;font-family:var(--font-ui)}
.row .n{font-size:14px;min-width:0} .row .n small{display:block;color:var(--ink2);font-size:12px}
.tbl{width:100%;border-collapse:collapse;font-size:13.5px} .tbl th{text-align:left;font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink2);padding:8px 10px;border-bottom:2px solid var(--line);white-space:nowrap} .tbl td{padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top} .tbl td.mono{white-space:nowrap}
.tbl tr:hover td{background:var(--surface2)} .tbl .r{text-align:right;font-variant-numeric:tabular-nums}
.scroll{overflow-x:auto}
.bar{height:8px;background:var(--surface2);border-radius:4px;overflow:hidden;min-width:60px} .bar b{display:block;height:100%;background:var(--gold);border-radius:4px}
.bar.good b{background:var(--good)}
/* controls */
.toolbar{display:flex;flex-wrap:wrap;gap:8px 10px;align-items:center;margin-bottom:14px}
.toolbar label{font-size:12.5px;color:var(--ink2);display:flex;align-items:center;gap:6px}
select,input[type=text],input[type=date],input[type=number],textarea{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:6px 9px}
.chk{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:999px;padding:3px 10px;font-size:12.5px;background:var(--surface);cursor:pointer;user-select:none}
.chk.on{background:var(--gold-soft);border-color:var(--gold);color:var(--gold)}
.btn{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:7px 14px;font-weight:600;display:inline-flex;gap:8px;align-items:center}
.btn.primary{background:var(--gold);color:#1e1b16;border-color:var(--gold)} .btn.dark{background:var(--brand);color:#fff;border-color:var(--brand)}
.btn:focus-visible,button:focus-visible,select:focus-visible,input:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
/* gantt */
.gantt{border:1px solid var(--line);border-radius:12px;background:var(--surface);overflow:hidden}
.gantt .scroll{overflow:auto;max-height:70vh}
.gantt table{border-collapse:collapse;font-size:12.5px;min-width:900px}
.gantt th{position:sticky;top:0;background:var(--surface2);z-index:3;font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink2);padding:6px 8px;border-bottom:1px solid var(--line);text-align:left}
.gantt td{padding:0 8px;height:30px;border-bottom:1px solid var(--line);white-space:nowrap}
.gantt td.name{position:sticky;left:0;background:var(--surface);z-index:2;max-width:320px;overflow:hidden;text-overflow:ellipsis;border-right:1px solid var(--line)}
.gantt tr.sum td{background:var(--surface2);font-weight:600} .gantt tr.sum td.name{background:var(--surface2)}
.gantt tr.ec td.name{color:var(--gold);font-weight:600}
.gantt tr:hover td{background:var(--gold-soft)}
.gantt .track{position:relative;height:30px;width:var(--w)}
.gbar{position:absolute;top:8px;height:14px;border-radius:3px;background:var(--ink3);opacity:.85}
.gbar.ec{background:var(--gold)} .gbar.done{background:var(--good)} .gbar.late{background:var(--crit)} .gbar.prog{background:var(--info)} .gbar.ms{width:12px!important;height:12px;transform:rotate(45deg);top:9px;border-radius:2px;background:var(--ink)}
.gbar.sum{background:var(--ink);height:6px;top:12px;opacity:.6}
.today{position:absolute;top:0;bottom:0;width:0;border-left:2px dashed var(--crit);z-index:1}
.month{position:absolute;top:0;bottom:0;border-left:1px solid var(--line)}
.gantt .track .m{position:absolute;top:2px;font-size:10px;color:var(--ink3)}
/* docs */
.docbox{background:var(--surface);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.docbox .bh{background:var(--brand);color:#fff;padding:10px 14px;display:flex;justify-content:space-between;align-items:center;gap:8px}
.docbox .bh .dt{font-size:12px;color:var(--tan)}
.docbox .bd{padding:10px 14px}
.doc{padding:10px 0;border-top:1px solid var(--line)} .doc:first-child{border-top:0}
.doc .ttl{font-weight:600;display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.rev{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:5px 0;font-size:13px}
.rev.old{color:var(--ink3)} .rev .star{color:var(--warn);font-size:15px} .rev .note{color:var(--ink2);font-size:12px;display:block}
.rev a.btn{padding:3px 9px;font-size:12px}
.expect{color:var(--ink3);font-style:italic;font-size:13px}
/* modal / drawer */
.drawer{position:fixed;inset:0;background:rgba(20,18,15,.45);z-index:40;display:flex;justify-content:flex-end}
.drawer .panel{width:min(560px,100%);background:var(--bg);height:100%;overflow:auto;padding:18px 20px 40px;border-left:1px solid var(--line)}
.drawer .panel.mobile{width:min(420px,100%);margin:0 auto;border-left:1px solid var(--line);border-right:1px solid var(--line)}
.drawer .ph{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}
.close{background:none;border:1px solid var(--line);border-radius:8px;width:34px;height:34px}
.kv{display:grid;grid-template-columns:130px 1fr;gap:6px 12px;font-size:13.5px;margin:10px 0} .kv dt{color:var(--ink2)} .kv dd{margin:0}
.field{display:flex;flex-direction:column;gap:5px;margin-bottom:12px;font-size:13.5px} .field span{color:var(--ink2);font-size:12.5px}
.seg{display:flex;gap:6px;flex-wrap:wrap} .seg button{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:8px 12px;font-weight:600;flex:1} .seg button.on{background:var(--gold);color:#1e1b16;border-color:var(--gold)}
.photo{border:2px dashed var(--line);border-radius:10px;padding:18px;text-align:center;color:var(--ink2);font-size:13px}
.log{font-size:12.5px;color:var(--ink2);border-left:2px solid var(--line);padding-left:10px;margin:6px 0}
.log b{color:var(--ink)}
.toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--brand);color:#fff;padding:10px 16px;border-radius:999px;box-shadow:var(--shadow);z-index:50;font-weight:600}
/* fold */
.fold{border:1px solid var(--line);border-radius:10px;margin-top:12px;overflow:hidden}
.foldh{width:100%;display:flex;align-items:center;gap:10px;background:var(--surface2);border:0;padding:10px 14px;text-align:left}
.foldh h3{font-size:15px} .foldh span:last-child{color:var(--ink2);font-size:12.5px;margin-left:auto;text-align:right}
.foldh .car{display:inline-block;transition:transform .2s;color:var(--gold);font-size:14px}
.fold.open .car{transform:rotate(90deg)}
.foldb{display:none;padding:2px 14px 14px} .fold.open .foldb{display:block}
.bulkbar{position:sticky;top:calc(54px + env(safe-area-inset-top,0px));z-index:10;display:flex;flex-wrap:wrap;align-items:center;gap:8px;background:var(--brand);color:#fff;padding:8px 12px;border-radius:10px;margin-bottom:12px;box-shadow:var(--shadow)}
.bulkbar .btn{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.25);color:#fff} .bulkbar .btn.primary{background:var(--gold);color:#1e1b16;border-color:var(--gold)}
.bulkbar span{font-size:12.5px;color:var(--tan)}
.gbar.resched{background:var(--warn)}
/* stage bars */
.stages{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:8px}
.stage{background:var(--surface2);border-radius:8px;padding:8px 10px;font-size:12px}
.stage .v{font-family:var(--font-head);font-size:18px;font-weight:600;font-variant-numeric:tabular-nums}
.stage .w{color:var(--ink3);font-size:11px}
.sysrow{display:grid;grid-template-columns:70px 1fr 60px;gap:10px;align-items:center;padding:8px 0;border-top:1px solid var(--line)}
.sysrow:first-child{border-top:0}
.rep{max-width:900px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:26px 30px;box-shadow:var(--shadow)}
.rep .band{background:var(--brand);color:#fff;margin:-26px -30px 20px;padding:16px 30px;border-bottom:3px solid var(--gold)}
.rep h2{margin-top:22px;margin-bottom:8px;font-size:17px;border-bottom:1px solid var(--line);padding-bottom:4px}
.rep ul{margin:6px 0;padding-left:20px} .rep li{margin:3px 0}
@media (max-width:1560px){ .proj{display:none} } @media (max-width:1500px){ .nav button{padding:16px 7px;font-size:12.5px} .top .back{max-width:32px;padding:5px 9px;font-size:14px} }
@media (max-width:900px){ .top .in{flex-wrap:wrap} .nav{order:3;flex:1 0 100%;justify-content:flex-start;overflow:hidden} .nav button{padding:10px 8px;font-size:13px} }
@media (max-width:720px){ .top .in{padding:0 12px;gap:10px} .wrap{padding:16px 16px 60px} .row{grid-template-columns:64px 1fr} .row>:last-child{grid-column:2} .stages{grid-template-columns:repeat(2,1fr)} .kv{grid-template-columns:1fr} }
@media (prefers-reduced-motion:no-preference){ .donut svg circle{transition:stroke-dashoffset .6s ease} }

.gantt tr.pre td{color:var(--ink3);font-style:italic;background:color-mix(in srgb,var(--surface2) 60%,transparent)} .gantt tr.pre td:first-child::before{content:'↳ ';color:var(--gold);font-style:normal}
.btn.sm{padding:3px 9px;font-size:12px}
.fold.cab{margin-top:10px} .fold.cab .foldh{flex-wrap:wrap} .fold.cab .foldh h3{font-family:var(--font-mono);font-weight:600;font-size:14px} .fold.cab .foldh>span:nth-of-type(2){margin-left:0;text-align:left;color:var(--ink2);font-size:12.5px} .fold.cab .foldh .tail{margin-left:auto;display:flex;gap:6px;align-items:center} .fold.cab .foldb{padding:0 12px 12px}
.tbl.dev{font-size:12.5px} .tbl.dev td .dash{color:var(--line)}
.bulkbar.inbox{position:static;margin:0 0 10px}
.tbl.mat{table-layout:fixed;min-width:1080px} .tbl.mat th,.tbl.mat td{white-space:normal;overflow-wrap:anywhere} .tbl.mat td.mono{white-space:normal;font-size:12.5px} .tbl.mat .w-chk{width:34px} .tbl.mat .w-sys{width:82px} .tbl.mat .w-so{width:96px} .tbl.mat .w-code{width:150px} .tbl.mat .w-brand{width:110px} .tbl.mat .w-qty{width:64px} .tbl.mat .w-eta{width:96px} .tbl.mat .w-state{width:128px} .tbl.mat .w-rem{width:220px} .tbl.mat .w-act{width:92px} .tbl.mat .w-act .btn,.tbl.mat td:last-child .btn{white-space:nowrap} .tbl.mat td.rem{font-size:12px;color:var(--ink2)} .tbl.mat th{white-space:nowrap} .tbl.mat .w-eta{white-space:nowrap}

.top .back{flex:none;margin-left:4px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);color:var(--tan);border-radius:999px;padding:5px 12px;font-size:12.5px;font-weight:600;white-space:nowrap;max-width:150px;overflow:hidden;text-overflow:ellipsis;cursor:pointer} .top .back:hover{background:rgba(255,255,255,.14)}
.search{display:inline-flex;align-items:center;position:relative} .search input{width:230px;padding:6px 28px 6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:13px} .search input:focus{outline:2px solid var(--gold);border-color:var(--gold)} .search .x{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:0;background:transparent;color:var(--ink3);cursor:pointer;font-size:12px}
.red{color:var(--crit)!important} .tbl tr.added td{color:var(--crit)} .tbl tr.added td .sys{opacity:.85}
.termbar{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin:0 0 10px;padding:8px 10px;background:var(--surface2);border-radius:8px} .termbar .bar{background:var(--surface)} .termbar>div span{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink2)} .termbar>div small{font-family:var(--font-mono);font-size:11.5px;color:var(--ink2)} .termbar .bar{margin:3px 0}
.tbl.cred td{vertical-align:middle}
@media (max-width:900px){.search input{width:100%}.termbar{grid-template-columns:repeat(2,1fr)}.top .back{max-width:110px}}
.docbox .bh .car{color:var(--gold);font-size:12px;margin-right:2px} .docbox.closed{opacity:.9} .docbox .bact{display:flex;gap:6px;margin-bottom:8px} .docbox .bact .btn{padding:4px 10px;font-size:12px;white-space:nowrap} .btn.xs{padding:1px 6px;font-size:11px;line-height:1.4}

.loading{padding:60px 20px;text-align:center;color:var(--ink2)}
.login{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--brand);padding:20px}
.login .box{background:var(--surface);border-radius:14px;padding:28px;width:100%;max-width:380px;box-shadow:var(--shadow)}
.login .logo{color:var(--ink);margin-bottom:18px;font-family:var(--font-h);font-weight:800;letter-spacing:.06em;text-transform:uppercase;font-size:18px;line-height:1.1} .login .logo small{display:block;font-size:11px;color:var(--gold);letter-spacing:.14em}
.login .err{color:var(--crit);font-size:13px;background:color-mix(in srgb,var(--crit) 10%,transparent);padding:8px 10px;border-radius:8px}
.rep .editable{min-height:40px;border:1px dashed var(--line);border-radius:8px;padding:8px} .rep .editable:empty::before{content:attr(data-ph);color:var(--ink3)}
.log.clickable{cursor:pointer} .log.clickable:hover{background:var(--surface2)}
.photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;margin-top:12px} .photos img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:8px;border:1px solid var(--line)} .ph-loading{aspect-ratio:1;border-radius:8px;background:var(--surface2)}
@media (max-width:900px){ .grid[style]{grid-template-columns:1fr!important} .kpis{grid-template-columns:repeat(2,1fr)} }
.scrollbox{max-height:360px;overflow-y:auto;padding-right:4px}
@media (max-width:900px){ .nav{overflow-x:auto!important;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-wrap:nowrap} .nav::-webkit-scrollbar{display:none} }
@media print{ body.printing .top, body.printing .pagehead, body.printing .toolbar, body.printing .kpis, body.printing .drawer, body.printing .toast{display:none!important} body.printing .wrap{padding:0;max-width:none} body.printing .rep{max-width:none;border:0;box-shadow:none;padding:0} body.printing .card{box-shadow:none;border:1px solid #ccc} .rep .editable{border:0} @page{margin:14mm} }
.rep-photos figure{margin:0} .rep-photos figcaption{font-size:11px;color:var(--ink3);margin-top:3px} .rep-photos img{aspect-ratio:4/3} @media print{ .rep-photos{grid-template-columns:repeat(3,1fr)} .rep-photos figure{break-inside:avoid} .rep h2{break-after:avoid} }
.gantt tr.sep td{background:var(--brand);color:var(--tan);font-size:11px;letter-spacing:.06em;text-transform:uppercase;font-weight:600;padding:6px 12px} .gantt tr.sep td.name{background:var(--brand)} .gantt tr.ecroom td.name{color:var(--ecnew)!important} .gantt tr.ecroom .gbar.sum{background:var(--ecnew);opacity:.55} option.noact{color:var(--crit);font-weight:600} .areaq.inline{width:130px;margin:0 6px 0 4px;padding:5px 8px;font-size:12.5px;vertical-align:middle} .areaq{width:100%;margin-bottom:6px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:13px} .rep .band{display:flex;align-items:flex-start;gap:16px} .rep .band-txt{flex:1;min-width:0} .rep .band-logo{height:22px;width:auto;flex:none;margin-top:4px} .fold.sysgroup{margin-bottom:12px} .docstack{display:flex;flex-direction:column;gap:8px;padding:10px 12px 12px} .docstack .docbox .bh{padding:8px 14px} .docstack .docbox .bd .docs{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:8px 24px;align-items:start} .docstack .doc{padding:6px 0;border-bottom:1px solid var(--line)} .docstack .bact{margin-bottom:6px} .fold.sysgroup .foldh h3{display:flex;align-items:center;gap:8px} .rep-photos{grid-template-columns:repeat(3,1fr)!important} .rep-photos figcaption{font-size:11px;line-height:1.35;color:var(--ink2)} .rep-photos figcaption b{color:var(--ink)} .rep-photos img{aspect-ratio:4/3;object-fit:cover}
@media print{ body.printing .noprint, body.printing .tbl th:last-child:empty{display:none!important} html,body,body.printing .wrap,body.printing .rep{background:#fff!important} .rep-photos figure{page-break-inside:avoid} .rep .band{-webkit-print-color-adjust:exact;print-color-adjust:exact} body.printing .rep .band{margin:0 0 16px;padding:14px 18px;align-items:center;page-break-inside:avoid} body.printing .rep .band-logo{margin-top:0} body.printing .rep{overflow:visible} }
@media (max-width:600px){ .rep-photos{grid-template-columns:repeat(2,1fr)!important} }
:root{--ecnew:#2A8C8C} :root:not([data-theme=light]) .dark-ecnew{} .gantt tr.ecnew td.name{color:var(--ecnew)!important} .gantt tr.ecnew .gbar.ec{background:var(--ecnew)} .ecnew{color:var(--ecnew)} .pill.p-ecnew{background:color-mix(in srgb,var(--ecnew) 16%,transparent);color:var(--ecnew)} @media (prefers-color-scheme:dark){:root:not([data-theme=light]){--ecnew:#4FC3C3}} :root[data-theme=dark]{--ecnew:#4FC3C3}
.grid.g2s{grid-template-columns:repeat(auto-fit,minmax(560px,1fr))} @media (max-width:640px){.grid.g2s{grid-template-columns:1fr}}
.drawer.modal{display:flex;align-items:center;justify-content:center} .drawer.modal .panel.about{position:static;width:min(440px,92vw);height:auto;max-height:none;border-radius:14px;padding:22px 24px;box-shadow:var(--shadow)}
.gantt td.resched-late{color:var(--crit)!important;font-weight:700} .gantt td.resched-early{color:var(--good)!important;font-weight:700} .gantt tr.resched-row .gbar.ec{outline:2px solid var(--crit);outline-offset:1px}
.login .hint{font-size:12px;color:var(--ink3);margin:12px 0 0}
@page{size:A4 portrait;margin:12mm}
@media print{ html,body{width:auto!important} body.printing .wrap{padding:0!important;max-width:none!important;width:auto!important}
 body.printing .rep{font-size:10pt!important;line-height:1.45!important;max-width:none!important;padding:0!important}
 body.printing .rep .band{display:flex!important;flex-direction:row!important;align-items:center!important;gap:12pt!important;margin:0 0 10pt!important;padding:10pt 14pt!important}
 body.printing .rep .band h1{font-size:16pt!important;line-height:1.2!important;margin:2pt 0!important}
 body.printing .rep .band .eyebrow{font-size:7pt!important} body.printing .rep .band-txt>div:last-child{font-size:8.5pt!important}
 body.printing .rep .band-logo{height:14pt!important;margin:0!important}
 body.printing .rep h2{font-size:11pt!important;margin:12pt 0 5pt!important;padding-bottom:2pt!important}
 body.printing .rep p, body.printing .rep li{font-size:10pt!important;margin:3pt 0!important}
 body.printing .rep .tbl{font-size:9pt!important} body.printing .rep .tbl td, body.printing .rep .tbl th{padding:4pt 7pt!important}
 body.printing .rep-photos{grid-template-columns:repeat(3,1fr)!important;gap:6pt!important} body.printing .rep-photos figcaption{font-size:7.5pt!important;line-height:1.3!important}
 body.printing .rep .scroll{overflow:visible!important} body.printing .rep .rs-sign{break-inside:avoid;page-break-inside:avoid} }
@media screen and (max-width:640px){ .rep{padding:16px!important} .rep .band{flex-direction:column-reverse!important;align-items:flex-start!important;gap:8px!important;margin:-16px -16px 14px!important;padding:14px 16px!important} .rep .band h1{font-size:19px!important;line-height:1.25!important} .rep .band-logo{height:15px!important;margin:0!important} .rep h2{font-size:15px} .rep .tbl{font-size:12.5px} .rep .tbl td{padding:6px 8px} .rep-photos{grid-template-columns:repeat(2,1fr)!important} }
.rs-status{border-radius:10px;padding:10px 14px;margin:0 0 12px;font-size:13px;line-height:1.45;max-width:900px;border:1px solid var(--line)} .rs-status.draft{background:color-mix(in srgb,var(--warn) 12%,transparent);border-color:color-mix(in srgb,var(--warn) 40%,transparent)} .rs-status.sent{background:color-mix(in srgb,var(--good) 12%,transparent);border-color:color-mix(in srgb,var(--good) 40%,transparent)} .rs-lock{font-size:12.5px;line-height:1.45;background:var(--surface2);border-left:3px solid var(--gold);border-radius:6px;padding:8px 10px;margin:0 0 12px} .rs-issue p{font-size:13.5px;line-height:1.5} @media print{ body.printing .rs-rep h2{margin:12px 0 6px!important;font-size:14px} body.printing .rs-rep .tbl td, body.printing .rs-rep .tbl th{padding:4px 8px!important} body.printing .rs-rep p{margin:4px 0} body.printing .rs-rep .band{margin-bottom:10px} body.printing .rs-rep .rs-sign{break-inside:avoid;page-break-inside:avoid} body.printing .rs-rep .rep-photos img{aspect-ratio:4/3} } .rs-btns{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px} .rs-btns .btn{width:100%;justify-content:center;text-align:center} .rs-check{background:var(--surface2);border-radius:8px;padding:10px 12px;font-size:13px;line-height:1.5;margin:10px 0} .btn.xs{padding:3px 8px;font-size:11.5px}
.eta-note{font-size:11.5px;line-height:1.3;color:var(--ink2);margin-top:2px;max-width:180px}
[hidden]{display:none!important}
.rs-i{border:0;background:none;color:var(--gold);font-size:15px;cursor:pointer;padding:0 2px;vertical-align:middle} .rs-def{margin-top:8px;font-size:12.5px;line-height:1.45;background:var(--surface2);border-left:3px solid var(--gold);border-radius:6px;padding:8px 10px;color:var(--ink)} .rs-defs{margin-top:8px;font-size:12px;line-height:1.4;max-height:260px;overflow-y:auto;border:1px solid var(--line);border-radius:8px;padding:6px 10px} .rs-defs p{margin:0 0 6px}
.menu .theme-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px} .menu .theme-row>span{font-size:14px} .menu:has(.theme-row){min-width:250px} .menu .seg{display:inline-flex;flex-wrap:nowrap;flex:none;border:1px solid var(--line);border-radius:8px;padding:2px;gap:2px} .menu .seg button{width:auto;display:inline-block;white-space:nowrap;flex:none;padding:4px 9px;font-size:12.5px;border-radius:6px;color:var(--ink2)} .menu .seg button.on{background:var(--gold);color:#1a1712;font-weight:700}
.ovact{display:flex;flex-direction:column;align-items:flex-end;gap:10px} .nchips{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end} .nchip{--c:var(--info);display:inline-flex;align-items:center;gap:5px;padding:5px 11px 5px 9px;border-radius:999px;border:1px solid color-mix(in srgb,var(--c) 50%,transparent);background:color-mix(in srgb,var(--c) 15%,transparent);color:var(--c);font:inherit;font-weight:700;font-size:13px;line-height:1;cursor:pointer} .nchip.crit{--c:var(--crit)} .nchip.warn{--c:var(--warn)} .nchip.info{--c:var(--info)} .nchip:hover{background:color-mix(in srgb,var(--c) 26%,transparent)} .nchip svg{width:15px;height:15px;flex:none}
.ovstack{display:flex;flex-direction:column;gap:16px} .grid.ov3{grid-template-columns:repeat(3,minmax(0,1fr));align-items:stretch} .grid.ov3 .scrollbox{max-height:420px} @media (max-width:1100px){.grid.ov3{grid-template-columns:1fr}} @media (max-width:900px){.ovact{align-items:flex-start} .nchips{justify-content:flex-start}}
#notifs{scroll-margin-top:96px} #notifs .hd h2{display:flex;align-items:center;gap:8px} .risk.flash{animation:rflash 1.8s ease} @keyframes rflash{0%,100%{box-shadow:none}25%,60%{box-shadow:0 0 0 3px color-mix(in srgb,var(--gold) 70%,transparent)}}

/* v1.0.38 – materials receive / move, VO workflow */
.tbl.mat{min-width:1180px} .tbl.mat .w-rcv{width:150px} .tbl.mat .w-ons{width:96px} .tbl.mat .w-eta{width:110px;white-space:normal}
.tbl .of{color:var(--ink3);font-size:12px} .nowrap{white-space:nowrap}
.vo-pend{color:var(--inc);font-size:11.5px;font-weight:600;white-space:nowrap} .pill.vo-pend{color:#8a5a12}
.vo-from{display:inline-block;font-size:10.5px;color:var(--ink3);border:1px solid var(--line);border-radius:5px;padding:0 5px;margin-left:4px}
.seg2,.seg3{display:grid;grid-template-columns:1fr 1fr;gap:4px;background:var(--surface2);border-radius:10px;padding:4px;margin:4px 0 12px} .seg3{grid-template-columns:repeat(3,1fr)}
.seg2 button,.seg3 button{border:0;background:transparent;border-radius:7px;padding:8px;font-weight:600;color:var(--ink2);font:inherit;font-weight:600;cursor:pointer}
.seg2 button.on,.seg3 button.on{background:var(--gold);color:#1e1b16;font-weight:700} .seg2 button.on.bill{background:var(--info);color:#fff}
.vo-risk{display:flex;gap:8px;align-items:flex-start;font-size:13px;margin:4px 0 8px} .vo-risk input{margin-top:3px}
.note-box{background:color-mix(in srgb,var(--info) 11%,transparent);border-radius:8px;padding:8px 10px;font-size:12.5px;line-height:1.45;margin-top:6px}
.sub-card{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:10px;background:var(--surface2)} .sub-card .field{margin-bottom:6px}
.hint{font-size:12.5px;color:var(--ink2);margin:8px 0} .hint-c{font-size:12.5px;color:var(--ink2)} .foot-note{font-size:12px;color:var(--ink3);margin-top:10px}
.mat-sum{font-size:13px;color:var(--ink2);margin-top:4px}
.tbl.mv-hist,.tbl.vo-mini{font-size:12.5px} .tbl.mv-hist td,.tbl.mv-hist th,.tbl.vo-mini td{padding:5px 6px} .mv-x td{text-decoration:line-through;color:var(--ink3)} .mv-x td:last-child{text-decoration:none}
.vo-tabs{display:flex;gap:6px;margin-top:8px} .vo-tabs .chip{cursor:pointer;display:inline-flex;padding:5px 14px;border-radius:999px;border:1px solid var(--line);background:var(--surface);font-weight:600;font-size:12.5px;color:var(--ink2)} .vo-tabs .chip.on{background:var(--brand);border-color:var(--brand);color:#fff}
.vo-pkg{margin-bottom:12px;overflow:hidden} .vo-pkh{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;background:var(--surface2);flex-wrap:wrap} .vo-pkh h3{margin:0;font-size:15px} .vo-pkh .hint{margin:2px 0 0} .vo-pka{display:flex;gap:8px;align-items:center;flex-wrap:wrap} .vo-pka select{padding:5px 8px;border-radius:7px;border:1px solid var(--line);background:var(--surface);color:var(--ink);max-width:280px}
.tbl.vo-t td{vertical-align:middle} .btn[disabled]{opacity:.45;cursor:not-allowed}
.pc-list{max-height:340px;overflow:auto;border:1px solid var(--line);border-radius:10px} .pc-row{display:flex;gap:10px;align-items:flex-start;padding:9px 12px;border-top:1px solid var(--line);cursor:pointer} .pc-row:first-child{border-top:0} .pc-row:has(input:checked){background:color-mix(in srgb,var(--gold) 14%,transparent)} .pc-row input{margin-top:4px}
.panel [style*="grid-template-columns"]>*{min-width:0} .panel .field input,.panel .field select{min-width:0;max-width:100%;box-sizing:border-box}
.panel input[type=search]{width:100%;box-sizing:border-box;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit}
@media print{ .vo-tabs .chip:not(.on){display:none} .vo-pka .btn,.tbl.vo-t td:last-child button{display:none} }

/* v1.0.39 – equipment units */
.drawer .panel.wide,.drawer .panel.mobile.wide{width:min(1240px,96vw)}
.tbl.units td{padding:5px 4px;vertical-align:middle} .tbl.units th{padding:7px 4px} .tbl.units .c{text-align:center}
.tbl.units .u-in{width:100%;min-width:70px;box-sizing:border-box;padding:6px 7px;border:1px solid var(--line);border-radius:7px;background:var(--surface);color:var(--ink);font:inherit;font-size:13px}
.tbl.units td:nth-child(4) .u-in,.tbl.units td:nth-child(6) .u-in{font-family:var(--font-mono);font-size:12px;min-width:120px} .tbl.units td:nth-child(5) .u-in{font-family:var(--font-mono);font-size:12px;min-width:105px}
.tbl.units input[type=date].u-in{min-width:128px} .tbl.units tr.u-dirty{background:color-mix(in srgb,var(--gold) 12%,transparent)}
.u-st{font-size:11.5px;margin-top:3px;white-space:nowrap} .u-saved{color:var(--good)} .u-un{color:var(--inc);font-weight:600} .u-none{color:var(--ink3)}
.u-hist{color:var(--gold);font-weight:600;font-size:13px;text-decoration:none;white-space:nowrap}
.u-foot{display:flex;gap:10px;align-items:center;margin-top:12px;flex-wrap:wrap} .u-foot .hint{margin:0}
.u-card{border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:11px 13px;margin-bottom:9px;cursor:pointer} .u-card.open{border:2px solid var(--gold);cursor:default}
.u-ch{display:flex;align-items:center;gap:8px} .u-sum{font-size:11.5px;color:var(--ink2);margin:3px 0 0 26px} .u-sum.mono{font-family:var(--font-mono)}
.u-card .field{margin:8px 0 0} .u-card .u-in{width:100%;box-sizing:border-box;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit}
.u-ib{display:flex;gap:8px;align-items:center;font-size:14px;padding:4px 0}
.u-bar{position:sticky;bottom:-40px;margin:12px -20px -40px;padding:10px 20px 22px;background:var(--surface);border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr;gap:8px} .u-bar .btn{justify-content:center;padding:11px}
.u-log{margin:10px 0;max-height:60vh;overflow:auto} .u-lr{display:grid;grid-template-columns:110px 1fr;gap:8px;padding:8px 0;border-top:1px solid var(--line);font-size:13px}

/* v1.0.40 – report drafts, packages, inspections */
.pk-bar{display:flex;gap:12px;align-items:center;background:var(--brand);color:#fff;border-radius:12px;padding:10px 14px;margin:0 0 14px;flex-wrap:wrap} .pk-bar span{color:var(--tan);font-size:12.5px} .pk-bar .btn.ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.35)}
tr.pk-on td{background:color-mix(in srgb,var(--gold) 12%,transparent)} .pk-cb{width:16px;height:16px;accent-color:var(--gold)}
.pagehead .chip,.toolbar .chip{cursor:pointer;display:inline-flex;padding:5px 14px;border-radius:999px;border:1px solid var(--line);background:var(--surface);font-weight:600;font-size:12.5px;color:var(--ink2)} .pagehead .chip.on{background:var(--brand);border-color:var(--brand);color:#fff}
.su-st{display:grid!important;grid-template-columns:repeat(3,1fr)} .su-st button{font-size:13px;padding:8px 6px}
.su-fr{display:grid;grid-template-columns:18px auto 1fr 82px 34px;gap:6px;align-items:center;margin-bottom:6px} .su-fr input[type=text]{padding:7px 9px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;min-width:0} .su-fr select{padding:6px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink)}
.su-ph{display:grid;grid-template-columns:repeat(3,1fr);gap:8px} .su-pi{position:relative;aspect-ratio:4/3;border-radius:8px;overflow:hidden;background:var(--surface2)} .su-pi img{width:100%;height:100%;object-fit:cover} .su-pi .x{position:absolute;right:4px;top:4px;width:24px;height:24px;border-radius:50%;border:0;background:rgba(0,0,0,.65);color:#fff;cursor:pointer}
.su-pi.del{outline:2px solid var(--crit)} .su-pi.del img{opacity:.25} .su-pi.del .x{background:var(--crit)}
.su-add{aspect-ratio:4/3;border:1.5px dashed var(--gold);border-radius:8px;display:flex;align-items:center;justify-content:center;color:var(--gold);font-weight:600;font-size:13px;cursor:pointer}
.rs-check.pk-ok{display:flex;gap:10px;align-items:flex-start;cursor:pointer} .rs-check.pk-ok input{margin-top:3px;width:16px;height:16px}
.pk-sig{display:grid;grid-template-columns:1fr 1fr;gap:14px} .pk-sig div{border:1px solid var(--line);padding:10px;min-height:110px;display:flex;flex-direction:column;font-size:12px;color:var(--ink2)} .pk-sig b{color:var(--ink)} .pk-sig .ln{margin-top:auto;border-top:1px solid var(--ink);padding-top:3px}
.pill.p-dark{background:var(--brand);color:#fff} .pk-sec{margin-top:26px} .gantt tr.insp td.name{color:var(--cin)!important} .gbar.ms.insp{border-radius:2px}
@media print{ .pk-sec{break-before:page;page-break-before:always;margin-top:0} .pk-cover{break-after:auto} .pk-sig div{min-height:80pt} }

/* v1.0.41 – equipment installation reports */
.tbl.eir-t th.grp,.tbl.eir-t td.grp{border-left:1px solid var(--line)} .tbl.eir-t thead tr:first-child th{color:var(--ink);border-bottom:0;padding-bottom:0}
.chg,td.chg,tr.chg td{background:#FFE9A8!important;color:#2B2825} .cap-chg{font-size:11.5px;color:var(--ink2);margin:4px 0 0} .cap-chg .chg{padding:0 4px}
.eir-rep .sub-h{font-weight:400;font-size:12px;color:var(--ink2)} .eir-rep .cb-t td:nth-child(3){white-space:nowrap} .eir-rep .c{text-align:center} .ok-c{color:var(--good);font-weight:700}
.warn-box{background:color-mix(in srgb,var(--gold) 14%,transparent);border:1px dashed var(--gold);border-radius:8px;padding:8px 10px;font-size:13px;margin:8px 0}
@media print{ .chg,td.chg,tr.chg td{-webkit-print-color-adjust:exact;print-color-adjust:exact} .eir-rep .tbl.cb-t td,.eir-rep .tbl.cb-t th{padding:3pt 5pt!important} }

/* v1.0.42 – handover report */
.ho-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:16px;align-items:start} @media (max-width:900px){.ho-grid{grid-template-columns:1fr}}
.ho-h{padding:12px 14px;background:var(--surface2)} .ho-h h3{margin:0} .ho-ok{display:inline-flex;width:18px;height:18px;border-radius:4px;background:var(--good);color:#fff;align-items:center;justify-content:center;font-size:12px;font-weight:700} .ho-no{display:inline-block;width:16px;height:16px;border-radius:50%;background:var(--crit)}
.ho-rep{margin-bottom:22px} .ho-sig{grid-template-columns:repeat(3,1fr)} .ho-lk{display:inline-block;border:1px solid var(--gold);color:var(--gold);border-radius:5px;padding:0 6px;font-size:12px;font-weight:700;text-decoration:none;white-space:nowrap}
.ho-rep .sub-h{font-weight:400;font-size:12px;color:var(--ink2)} .ho-rep .c{text-align:center} .ho-rep .cb-t{font-size:12px}
@media print{ .ho-page+.ho-page{break-before:page;page-break-before:always} .ho-rep{margin:0} .ho-room h2{break-after:avoid} .ho-ph figure{break-inside:avoid} .ho-rep .cb-t td,.ho-rep .cb-t th{padding:2pt 4pt!important;font-size:8pt!important} }

/* v1.0.43 */
.env-tag{color:#fff;background:#7A5AA6;border-radius:4px;padding:1px 6px;letter-spacing:.08em;font-size:9px;vertical-align:1px}
.pm-list{border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:4px 0;padding:2px 0} .pm-list button.on{font-weight:700;color:var(--gold)}
.btn.tert{background:transparent;border-color:transparent;color:var(--ink2);font-weight:500} .btn.tert:hover{background:var(--surface);border-color:var(--line)} .btn.tert.danger{color:#b2544a} .act-adm{display:inline-flex;gap:4px;margin-left:auto} .insp-dot{color:var(--cin);font-size:12px}
.seg.sm button{padding:3px 9px;font-size:11.5px} #ai-preview tr.ec-row td{background:rgba(212,170,90,.09)}
.arrow.ico svg{width:17px;height:17px} .fold.cab{scroll-margin-top:90px} .fold.cab.flash{animation:rflash 2.2s ease}
/* v1.0.50 portfolio */
.pf-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px} .pf-card{background:var(--surface);border:1px solid var(--line);border-top:3px solid var(--gold);border-radius:12px;padding:14px 16px} .pf-card.cur{box-shadow:0 0 0 2px var(--gold) inset}
.pf-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start} .pf-top h3{margin:2px 0;font-size:17px} .pf-icons{display:flex;gap:4px;flex-shrink:0} .pf-icons .ico{border:1px solid var(--line);background:var(--bg);border-radius:8px;width:30px;height:30px;font-size:15px;cursor:pointer;color:var(--ink2)} .pf-icons .ico.go{color:var(--gold);border-color:var(--gold);font-weight:700} .pf-icons .ico:hover{background:var(--surface2,var(--line))}
.pf-prog{display:flex;align-items:center;gap:10px;margin:12px 0 10px} .pf-bar{flex:1;height:8px;background:var(--line);border-radius:4px;overflow:hidden} .pf-bar i{display:block;height:100%} .pf-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;font-size:13px} .pf-grid span{display:block;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3)}
.pf-map{color:var(--gold);font-weight:600;margin-left:6px} tr.pf-over td{background:rgba(178,84,74,.07)}
.tt-warn{margin-top:6px;padding:8px 10px;border-radius:8px;background:rgba(201,138,43,.12);border:1px solid rgba(201,138,43,.45);color:var(--ink);font-size:13px;line-height:1.4} .tt-warn .btn{margin-left:6px}
.tm-card{padding:0;overflow:hidden} .tm-scroll{overflow-x:auto;position:relative} .tm-head,.tm-row{display:flex;border-bottom:1px solid var(--line);min-width:max-content} .tm-head{position:sticky;top:0;background:var(--surface);z-index:2} .tm-name{width:200px;flex-shrink:0;padding:6px 10px;font-size:13px;border-right:1px solid var(--line);position:sticky;left:0;background:var(--surface);z-index:1} .tm-lane{position:relative;flex-shrink:0}
.tm-h{display:inline-block;height:38px;font-size:10.5px;color:var(--ink2);text-align:center;border-right:1px solid var(--line);box-sizing:border-box;padding-top:4px;vertical-align:top;overflow:hidden} .tm-h span{color:var(--ink3)} .tm-h.we{background:rgba(0,0,0,.04)} .tm-h.today{background:rgba(212,170,90,.18)}
.tm-grid{position:absolute;top:0;bottom:0;border-right:1px solid var(--line);box-sizing:border-box} .tm-grid.we{background:rgba(0,0,0,.03)} .tm-grid.today{background:rgba(212,170,90,.12)}
.tm-bar{position:absolute;height:18px;border-radius:4px;color:#fff;font-size:11px;line-height:18px;padding:0 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;box-sizing:border-box} .tm-bar.done{opacity:.55} .tm-bar.task{border:1px dashed rgba(255,255,255,.6)} .tm-bar.insp{outline:2px solid #7A5AA6;outline-offset:-2px}
.tm-clash{position:absolute;top:0;text-align:center;color:var(--crit);font-size:12px;line-height:14px;pointer-events:auto;z-index:1}
/* v1.0.49 usage */
.irq-ready-row{font-size:13px;padding:3px 0} .irq-work .insp-sr{padding:6px 0}
.tab-sep{display:inline-block;width:1px;height:22px;background:var(--line);margin:0 6px;vertical-align:middle}
.insp-sr{border-top:1px solid var(--line);padding:8px 0} .insp-sr-h{font-size:12.5px;color:var(--ink2)} .irq-rep .tbl td{vertical-align:top}
.usage-wrap{margin-top:16px} .usage-wrap .grid.g2s{margin-top:16px} .usage-wrap>.card+.card{margin-top:16px}
.seg.sm button{white-space:nowrap} .ubars{display:flex;align-items:flex-end;gap:2px;height:110px;margin:6px 0 2px;border-bottom:1px solid var(--line);padding-bottom:2px} .ubars .ub{flex:1;display:flex;align-items:flex-end;gap:1px;height:100%;min-width:0} .ubars .ub i{flex:1;display:block;background:var(--ink3);opacity:.55;border-radius:2px 2px 0 0;min-height:0} .ubars .ub i.e{background:var(--gold);opacity:1} .ubl{display:flex;justify-content:space-between;font-size:11px;color:var(--ink3);margin-bottom:10px} .ubar{height:6px;background:var(--line);border-radius:3px;overflow:hidden} .ubar i{display:block;height:100%;background:var(--ink3)} .ubar i.e{background:var(--gold)}

/* v1.0.51 project switcher, account settings, project people */
.psw{position:relative;flex:none;margin-left:6px}
.psw-b{display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.2);border-radius:9px;color:#fff;padding:6px 10px 6px 8px;font:600 13.5px var(--font-ui);max-width:280px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.psw-b:hover{background:rgba(255,255,255,.14)} .psw-k{color:var(--tan);font-weight:600;font-size:12px} .psw-car{opacity:.6;margin-left:2px}
.psw-menu{left:0;right:auto;min-width:290px;max-height:70vh;overflow:auto}
.psw-menu button{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap} .psw-menu button small{color:var(--ink3);font-weight:400;font-size:11.5px;width:100%} .psw-menu button.on{background:var(--gold-soft)} .psw-menu button.on b,.psw-menu button.on .psw-c{color:var(--gold)}
.psw-h{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3);padding:8px 10px 4px;border-top:1px solid var(--line);margin-top:4px} .psw-menu .psw-h:first-child{border-top:0;margin-top:0}
.psw-c{display:inline-block;min-width:44px;font-size:11.5px;color:var(--ink2)} .psw-new{border-top:1px solid var(--line)!important;margin-top:4px;color:var(--gold);font-weight:600}
.mp-chips{display:flex;flex-wrap:wrap;gap:6px} .mp-chips .chip{cursor:pointer;display:inline-flex;gap:6px;align-items:baseline;padding:5px 12px;border-radius:999px;border:1px solid var(--line);background:var(--surface);font-weight:600;font-size:12.5px;color:var(--ink2)} .mp-chips .chip small{font-weight:400;color:var(--ink3);font-size:11px} .mp-chips .chip.on{background:var(--gold-soft);border-color:var(--gold);color:var(--ink)}
.sub-co{border-top:1px solid var(--line);padding:10px 0} .sub-co:first-of-type{border-top:0} .sub-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap} .sub-co .tbl{margin-top:6px}
.ro-val{padding:7px 0;font-weight:600} tr.pend td{color:var(--ink2);font-style:italic}
/* v1.0.52 team schedule: the Gantt's generic .today line rule must not lift the team schedule's today column over the bars or shift its header cell */
.tm-grid,.tm-grid.today{z-index:0;pointer-events:none;border-left:0}
.drawer .panel.wide{width:min(820px,100%)} .bo-apply{margin-bottom:10px;padding:12px 14px} .bo-t tr{cursor:pointer} .bo-t tr.sel td{background:var(--gold-soft)} .bo-t td{vertical-align:middle}
.chg-list .log{margin:6px 0} .out-reps .tbl td{vertical-align:middle}
/* v1.0.53 */
.tw{display:flex;align-items:center;gap:8px;flex-wrap:wrap} .tw input[type=time]{width:120px} .tw>span:not(.hint){color:var(--ink2)} .tw .hint{flex-basis:100%}
.tm-bar .tm-t{font-weight:700;margin-right:2px}
.far-pill{margin-top:3px;font:600 10.5px var(--font-ui);white-space:nowrap;letter-spacing:0} .far-note{margin:-6px 0 12px}
.cb-thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px;margin:4px 0 8px} .cb-thumbs figure{margin:0;aspect-ratio:4/3;overflow:hidden;border-radius:8px;border:1px solid var(--line);background:var(--surface2)} .cb-thumbs img{width:100%;height:100%;object-fit:cover} .cb-thumbs .ph-loading{display:grid;place-items:center;height:100%;color:var(--ink3)} .tm-h.today{position:static;border-left:0;z-index:auto} .tm-bar{z-index:2} .tm-clash{z-index:3}
.card .hd>.btn,.card .hd>div>.btn{flex:none;white-space:nowrap}
.top .nav{min-width:0;flex:0 1 auto;overflow-x:auto;scrollbar-width:none} .top .nav::-webkit-scrollbar{display:none}
/* v1.0.54 schedule on a time axis */
:root{--tm-sub:rgba(0,0,0,.06)} @media (prefers-color-scheme:dark){:root:not([data-theme=light]){--tm-sub:rgba(255,255,255,.06)}} :root[data-theme=dark]{--tm-sub:rgba(255,255,255,.06)}
.tm-day .tm-h,.tm-day .tm-head .tm-lane{height:44px} .tm-h.tm-hd{padding-top:0;text-align:left} .tm-hd .tm-dl{padding:3px 6px 2px;font-size:11px;color:var(--ink);border-bottom:1px solid var(--line);white-space:nowrap} .tm-hd .tm-hrs{display:flex} .tm-hd .tm-hrs i{font-style:normal;font-size:10px;color:var(--ink3);padding-left:3px;box-sizing:border-box;border-left:1px solid var(--tm-sub);line-height:20px} .tm-hd .tm-hrs i:first-child{border-left:0}
.tm-week .tm-h{line-height:1.25} .tm-week .tm-h b{font-size:11.5px;color:var(--ink)}
.tm-bar.early{border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:inset 3px 0 0 rgba(255,255,255,.75)} .tm-bar.late{border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:inset -3px 0 0 rgba(255,255,255,.75)} .tm-bar.early.late{box-shadow:inset 3px 0 0 rgba(255,255,255,.75),inset -3px 0 0 rgba(255,255,255,.75)}
.tm-bar .tm-edge{margin-right:3px} .tm-bar .tm-edge.r{margin:0 0 0 3px}
.tw-wd{display:inline-flex;align-items:center;gap:6px;font-weight:600;color:var(--ink);cursor:pointer;margin-right:6px} .tw-wd input{width:16px;height:16px;margin:0} .tw-sel{display:inline-flex;align-items:center;gap:8px} .tw-sel[hidden]{display:none} .tw select.tw-t{width:100px} .tw select.tw-du{width:118px} .btn.act-closed,.btn.act-closed:disabled{background:var(--surface2);color:var(--ink3);border-color:var(--line);cursor:not-allowed;opacity:1} .act-closed-h{margin:6px 0 0} .btn.insp-st{border-width:1.5px} .btn.insp-on{border-color:#8B6FC7;color:#8B6FC7} .btn.insp-ok{border-color:var(--good);color:var(--good)} .btn.insp-wc{border-color:var(--warn);color:var(--warn)} .btn.insp-bad{border-color:var(--crit);color:var(--crit)} .insp-who{font-size:11px;opacity:.75;margin-left:2px} .rep-revs{margin-top:14px}
.loading.boot{display:flex;flex-direction:column;align-items:center;gap:10px} .boot-bar{width:min(320px,80vw);height:6px;border-radius:4px;background:var(--surface2,#e9e4dc);overflow:hidden} .boot-bar i{display:block;height:100%;width:0;background:var(--gold,#b8913f);border-radius:4px;transition:width .25s} .boot-p{font-size:12px;color:var(--ink3,#8a8378)}
.perm-t td,.perm-t th{white-space:nowrap} .perm-t tr.perm-g td{background:var(--surface2);font-size:11.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink2)}
.perm-sel{padding:3px 6px;border-radius:7px;font-size:12.5px;min-width:96px} .perm-sel.lv-manage{border-color:var(--gold);font-weight:600} .perm-sel.lv-contribute{border-color:#4D7EA8} .perm-sel.lv-none{color:var(--ink3)}
.perm-legend{display:flex;flex-wrap:wrap;gap:6px 18px;margin:12px 0 4px;font-size:12.5px;color:var(--ink2)} .perm-mods{font-size:12.5px} .perm-mods dd{color:var(--ink2)}
.busy{position:fixed;inset:0;z-index:2000;background:rgba(20,18,15,.38);display:none;align-items:center;justify-content:center;padding:16px} .busy.on{display:flex}
.busy-card{background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:14px;box-shadow:0 12px 40px rgba(0,0,0,.28);padding:18px 20px;width:min(380px,100%);display:grid;grid-template-columns:auto 1fr;gap:10px 14px;align-items:center}
.busy-spin{width:26px;height:26px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--gold);animation:busyspin .8s linear infinite}
.busy-txt{display:flex;flex-direction:column;gap:2px} .busy-txt b{font-size:15px} .busy-txt span{font-size:12.5px;color:var(--ink2)}
.busy-bar{grid-column:1/-1;height:8px;border-radius:5px;background:var(--surface2);overflow:hidden;position:relative} .busy-bar i{display:block;height:100%;background:var(--gold);border-radius:5px;transition:width .3s}
.busy-bar.ind i{width:35%;position:absolute;animation:busyind 1.2s ease-in-out infinite}
.busy-hint{grid-column:1/-1;font-size:12px;color:var(--ink3)} .busy-hint:empty{display:none}
@keyframes busyspin{to{transform:rotate(360deg)}} @keyframes busyind{0%{left:-35%}100%{left:100%}}
@media print{.busy{display:none!important}} .tw-sel{flex-wrap:wrap}
/* v1.0.55 calendar cards, follow-ups, my week */
.tm-row .tm-name{z-index:3} .tm-lane .tm-bar{z-index:1}
.tm-day .tm-bar,.tm-week .tm-bar{height:36px;line-height:15px;padding:2px 6px} .tm-bar .l1,.tm-bar .l2{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .tm-bar .l2{font-size:10.5px;opacity:.92}
.tm-bar.grp{box-shadow:inset 0 0 0 2px rgba(255,255,255,.45);font-weight:600} .tm-bar.grp .l1{font-weight:700} .tm-bar.fu{background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.16) 0 6px,transparent 6px 12px)}
.tm-rng{height:30px;font-size:12.5px;padding:0 8px;border-radius:8px;border:1px solid var(--line);background:var(--surface);color:var(--ink)}
.fu-plan{display:grid;gap:4px;margin:6px 0 10px;font-size:13px} .fu-plan>div{display:block} .fu-plan span:first-child{display:inline-block;min-width:104px;color:var(--ink2)} .fu-box .btn{margin-top:2px}
.rep-plan td:first-child{color:var(--ink2)} .rep-ph-h{margin:10px 0 4px;font-size:12.5px;color:var(--ink2)} .rep-ph-h b{color:var(--ink)}
.mw-card{padding-bottom:10px} .mw-day{display:grid;grid-template-columns:110px 1fr;gap:10px;padding:7px 0;border-top:1px solid var(--line)} .mw-day:first-of-type{border-top:0} .mw-d{font-size:12.5px;color:var(--ink2)} .mw-d b{color:var(--ink);font-size:14px} .mw-d.mw-now{color:var(--gold,#B08D57);font-weight:700}
.mw-items{display:grid;gap:3px} .mw-it{display:block;color:var(--ink);text-decoration:none;font-size:13px;padding:3px 6px;border-radius:6px} .mw-it:hover{background:var(--surface2)} .mw-it i{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:7px;vertical-align:0} .mw-t{display:inline-block;min-width:92px;font-variant-numeric:tabular-nums;color:var(--ink2)}
.tm-glist{display:grid;gap:4px} .tm-glist .mw-it{padding:7px 8px;border:1px solid var(--line)}
.cal-steps{display:grid;gap:10px;margin:8px 0;font-size:13px} .cal-steps ol{margin:4px 0 0;padding-left:20px} .cal-steps>div{padding:10px 12px;border:1px solid var(--line);border-radius:10px}
.mp-chips .chip[disabled]{cursor:default;opacity:.85} .fu-endnote{display:block;margin-top:4px}
@media (max-width:720px){ .mw-day{grid-template-columns:1fr;gap:2px} }
/* v1.0.60 documents */
.docbox .bh .pill{background:rgba(255,255,255,.16);color:#fff;font-weight:600} .docbox .bh .pill.p-warn{background:#E0A43A;color:#1d1a16} .docbox .bh .pill.p-good{background:#4F8F60;color:#fff} .seg button.on .pill{background:rgba(0,0,0,.18);color:inherit}
.doc-pkg{padding-bottom:6px} .doc-pkg .hd h2{display:flex;align-items:center;gap:8px} .doc-ser{display:inline-block;min-width:34px;padding:1px 6px;border-radius:6px;background:var(--surface2);font-size:11.5px;margin-right:4px} .docbox .bh .doc-ser{background:rgba(255,255,255,.2);color:#fff;font-weight:600}
/* v1.0.72 inspection request form */
.irq-kv td:nth-child(odd){color:var(--ink2);width:130px;white-space:nowrap} .irq-sub{font-size:12px;font-weight:400;color:var(--ink3);margin-left:8px}
.irq-result{display:flex;gap:28px;flex-wrap:wrap;margin:8px 0 14px;font-size:14px} .irq-box{display:inline-flex;align-items:center;gap:8px} .irq-box i{display:inline-block;width:18px;height:18px;border:1.5px solid var(--ink);border-radius:3px;background:#fff}
.irq-comment{margin:0 0 6px} .irq-line{height:30px;border-bottom:1px solid var(--ink3)}
.irq-sign td{vertical-align:top;padding:10px 12px} .irq-sig{display:flex;align-items:flex-end;gap:10px;margin:8px 0 14px;font-size:13px} .irq-sig.sig{margin-top:12px} .irq-sig.sig i{height:50px} .irq-sig span{color:var(--ink2);width:72px;flex:none} .irq-sig i{flex:1;border-bottom:1px solid var(--ink3);height:22px} .irq-sig i.short{flex:0 0 160px} .irq-sig b{border-bottom:1px solid var(--ink3);flex:1;padding-bottom:2px}
.irq-foot{font-size:12px;color:var(--ink2);margin-top:14px;border-top:1px dashed var(--line);padding-top:8px}
.irq-superseded{margin:12px 0;padding:10px 14px;border:2px solid var(--crit);color:var(--crit);font-weight:700;letter-spacing:.04em;text-align:center;border-radius:8px}
.irq-sup td{color:var(--ink3)} .irq-strip{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:-4px 0 10px;font-size:12.5px}
.rep.irq-rep h1{font-size:22px}
@media print{ .irq-box i{-webkit-print-color-adjust:exact;print-color-adjust:exact} .irq-rep{page-break-inside:auto} .irq-sign,.irq-result,.irq-comment{page-break-inside:avoid} }
/* v1.0.69 handbook */
.hb .hb-toc{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 14px} .hb .hb-toc a{font-size:12.5px;padding:4px 10px;border:1px solid var(--line);border-radius:99px;color:var(--ink);text-decoration:none;background:var(--surface)} .hb .hb-toc a.hb-off{opacity:.45;text-decoration:line-through} .hb .hb-toc a.on{background:var(--gold);border-color:var(--gold);color:#1e1b16;font-weight:600}
.hb-sec{margin-bottom:16px} .hb-sec.hb-off{opacity:.6} .hb-sec>p{font-size:13.5px;color:var(--ink2);margin:4px 0 12px;max-width:900px}
.hb-lv{display:inline-block;font-size:11.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:3px 9px;border-radius:99px;background:var(--surface2);color:var(--ink3)} .hb-lv1{background:rgba(79,143,96,.14);color:#3b7a4c} .hb-lv2{background:rgba(42,140,140,.14);color:#237b7b} .hb-lv3{background:rgba(201,162,39,.18);color:#8a6a10}
.hb-table td.hint{font-size:12px} .hb-table tr.hb-off td{color:var(--ink3)}
.hb-cols{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:14px} .hb-cols ul{list-style:none;margin:6px 0 0;padding:0;font-size:13.5px} .hb-cols li{padding:4px 0;border-bottom:1px dashed var(--line)} .hb-can li{color:var(--ink)} .hb-not li{color:var(--ink3)}
.hb-role{font:inherit;font-size:13px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink)}
.hb-render{margin:14px 0} .hb-frame{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:10px;background:var(--bg);margin:6px 0} .hb-scale{position:absolute;left:0;top:0;transform-origin:0 0;pointer-events:none;overflow:hidden} .hb-scale .hb-page{min-height:200px}
.hb-marks{position:absolute;inset:0} .hb-box{position:absolute;border:3px solid #D9342B;border-radius:8px;box-shadow:0 0 0 3px rgba(255,255,255,.6)} .hb-mark{position:absolute;width:30px;height:30px;border-radius:50%;background:#D9342B;color:#fff;font-weight:800;font-size:15px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.35)}
.hb-legend{margin:6px 0 0;padding-left:0;list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:4px 16px;font-size:13px} .hb-legend li b{display:inline-flex;width:20px;height:20px;border-radius:50%;background:#D9342B;color:#fff;font-size:12px;align-items:center;justify-content:center;margin-right:6px} .hb-legend li.hb-off{color:var(--ink3)} .hb-legend li.hb-off b{background:var(--ink3)}
.hb-drawer{position:static;background:none;display:block;width:560px} .hb-drawer .panel{height:auto;border:1px solid var(--line);border-radius:12px}
.hb-flow{margin:14px 0 4px;overflow:auto} .hb-svg{display:block;max-width:100%;height:auto;margin:6px 0} .hb-svg path{fill:none;stroke:var(--ink3);stroke-width:1.6} .hb-svg marker path{fill:var(--ink3);stroke:none} .hb-svg text{font-size:12px;fill:var(--ink)} .hb-svg .hb-el{font-size:10.5px;fill:var(--ink3);paint-order:stroke;stroke:var(--surface);stroke-width:4px;stroke-linejoin:round}
.hb-svg .hb-me rect{fill:rgba(201,162,39,.22);stroke:var(--gold);stroke-width:1.6} .hb-svg .hb-other rect{fill:var(--surface2);stroke:var(--line)} .hb-svg .hb-other text{fill:var(--ink3)}
.hb-leg{display:inline-block;width:14px;height:10px;border-radius:3px;vertical-align:middle;margin-right:4px} .hb-leg-me{background:rgba(201,162,39,.5);border:1px solid var(--gold)} .hb-leg-other{background:var(--surface2);border:1px solid var(--line)}
.hb-list{margin:26px 0 0;font-size:13px;color:var(--ink3)} .hb-list summary{cursor:pointer;opacity:.7} .hb-list summary:hover{opacity:1} .hb-links{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px} .hb-links a{padding:5px 10px;border:1px solid var(--line);border-radius:8px;color:var(--ink);text-decoration:none;background:var(--surface)}
@media (max-width:800px){ .hb-cols{grid-template-columns:1fr} }
@media print{ .hb .top,.top,.hb .noprint{display:none!important} body.printing .hb .pagehead,body.printing .hb-scale .pagehead{display:flex!important} body.printing .hb-scale .kpis{display:grid!important} body.printing .hb-scale .toolbar{display:flex!important} body.printing .hb-scale .drawer{display:block!important} body.printing .hb-scale .card{border:1px solid var(--line)} .hb-sec{page-break-inside:avoid;border:none;box-shadow:none} .hb-frame{page-break-inside:avoid} .hb-box,.hb-mark,.hb-svg rect{-webkit-print-color-adjust:exact;print-color-adjust:exact} }
/* v1.0.85 storage by project, report attachments */
.st-card{margin-top:18px} .st-h{margin:18px 0 6px;font-size:15px;font-weight:600} .st-h .hint{font-weight:400;margin-left:6px} .st-scroll{overflow-x:auto} .st-tbl{min-width:760px} .st-tbl td.num,.st-tbl th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap} .st-tbl tfoot td{border-top:2px solid var(--line);font-weight:600}
.insp-ph-note{margin:6px 0 0}
/* v1.0.84 inspection comments header, related documents */
.su-fh{margin-bottom:2px} .su-fh span{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3)}
/* v1.0.82 photo viewer */
.rep-photos img,.photos img,.ho-ph img,.cb-thumbs img{cursor:zoom-in}
.pv{position:fixed;inset:0;z-index:2000;background:rgba(15,13,11,.94);display:flex;flex-direction:column}
.pv-bar{display:flex;align-items:center;gap:8px;padding:10px 12px;color:#eee} .pv-cap{flex:1;font-size:13px;opacity:.85;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-bar .btn{background:rgba(255,255,255,.12)!important;color:#fff!important;border:1px solid rgba(255,255,255,.3)!important;text-decoration:none}
.pv-body{flex:1;overflow:auto;display:flex;align-items:center;justify-content:center;padding:8px 8px 16px;touch-action:pinch-zoom}
.pv-body img{max-width:100%;max-height:100%;object-fit:contain;border-radius:4px;background:#fff}
/* v1.0.81 photos: same box, whole picture (no crop) – letterboxed on a neutral background */
.photos img,.rep-photos img,.ho-ph img,.cb-thumbs img{object-fit:contain!important;background:var(--surface2)}
.rep-photos img,.ho-ph img{background:#f1eee8} @media print{ .photos img,.rep-photos img,.ho-ph img,.cb-thumbs img{background:#f1eee8!important;-webkit-print-color-adjust:exact;print-color-adjust:exact} }
/* v1.0.80 remaining work on the card */
.u-rem{margin:6px 0 2px;padding:6px 10px;border-left:3px solid var(--gold);background:rgba(201,162,39,.08);border-radius:0 6px 6px 0;font-size:13px;line-height:1.45;white-space:pre-wrap;color:var(--ink)} .u-rem-l{display:block;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--gold);margin-bottom:2px} .u-rem.big{font-size:14px;margin:4px 0 12px}
/* v1.0.76 documents: new document vs revision */
.doc .ttl .doc-rev-btn{margin-left:12px;margin-right:auto} .du-doc{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:0 0 12px;background:var(--surface2)} .du-doc b{font-size:15px}
/* v1.0.74 upcoming colours */
.ov-upc .row.upc-ec{box-shadow:inset 3px 0 0 var(--ecnew)} .ov-upc .row.upc-ec .d,.ov-upc .row.upc-ec .n{color:var(--ecnew)} .ov-upc .row.upc-ec .n small{color:var(--ink2)}
.ov-upc .row.upc-act{box-shadow:inset 3px 0 0 var(--gold)} .ov-upc .row.upc-ec,.ov-upc .row.upc-act{padding-left:12px}
.upc-key{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--ink2);padding:8px 2px 0;border-top:1px solid var(--line);margin-top:6px} .upc-key i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px;vertical-align:-1px} .upc-key .k-ec{background:var(--ecnew)} .upc-key .k-act{background:var(--gold)}
/* v1.0.68 open drafts */
.su-drafts{border:1px solid var(--gold);border-radius:8px;padding:10px;margin:10px 0;background:rgba(201,162,39,.06)}
.sd-row{border-top:1px solid var(--line);padding:8px 0;font-size:13px} .sd-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap} .sd-top .btn{margin-left:auto} .sd-note{margin:4px 0 2px;color:var(--ink2)}
.btn.su-leave{background:var(--surface2);color:var(--ink3);border-color:var(--line)}
.su-flag{background:rgba(224,164,58,.14);border:1px solid var(--gold);border-radius:8px;padding:6px 10px;font-size:12.5px;margin:6px 0}
.ql-modal{position:fixed;inset:0;background:rgba(20,18,15,.45);z-index:1500;display:flex;align-items:center;justify-content:center;padding:16px}
.ql-panel{background:var(--surface);color:var(--ink);border-radius:12px;max-width:860px;width:100%;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 12px 40px rgba(0,0,0,.28)} .ql-h{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--line)} .ql-h .spacer{flex:1} .ql-b{overflow:auto;padding:14px}
/* v1.0.57 PDF */
.pdf-panel{max-width:520px} .pdf-wait{display:flex;align-items:center;gap:10px;color:var(--ink2)} .pdf-btns{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px} .pdf-btns .btn{text-decoration:none}
.pdf-prog{display:flex;align-items:center;gap:10px;margin:6px 0 2px} .pdf-track{flex:1;height:8px;border-radius:99px;background:var(--line);overflow:hidden} .pdf-track i{display:block;height:100%;background:var(--gold,#B08D57);border-radius:99px;transition:width .25s} .pdf-prog b{min-width:40px;text-align:right;font-variant-numeric:tabular-nums} .pdf-badge{font-size:10px;margin-left:4px}
.spin{width:16px;height:16px;border-radius:50%;border:2px solid var(--line);border-top-color:var(--gold,#B08D57);display:inline-block;animation:pdfspin .8s linear infinite} @keyframes pdfspin{to{transform:rotate(360deg)}}
@media (max-width:1500px){ .psw-b .psw-n{display:none} .top .back{max-width:34px;padding:5px 10px} }
@media (max-width:1366px){ .top .in{gap:10px} .nav button{padding:16px 6px;font-size:12px} .logo{font-size:15px} }
@media (max-width:720px){ .card .hd{flex-wrap:wrap} .card .hd>div:last-child{flex-wrap:wrap} }
@media (max-width:900px){ .psw{order:2;margin-left:auto} .psw-b{max-width:200px} }
@media (max-width:720px){ .psw-b{max-width:150px;font-size:12.5px} }

.crew-pick{display:flex;flex-wrap:wrap;gap:6px} .crew-pick label{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:4px 12px;border:1px solid var(--line);border-radius:999px;font-size:13px;cursor:pointer;background:var(--surface)} .crew-pick label.on{border-color:var(--ink);font-weight:600} .crew-pick input{margin:0}
.run-banner{display:flex;flex-direction:column;gap:3px;margin:0 0 10px;padding:8px 12px;border:1px solid var(--line);border-left:3px solid var(--info);border-radius:0 8px 8px 0;background:var(--info-soft);font-size:13px;line-height:1.45}
.act-prog{margin:8px 0 10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;display:flex;flex-direction:column;gap:6px} .act-prog .ap-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px} .act-prog .ap-pct{font-family:var(--font-head);font-size:22px}
.act-prog .ap-bar{height:6px;border-radius:4px;background:var(--surface2);overflow:hidden} .act-prog .ap-bar i{display:block;height:100%;background:var(--good)} .act-prog .ap-run{font-size:12.5px;color:var(--ink2)}
.s-good{color:var(--good)} .s-warn{color:var(--warn-ink)} .s-info{color:var(--info-ink)} .s-crit{color:var(--crit-ink)}
.rep-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0 6px;break-inside:avoid} .rep-strip>div{border:1px solid var(--line);border-radius:8px;padding:8px 12px;min-width:0} .rep-strip span{display:block;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink2)} .rep-strip b{display:block;font-size:15px;overflow-wrap:anywhere}
.rep-strip .s-good b{color:var(--good)} .rep-strip .s-warn b{color:var(--warn-ink)} .rep-strip .s-info b{color:var(--info-ink)} .rep-strip .s-crit b{color:var(--crit-ink)}
.run-entry{break-inside:avoid;border-top:1px solid var(--line);padding:10px 0 4px} .run-entry h4{margin:0 0 4px;font-size:13.5px;font-weight:400}
@media (max-width:640px){.rep-strip{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ==== Euro Creations identity – "Refined C" (v1.0.90, approved by Kongpon and the CEO 12 Oct 2026) ====
   Guidelines 2026.09: white with graphite and greys, silver as the premium accent, Times for titles and figures,
   Neue Haas Grotesk Text for the interface (web licence pending → Helvetica Neue / Helvetica / Arial, the guidelines' system font).
   Colour only where it carries meaning, in light validated tones; text always stays in ink.
   Appended to styles.css by build_live.py, so every console (Project, Home, Products) gets it. */
:root{
  --font-serif:"Times","Times New Roman","Liberation Serif",serif;
  --font-ui:"Neue Haas Grotesk Text","Helvetica Neue",Helvetica,Arial,"Liberation Sans",sans-serif;
  --font-head:"Neue Haas Grotesk Text","Helvetica Neue",Helvetica,Arial,"Liberation Sans",sans-serif;
  --font-mono:"Neue Haas Grotesk Text Mono","Helvetica Neue",Helvetica,Arial,"Liberation Sans",sans-serif;
  --font-h:var(--font-head);
  --silver:#8B8E8F; --silver-hi:#B7B9BA;
  --bg:#FFFFFF; --surface:#FFFFFF; --surface2:#F4F4F4; --line:#E4E4E4; --ink:#1A1A1A; --ink2:#5C5C5C; --ink3:#8E9193;
  /* chrome = top bar, report header, sign-in */
  --chrome:#FFFFFF; --chrome-ink:#1A1A1A; --chrome-ink2:#6E6E6E; --chrome-line:#E2E2E2; --chrome-line2:#D0D0D0; --login-bg:#F4F4F4;
  --brand:#1A1A1A; --brand-ink:#FFFFFF;
  /* accent = graphite (buttons, selected states); the old --gold token now means "accent" */
  --gold:#222222; --tan:#8E9193; --gold-soft:rgba(0,0,0,.05); --on-accent:#FFFFFF; --rule-strong:#1A1A1A; --accent-bg:#222222; --accent-line:#222222; --nav-on:#1A1A1A; --tint:20%;
  --login-img:none; --login-box:#FFFFFF; --menu-shadow:0 10px 28px rgba(0,0,0,.10);
  /* systems – fixed order, also the project colours */
  --ha:#4F86C6; --av:#D9824F; --it:#3FA584; --lt:#D6A02A; --cin:#7867C8; --ecnew:#2E9BC0;
  --ec-bar:#8DB0DC; --ec-ink:#2F6FB0; --other-bar:#DADADA; --other-prog:#ABABAB; --sum-bar:#BDBDBD;
  /* status – meaning only */
  --good:#3F9A6E; --warn:#D9A13B; --crit:#D0584A; --info:#4F86C6; --crit-ink:#B5473A; --warn-ink:#9A6B12; --info-ink:#355F93;
  --good-soft:#E7F3EC; --warn-soft:#FBF1DF; --crit-soft:#FBE9E6; --info-soft:#E8F0F9; --mute-soft:#F2F2F2;
  /* material stages – one distinct hue per stage: rose pending · ochre incoming · teal warehouse · violet on site · green installed */
  --pend:#D6606A; --inc:#DBA92A; --wh:#2E9BC0; --site:#7867C8; --inst:#3F9A6E; --own:#C4C4C4; --na:#EEEEEE; --prog:#3F9A6E;
  --tm-today:#EEF3FA; --shadow:none;
}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){ color-scheme:dark;
  /* dark = "night graphite": layered charcoal with a hint of cool, ivory text, silver for lines and the accent */
  --bg:#111214; --surface:#17181A; --surface2:#1E2023; --line:#2A2C2F; --ink:#ECEAE6; --ink2:#AEADA9; --ink3:#85888B;
  --chrome:#0C0D0E; --chrome-ink:#ECEAE6; --chrome-ink2:#8E9093; --chrome-line:#26282B; --chrome-line2:#3A3C3F;
  --login-bg:#0C0D0E; --login-img:radial-gradient(120% 80% at 50% 0%,#1F2124 0%,#0C0D0E 62%); --login-box:#151618;
  --brand:#0C0D0E; --gold:#D5D6D7; --accent-bg:#26282B; --on-accent:#ECEAE6; --accent-line:#8B8E8F; --tan:#9A9DA0; --gold-soft:rgba(255,255,255,.05);
  --rule-strong:#6E7173; --nav-on:#C9CBCC; --tint:24%; --menu-shadow:0 12px 32px rgba(0,0,0,.45);
  --ha:#7FA6D4; --av:#E0A07A; --it:#6DBB9C; --lt:#D9B45E; --cin:#9C92D8; --ecnew:#5DB3CF;
  --ec-bar:#56779F; --ec-ink:#A9C6E8; --other-bar:#34363A; --other-prog:#5A5C60; --sum-bar:#4A4C50;
  --good:#6BB894; --warn:#DDB45F; --crit:#E08070; --info:#7FA6D4; --crit-ink:#F0998B; --warn-ink:#E9C47C; --info-ink:#A9C6E8;
  --good-soft:rgba(107,184,148,.13); --warn-soft:rgba(221,180,95,.13); --crit-soft:rgba(224,128,112,.14); --info-soft:rgba(127,166,212,.13); --mute-soft:rgba(255,255,255,.06);
  --pend:#DC6A74; --inc:#CF9C28; --wh:#3AA3C6; --site:#8A7BD6; --inst:#4FA676; --own:#4A4C50; --na:#26282B; --prog:#5DB487; --tm-today:rgba(127,166,212,.09); }}
:root[data-theme="dark"]{ color-scheme:dark;
  /* dark = "night graphite": layered charcoal with a hint of cool, ivory text, silver for lines and the accent */
  --bg:#111214; --surface:#17181A; --surface2:#1E2023; --line:#2A2C2F; --ink:#ECEAE6; --ink2:#AEADA9; --ink3:#85888B;
  --chrome:#0C0D0E; --chrome-ink:#ECEAE6; --chrome-ink2:#8E9093; --chrome-line:#26282B; --chrome-line2:#3A3C3F;
  --login-bg:#0C0D0E; --login-img:radial-gradient(120% 80% at 50% 0%,#1F2124 0%,#0C0D0E 62%); --login-box:#151618;
  --brand:#0C0D0E; --gold:#D5D6D7; --accent-bg:#26282B; --on-accent:#ECEAE6; --accent-line:#8B8E8F; --tan:#9A9DA0; --gold-soft:rgba(255,255,255,.05);
  --rule-strong:#6E7173; --nav-on:#C9CBCC; --tint:24%; --menu-shadow:0 12px 32px rgba(0,0,0,.45);
  --ha:#7FA6D4; --av:#E0A07A; --it:#6DBB9C; --lt:#D9B45E; --cin:#9C92D8; --ecnew:#5DB3CF;
  --ec-bar:#56779F; --ec-ink:#A9C6E8; --other-bar:#34363A; --other-prog:#5A5C60; --sum-bar:#4A4C50;
  --good:#6BB894; --warn:#DDB45F; --crit:#E08070; --info:#7FA6D4; --crit-ink:#F0998B; --warn-ink:#E9C47C; --info-ink:#A9C6E8;
  --good-soft:rgba(107,184,148,.13); --warn-soft:rgba(221,180,95,.13); --crit-soft:rgba(224,128,112,.14); --info-soft:rgba(127,166,212,.13); --mute-soft:rgba(255,255,255,.06);
  --pend:#DC6A74; --inc:#CF9C28; --wh:#3AA3C6; --site:#8A7BD6; --inst:#4FA676; --own:#4A4C50; --na:#26282B; --prog:#5DB487; --tm-today:rgba(127,166,212,.09); }

/* ---- type ---- */
body{background:var(--bg);color:var(--ink);font:15px/1.5 var(--font-ui);-webkit-font-smoothing:antialiased}
h1,h2{font-family:var(--font-serif);font-weight:400;letter-spacing:-.005em}
h1{font-size:40px;line-height:1.08} h2{font-size:22px} .card .hd h2{font-size:23px}
h3,h4{font-family:var(--font-head);font-weight:500}
.eyebrow,.tbl th,.gantt th,.dsub{font-family:var(--font-ui)!important;font-size:10.5px!important;letter-spacing:.14em!important;text-transform:uppercase;color:var(--ink3)!important;font-weight:500!important}
.kpi .v,.dval,.row .d,.num{font-family:var(--font-head);font-weight:500}
.mono{font-family:var(--font-ui);font-variant-numeric:tabular-nums;letter-spacing:.01em}

/* ---- top bar: white, black logotype, hairline ---- */
.top{background:var(--chrome);color:var(--chrome-ink);border-bottom:1px solid var(--chrome-line)}
.top .in{min-height:58px}
.logo{font-size:0;letter-spacing:0;line-height:1}
.logo::before{content:"";display:block;width:150px;height:14.4px;background:url("brand/logo_black.svg") no-repeat left center/contain}
.logo small{font-family:var(--font-ui);font-size:10.5px;letter-spacing:.04em;color:var(--ink3);font-weight:400;text-transform:none;margin-top:7px}
.nav button{font-family:var(--font-head);font-weight:500;text-transform:none;letter-spacing:0;font-size:14.5px;color:var(--chrome-ink2);border-bottom:1px solid transparent;margin-bottom:-1px}
.nav button.on{color:var(--chrome-ink);border-bottom:2px solid var(--nav-on)}
.proj{color:var(--ink3);font-family:var(--font-ui);font-size:11.5px}
.user>button{border-radius:2px;background:transparent;border-color:var(--chrome-line2);color:var(--chrome-ink)}
.avatar{background:var(--chrome-ink);color:var(--chrome);border-radius:0;font-family:var(--font-head);font-weight:500}
.psw-b{font-family:var(--font-ui);font-weight:500;letter-spacing:.04em;color:var(--chrome-ink);border-color:var(--chrome-line2);background:transparent;border-radius:2px}
.top .back{background:transparent;border-color:var(--chrome-line2);color:var(--chrome-ink2);border-radius:2px}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .logo::before{background-image:url("brand/logo_white.svg")} }
:root[data-theme="dark"] .logo::before{background-image:url("brand/logo_white.svg")}

/* ---- page head and figures: Times numerals on one ruled strip ---- */
.wrap{padding-top:34px}
.pagehead{margin-bottom:26px}
.pagehead p{font-size:15px;margin-top:10px}
.kpis{gap:0;border-top:1px solid var(--rule-strong);border-bottom:1px solid var(--line);margin-bottom:34px}
.kpi{border:0;border-left:1px solid var(--line);border-radius:0;background:transparent;padding:16px 20px 18px}
.kpi:first-child{border-left:0;padding-left:0}
.kpi .v{font-family:var(--font-serif);font-weight:400;font-size:42px;letter-spacing:-.01em;margin-top:10px}
.kpi .s{color:var(--ink3)}
@media (max-width:700px){ .kpi{border-left:0!important;padding-left:0!important;border-bottom:1px solid var(--line)} .kpis{border-bottom:0} }

/* ---- sections: hairline-edged cards (Kongpon 13 Oct: keep the card edges), Times title over a hairline ---- */
.card{border:1px solid var(--line);background:var(--surface);padding:18px 20px;border-radius:4px;box-shadow:none}
.card .hd{border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:10px}
.grid.g3,.grid.g2{gap:24px}
.arrow{border:0;background:transparent;border-radius:2px}
.arrow:hover{background:var(--surface2);color:var(--ink)}
.donut{border:1px solid var(--line);border-radius:4px;background:var(--surface);padding:14px 12px}
.donut:hover{border-color:var(--ink3)}
.donut .arrow{top:10px;right:6px;color:var(--ink3)}
.donut:hover .arrow{color:var(--ink);background:var(--surface2)}
.row:hover{border-radius:0}
.legend i{border-radius:0}
.docbox,.gantt,.risk,.menu,.pf-card{border-radius:2px;box-shadow:none}
.docbox .bh{background:var(--surface2);color:var(--ink)}
.docbox .bh .dt{color:var(--ink3)}
.risk{border-left-width:3px}
.pf-card{border:1px solid var(--line);border-radius:4px;padding:16px 18px}
.pf-card.cur{box-shadow:none}

/* ---- controls ---- */
.btn,.seg button,select,input[type=text],input[type=date],input[type=number],input[type=email],input[type=password],textarea,.chk{border-radius:2px}
.btn{font-weight:500;border-color:#CFCFCF}
:root[data-theme="dark"] .btn{border-color:var(--line)}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .btn{border-color:var(--line)} }
.btn.primary,.bulkbar .btn.primary{background:var(--accent-bg);color:var(--on-accent);border-color:var(--accent-line)}
.btn.dark{background:var(--accent-bg);border-color:var(--accent-line);color:var(--on-accent)}
.seg button.on,.seg2 button.on,.seg3 button.on{background:var(--accent-bg);color:var(--on-accent);border-color:var(--accent-line)}
.hb .hb-toc a.on,.menu .seg button.on{background:var(--accent-bg);color:var(--on-accent);border-color:var(--accent-line)}
.chk.on{background:var(--accent-bg);color:var(--on-accent);border-color:var(--accent-line)}
.btn:focus-visible,button:focus-visible,select:focus-visible,input:focus-visible{outline:2px solid var(--silver)}
.toast,.nchip,.pagehead .chip,.toolbar .chip,.vo-tabs .chip,.mp-chips .chip{border-radius:2px}
.pagehead .chip.on{background:var(--accent-bg);border-color:var(--accent-line);color:var(--on-accent)}

/* ---- tags and status: light tint, colour on the edge or dot, text in ink ---- */
.sys{background:color-mix(in srgb,var(--c,#9A9A9A) var(--tint),var(--surface))!important;color:var(--ink)!important;border:0;border-left:3px solid var(--c,#9A9A9A);border-radius:0;font-family:var(--font-ui);font-size:10.5px;letter-spacing:.08em;font-weight:500;padding:1px 6px}
.sys-HA{--c:var(--ha)} .sys-AV{--c:var(--av)} .sys-IT{--c:var(--it)} .sys-LT{--c:var(--lt)} .sys-CIN{--c:var(--cin)}
.pill{border-radius:999px;font-weight:500;color:var(--ink)!important;padding:2px 10px 2px 8px}
/* v1.0.93.3: a dark pill (Issued / Locked …) keeps light text – the ink rule above made it black on black */
.pill.p-dark{background:var(--accent-bg)!important;color:var(--on-accent)!important;border:1px solid var(--accent-line)}
.p-good{background:var(--good-soft)!important} .p-good i{background:var(--good)}
.p-warn{background:var(--warn-soft)!important} .p-warn i{background:var(--warn)}
.p-crit{background:var(--crit-soft)!important;color:var(--crit-ink)!important} .p-crit i{background:var(--crit)}
.p-info{background:var(--info-soft)!important} .p-info i{background:var(--info)}
.p-mute,.p-gold{background:var(--mute-soft)!important;color:var(--ink2)!important}
.nchip{border-radius:999px;font-weight:500}
.nchip:not(.crit):not(.warn){--c:var(--info-ink);background:var(--info-soft);border-color:color-mix(in srgb,var(--info) 40%,transparent)}
.nchip.warn{--c:var(--warn-ink);background:var(--warn-soft);border-color:color-mix(in srgb,var(--warn) 55%,transparent)}
.nchip.crit{--c:var(--crit-ink);background:var(--crit-soft)}

/* ---- programme ---- */
.gantt{border-radius:0;border-left:0;border-right:0}
.gantt th{background:var(--surface)}
.gantt tr.sum td,.gantt tr.sum td.name{background:var(--surface2)}
.gantt tr.ec td.name{color:var(--ink)!important;font-weight:500}
.gantt tr.ecnew td.name,.gantt tr.ecnew td{color:var(--ecnew)!important}
.gantt tr.ecnew td.name small,.gantt tr.ecnew td.name .hint{color:var(--ink3)!important}
.gbar{background:var(--other-bar);opacity:1;border-radius:2px}
.gbar.ec{background:var(--ec-bar)}
.gantt tr.ecnew .gbar.ec{background:var(--ecnew)}
.gbar.prog{background:var(--info)}
.gantt tr:not(.ec) .gbar.prog{background:var(--other-prog)}
.gbar.done{background:var(--good)}
.gbar.late{background:var(--crit)}
.gbar.sum{background:var(--sum-bar);opacity:1}
.gbar.ms{background:var(--ink)}
.today{border-left:1px dashed var(--crit)}
.lg-ec{color:var(--ec-ink);font-weight:600}

/* ---- team calendar: tinted card, project colour on the left edge ---- */
.tm-bar{background:color-mix(in srgb,var(--c,#9A9A9A) var(--tint),var(--surface))!important;color:var(--ink)!important;border-left:3px solid var(--c,#9A9A9A);border-radius:2px;font-weight:500}
.tm-bar.done{opacity:.6}
.tm-bar.task{border:1px dashed color-mix(in srgb,var(--c,#9A9A9A) 60%,var(--surface));border-left:3px solid var(--c,#9A9A9A)}
.tm-bar .tm-t{font-weight:600}
.tm-h.today,.tm-grid.today{background:var(--tm-today)!important}
.tm-h.today{color:var(--ec-ink)}

/* ---- reports: the header reads like the letterhead ---- */
.band{background:var(--surface)!important;color:var(--ink)!important;border-bottom:1px solid var(--rule-strong)!important}
.band h1{color:var(--ink)!important;font-size:26px!important;line-height:1.2!important}
.band .eyebrow{color:var(--ink3)!important}
.band-txt>div:not(.eyebrow){color:var(--ink2)!important}
.band-logo{content:url("brand/logo_black.svg");width:170px;height:auto}
.pdf-doc .band h1{font-size:17pt!important}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) body:not(.pdf-doc) .band-logo{content:url("brand/logo_white.svg")} }
:root[data-theme="dark"] body:not(.pdf-doc) .band-logo{content:url("brand/logo_white.svg")}
.rs-status.draft{background:var(--surface2);border-color:var(--line);border-radius:0}

/* ---- sign-in ---- */
.login{background:var(--login-bg) var(--login-img)}
.login .box{border:0;box-shadow:none;border-radius:2px;padding:44px 40px;background:var(--login-box)}
.login .logo{font-size:0;letter-spacing:0;color:var(--ink)}
.login .logo::before{width:200px;height:19.2px;margin-bottom:4px}
.login .logo small{color:var(--ink3);font-size:10.5px;letter-spacing:.06em;margin-top:10px}
.login .box::after{content:"Exceptional Living, By Design";display:block;margin-top:28px;padding-top:16px;border-top:1px solid var(--line);font-family:var(--font-serif);font-style:italic;color:var(--ink2);font-size:16px}

/* ---- progress bars and spinners ---- */
.bar b{background:var(--gold)}
.pdf-track i{background:var(--gold)} .spin{border-top-color:var(--gold)}

/* ---- platform home (/home): home.css loads after this file, so these rules carry a body prefix ---- */
body .h-top{background:var(--chrome);border-bottom:1px solid var(--chrome-line)}
body .h-logo b{font-size:0;letter-spacing:0;display:block;width:150px;height:14.4px;background:url("brand/logo_black.svg") no-repeat left center/contain}
:root[data-theme="dark"] body .h-logo b{background-image:url("brand/logo_white.svg")}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) body .h-logo b{background-image:url("brand/logo_white.svg")} }
body .h-logo small{font:400 10.5px var(--font-ui);letter-spacing:.06em;color:var(--ink3);margin-top:7px;text-transform:none}
body .h-who{color:var(--chrome-ink);font-weight:500}
body .h-av{background:var(--chrome-ink);color:var(--chrome);border-radius:0;font:500 13px var(--font-head)}
body .h-date{font:500 10.5px var(--font-ui);letter-spacing:.14em;color:var(--ink3)}
body .h-head h1{font:400 52px/1.05 var(--font-serif);letter-spacing:-.01em}
body .portal{border-radius:4px;border:1px solid var(--line);background:var(--surface);min-height:0;overflow:hidden}
body .portal:hover{transform:none;box-shadow:none;background:var(--surface2);border-color:var(--ink3)}
body .portal .bar{height:3px;background:var(--c)}
body .portal h2,body .portal h3{font-family:var(--font-serif);font-weight:400}
body .h-foot a{color:var(--ink)}
body .h-chips .v,body .portal .big,body .portal .two b{font-family:var(--font-serif);font-weight:400}
body .portal h2{font-weight:400}
body .h-ab h2{font-family:var(--font-serif);font-weight:400}

/* ---- elevation: menus and drawers float a little (dark mode needs it to read) ---- */
.menu,.drawer .panel,.ql-panel{box-shadow:var(--menu-shadow)}
.drawer .panel{background:var(--surface)}

/* ---- Product Console tabs and the Home avatar on the white top bar (products.css / home.css load after this file) ---- */
body .top .tabs button{color:var(--chrome-ink2);border-radius:0;font:500 14.5px var(--font-head);border-bottom:2px solid transparent;padding:8px 10px}
body .top .tabs button.on{background:transparent;color:var(--chrome-ink);border-bottom-color:var(--nav-on)}
body .top .who,body .top .who span{color:var(--chrome-ink2)}
body .top .home-a{color:var(--chrome-ink);border-color:var(--chrome-line2)}
body .h-me{color:var(--chrome-ink);font:500 14px var(--font-ui);border-radius:2px}
body .h-me:hover,body .h-me[aria-expanded=true]{background:var(--surface2)}
body .h-me .car{color:var(--ink3)}
body .h-menu{border-radius:2px;box-shadow:var(--menu-shadow)}
body .h-menu > a,body .h-menu > button{font:15px var(--font-ui);border-radius:2px}

/* ==== Platform shell (v1.0.91): row 1 = platform, row 2 = the portal's tabs ==== */
.ecs{position:sticky;top:env(safe-area-inset-top,0px);z-index:30;background:var(--chrome);color:var(--chrome-ink);border-bottom:1px solid var(--chrome-line)}
.ecs.stg{box-shadow:inset 0 3px 0 #6E56CF}
.ecs-r1{display:flex;align-items:center;gap:12px;min-height:58px;padding:0 20px;max-width:1440px;margin:0 auto;position:relative}
.ecs-logo{display:block;width:150px;height:14.4px;flex:none;background:url("brand/logo_black.svg") no-repeat left center/contain}
:root[data-theme="dark"] .ecs-logo{background-image:url("brand/logo_white.svg")}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .ecs-logo{background-image:url("brand/logo_white.svg")} }
.ecs-sw,.ecs-me-w,.ecs-ctx{position:relative}
.ecs-psw,.ecs-ctx>button{display:flex;align-items:center;gap:8px;border:1px solid var(--chrome-line2);background:transparent;color:var(--chrome-ink);padding:6px 10px;font:500 14px var(--font-ui);cursor:pointer;white-space:nowrap;border-radius:2px;max-width:340px}
.ecs-ctx>button span{overflow:hidden;text-overflow:ellipsis}
.ecs-ctx small{color:var(--ink3);font-size:11.5px;letter-spacing:.06em}
.ecs-car{color:var(--ink3);font-size:11px}
.ecs-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:none}
.ecs-sp{flex:1}
.ecs-env{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:#6E56CF;font-weight:500}
.ecs-me{display:flex;align-items:center;gap:8px;border:0;background:transparent;color:var(--chrome-ink);cursor:pointer;padding:4px;font:500 14px var(--font-ui)}
.ecs-me:hover,.ecs-me[aria-expanded="true"]{background:var(--surface2)}
.ecs-av{width:30px;height:30px;background:var(--chrome-ink);color:var(--chrome);display:grid;place-items:center;font-size:12px;font-weight:500;flex:none}
.ecs-menu{position:absolute;top:calc(100% + 6px);z-index:40;background:var(--surface);color:var(--ink);border:1px solid var(--line);box-shadow:var(--menu-shadow);min-width:280px;padding:6px;display:flex;flex-direction:column}
.ecs-menu[hidden]{display:none}
.ecs-pm{left:0} .ecs-am{right:0} .ecs-ctx .ecs-menu{left:0;max-height:70vh;overflow:auto;min-width:320px}
.ecs-mh{padding:10px 12px 12px;border-bottom:1px solid var(--line);margin-bottom:4px} .ecs-mh small{display:block;color:var(--ink3);font-size:12px}
.ecs-it{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;text-align:left;border:0;background:none;color:var(--ink);font:15px var(--font-ui);padding:9px 12px;cursor:pointer;text-decoration:none}
.ecs-it:hover{background:var(--surface2)} .ecs-it small{color:var(--ink3);font-size:12px} .ecs-it .l{display:flex;align-items:center;gap:10px}
.ecs-it.cur{background:var(--surface2)} .ecs-it.off{color:var(--ink3);cursor:default} .ecs-it.off:hover{background:none}
.ecs-h{padding:10px 12px 4px;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3);font-weight:500}
.ecs-sep{height:1px;background:var(--line);margin:4px 0}
.ecs-theme{display:flex;align-items:center;justify-content:space-between;padding:8px 12px}
.ecs-seg{display:inline-flex;border:1px solid var(--line)} .ecs-seg button{border:0;background:transparent;color:var(--ink2);font:13px var(--font-ui);padding:4px 10px;cursor:pointer}
.ecs-seg button.on{background:var(--accent-bg);color:var(--on-accent)}
.ecs-r2{border-top:1px solid var(--chrome-line)}
.ecs-tabs{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;max-width:1440px;margin:0 auto;padding:0 20px}
.ecs-tabs::-webkit-scrollbar{display:none}
.ecs-tabs button{background:none;border:0;border-bottom:2px solid transparent;color:var(--chrome-ink2);font:500 14.5px var(--font-head);padding:12px 10px 10px;cursor:pointer;white-space:nowrap}
.ecs-tabs button:hover{color:var(--chrome-ink)}
.ecs-tabs button.on{color:var(--chrome-ink);border-bottom-color:var(--nav-on)}
.ecs button:focus-visible,.ecs a:focus-visible{outline:2px solid var(--silver);outline-offset:2px}
.ecs button,.ecs a{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
@media (max-width:720px){
  .ecs-r1{padding:0 12px;gap:8px;min-height:54px}
  .ecs-logo{width:30px;height:30px;background:url("brand/favicon.svg") no-repeat center/contain}
  .ecs-nm,.ecs-env{display:none}
  .ecs-psw{padding:6px 8px;font-size:13.5px}
  .ecs-r1 .ecs-ctx{order:9;flex:1 1 100%;margin:0 0 8px}
  .ecs-r1{flex-wrap:wrap}
  .ecs-ctx>button{width:100%;max-width:none;justify-content:space-between}
  /* menus hang from the header row itself (absolute inside the sticky header) – a fixed menu with top:auto
     was placed at the button's page position, so after scrolling it opened off-screen (Kongpon 14 Oct, iPhone) */
  .ecs-sw,.ecs-me-w{position:static}
  .ecs-menu{position:absolute;left:8px!important;right:8px!important;top:calc(100% + 4px);min-width:0;max-height:calc(100vh - 140px);overflow:auto;-webkit-overflow-scrolling:touch}
  .ecs-tabs{padding:0 8px}
}
@media (max-width:720px){ :root[data-theme="dark"] .ecs-logo{filter:invert(1)} }
@media (max-width:720px) and (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .ecs-logo{filter:invert(1)} }
