/* ─────────────────────────────────────────────────────────────
   CHANNEL IP · CUSTOMER PORTAL — stylesheet
   Lifted unchanged from portal-design-mockup.html (2026-08-12) so the live app
   looks exactly like the design that was signed off. Only the mockup's own
   chrome (the MOCKUP toolbar) and the internal annotation boxes were removed —
   those were notes to ourselves and are not the customer's to read.
   ───────────────────────────────────────────────────────────── */

/* LIGHT — recommended for the customer-facing surface */
:root{
  --bg0:#f4f6f1; --bg1:#ffffff; --bg2:#ffffff; --bg3:#f1f4ec;
  --line:#e0e5da; --line2:#eef1e9;
  --txt:#2E2E2E; --mut:#6C6D71; --dim:#9aa196;
  --accent:#8DC53E;          /* fills, active state, brand */
  --accent-txt:#5b8a1f;      /* green as TEXT — contrast-safe on light */
  --accent-soft:#eef7e0;
  --warn:#b5730a; --warn-soft:#fdf3e0;
  --danger:#c0403c; --danger-soft:#fdeceb;
  --ok:#5b8a1f; --ok-soft:#eef7e0;
  --neutral-soft:#eef0ec;
  --shadow:0 1px 2px rgba(46,46,46,.05), 0 1px 8px rgba(46,46,46,.04);
  /* customer accent — set per customer, CIP green stays constant */
  --cust:#2B2D33;
}
/* DARK — the internal Operations Design Standard */
html[data-theme="dark"]{
  --bg0:#0a130d; --bg1:#0d1710; --bg2:#16241a; --bg3:#1c2c20;
  --line:#2b3d2f; --line2:#223021;
  --txt:#e8efe6; --mut:#9aae93; --dim:#5f7359;
  --accent:#8cc63f; --accent-txt:#a9d96a; --accent-soft:#1e3318;
  --warn:#f2a93b; --warn-soft:#3a2c10;
  --danger:#f0625f; --danger-soft:#3a1c1c;
  --ok:#8cc63f; --ok-soft:#1e3318;
  --neutral-soft:#22301f;
  --shadow:none;
  --cust:#c9cfd8;
}

*{box-sizing:border-box}
body{margin:0;background:var(--bg0);color:var(--txt);
     font:400 14px/1.55 Roboto,system-ui,sans-serif;-webkit-font-smoothing:antialiased}
h1,h2,h3,h4,.mont{font-family:Montserrat,system-ui,sans-serif}
a{color:var(--accent-txt)}
.wrap{max-width:1180px;margin:0 auto;padding:0 20px}

/* ── mockup chrome (NOT part of the product) ────────────────── */

/* ── brand lockup ───────────────────────────────────────────── */
.lock{display:flex;align-items:center;gap:11px}
.mark{width:34px;height:34px;border-radius:9px;background:var(--accent);flex:none}
.mark.sm{width:26px;height:26px;border-radius:7px}
.word{font:700 17px/1.1 Montserrat,sans-serif;letter-spacing:-.2px}
.word .g{color:var(--accent-txt)}
.sub{font:400 11.5px/1.3 Roboto,sans-serif;color:var(--mut);margin-top:2px}

/* ── top bar ────────────────────────────────────────────────── */
.top{background:var(--bg1);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:40}
.top .wrap{display:flex;align-items:center;gap:16px;height:66px}
.top .right{margin-left:auto;display:flex;align-items:center;gap:12px}
.stamp{font:400 10.5px/1.3 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--dim);text-align:right}
.cobrand{display:flex;align-items:center;gap:10px;padding-left:16px;margin-left:2px;
         border-left:1px solid var(--line)}
.cobrand .cn{font:700 13px Montserrat,sans-serif;color:var(--cust)}
.cobrand .cl{font:400 10px Roboto,sans-serif;color:var(--dim);text-transform:uppercase;letter-spacing:.7px}
.avatar{width:32px;height:32px;border-radius:99px;background:var(--bg3);border:1px solid var(--line);
        display:grid;place-items:center;font:700 12px Montserrat,sans-serif;color:var(--mut)}
.switcher{display:flex;align-items:center;gap:7px;background:var(--bg3);border:1px solid var(--line);
        border-radius:99px;padding:5px 12px;font:500 12.5px Roboto,sans-serif;color:var(--txt);cursor:pointer}
.switcher .cap{font-size:10px;color:var(--dim);text-transform:uppercase;letter-spacing:.6px}

