/* Layout: light rail + 52px top bar + routed views. Autowhat teal on cool neutrals; Plex Sans / Condensed / Mono. */
:root{
  --wash:#f2f5f6; --paper:#ffffff; --bone:#f6f9f9; --bone-2:#e7eef0; --bone-3:#d9e4e7;
  --ink:#0f1c21; --ink-2:#3a4b51; --muted:#56686e; --faint:#8a9a9f;
  --teal:#0b8fa8; --teal-2:#0a788e; --accent-2:#09bbdf; --on-accent:#fff;
  --teal-soft:rgba(11,143,168,.10); --teal-wash:rgba(11,143,168,.055); --accent-line:rgba(11,143,168,.38);
  --line-grey:rgba(16,40,48,.11); --line-2:rgba(16,40,48,.07); --line-strong:rgba(16,40,48,.22);
  --deep:#10212a; --deep-ink:#e6f2f4;
  --good:#16884a; --good-soft:rgba(22,136,74,.12);
  --bad:#c23030; --bad-soft:rgba(194,48,48,.10);
  --warn:#9a6500; --warn-soft:rgba(250,178,25,.18);
  --violet:#5b4bc4; --violet-soft:rgba(91,75,196,.12);
  /* space states on the plan */
  --st-available:#16884a; --st-occupied:#0b8fa8; --st-notice:#d97706; --st-reserved:#5b4bc4; --st-maintenance:#c23030; --st-internal:#8a9a9f;
  --v3-top:#f6fafb; --v3-bottom:#dfe8eb; --glass-bg:rgba(255,255,255,.78);
  /* lease expiry, rent ramp, chart series */
  --exp-3:#c23030; --exp-6:#d97706; --exp-12:#58b4c6; --exp-24:#0a6377;
  --rent-lo:#cde7ec; --rent-hi:#075468; --rent-none:#d3dcdf;
  --c-first:#0b8fa8; --c-ground:#d97706; --c-virtual:#5b4bc4; --c-pipe:#5b4bc4; --c-neg:#c23030; --c-pos:#16884a; --c-grid:rgba(16,40,48,.07);
  --plan-bg:#fbfdfd; --plan-wall:#2a3a40; --plan-furn:#a7b6bb; --plan-fix:#c0ccd0; --plan-misc:#cfd8db;
  --shadow:0 1px 2px rgba(16,40,48,.06), 0 4px 14px rgba(16,40,48,.05);
  --shadow-lg:0 14px 44px -12px rgba(16,40,48,.32);
  --font:"IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --cond:"IBM Plex Sans Condensed", "IBM Plex Sans", system-ui, sans-serif;
  --mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --brand-ink:#0f1d2b; --brand-spark:#f5b301;
  --rail:224px; --top:52px; --r:6px;
  color-scheme:light;
}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){
  --wash:#0d1316; --paper:#141c20; --bone:#192328; --bone-2:#212e34; --bone-3:#2a3a41;
  --ink:#eef4f5; --ink-2:#bfcdd1; --muted:#9db0b5; --faint:#6d838a;
  --teal:#22b3d0; --teal-2:#45c9e4; --accent-2:#62d7ee; --on-accent:#05161b;
  --teal-soft:rgba(47,196,227,.13); --teal-wash:rgba(47,196,227,.07); --accent-line:rgba(47,196,227,.42);
  --line-grey:rgba(255,255,255,.09); --line-2:rgba(255,255,255,.055); --line-strong:rgba(255,255,255,.18);
  --deep:#091114; --deep-ink:#e6f2f4;
  --good:#4cc98a; --good-soft:rgba(76,201,138,.14); --bad:#ef6b6b; --bad-soft:rgba(239,107,107,.14);
  --warn:#f5c04a; --warn-soft:rgba(245,192,74,.14); --violet:#a99cf5; --violet-soft:rgba(169,156,245,.15);
  --st-available:#4cc98a; --st-occupied:#22b3d0; --st-notice:#f0a23b; --st-reserved:#a99cf5; --st-maintenance:#ef6b6b; --st-internal:#6d838a;
  --v3-top:#16222a; --v3-bottom:#0b1215; --glass-bg:rgba(20,28,32,.78);
  --exp-3:#ef6b6b; --exp-6:#f0a23b; --exp-12:#86d8e8; --exp-24:#2aa3be;
  --rent-lo:#21434c; --rent-hi:#7fe3f5; --rent-none:#2a3940;
  --c-first:#1aa5c2; --c-ground:#c97c14; --c-virtual:#8577e0; --c-pipe:#a99cf5; --c-neg:#ef6b6b; --c-pos:#4cc98a; --c-grid:rgba(255,255,255,.06);
  --plan-bg:#10181b; --plan-wall:#c9d6da; --plan-furn:#4f6268; --plan-fix:#3d4f55; --plan-misc:#33444a;
  --shadow:0 1px 2px rgba(0,0,0,.35), 0 4px 14px rgba(0,0,0,.25); --shadow-lg:0 14px 44px -12px rgba(0,0,0,.7);
  color-scheme:dark;
}}
:root[data-theme="dark"]{
  --wash:#0d1316; --paper:#141c20; --bone:#192328; --bone-2:#212e34; --bone-3:#2a3a41;
  --ink:#eef4f5; --ink-2:#bfcdd1; --muted:#9db0b5; --faint:#6d838a;
  --teal:#22b3d0; --teal-2:#45c9e4; --accent-2:#62d7ee; --on-accent:#05161b;
  --teal-soft:rgba(47,196,227,.13); --teal-wash:rgba(47,196,227,.07); --accent-line:rgba(47,196,227,.42);
  --line-grey:rgba(255,255,255,.09); --line-2:rgba(255,255,255,.055); --line-strong:rgba(255,255,255,.18);
  --deep:#091114; --deep-ink:#e6f2f4;
  --good:#4cc98a; --good-soft:rgba(76,201,138,.14); --bad:#ef6b6b; --bad-soft:rgba(239,107,107,.14);
  --warn:#f5c04a; --warn-soft:rgba(245,192,74,.14); --violet:#a99cf5; --violet-soft:rgba(169,156,245,.15);
  --st-available:#4cc98a; --st-occupied:#22b3d0; --st-notice:#f0a23b; --st-reserved:#a99cf5; --st-maintenance:#ef6b6b; --st-internal:#6d838a;
  --v3-top:#16222a; --v3-bottom:#0b1215; --glass-bg:rgba(20,28,32,.78);
  --exp-3:#ef6b6b; --exp-6:#f0a23b; --exp-12:#86d8e8; --exp-24:#2aa3be;
  --rent-lo:#21434c; --rent-hi:#7fe3f5; --rent-none:#2a3940;
  --c-first:#1aa5c2; --c-ground:#c97c14; --c-virtual:#8577e0; --c-pipe:#a99cf5; --c-neg:#ef6b6b; --c-pos:#4cc98a; --c-grid:rgba(255,255,255,.06);
  --plan-bg:#10181b; --plan-wall:#c9d6da; --plan-furn:#4f6268; --plan-fix:#3d4f55; --plan-misc:#33444a;
  --shadow:0 1px 2px rgba(0,0,0,.35), 0 4px 14px rgba(0,0,0,.25); --shadow-lg:0 14px 44px -12px rgba(0,0,0,.7);
  color-scheme:dark;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--wash);color:var(--ink);font-family:var(--font);font-size:13px;line-height:1.45;-webkit-font-smoothing:antialiased}
h1,h2,h3,h4{margin:0;font-family:var(--cond);font-weight:600;text-wrap:balance}
p{margin:0}
a{color:var(--teal)}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--teal);outline-offset:2px}
[hidden]{display:none!important}
.mono{font-family:var(--mono)}
.muted{color:var(--muted)}.faint{color:var(--faint)}.small{font-size:.82rem}
.tnum{font-variant-numeric:tabular-nums}
.eyebrow{font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:600}

