:root{
  /* ---- FMPro brand: navy #0A3E6A + orange #F18010 (from logo) ---- */
  --navy:#0B2138;        /* deep navy for sidebar / portfolio top */
  --navy-2:#123154;      /* hover on navy */
  --navy-3:#0A3E6A;      /* brand mid-navy */
  --paper:#EEF1F6;       /* app canvas / body */
  --card:#FFFFFF;
  --ink:#13243D;         /* primary text */
  --muted:#64748B;       /* secondary text */
  --faint:#94A3B8;       /* tertiary */
  --line:#E2E8F0;
  --soft:#F1F5F9;
  --amber:#F18010;       /* brand orange — signature accent */
  --amber-d:#D86F08;
  --brand:#0A3E6A;       /* brand navy-blue for links/info */
  /* themeable surfaces (overridden by applyOrgTheme) */
  --theme-header:#FFFFFF;
  --theme-footer:#0B2138;
  --theme-login:#0B2138;
  /* buttons (Accent) — overridden by applyOrgTheme */
  --btn-bg:var(--amber);
  --btn-fg:#1A1304;
  --btn-hover:var(--amber-d);
  --btn-fg-hover:#FFFFFF;
  --btn-border:transparent;
  /* status */
  --st-open:#2563EB; --st-prog:#F59E0B; --st-hold:#64748B;
  --st-done:#16A34A; --st-over:#DC2626; --st-new:#7C3AED;
  /* priority */
  --pr-crit:#DC2626; --pr-high:#EA580C; --pr-med:#CA8A04; --pr-low:#475569;
  --shadow:0 1px 2px rgba(15,30,51,.06), 0 4px 16px rgba(15,30,51,.05);
  --shadow-lg:0 12px 40px rgba(15,30,51,.18);
  --r:14px; --r-sm:10px;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0; background:var(--paper); color:var(--ink);
  font-family:'Inter',system-ui,sans-serif; line-height:1.5;
  -webkit-font-smoothing:antialiased;
}
button{font-family:inherit; cursor:pointer; border:none; background:none; color:inherit}
input,select{font-family:inherit}
::selection{background:var(--amber); color:#1a1304}
.mono{font-family:'JetBrains Mono',monospace}
:focus-visible{outline:2px solid var(--amber); outline-offset:2px; border-radius:6px}

/* ============ SPLASH ============ */
#splash{
  position:fixed; inset:0; z-index:1000; background:var(--theme-login);
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:30px; transition:opacity .6s ease, visibility .6s;
  background-image:
    linear-gradient(rgba(255,255,255,.035) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.035) 1px, transparent 1px);
  background-size:34px 34px;
}
#splash.hide{opacity:0; visibility:hidden}
.splash-logo{display:flex; align-items:center; gap:16px; animation:rise .8s cubic-bezier(.2,.8,.2,1) both}
.splash-glow{position:absolute; width:520px; height:520px; border-radius:50%;
  background:radial-gradient(circle, rgba(241,128,16,.16), transparent 62%); filter:blur(8px)}