/* ── nav ────────────────────────────────────────────────────── */
.nav{background:var(--bg1);border-bottom:1px solid var(--line);position:sticky;top:66px;z-index:39}
.nav .wrap{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
.nav .wrap::-webkit-scrollbar{display:none}
.tab{border:0;background:none;color:var(--mut);font:500 13.5px Roboto,sans-serif;
     padding:14px 11px 12px;border-bottom:2px solid transparent;cursor:pointer;white-space:nowrap;
     display:flex;align-items:center;gap:7px}
.tab:hover{color:var(--txt)}
.tab.on{color:var(--txt);border-bottom-color:var(--accent);font-weight:700}
.tab .cnt{background:var(--neutral-soft);color:var(--mut);border-radius:99px;
          padding:1px 7px;font:700 10.5px Roboto,sans-serif}
.tab.on .cnt{background:var(--accent-soft);color:var(--accent-txt)}
.tab.lock{color:var(--dim);cursor:default}
.tab.lock:hover{color:var(--dim)}
.tab .pad{opacity:.65}

/* ── page ───────────────────────────────────────────────────── */
main{padding:26px 0 70px}
.phead{display:flex;align-items:flex-end;gap:14px;margin:0 0 18px}
.phead h1{margin:0;font-size:21px;font-weight:700;letter-spacing:-.2px}
.phead p{margin:3px 0 0;color:var(--mut);font-size:13px}
.live{margin-left:auto;display:flex;align-items:center;gap:7px;color:var(--mut);
      font-size:11.5px;white-space:nowrap}
.dot{width:7px;height:7px;border-radius:99px;background:var(--accent);
     box-shadow:0 0 0 0 rgba(141,197,62,.55);animation:pulse 2.4s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(141,197,62,.5)}70%{box-shadow:0 0 0 7px rgba(141,197,62,0)}100%{box-shadow:0 0 0 0 rgba(141,197,62,0)}}

/* ── stat tiles ─────────────────────────────────────────────── */
.tiles{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:24px}
.tile{background:var(--bg2);border:1px solid var(--line);border-radius:12px;padding:15px 16px;
      box-shadow:var(--shadow)}
.tile .n{font:700 27px/1.05 Montserrat,sans-serif;letter-spacing:-.5px}
.tile .l{font:500 10px Roboto,sans-serif;color:var(--mut);text-transform:uppercase;
         letter-spacing:.8px;margin-top:6px}
.tile .s{font-size:11.5px;color:var(--dim);margin-top:4px}
.tile.good .n{color:var(--ok)} .tile.warn .n{color:var(--warn)} .tile.bad .n{color:var(--danger)}

/* ── cards ──────────────────────────────────────────────────── */
.card{background:var(--bg2);border:1px solid var(--line);border-radius:12px;
      box-shadow:var(--shadow);overflow:hidden;margin-bottom:18px}
.card>header{display:flex;align-items:center;gap:12px;padding:14px 18px;
      border-bottom:1px solid var(--line2)}
.card>header h2{margin:0;font-size:14.5px;font-weight:700}
.card>header .meta{margin-left:auto;font-size:11.5px;color:var(--dim)}
.card .body{padding:16px 18px}
.cols{display:grid;grid-template-columns:1.55fr 1fr;gap:18px;align-items:start}

/* ── tables ─────────────────────────────────────────────────── */
table{width:100%;border-collapse:collapse}
th{font:500 10px Roboto,sans-serif;color:var(--mut);text-transform:uppercase;letter-spacing:.8px;
   text-align:left;padding:10px 18px;border-bottom:1px solid var(--line2);white-space:nowrap}
td{padding:12px 18px;border-bottom:1px solid var(--line2);font-size:13px;vertical-align:top}
tr:last-child td{border-bottom:0}
tbody tr:hover td{background:var(--bg3)}
.site{font-weight:500}
.meta2{color:var(--dim);font-size:11.5px;margin-top:2px}
.sn{font:400 11.5px ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--dim)}
.num{text-align:right;font-variant-numeric:tabular-nums}

/* ── pills & badges ─────────────────────────────────────────── */
.pill{display:inline-flex;align-items:center;gap:5px;border-radius:99px;padding:3px 10px;
      font:500 11.5px Roboto,sans-serif;white-space:nowrap}
.pill.ok{background:var(--ok-soft);color:var(--ok)}
.pill.warn{background:var(--warn-soft);color:var(--warn)}
.pill.bad{background:var(--danger-soft);color:var(--danger)}
.pill.neu{background:var(--neutral-soft);color:var(--mut)}
.pill .d{width:6px;height:6px;border-radius:99px;background:currentColor}
.chip{display:inline-block;border-radius:5px;padding:2px 6px;font:700 10px Roboto,sans-serif;
      letter-spacing:.4px;background:var(--neutral-soft);color:var(--mut)}
.chip.col{background:var(--accent-soft);color:var(--accent-txt)}

/* ── toner bars ─────────────────────────────────────────────── */
.toner{display:flex;gap:9px}
.tk{width:26px;text-align:center}
.tk .bar{height:34px;border-radius:3px;background:var(--neutral-soft);position:relative;
         overflow:hidden;border:1px solid var(--line)}
.tk .fill{position:absolute;bottom:0;left:0;right:0;border-radius:0 0 3px 3px}
.tk .v{font:500 10px Roboto,sans-serif;color:var(--mut);margin-top:3px}
.tk.out .bar{outline:1.5px solid var(--danger);outline-offset:-1.5px}
.tk.out .v{color:var(--danger);font-weight:700}
.tk.low .v{color:var(--warn);font-weight:700}