/* ---------- shell ---------- */
.app{display:grid;grid-template-columns:var(--rail) minmax(0,1fr);grid-template-rows:var(--top) minmax(0,1fr);height:100%}
.rail{grid-row:1/3;background:var(--paper);border-right:1px solid var(--line-grey);display:flex;flex-direction:column;min-height:0}
.brand{display:flex;align-items:center;gap:10px;padding:0 14px;height:var(--top);border-bottom:1px solid var(--line-grey)}
.brand .mark{width:28px;height:28px;border-radius:7px;background:var(--teal);color:var(--on-accent);display:grid;place-items:center}
.brand .mark svg{width:16px;height:16px}
.brand .w{font-family:var(--cond);font-weight:600;font-size:1.05rem;line-height:1.1}
.brand .p{font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:600}
.nav{flex:1;overflow:auto;padding-bottom:10px}
.navgroup{padding:12px 10px 2px}
.navgroup .eyebrow{padding:0 8px 6px;font-size:.64rem;color:var(--faint)}
.nav a{display:flex;align-items:center;gap:10px;padding:7px 9px;margin:1px 0;color:var(--ink-2);text-decoration:none;font-size:.88rem;font-weight:500;border-radius:var(--r)}
.nav a:hover{background:var(--bone);color:var(--ink)}
.nav a.on{background:var(--teal-soft);color:var(--teal);font-weight:600}
.nav a svg{width:16px;height:16px;flex-shrink:0}
.nav a .c{margin-left:auto;font-family:var(--mono);font-size:.66rem;font-weight:600;color:var(--muted);background:var(--bone-2);padding:1px 7px;border-radius:999px}
.nav a .c:empty{display:none}
.nav a .c.warn{background:var(--warn-soft);color:var(--warn)}
.railfoot{padding:12px 14px;border-top:1px solid var(--line-grey);display:grid;gap:6px}
.meta-off{display:flex;align-items:center;gap:8px;font-size:.76rem;color:var(--muted)}
.meta-off i{width:7px;height:7px;border-radius:50%;background:var(--faint)}
.topbar{grid-column:2;display:flex;align-items:center;gap:8px;padding:0 18px;background:var(--paper);border-bottom:1px solid var(--line-grey);min-width:0}
.topbar .tt{display:flex;align-items:baseline;gap:10px;min-width:0}
.topbar h1{font-size:1.05rem;white-space:nowrap}
.topbar .ctx{font-size:.8rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sp{flex:1}
main{grid-column:2;overflow:auto;padding:18px 22px 32px;min-width:0;min-height:0;outline:none}
.pagehead{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.pagehead h1{font-size:1.5rem}
.pagehead p{color:var(--muted);max-width:80ch;margin-top:3px;font-size:.88rem}
.pagehead .acts{display:flex;gap:8px;flex-wrap:wrap}

/* ---------- controls ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:30px;padding:0 12px;border:1px solid var(--teal);border-radius:var(--r);background:var(--teal);color:var(--on-accent);font-size:.82rem;font-weight:600;cursor:pointer;white-space:nowrap;text-decoration:none}
.btn:hover{background:var(--teal-2);border-color:var(--teal-2)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn svg{width:14px;height:14px}
.btn.quiet{background:var(--paper);border-color:var(--line-grey);color:var(--ink)}
.btn.quiet:hover{background:var(--bone)}
.btn.ghost{background:transparent;border-color:var(--accent-line);color:var(--teal)}
.btn.ghost:hover{background:var(--teal-soft)}
.btn.danger{background:var(--paper);border-color:rgba(194,48,48,.4);color:var(--bad)}
.btn.danger:hover{background:var(--bad-soft)}
.btn.sm{height:26px;padding:0 9px;font-size:.76rem}
.btn.on{background:var(--teal-soft);color:var(--teal);border-color:var(--accent-line)}
.iconbtn{width:32px;height:32px;display:grid;place-items:center;border:1px solid var(--line-grey);border-radius:var(--r);background:var(--paper);color:var(--ink-2);cursor:pointer;flex-shrink:0}
.iconbtn:hover{background:var(--bone)}
.iconbtn svg{width:16px;height:16px}
.menu-btn{display:none}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{display:inline-flex;align-items:center;gap:6px;height:26px;font-size:.78rem;font-weight:500;padding:0 10px;border:1px solid var(--line-grey);border-radius:999px;background:var(--paper);color:var(--ink-2);cursor:pointer;white-space:nowrap}
.chip:hover{border-color:var(--accent-line)}
.chip.on{background:var(--teal-soft);color:var(--teal);border-color:var(--accent-line);font-weight:600}
.chip.off{opacity:.45}
.chip i{width:9px;height:9px;border-radius:2px;display:inline-block}
.chip .n{font-family:var(--mono);font-size:.68rem;color:var(--muted)}
.seg{display:inline-flex;border:1px solid var(--line-grey);border-radius:var(--r);background:var(--paper);overflow:hidden}
.seg button{border:0;background:none;padding:0 12px;height:30px;font-size:.82rem;font-weight:500;color:var(--muted);cursor:pointer;border-right:1px solid var(--line-grey);display:flex;align-items:center;gap:8px}
.seg button:last-child{border-right:0}
.seg button.on{background:var(--teal-soft);color:var(--teal);font-weight:600}
.input,.select,textarea.input{height:32px;padding:0 10px;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--paper);color:var(--ink);font-size:.86rem;min-width:0}
textarea.input{height:auto;padding:8px 10px;resize:vertical;min-height:70px}
.input:focus,.select:focus{outline:2px solid var(--accent-line);border-color:var(--teal)}
.searchbox{display:flex;align-items:center;gap:7px;height:32px;padding:0 10px;border:1px solid var(--line-grey);border-radius:var(--r);background:var(--bone);color:var(--faint);min-width:220px}
.searchbox input{border:0;background:transparent;outline:none;flex:1;min-width:0;color:var(--ink);font-size:.86rem}
.searchbox svg{width:14px;height:14px}
.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}

/* ---------- pills ---------- */
.pill{display:inline-flex;align-items:center;gap:5px;font-size:.72rem;font-weight:600;padding:2px 8px;border-radius:999px;white-space:nowrap;line-height:1.45;background:var(--bone-2);color:var(--muted)}
.pill::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.pill.available,.pill.active{background:var(--good-soft);color:var(--good)}
.pill.occupied{background:var(--teal-soft);color:var(--teal)}
.pill.partial{background:var(--teal-wash);color:var(--teal)}
.pill.notice{background:var(--warn-soft);color:var(--warn)}
.pill.reserved,.pill.upcoming,.pill.draft{background:var(--violet-soft);color:var(--violet)}
.pill.maintenance,.pill.terminated{background:var(--bad-soft);color:var(--bad)}
.pill.expired,.pill.internal,.pill.former{background:var(--bone-2);color:var(--muted)}
.pill.prospect{background:var(--violet-soft);color:var(--violet)}
.tag{display:inline-block;font-family:var(--mono);font-size:.66rem;padding:1px 6px;border:1px solid var(--line-grey);border-radius:4px;color:var(--muted);background:var(--paper);white-space:nowrap}

/* ---------- cards, kpis, tables ---------- */
.panel{background:var(--paper);border:1px solid var(--line-grey);border-radius:var(--r);box-shadow:var(--shadow);min-width:0}
.panel .ph{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line-2);min-height:44px;flex-wrap:wrap}
.panel .ph h3{font-size:.95rem;display:inline-flex;align-items:center}
.panel .ph h3::before{content:"";width:3px;height:14px;border-radius:2px;background:var(--teal);margin-right:9px}
.panel .pb{padding:12px 14px}
.kpis{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px;margin-bottom:14px}
.kpi{background:var(--paper);border:1px solid var(--line-grey);border-radius:var(--r);box-shadow:var(--shadow);padding:10px 13px;display:grid;gap:2px;min-width:0}
.kpi .l{font-size:.66rem;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);font-weight:600}
.kpi .n{font-family:var(--cond);font-size:1.5rem;font-weight:600;line-height:1.15;font-variant-numeric:tabular-nums}
.kpi .n small{font-size:.8rem;color:var(--muted);font-weight:500;font-family:var(--font)}
.kpi .d{font-size:.74rem;color:var(--muted)}
.kpi .bar{height:5px;border-radius:3px;background:var(--bone-2);overflow:hidden;margin-top:4px}
.kpi .bar i{display:block;height:100%;background:var(--teal);border-radius:3px}
.kpi.accent{box-shadow:inset 3px 0 0 var(--teal),var(--shadow)}
.kpi.good{box-shadow:inset 3px 0 0 var(--good),var(--shadow)}
.kpi.warn{box-shadow:inset 3px 0 0 #eda100,var(--shadow)}
.tablewrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:.84rem}
th{font-size:.66rem;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);font-weight:600;text-align:left;padding:8px 12px;border-bottom:1px solid var(--line-grey);background:var(--bone);white-space:nowrap;position:sticky;top:0}
td{padding:9px 12px;border-bottom:1px solid var(--line-2);vertical-align:middle;white-space:nowrap}
tbody tr{cursor:pointer}
tbody tr:hover td{background:var(--bone)}
tr:last-child td{border-bottom:0}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
td .sub{font-size:.76rem;color:var(--muted)}
.empty{padding:36px 16px;text-align:center;color:var(--muted);display:grid;gap:10px;justify-items:center}
.empty b{color:var(--ink);font-size:.95rem}