.splash-tag{font-family:'JetBrains Mono',monospace; font-size:12px; letter-spacing:.32em;
  text-transform:uppercase; color:#7E93B0; animation:rise .8s .1s cubic-bezier(.2,.8,.2,1) both}
.splash-bar{width:220px; height:4px; border-radius:99px; background:rgba(255,255,255,.1); overflow:hidden; position:relative}
.splash-bar i{position:absolute; inset:0; width:0; background:linear-gradient(90deg,var(--amber),#f9a03f); border-radius:99px; animation:load 1.7s ease forwards}
.splash-foot{font-size:11.5px; color:color-mix(in srgb, #fff 55%, var(--theme-footer)); letter-spacing:.04em; background:transparent}
.login-panel{
  width:min(360px, calc(100% - 48px));
  position:relative; z-index:1;
  animation:rise .8s .15s cubic-bezier(.2,.8,.2,1) both;
}
.login-panel .fld label{color:#C5D2E3}
.login-panel .fld input{
  background:rgba(255,255,255,.96);
}
.login-lang{
  justify-content:center;
  margin:0 auto 18px;
  border-color:rgba(255,255,255,.18);
  width:fit-content;
  background:rgba(255,255,255,.06);
}
.login-lang button{color:#9EB0C8; background:transparent; border:0; cursor:pointer}
.login-lang button.on{background:color-mix(in srgb, var(--amber) 92%, #000); color:#1a1304}
.login-lang button:disabled{opacity:.55; cursor:not-allowed}
.login-pass-wrap{position:relative}
.login-pass-wrap input{padding-right:44px}
.login-pass-toggle{
  position:absolute; right:8px; top:50%; transform:translateY(-50%);
  width:34px; height:34px; border:0; border-radius:8px;
  background:transparent; color:#64748B; cursor:pointer;
  display:grid; place-items:center; padding:0;
}
.login-pass-toggle:hover{color:var(--brand); background:color-mix(in srgb, var(--brand) 8%, transparent)}
.login-pass-toggle:disabled{opacity:.5; cursor:not-allowed}
.login-error{
  margin:-6px 0 14px;
  font-size:13px;
  color:#FCA5A5;
  text-align:center;
}
@keyframes rise{from{opacity:0; transform:translateY(14px)} to{opacity:1; transform:none}}
@keyframes load{to{width:100%}}

/* ---- FM Pro logo mark ---- */
.logo{display:inline-flex; align-items:center; gap:11px}
.logo-mark{width:40px; height:40px; border-radius:11px; flex:0 0 auto;
  background:linear-gradient(150deg,var(--amber),#f9a03f); position:relative;
  box-shadow:0 6px 18px rgba(241,128,16,.4); overflow:hidden}
.logo-mark svg{position:absolute; inset:0; width:100%; height:100%}
.logo-word{display:flex; flex-direction:column; line-height:1}
.logo-word .a{font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:21px; letter-spacing:-.01em}
.logo-word .b{font-family:'JetBrains Mono',monospace; font-size:9px; letter-spacing:.26em; text-transform:uppercase; margin-top:4px; opacity:.7}
.splash-logo .logo-mark{width:62px; height:62px; border-radius:16px}
.splash-logo .logo-word .a{font-size:40px; color:#fff}
.splash-logo .logo-word .b{font-size:11px; color:#8aa0bd; letter-spacing:.3em}

/* ============ APP SHELL ============ */
#app{display:none; min-height:100vh}
#app.show{display:block}

/* ---- Portfolio shell (sidebar + content) ---- */
.pf-shell{display:grid; grid-template-columns:248px 1fr; min-height:100vh}
.pf-shell.hidden{display:none}
.portfolio{min-width:0; min-height:100vh; padding:0 0 70px;
  background:
    linear-gradient(rgba(19,36,61,.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(19,36,61,.025) 1px, transparent 1px),
    var(--paper);
  background-size:30px 30px, 30px 30px, auto;
}
/* portfolio inner blocks span the content column, not the whole viewport */
.portfolio .pf-hero{max-width:none; margin-left:0; margin-right:0}
.portfolio .pf-summary{max-width:none; margin-left:0; margin-right:0}
.portfolio .pf-grid{max-width:none; margin-left:0; margin-right:0}
.portfolio .pf-tools{max-width:none; margin-left:0; margin-right:0}
.portfolio > div[style*="max-width:1180px"]{max-width:none !important; margin-left:0 !important; margin-right:0 !important}
.pf-top{
  position:sticky; top:0; z-index:30;
  background:color-mix(in srgb, var(--theme-header, #FFFFFF) 92%, transparent);
  backdrop-filter:blur(10px);
  color:var(--ink);
  padding:0;
  border-bottom:1px solid var(--line);
  background-image:none;
}
.pf-top .bar{max-width:none; margin:0; padding:10px 18px 10px 14px; display:flex; align-items:center; justify-content:space-between; gap:12px; min-height:52px}
.pf-top .logo-word .a{color:var(--ink)}
.pf-top .logo-word .b{color:var(--muted)}
.pf-acct{display:flex; align-items:center; gap:10px; font-size:13px; color:var(--ink); flex-wrap:wrap; justify-content:flex-end}
.pf-avatar{width:34px; height:34px; border-radius:50%; background:var(--navy); color:#fff; display:grid; place-items:center; font-weight:600; font-size:13px}
.pf-top .icon-btn{color:var(--ink)}
.pf-top .lang button{color:var(--muted)}
.pf-top .lang button.on{color:var(--ink); background:#fff; border-color:var(--line)}
.notif-bell-wrap .icon-btn{position:relative}
.notif-count{
  position:absolute; top:2px; right:2px;
  min-width:16px; height:16px; padding:0 4px;
  border-radius:99px; background:var(--st-over); color:#fff;
  font-size:10px; font-weight:700; display:grid; place-items:center;
  border:2px solid #fff; line-height:1; box-sizing:border-box;
}
.pf-hero{max-width:1180px; margin:0 auto; padding:46px 26px 8px}
.pf-eyebrow{font-family:'JetBrains Mono',monospace; font-size:11.5px; letter-spacing:.2em; text-transform:uppercase; color:var(--amber-d); font-weight:600}
.pf-hero h1{font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:34px; margin:10px 0 6px; letter-spacing:-.015em}
.pf-hero p{color:var(--muted); font-size:15px; margin:0; max-width:62ch}
.pf-summary{max-width:1180px; margin:24px auto 6px; padding:0 26px; display:grid; grid-template-columns:repeat(4,1fr); gap:14px}
.pf-summary.has-budget{grid-template-columns:repeat(5,1fr)}
.pf-summary.has-six{grid-template-columns:repeat(6,1fr)}
.pf-stat{background:var(--card); border:1px solid var(--line); border-radius:var(--r); padding:16px 18px; box-shadow:var(--shadow)}
.pf-stat.clickable{cursor:pointer; transition:transform .15s ease, box-shadow .15s ease, border-color .15s}
.pf-stat.clickable:hover{transform:translateY(-2px); box-shadow:var(--shadow-lg); border-color:#cfd9e6}
.pf-stat .n{font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:27px}
.pf-stat .l{font-size:12.5px; color:var(--muted); margin-top:3px}
.pf-stat .n.alert{color:var(--st-over)}
.pf-card-hint{margin-top:6px;font-size:11.5px;line-height:1.35;max-width:28ch}
.pf-pct-bar{height:6px;background:#eef2f6;border-radius:4px;overflow:hidden;margin-top:8px}
.pf-pct-bar>span{display:block;height:100%;border-radius:4px;min-width:0}
.pf-grid{max-width:1180px; margin:26px auto 0; padding:0 26px; display:grid; grid-template-columns:repeat(3,1fr); gap:18px}
.bld-card{background:var(--card); border:1px solid var(--line); border-radius:var(--r); overflow:hidden;
  box-shadow:var(--shadow); cursor:pointer; transition:transform .16s ease, box-shadow .16s ease, border-color .16s; display:flex; flex-direction:column}
.bld-card:hover{transform:translateY(-3px); box-shadow:var(--shadow-lg); border-color:#cfd9e6}
.bld-illus{height:118px; position:relative; background:linear-gradient(160deg,#1b3258,#0f1e33); overflow:hidden}
.bld-illus svg{position:absolute; bottom:0; left:0; width:100%}
.bld-illus .tag{position:absolute; top:12px; left:14px; font-family:'JetBrains Mono',monospace; font-size:11px; color:#fff; background:rgba(255,255,255,.14); padding:3px 9px; border-radius:6px; backdrop-filter:blur(3px)}
.bld-illus .health{position:absolute; top:11px; right:12px}
.bld-body{padding:15px 17px 17px}
.bld-body h3{font-family:'Space Grotesk',sans-serif; font-size:18px; margin:0 0 3px}
.bld-body .meta{font-size:12.5px; color:var(--muted); margin-bottom:13px}
.bld-kpis{display:flex; gap:9px}
.bld-kpi{flex:1; background:var(--soft); border-radius:9px; padding:8px 10px; text-align:center}
.bld-kpi .v{font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:17px}
.bld-kpi .k{font-size:10.5px; color:var(--muted); margin-top:1px; text-transform:uppercase; letter-spacing:.04em}
.bld-kpi.warn .v{color:var(--st-over)}
.bld-foot{margin-top:14px; display:flex; align-items:center; justify-content:space-between; font-size:13px; color:var(--brand); font-weight:600}
.bld-foot .arrow{transition:transform .16s} .bld-card:hover .bld-foot .arrow{transform:translateX(4px)}

/* ---- Workspace layout ---- */
.ws{display:none; grid-template-columns:248px 1fr; min-height:100vh}
.ws.show{display:grid}
.sidebar{background:var(--navy); color:#cbd6e6; position:sticky; top:0; height:100vh; display:flex; flex-direction:column; z-index:40}
.sb-logo{padding:18px 14px 14px; border-bottom:1px solid rgba(255,255,255,.07); display:flex; align-items:center; gap:8px; min-height:56px}
.sb-logo .logo-word .a{color:#fff} .sb-logo .logo-word .b{color:#7e93b0}
.sb-brand{flex:1; min-width:0; display:flex; align-items:center; background:none; border:none; padding:0; cursor:pointer; text-align:left}
.sb-brand:hover{opacity:.92}
.sb-brand-img{height:32px; width:auto; max-width:140px; object-fit:contain; display:block}
.sb-brand-text{font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:20px; color:#fff; letter-spacing:-.02em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.sb-collapse-btn{flex:0 0 auto; width:28px; height:28px; border-radius:8px; border:1px solid rgba(255,255,255,.12); background:rgba(255,255,255,.06); color:#c5d0e0; font-size:16px; line-height:1; cursor:pointer; display:grid; place-items:center}
.sb-collapse-btn:hover{background:rgba(255,255,255,.12); color:#fff}
/* Desktop collapse — hide nav column, keep hamburger */
.ws.sb-collapsed{grid-template-columns:0 1fr}
.pf-shell.sb-collapsed{grid-template-columns:0 1fr}
.ws.sb-collapsed .sidebar,
.pf-shell.sb-collapsed .sidebar{overflow:hidden; border:none; pointer-events:none}
.menu-btn{display:grid}
.sb-bld{margin:14px 14px 8px; background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.08); border-radius:10px; padding:9px 11px; cursor:pointer; display:flex; align-items:center; gap:9px; transition:background .15s}
.sb-bld:hover{background:rgba(255,255,255,.09)}
.sb-bld .ic{width:30px; height:30px; border-radius:7px; background:var(--amber); color:#1a1304; display:grid; place-items:center; flex:0 0 auto; font-weight:700; font-size:12px}
.sb-bld .tx{min-width:0} .sb-bld .tx .n{color:#fff; font-size:13px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.sb-bld .tx .s{font-size:11px; color:#8aa0bd}
.sb-bld .sw{margin-left:auto; color:#8aa0bd; font-size:11px}
.sb-nav{flex:1; overflow-y:auto; padding:8px 10px}
.sb-sec{font-family:'JetBrains Mono',monospace; font-size:10px; letter-spacing:.14em; text-transform:uppercase; color:#5e739a; padding:14px 10px 6px}
.sb-acc-head{display:flex;align-items:center;justify-content:space-between;cursor:pointer;user-select:none}
.sb-acc-head:hover{color:#dbe4f3}
.sb-acc-chev{font-size:11px;opacity:.75}
.sb-acc-body{padding-left:2px;margin-bottom:4px}
.sb-acc-body .nav-item{padding-left:14px}
.sb-subsec{font-family:'JetBrains Mono',monospace;font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:#7a8db0;padding:10px 10px 4px 14px;opacity:.95}
.nav-item{display:flex; align-items:center; gap:11px; padding:9px 11px; border-radius:9px; font-size:13.5px; color:#bccadd; cursor:pointer; position:relative; transition:background .13s, color .13s; margin-bottom:1px}
.nav-item:hover{background:rgba(255,255,255,.06); color:#fff}
.nav-item.active{background:rgba(241,128,16,.14); color:#fff; font-weight:600}
.nav-item.active::before{content:""; position:absolute; left:-10px; top:6px; bottom:6px; width:3px; border-radius:99px; background:var(--amber)}
.nav-item .ic{width:18px; height:18px; flex:0 0 auto; opacity:.92}
.nav-item .badge{margin-left:auto; background:var(--st-over); color:#fff; font-size:10.5px; font-weight:600; min-width:18px; height:18px; padding:0 5px; border-radius:99px; display:grid; place-items:center}
.nav-item.active .badge{background:var(--amber); color:#1a1304}
.obj-page{max-width:none; width:100%; margin:18px 0 0; padding:0; box-sizing:border-box}
.objtype-grid{display:grid; grid-template-columns:repeat(2,1fr); gap:18px}
.objtype-card{position:relative; background:var(--card); border:1px solid var(--line); border-radius:16px; box-shadow:var(--shadow); padding:24px; cursor:pointer; transition:transform .14s, box-shadow .14s, border-color .14s; overflow:hidden}
.objtype-card:hover{transform:translateY(-3px); box-shadow:0 10px 28px rgba(16,23,32,.12); border-color:var(--line-strong)}
.objtype-card .otc-ic{width:52px; height:52px; border-radius:14px; display:grid; place-items:center; margin-bottom:16px}
.objtype-card .otc-ic svg{width:26px; height:26px}
.objtype-card h2{font-family:'Space Grotesk',sans-serif; font-size:20px; margin:0 0 4px; letter-spacing:-.01em}
.objtype-card .otc-sub{color:var(--muted); font-size:13px; margin:0}
.objtype-card .otc-cnt{position:absolute; top:22px; right:22px; font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:30px; line-height:1; color:var(--ink)}
.objtype-card .otc-foot{display:flex; align-items:center; gap:6px; margin-top:18px; font-size:13px; font-weight:600; color:var(--brand)}
.objtype-card .otc-foot svg{width:15px; height:15px}
.objtype-card.empty-type{opacity:.7}
.obj-back{display:inline-flex; align-items:center; gap:7px; cursor:pointer; color:var(--brand); font-weight:600; font-size:13.5px; margin-bottom:6px; background:none; border:none; padding:0}
.obj-back svg{width:16px; height:16px; transform:rotate(180deg)}
@media(max-width:680px){.objtype-grid{grid-template-columns:1fr}}
.sb-user{padding:12px 14px; border-top:1px solid rgba(255,255,255,.07); display:flex; align-items:center; gap:10px; background:var(--theme-footer)}
.sb-user .av{width:34px; height:34px; border-radius:50%; background:color-mix(in srgb, #fff 18%, var(--theme-footer)); color:#fff; display:grid; place-items:center; font-weight:600; font-size:13px}
.sb-user .nm{font-size:13px; color:#fff; font-weight:600} .sb-user .rl{font-size:11px; color:#8aa0bd}

/* ---- Main column ---- */
.main{min-width:0; display:flex; flex-direction:column}
.topbar{position:sticky; top:0; z-index:30; background:color-mix(in srgb, var(--theme-header) 86%, transparent); backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line); padding:11px 26px; display:flex; align-items:center; gap:16px}
.crumb{font-size:13px; color:var(--muted); display:flex; align-items:center; gap:7px; min-width:0}
.crumb b{color:var(--ink)} .crumb .home{cursor:pointer; color:var(--brand); font-weight:600}
.crumb .sep{color:var(--faint)}
.search{margin-left:6px; flex:1; max-width:400px; position:relative}
.search input{width:100%; border:1px solid var(--line); background:var(--soft); border-radius:10px; padding:9px 12px 9px 34px; font-size:13.5px; color:var(--ink)}
.search input:focus{outline:none; border-color:var(--brand); background:#fff}
.search svg{position:absolute; left:11px; top:50%; transform:translateY(-50%); color:var(--faint)}
.tb-right{margin-left:auto; display:flex; align-items:center; gap:8px; position:relative}
.lang{display:flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; font-size:12px; font-weight:600}
.lang button{padding:6px 10px; color:var(--muted)} .lang button.on{background:var(--navy); color:#fff}
.icon-btn{width:38px; height:38px; border-radius:10px; display:grid; place-items:center; color:var(--muted); position:relative; transition:background .13s}
.icon-btn:hover{background:var(--soft); color:var(--ink)}
.icon-btn .dot{position:absolute; top:8px; right:9px; width:8px; height:8px; border-radius:50%; background:var(--st-over); border:2px solid #fff}
.notif-panel{position:absolute; top:46px; right:0; width:340px; max-width:min(340px,92vw); background:#fff; border:1px solid var(--line); border-radius:14px; box-shadow:0 18px 40px rgba(15,23,42,.14); z-index:80; overflow:hidden}
.notif-head{display:flex; align-items:center; justify-content:space-between; padding:12px 14px; border-bottom:1px solid var(--line)}
.notif-list{max-height:360px; overflow:auto}
.notif-item{padding:12px 14px; border-bottom:1px solid #f1f5f9; cursor:pointer}
.notif-item:hover{background:#f8fafc}
.notif-item.unread{background:#f0f7ff}
.notif-title{font-size:13px; font-weight:650; color:var(--ink)}
.notif-body{font-size:12px; color:var(--muted); margin-top:3px; line-height:1.35}
.notif-empty{padding:28px 14px; text-align:center; color:var(--muted); font-size:13px}
.btn{display:inline-flex; align-items:center; gap:7px; padding:9px 15px; border-radius:10px; font-size:13.5px; font-weight:600; transition:transform .1s, box-shadow .15s, background .15s, color .15s, border-color .15s}
.btn:active{transform:translateY(1px)}
/* All action buttons follow Accent (--btn-*) from theme */
.btn-amber,
.btn-ghost,
.btn-navy,
button.btn:not(.icon-btn){
  background:var(--btn-bg, var(--amber)) !important;
  color:var(--btn-fg, #1a1304) !important;
  border:1px solid var(--btn-border, transparent) !important;
  box-shadow:0 4px 12px color-mix(in srgb, var(--amber) 28%, transparent);
}
.btn-amber:hover,
.btn-ghost:hover,
.btn-navy:hover,
button.btn:not(.icon-btn):hover{
  background:var(--btn-hover, var(--amber-d)) !important;
  color:var(--btn-fg-hover, #fff) !important;
}
.rights-btn,
.rights-btn.save{
  background:var(--btn-bg, var(--amber)) !important;
  color:var(--btn-fg, #1a1304) !important;
  border-color:var(--btn-border, transparent) !important;
  box-shadow:0 4px 12px color-mix(in srgb, var(--amber) 28%, transparent);
}
.rights-btn:hover,
.rights-btn.save:hover,
.rights-btn.save.hot{
  background:var(--btn-hover, var(--amber-d)) !important;
  color:var(--btn-fg-hover, #fff) !important;
}

/* Single shell layout: module body always fills the main column (no half-width cap). */
.content{padding:24px 26px 60px; max-width:none; width:100%; box-sizing:border-box}
.content.flush{padding:0; max-width:none; width:100%}
.content > .tbl-wrap,
.content > .panel,
.content > .module-card,
.content .tbl-wrap,
.content .panel{width:100%; max-width:none; box-sizing:border-box}
.page-head{display:flex; align-items:flex-end; justify-content:space-between; gap:16px; margin-bottom:20px; flex-wrap:wrap}
.page-head h1{font-family:'Space Grotesk',sans-serif; font-size:26px; margin:0 0 4px; letter-spacing:-.01em}
.page-head p{color:var(--muted); font-size:13.5px; margin:0}

/* ---- KPI cards ---- */
.kpi-row{display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-bottom:20px}
.kpi{background:var(--card); border:1px solid var(--line); border-radius:var(--r); padding:16px 18px; box-shadow:var(--shadow); position:relative; overflow:hidden}
.kpi .top{display:flex; align-items:center; justify-content:space-between; margin-bottom:9px}
.kpi .lbl{font-size:12.5px; color:var(--muted); font-weight:500}
.kpi .ic{width:34px; height:34px; border-radius:9px; display:grid; place-items:center}
.kpi .v{font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:30px; line-height:1}
.kpi .delta{font-size:12px; margin-top:7px; display:flex; align-items:center; gap:5px; color:var(--muted)}
.kpi .delta.up{color:var(--st-done)} .kpi .delta.down{color:var(--st-over)}

/* ---- Generic cards / grid ---- */
/* ---- PM cards (clickable, expandable) ---- */
.pm-cards{display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-bottom:18px}
.pm-card{background:var(--card); border:1px solid var(--line); border-radius:var(--r); padding:15px 16px; box-shadow:var(--shadow);
  cursor:pointer; transition:transform .15s ease, box-shadow .15s ease, border-color .15s; position:relative; overflow:hidden}
.pm-card:hover{transform:translateY(-2px); box-shadow:var(--shadow-lg); border-color:#cfd9e6}
.pm-card .ch{display:flex; align-items:center; justify-content:space-between; margin-bottom:10px}
.pm-card .ic{width:34px; height:34px; border-radius:9px; display:grid; place-items:center; flex:0 0 auto}
.pm-card .chev{color:var(--faint); transition:transform .2s}
.pm-card.open .chev{transform:rotate(90deg)}
.pm-card .n{font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:26px; line-height:1}
.pm-card .n small{font-size:14px; color:var(--muted); font-weight:600}
.pm-card .l{font-size:12.5px; color:var(--muted); margin-top:4px}
.pm-card .n.alert{color:var(--st-over)} .pm-card .n.ok{color:var(--st-done)}
.pm-card .barline{height:5px; border-radius:99px; background:var(--soft); margin-top:10px; overflow:hidden}
.pm-card .barline i{display:block; height:100%; border-radius:99px}
.pm-detail{grid-column:1/-1; background:#fff; border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow);
  margin-top:-4px; overflow:hidden; animation:pop .2s cubic-bezier(.2,.8,.2,1)}
.pm-detail .dh{padding:14px 18px; border-bottom:1px solid var(--line); display:flex; align-items:center; gap:10px}
.pm-detail .dh h3{font-family:'Space Grotesk',sans-serif; font-size:15.5px; margin:0; flex:1}
.pm-detail .dh .x{cursor:pointer; color:var(--faint); font-size:20px}
.pm-detail .db{padding:6px 0}
.pm-list{list-style:none; margin:0; padding:0}
.pm-list li{display:flex; align-items:center; gap:12px; padding:11px 18px; border-bottom:1px solid var(--soft); font-size:13px}
.pm-list li:last-child{border-bottom:none}
.pm-list .dot{width:9px; height:9px; border-radius:50%; flex:0 0 auto}
.pm-list .nm{flex:1; min-width:0}
.pm-list .nm b{display:block; font-size:13.5px}
.pm-list .nm span{font-size:11.5px; color:var(--muted)}
.pm-list .meta{text-align:right; font-family:'JetBrains Mono',monospace; font-size:12px; white-space:nowrap; color:var(--muted)}
.pm-pill{font-size:10.5px; font-weight:600; padding:2px 8px; border-radius:99px; white-space:nowrap}
.pm-empty{padding:18px; color:var(--muted); font-size:13px; text-align:center}
@media(max-width:1100px){.pm-cards{grid-template-columns:repeat(2,1fr)}}
@media(max-width:560px){.pm-cards{grid-template-columns:1fr}}
.grid-2{display:grid; grid-template-columns:1.45fr 1fr; gap:16px; margin-bottom:16px}
.grid-3{display:grid; grid-template-columns:repeat(3,1fr); gap:16px}
.panel{background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow)}
.panel-head{padding:15px 18px; border-bottom:1px solid var(--line); display:flex; align-items:center; justify-content:space-between}
.panel-head h3{font-family:'Space Grotesk',sans-serif; font-size:15.5px; margin:0}
.panel-head .link{font-size:12.5px; color:var(--brand); font-weight:600; cursor:pointer}
.panel-body{padding:18px}

/* ---- Table ---- */
.toolbar{display:flex; align-items:center; gap:9px; margin-bottom:14px; flex-wrap:wrap}
.tb-filters{display:flex; gap:7px; flex-wrap:wrap; align-items:center}
.tb-sel{border:1px solid var(--line); border-radius:9px; padding:8px 10px; font-size:12.5px; color:var(--ink); background:#fff; cursor:pointer; max-width:190px}
.tb-sel:focus{outline:none; border-color:var(--brand)}
.chip-filter{padding:7px 13px; border:1px solid var(--line); border-radius:99px; font-size:12.5px; font-weight:600; color:var(--muted); background:#fff; transition:.13s}
.chip-filter:hover{border-color:#cbd5e1}
.chip-filter.on{background:var(--navy); color:#fff; border-color:var(--navy)}
.tbl-wrap{background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); overflow:hidden}
table.tbl{width:100%; border-collapse:collapse; font-size:13px}
table.tbl th{text-align:left; padding:12px 16px; background:var(--soft); font-family:'JetBrains Mono',monospace; font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; color:var(--muted); font-weight:600; border-bottom:1px solid var(--line); white-space:nowrap}
table.tbl td{padding:13px 16px; border-bottom:1px solid var(--line); vertical-align:middle}
table.tbl tr:last-child td{border-bottom:none}
table.tbl tbody tr{cursor:pointer; transition:background .1s}
table.tbl tbody tr:hover{background:#fafbfd}
.wo-id{font-family:'JetBrains Mono',monospace; font-weight:600; color:var(--ink)}
.cell-sub{font-size:11.5px; color:var(--muted)}

/* ---- Pills ---- */
.pill{display:inline-flex; align-items:center; gap:6px; padding:4px 10px; border-radius:99px; font-size:11.5px; font-weight:600; white-space:nowrap}
.pill .d{width:7px; height:7px; border-radius:50%}
.st-new{background:#f3edff; color:#6d28d9} .st-new .d{background:var(--st-new)}
.st-open{background:#e6efff; color:#1d4ed8} .st-open .d{background:var(--st-open)}
.st-prog{background:#fef3da; color:#b45309} .st-prog .d{background:var(--st-prog)}
.st-hold{background:#eef1f5; color:#475569} .st-hold .d{background:var(--st-hold)}
.st-check{background:#e0f2f1; color:#0f766e} .st-check .d{background:#0f766e}
.st-done{background:#e3f5e9; color:#15803d} .st-done .d{background:var(--st-done)}
.st-over{background:#fde8e8; color:#b91c1c} .st-over .d{background:var(--st-over)}
.prio{display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:600}
.prio .b{width:3px; height:13px; border-radius:2px}
.pr-crit{color:var(--pr-crit)} .pr-crit .b{background:var(--pr-crit)}
.pr-high{color:var(--pr-high)} .pr-high .b{background:var(--pr-high)}
.pr-med{color:var(--pr-med)} .pr-med .b{background:var(--pr-med)}
.pr-low{color:var(--pr-low)} .pr-low .b{background:var(--pr-low)}
.type-tag{font-family:'JetBrains Mono',monospace; font-size:10px; font-weight:600; padding:3px 7px; border-radius:5px; text-transform:uppercase; letter-spacing:.03em}
.ty-prev{background:#e6efff; color:#1d4ed8} .ty-corr{background:#fef3da; color:#b45309} .ty-react{background:#fde8e8; color:#b91c1c}

/* avatar mini */
.av-mini{width:26px; height:26px; border-radius:50%; background:#dbe4f0; color:#334e6f; display:inline-grid; place-items:center; font-size:10.5px; font-weight:700; vertical-align:middle; margin-right:7px}

/* ---- Activity feed ---- */
.feed{list-style:none; margin:0; padding:0}
.feed li{display:flex; gap:12px; padding:11px 0; border-bottom:1px solid var(--soft); font-size:13px}
.feed li:last-child{border-bottom:none}
.feed .fic{width:30px; height:30px; border-radius:8px; flex:0 0 auto; display:grid; place-items:center}
.feed .ft{color:var(--ink)} .feed .fm{font-size:11.5px; color:var(--faint); margin-top:2px}

/* ---- Asset tree ---- */
.tree{font-size:13.5px}
.tree .sys{margin-bottom:6px; border:1px solid var(--line); border-radius:10px; overflow:hidden; background:#fff}
.tree .sys-h{display:flex; align-items:center; gap:10px; padding:12px 15px; cursor:pointer; font-weight:600}
.tree .sys-h:hover{background:var(--soft)}
.tree .sys-h .cnt{margin-left:auto; font-size:11.5px; color:var(--muted); font-weight:500}
.tree .sys-h .chev{transition:transform .18s; color:var(--faint)}
.tree .sys.open .sys-h .chev{transform:rotate(90deg)}
.tree .eq{display:none; padding:2px 8px 8px}
.tree .sys.open .eq{display:block}
.tree .eq-row{display:flex; align-items:center; gap:12px; padding:10px 12px; border-radius:8px; cursor:pointer}
.tree .eq-row:hover{background:var(--soft)}
.tree .eq-row .qr{width:30px;height:30px;border-radius:7px;background:var(--ink);display:grid;place-items:center;flex:0 0 auto}
.tree .eq-row .nm{font-weight:600; font-size:13px} .tree .eq-row .tg{font-family:'JetBrains Mono',monospace; font-size:11px; color:var(--muted)}
.health-bar{width:62px; height:6px; border-radius:99px; background:var(--soft); overflow:hidden; margin-left:auto}
.health-bar i{display:block; height:100%; border-radius:99px}

/* ---- Calendar / PM ---- */
.pm-cal{display:grid; grid-template-columns:repeat(7,1fr); gap:6px}
.pm-cal .dow{font-family:'JetBrains Mono',monospace; font-size:10.5px; text-transform:uppercase; color:var(--muted); text-align:center; padding:4px 0; letter-spacing:.05em}
.pm-day{min-height:78px; border:1px solid var(--line); border-radius:9px; padding:6px 7px; background:#fff; font-size:11px}
.pm-day.dim{background:var(--soft); color:var(--faint)}
.pm-day .dn{font-weight:600; color:var(--muted); font-size:11.5px}
.pm-day.today{border-color:var(--amber); box-shadow:0 0 0 2px rgba(241,128,16,.18)}
.pm-evt{display:block; font-size:10px; padding:2px 5px; border-radius:5px; margin-top:3px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}

/* ---- Inventory bars ---- */
.stock{display:flex; align-items:center; gap:10px}
.stock-bar{width:90px; height:7px; border-radius:99px; background:var(--soft); overflow:hidden}
.stock-bar i{display:block; height:100%; border-radius:99px}

/* ---- Reports ---- */
.rep-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:16px}
.rep-card{background:var(--card); border:1px solid var(--line); border-radius:var(--r); padding:18px; box-shadow:var(--shadow); cursor:pointer; transition:transform .15s, box-shadow .15s; display:flex; flex-direction:column; gap:11px}
.rep-card:hover{transform:translateY(-2px); box-shadow:var(--shadow-lg)}
.rep-card .ic{width:42px; height:42px; border-radius:11px; display:grid; place-items:center}
.rep-card h3{font-family:'Space Grotesk',sans-serif; font-size:16px; margin:0}
.rep-card p{font-size:12.5px; color:var(--muted); margin:0; flex:1}
.rep-card .go{font-size:12.5px; color:var(--brand); font-weight:600}

/* ---- Drawer (WO detail) ---- */
.scrim{position:fixed; inset:0; background:rgba(15,30,51,.42); z-index:90; opacity:0; visibility:hidden; transition:.25s}
.scrim.show{opacity:1; visibility:visible}
.drawer{position:fixed; top:0; right:0; bottom:0; width:480px; max-width:94vw; background:var(--paper); z-index:100;
  transform:translateX(100%); transition:transform .3s cubic-bezier(.2,.8,.2,1); display:flex; flex-direction:column; box-shadow:var(--shadow-lg)}
.drawer.show{transform:none}
.drawer-head{background:var(--navy); color:#fff; padding:18px 22px}
.drawer-head .x{position:absolute; top:16px; right:18px; color:#9fb2cc; font-size:22px; cursor:pointer; line-height:1}
.drawer-head .wo-id{color:#fff} .drawer-head h2{font-family:'Space Grotesk',sans-serif; font-size:19px; margin:8px 0 0; color:#fff}
.drawer-body{flex:1; overflow-y:auto; padding:20px 22px}
.dfield{margin-bottom:16px}
.dfield .k{font-family:'JetBrains Mono',monospace; font-size:10.5px; text-transform:uppercase; letter-spacing:.06em; color:var(--muted); margin-bottom:5px}
.dfield .v{font-size:14px; font-weight:500}
.dgrid{display:grid; grid-template-columns:1fr 1fr; gap:16px}
.dcard{background:#fff; border:1px solid var(--line); border-radius:11px; padding:14px 16px; margin-bottom:14px}
.checklist{list-style:none; margin:0; padding:0}
.checklist li{display:flex; align-items:center; gap:10px; padding:9px 0; font-size:13.5px; border-bottom:1px solid var(--soft)}
.checklist li:last-child{border-bottom:none}
.checkbox{width:19px; height:19px; border-radius:6px; border:2px solid var(--line); flex:0 0 auto; display:grid; place-items:center}
.checkbox.on{background:var(--st-done); border-color:var(--st-done)}
.drawer-foot{padding:14px 22px; border-top:1px solid var(--line); background:#fff; display:flex; gap:10px}

/* ---- Modal (create WO) ---- */
.modal{position:fixed; inset:0; z-index:110; display:none; align-items:center; justify-content:center; padding:20px}
.modal.show{display:flex}
.modal-box{background:#fff; border-radius:18px; width:560px; max-width:100%; max-height:92vh; overflow-y:auto; box-shadow:var(--shadow-lg); animation:pop .22s cubic-bezier(.2,.8,.2,1)}
.modal-box.wide{width:760px}
.modal-box.wide.wz-modal{width:min(920px,96vw)}
@keyframes pop{from{opacity:0; transform:translateY(12px) scale(.98)} to{opacity:1; transform:none}}
.modal-head{padding:20px 24px; border-bottom:1px solid var(--line); display:flex; align-items:center; justify-content:space-between}
.modal-head h2{font-family:'Space Grotesk',sans-serif; font-size:19px; margin:0}
.modal-body{padding:22px 24px}
.modal-foot{padding:16px 24px; border-top:1px solid var(--line); display:flex; justify-content:flex-end; gap:10px}
.fld{margin-bottom:16px}
.fld-hint{font-size:11.5px;color:var(--muted);line-height:1.4;max-width:56ch}
.ent-op-blurb{font-size:12.5px;color:var(--muted);line-height:1.5;margin:0 0 12px;max-width:72ch}
.panel-head .cell-sub{font-weight:400}
.fld input,.fld select,.fld textarea{width:100%; border:1px solid var(--line); border-radius:10px; padding:10px 12px; font-size:13.5px; color:var(--ink); background:#fff}
.fld input:focus,.fld select:focus,.fld textarea:focus{outline:none; border-color:var(--brand)}
.fld-row{display:grid; grid-template-columns:1fr 1fr; gap:14px}

/* budget breakdown modal */
.bud-summary{display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-bottom:18px}
.bud-card{background:var(--soft); border:1px solid var(--line); border-radius:11px; padding:13px 15px}
.bud-card .l{font-size:11.5px; color:var(--muted); text-transform:uppercase; letter-spacing:.04em}
.bud-card .v{font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:20px; margin-top:3px}
.bud-card .v.over{color:var(--st-over)} .bud-card .v.under{color:var(--st-done)}
.bud-rows{list-style:none; margin:0; padding:0}
.bud-rows li{display:flex; align-items:center; gap:12px; padding:11px 0; border-bottom:1px solid var(--soft)}
.bud-rows li:last-child{border-bottom:none}
.bud-rows .ic{width:34px; height:34px; border-radius:9px; display:grid; place-items:center; flex:0 0 auto}
.bud-rows .nm{flex:1; min-width:0}
.bud-rows .nm b{display:block; font-size:13.5px}
.bud-rows .nm span{font-size:11.5px; color:var(--muted)}
.bud-rows .nums{text-align:right; font-family:'JetBrains Mono',monospace; font-size:12.5px; white-space:nowrap}
.bud-rows .nums .a{font-weight:700; display:block}
.bud-rows .nums .b{color:var(--muted); font-size:11px}
.bud-bar{width:100%; height:6px; border-radius:99px; background:var(--soft); overflow:hidden; margin-top:6px}
.bud-bar i{display:block; height:100%; border-radius:99px}
/* R&M PM/Reactive split bar */
.rm-bar{display:flex; width:100%; height:22px; border-radius:99px; overflow:hidden; background:var(--soft)}
.rm-bar i{display:block; height:100%; transition:width .4s ease}
.rm-bar i.pm{background:linear-gradient(90deg,#0A3E6A,#1d5a93)}
.rm-bar i.react{background:linear-gradient(90deg,#e0533a,#DC2626)}
.rm-dot{display:inline-block; width:9px; height:9px; border-radius:50%; margin-right:6px; vertical-align:middle}
.rm-dot.pm{background:#0A3E6A}
.rm-dot.react{background:#DC2626}
.kpi.clickable{cursor:pointer; transition:transform .15s ease, box-shadow .15s ease, border-color .15s}
.kpi.clickable:hover{transform:translateY(-2px); box-shadow:var(--shadow-lg); border-color:#cfd9e6}
.kpi-row.kpi-3{grid-template-columns:repeat(3,1fr)}
.kpi-break{display:flex; gap:12px; flex-wrap:wrap; margin-top:8px; font-size:11.5px; color:var(--muted)}
.kpi-break .kb{display:inline-flex; align-items:center; gap:4px}
.kpi-break .kb i{display:inline-block; width:8px; height:8px; border-radius:2px}
.kpi-break .kb b{color:var(--ink); font-size:12.5px}
@media(max-width:780px){.kpi-row.kpi-3{grid-template-columns:1fr}}
/* objects modal cards */
.obj-modal-grid{display:grid; grid-template-columns:repeat(2,1fr); gap:12px}
.obj-modal-card{border:1px solid var(--line); border-radius:12px; padding:13px 15px; cursor:pointer; background:var(--card); transition:transform .14s ease, box-shadow .14s ease, border-color .14s}
.obj-modal-card:hover{transform:translateY(-2px); box-shadow:var(--shadow-lg); border-color:#cfd9e6}
.obj-modal-card .omc-top{display:flex; align-items:center; gap:9px}
.obj-modal-card .tag{width:28px; height:28px; border-radius:7px; background:var(--navy); color:#fff; display:grid; place-items:center; font-weight:700; font-size:12px; flex:0 0 auto}
.obj-modal-card .omc-h{flex:1; font-family:'Space Grotesk',sans-serif; font-weight:600; font-size:14.5px}
.obj-modal-card .omc-health{font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:14px}
.obj-modal-card .omc-meta{font-size:12px; color:var(--muted); margin:6px 0 8px}
.obj-modal-card .omc-kpis{display:flex; gap:14px; font-size:12.5px; color:var(--muted)}
.obj-modal-card .omc-kpis b{color:var(--ink)}
.obj-modal-card .omc-rm{display:flex; justify-content:space-between; margin-top:6px; font-size:12px; color:var(--muted)}
@media(max-width:560px){.obj-modal-grid{grid-template-columns:1fr}}
.bud-bld-row{display:flex; align-items:center; gap:10px; padding:9px 0; border-bottom:1px solid var(--soft); font-size:12.5px}
.bud-bld-row:last-child{border-bottom:none}
.bud-bld-row .tag{width:26px; height:26px; border-radius:7px; background:var(--navy); color:#fff; display:grid; place-items:center; font-weight:700; font-size:11px; flex:0 0 auto}
.bud-bld-row .nm{flex:1; font-weight:600}
.bud-bld-row .nums{font-family:'JetBrains Mono',monospace; text-align:right; white-space:nowrap}

/* search box (module toolbars + portfolio) */
.search-box{position:relative; flex:1; min-width:200px; max-width:440px}
.search-box svg{position:absolute; left:12px; top:50%; transform:translateY(-50%); color:var(--faint)}
.search-box input{width:100%; border:1px solid var(--line); background:#fff; border-radius:10px; padding:10px 34px 10px 36px; font-size:13.5px; color:var(--ink)}
.search-box input:focus{outline:none; border-color:var(--brand); box-shadow:0 0 0 3px rgba(10,62,106,.08)}
.search-box .clr{position:absolute; right:10px; top:50%; transform:translateY(-50%); cursor:pointer; color:var(--faint); font-size:13px; width:18px; height:18px; display:grid; place-items:center; border-radius:5px}
.search-box .clr:hover{background:var(--soft); color:var(--ink)}
.toolbar .chips{display:flex; gap:7px; flex-wrap:wrap}
.toolbar .btn-amber{margin-left:auto}
/* portfolio tools row */
.pf-tools{max-width:1080px; margin:18px auto 0; padding:0 22px; display:flex; gap:10px; align-items:center}
.pf-tools .search-box{max-width:none}
.pf-tools .btn{white-space:nowrap}
/* form grid for generic add modal */
.form-grid{display:grid; grid-template-columns:1fr 1fr; gap:0 14px}
.form-grid .fld{grid-column:1 / -1}
.form-grid .fld.half{grid-column:span 1}
@media(max-width:560px){ .form-grid .fld.half{grid-column:1 / -1} .pf-tools{flex-wrap:wrap} }

.ob-block-list{display:flex;flex-direction:column;gap:10px}
.ob-block-card{position:relative;border:1px solid var(--line);border-radius:12px;padding:12px 36px 8px 12px;background:#fafbfc}
.ob-block-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0 10px}
.ob-block-grid .fld{margin-bottom:10px;grid-column:auto}
.ob-block-grid .fld label{font-size:11.5px;color:var(--muted)}
.ob-block-x{position:absolute;top:10px;right:10px;border:none;background:transparent;color:#DC2626;font-size:16px;cursor:pointer;line-height:1;padding:4px}
.ob-block-x:hover{opacity:.75}
.ob-totals{margin-top:10px;padding:10px 12px;border-radius:10px;background:#f1f5f9;font-size:12.5px;color:#64748b;line-height:1.5}
.ob-totals b{color:#0A3E6A}
.form-grid input[readonly]{background:#f1f5f9;color:#64748b;cursor:default}
@media(max-width:640px){.ob-block-grid{grid-template-columns:1fr 1fr}}

/* ---- Toast ---- */
#toast{position:fixed; bottom:24px; left:50%; transform:translateX(-50%) translateY(20px); z-index:200;
  background:var(--navy); color:#fff; padding:12px 20px; border-radius:12px; font-size:13.5px; font-weight:500;
  box-shadow:var(--shadow-lg); opacity:0; visibility:hidden; transition:.25s; display:flex; align-items:center; gap:10px}
#toast.show{opacity:1; visibility:visible; transform:translateX(-50%) translateY(0)}
#toast .ck{color:var(--amber)}

/* empty state */
.empty{text-align:center; padding:50px 20px; color:var(--muted)}
.empty svg{color:var(--faint); margin-bottom:12px}

/* ---- Responsive ---- */
/* menu-btn always visible — desktop collapse + mobile drawer */
.menu-btn{display:grid}
@media(max-width:1080px){
  .pf-summary{grid-template-columns:repeat(2,1fr)} .pf-grid{grid-template-columns:repeat(2,1fr)}
  .pf-summary.has-budget{grid-template-columns:repeat(3,1fr)}
  .pf-summary.has-six{grid-template-columns:repeat(3,1fr)}
  .kpi-row{grid-template-columns:repeat(2,1fr)} .grid-2{grid-template-columns:1fr} .grid-3{grid-template-columns:1fr} .rep-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:860px){
  .ws.show{grid-template-columns:1fr}
  .pf-shell{grid-template-columns:1fr}
  .ws.sb-collapsed,.pf-shell.sb-collapsed{grid-template-columns:1fr}
  .ws.sb-collapsed .sidebar,.pf-shell.sb-collapsed .sidebar{pointer-events:auto}
  .sidebar{position:fixed; left:0; top:0; width:248px; transform:translateX(-100%); transition:transform .25s; box-shadow:var(--shadow-lg)}
  .sidebar.open{transform:none}
  .search{display:none}
  .sb-collapse-btn{display:none}
}
@media(max-width:620px){
  .pf-summary{grid-template-columns:repeat(2,1fr)} .pf-grid{grid-template-columns:1fr}
  .pf-summary.has-budget{grid-template-columns:repeat(2,1fr)}
  .pf-summary.has-six{grid-template-columns:repeat(2,1fr)}
  .kpi-row{grid-template-columns:1fr 1fr} .rep-grid{grid-template-columns:1fr}
  .pf-hero h1{font-size:27px}
  table.tbl th:nth-child(n+5),table.tbl td:nth-child(n+5){display:none}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important; transition:none!important}}

/* ===== v2 refinements ===== */
/* compact portfolio */
.pf-top .bar{padding-top:10px;padding-bottom:10px}
.pf-hero{padding:26px 26px 4px}
.pf-hero h1{font-size:25px; margin:6px 0 4px}
.pf-hero p{font-size:13.5px}
.pf-summary{margin:16px auto 4px; gap:12px}
.pf-stat{padding:12px 15px}
.pf-stat .n{font-size:22px}
.pf-stat .l{font-size:12px}
.pf-grid{margin:18px auto 0; gap:14px}
.bld-illus{height:92px}
.bld-body{padding:13px 15px 14px}
.bld-body h3{font-size:16px}
.bld-body .meta{margin-bottom:11px}
.bld-kpi{padding:7px 8px}
.bld-kpi .v{font-size:16px}
.bld-foot{margin-top:12px}

/* denser sidebar for full module list */
.sb-logo{padding:15px 16px 12px}
.sb-bld{margin:12px 12px 6px; padding:8px 10px}
.sb-nav{padding:6px 9px}
.sb-sec{padding:11px 10px 4px}
.nav-item{padding:7px 11px; font-size:13px; margin-bottom:1px}
.nav-item .ic{width:17px; height:17px}

/* role picker in topbar */
.role-pick{display:flex; align-items:center; gap:6px; border:1px solid var(--line); border-radius:9px; padding:0 6px 0 9px; height:38px; color:var(--muted); background:#fff}
.role-pick select{border:none; background:none; font-size:12.5px; font-weight:600; color:var(--ink); padding:8px 2px; cursor:pointer; outline:none}

/* reports role banner + locked cards */
.role-banner{display:flex; align-items:center; gap:9px; background:#FFF7ED; border:1px solid #FCD9A8; color:#9A5B0B; border-radius:11px; padding:11px 15px; font-size:12.5px; margin-bottom:16px}
.role-banner svg{flex:0 0 auto}
.rep-card.locked{cursor:default; opacity:.72; background:#FAFBFC}
.rep-card.locked:hover{transform:none; box-shadow:var(--shadow)}
/* expandable metric rows (report sub-indicators) */
.metric-list{list-style:none; margin:0; padding:0}
.metric-row{border-bottom:1px solid var(--line)}
.metric-row:last-child{border-bottom:none}
.metric-head{display:flex; gap:10px; align-items:center; padding:9px 2px; cursor:pointer; transition:background .12s; border-radius:8px}
.metric-head:hover{background:var(--soft)}
.metric-num{flex:0 0 auto; width:22px; height:22px; border-radius:6px; background:var(--soft); color:var(--brand); display:grid; place-items:center; font-size:11px; font-weight:600}
.metric-row.open .metric-num{background:var(--brand); color:#fff}
.metric-label{flex:1; font-size:13px; color:var(--ink); line-height:1.45}
.metric-chev{flex:0 0 auto; color:var(--faint); display:grid; place-items:center; transition:transform .18s}
.metric-row.open .metric-chev{transform:rotate(90deg); color:var(--brand)}
.metric-detail{display:none; padding:4px 2px 14px 34px}
.metric-row.open .metric-detail{display:block; animation:rise .25s ease both}
.metric-detail .mini-tbl{width:100%; border-collapse:collapse; font-size:12.5px; margin-top:4px}
.metric-detail .mini-tbl th{text-align:left; color:var(--muted); font-weight:600; font-size:11px; padding:5px 8px; border-bottom:1px solid var(--line)}
.metric-detail .mini-tbl td{padding:6px 8px; border-bottom:1px solid var(--soft)}
.metric-detail .mini-stat{display:flex; gap:16px; flex-wrap:wrap; margin:6px 0 2px}
.metric-detail .mini-stat .ms{background:var(--soft); border-radius:9px; padding:8px 12px; min-width:96px}
.metric-detail .mini-stat .ms .l{font-size:10.5px; color:var(--muted)}
.metric-detail .mini-stat .ms .v{font-family:'Space Grotesk',sans-serif; font-weight:700; font-size:17px; margin-top:2px}

/* module placeholder page */
.soon-badge{font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:600; color:var(--amber-d); background:#FEF3DA; border:1px solid #FBD9A6; padding:5px 11px; border-radius:8px; white-space:nowrap; align-self:flex-end}
.module-card{display:flex; gap:18px; align-items:flex-start; background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); padding:24px}
.mod-ic{width:58px; height:58px; flex:0 0 auto; border-radius:14px; background:linear-gradient(150deg,#15375e,#0a1e33); color:#fff; display:grid; place-items:center}
.mod-ic svg{width:26px; height:26px}
.mod-body h2{font-family:'Space Grotesk',sans-serif; font-size:19px; margin:2px 0 6px}
.mod-body p{font-size:14px; color:var(--muted); margin:0 0 12px; max-width:64ch; line-height:1.55}
.mod-tags{display:flex; gap:8px; flex-wrap:wrap}
.mod-tag{display:inline-flex; align-items:center; gap:6px; font-size:11.5px; font-weight:600; color:var(--muted); background:var(--soft); border:1px solid var(--line); padding:5px 10px; border-radius:7px}
.mod-tag svg{width:13px; height:13px}
.fspec{margin-top:18px; background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); overflow:hidden}
.fspec>summary{list-style:none; cursor:pointer; display:flex; align-items:center; gap:10px; padding:14px 18px; font-weight:700; font-size:14px; color:var(--navy); user-select:none}
.fspec>summary::-webkit-details-marker{display:none}
.fspec>summary::after{content:"▾"; margin-left:auto; color:var(--muted); transition:transform .2s}
.fspec[open]>summary::after{transform:rotate(180deg)}
.fspec>summary:hover{background:var(--soft)}
.fs-ic svg{width:16px; height:16px; color:var(--amber-d)}
.fs-code{font-family:'JetBrains Mono',monospace; font-size:11px; font-weight:700; color:#fff; background:var(--navy); padding:3px 8px; border-radius:6px}
.fs-win{font-size:12px; font-weight:500; color:var(--muted)}
.fspec .tbl-wrap{padding:0 14px 16px}
.fs-tbl th, .fs-tbl td{font-size:12.5px}
.fs-type{display:inline-block; font-size:11px; font-weight:600; padding:2px 8px; border:1px solid; border-radius:6px}
.fs-req{font-size:11px; font-weight:700; color:#16A34A}
.fs-link{display:inline-block; font-family:'JetBrains Mono',monospace; font-size:10.5px; font-weight:600; color:var(--navy); background:var(--soft); border:1px solid var(--line); padding:2px 6px; border-radius:5px; margin:1px}
.fs-fill{min-width:200px; max-width:280px; font-size:12px; color:var(--ink); line-height:1.45}
.fs-act{min-width:200px; max-width:300px; font-size:12px; color:var(--muted); line-height:1.45}
.mw-card{background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); overflow:hidden}
.mw-head{display:flex; align-items:flex-start; justify-content:space-between; gap:12px; padding:16px 20px; border-bottom:1px solid var(--line); background:var(--soft)}
.mw-head h2{margin:0; font-size:16px; color:var(--navy)}
.mw-note{display:inline-flex; align-items:center; gap:6px; font-size:11.5px; color:var(--muted); margin-top:4px}
.mw-note svg{width:13px; height:13px}
.mw-form{padding:20px 20px 6px}
.mw-form .fld label{display:flex; align-items:center; gap:6px; flex-wrap:wrap}
.fc-type{font-size:10.5px; font-weight:600; opacity:.8}
.rq{color:#DC2626; font-weight:700}
.mw-form input:disabled,.mw-form select:disabled,.mw-form textarea:disabled{background:#fff; color:var(--muted); cursor:default; opacity:1}
.mw-form .auto-cell,.mw-form .calc-cell{font-style:italic; color:#94a3b8; background:#fafbfc}
.file-cell{display:flex; align-items:center; gap:8px; border:1px dashed var(--line); border-radius:10px; padding:10px 12px; font-size:12.5px; color:var(--muted); background:#fafbfc}
.file-cell svg{width:15px; height:15px}
.mw-foot{display:flex; justify-content:flex-end; gap:10px; padding:14px 20px; border-top:1px solid var(--line); background:var(--soft)}
.mw-foot .btn:disabled{opacity:.55; cursor:default}
.cf-sub{display:flex; align-items:center; gap:6px; font-size:11.5px; color:var(--muted); margin-top:5px}
.cf-sub svg{width:13px; height:13px}
.modal-head{align-items:flex-start}

/* locked page */
.locked-page{background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); padding:48px 24px; text-align:center}
.locked-page .lk{display:inline-grid; place-items:center; width:60px; height:60px; border-radius:50%; background:#fde8e8; color:#DC2626; margin-bottom:14px}
.locked-page .lk svg{width:26px; height:26px}
.locked-page h2{font-family:'Space Grotesk',sans-serif; font-size:20px; margin:0 0 8px}
.locked-page p{color:var(--muted); font-size:13.5px; margin:0 0 18px; line-height:1.6}
.locked-page .btn{display:inline-flex}

/* ============ RIGHTS / ROLES PAGE ============ */
.rights-page{padding:0 4px 24px}
.rights-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap}
.rights-head h1{font-family:'Space Grotesk',sans-serif;font-size:26px;margin:0 0 4px;color:var(--navy)}
.rights-head p{margin:0;color:var(--muted);font-size:13.5px}
.rights-total{display:inline-flex;align-items:center;height:36px;padding:0 14px;border-radius:999px;background:#E8EEF8;color:var(--brand);font-size:12.5px;font-weight:700;white-space:nowrap}
.rights-grid{display:grid;grid-template-columns:minmax(280px,0.95fr) minmax(0,1.35fr);gap:16px;align-items:start}
@media(max-width:960px){.rights-grid{grid-template-columns:1fr}}
.rights-card{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);overflow:hidden;min-height:420px;display:flex;flex-direction:column}
.rights-card-h{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;color:#fff}
.rights-card-h.purple{background:linear-gradient(135deg,#6B4DE6,#5B3FD4)}
.rights-card-h.green{background:linear-gradient(135deg,#16A34A,#15803D)}
.rights-card-h .left{display:flex;align-items:center;gap:10px;min-width:0}
.rights-card-h .hic{width:36px;height:36px;border-radius:10px;background:rgba(255,255,255,.18);display:grid;place-items:center;flex:0 0 auto}
.rights-card-h .hic svg{width:18px;height:18px}
.rights-card-h b{display:block;font-size:14.5px;line-height:1.2}
.rights-card-h span{display:block;font-size:11.5px;opacity:.88;margin-top:2px}
.rights-btn{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 12px;border-radius:9px;background:rgba(255,255,255,.95);color:#5B3FD4;font-size:12.5px;font-weight:700;border:none;cursor:pointer;white-space:nowrap}
.rights-card-h.green .rights-btn{color:#15803D}
.rights-btn svg{width:14px;height:14px}
.rights-btn.save:disabled{opacity:.55;cursor:default}
.rights-btn.save.hot{background:#fff;box-shadow:0 0 0 2px rgba(255,255,255,.35)}
.rights-card-b{padding:12px;flex:1;overflow:auto;max-height:calc(100vh - 220px)}
.rights-role{width:100%;display:flex;align-items:center;gap:12px;text-align:left;padding:11px 12px;border-radius:12px;border:1px solid transparent;background:transparent;margin-bottom:6px;cursor:pointer;transition:background .12s,border-color .12s}
.rights-role:hover{background:var(--soft)}
.rights-role.on{background:#EEF4FF;border-color:#BFDBFE}
.rights-role-acts{display:inline-flex;gap:4px;flex:0 0 auto;align-items:center}
.rights-role-act{width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:#fff;color:var(--muted);display:grid;place-items:center;cursor:pointer;padding:0}
.rights-role-act:hover{color:var(--brand);border-color:#BFDBFE;background:#EEF4FF}
.rights-role-act.danger:hover{color:#DC2626;border-color:#FECACA;background:#FEF2F2}
.rights-role-act svg{width:14px;height:14px}
.rights-av{width:40px;height:40px;border-radius:50%;background:#EDE9FE;color:#6B4DE6;display:grid;place-items:center;flex:0 0 auto}
.rights-av svg{width:18px;height:18px}
.rights-role-meta{flex:1;min-width:0}
.rights-role-meta .nm{display:block;font-weight:700;font-size:13.5px;color:var(--ink)}
.rights-role-meta .sub{display:block;font-size:11.5px;color:var(--muted);margin-top:2px}
.rights-role-meta .dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#16A34A;margin-right:4px;vertical-align:middle}
.rights-check{width:22px;height:22px;border-radius:50%;background:#6B4DE6;color:#fff;display:grid;place-items:center;flex:0 0 auto}
.rights-check svg{width:12px;height:12px}
.rights-bulk{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:10px 12px;border-radius:10px;background:#EEF4FF;border:1px solid #BFDBFE;margin-bottom:14px;font-size:13px}
.rights-bulk label{display:inline-flex;align-items:center;gap:8px;font-weight:600;cursor:pointer}
.rights-bulk em{font-style:normal;font-size:11.5px;font-weight:700;color:#1D4ED8;background:#DBEAFE;padding:3px 8px;border-radius:999px}
.rights-group{margin-bottom:16px}
.rights-group-h{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.rights-group-h .gic{width:32px;height:32px;border-radius:9px;background:#EDE9FE;color:#6B4DE6;display:grid;place-items:center}
.rights-group-h .gic svg{width:15px;height:15px}
.rights-group-h b{display:block;font-size:13.5px}
.rights-group-h span{display:block;font-size:11px;color:var(--muted)}
.rights-perm-list{display:flex;flex-direction:column;gap:4px}
.rights-perm{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:10px;border:1px solid transparent;cursor:pointer}
.rights-perm:hover{background:var(--soft)}
.rights-perm.on{background:#F0FDF4;border-color:#BBF7D0}
.rights-perm.changed{box-shadow:inset 3px 0 0 #6B4DE6}
.rights-perm input{width:16px;height:16px;accent-color:#16A34A;flex:0 0 auto}
.rights-perm .txt{flex:1;font-size:13px;line-height:1.35}
.rights-perm .code{display:block;font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--faint);margin-top:2px}
.rights-perm .chg{width:8px;height:8px;border-radius:50%;background:#16A34A;flex:0 0 auto}

@media(max-width:560px){
  .tb-right{gap:6px}
  .btn-amber .nv-label{display:none}
  .role-pick{padding:0 6px}
  .module-card{flex-direction:column; gap:14px}
}

/* ---- Theme settings ---- */
.theme-panel .theme-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-top:14px}
.theme-swatch{display:flex;flex-direction:column;gap:6px;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--soft)}
.theme-swatch label{font-size:13px;font-weight:650;color:var(--ink)}
.theme-swatch .hint{font-size:11.5px;color:var(--muted);line-height:1.35;min-height:2.6em}
.theme-swatch input[type=color]{width:100%;height:42px;border:1px solid var(--line);border-radius:8px;padding:2px;background:#fff;cursor:pointer}
.theme-hex-row{display:flex;align-items:center;gap:6px}
.theme-hex-input{flex:1;min-width:0;font-family:'JetBrains Mono',monospace;font-size:12.5px;letter-spacing:.02em;border:1px solid var(--line);border-radius:8px;padding:7px 9px;background:#fff;color:var(--ink);text-transform:uppercase}
.theme-hex-input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb, var(--brand) 18%, transparent)}
.theme-hex-copy{flex:0 0 auto;padding:6px 9px;font-size:11.5px;white-space:nowrap}
.theme-brand-row{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start;margin-bottom:4px}
.theme-logo-block{flex:1;min-width:220px}
.theme-logo-block>label{display:block;font-size:12.5px;font-weight:600;color:var(--muted);margin-bottom:6px}
.theme-logo-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.theme-logo-preview{height:48px;width:auto;max-width:160px;object-fit:contain;background:#0B2138;padding:8px 12px;border-radius:10px;border:1px solid var(--line)}
.theme-logo-empty{height:48px;min-width:120px;display:grid;place-items:center;padding:0 14px;border-radius:10px;border:1px dashed var(--line);color:var(--muted);font-size:12px;background:var(--card)}
.theme-logo-actions{display:flex;gap:8px;flex-wrap:wrap}
.theme-preview-wrap{margin-top:16px;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--soft)}
.settings-layout{display:flex;flex-direction:column;gap:0}
.settings-section{border:1px solid var(--line);box-shadow:var(--shadow)}
.settings-section .panel-head h3{font-size:15px;color:var(--navy-3)}
.settings-cat-bar{display:flex;flex-direction:column;gap:10px}
.settings-cat-select-wrap{display:flex;flex-direction:column;gap:4px;max-width:360px}
.settings-cat-select{width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;font-size:13.5px}
.settings-cat-chips{display:flex;flex-wrap:wrap;gap:6px}
.settings-chip{padding:5px 11px;border-radius:999px;border:1px solid var(--line);background:#fff;font-size:12px;color:var(--muted);cursor:pointer}
.settings-chip.on{background:var(--amber);border-color:transparent;color:#fff;font-weight:600}
.settings-ops-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px}
.settings-ops-grid .hint,.theme-logo-block .hint{display:block;margin-top:5px;font-size:11.5px;color:var(--muted);line-height:1.35}
.theme-mock-login{display:flex;align-items:center;justify-content:center;min-height:44px;color:#fff;font-weight:700;letter-spacing:.04em}
.theme-preview-wrap{margin-top:14px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--soft)}
.theme-mock{display:flex;flex-direction:column;gap:8px}
.theme-mock-login{height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:600;letter-spacing:.04em}
.theme-mock-shell{display:grid;grid-template-columns:72px 1fr;min-height:110px;border-radius:10px;overflow:hidden;border:1px solid var(--line)}
.theme-mock-side{position:relative;padding:8px 6px;display:flex;flex-direction:column;gap:5px}
.theme-mock-side i{display:block;height:8px;border-radius:4px;background:rgba(255,255,255,.22)}
.theme-mock-foot{margin-top:auto;height:14px;border-radius:4px;opacity:.95}
.theme-mock-main{display:flex;flex-direction:column;min-width:0}
.theme-mock-head{height:22px;border-bottom:1px solid rgba(0,0,0,.06)}
.theme-mock-card{margin:10px;flex:1;border-radius:8px;background:#fff;border:1px solid rgba(0,0,0,.06);min-height:36px}
.theme-mock-btns{display:flex;gap:6px;padding:0 10px 10px}
.theme-mock-btns span{height:10px;width:36px;border-radius:99px;display:inline-block}
.settings-adv{margin-top:14px;border:1px solid var(--line);border-radius:12px;background:var(--card);overflow:hidden}
.settings-adv>summary{cursor:pointer;padding:12px 16px;font-weight:650;font-size:13.5px;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:8px;user-select:none}
.settings-adv>summary::-webkit-details-marker{display:none}
.settings-adv>summary::after{content:"▾";color:var(--muted);font-size:12px}
.settings-adv[open]>summary::after{content:"▴"}
.settings-adv .settings-adv-body{padding:0 14px 14px;border-top:1px solid var(--line)}


/* ---- Warehouse command center ---- */
.wh-page{max-width:1280px}
.wh-tip{background:linear-gradient(135deg,#f8fafc,#eef4fb);border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin:0 0 14px}
.wh-tip strong{display:block;font-size:13.5px;color:var(--ink);margin-bottom:4px}
.wh-tip p{margin:0;font-size:12.5px;color:var(--muted);line-height:1.45;max-width:80ch}
.wh-kpi{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-bottom:14px}
.wh-kpi-card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px;box-shadow:var(--shadow)}
.wh-kpi-card.warn{border-color:#f5d0a9;background:#fff8f0}
.wh-kpi-card.danger{border-color:#fecaca;background:#fff5f5}
.wh-kpi-l{display:block;font-size:11.5px;color:var(--muted);font-weight:600;margin-bottom:4px}
.wh-kpi-v{font-family:'Space Grotesk',sans-serif;font-size:22px;font-weight:700;letter-spacing:-.02em;color:var(--ink)}
.wh-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.wh-toolbar-actions{display:flex;gap:8px;flex-wrap:wrap}
.wh-q{width:min(320px,100%);height:38px;border:1px solid var(--line);border-radius:10px;padding:0 12px;background:#fff;font-size:13px}
.wh-table .wh-name{font-weight:650}
.wh-actions{display:flex;flex-wrap:wrap;gap:4px;min-width:220px}
.wh-panel{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow)}
.wh-panel h3{margin:0 0 6px;font-size:15px}
.wh-user-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;margin-top:8px;max-height:240px;overflow:auto;padding:4px}
.wh-check{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:#fff;font-size:12.5px;cursor:pointer}
.wh-check input{margin-top:2px}
@media(max-width:900px){
  .wh-kpi{grid-template-columns:repeat(2,1fr)}
  .wh-actions{min-width:0}
}
