/* Whole Stack Solutions portal: same palette and type as the website. */
:root{
  --navy:#0F1B2D; --navy-2:#172840; --navy-3:#25374F;
  --teal:#1AA6A0; --teal-dark:#0B7A75; --teal-ink:#0B5F5B; --teal-soft:#E8F4F3;
  --amber:#F2A33A; --amber-soft:#FDF0DC;
  --ink:#0F1B2D; --muted:#4A5A6E; --faint:#5B6C82;
  --bg:#F4F6F8; --line:#DDE3EA; --white:#FFFFFF;
  --red:#C2362B; --red-soft:#FCE8E6; --green:#1F8A4C; --green-soft:#E3F4EA;
  --blue:#2F6FDB; --blue-soft:#E6EEFC; --purple:#7A4FD0; --purple-soft:#EFE8FB;
  --mono:'JetBrains Mono', ui-monospace, Menlo, monospace;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;font-family:'Manrope',system-ui,sans-serif;color:var(--ink);background:var(--bg);font-size:16px;line-height:1.55}
a{color:var(--teal-dark)} a:hover{color:var(--teal-ink)}
h1,h2,h3{font-family:'Sora',sans-serif;letter-spacing:-0.02em;line-height:1.15;margin:0}
h1{font-size:clamp(26px,3.4vw,34px)} h2{font-size:20px} h3{font-size:16px}
.wrap{max-width:1240px;margin:0 auto;padding:0 24px}
.muted{color:var(--muted)} .small{font-size:14px} .mono{font-family:var(--mono)}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* Top bar */
.topbar{background:var(--navy);color:#fff;position:sticky;top:0;z-index:20;border-bottom:3px solid var(--teal)}
.topbar-in{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 28px;padding-top:12px;padding-bottom:12px}
.brand{display:flex;align-items:center;gap:10px;color:#fff;text-decoration:none}
.brand span{display:flex;flex-direction:column;line-height:1}
.brand b{font-family:'Sora';font-size:18px} .brand small{margin-top:4px;font-family:var(--mono);font-size:10px;letter-spacing:.3em;color:var(--amber)}
.mainnav{display:flex;flex-wrap:wrap;gap:2px 6px}
.mainnav a{color:#B7C4D3;text-decoration:none;font-weight:600;padding:8px 12px;border-radius:999px}
.mainnav a:hover{color:#fff;background:var(--navy-2)}
.mainnav a[aria-current="page"]{color:var(--navy);background:var(--teal)}
.topbar-actions{display:flex;align-items:center;gap:10px}
.topbar-actions form{margin:0}

/* Buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;padding:0 18px;border-radius:999px;border:1.5px solid transparent;
  font:inherit;font-weight:700;font-size:15px;text-decoration:none;cursor:pointer;white-space:nowrap;transition:filter .15s, transform .15s}
.btn:hover{filter:brightness(1.06);transform:translateY(-1px)}
.btn-amber{background:var(--amber);color:var(--navy)} .btn-amber:hover{color:var(--navy)}
.btn-navy{background:var(--navy);color:#fff} .btn-navy:hover{color:#fff}
.btn-teal{background:var(--teal);color:var(--navy)} .btn-teal:hover{color:var(--navy)}
.btn-line{background:#fff;color:var(--ink);border-color:var(--line)} .btn-line:hover{color:var(--ink);border-color:var(--faint)}
.btn-ghost{background:transparent;color:#fff;border-color:#5B6C82}
.btn-danger{background:#fff;color:var(--red);border-color:#F1C2BD}
.btn-block{width:100%;min-height:50px;font-size:16px}
.btn:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid var(--amber);outline-offset:2px}

/* Layout */
.main{padding-top:28px;padding-bottom:56px}
.page-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px 24px;margin-bottom:22px}
.eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--teal-dark);margin-bottom:6px}
.eyebrow::before{content:"// ";color:var(--amber)}
.grid{display:grid;gap:18px}
.grid-2{grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr))}
.grid-3{grid-template-columns:minmax(0,2fr) minmax(0,1fr)} @media (max-width:900px){.grid-3{grid-template-columns:1fr}}
.card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:22px}
.card h2{margin-bottom:14px}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.card-head h2{margin:0}