/* ---------- twin ---------- */
.twin-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.floortab{display:flex;align-items:center;gap:8px}
.floortab .mini{width:46px;height:5px;border-radius:3px;background:var(--bone-2);overflow:hidden}
.floortab .mini i{display:block;height:100%;background:var(--teal)}
.twin-body{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:14px;align-items:start}
.plan-card{display:flex;flex-direction:column;overflow:hidden}
.plan-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:9px 12px;border-bottom:1px solid var(--line-2)}
.plan-stage{position:relative;height:520px;min-height:340px;background:var(--plan-bg);overflow:hidden;touch-action:none;cursor:grab}
.plan-stage.panning{cursor:grabbing}
.plan-stage.editing{cursor:crosshair}
.plan-stage svg{position:absolute;inset:0;width:100%;height:100%;display:block;user-select:none}
.plan-bg polyline{vector-effect:non-scaling-stroke;fill:none}
.plan-bg .plan-wall{stroke:var(--plan-wall)!important}
.plan-bg .plan-wall polyline{stroke-width:1.25px}
.plan-bg .plan-furn{stroke:var(--plan-furn)!important}
.plan-bg .plan-furn polyline{stroke-width:.7px}
.plan-bg .plan-fix{stroke:var(--plan-fix)!important}
.plan-bg .plan-fix polyline{stroke-width:.6px}
.plan-bg .plan-misc{stroke:var(--plan-misc)!important}
.plan-bg .plan-misc polyline{stroke-width:.6px}
.sp-g{cursor:pointer}
.sp-g rect.body{vector-effect:non-scaling-stroke;stroke-width:1.2px;fill-opacity:.2;transition:fill-opacity .12s}
.sp-g:hover rect.body{fill-opacity:.34}
.sp-g.st-available rect.body{fill:var(--st-available);stroke:var(--st-available)}
.sp-g.st-occupied rect.body{fill:var(--st-occupied);stroke:var(--st-occupied);fill-opacity:.34}
.sp-g.st-occupied:hover rect.body{fill-opacity:.48}
.sp-g.st-partial rect.body{fill:var(--st-occupied);stroke:var(--st-occupied);stroke-dasharray:5 3;fill-opacity:.16}
.sp-g.st-notice rect.body{fill:var(--st-notice);stroke:var(--st-notice);fill-opacity:.3}
.sp-g.st-reserved rect.body{fill:var(--st-reserved);stroke:var(--st-reserved);fill-opacity:.24}
.sp-g.st-maintenance rect.body{fill:url(#hatch);stroke:var(--st-maintenance);fill-opacity:1}
.sp-g.st-internal rect.body{fill:var(--st-internal);stroke:var(--st-internal);fill-opacity:.08;stroke-dasharray:2 3}
.sp-g.dim{opacity:.16}
.sp-g.sel rect.body{stroke:var(--ink);stroke-width:2.6px;fill-opacity:.45}
.sp-g text{pointer-events:none;font-family:var(--font);fill:var(--ink);paint-order:stroke;stroke:var(--plan-bg);stroke-width:3px;stroke-linejoin:round}
.sp-g text.code{font-weight:700}
.sp-g text.who{font-weight:500;fill:var(--ink-2)}
.sp-g circle.flag{fill:var(--st-notice);stroke:var(--plan-bg);stroke-width:1.5px;vector-effect:non-scaling-stroke}
.handle{fill:var(--paper);stroke:var(--teal);stroke-width:1.5px;vector-effect:non-scaling-stroke;cursor:nwse-resize}
.handle.ne,.handle.sw{cursor:nesw-resize}
.draft-rect{fill:var(--teal);fill-opacity:.16;stroke:var(--teal);stroke-width:1.5px;stroke-dasharray:6 4;vector-effect:non-scaling-stroke}
.plan-hint{position:absolute;left:12px;bottom:12px;background:var(--paper);border:1px solid var(--line-grey);border-radius:var(--r);padding:6px 10px;font-size:.76rem;color:var(--muted);box-shadow:var(--shadow);max-width:calc(100% - 24px)}
.plan-hint b{color:var(--ink)}
.plan-dims{position:absolute;right:12px;bottom:12px;background:var(--deep);color:var(--deep-ink);border-radius:var(--r);padding:5px 9px;font-family:var(--mono);font-size:.72rem}
.plan-zoom{position:absolute;right:12px;top:12px;display:grid;gap:4px}
.plan-legend{display:flex;gap:6px;flex-wrap:wrap}
.side{display:grid;gap:12px;align-content:start;max-height:calc(100vh - var(--top) - 150px);overflow:auto;padding-bottom:4px}
.side .head{display:grid;gap:6px}
.side .head .row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.side .head h2{font-size:1.3rem}
.facts{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px}
.facts .k{font-size:.66rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:600}
.facts .v{font-weight:500;font-size:.88rem;overflow-wrap:anywhere}
.ccard{border:1px solid var(--line-grey);border-radius:var(--r);padding:10px 12px;display:grid;gap:6px;background:var(--bone);cursor:pointer}
.ccard:hover{border-color:var(--accent-line)}
.ccard .t{display:flex;justify-content:space-between;gap:8px;align-items:center;font-weight:600}
.ccard .m{font-size:.78rem;color:var(--muted);display:flex;gap:10px;flex-wrap:wrap}
.term{height:6px;border-radius:3px;background:var(--bone-3);position:relative;overflow:hidden}
.term i{position:absolute;inset:0 auto 0 0;background:var(--teal);border-radius:3px}
.term.warn i{background:#eda100}
.list .it{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line-2);cursor:pointer}
.list .it:last-child{border-bottom:0}
.list .it:hover .nm{color:var(--teal)}
.list .nm{font-weight:600;font-size:.86rem}
.list .s{font-size:.76rem;color:var(--muted)}
.statebars{display:grid;gap:7px}
.statebars .r{display:grid;grid-template-columns:110px 1fr 36px;gap:8px;align-items:center;font-size:.82rem;cursor:pointer}
.statebars .tr{height:10px;border-radius:3px;background:var(--bone-2);overflow:hidden}
.statebars .tr i{display:block;height:100%}
.statebars .n{text-align:right;font-family:var(--mono);font-size:.74rem}

/* ---------- modal & drawer ---------- */
.scrim{position:fixed;inset:0;background:rgba(9,17,20,.38);z-index:60;opacity:0;pointer-events:none;transition:opacity .18s}
.scrim.on{opacity:1;pointer-events:auto}
.modal{position:fixed;left:50%;top:6vh;transform:translateX(-50%);width:min(720px,calc(100% - 32px));max-height:88vh;background:var(--paper);border-radius:10px;box-shadow:var(--shadow-lg);z-index:70;display:flex;flex-direction:column;border:1px solid var(--line-grey)}
.modal.wide{width:min(960px,calc(100% - 32px))}
.modal.narrow{width:min(440px,calc(100% - 32px))}
.modal .mh,.drawer .mh{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line-grey)}
.modal .mh h2,.drawer .mh h2{font-size:1.15rem}
.modal .mh .x,.drawer .mh .x{margin-left:auto}
.modal .mb{padding:16px 18px;overflow:auto}
.modal .mf,.drawer .mf{display:flex;gap:8px;justify-content:flex-end;align-items:center;padding:12px 18px;border-top:1px solid var(--line-grey);flex-wrap:wrap}
.modal .mf .left{margin-right:auto}
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(600px,100%);background:var(--paper);z-index:65;display:flex;flex-direction:column;border-left:1px solid var(--line-grey);box-shadow:var(--shadow-lg);transform:translateX(102%);transition:transform .26s cubic-bezier(.16,1,.3,1)}
.drawer.on{transform:none}
.drawer .db{overflow:auto;flex:1}
.dsec{padding:14px 18px;border-bottom:1px solid var(--line-2);display:grid;gap:10px}
.dsec h4{font-family:var(--font);font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}