/* ── report cards ───────────────────────────────────────────── */
.reps{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.rep{background:var(--bg2);border:1px solid var(--line);border-radius:12px;overflow:hidden;
     box-shadow:var(--shadow);display:flex;flex-direction:column}
.rep .prev{height:98px;background:linear-gradient(135deg,var(--bg3),var(--accent-soft));
     border-bottom:1px solid var(--line2);display:grid;place-items:center}
.rep .prev span{font:700 11px Montserrat,sans-serif;color:var(--accent-txt);
     letter-spacing:1.2px;text-transform:uppercase;opacity:.75}
.rep .in{padding:14px 16px;flex:1;display:flex;flex-direction:column;gap:5px}
.rep h3{margin:0;font-size:14px;font-weight:700}
.rep .per{color:var(--mut);font-size:12px}
.rep .ver{margin-top:auto;padding-top:10px;display:flex;align-items:center;gap:8px;
     font:400 10.5px ui-monospace,Menlo,monospace;color:var(--dim)}
.frozen{background:var(--neutral-soft);color:var(--mut);border-radius:4px;padding:2px 6px;
     font:500 10px Roboto,sans-serif;letter-spacing:.3px}

/* ── locked panel ───────────────────────────────────────────── */
.locked{background:var(--bg2);border:1px dashed var(--line);border-radius:12px;
     padding:52px 26px;text-align:center}
.locked .pad{font-size:30px;opacity:.35;line-height:1}
.locked h2{margin:14px 0 6px;font-size:17px}
.locked p{margin:0 auto;max-width:520px;color:var(--mut);font-size:13.5px}
.locked .soon{display:inline-block;margin-top:16px;background:var(--neutral-soft);color:var(--mut);
     border-radius:99px;padding:5px 14px;font:500 11.5px Roboto,sans-serif}

/* ── splash (anonymous) ─────────────────────────────────────── */
.splash{min-height:100vh;display:flex;flex-direction:column;background:var(--bg1)}
.splash .sh{border-bottom:1px solid var(--line)}
.splash .sh .wrap{display:flex;align-items:center;height:74px}
.splash .sh .btn{margin-left:auto}
.hero{flex:1;display:grid;place-items:center;padding:56px 20px;
      background:radial-gradient(900px 420px at 50% -12%,var(--accent-soft),transparent 68%)}
.hero .in{max-width:760px;text-align:center}
.hero h1{font-size:34px;line-height:1.15;margin:0 0 14px;letter-spacing:-.7px}
.hero h1 em{font-style:normal;color:var(--accent-txt)}
.hero p{color:var(--mut);font-size:15.5px;margin:0 auto 26px;max-width:520px}
.btn{display:inline-flex;align-items:center;gap:8px;background:var(--accent);color:#14230a;
     border:1px solid var(--accent);border-radius:99px;padding:11px 22px;
     font:700 13.5px Roboto,sans-serif;cursor:pointer;text-decoration:none}
.btn.ghost{background:transparent;color:var(--txt);border-color:var(--line)}
.support{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:34px}
.sc{background:var(--bg2);border:1px solid var(--line);border-radius:11px;padding:14px 20px;
    min-width:190px;text-align:left;box-shadow:var(--shadow)}
.sc .k{font:500 10px Roboto,sans-serif;color:var(--mut);text-transform:uppercase;letter-spacing:.8px}
.sc .v{font:700 14.5px Montserrat,sans-serif;margin-top:4px}
.splash footer{border-top:1px solid var(--line);padding:18px 0;color:var(--dim);font-size:12px}
.splash footer .wrap{display:flex;gap:14px;flex-wrap:wrap}
.qr{margin-top:30px;font-size:12px;color:var(--dim)}

/* ── annotation callouts (mockup only) ──────────────────────── */

.hide{display:none !important}

@media(max-width:960px){
  .tiles{grid-template-columns:repeat(2,1fr)}
  .cols{grid-template-columns:1fr}
  .reps{grid-template-columns:1fr}
  .top .wrap{height:auto;padding-top:12px;padding-bottom:12px;flex-wrap:wrap}
  .stamp{display:none}
  .cobrand{border-left:0;padding-left:0}
  .hero h1{font-size:26px}
  th,td{padding-left:14px;padding-right:14px}
}

/* ═════════════════════════════════════════════════════════════
   LIVE-APP ADDITIONS
   Everything above is the signed-off design. Everything below exists
   because real data has states a mockup never has: it is still
   loading, there is none of it, or the upstream is having a bad day.
   ═════════════════════════════════════════════════════════════ */

/* ── skeletons ──────────────────────────────────────────────── */
@keyframes shimmer{0%{background-position:-420px 0}100%{background-position:420px 0}}
.sk{border-radius:5px;background:var(--bg3);
    background-image:linear-gradient(90deg,transparent 0,rgba(141,197,62,.09) 40%,transparent 80%);
    background-size:420px 100%;background-repeat:no-repeat;
    animation:shimmer 1.25s ease-in-out infinite;color:transparent!important}
.sk.t{height:11px;display:inline-block;width:96px;vertical-align:middle}
.sk.w40{width:40px}.sk.w70{width:70px}.sk.w130{width:130px}.sk.w180{width:180px}
.tile .n .sk{height:24px;width:52px;display:block}
@media (prefers-reduced-motion:reduce){.sk{animation:none}}

/* ── empty states ───────────────────────────────────────────── */
.empty{padding:44px 22px;text-align:center;color:var(--mut)}
.empty .ei{width:38px;height:38px;border-radius:10px;margin:0 auto 12px;
  background:var(--accent-soft);border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;color:var(--accent-txt);
  font:700 17px Montserrat,sans-serif}
.empty h3{margin:0 0 5px;font-size:15px;color:var(--txt)}
.empty p{margin:0 auto;max-width:44ch;font-size:13px;line-height:1.6}

/* ── banners: degraded upstream, and hard failure ────────────── */
.banner{display:flex;gap:11px;align-items:flex-start;margin:0 0 18px;padding:12px 15px;
  border-radius:9px;font-size:13px;line-height:1.55;border:1px solid}
.banner .bi{flex:none;width:18px;height:18px;border-radius:50%;margin-top:1px;
  display:flex;align-items:center;justify-content:center;font:700 11px Montserrat,sans-serif}
.banner.warn{background:var(--warn-soft);border-color:var(--warn);color:var(--txt)}
.banner.warn .bi{background:var(--warn);color:#fff}
.banner.bad{background:var(--danger-soft);border-color:var(--danger);color:var(--txt)}
.banner.bad .bi{background:var(--danger);color:#fff}
.banner b{font-family:Montserrat,sans-serif;font-weight:700}
.banner .retry{margin-left:auto;flex:none}

/* ── sortable table headers ─────────────────────────────────── */
th.srt{cursor:pointer;user-select:none;white-space:nowrap}
th.srt:hover{color:var(--accent-txt)}
th.srt .ar{opacity:.35;font-size:9px;margin-left:3px}
th.srt.on{color:var(--accent-txt)}
th.srt.on .ar{opacity:1}

/* ── pagination ─────────────────────────────────────────────── */
.pager{display:flex;align-items:center;gap:10px;padding:12px 18px;
  border-top:1px solid var(--line2);font-size:12.5px;color:var(--mut)}
.pager .grow{margin-left:auto;display:flex;gap:7px}
.pager button{font:600 12px Roboto,sans-serif;padding:6px 12px;border-radius:7px;
  border:1px solid var(--line);background:var(--bg1);color:var(--txt);cursor:pointer}
.pager button:hover:not(:disabled){border-color:var(--accent);color:var(--accent-txt)}
.pager button:disabled{opacity:.4;cursor:default}

/* ── toner cell extras ──────────────────────────────────────── */
.tk.nd .bar{background:repeating-linear-gradient(45deg,var(--bg3),var(--bg3) 3px,var(--bg2) 3px,var(--bg2) 6px)}
.tk .lbl{font-size:8.5px;color:var(--dim);text-align:center;margin-top:2px;
  font-family:Montserrat,sans-serif;font-weight:600;letter-spacing:.2px}
.nodata{color:var(--dim);font-size:12px;font-style:italic}

/* ── the QR serial chip on the anonymous splash ─────────────── */
.qrchip{display:inline-flex;align-items:center;gap:8px;margin:0 0 16px;padding:7px 13px;
  border-radius:999px;background:var(--accent-soft);border:1px solid var(--accent);
  font:600 12.5px Roboto,sans-serif;color:var(--txt)}
.qrchip .sn{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}

/* ── sign-out / account menu in the top bar ─────────────────── */
.top .out{font:600 11.5px Roboto,sans-serif;color:var(--mut);text-decoration:none;
  padding:5px 10px;border-radius:7px;border:1px solid var(--line)}
.top .out:hover{color:var(--accent-txt);border-color:var(--accent)}
.switcher select{font:600 12.5px Roboto,sans-serif;color:var(--txt);background:var(--bg1);
  border:1px solid var(--line);border-radius:7px;padding:5px 8px;max-width:220px}

/* ── focus visibility: this is a keyboard-and-screen-reader app too ── */
a:focus-visible,button:focus-visible,select:focus-visible,th.srt:focus-visible{
  outline:2px solid var(--accent-txt);outline-offset:2px;border-radius:4px}
.vh{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* ── [hidden] must actually hide ─────────────────────────────────────────────
   The `hidden` attribute is only a UA-stylesheet display:none, so any author
   display rule beats it. `.switcher` is display:flex and `.qrchip` is
   inline-flex, which meant `hidden` silently did nothing and a single-account
   customer was shown an empty account switcher. Found by screenshotting, not by
   reading — the markup looked right. */
[hidden]{display:none!important}

/* ═════════════════════════════════════════════════════════════
   LEFT NAVIGATION
   The tab strip moved from a top bar to a left rail (24 Aug 2026).
   #tabs keeps its id and .tab keeps its class so app.js is untouched;
   only the container changed, from .nav .wrap to .snav. The old .top
   and .nav rules above are dead but harmless — kept so the splash
   pages, which still use .wrap, are not disturbed.
   ═════════════════════════════════════════════════════════════ */
#app{display:grid;grid-template-columns:248px 1fr;min-height:100vh}

.side{background:var(--bg1);border-right:1px solid var(--line);
      display:flex;flex-direction:column;position:sticky;top:0;height:100vh;z-index:40}
.side .brand{padding:19px 18px 15px}
.side .word{font:700 15.5px/1.15 Montserrat,sans-serif}
.side .mark{width:32px;height:32px}

.side .cobrand{margin:0 14px 12px;padding:11px 12px;background:var(--bg3);
      border:1px solid var(--line);border-radius:10px;border-left:1px solid var(--line)}
.side .switcher{margin:0 14px 12px}

.snav{padding:2px 10px 8px;overflow-y:auto;flex:1}
.snav .tab{display:flex;align-items:center;gap:9px;width:100%;
      padding:9px 11px;margin:0 0 2px;border:0;border-radius:9px;background:none;
      color:var(--txt);font:500 13.5px Roboto,sans-serif;text-align:left;cursor:pointer}
.snav .tab:hover{background:var(--bg3)}
.snav .tab.on{background:var(--accent-soft);color:var(--accent-txt);font-weight:700;
      box-shadow:inset 2px 0 0 var(--accent)}
.snav .tab .cnt{margin-left:auto}
.snav .tab.on .cnt{background:var(--bg1);color:var(--accent-txt)}
.snav .tab.lock{color:var(--dim)}
.snav .tab.lock:hover{background:var(--bg3);color:var(--dim)}
.snav .tab .pad{flex:none;display:inline-flex;opacity:.6}
.snav .tab .pad svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.7}

.side .sfoot{border-top:1px solid var(--line);padding:11px 14px;
      display:flex;align-items:center;gap:10px}
.side .sfoot .stamp{text-align:left;flex:1;min-width:0}
.side .sfoot .out{margin-left:auto;flex:none}

.colmain{min-width:0}
.colmain .wrap{padding:0 28px}

@media(max-width:860px){
  #app{grid-template-columns:1fr}
  .side{position:static;height:auto;border-right:0;border-bottom:1px solid var(--line)}
  .side .brand{padding:14px 16px 10px}
  .snav{display:flex;gap:4px;overflow-x:auto;padding:4px 12px 8px;scrollbar-width:none}
  .snav::-webkit-scrollbar{display:none}
  .snav .tab{width:auto;margin:0;white-space:nowrap}
  .snav .tab.on{box-shadow:none}
  .side .sfoot{border-top:1px solid var(--line2)}
  .colmain .wrap{padding:0 16px}
}

/* ═══ LOG AN ISSUE (Channel IP staff only) ═══════════════════════════════════
   Ported from the Manulife portal's issue logger. Drawn only when /api/me says
   canLogIssues; POST /api/issue re-checks, so hiding it is cosmetic. Loud on
   purpose: staff should never miss it, and it must never read as customer UI. */
#issFab{position:fixed;right:22px;bottom:22px;z-index:1050;display:none;align-items:center;gap:9px;
  padding:13px 20px 13px 16px;border:none;border-radius:999px;background:var(--accent);color:#14230a;
  font:700 14px Roboto,sans-serif;letter-spacing:.01em;cursor:pointer;
  box-shadow:0 6px 18px rgba(141,197,62,.42),0 2px 6px rgba(16,24,40,.18);
  transition:transform 160ms ease,box-shadow 160ms ease}
#issFab.show{display:inline-flex}
#issFab:hover{transform:translateY(-2px);box-shadow:0 10px 26px rgba(141,197,62,.5),0 3px 8px rgba(16,24,40,.2)}
#issFab svg{width:19px;height:19px;flex:none}
#issFab .iss-tag{background:#14230a;color:var(--accent);font-size:10px;font-weight:800;letter-spacing:.1em;padding:3px 7px;border-radius:5px}
@media (max-width:560px){#issFab{right:14px;bottom:14px;padding:12px 15px}#issFab .iss-label{display:none}}

#issModal{display:none;position:fixed;inset:0;z-index:1100;background:rgba(21,24,28,.6);
  align-items:flex-start;justify-content:center;padding:28px 16px;overflow-y:auto}
#issModal.show{display:flex}
.iss-panel{background:var(--bg1);color:var(--txt);border:1px solid var(--line);border-radius:16px;width:100%;max-width:620px;
  box-shadow:0 24px 70px rgba(0,0,0,.34);overflow:hidden;animation:issIn 220ms ease}
@keyframes issIn{from{opacity:0;transform:translateY(-10px) scale(.985)}to{opacity:1;transform:none}}
.iss-head{border-top:4px solid var(--accent);padding:20px 24px 16px;border-bottom:1px solid var(--line);
  display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.iss-head h3{margin:0;font-size:18.5px;font-weight:700}
.iss-head p{margin:5px 0 0;font-size:13px;color:var(--mut)}
.iss-close{appearance:none;border:none;background:none;cursor:pointer;color:var(--mut);font-size:24px;line-height:1;padding:0 2px}
.iss-close:hover{color:var(--txt)}
.iss-body{padding:20px 24px 24px}
.iss-who{display:flex;align-items:center;gap:8px;margin:0 0 16px;font-size:12.5px;color:var(--mut)}
.iss-who b{color:var(--txt);font-weight:600}
.iss-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);flex:none}
.iss-field{margin:0 0 14px}
.iss-field label{display:block;font-size:12.5px;font-weight:600;margin:0 0 6px}
.iss-field label span{color:var(--mut);font-weight:400}
.iss-field input,.iss-field textarea{width:100%;font:14px Roboto,sans-serif;color:var(--txt);background:var(--bg2);
  border:1px solid var(--line);border-radius:9px;padding:10px 12px}
.iss-field textarea{resize:vertical;min-height:110px}
.iss-field input:focus,.iss-field textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.iss-field.invalid input,.iss-field.invalid textarea{border-color:var(--danger)}
.iss-field .iss-err{display:none;font-size:12px;color:var(--danger);margin-top:5px}
.iss-field.invalid .iss-err{display:block}
.iss-drop{border:1.5px dashed var(--line);border-radius:10px;padding:16px;text-align:center;cursor:pointer;
  transition:border-color 140ms ease,background 140ms ease}
.iss-drop:hover,.iss-drop.over{border-color:var(--accent);background:var(--accent-soft)}
.iss-drop p{margin:0;font-size:13px;color:var(--mut)}
.iss-drop b{color:var(--txt);font-weight:600}
.iss-files{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:7px}
.iss-file{display:flex;align-items:center;gap:10px;background:var(--bg3);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:13px}
.iss-file img{width:34px;height:34px;object-fit:cover;border-radius:5px;flex:none;background:#fff}
.iss-fname{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.iss-fsize{color:var(--mut);font-size:12px;flex:none}
.iss-file button{appearance:none;border:none;background:none;cursor:pointer;color:var(--mut);font-size:18px;line-height:1;padding:0 3px}
.iss-file button:hover{color:var(--danger)}
.iss-msg{margin-top:14px;font-size:13px;border-radius:8px;padding:10px 12px;display:none}
.iss-msg.show{display:block}
.iss-msg.err{background:var(--danger-soft);color:var(--danger);border:1px solid var(--danger)}
.iss-msg.ok{background:var(--ok-soft);color:var(--ok);border:1px solid var(--ok)}
.iss-actions{display:flex;align-items:center;gap:12px;margin-top:18px;flex-wrap:wrap}
.iss-actions .btn[disabled]{opacity:.6;cursor:default}
.iss-hint{font-size:12px;color:var(--mut)}
.iss-done{text-align:center;padding:10px 0 4px}
.iss-tick{width:46px;height:46px;border-radius:50%;background:var(--accent);color:#14230a;display:flex;align-items:center;justify-content:center;margin:0 auto 14px}
.iss-done h4{margin:0 0 6px;font-size:17px}
.iss-done p{margin:0;font-size:13.5px;color:var(--mut)}
.iss-done a{color:var(--accent-txt);font-weight:600}
.iss-done code{background:var(--bg3);border-radius:5px;padding:2px 6px;font-size:12.5px}

/* ═══ STAFF PREVIEW ══════════════════════════════════════════════════════════
   Channel IP staff viewing as a customer. Unmissable, and never shown to one. */
.staffbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 16px;padding:10px 14px;
  border:1px solid var(--accent);border-left:4px solid var(--accent);border-radius:10px;background:var(--accent-soft);
  font-size:13px;color:var(--txt)}
.staffbar b{font-family:Montserrat,sans-serif;font-weight:700}
.staffbar .tag{background:#14230a;color:var(--accent);font-size:10px;font-weight:800;letter-spacing:.1em;padding:3px 7px;border-radius:5px}
.staffbar .off{color:var(--warn);font-weight:600}

/* ═══ ADMIN TAB (staff only) ═════════════════════════════════════════════════ */
#p-admin .card{margin-bottom:16px}
.adm-help{font-size:12.5px;color:var(--mut);margin:0 0 12px}
.adm-help code{background:var(--bg3);border-radius:4px;padding:1px 5px}
.adm-add,.adm-form{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.adm-add input,.adm-form input,.adm-form select,#p-admin table select{font:13.5px Roboto,sans-serif;color:var(--txt);background:var(--bg1);
  border:1px solid var(--line);border-radius:8px;padding:8px 10px}
.adm-add input{flex:1;min-width:220px}
.adm-form input{flex:1;min-width:180px}
#p-admin table td,#p-admin table th{padding:9px 8px;border-bottom:1px solid var(--line2);font-size:13px;text-align:left;vertical-align:middle}
#p-admin table th{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--dim);font-weight:600}
#p-admin .btn.sm{padding:6px 12px;font-size:12px}
.adm-res{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.adm-res li{display:flex;align-items:center;gap:10px;background:var(--bg3);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:13px}
.adm-res li span{flex:1}
.adm-toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);background:#14230a;color:#fff;padding:10px 16px;border-radius:10px;
  font-size:13px;display:none;z-index:1200}
.adm-toast.show{display:block}
.adm-toast.err{background:var(--danger)}
.adm-muted{color:var(--mut)}

/* Service: full Lexmark case detail row (30/09) */
tr.cdet td{padding-top:0 !important;padding-bottom:14px !important}
.cmeta{display:flex;flex-wrap:wrap;gap:4px 16px;margin:0 0 8px;font-size:12px;color:var(--txt)}
.cmeta .ck,.cblk .ck{color:var(--dim);font-size:10px;text-transform:uppercase;letter-spacing:.05em;font-weight:700;margin-right:6px}
.cblks{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media (max-width:760px){.cblks{grid-template-columns:1fr}}
.cblk{background:var(--bg3);border:1px solid var(--line2);border-radius:8px;padding:9px 11px}
.cblk .ck{display:block;margin-bottom:4px}
.ctxt{color:var(--mut);font-size:12px;line-height:1.55;white-space:pre-wrap;word-break:break-word}

/* View-as switcher in the sidebar (30/09): the select was a fixed 220px and
   ran past the sidebar edge. Let it take the remaining width and truncate. */
.side .switcher{min-width:0;overflow:hidden}
.side .switcher .cap{flex:0 0 auto;line-height:1.1}
.side .switcher select{flex:1 1 auto;min-width:0;width:100%;max-width:100%;
  text-overflow:ellipsis;white-space:nowrap;overflow:hidden}

/* Fleet filters (30/09) */
.ffilter{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;padding:12px 16px;border-bottom:1px solid var(--line2)}
.fsearch{flex:1 1 240px;min-width:0;max-width:340px;font:13.5px Roboto,sans-serif;color:var(--txt);background:var(--bg1);
  border:1px solid var(--line);border-radius:8px;padding:7px 11px}
.fsearch:focus{outline:none;border-color:var(--accent)}
.fchips{display:flex;flex-wrap:wrap;gap:6px}
.fchip{font:600 12px Roboto,sans-serif;color:var(--mut);background:var(--bg1);border:1px solid var(--line);
  border-radius:999px;padding:4px 11px;cursor:pointer}
.fchip .n{color:var(--dim);font-weight:500;margin-left:2px}
.fchip:hover{border-color:var(--accent)}
.fchip.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-txt)}
.fchip.on .n{color:var(--accent-txt)}

/* Toner filter + device detail drawer (30/09) */
.flabel{font:600 12px Roboto,sans-serif;color:var(--mut)}
.fhint{margin-left:auto;font:12px Roboto,sans-serif;color:var(--dim)}
.fchip.hot:not(.on){border-color:var(--danger);color:var(--danger)}
tr.dd-row{cursor:pointer}
tr.dd-row:hover td{background:var(--bg3)}
tr.dd-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
body.dd-lock{overflow:hidden}
#devDrawer{display:none;position:fixed;inset:0;z-index:1050}
#devDrawer.show{display:block}
.dd-scrim{position:absolute;inset:0;background:rgba(21,24,28,.45)}
.dd-panel{position:absolute;top:0;right:0;bottom:0;width:min(760px,100%);background:var(--bg0);
  box-shadow:-8px 0 30px rgba(0,0,0,.18);display:flex;flex-direction:column;animation:ddIn .18s ease-out}
@keyframes ddIn{from{transform:translateX(30px);opacity:.4}to{transform:none;opacity:1}}
.dd-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:18px 22px 14px;
  background:var(--bg1);border-bottom:1px solid var(--line);border-top:3px solid var(--accent)}
.dd-head h2{margin:0;font:700 19px Montserrat,sans-serif;color:var(--txt)}
.dd-sub{margin-top:5px;font:13px Roboto,sans-serif;color:var(--mut)}
.dd-x{border:0;background:transparent;font-size:26px;line-height:1;color:var(--mut);cursor:pointer;padding:0 4px}
.dd-x:hover{color:var(--txt)}
.dd-body{overflow:auto;padding:16px 22px 40px}
.dd-tiles{margin-bottom:14px}
.dd-sec{background:var(--bg1);border:1px solid var(--line);border-radius:10px;margin-bottom:14px;overflow:hidden}
.dd-sec>header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:11px 14px;border-bottom:1px solid var(--line2)}
.dd-sec>header h3{margin:0;font:700 14px Montserrat,sans-serif;color:var(--txt)}
.dd-sec>header span{font:12px Roboto,sans-serif;color:var(--dim)}
.dd-t{width:100%;border-collapse:collapse;font:13px Roboto,sans-serif}
.dd-t th{text-align:left;font-weight:600;font-size:11.5px;color:var(--mut);padding:8px 14px;border-bottom:1px solid var(--line2)}
.dd-t td{padding:8px 14px;border-bottom:1px solid var(--line2);color:var(--txt)}
.dd-t tr:last-child td{border-bottom:0}
.dd-t .num{text-align:right}
.dd-sw{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px;vertical-align:0}
.dd-note,.dd-none{margin:0;padding:10px 14px;font:12px Roboto,sans-serif;color:var(--dim)}
.dd-chart{display:block;width:100%;height:auto;padding:8px 6px 0}
.dd-g{stroke:var(--line2);stroke-width:1}
.dd-ax{font:10px Roboto,sans-serif;fill:var(--dim)}
.dd-swap{stroke-width:1;stroke-dasharray:3 3;opacity:.7}
.dd-leg{display:flex;flex-wrap:wrap;gap:12px;padding:6px 14px 12px;font:12px Roboto,sans-serif;color:var(--mut)}
.dd-leg i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px}
.dd-leg i.dd-legswap{width:12px;height:0;border-top:1px dashed var(--mut);border-radius:0;vertical-align:3px}
@media (max-width:640px){
  .dd-head,.dd-body{padding-left:16px;padding-right:16px}
  .dd-tiles{grid-template-columns:repeat(2,1fr)!important}
  .dd-sec{overflow-x:auto}
  .fhint{display:none}
}
.dd-scroll{overflow-x:auto}
.dd-t td .pill{white-space:nowrap}
/* Tracking + POD (07/10) */
.trk{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.trk-btn{font:600 11px Roboto,sans-serif;color:var(--mut);background:var(--bg1);border:1px solid var(--line);
  border-radius:6px;padding:2px 8px;cursor:pointer;text-decoration:none;line-height:18px}
.trk-btn:hover{border-color:var(--accent);color:var(--accent-txt)}
.trk-go{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-txt)}
.trk-copy.ok{border-color:var(--accent);color:var(--accent-txt)}
.pod{margin-top:4px;font:12px Roboto,sans-serif;color:var(--mut)}
.pod b{color:var(--txt);font-weight:600}
/* Access ticks (14/10) */
.adm-accrow td{background:var(--bg3)}
.adm-acc{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px 18px;padding:4px 0}
.adm-acc.user{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center}
.adm-grp{display:flex;flex-direction:column}
.adm-ck{display:flex;align-items:center;gap:7px;font-size:13px;padding:2px 0;cursor:pointer}
.adm-ck input{accent-color:var(--accent);width:15px;height:15px}
.adm-ck.sub{padding-left:22px;color:var(--mut);font-size:12.5px}
.adm-ck.dis{opacity:.45}
.adm-accfoot{font-size:12px;color:var(--mut);margin-top:8px}
.adm-lim{font-size:12px;color:var(--warn);background:var(--warn-soft);border-radius:4px;padding:1px 6px}
@media (max-width:760px){.adm-acc{grid-template-columns:1fr 1fr}}
/* Partner view and view switch (18/10) */
.modeswitch{display:flex;flex-direction:column;gap:6px;margin:0 14px 12px}
.modeswitch .cap{font:600 10.5px Roboto,sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--mut)}
.ms-btns{display:flex;background:var(--bg3);border-radius:10px;padding:3px;gap:3px}
.ms-btns button{flex:1;border:0;background:transparent;font:600 12.5px Roboto,sans-serif;padding:7px 6px;border-radius:8px;cursor:pointer;color:var(--mut)}
.ms-btns button.on{background:var(--bg1);color:var(--accent-txt);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.p-cols{display:grid;grid-template-columns:1.6fr 1fr;gap:16px}
.p-bar{height:6px;background:var(--line2);border-radius:3px;overflow:hidden;min-width:60px}.p-bar i{display:block;height:100%;background:var(--accent)}
tr.p-cust{cursor:pointer}tr.p-cust:hover td{background:var(--bg3)}
tr.p-sub td{background:var(--bg3);padding:0}
.p-devs{padding:6px 14px 12px 30px}.p-devs table td,.p-devs table th{padding:6px 8px;font-size:12.5px}
.p-list{padding:4px 16px 10px}.p-li{display:flex;justify-content:space-between;gap:10px;padding:9px 0;border-bottom:1px solid var(--line2);font-size:13px}
.p-li:last-child{border:0}.p-li .pill{align-self:flex-start;white-space:nowrap;flex:0 0 auto}
.p-note{font-size:12px;color:var(--dim);margin:6px 2px 0}
.adm-role{display:inline-block;font:600 11px Roboto,sans-serif;border-radius:5px;padding:2px 7px}
.adm-role.msp{background:#e8eefb;color:#2f5aa8}.adm-role.cust{background:var(--accent-soft);color:var(--accent-txt)}
@media (max-width:900px){.p-cols{grid-template-columns:1fr}}

/* Sidebar switcher stacked (18/10): label on its own line, dropdown full width
   below, so "View as customer" / "View as MSP" is not squeezed beside it. */
.side .switcher{flex-direction:column;align-items:stretch;gap:6px;border-radius:10px;padding:9px 10px}
.side .switcher .cap{display:block;white-space:nowrap}
.side .switcher select{flex:0 0 auto;display:block;width:100%;max-width:100%}

/* ── Collapsible Toner sections (23/10): start collapsed, green triangle left,
   green "Show all ..." button right. Nothing else about the cards changes. ── */
.card.fold>.foldhead{cursor:pointer}
.card.fold:not(.open)>.foldhead{border-bottom:0}
.foldchev{width:30px;height:30px;flex:none;border-radius:99px;display:grid;place-items:center;
  background:var(--accent-soft);color:var(--accent-txt);font-size:12px;transition:transform .2s}
.card.fold.open .foldchev{transform:rotate(90deg)}
.foldbtn{flex:none;font:500 12.5px Roboto,sans-serif;color:#fff;background:var(--accent-txt);
  border:1px solid var(--accent-txt);padding:8px 14px;border-radius:8px;cursor:pointer;white-space:nowrap}
.card.fold.open .foldbtn{background:var(--bg2);color:var(--accent-txt);border-color:var(--accent)}
.card.fold>.foldbody{display:none}
.card.fold.open>.foldbody{display:block}