/* Stats */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:18px}
.stat{background:#fff;border:1px solid var(--line);border-radius:18px;padding:18px 20px;text-decoration:none;color:var(--ink);position:relative;overflow:hidden}
.stat::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;background:var(--teal)}
.stat.s-red::before{background:var(--red)} .stat.s-amber::before{background:var(--amber)} .stat.s-purple::before{background:var(--purple)} .stat.s-green::before{background:var(--green)}
.stat b{display:block;font-family:'Sora';font-size:34px;line-height:1.1}
.stat span{color:var(--muted);font-size:14px;font-weight:600}
a.stat:hover{border-color:var(--teal)}

/* Tables */
.table-wrap{overflow-x:auto;background:#fff;border:1px solid var(--line);border-radius:18px}
table{width:100%;border-collapse:collapse;font-size:15px}
th,td{text-align:left;padding:12px 14px;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);background:#FAFBFC;white-space:nowrap}
tr:last-child td{border-bottom:0}
tbody tr:hover{background:#F8FAFB}
td a.rowlink{font-weight:700;color:var(--ink);text-decoration:none} td a.rowlink:hover{color:var(--teal-dark)}
.num{font-family:var(--mono);font-size:13px;color:var(--teal-ink);white-space:nowrap}
.empty{padding:36px;text-align:center;color:var(--muted)}

/* Badges */
.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:700;white-space:nowrap;border:1px solid transparent}
.sev-1{background:var(--red);color:#fff} .sev-2{background:var(--amber);color:var(--navy)}
.sev-3{background:var(--blue-soft);color:#1E4FA8;border-color:#C9D9F7} .sev-4{background:#EEF1F4;color:var(--faint);border-color:var(--line)}
.st-new{background:var(--blue-soft);color:#1E4FA8} .st-open{background:var(--teal-soft);color:var(--teal-ink)}
.st-in-progress{background:var(--amber-soft);color:#8A5A0B} .st-waiting-on-client{background:var(--purple-soft);color:#5A34A8}
.st-resolved{background:var(--green-soft);color:#16653A} .st-closed{background:#EEF1F4;color:var(--faint)}
.tag{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:700;background:var(--teal-soft);color:var(--teal-ink)}
.tag-off{background:#EEF1F4;color:var(--faint)}

/* Forms */
form.stack{display:flex;flex-direction:column;gap:16px}
.fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:14px 16px}
.full{grid-column:1/-1}
label{display:flex;flex-direction:column;gap:6px;font-weight:600;font-size:14px}
label .hint{font-weight:500;color:var(--faint);font-size:13px}
input[type=text],input[type=email],input[type=tel],input[type=password],input[type=search],input[type=date],input[type=number],input[type=url],select,textarea{
  width:100%;min-height:46px;padding:10px 12px;border:1.5px solid #C9D2DC;border-radius:12px;font:inherit;font-size:16px;background:#fff;color:var(--ink)}
textarea{min-height:120px;resize:vertical}
input:focus,select:focus,textarea:focus{border-color:var(--teal);outline:none;box-shadow:0 0 0 3px rgba(26,166,160,.2)}
.check{flex-direction:row;align-items:center;gap:10px;font-weight:600}
.check input{width:20px;height:20px;accent-color:var(--teal)}
fieldset{border:0;margin:0;padding:0}
legend{font-family:'Sora';font-weight:700;font-size:16px;margin-bottom:10px}
.sev-pick{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:10px}
.sev-pick label{flex-direction:row;align-items:flex-start;gap:10px;padding:12px 14px;border:1.5px solid #C9D2DC;border-radius:12px;cursor:pointer;background:#fff}
.sev-pick input{margin-top:3px;accent-color:var(--teal)}
.sev-pick label:has(input:checked){border-color:var(--teal);box-shadow:0 0 0 3px rgba(26,166,160,.18)}
.sev-pick small{display:block;font-weight:500;color:var(--muted)}
.form-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.err{margin:0;color:var(--red);font-weight:600;font-size:14px}

/* Filters */
.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-bottom:16px}
.filters label{min-width:160px}
.filters .grow{flex:1 1 280px}

/* Detail views */
dl.facts{display:grid;grid-template-columns:max-content 1fr;gap:8px 18px;margin:0}
dl.facts dt{color:var(--faint);font-weight:600;font-size:14px}
dl.facts dd{margin:0;word-break:break-word}
.desc{white-space:pre-wrap;word-break:break-word;margin:0}
.timeline{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.timeline li{border-left:3px solid var(--teal);padding:4px 0 4px 14px}
.timeline li.k-status{border-color:var(--amber)} .timeline li.k-created{border-color:var(--navy)}
.timeline .when{font-size:13px;color:var(--faint);font-weight:600}
.timeline p{margin:4px 0 0;white-space:pre-wrap;word-break:break-word}

/* Flash */
.flash{padding:12px 16px;border-radius:12px;margin-bottom:18px;font-weight:600}
.flash-ok{background:var(--green-soft);color:#16653A;border:1px solid #BFE3CD}
.flash-info{background:var(--blue-soft);color:#1E4FA8;border:1px solid #C9D9F7}
.flash-warn{background:var(--amber-soft);color:#7A4E06;border:1px solid #F4D49C}
.flash-err{background:var(--red-soft);color:#9A2A20;border:1px solid #F1C2BD}

/* Auth screens */
body.auth{min-height:100vh;background:linear-gradient(135deg,rgba(15,27,45,.96),rgba(15,27,45,.9)),url(../assets/photos/hero-circuit-board.jpg) center/cover,var(--navy)}
.auth-main{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px 16px}
.auth-main .flash{width:100%;max-width:440px}
.auth-card{width:100%;max-width:440px;background:#fff;border-radius:24px;padding:32px;box-shadow:0 30px 70px rgba(0,0,0,.35)}
.auth-card h1{font-size:26px;margin-top:22px}
.auth-card .muted{margin:8px 0 0}
.auth-card form{margin-top:22px}
.auth-brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--ink)}
.auth-brand span{display:flex;flex-direction:column;line-height:1}
.auth-brand b{font-family:'Sora';font-size:20px} .auth-brand small{margin-top:5px;font-size:9px;letter-spacing:.46em;color:var(--faint)}
.auth-links{display:flex;justify-content:space-between;gap:12px;margin-top:16px;font-size:14px;font-weight:600}
.pw-rules{margin:0;padding-left:18px;color:var(--muted);font-size:14px}

.pfoot{border-top:1px solid var(--line);background:#fff;color:var(--faint);font-size:14px;padding:16px 0}
@media (max-width:640px){.topbar-actions{width:100%}.topbar-actions .btn{flex:1}.card{padding:18px}}
@media (prefers-reduced-motion:reduce){.btn{transition:none}.btn:hover{transform:none}}

/* One line per row (clients list) */
tr.oneline td{white-space:nowrap;vertical-align:middle}

/* Clients list: everything on one row, fits wide screens, scrolls on small ones */
table.compact{font-size:14px}
table.compact th,table.compact td{padding:10px 9px}
table.compact td a{white-space:nowrap}
body.app:has(.wide-page) .wrap{max-width:1680px}

/* Row actions (Pause / Resume / Delete) */
td.row-actions{white-space:nowrap;text-align:right}
td.row-actions form{display:inline-block;margin:0 0 0 4px}
.mini{min-height:32px;padding:0 12px;border-radius:999px;border:1.5px solid var(--line);background:#fff;color:var(--ink);font:inherit;font-size:13px;font-weight:700;cursor:pointer}
.mini:hover{border-color:var(--faint)}
.mini-danger{color:var(--red);border-color:#F1C2BD}
.mini-danger:hover{background:var(--red-soft);border-color:var(--red)}
.tag-paused{background:var(--amber-soft);color:#8A5A0B}
/* Keep row actions visible: pinned to the right edge of wide tables */
table.compact th:last-child,table.compact td.row-actions{position:sticky;right:0;background:#fff;box-shadow:-10px 0 12px -10px rgba(15,27,45,.25)}
table.compact th:last-child{background:#FAFBFC}
tbody tr:hover td.row-actions{background:#F8FAFB}

/* Invoices */
table.items td{vertical-align:top;padding:8px 6px}
table.items input,table.items textarea{min-height:44px}
.print-page{background:#E9EDF1;padding:24px 12px}
.print-bar{max-width:760px;margin:0 auto 16px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px}
@media print{
  .no-print,.topbar,.pfoot{display:none !important}
  body,.print-page{background:#fff !important;padding:0 !important}
  .print-page > div{border:0 !important;padding:0 !important;max-width:none !important}
  @page{margin:14mm}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

/* Sortable column headers */
th a.sortlink{display:inline-flex;align-items:center;gap:5px;color:inherit;text-decoration:none;white-space:nowrap}
th a.sortlink:hover{color:var(--ink)}
th a.sortlink .arrow{font-size:10px;opacity:.35}
th a.sortlink.on{color:var(--teal-ink)}
th a.sortlink.on .arrow{opacity:1}

/* Remote support */
.remote-steps{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px;color:var(--muted);line-height:1.55}
.remote-steps b{color:var(--ink)}
.key-input{font-family:var(--mono);font-size:20px !important;letter-spacing:.12em}

/* Nested single-column grids never grow wider than their column */
.grid:not(.grid-2):not(.grid-3){grid-template-columns:minmax(0,1fr)}
.grid > *{min-width:0}

tr.logrow td{padding-top:0;background:#FAFBFC}

table.no-pin th:last-child,table.no-pin td.row-actions{position:static;box-shadow:none}

/* Files, visits, edit history, reports, menus (v2 features) */
.file-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.file-list li{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#FAFBFC}
.file-list li > a:first-child{font-weight:700;min-width:0;flex:1 1 220px;word-break:break-word}
.file-list form{margin:0}
.visit-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.visit-list li{display:flex;gap:14px;align-items:center}
.vdate{flex:0 0 auto;width:86px;text-align:center;border-radius:10px;background:var(--teal-soft);padding:8px 6px;line-height:1.2}
.vdate b{display:block;font-family:'Sora';font-size:16px;color:var(--teal-ink)} .vdate span{font-size:12px;color:var(--muted)}
details.history summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px}
details.history summary::-webkit-details-marker{display:none}
details.history summary::before{content:"▸";color:var(--teal-dark);font-size:20px;line-height:1;transition:transform .15s}
details.history[open] summary::before{transform:rotate(90deg)}
.subnav{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 18px}
.subnav a{padding:8px 14px;border-radius:999px;border:1px solid var(--line);background:#fff;text-decoration:none;font-weight:700;font-size:14px;color:var(--ink)}
.subnav a[aria-current]{background:var(--navy);border-color:var(--navy);color:#fff}
.bars{display:flex;flex-direction:column;gap:8px}
.bar-row{display:grid;grid-template-columns:minmax(90px,170px) 1fr auto;gap:10px;align-items:center;font-size:14px}
.bar-row .bar{height:12px;border-radius:999px;background:var(--bg);overflow:hidden}
.bar-row .bar i{display:block;height:100%;background:var(--teal);border-radius:999px}
.bar-row .bar i.alt{background:var(--amber)}
.bar-row b{white-space:nowrap;text-align:right}
.morenav{position:relative}
.morenav summary{list-style:none;cursor:pointer;color:inherit}
.morenav summary::-webkit-details-marker{display:none}
.morenav[open] .morenav-menu{display:flex}
.morenav-menu{display:none;flex-direction:column;position:absolute;top:calc(100% + 10px);left:0;min-width:200px;background:var(--navy-2);border:1px solid var(--navy-3);border-radius:12px;padding:6px;z-index:30;box-shadow:0 12px 30px rgba(0,0,0,.25)}
.morenav-menu a{padding:9px 12px;border-radius:8px;white-space:nowrap}
@media (max-width:640px){.bar-row{grid-template-columns:1fr auto}.bar-row .bar{grid-column:1 / -1;order:3}}
.morenav summary{color:#B7C4D3;font-weight:600;padding:8px 12px;border-radius:999px}
.morenav summary:hover{color:#fff;background:var(--navy-2)}
.morenav summary[aria-current="page"]{color:var(--navy);background:var(--teal)}
.morenav-menu a{color:#DDE6EF !important;background:none !important}
.morenav-menu a:hover{background:var(--navy-3) !important;color:#fff !important}
.morenav-menu a[aria-current="page"]{color:var(--teal) !important}
@media (max-width:760px){.morenav-menu{position:static;margin-top:6px}}

/* Dashboard overview chart */
.dash-chart{margin-bottom:18px}
.seg{display:inline-flex;background:var(--bg);border:1px solid var(--line);border-radius:999px;padding:3px;gap:2px}
.seg button{white-space:nowrap;border:0;background:none;font:inherit;font-weight:700;font-size:14px;color:var(--muted);padding:7px 14px;border-radius:999px;cursor:pointer}
.seg button:hover{color:var(--ink)}
.seg button[aria-selected="true"],.seg button[aria-pressed="true"]{background:var(--navy);color:#fff}
.seg-sm button{font-size:13px;padding:5px 11px}
.hbars{display:flex;flex-direction:column;gap:6px}
.hbar{display:grid;grid-template-columns:minmax(120px,190px) 1fr 52px;align-items:center;gap:14px;padding:8px 10px;margin:0 -10px;border-radius:10px;text-decoration:none;color:var(--ink);transition:background .15s}
.hbar:hover,.hbar:focus-visible{background:var(--bg)}
.hbar:focus-visible{outline:3px solid var(--teal);outline-offset:1px}
.hb-label{font-weight:600;font-size:15px}
.hb-track{height:18px;border-radius:999px;background:var(--bg);overflow:hidden}
.hbar:hover .hb-track{background:#E9EDF1}
.hb-track i{display:block;height:100%;width:var(--w);border-radius:999px;background:var(--c,var(--teal));transition:width .7s cubic-bezier(.2,.8,.2,1),filter .15s}
.hbar:hover .hb-track i{filter:brightness(1.08)}
.hb-num{font-family:'Sora';font-size:22px;text-align:right}
.dash-chart.anim .hb-track i{width:0}
.c-purple{--c:var(--purple)} .c-teal{--c:var(--teal)} .c-navy{--c:var(--navy-3)} .c-red{--c:var(--red)} .c-blue{--c:var(--blue)} .c-amber{--c:var(--amber)} .c-green{--c:var(--green)}
.dc-tools{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px}
.dc-legend{font-size:13px;font-weight:600;color:var(--muted);display:inline-flex;align-items:center;gap:6px}
.sw{display:inline-block;width:12px;height:12px;border-radius:3px;margin-left:8px}
.sw-open{background:var(--teal)} .sw-res{background:var(--amber)}
.trend{position:relative;height:230px}
.trend svg{display:block;width:100%;height:100%;overflow:visible}
.trend .grid-line{stroke:var(--line);stroke-width:1}
.trend .axis{fill:var(--faint);font-size:11px;font-family:'Manrope',sans-serif}
.trend .b-open{fill:var(--teal)} .trend .b-res{fill:var(--amber)}
.trend .col-hit{fill:transparent;cursor:pointer}
.trend .col.on .col-bg{fill:var(--teal-soft)}
.trend .col-bg{fill:transparent}
.dc-tip{position:absolute;pointer-events:none;background:var(--navy);color:#fff;font-size:13px;line-height:1.45;padding:8px 12px;border-radius:10px;white-space:nowrap;transform:translate(-50%,-100%);box-shadow:0 8px 20px rgba(15,27,45,.25);z-index:5}
.dc-tip b{font-family:'Sora'}
@media (max-width:640px){.hbar{grid-template-columns:1fr 44px;gap:4px 10px}.hb-track{grid-column:1 / -1;order:3;height:14px}.hb-num{font-size:18px}}
@media (prefers-reduced-motion:reduce){.hb-track i{transition:none}}
.dash-chart .card-head{flex-wrap:wrap}

/* Ticket: updates & notes history */
.history{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:0}
.h-item{display:flex;gap:14px;padding:14px 0;border-top:1px solid var(--line)}
.h-item:first-child{border-top:0;padding-top:4px}
.h-avatar{flex:0 0 36px;width:36px;height:36px;border-radius:50%;display:grid;place-items:center;font-family:'Sora';font-weight:700;font-size:15px;background:var(--teal-soft);color:var(--teal-ink)}
.h-item[data-group="activity"] .h-avatar{background:var(--bg);color:var(--faint)}
.h-item.h-created .h-avatar{background:var(--navy);color:#fff}
.h-body{min-width:0;flex:1}
.h-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;font-size:14px}
.h-meta .muted{font-size:13px}
.h-text{margin-top:4px;white-space:pre-wrap;word-break:break-word;line-height:1.6}
.h-item[data-group~="note"] .h-text{background:#FAFBFC;border:1px solid var(--line);border-left:3px solid var(--teal);border-radius:10px;padding:10px 14px;margin-top:8px}
.h-item[data-group~="internal"] .h-text{border-left-color:var(--amber)}
.h-item[data-group="activity"] .h-text{color:var(--muted);font-size:15px}
.h-item[hidden]{display:none}
.h-del{margin:0 0 0 auto}

/* Dashboard pie charts */
.key-figs{display:flex;flex-wrap:wrap;gap:8px;margin:-2px 0 18px}
.key-figs a{display:inline-flex;align-items:baseline;gap:6px;padding:7px 14px;border-radius:999px;background:var(--bg);border:1px solid var(--line);color:var(--ink);text-decoration:none;font-size:14px;font-weight:600}
.key-figs a:hover{border-color:var(--teal);background:var(--teal-soft)}
.key-figs b{font-family:'Sora';font-size:17px}
.pies{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:22px 28px}
.pies[hidden]{display:none}
.pie{margin:0;display:flex;flex-direction:column;gap:12px;min-width:0}
.pie figcaption{font-family:'Sora';font-weight:700;font-size:16px}
.pie-wrap{width:min(190px,100%);margin:0 auto}
.pie-svg{display:block;width:100%;height:auto;overflow:visible}
.pie-slice{transition:stroke-width .15s,opacity .15s;cursor:pointer}
.pie-hl .pie-slice{opacity:.35}
.pie-hl a.on .pie-slice{opacity:1;stroke-width:7.5}
.pie-num{font-family:'Sora';font-weight:800;font-size:8px;fill:var(--ink)}
.pie-cap{font-family:'Manrope',sans-serif;font-size:3px;fill:var(--muted);font-weight:600}
.pie-legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.pie-legend a{display:grid;grid-template-columns:12px 1fr auto 40px;align-items:center;gap:8px;padding:5px 8px;border-radius:8px;color:var(--ink);text-decoration:none;font-size:14px}
.pie-legend .sw{width:12px;height:12px;border-radius:3px;margin:0}
.pie-legend b{font-family:'Sora'}
.pie-legend .muted{text-align:right;font-size:13px}
.pie-legend li.on a,.pie-legend a:hover{background:var(--bg)}
.pl-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* =====================================================================
   Portal theme v3: matches the new website (Figma concept): rounder cards,
   photo hero band, pill eyebrows, soft shadows and reactive hover states.
   ===================================================================== */
body.app{background:linear-gradient(180deg,#EAF0F4 0,#F4F6F8 340px)}
.topbar{border-bottom:0;box-shadow:0 1px 0 rgba(255,255,255,.06);transition:box-shadow .25s}
.topbar::after{content:"";display:block;height:3px;background:linear-gradient(90deg,var(--teal),var(--teal) 60%,var(--amber))}
body.scrolled .topbar{box-shadow:0 10px 30px rgba(15,27,45,.28)}
.brand svg{transition:transform .5s cubic-bezier(.2,.8,.2,1)}
.brand:hover svg{transform:rotate(-180deg)}
.mainnav a,.morenav summary{transition:background .2s,color .2s}

/* Headings and eyebrows like the website */
h1{font-weight:800;letter-spacing:-.03em}
.eyebrow{display:inline-flex;align-items:center;gap:8px;font-family:'Manrope',sans-serif;font-weight:700;font-size:11.5px;letter-spacing:.14em;
  padding:5px 12px;border-radius:999px;background:var(--teal-soft);border:1px solid rgba(26,166,160,.35);color:var(--teal-ink);margin-bottom:10px}
.eyebrow::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--teal)}

/* Cards: rounder, soft shadow, react on hover */
.card{border-radius:24px;box-shadow:0 1px 2px rgba(15,27,45,.04);transition:box-shadow .25s,border-color .25s,transform .25s}
.card:hover{box-shadow:0 14px 34px rgba(15,27,45,.08);border-color:#CFD8E2}
.table-wrap{border-radius:24px;box-shadow:0 1px 2px rgba(15,27,45,.04)}
.stat{border-radius:22px;transition:transform .25s,box-shadow .25s,border-color .25s}
a.stat:hover{transform:translateY(-3px);box-shadow:0 14px 30px rgba(15,27,45,.1)}
.stat::before{width:100%;height:4px;bottom:auto;right:0}

/* Buttons: press feedback and a ripple (added by portal.js) */
.btn{position:relative;overflow:hidden}
.btn:active{transform:translateY(0) scale(.97)}
.mini{transition:background .15s,border-color .15s,transform .15s}
.mini:active{transform:scale(.95)}
.ripple{position:absolute;border-radius:50%;transform:scale(0);background:rgba(255,255,255,.45);pointer-events:none;animation:ripple .6s ease-out forwards}
.btn-line .ripple,.mini .ripple{background:rgba(26,166,160,.25)}
@keyframes ripple{to{transform:scale(4);opacity:0}}

/* Status badges get a live dot */
.badge[class*="st-"]::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor;margin-right:6px;vertical-align:1px;opacity:.85}
.badge.st-new::before,.badge.st-in-progress::before{animation:hx-blink 1.6s infinite}
@keyframes hx-blink{50%{opacity:.2}}

/* Tables: row highlight with a teal edge; whole row clickable (portal.js) */
tbody tr{transition:background .15s}
tbody tr:hover{background:#F2F8F8}
tbody tr:hover td:first-child{box-shadow:inset 3px 0 0 var(--teal)}
tbody tr.row-click{cursor:pointer}
th{background:#F7F9FB}

/* Inputs */
input[type=text],input[type=email],input[type=tel],input[type=password],input[type=search],input[type=date],input[type=number],input[type=url],select,textarea{border-radius:14px;transition:border-color .2s,box-shadow .2s}
input:hover,select:hover,textarea:hover{border-color:#AEB9C6}

/* Flash messages become toasts that slide in (portal.js adds close + auto-hide) */
.flash{position:relative;border-radius:16px;padding:14px 46px 14px 16px;box-shadow:0 10px 26px rgba(15,27,45,.08);animation:toast-in .4s cubic-bezier(.2,.8,.2,1)}
.flash.hide{animation:toast-out .35s ease forwards}
.flash-close{position:absolute;right:10px;top:50%;transform:translateY(-50%);width:28px;height:28px;border:0;border-radius:50%;background:transparent;color:inherit;font-size:18px;line-height:1;cursor:pointer;opacity:.6}
.flash-close:hover{opacity:1;background:rgba(15,27,45,.08)}
.flash .bar{position:absolute;left:0;bottom:0;height:3px;background:currentColor;opacity:.35;animation:toast-bar 7s linear forwards}
@keyframes toast-in{from{opacity:0;transform:translateY(-10px)}}
@keyframes toast-out{to{opacity:0;transform:translateY(-10px);height:0;margin:0;padding-top:0;padding-bottom:0}}
@keyframes toast-bar{from{width:100%}to{width:0}}

/* Reveal on scroll (portal.js adds .reveal / .in) */
.reveal{opacity:0;transform:translateY(14px);transition:opacity .5s ease,transform .5s cubic-bezier(.2,.8,.2,1)}
.reveal.in{opacity:1;transform:none}

/* Dashboard hero band (photo + navy overlay, like the website) */
.hero-band{position:relative;overflow:hidden;display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:22px 32px;margin-bottom:22px;
  padding:clamp(24px,4vw,40px);border-radius:28px;color:#fff;
  background:linear-gradient(90deg,rgba(15,27,45,.97) 0%,rgba(15,27,45,.9) 50%,rgba(15,27,45,.7) 100%),url(../assets/photos/hero-developer.jpg) center 30%/cover,var(--navy)}
.hero-band::before{content:"";position:absolute;inset:-64px;pointer-events:none;
  background-image:linear-gradient(rgba(26,166,160,.12) 1px,transparent 1px),linear-gradient(90deg,rgba(26,166,160,.12) 1px,transparent 1px);background-size:48px 48px;
  -webkit-mask-image:radial-gradient(ellipse 70% 80% at 80% 30%,#000,transparent 75%);mask-image:radial-gradient(ellipse 70% 80% at 80% 30%,#000,transparent 75%);animation:grid-drift 20s linear infinite}
@keyframes grid-drift{to{transform:translate(48px,48px)}}
.hero-band > *{position:relative}
.hb-copy{display:flex;flex-direction:column;gap:12px;min-width:0;flex:1 1 420px}
.hero-band h1{color:#fff;font-size:clamp(28px,3.6vw,40px)}
.hb-sub{margin:0;color:#C9D5E1;font-size:16px}
.hb-pill{display:inline-flex;align-self:flex-start;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;background:rgba(26,166,160,.18);border:1px solid rgba(26,166,160,.5);color:#7FE0D9;font-size:12px;font-weight:700;letter-spacing:.1em}
.hb-dot{width:8px;height:8px;border-radius:50%;background:var(--teal);animation:ping 2s infinite}
@keyframes ping{0%{box-shadow:0 0 0 0 rgba(26,166,160,.7)}70%{box-shadow:0 0 0 8px rgba(26,166,160,0)}100%{box-shadow:0 0 0 0 rgba(26,166,160,0)}}
.hb-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.hb-chip{display:inline-flex;align-items:center;min-height:38px;padding:0 15px;border-radius:999px;border:1px solid #3A4E68;background:rgba(23,40,64,.6);color:#E3EAF2;font-size:14px;font-weight:700;text-decoration:none;transition:background .2s,border-color .2s,color .2s,transform .2s}
.hb-chip:hover{background:var(--teal);border-color:var(--teal);color:var(--navy);transform:translateY(-2px)}
.hb-chip-amber{background:var(--amber);border-color:var(--amber);color:var(--navy)}
.hb-chip-amber:hover{background:#F5B256;border-color:#F5B256;color:var(--navy)}
.hb-search{display:flex;gap:8px;flex:1 1 320px;max-width:460px}
.hb-search input{background:rgba(255,255,255,.96);border-color:transparent}

/* Sign-in screens: split layout with the website photo */
body.auth{background:linear-gradient(110deg,rgba(15,27,45,.97) 0%,rgba(15,27,45,.9) 55%,rgba(15,27,45,.75) 100%),url(../assets/photos/hero-developer.jpg) center/cover,var(--navy)}
.auth-split{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:40px 64px;width:100%;max-width:1040px}
.auth-side{flex:1 1 360px;max-width:440px;display:flex;flex-direction:column;gap:18px;color:#fff}
.auth-side-title{margin:0;font-family:'Sora',sans-serif;font-weight:800;font-size:clamp(26px,3vw,36px);line-height:1.12;letter-spacing:-.02em}
.auth-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.auth-tile{display:flex;flex-direction:column;gap:4px;padding:14px;border-radius:16px;background:rgba(23,40,64,.85);border:1px solid rgba(255,255,255,.08);transition:transform .2s}
.auth-tile:hover{transform:translateY(-3px)}
.auth-tile span{font-size:10.5px;font-weight:700;letter-spacing:.12em;color:#8A9BB0}
.auth-tile b{font-family:'Sora',sans-serif;font-size:15px;color:var(--teal)} .auth-tile b.amber{color:var(--amber)}
.auth-toast{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:16px;background:#fff;color:var(--ink)}
.auth-toast b{display:block;font-size:15px} .auth-toast small{color:var(--faint);font-size:13px}
.auth-check{flex:none;width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--green-soft);color:var(--green);font-weight:800}
.auth-card{border-radius:28px;animation:toast-in .5s cubic-bezier(.2,.8,.2,1)}
.auth-main .flash{max-width:1040px}
@media (max-width:820px){.auth-side{display:none}}

/* Keyboard hint chip */
.kbd{display:inline-block;min-width:20px;padding:1px 6px;border-radius:6px;border:1px solid var(--line);background:#fff;font-family:var(--mono);font-size:12px;text-align:center}

@media (prefers-reduced-motion:reduce){
  .reveal{opacity:1;transform:none;transition:none}
  .hero-band::before,.hb-dot,.badge::before,.flash,.auth-card{animation:none}
  .card,.stat,.hb-chip,.auth-tile,.brand svg{transition:none}
  a.stat:hover,.hb-chip:hover,.auth-tile:hover{transform:none}
}