/* ---------- forms ---------- */
.form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}
.form .f{display:grid;gap:5px;min-width:0}
.form .f.span2{grid-column:1/-1}
.form .f label{font-size:.74rem;font-weight:600;color:var(--ink-2)}
.form .f label .req{color:var(--bad)}
.form .f .help{font-size:.72rem;color:var(--muted)}
.form .f .err{font-size:.74rem;color:var(--bad);font-weight:500}
.form .f.bad .input,.form .f.bad .select{border-color:var(--bad)}
.form .sect{grid-column:1/-1;font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:700;padding-top:6px;border-top:1px solid var(--line-2)}
.form .sect:first-child{border-top:0;padding-top:0}
.geo{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.geo span{font-size:.68rem;color:var(--muted)}
.quick{display:flex;gap:6px;flex-wrap:wrap}
.picker{border:1px solid var(--line-strong);border-radius:var(--r);max-height:260px;overflow:auto;background:var(--paper)}
.picker .ph2{position:sticky;top:0;background:var(--bone);padding:5px 10px;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:700;border-bottom:1px solid var(--line-2)}
.picker label.opt{display:grid;grid-template-columns:18px 70px 1fr auto auto;gap:8px;align-items:center;padding:6px 10px;border-bottom:1px solid var(--line-2);font-size:.82rem;cursor:pointer}
.picker label.opt:hover{background:var(--bone)}
.picker label.opt.taken{opacity:.6}
.picker input{accent-color:var(--teal)}
.formerr{grid-column:1/-1;background:var(--bad-soft);color:var(--bad);border-radius:var(--r);padding:8px 12px;font-size:.84rem;font-weight:500}
.dropzone{border:1.5px dashed var(--line-strong);border-radius:var(--r);padding:16px;text-align:center;color:var(--muted);font-size:.84rem;cursor:pointer;background:var(--bone)}
.dropzone.over{border-color:var(--teal);background:var(--teal-wash);color:var(--teal)}
.dropzone b{color:var(--ink)}
.files .fi{display:grid;grid-template-columns:28px 1fr auto;gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line-2)}
.files .fi:last-child{border-bottom:0}
.files .ic{width:28px;height:28px;border-radius:5px;background:var(--bad-soft);color:var(--bad);display:grid;place-items:center;font-family:var(--mono);font-size:.56rem;font-weight:700}
.files .ic.img{background:var(--teal-soft);color:var(--teal)}
.files .ic.doc{background:var(--violet-soft);color:var(--violet)}
.files .nm{font-weight:600;font-size:.84rem;overflow-wrap:anywhere}
.files .s{font-size:.74rem;color:var(--muted)}
.files .acts{display:flex;gap:4px}
.money{display:grid;grid-template-columns:1fr auto;gap:4px 12px;font-size:.86rem}
.money .k{color:var(--muted)}
.money .v{text-align:right;font-variant-numeric:tabular-nums;font-weight:500}
.money .tot{font-weight:700;border-top:1px solid var(--line-grey);padding-top:4px}
.timeline{position:relative;height:30px}
.timeline .bar{position:absolute;left:0;right:0;top:12px;height:6px;border-radius:3px;background:var(--bone-3)}
.timeline .fill{position:absolute;left:0;top:12px;height:6px;border-radius:3px;background:var(--teal)}
.timeline .now{position:absolute;top:6px;width:2px;height:18px;background:var(--ink)}
.timeline .lab{position:absolute;top:22px;font-size:.7rem;color:var(--muted);font-family:var(--mono)}

