/* Dashboard + portal + auth — builds on site.css tokens */
.auth-page{min-height:100vh}
.auth-bg{position:fixed;inset:0;background:url("../img/hero.jpg") right center/cover no-repeat;opacity:.35;-webkit-mask-image:linear-gradient(90deg,transparent 10%,#000 70%);mask-image:linear-gradient(90deg,transparent 10%,#000 70%)}
.auth-wrap{position:relative;min-height:100vh;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:26px;padding-block:40px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
.auth-card{width:min(520px,100%);padding:34px 34px 30px;--c:20px}
.auth-card h1{font-size:clamp(1.7rem,4vw,2.3rem)}
.auth-card .spaced{margin:10px 0 22px;font-size:.62rem}
.auth-card form{gap:16px}
.auth-card .btn{margin-top:6px}
.auth-foot{color:var(--muted);font-size:.92rem;text-align:center}
.fld small{color:var(--muted)}

/* ---------- App shell ---------- */
.app{display:grid;grid-template-columns:252px 1fr;min-height:100vh}
.side{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:6px;padding:20px 14px 18px;background:linear-gradient(180deg,#041124,#020a17);border-right:1px solid var(--line);overflow-y:auto;z-index:40}
.side .brand{padding:4px 8px 18px;border-bottom:1px solid var(--line-soft);margin-bottom:10px}
.side .brand img{width:50px}
.side .brand .bt b{font-size:1.2rem}
.side .label{font-family:var(--f-wide);font-size:.52rem;letter-spacing:.24em;color:var(--muted);padding:14px 12px 6px;text-transform:uppercase}
.nav-i{display:flex;align-items:center;gap:12px;padding:10px 12px;color:var(--text);text-decoration:none;font-size:.95rem;border:1px solid transparent;position:relative}
.nav-i svg{width:19px;height:19px;color:var(--muted);flex:none}
.nav-i:hover{background:rgba(30,139,255,.08);color:#fff}
.nav-i.on{background:linear-gradient(90deg,rgba(30,139,255,.22),rgba(30,139,255,.04));border-color:var(--line);color:#fff}
.nav-i.on::before{content:"";position:absolute;left:-1px;top:6px;bottom:6px;width:3px;background:var(--blue);box-shadow:0 0 10px var(--blue)}
.nav-i.on svg{color:var(--cyan)}
.nav-i .cnt{margin-left:auto;min-width:22px;height:22px;padding:0 7px;border-radius:11px;background:var(--blue);color:#fff;font-size:.74rem;font-weight:700;display:grid;place-items:center;box-shadow:0 0 10px rgba(30,139,255,.6)}
.side .me{margin-top:auto;border-top:1px solid var(--line-soft);padding:14px 8px 0;display:flex;align-items:center;gap:10px}
.av{width:38px;height:38px;border-radius:50%;flex:none;display:grid;place-items:center;font-weight:700;color:#fff;background:linear-gradient(135deg,var(--blue),#0b3f9a);border:1px solid var(--cyan);font-size:.9rem}
.av.lg{width:56px;height:56px;font-size:1.2rem}
.side .me div{min-width:0;flex:1}
.side .me b{display:block;color:#fff;font-size:.92rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.side .me small{color:var(--muted);font-size:.78rem}
.side .me button{background:none;border:1px solid var(--line-soft);color:var(--muted);width:34px;height:34px;display:grid;place-items:center;cursor:pointer}
.side .me button:hover{color:var(--cyan);border-color:var(--blue)}
.side .me svg{width:17px;height:17px}

.main{min-width:0;padding-block:26px 60px;padding-left:max(28px,env(safe-area-inset-left,0px));padding-right:max(28px,env(safe-area-inset-right,0px))}
.head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:24px}
.head h1{font-size:clamp(1.6rem,3vw,2.3rem);line-height:1.05}
.head .sub{color:var(--muted);margin-top:8px}
.head .acts{display:flex;gap:10px;flex-wrap:wrap}
.mob-top{display:none}
@media (max-width:960px){
  .app{grid-template-columns:1fr}
  .side{position:fixed;left:0;top:0;bottom:0;width:270px;transform:translateX(-102%);transition:transform .25s;padding-top:calc(20px + env(safe-area-inset-top,0px))}
  .side.open{transform:none;box-shadow:0 0 60px rgba(0,0,0,.7)}
  .mob-top{display:flex;align-items:center;justify-content:space-between;position:sticky;top:env(safe-area-inset-top,0px);z-index:30;background:rgba(2,8,20,.92);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);padding-block:10px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
  .mob-top .brand img{width:40px}.mob-top .brand .bt b{font-size:1rem}
  .main{padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
}

/* ---------- Panels, tiles ---------- */
.pnl{padding:20px 22px;--c:14px;min-width:0}
.pnl>h2,.pnl-h h2{font-family:var(--f-display);font-weight:800;font-size:.8rem;letter-spacing:.14em;color:var(--cyan);text-transform:uppercase}
.pnl-h{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}
.pnl>h2{margin-bottom:14px}
.pnl-h a{font-size:.85rem;color:var(--cyan);text-decoration:none}
.tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}
.tile{padding:18px 20px;--c:12px;display:flex;flex-direction:column;gap:6px;text-decoration:none;color:inherit}
.tile small{font-family:var(--f-wide);font-size:.55rem;letter-spacing:.18em;color:var(--muted);text-transform:uppercase}
.tile b{font-family:var(--f-display);font-weight:800;font-size:1.65rem;color:#fff;font-variant-numeric:tabular-nums;line-height:1.1}
.tile span{font-size:.85rem;color:var(--muted)}
.tile.hot b{color:var(--cyan);text-shadow:0 0 14px rgba(30,139,255,.5)}
.g2{display:grid;grid-template-columns:1.4fr 1fr;gap:18px;align-items:start}
.g2e{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start}
.g3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.stack{display:flex;flex-direction:column;gap:18px;min-width:0}
@media (max-width:1180px){.tiles{grid-template-columns:repeat(2,1fr)}.g2,.g2e{grid-template-columns:1fr}.g3{grid-template-columns:1fr 1fr}}
@media (max-width:620px){.g3{grid-template-columns:1fr}.tile b{font-size:1.35rem}}

/* chart */
.bars{display:grid;grid-template-columns:repeat(6,1fr);gap:14px;align-items:end;height:190px;padding:10px 4px 0;border-bottom:1px solid var(--line);background:repeating-linear-gradient(0deg,transparent 0 46px,rgba(69,185,255,.07) 46px 47px)}
.bar{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:6px}
.bar i{display:block;width:100%;max-width:46px;min-height:3px;background:linear-gradient(180deg,var(--cyan),var(--blue) 60%,#0b4fb8);box-shadow:0 0 14px rgba(30,139,255,.45)}
.bar.now i{background:linear-gradient(180deg,#fff,var(--cyan) 30%,var(--blue))}
.bar em{font-style:normal;font-size:.72rem;color:var(--chrome);font-variant-numeric:tabular-nums;white-space:nowrap}
.bars-x{display:grid;grid-template-columns:repeat(6,1fr);gap:14px;padding:8px 4px 0;text-align:center;font-family:var(--f-wide);font-size:.55rem;letter-spacing:.14em;color:var(--muted)}

/* lists & tables */
.list{display:flex;flex-direction:column}
.row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line-soft);text-decoration:none;color:inherit;min-width:0}
.row:last-child{border-bottom:0}
a.row:hover{background:rgba(30,139,255,.05)}
.row .grow{flex:1;min-width:0}
.row b{color:#fff;font-weight:600;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row small{color:var(--muted);font-size:.85rem;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .amt{font-variant-numeric:tabular-nums;color:#fff;font-weight:600;white-space:nowrap}
.empty{color:var(--muted);padding:14px 0;font-size:.95rem}
.tbl-wrap{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse;font-size:.93rem}
.tbl th{font-family:var(--f-wide);font-size:.54rem;letter-spacing:.16em;color:var(--muted);text-transform:uppercase;text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap;font-weight:400}
.tbl td{padding:12px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
.tbl tr:hover td{background:rgba(30,139,255,.05)}
.tbl td.num,.tbl th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.tbl a{color:#fff;text-decoration:none;font-weight:600}
.tbl a:hover{color:var(--cyan)}
.tbl small{display:block;color:var(--muted)}

.pill{display:inline-flex;align-items:center;gap:6px;font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:4px 10px;border:1px solid;white-space:nowrap}
.pill::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.st-new,.st-draft,.st-planning{color:#9fb3cf;border-color:#2b4366}
.st-sent,.st-contacted,.st-design,.st-quoted{color:var(--cyan);border-color:#1b5ea8;background:rgba(30,139,255,.08)}
.st-development,.st-review,.st-partial{color:#ffc65a;border-color:#7a5a18;background:rgba(255,198,90,.07)}
.st-accepted,.st-paid,.st-won,.st-live{color:#49e3a0;border-color:#1d6b4b;background:rgba(73,227,160,.07)}
.st-declined,.st-void,.st-closed,.st-paused{color:#ff8a96;border-color:#6b2731;background:rgba(255,107,122,.06)}
.overdue{color:#ff8a96}

.tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.tabs a{font-family:var(--f-wide);font-size:.58rem;letter-spacing:.14em;text-transform:uppercase;padding:.8em 1.2em;color:var(--chrome);text-decoration:none;border:1px solid var(--line);background:rgba(4,16,31,.7)}
.tabs a.on{background:var(--blue);border-color:var(--cyan);color:#fff}
.tabs a em{font-style:normal;opacity:.7;margin-left:6px}

/* progress */
.prog{height:8px;background:#0a1e3a;border:1px solid var(--line-soft);position:relative;overflow:hidden}
.prog i{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(90deg,var(--blue),var(--cyan));box-shadow:0 0 10px var(--blue)}
.proj{padding:18px 20px;--c:12px;display:flex;flex-direction:column;gap:10px}
.proj .top{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.proj h3{font-size:1.08rem;color:#fff;font-weight:600}
.proj .meta{display:flex;justify-content:space-between;font-size:.85rem;color:var(--muted);gap:10px;flex-wrap:wrap}
.stages{display:flex;gap:4px}
.stages i{flex:1;height:4px;background:#0f2a4e}
.stages i.on{background:var(--blue);box-shadow:0 0 6px var(--blue)}

/* chat */
.inbox{display:grid;grid-template-columns:320px 1fr;gap:18px;min-height:calc(100vh - 170px)}
.threads{padding:0;--c:14px;display:flex;flex-direction:column;min-width:0}
.threads .th-head{padding:16px 18px;border-bottom:1px solid var(--line-soft)}
.threads .list{overflow-y:auto}
.thread{display:flex;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line-soft);text-decoration:none;color:inherit;align-items:center}
.thread:hover{background:rgba(30,139,255,.06)}
.thread.on{background:linear-gradient(90deg,rgba(30,139,255,.2),transparent)}
.thread .grow{flex:1;min-width:0}
.thread b{display:flex;justify-content:space-between;gap:8px;color:#fff;font-weight:600}
.thread b time{font-weight:400;font-size:.75rem;color:var(--muted);white-space:nowrap}
.thread small{display:block;color:var(--muted);font-size:.85rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.thread.unread small{color:#fff}
.dot{width:9px;height:9px;border-radius:50%;background:var(--blue);box-shadow:0 0 8px var(--blue);flex:none}
.chat{padding:0;--c:14px;display:flex;flex-direction:column;min-width:0;min-height:520px}
.chat-head{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid var(--line-soft)}
.chat-head .grow{flex:1;min-width:0}
.chat-head b{color:#fff;display:block}
.chat-head small{color:var(--muted)}
.msgs{flex:1;overflow-y:auto;padding:22px 20px;display:flex;flex-direction:column;gap:10px;max-height:calc(100vh - 290px);min-height:260px}
.msg{max-width:min(560px,80%);padding:11px 15px;background:#0b2140;border:1px solid var(--line-soft);white-space:pre-wrap;word-wrap:break-word;line-height:1.45}
.msg time{display:block;font-size:.72rem;color:var(--muted);margin-top:4px}
.msg.me{align-self:flex-end;background:linear-gradient(135deg,#1676e8,#0d55c0);border-color:var(--cyan);color:#fff}
.msg.me time{color:#cfe3ff}
.day{align-self:center;font-family:var(--f-wide);font-size:.52rem;letter-spacing:.18em;color:var(--muted);margin:8px 0}
.compose{display:flex;gap:10px;padding:14px 16px;border-top:1px solid var(--line-soft);align-items:flex-end}
.compose textarea{min-height:46px;max-height:160px;resize:none}
.compose .btn{padding:.95em 1.2em}
.chat-empty{flex:1;display:grid;place-items:center;text-align:center;color:var(--muted);padding:40px}
@media (max-width:960px){.inbox{grid-template-columns:1fr}.inbox.has-chat .threads{display:none}.inbox:not(.has-chat) .chat{display:none}}

/* forms inside app */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.form-grid .full{grid-column:1/-1}
@media (max-width:620px){.form-grid{grid-template-columns:1fr}}
.kv-list{display:grid;grid-template-columns:auto 1fr;gap:10px 18px;font-size:.95rem}
.kv-list dt{color:var(--muted)}
.kv-list dd{margin:0;color:#fff;word-break:break-word}
.lead-msg{white-space:pre-wrap;background:#030b18;border:1px solid var(--line-soft);padding:14px 16px;line-height:1.55}
.chips-s{display:flex;flex-wrap:wrap;gap:6px}
.chips-s span{font-size:.8rem;padding:4px 10px;border:1px solid var(--line);color:var(--chrome);background:rgba(30,139,255,.08)}
.feed .row{align-items:flex-start}
.feed .ic{width:30px;height:30px;display:grid;place-items:center;border:1px solid var(--line);color:var(--cyan);flex:none}
.feed .ic svg{width:15px;height:15px}
details.add{margin-bottom:18px}
details.add>summary{list-style:none;cursor:pointer;display:inline-flex}
details.add>summary::-webkit-details-marker{display:none}
details.add[open]>summary{margin-bottom:14px}
.btn.xs{padding:.55em .9em;font-size:.56rem}
.inline-form{display:inline}
dialog.modal{background:var(--panel);color:var(--text);border:1.5px solid var(--blue);padding:24px;width:min(620px,calc(100vw - 32px));box-shadow:0 0 60px rgba(30,139,255,.35)}
dialog.modal::backdrop{background:rgba(1,5,12,.75);backdrop-filter:blur(3px)}
dialog.modal h2{font-family:var(--f-display);font-size:1rem;letter-spacing:.1em;color:var(--cyan);margin-bottom:16px}

/* invoice editor */
.ed{display:grid;grid-template-columns:minmax(380px,460px) 1fr;gap:20px;align-items:start}
.ed .stack{gap:16px}
.ed-prev{position:sticky;top:20px}
.ed-prev .sheet-fit{max-width:none}
.savebar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.savebar .state{font-size:.85rem;color:var(--muted);margin-right:auto}
.savebar .state.dirty{color:#ffc65a}
@media (max-width:1180px){.ed{grid-template-columns:1fr}.ed-prev{position:static}}
.doc-view{max-width:820px;margin:0 auto}
.row svg.ic-s{width:20px;height:20px;color:var(--blue);flex:none}
.btn{white-space:nowrap}