/* ---------- feedback ---------- */
.toasts{position:fixed;right:18px;bottom:18px;display:grid;gap:8px;z-index:90}
.toast{background:var(--deep);color:var(--deep-ink);padding:10px 14px;border-radius:var(--r);box-shadow:var(--shadow-lg);font-size:.84rem;display:flex;gap:10px;align-items:center;max-width:420px;animation:tin .2s ease}
.toast i{width:8px;height:8px;border-radius:50%;background:var(--accent-2);flex-shrink:0}
.toast.bad i{background:#ef6b6b}
@keyframes tin{from{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}
.tip{position:fixed;z-index:95;pointer-events:none;background:var(--deep);color:var(--deep-ink);padding:8px 10px;font-size:.78rem;line-height:1.45;border-radius:var(--r);box-shadow:var(--shadow-lg);opacity:0;transition:opacity .1s;max-width:280px}
.tip.on{opacity:1}
.tip .th{font-weight:700;margin-bottom:2px}
.tip .tr{display:flex;justify-content:space-between;gap:14px;color:#b7cbd0}
.tip .tr b{color:var(--deep-ink);font-weight:600}
.feed .it{display:grid;grid-template-columns:10px 1fr auto;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line-2);align-items:start}
.feed .it:last-child{border-bottom:0}
.feed .it > i{width:8px;height:8px;border-radius:50%;margin-top:6px;background:var(--teal)}
.feed .it > i.delete{background:var(--bad)}.feed .it > i.upload{background:var(--violet)}.feed .it > i.layout{background:#eda100}.feed .it > i.create{background:var(--good)}
.feed .t{font-size:.72rem;color:var(--faint);white-space:nowrap}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.setrow{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;padding:11px 0;border-bottom:1px solid var(--line-2)}
.setrow:last-child{border-bottom:0}
.setrow .s{font-size:.78rem;color:var(--muted)}
.switch{width:36px;height:20px;border-radius:10px;background:var(--bone-3);position:relative;border:0;cursor:pointer}
.switch::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25);transition:.15s}
.switch.on{background:var(--teal)}
.switch.on::after{left:18px}
.switch:disabled{opacity:.55;cursor:not-allowed}


/* ---------- 3D model ---------- */
.twin-focus .kpis{display:none}
.twin-focus .stage3d{height:clamp(520px,calc(100vh - 200px),980px)}
.twin-focus .plan-stage{min-height:520px}
.v3-zoom .iconbtn svg{width:15px;height:15px}
.viewseg button{gap:6px}
.viewseg svg{width:15px;height:15px}
.stage3d{position:relative;height:clamp(460px,calc(100vh - 300px),780px);overflow:hidden;border-top:1px solid var(--line-2);
  background:radial-gradient(120% 90% at 50% 0%, var(--v3-top) 0%, var(--v3-bottom) 70%);cursor:grab;touch-action:none}
.stage3d.grabbing{cursor:grabbing}
.stage3d.pointing{cursor:pointer}
.stage3d canvas.gl{position:absolute;inset:0;display:block;outline:none}
.stage3d .labels{position:absolute;inset:0;pointer-events:none;z-index:1}
.v3-bar{position:absolute;left:12px;top:12px;z-index:3;display:flex;align-items:center;gap:6px;flex-wrap:wrap;max-width:calc(100% - 80px)}
.v3-group{display:inline-flex;background:var(--glass-bg);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid var(--line-grey);border-radius:8px;padding:2px;box-shadow:var(--shadow)}
.v3-group button{border:0;background:none;height:28px;padding:0 11px;border-radius:6px;font-size:.8rem;font-weight:600;color:var(--ink-2);cursor:pointer}
.v3-group button:hover{background:var(--teal-soft);color:var(--teal)}
.v3-sep{width:2px}
.v3-toggle{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 11px;border-radius:8px;border:1px solid var(--line-grey);background:var(--glass-bg);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-size:.8rem;font-weight:600;color:var(--ink-2);cursor:pointer;box-shadow:var(--shadow)}
.v3-toggle svg{width:15px;height:15px}
.v3-toggle[aria-pressed="true"]{background:var(--teal);color:var(--on-accent);border-color:var(--teal)}
.v3-toggle:disabled{opacity:.4;cursor:not-allowed}
.v3-zoom{position:absolute;right:12px;top:12px;z-index:3;display:grid;gap:4px}
.v3-zoom .iconbtn{background:var(--glass-bg);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.v3-hint{position:absolute;left:12px;bottom:12px;z-index:3;font-size:.74rem;color:var(--muted);background:var(--glass-bg);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid var(--line-grey);border-radius:8px;padding:5px 10px;max-width:calc(100% - 24px)}
.v3-hint b{color:var(--ink);font-weight:600}
.v3-loading{position:absolute;inset:0;z-index:4;display:grid;place-content:center;justify-items:center;gap:12px;color:var(--muted);font-size:.86rem;background:var(--v3-bottom)}
.spin{width:28px;height:28px;border-radius:50%;border:3px solid var(--teal-soft);border-top-color:var(--teal);animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.lbl3d{display:inline-flex;align-items:center;gap:5px;padding:3px 8px 3px 6px;border-radius:999px;background:var(--glass-bg);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--line-grey);
  font:600 11px/1.2 var(--font);color:var(--ink);white-space:nowrap;box-shadow:0 2px 8px rgba(16,40,48,.12);transform:translateY(-4px);transition:opacity .2s}
.lbl3d i{width:7px;height:7px;border-radius:50%;background:var(--st-internal);flex-shrink:0}
.lbl3d span{font-weight:500;color:var(--muted)}
.lbl3d.st-available i{background:var(--st-available)}.lbl3d.st-occupied i,.lbl3d.st-partial i{background:var(--st-occupied)}.lbl3d.st-notice i{background:var(--st-notice)}.lbl3d.st-reserved i{background:var(--st-reserved)}.lbl3d.st-maintenance i{background:var(--st-maintenance)}
.lbl3d.sel{background:var(--ink);color:var(--paper);border-color:var(--ink);font-size:12px;padding:5px 11px 5px 8px}
.lbl3d.sel span{color:var(--bone-3)}
@media (prefers-reduced-motion:reduce){.spin{animation:none}}
@media (max-width:820px){.v3-hint{display:none}.stage3d{height:62vh}}


/* ---------- twin: stacked 3D + plan ---------- */
.filterbar{display:grid;gap:8px;padding:10px 12px;margin-bottom:14px}
.fb-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.chip.ghost{border-style:dashed;color:var(--teal)}
.twin-main{display:grid;gap:14px;min-width:0}
.viewcard{overflow:hidden;display:flex;flex-direction:column}
.vc-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 14px;min-height:50px}
.vc-title{display:grid;gap:1px}
.vc-title h3{font-size:1rem;display:inline-flex;align-items:center}
.vc-title h3::before{content:"";width:3px;height:15px;border-radius:2px;background:var(--teal);margin-right:9px}
.seg .mini{width:34px;height:4px;border-radius:2px;background:var(--bone-3);overflow:hidden;display:inline-block}
.seg .mini i{display:block;height:100%;background:var(--teal)}
.ico{display:inline-grid;place-items:center}
.ico svg{width:15px;height:15px}
.btn.sm .ico svg{width:13px;height:13px}
.legend-row{display:flex;align-items:center;gap:6px 14px;flex-wrap:wrap;padding:9px 14px;border-top:1px solid var(--line-2);font-size:.78rem;color:var(--ink-2);background:var(--bone)}
.legend-row .lg-t{font-size:.64rem;letter-spacing:.08em;text-transform:uppercase;font-weight:700;color:var(--muted);margin-right:2px}
.legend-row .lg{display:inline-flex;align-items:center;gap:6px}
.legend-row .lg i{width:10px;height:10px;border-radius:3px;display:inline-block}
.legend-row .lg b{font-family:var(--mono);font-size:.7rem;color:var(--muted);font-weight:500}
.legend-row .lg-ramp{width:120px;height:10px;border-radius:3px;background:linear-gradient(90deg,var(--rent-lo),var(--rent-hi))}
.twin-body .side{position:sticky;top:0;max-height:calc(100vh - var(--top) - 36px)}
.sp-g.hov rect.body{fill-opacity:.55!important;stroke-width:2px}
.ring-row{display:grid;grid-template-columns:72px 1fr;gap:12px;align-items:center}
.ring-row .big{font-family:var(--cond);font-size:1.45rem;font-weight:600;line-height:1.1}
.ring{width:72px;height:72px}
.ring-bg{fill:none;stroke:var(--bone-2);stroke-width:7}
.ring-fg{fill:none;stroke:var(--teal);stroke-width:7;stroke-linecap:round;transition:stroke-dasharray .5s}
.ring-t{font:700 13px var(--font);fill:var(--ink)}
.stage3d{border-top:1px solid var(--line-2);height:clamp(440px,calc(100vh - 330px),720px)}
.lbl3d.hov{border-color:var(--teal);box-shadow:0 0 0 2px var(--teal-soft),0 2px 8px rgba(16,40,48,.12)}
@media (max-width:820px){.filterbar .searchbox{flex:1 1 100%}.colorseg button{padding:0 8px;font-size:.76rem}.vc-head .seg{max-width:100%;overflow-x:auto}}

/* ---------- twin: stacked floor plans + polish ---------- */
@media (min-width:1201px){.filterbar{position:sticky;top:-18px;z-index:20;background:color-mix(in srgb,var(--paper) 88%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}}
.fb-lbl{font-size:.64rem;letter-spacing:.08em;text-transform:uppercase;font-weight:700;color:var(--muted)}
.plans{display:grid}
.floorplan{border-top:1px solid var(--line-2)}
.fl-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 14px;background:linear-gradient(180deg,var(--bone),transparent)}
.fl-badge{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;background:var(--deep);color:var(--deep-ink);font:700 .9rem var(--cond);flex-shrink:0;box-shadow:inset 0 -2px 0 var(--teal)}
.fl-name{display:grid;line-height:1.25;min-width:0}
.fl-name b{font-family:var(--cond);font-size:1rem;font-weight:600}
.fl-name span{font-size:.76rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fl-stats{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.fl-stats .fs{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 10px;border:1px solid var(--line-grey);border-radius:999px;background:var(--paper);font-size:.76rem;color:var(--muted);white-space:nowrap}
.fl-stats .fs b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.fl-stats .fs.occ{border-color:var(--accent-line);background:var(--teal-wash)}
.fl-stats .mini{width:38px;height:5px;border-radius:3px;background:var(--bone-3);overflow:hidden;display:inline-block}
.fl-stats .mini i{display:block;height:100%;background:var(--teal);border-radius:3px}
.floorplan .plan-stage{border-top:1px solid var(--line-2);min-height:0;background:var(--plan-bg) radial-gradient(circle,var(--line-grey) 1px,transparent 1.2px) 0 0/22px 22px}
.plans.editing .plan-stage{cursor:crosshair;box-shadow:inset 0 0 0 2px var(--accent-line)}
.edit-banner{display:flex;align-items:center;gap:8px;padding:8px 14px;background:var(--teal-soft);color:var(--ink-2);font-size:.8rem;border-top:1px solid var(--accent-line)}
.edit-banner[hidden]{display:none}
.edit-banner b{color:var(--teal)}
.edit-banner .ico{color:var(--teal)}
.scalebar .sb-a{fill:var(--ink)}
.scalebar .sb-b{fill:var(--paper);stroke:var(--ink);stroke-width:1px;vector-effect:non-scaling-stroke}
.scalebar .sb-t{font:600 15px var(--mono);fill:var(--muted)}
.sel-card{border-color:var(--accent-line);box-shadow:inset 0 3px 0 var(--teal),var(--shadow)}
.sel-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
.kpi{position:relative;overflow:hidden}
.kpi::after{content:"";position:absolute;right:-30px;top:-30px;width:90px;height:90px;border-radius:50%;background:radial-gradient(circle,var(--teal-wash),transparent 70%);pointer-events:none}
.panel.viewcard{border-radius:10px}
.vc-head{background:linear-gradient(180deg,var(--paper),var(--bone))}
@media (max-width:1100px){.v3-toggle .tl{display:none}.v3-toggle{padding:0 9px}}
@media (max-width:820px){.fl-stats .fs{height:22px;padding:0 8px;font-size:.7rem}.fl-name span{white-space:normal}}

/* ---------- command palette ---------- */
.palbtn{display:flex;align-items:center;gap:8px;height:32px;padding:0 8px 0 10px;width:min(340px,34vw);border:1px solid var(--line-grey);border-radius:8px;background:var(--bone);color:var(--faint);font-size:.84rem;cursor:pointer;margin-right:4px}
.palbtn:hover{border-color:var(--accent-line);color:var(--muted)}
.palbtn svg{width:14px;height:14px;flex-shrink:0}
.palbtn span{flex:1;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
kbd{font-family:var(--mono);font-size:.66rem;border:1px solid var(--line-grey);border-bottom-width:2px;padding:0 5px;border-radius:4px;background:var(--paper);color:var(--muted);line-height:1.6}
.pal-wrap{position:fixed;inset:0;z-index:100;background:rgba(9,17,20,.32);backdrop-filter:blur(2px);display:flex;justify-content:center;align-items:flex-start;padding-top:12vh;opacity:0;transition:opacity .12s}
.pal-wrap.on{opacity:1}
.palette{width:min(640px,calc(100% - 32px));background:var(--paper);border:1px solid var(--line-grey);border-radius:12px;box-shadow:var(--shadow-lg);overflow:hidden;transform:translateY(-6px) scale(.985);transition:transform .14s}
.pal-wrap.on .palette{transform:none}
.pal-in{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line-2);color:var(--faint)}
.pal-in svg{width:18px;height:18px}
.pal-in input{flex:1;border:0;outline:none;background:transparent;font-size:1rem;color:var(--ink)}
.pal-list{max-height:min(420px,58vh);overflow:auto;padding:6px}
.pal-g{font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);font-weight:700;padding:10px 10px 4px}
.pal-it{display:grid;grid-template-columns:30px 1fr auto;gap:10px;align-items:center;padding:8px 10px;border-radius:8px;cursor:pointer}
.pal-it.on{background:var(--teal-soft)}
.pal-it .ic{width:30px;height:30px;border-radius:7px;background:var(--bone-2);color:var(--ink-2);display:grid;place-items:center}
.pal-it.on .ic{background:var(--teal);color:var(--on-accent)}
.pal-it .ic svg{width:15px;height:15px}
.pal-it .tx{display:grid;min-width:0}
.pal-it .tx b{font-weight:600;font-size:.88rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pal-it .tx span{font-size:.76rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pal-empty{padding:28px;text-align:center;color:var(--muted)}
.pal-foot{display:flex;gap:16px;padding:8px 14px;border-top:1px solid var(--line-2);font-size:.72rem;color:var(--faint);background:var(--bone)}
.pal-foot kbd{margin-right:2px}
/* ---------- motion & polish ---------- */
#main > div{animation:viewin .22s ease both}
@keyframes viewin{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.btn{transition:background .12s,border-color .12s,transform .06s}
.btn:active{transform:translateY(1px)}
.panel,.kpi{transition:box-shadow .15s,border-color .15s}
.kpi:hover{border-color:var(--accent-line)}
.ccard,.list .it,.chip,.seg button,.nav a{transition:background .12s,border-color .12s,color .12s}
@media (max-width:1100px){.palbtn span{display:none}.palbtn{width:auto}}
@media (prefers-reduced-motion:reduce){#main > div{animation:none}.pal-wrap,.palette{transition:none}}

@media (max-width:1200px){
  .kpis{grid-template-columns:repeat(3,minmax(0,1fr))}
  .twin-body{grid-template-columns:minmax(0,1fr)}
  .side{max-height:none}
}
@media (max-width:820px){
  .app{grid-template-columns:minmax(0,1fr)}
  .rail{position:fixed;inset:0 auto 0 0;width:var(--rail);z-index:80;transform:translateX(-100%);transition:transform .2s;box-shadow:var(--shadow-lg)}
  body.rail-open .rail{transform:none}
  .topbar,main{grid-column:1}
  .topbar{padding:0 12px}
  .topbar .ctx{display:none}
  .topbar .btn.quiet{display:none}
  .menu-btn{display:grid}
  main{padding:14px}
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .form{grid-template-columns:minmax(0,1fr)}
  .grid2{grid-template-columns:minmax(0,1fr)}
  .plan-stage{height:62vh}
  .searchbox{min-width:0;flex:1}
  .modal{top:3vh;max-height:94vh}
}
@media (prefers-reduced-motion:reduce){ .drawer,.scrim,.rail{transition:none} .toast{animation:none} }

/* ---------- 3D floor tags + furniture ---------- */
.stage3d .labels .lbl-floor{pointer-events:auto;cursor:pointer;display:inline-flex;align-items:center;gap:7px;padding:4px 10px 4px 4px;border-radius:8px;border:1px solid var(--line-grey);background:var(--glass-bg);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);font:600 12px/1.2 var(--font);color:var(--ink);box-shadow:var(--shadow);white-space:nowrap}
.stage3d .labels .lbl-floor b{width:22px;height:22px;border-radius:6px;display:grid;place-items:center;background:var(--deep);color:var(--deep-ink);font:700 12px var(--cond);box-shadow:inset 0 -2px 0 var(--teal)}
.stage3d .labels .lbl-floor:hover{border-color:var(--teal);color:var(--teal)}
.fl-chips{display:flex;gap:6px;flex-wrap:wrap}
.fl-chip{display:inline-flex;align-items:center;gap:7px;height:30px;padding:0 10px 0 4px;border:1px solid var(--line-grey);border-radius:8px;background:var(--paper);font-size:.8rem;font-weight:600;color:var(--ink-2)}
.fl-chip b{width:22px;height:22px;border-radius:6px;display:grid;place-items:center;background:var(--deep);color:var(--deep-ink);font:700 .75rem var(--cond)}
.fl-chip .mini{width:34px;height:4px;border-radius:2px;background:var(--bone-3);overflow:hidden;display:inline-block}
.fl-chip .mini i{display:block;height:100%;background:var(--teal)}
.fl-chip .pc{font-family:var(--mono);font-size:.7rem;color:var(--muted);font-weight:500}
.fl-chip{cursor:pointer}.fl-chip:hover{border-color:var(--accent-line);color:var(--teal)}

/* ---------- CEO dashboard ---------- */
.ceo-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:18px 20px;margin-bottom:14px;border-radius:12px;
  background:radial-gradient(120% 140% at 0% 0%,var(--teal-soft),transparent 55%),var(--paper)}
.ceo-hl{display:grid;gap:6px;max-width:820px}
.ceo-hl .eyebrow{font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;font-weight:700;color:var(--teal)}
.ceo-hl h2{font-family:var(--cond);font-size:1.55rem;font-weight:500;line-height:1.2}
.ceo-hl h2 b{font-weight:700;color:var(--ink)}
.ceo-hl p{font-size:.9rem}
.ceo-range{display:flex;align-items:center;gap:10px}
.ceo-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}
.ceo-kpi{position:relative;background:var(--paper);border:1px solid var(--line-grey);border-radius:10px;box-shadow:var(--shadow);padding:12px 14px 10px;display:grid;gap:2px;min-width:0;overflow:hidden}
.ceo-kpi .l{font-size:.66rem;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);font-weight:600}
.ceo-kpi .n{font-family:var(--cond);font-size:1.7rem;font-weight:600;line-height:1.1;font-variant-numeric:tabular-nums}
.ceo-kpi .n small{font-size:.85rem;color:var(--muted);font-weight:500;font-family:var(--font)}
.ceo-kpi .d{font-size:.74rem;color:var(--muted)}
.ceo-kpi .spark{position:absolute;right:10px;top:12px;width:110px;height:30px}
.spark .sp-line{fill:none;stroke:var(--teal);stroke-width:1.6}
.spark .sp-area{fill:var(--teal-soft)}
.spark .sp-dot{fill:var(--teal);stroke:var(--paper);stroke-width:1.5}
.delta{font-size:.74rem;font-weight:600}
.delta small{font-weight:500;color:var(--muted)}
.delta.good{color:var(--good)}.delta.bad{color:var(--bad)}
.ceo-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.ceo-grid .span2{grid-column:span 2}.ceo-grid .span3{grid-column:1/-1}
.ccard-chart{border-radius:10px;display:flex;flex-direction:column}
.ccard-chart .ph{align-items:flex-start}
.cc-t{display:grid;gap:2px;min-width:0;max-width:640px}
.ccard-chart > .chart,.ccard-chart > div:last-child{padding:6px 10px 10px}
.chart{position:relative;width:100%;min-width:0}
.chart svg{display:block;max-width:100%;height:auto;overflow:visible}
.chart.gantt{max-height:560px;overflow-y:auto;overflow-x:hidden}
.c-legend{display:flex;gap:4px 12px;flex-wrap:wrap;font-size:.74rem;color:var(--ink-2);align-items:center;padding-top:2px}
.c-legend .lg{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.c-legend .lg i{width:10px;height:10px;border-radius:3px;display:inline-block}
.c-legend .lg i.line{width:16px;height:0;border-radius:0;border-top:2px solid}
.c-legend .lg i.dash{width:16px;height:0;border-radius:0;border-top:2px dashed}
.chart .axis text{font:500 10.5px var(--font);fill:var(--muted)}
.chart .axis .tick line{stroke:var(--line-grey)}
.chart .axis .grid{stroke:var(--c-grid);stroke-dasharray:none}
.chart .hit{fill:transparent;cursor:pointer}
.chart .today line,.chart .today-line{stroke:var(--ink-2);stroke-width:1;stroke-dasharray:3 3}
.chart .today text{font:600 10px var(--font);fill:var(--ink-2)}
.chart .xhair{stroke:var(--ink-2);stroke-width:1}
.chart .hdot{stroke:var(--paper);stroke-width:2}
.chart .ln-strong{fill:none;stroke:var(--ink);stroke-width:1.6}
.chart .dashed{stroke-dasharray:5 4}
.chart .ln-pipe{fill:none;stroke:var(--c-pipe);stroke-width:2;stroke-dasharray:6 4}
.chart .ln-accent{fill:none;stroke:var(--c-first);stroke-width:2}
.chart .occ-area{fill:var(--c-first);fill-opacity:.12}
.chart .mk{fill:var(--c-first);stroke:var(--paper);stroke-width:2}
.chart .val-label{font:600 11px var(--font);fill:var(--ink);paint-order:stroke;stroke:var(--paper);stroke-width:3px}
.chart .zero{stroke:var(--line-strong)}
.chart .ref{stroke:var(--ink-2);stroke-dasharray:3 3;opacity:.6}
.chart .ref-t{font:600 10px var(--font);fill:var(--muted)}
.chart .ln-ink{fill:none;stroke:var(--ink-2);stroke-width:2}
.chart .cm{fill:var(--paper);stroke:var(--ink-2);stroke-width:2}
.chart.brush{margin-top:2px}
.chart .br-area{fill:var(--c-first);fill-opacity:.22}
.chart .br-today{stroke:var(--ink-2);stroke-dasharray:2 2}
.chart .brush .selection{fill:var(--teal);fill-opacity:.12;stroke:var(--teal);stroke-width:1}
.chart .brush .handle{fill:var(--teal);rx:2}
.chart .rowbg{fill:transparent}.chart .rowbg.odd{fill:var(--bone)}
.chart .yl text,.chart text.yl{font:500 10.5px var(--font);fill:var(--ink-2)}
.chart .gbar{cursor:pointer;stroke:var(--paper);stroke-width:.5}
.chart .gbar.expired,.chart .gbar.terminated{fill-opacity:.55}
.chart .gbar.draft{fill-opacity:.35;stroke:var(--st-reserved);stroke-dasharray:3 2}
.chart .gbar:hover{stroke:var(--ink);stroke-width:1.5}
.chart .ind-bg{fill:var(--bone);stroke:var(--line-grey)}
.chart .ind-t{font:700 10.5px var(--font);fill:var(--muted);letter-spacing:.02em}
.chart .leaf{cursor:default}
.chart .leaf rect{stroke:var(--paper);stroke-width:1}
.chart .leaf:hover rect{stroke:var(--ink);stroke-width:1.5}
.chart .leaf-t{font:600 11px var(--font);fill:var(--ink)}
.chart .leaf-v{font:500 10.5px var(--mono);fill:var(--ink-2)}
.chart .db-line{stroke:var(--line-strong);stroke-width:2}
.chart .db-list{fill:var(--paper);stroke:var(--faint);stroke-width:2}
.chart .db-fee{fill:var(--c-first);stroke:var(--paper);stroke-width:2}
.chart .db-pct{font:600 11px var(--mono);fill:var(--ink-2)}
.tip .sw{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:6px;vertical-align:0}
.attn{display:grid;gap:8px}
.attn-card > div:last-child{padding:10px 12px 12px}
.attn-it{display:grid;grid-template-columns:4px 1fr auto;gap:10px;align-items:center;padding:9px 10px;border:1px solid var(--line-grey);border-radius:8px;background:var(--bone);text-decoration:none;color:var(--ink)}
.attn-it:hover{border-color:var(--accent-line);background:var(--teal-wash)}
.attn-it > i{align-self:stretch;border-radius:2px;background:var(--faint)}
.attn-it.warn > i{background:var(--st-notice)}.attn-it.bad > i{background:var(--bad)}.attn-it.ok > i{background:var(--good)}.attn-it.info > i{background:var(--violet)}
.attn-it b{display:block;font-size:.86rem}
.attn-it span{font-size:.76rem;color:var(--muted)}
.attn-it .go{font-size:.74rem;font-weight:600;color:var(--teal);white-space:nowrap}
.stack-plan{display:grid;gap:12px;padding:10px 14px 14px!important}
.sp-row{display:grid;grid-template-columns:170px 1fr;gap:12px;align-items:start}
.sp-floor{display:flex;gap:10px;align-items:center;position:sticky;top:0}
.sp-floor > div{display:grid;line-height:1.3}
.sp-floor b{font-family:var(--cond);font-size:.95rem}
.sp-floor span{font-size:.72rem;color:var(--muted)}
.sp-cells{display:flex;flex-wrap:wrap;gap:3px}
.sp-cell{display:grid;align-content:center;gap:1px;min-height:52px;padding:5px 7px;border-radius:5px;text-decoration:none;color:var(--ink);overflow:hidden;
  background:color-mix(in srgb,var(--c) 20%,var(--paper));box-shadow:inset 3px 0 0 var(--c);transition:transform .1s,box-shadow .1s}
.sp-cell:hover{transform:translateY(-1px);box-shadow:inset 3px 0 0 var(--c),0 0 0 1.5px var(--c)}
.sp-cell b{font-size:.78rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sp-cell span{font-size:.68rem;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sp-cell.b-vacant{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--c) 14%,var(--paper)) 0 6px,var(--paper) 6px 10px)}
@media (max-width:1200px){.ceo-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.ceo-grid .span2{grid-column:1/-1}.ceo-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:820px){.ceo-grid{grid-template-columns:minmax(0,1fr)}.ceo-grid > *{grid-column:1/-1!important}.sp-row{grid-template-columns:minmax(0,1fr)}.ceo-hl h2{font-size:1.25rem}.ceo-kpi .spark{position:static;width:100%;height:26px;margin-top:4px}}

/* ---------- Idea Square brand ---------- */
.brand .mark-img{width:34px;height:34px;border-radius:9px;flex-shrink:0;box-shadow:0 2px 6px rgba(15,29,43,.25)}
.brand .w{font-family:var(--cond);font-weight:700;font-size:1.02rem;letter-spacing:.09em;line-height:1.1}
.brand .p{color:var(--muted)}
.brand .p::before{content:"";display:inline-block;width:6px;height:6px;border-radius:1px;background:var(--brand-spark);margin-right:5px;vertical-align:1px}

/* ---------- account menu ---------- */
.acct{position:relative}
.acct-btn{border:0;background:none;padding:0;cursor:pointer;border-radius:50%}
.av{width:32px;height:32px;border-radius:50%;display:inline-grid;place-items:center;background:var(--brand-ink);color:#fff;font:700 .78rem var(--cond);letter-spacing:.04em;flex-shrink:0;box-shadow:inset 0 -2px 0 var(--brand-spark)}
.av.lg{width:42px;height:42px;font-size:.95rem}
.acct-btn:focus-visible .av{outline:2px solid var(--teal);outline-offset:2px}
.acct-menu{position:absolute;right:0;top:calc(100% + 8px);z-index:90;min-width:250px;background:var(--paper);border:1px solid var(--line-grey);border-radius:10px;box-shadow:var(--shadow-lg);padding:6px;display:grid}
.am-head{display:flex;gap:10px;align-items:center;padding:8px 8px 10px;border-bottom:1px solid var(--line-2);margin-bottom:4px}
.am-head > div{display:grid;gap:2px;min-width:0}
.am-head b{font-size:.92rem}.am-head span{font-size:.76rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis}
.am-head .pill{justify-self:start;margin-top:2px}
.acct-menu button,.acct-menu a{display:block;width:100%;text-align:left;border:0;background:none;padding:8px 10px;border-radius:6px;font-size:.85rem;color:var(--ink);cursor:pointer;text-decoration:none}
.acct-menu button:hover,.acct-menu a:hover{background:var(--bone)}
.acct-menu .danger{color:var(--bad)}
.users .user-it{grid-template-columns:1fr auto}
.users .user-it.off{opacity:.6}
.u-who{display:flex;gap:10px;align-items:center;min-width:0}
.u-act{display:flex;gap:8px;align-items:center}

/* ---------- sign-in page ---------- */
.login-body{min-height:100vh;background:var(--wash)}
.login{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);min-height:100vh}
.login-brand{position:relative;overflow:hidden;background:radial-gradient(120% 90% at 0% 0%,#1d3550 0%,var(--brand-ink) 60%);color:#e9f0f5;padding:56px 56px 48px;display:flex;flex-direction:column;justify-content:space-between;gap:40px}
.lb-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px);background-size:44px 44px;mask-image:radial-gradient(90% 80% at 70% 60%,#000 30%,transparent 80%);-webkit-mask-image:radial-gradient(90% 80% at 70% 60%,#000 30%,transparent 80%)}
.lb-grid::after{content:"";position:absolute;right:12%;top:22%;width:176px;height:176px;border:10px solid rgba(255,255,255,.85);border-radius:8px;box-shadow:inset 88px -88px 0 -0px transparent}
.lb-grid::before{content:"";position:absolute;right:12%;top:22%;width:88px;height:88px;margin:0;background:var(--brand-spark);border-radius:4px;transform:translate(0,0);box-shadow:0 0 80px 10px rgba(245,179,1,.35)}
.lb-mark{position:relative;width:56px;height:56px;border-radius:14px;box-shadow:0 6px 20px rgba(0,0,0,.35)}
.lb-copy{position:relative;display:grid;gap:6px;max-width:460px}
.lb-name{font:700 2.6rem/1 var(--cond);letter-spacing:.12em}
.lb-sub{font:600 .78rem var(--font);letter-spacing:.22em;text-transform:uppercase;color:var(--brand-spark)}
.lb-tag{font-size:1.05rem;line-height:1.5;color:#c4d2dc;margin-top:14px}
.lb-points{position:relative;list-style:none;margin:0;padding:0;display:grid;gap:10px;font-size:.9rem;color:#c4d2dc}
.lb-points li{display:flex;gap:10px;align-items:baseline}
.lb-points li::before{content:"";width:8px;height:8px;border-radius:2px;background:var(--brand-spark);flex-shrink:0;transform:translateY(-1px)}
.lb-points b{color:#fff;font-weight:600}
.login-panel{display:grid;place-items:center;padding:40px 24px;background:var(--paper)}
.login-form{width:min(380px,100%);display:grid;gap:14px}
.login-form .lf-logo{width:44px;height:44px;border-radius:11px;display:none}
.login-form h1{font-size:1.8rem;font-family:var(--cond)}
.login-form .f{display:grid;gap:6px}
.login-form label{font-size:.78rem;font-weight:600;color:var(--ink-2)}
.login-form .input{height:42px;font-size:.95rem;width:100%}
.pw{position:relative}
.pw .input{padding-right:64px}
.pw-eye{position:absolute;right:6px;top:6px;height:30px;padding:0 10px;border:0;border-radius:6px;background:var(--bone);color:var(--ink-2);font-size:.76rem;font-weight:600;cursor:pointer}
.login-go{height:44px;font-size:.95rem;margin-top:4px}
.login-err{background:var(--bad-soft);color:var(--bad);border-radius:var(--r);padding:9px 12px;font-size:.84rem;font-weight:500}
@media (max-width:860px){.login{grid-template-columns:minmax(0,1fr)}.login-brand{display:none}.login-form .lf-logo{display:block}}
