/* Company OS design system. White canvas, Quicksand, icon only, soft depth and one indigo to violet accent. */
:root{
  --bg:#ffffff; --subtle:#f7f8fd; --subtle-2:#eff1f9;
  --line:#e8ebf5; --line-2:#d8def0;
  --ink:#0d1330; --ink-2:#434d6b; --ink-3:#8790ab;
  --brand:#4f5dff; --brand-600:#3d4ae0; --brand-50:#eef0ff; --brand-100:#dde1ff; --violet:#8b5cf6;
  --grad:linear-gradient(135deg,#4f6bff 0%,#6a55ff 52%,#8b5cf6 100%);
  --grad-soft:linear-gradient(135deg,#eef1ff 0%,#f3eeff 100%);
  --ok:#0b8a62; --ok-bg:#e4f7ef; --warn:#ad6200; --warn-bg:#fff1d9; --bad:#d0352b; --bad-bg:#fee8e6; --info:#2360d6; --info-bg:#e7efff;
  --r:16px; --r-sm:10px;
  --sh:0 1px 2px rgba(20,28,70,.04),0 2px 10px rgba(20,28,70,.045);
  --sh-md:0 10px 28px rgba(30,40,100,.10);
  --sh-lg:0 28px 70px rgba(20,28,80,.24);
  --glow:0 10px 26px rgba(79,93,255,.34);
  --side:272px; --top:68px;
  --ease:cubic-bezier(.2,.8,.2,1);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{font-family:'Quicksand',system-ui,sans-serif;font-size:14.5px;line-height:1.5;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
a{color:var(--brand);text-decoration:none}
h1,h2,h3,h4{font-weight:700;letter-spacing:-.015em;line-height:1.22}
::selection{background:var(--brand-100)}
::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#d7dcee;border-radius:99px;border:2px solid #fff}::-webkit-scrollbar-thumb:hover{background:#c3cae4}
.ico{display:inline-flex;align-items:center;justify-content:center;flex:none}
.ico svg{display:block}
.muted{color:var(--ink-3)} .sec{color:var(--ink-2)}
.hide{display:none!important}
.spacer{flex:1}
.boot{min-height:100vh;display:grid;place-items:center}
.boot-dot{width:16px;height:16px;border-radius:50%;background:var(--grad);animation:pulse 1s ease-in-out infinite;box-shadow:var(--glow)}
@keyframes pulse{0%,100%{transform:scale(.7);opacity:.5}50%{transform:scale(1.15);opacity:1}}
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes float{0%,100%{transform:translate3d(0,0,0)}50%{transform:translate3d(0,-18px,0)}}
@keyframes shimmer{0%{background-position:100% 0}100%{background-position:-100% 0}}
@keyframes ping{0%{box-shadow:0 0 0 0 rgba(23,163,116,.5)}100%{box-shadow:0 0 0 8px rgba(23,163,116,0)}}
.still *{animation:none!important}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 16px;border-radius:12px;border:1px solid var(--line-2);background:#fff;font-weight:700;font-size:13.5px;white-space:nowrap;transition:transform .15s var(--ease),box-shadow .2s,background .15s,border-color .15s;box-shadow:0 1px 2px rgba(20,28,70,.04)}
.btn:hover{background:var(--subtle);border-color:#c5cce4;transform:translateY(-1px)}
.btn:active{transform:translateY(0) scale(.98)}
.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}
.btn:focus-visible,.icon-btn:focus-visible,.chip:focus-visible{outline:3px solid var(--brand-100);outline-offset:1px}
.btn-primary{background:var(--grad);border-color:transparent;color:#fff;box-shadow:var(--glow)}
.btn-primary:hover{background:var(--grad);border-color:transparent;filter:brightness(1.06);box-shadow:0 14px 30px rgba(79,93,255,.42)}
.btn-danger{color:var(--bad);border-color:#f4c7c2}
.btn-danger:hover{background:var(--bad-bg);border-color:#eba39c}
.btn-ghost{border-color:transparent;background:transparent;box-shadow:none}
.btn-sm{height:34px;padding:0 13px;font-size:13px;border-radius:10px}
.btn.glass{background:rgba(255,255,255,.7);backdrop-filter:blur(10px);border-color:rgba(255,255,255,.9);box-shadow:0 2px 10px rgba(50,60,140,.08)}
.btn.glass:hover{background:#fff}
.btn.warn{color:var(--warn);border-color:#f2d5a2;background:#fffaf0}
.btn.warn:hover{background:var(--warn-bg)}
.btn.ok-btn{background:linear-gradient(135deg,#12a878,#0b8a62);border-color:transparent;color:#fff;box-shadow:0 8px 20px rgba(11,138,98,.3)}
.btn.ok-btn:hover{background:linear-gradient(135deg,#12a878,#0b8a62);filter:brightness(1.06)}
.icon-btn{width:40px;height:40px;border-radius:12px;border:1px solid transparent;background:transparent;display:inline-grid;place-items:center;color:var(--ink-2);transition:.15s;position:relative}
.icon-btn:hover{background:var(--subtle-2);color:var(--ink)}
.icon-btn.ok{color:var(--ok);background:var(--ok-bg)} .icon-btn.ok:hover{background:#cdf0e2}

/* ---------- forms ---------- */
.fld{display:flex;flex-direction:column;gap:7px;margin-bottom:18px;position:relative}
.fld>label{font-size:12.5px;font-weight:700;color:var(--ink-2);letter-spacing:.01em}
.fld .req{color:var(--bad)}
.input,select.input,textarea.input{width:100%;height:44px;border:1px solid var(--line-2);border-radius:12px;background:#fff;padding:0 14px;font-size:14px;font-weight:500;transition:border-color .15s,box-shadow .15s;outline:none}
select.input{padding-right:32px}
textarea.input{height:auto;min-height:96px;padding:12px 14px;resize:vertical}
.input:hover{border-color:#c2cae4}
.input:focus{border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-50)}
.input::placeholder{color:#a8b0c6;font-weight:500}
select.sel{height:38px;width:auto;min-width:150px;border-radius:999px;font-weight:700;font-size:13px}
.fld.err .input{border-color:var(--bad)}
.fld .msg{font-size:12px;color:var(--bad);font-weight:700}
.fld .help{font-size:12px;color:var(--ink-3);font-weight:500}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}
.row2{display:flex;align-items:center;gap:12px}.row2 .input{max-width:140px}
.ig{display:flex;align-items:stretch}
.ig .pre{display:grid;place-items:center;padding:0 13px;border:1px solid var(--line-2);border-right:0;border-radius:12px 0 0 12px;background:var(--subtle);color:var(--ink-2);font-weight:700}
.ig .input{border-radius:0 12px 12px 0}
.check{display:flex;align-items:center;gap:10px;padding:8px 0;cursor:pointer;font-weight:600}
.check input{width:18px;height:18px;accent-color:var(--brand);cursor:pointer}
.lines{border:1px solid var(--line);border-radius:12px;overflow:hidden}
.lines .lr{display:grid;grid-template-columns:1fr 84px 92px 36px;gap:8px;padding:8px;border-bottom:1px solid var(--line);align-items:center}
.lines .lr.norate{grid-template-columns:1fr 92px 36px}
.lines .lr .input{height:38px}
.lines .lh{background:var(--subtle);font-size:11.5px;font-weight:700;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em}
.lines .la{padding:8px}
.filebox{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.filebox .fn{font-size:13px;color:var(--ink-2);font-weight:600}

/* ---------- badges, avatars ---------- */
.badge{display:inline-flex;align-items:center;gap:6px;height:25px;padding:0 11px;border-radius:999px;font-size:12px;font-weight:700;background:var(--subtle-2);color:var(--ink-2);white-space:nowrap}
.badge::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.8}
.badge.ok{background:var(--ok-bg);color:var(--ok)} .badge.warn{background:var(--warn-bg);color:var(--warn)}
.badge.bad{background:var(--bad-bg);color:var(--bad)} .badge.info{background:var(--info-bg);color:var(--info)}
.badge.brand{background:var(--brand-50);color:var(--brand)}
.badge.plain::before{display:none}
.avatar{width:32px;height:32px;border-radius:50%;background:var(--grad-soft);color:var(--brand);border:1.5px solid #fff;box-shadow:0 0 0 1px var(--brand-100);display:inline-grid;place-items:center;font-size:12px;font-weight:700;flex:none}
.avatar.lg{width:44px;height:44px;font-size:15px}
.avatar.sm{width:28px;height:28px;font-size:10px}
.avatar.done{background:var(--ok-bg);color:var(--ok);box-shadow:0 0 0 1px #bfe6d5}
.avatar.more{background:var(--subtle-2);color:var(--ink-2);box-shadow:0 0 0 1px var(--line-2)}
.stack{display:inline-flex}.stack .avatar{margin-left:-6px}.stack .avatar:first-child{margin-left:0}
.who{display:inline-flex;align-items:center;gap:8px;font-weight:700}
.pill{display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:999px;background:var(--brand-50);color:var(--brand);font-weight:700;font-size:12.5px}
a.pill:hover{background:var(--brand-100)}
.pill.soft{background:var(--subtle-2);color:var(--ink-2)}
.etag{display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:6px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;background:var(--subtle-2);color:var(--ink-2)}
.etag.blocker{background:var(--bad-bg);color:var(--bad)} .etag.complete{background:var(--ok-bg);color:var(--ok)} .etag.file,.etag.link{background:var(--info-bg);color:var(--info)} .etag.update{background:var(--brand-50);color:var(--brand)}
.mini{display:inline-flex;align-items:center;gap:4px;font-weight:700}
.mini.bad{color:var(--bad)}

/* ---------- shell ---------- */
.app{display:grid;grid-template-columns:var(--side) 1fr;min-height:100vh}
.side{position:sticky;top:0;height:100vh;border-right:1px solid var(--line);background:#fff;display:flex;flex-direction:column;z-index:30}
.brand{height:var(--top);display:flex;align-items:center;gap:12px;padding:0 22px}
.logo{width:38px;height:38px;border-radius:12px;background:var(--grad);color:#fff;display:grid;place-items:center;font-weight:700;font-size:17px;box-shadow:var(--glow)}
.brand b{font-size:15.5px;display:block;line-height:1.1;max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.brand small{color:var(--ink-3);font-size:11.5px;font-weight:700;letter-spacing:.04em}
.nav{flex:1;overflow-y:auto;padding:8px 14px 20px}
.nav h6{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);padding:20px 12px 8px;font-weight:700}
.nav a{position:relative;display:flex;align-items:center;gap:12px;height:44px;padding:0 10px;border-radius:13px;color:var(--ink-2);font-weight:700;transition:background .15s,color .15s;margin-bottom:2px}
.nav a .ni{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;color:var(--ink-3);transition:.2s var(--ease)}
.nav a:hover{background:var(--subtle);color:var(--ink)}
.nav a:hover .ni{color:var(--brand);background:#fff;box-shadow:var(--sh)}
.nav a.on{background:linear-gradient(90deg,var(--brand-50),rgba(238,240,255,0));color:var(--brand)}
.nav a.on::before{content:'';position:absolute;left:-14px;top:9px;bottom:9px;width:4px;border-radius:0 4px 4px 0;background:var(--grad)}
.nav a.on .ni{background:var(--grad);color:#fff;box-shadow:0 6px 14px rgba(79,93,255,.35)}
.nav a .cnt{margin-left:auto;background:var(--bad);color:#fff;border-radius:999px;font-size:11px;padding:1px 8px;font-weight:700;box-shadow:0 4px 10px rgba(208,53,43,.3)}
.side-foot{display:flex;align-items:center;gap:10px;padding:14px 24px;border-top:1px solid var(--line);color:var(--ink-3);font-weight:700;font-size:12px}
.live{width:8px;height:8px;border-radius:50%;background:#17a374;animation:ping 1.8s infinite}
.main{min-width:0;display:flex;flex-direction:column;background:radial-gradient(900px 380px at 90% -140px,#eef0ff 0%,rgba(255,255,255,0) 70%),#fff}
.top{height:var(--top);border-bottom:1px solid rgba(232,235,245,.9);display:flex;align-items:center;gap:12px;padding:0 30px;position:sticky;top:0;background:rgba(255,255,255,.82);backdrop-filter:saturate(1.6) blur(14px);z-index:20}
.top .menu{display:none}
.gsearch{position:relative;flex:1;max-width:460px}
.gsearch .input{padding-left:44px;padding-right:38px;background:var(--subtle);border-color:transparent;border-radius:999px;height:44px}
.gsearch .input:focus{background:#fff;border-color:var(--brand)}
.gsearch>.ico{position:absolute;left:15px;top:13px;color:var(--ink-3)}
.kbd{position:absolute;right:12px;top:11px;width:22px;height:22px;border-radius:6px;border:1px solid var(--line-2);background:#fff;color:var(--ink-3);font-size:12px;font-weight:700;display:grid;place-items:center}
.sr{position:absolute;top:52px;left:0;right:0;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:var(--sh-lg);overflow:hidden;z-index:40}
.sr a{display:flex;gap:12px;align-items:center;padding:11px 16px;color:var(--ink);border-bottom:1px solid var(--line);font-weight:600}
.sr a:hover{background:var(--subtle)} .sr small{color:var(--ink-3);display:block;font-weight:700}
.umenu{position:relative}
.create{height:42px;border-radius:999px;padding:0 18px}
.bell .dot{position:absolute;top:5px;right:5px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--bad);color:#fff;font-size:10.5px;font-weight:700;display:grid;place-items:center;border:2px solid #fff}
.ubtn{display:flex;align-items:center;gap:10px;height:46px;padding:0 10px 0 5px;border-radius:999px;border:1px solid var(--line);background:#fff;transition:.15s}
.ubtn:hover{box-shadow:var(--sh-md)}
.ubtn .t{text-align:left;line-height:1.2} .ubtn .t b{display:block;font-size:13.5px} .ubtn .t small{color:var(--ink-3);font-weight:700;font-size:11.5px}
.pop{position:absolute;right:0;top:54px;min-width:220px;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:var(--sh-lg);padding:8px;z-index:50;animation:fadeUp .18s var(--ease)}
.pop button{display:flex;width:100%;align-items:center;gap:10px;height:40px;padding:0 12px;border:0;background:none;border-radius:10px;font-weight:700;color:var(--ink-2)}
.pop button:hover{background:var(--subtle);color:var(--ink)}
.pop-user{padding:10px 12px 12px;border-bottom:1px solid var(--line);margin-bottom:6px}.pop-user b{display:block}.pop-user small{color:var(--ink-3);font-weight:600}
.bellpop{width:min(400px,92vw);padding:0;overflow:hidden}
.bp-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line)}
.bp-head .btn{width:auto;height:30px}
.bp-empty{padding:32px;text-align:center;color:var(--ink-3);font-weight:600;display:grid;gap:8px;justify-items:center}
.bp-foot{display:flex;align-items:center;justify-content:center;gap:6px;padding:12px;font-weight:700;border-top:1px solid var(--line);background:var(--subtle)}
.page{padding:30px;max-width:1500px;width:100%;animation:fadeUp .35s var(--ease)}
.ph{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:22px;flex-wrap:wrap}
.ph h1{font-size:28px} .ph p{color:var(--ink-3);font-weight:600;margin-top:4px}
.ph p.about{font-weight:500;margin-top:2px}
.ph .acts{display:flex;gap:10px;flex-wrap:wrap;align-items:center}

/* ---------- cards ---------- */
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);transition:box-shadow .25s,border-color .25s}
.card .ch{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--line)}
.card .ch h3{font-size:15.5px}
.card .cb{padding:22px}
.card .flush{margin:-22px}
.grid{display:grid;gap:20px}
.g4{grid-template-columns:repeat(4,1fr);margin-bottom:20px} .g3{grid-template-columns:repeat(3,1fr)} .g2{grid-template-columns:repeat(2,1fr)} .g21{grid-template-columns:minmax(0,1.85fr) minmax(0,1fr)}
.stagger>*{animation:fadeUp .55s var(--ease) both}
.stagger>*:nth-child(2){animation-delay:.05s}.stagger>*:nth-child(3){animation-delay:.1s}.stagger>*:nth-child(4){animation-delay:.15s}.stagger>*:nth-child(5){animation-delay:.2s}.stagger>*:nth-child(6){animation-delay:.25s}.stagger>*:nth-child(7){animation-delay:.3s}.stagger>*:nth-child(8){animation-delay:.35s}

/* ---------- hero ---------- */
.hero{position:relative;overflow:hidden;display:grid;grid-template-columns:1fr auto;gap:24px;align-items:center;padding:34px 38px;margin-bottom:20px;border-radius:26px;border:1px solid #e3e7ff;background:linear-gradient(120deg,#f5f6ff 0%,#eef1ff 45%,#f6efff 100%);box-shadow:0 20px 50px rgba(79,93,255,.10)}
.hero>*{position:relative;z-index:1}
.hero .kick{font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);font-size:11.5px}
.hero h1{font-size:34px;margin:6px 0 8px}
.hero p{color:var(--ink-2);font-weight:600;font-size:15.5px;max-width:560px}
.hero-acts{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px}
.hero-ring{display:flex;align-items:center;gap:16px;background:rgba(255,255,255,.75);backdrop-filter:blur(12px);padding:16px 22px;border-radius:20px;border:1px solid #fff;box-shadow:0 10px 30px rgba(60,70,160,.12)}
.hero-ring b{display:block;font-size:16px}.hero-ring small{color:var(--ink-3);font-weight:700}
.orb{position:absolute!important;border-radius:50%;filter:blur(40px);opacity:.55;z-index:0!important;animation:float 9s ease-in-out infinite}
.orb.o1{width:260px;height:260px;right:-60px;top:-90px;background:#8fa0ff}
.orb.o2{width:200px;height:200px;right:220px;bottom:-110px;background:#c9a6ff;animation-delay:-3s}
.orb.o3{width:140px;height:140px;left:38%;top:-60px;background:#9fe0ff;animation-delay:-6s;opacity:.4}

/* ---------- task pulse tiles ---------- */
.pulse{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-bottom:20px}
.dash .pulse{grid-template-columns:repeat(4,1fr)}
.pt{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;padding:16px 18px;border-radius:18px;border:1px solid var(--line);background:#fff;box-shadow:var(--sh);transition:transform .2s var(--ease),box-shadow .2s,border-color .2s;animation:fadeUp .5s var(--ease) both;animation-delay:calc(var(--i,0)*50ms)}
.pt:hover{transform:translateY(-3px);box-shadow:var(--sh-md);border-color:var(--line-2)}
.pt.on{border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-50)}
.pt .pi{width:38px;height:38px;border-radius:12px;background:var(--brand-50);color:var(--brand);display:grid;place-items:center;margin-bottom:8px}
.pt .pv{font-size:30px;font-weight:700;letter-spacing:-.03em;line-height:1}
.pt .pl{font-size:12.5px;font-weight:700;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em;margin-top:6px}
.pt small{color:var(--ink-3);font-weight:600;font-size:12px}
.pt.bad .pi{background:var(--bad-bg);color:var(--bad)} .pt.warn .pi{background:var(--warn-bg);color:var(--warn)}
.pt.bad.hot{background:linear-gradient(160deg,#fff4f3,#fff 60%);border-color:#f6c9c4}.pt.bad.hot .pv{color:var(--bad)}
.pt.warn.hot{background:linear-gradient(160deg,#fff8ea,#fff 60%);border-color:#f3dba9}.pt.warn.hot .pv{color:var(--warn)}
.pt.big{padding:20px 22px}.pt.big .pv{font-size:38px}

/* ---------- kpi ---------- */
.kpi{position:relative;padding:20px 22px;display:flex;flex-direction:column;gap:14px;overflow:hidden}
.kpi::before{content:'';position:absolute;left:0;right:0;top:0;height:3px;background:var(--grad);opacity:0;transition:.25s}
.kpi.click{cursor:pointer}.kpi.click:hover{box-shadow:var(--sh-md);transform:translateY(-3px);border-color:var(--line-2)}.kpi.click:hover::before{opacity:1}
.kpi .kt{display:flex;align-items:center;justify-content:space-between;color:var(--ink-3);font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.06em}
.kpi .kicon{width:38px;height:38px;border-radius:12px;background:var(--grad-soft);color:var(--brand);display:grid;place-items:center}
.kpi.bad .kicon{background:var(--bad-bg);color:var(--bad)} .kpi.warn .kicon{background:var(--warn-bg);color:var(--warn)} .kpi.ok .kicon{background:var(--ok-bg);color:var(--ok)}
.kpi .kbot{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.kpi .kv{font-size:31px;font-weight:700;letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums}
.kpi .ks{font-size:12.5px;color:var(--ink-3);font-weight:600;margin-top:8px}
.spark{flex:none;opacity:.95}
.bar{height:8px;border-radius:99px;background:var(--subtle-2);overflow:hidden}
.bar>i{display:block;height:100%;border-radius:99px;background:var(--grad);transition:width .8s var(--ease)}
.bar.ok>i{background:linear-gradient(90deg,#20c08d,#0b8a62)} .bar.warn>i{background:linear-gradient(90deg,#f5b13d,#e8930c)} .bar.bad>i{background:linear-gradient(90deg,#f0685d,#d0352b)}
.rowbar{display:grid;grid-template-columns:120px 1fr 44px;gap:12px;align-items:center;margin-bottom:12px;font-weight:600;font-size:13px}
.rowbar span:last-child{text-align:right;color:var(--ink-2);font-weight:700}
.legend{display:flex;gap:16px;font-size:12px;font-weight:700;color:var(--ink-2)}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px}
.cwrap{position:relative}
.bchart{width:100%;height:auto;display:block;overflow:visible}
.bchart .ax{font-size:11px;fill:var(--ink-3);font-weight:700;font-family:inherit}
.ctip{position:absolute;top:0;transform:translateX(-50%);background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--sh-md);padding:10px 12px;font-size:12.5px;font-weight:700;pointer-events:none;white-space:nowrap;z-index:5}
.ctip b{display:block;margin-bottom:4px}.ctip i{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:7px}
.ringbox{position:relative;flex:none;display:inline-block}
.ringbox svg{display:block}
.rarc{transition:stroke-dashoffset 1.1s var(--ease)}
.rlab{position:absolute;inset:0;display:grid;place-content:center;text-align:center;line-height:1.1}
.rlab b{font-size:15px}.rlab small{font-size:10px;color:var(--ink-3);font-weight:700}
.brows{display:grid;grid-template-columns:1fr 1fr;gap:16px}.brow{display:flex;align-items:center;gap:12px}.brow b{display:block;font-size:13.5px}.brow small{color:var(--ink-3);font-weight:700;font-size:12px}
.perf{display:flex;align-items:center;gap:20px}.perf .big{font-size:34px;letter-spacing:-.03em;display:block;line-height:1}.perf small{color:var(--ink-3);font-weight:700}

/* ---------- toolbar, chips, table ---------- */
.tb{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:18px}
.tb .search{position:relative;width:300px}
.tb .search .input{padding-left:42px;border-radius:999px;background:var(--subtle);border-color:transparent}
.tb .search .input:focus{background:#fff;border-color:var(--brand)}
.tb .search .ico{position:absolute;left:15px;top:13px;color:var(--ink-3)}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{height:36px;padding:0 15px;border-radius:999px;border:1px solid var(--line-2);background:#fff;font-weight:700;font-size:13px;color:var(--ink-2);display:inline-flex;align-items:center;gap:8px;transition:.15s}
.chip:hover{border-color:#aeb8dc;transform:translateY(-1px)}
.chip.on{background:var(--ink);border-color:var(--ink);color:#fff;box-shadow:0 8px 18px rgba(13,19,48,.25)}
.chip.ghost{border-color:transparent;background:var(--subtle-2)} .chip.ghost.on{background:var(--brand-50);color:var(--brand);border-color:var(--brand-100);box-shadow:none}
.chip em{font-style:normal;font-size:11.5px;opacity:.7}
.seg{display:inline-flex;border:1px solid var(--line-2);border-radius:12px;overflow:hidden;background:#fff;padding:3px;gap:2px}
.seg button{height:34px;min-width:40px;padding:0 12px;border:0;background:transparent;color:var(--ink-3);border-radius:9px;display:inline-flex;align-items:center;justify-content:center;gap:7px;font-weight:700;font-size:13px;transition:.15s}
.seg button:hover{color:var(--ink)}
.seg button.on{background:var(--brand-50);color:var(--brand)}
.seg.lg{width:100%}.seg.lg button{flex:1;height:40px}
.seg button.urgent.on{background:var(--bad-bg);color:var(--bad)}
.tw{overflow-x:auto}
table.t{width:100%;border-collapse:collapse}
.t th{text-align:left;font-size:11.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);font-weight:700;padding:13px 20px;background:var(--subtle);border-bottom:1px solid var(--line);white-space:nowrap}
.t td{padding:15px 20px;border-bottom:1px solid var(--line);vertical-align:middle}
.t tbody tr{cursor:pointer;transition:background .12s}
.t tbody tr:hover{background:linear-gradient(90deg,var(--brand-50),rgba(238,240,255,.2))}
.t tbody tr:last-child td{border-bottom:0}
.t .pri{font-weight:700;display:block} .t .code{display:block;font-size:11.5px;color:var(--ink-3);font-weight:700;letter-spacing:.03em}
.t .over{color:var(--bad);font-weight:700}
.pager{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-top:1px solid var(--line);color:var(--ink-3);font-weight:600;font-size:13px}
.pager .pg{display:flex;gap:6px}
.empty{padding:60px 24px;text-align:center;color:var(--ink-3)}
.empty .ico{width:68px;height:68px;border-radius:22px;background:var(--grad-soft);color:var(--brand);margin-bottom:16px;box-shadow:inset 0 0 0 1px var(--brand-100)}
.empty h4{color:var(--ink);margin-bottom:6px;font-size:17px}
.empty p{max-width:400px;margin:0 auto 18px;font-weight:500}
.skeleton-list{display:grid;gap:10px}.sk{height:68px;border-radius:16px;background:linear-gradient(90deg,#f3f4fb 25%,#eaecfa 37%,#f3f4fb 63%);background-size:400% 100%;animation:shimmer 1.4s infinite}
.tabs{display:flex;gap:6px;margin-bottom:18px;border-bottom:1px solid var(--line)}
.tab{display:inline-flex;align-items:center;gap:8px;height:44px;padding:0 16px;border:0;background:none;color:var(--ink-3);font-weight:700;border-bottom:3px solid transparent;margin-bottom:-1px;transition:.15s}
.tab:hover{color:var(--ink)}.tab.on{color:var(--brand);border-color:var(--brand)}
.tab em{font-style:normal;background:var(--bad);color:#fff;border-radius:99px;font-size:11px;padding:1px 8px}

/* ---------- task rows ---------- */
.tlist{display:grid;gap:8px}
.trow{position:relative;display:grid;grid-template-columns:1fr 150px 108px 210px 44px;gap:16px;align-items:center;padding:14px 16px 14px 22px;border:1px solid var(--line);border-radius:16px;background:#fff;cursor:pointer;transition:transform .18s var(--ease),box-shadow .2s,border-color .2s;overflow:hidden}
.trow:hover{transform:translateY(-2px);box-shadow:var(--sh-md);border-color:var(--line-2)}
.trow .stripe{position:absolute;left:0;top:0;bottom:0;width:5px;background:#c8d0ea}
.trow.pri-medium .stripe{background:#8ea2ff}.trow.pri-high .stripe{background:#f5a524}.trow.pri-critical .stripe{background:#e5484d}.trow.pri-low .stripe{background:#d3d9ec}
.trow.overdue{background:linear-gradient(90deg,#fff2f0,#fff 46%);border-color:#f6cbc6}
.trow.soon{background:linear-gradient(90deg,#fff5f3,#fff 46%);border-color:#f6d3cd}
.trow.today{background:linear-gradient(90deg,#fff9ec,#fff 46%)}
.trow.done{opacity:.8}
.tmain b{display:block;font-size:15px;margin-bottom:5px;letter-spacing:-.01em}
.tmeta{display:flex;flex-wrap:wrap;gap:10px;align-items:center;font-size:12px;color:var(--ink-3);font-weight:700}
.tmeta .badge{height:20px;font-size:11px;padding:0 8px}
.tppl{display:flex;flex-direction:column;gap:4px}.tppl small{color:var(--ink-3);font-weight:700;font-size:11.5px}
.tact{display:flex;justify-content:flex-end}
.duechip{display:inline-flex;align-items:center;gap:7px;min-height:32px;padding:4px 12px;border-radius:999px;background:var(--subtle-2);color:var(--ink-2);font-size:12.5px;font-weight:700;flex-wrap:wrap}
.duechip b{font-weight:700}.duechip small{color:inherit;opacity:.7;font-weight:600;font-size:11.5px}
.duechip.bad{background:var(--bad-bg);color:var(--bad)} .duechip.warn{background:var(--warn-bg);color:var(--warn)} .duechip.info{background:var(--info-bg);color:var(--info)} .duechip.ok{background:var(--ok-bg);color:var(--ok)}
.focus{display:grid;gap:26px}
.bsec>header{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.bsec>header b{font-size:15px}.bsec>header em{font-style:normal;font-weight:700;font-size:12px;background:var(--subtle-2);color:var(--ink-2);border-radius:99px;padding:2px 10px}
.bsec>header small{color:var(--ink-3);font-weight:600}
.bsec>header .bi{width:30px;height:30px;border-radius:10px;display:grid;place-items:center;background:var(--subtle-2);color:var(--ink-2)}
.bsec.bad>header .bi{background:var(--bad-bg);color:var(--bad)}.bsec.warn>header .bi{background:var(--warn-bg);color:var(--warn)}.bsec.info>header .bi{background:var(--info-bg);color:var(--info)}.bsec.ok>header .bi{background:var(--ok-bg);color:var(--ok)}
.people{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.pcard{background:#fff;border:1px solid var(--line);border-radius:20px;padding:18px;box-shadow:var(--sh)}
.pcard.hot{border-color:#f6cbc6;box-shadow:0 12px 30px rgba(208,53,43,.08)}
.phead{display:flex;align-items:center;gap:14px;margin-bottom:14px;flex-wrap:wrap}
.pname{flex:1;min-width:120px}.pname b{display:block;font-size:16px}.pname small{color:var(--ink-3);font-weight:700}
.pcounts{display:flex;gap:6px;flex-wrap:wrap}
.cnt{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:99px;background:var(--subtle-2);color:var(--ink-2);font-size:11.5px;font-weight:700}
.cnt.bad{background:var(--bad-bg);color:var(--bad)}.cnt.warn{background:var(--warn-bg);color:var(--warn)}
.pcard .trow{grid-template-columns:1fr 200px;padding:12px 14px 12px 20px}
.pcard .trow .tppl,.pcard .trow .tstage,.pcard .trow .tact{display:none}
.pfree{display:flex;align-items:center;gap:8px;padding:14px;border-radius:12px;background:var(--ok-bg);color:var(--ok);font-weight:700}
.pcard .more{margin-top:8px;width:100%}

/* ---------- board ---------- */
.board{display:grid;grid-auto-flow:column;grid-auto-columns:296px;gap:16px;overflow-x:auto;padding-bottom:14px;align-items:start}
.bcol{background:var(--subtle);border-radius:18px;padding:12px;min-height:220px;border:1.5px dashed transparent;transition:.15s}
.bcol.over{border-color:var(--brand);background:var(--brand-50)}
.bcol h5{display:flex;justify-content:space-between;font-size:12px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-2);padding:4px 6px 12px}
.bcard{background:#fff;border:1px solid var(--line);border-radius:14px;padding:13px;margin-bottom:10px;cursor:grab;box-shadow:var(--sh);transition:.18s var(--ease)}
.bcard:hover{box-shadow:var(--sh-md);border-color:var(--line-2);transform:translateY(-2px)}
.bcard.overdue,.bcard.soon{border-left:4px solid var(--bad)} .bcard.today{border-left:4px solid #f5a524}
.bcard b{display:block;font-size:14px;margin-bottom:10px}
.bcard .bm{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;color:var(--ink-3);font-weight:700}

/* ---------- drawer, modal ---------- */
#layer .scrim{position:fixed;inset:0;background:rgba(13,19,48,.42);backdrop-filter:blur(3px);z-index:100;animation:fade .2s}
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(620px,100vw);background:#fff;z-index:101;display:flex;flex-direction:column;box-shadow:var(--sh-lg);animation:slide .32s var(--ease);border-radius:24px 0 0 24px}
.drawer.wide{width:min(760px,100vw)}
@keyframes slide{from{transform:translateX(60px);opacity:0}to{transform:none;opacity:1}}
.dh{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:22px 28px;border-bottom:1px solid var(--line)}
.dh h2{font-size:21px} .dh small{color:var(--brand);font-weight:700;letter-spacing:.08em;font-size:11.5px}
.db{flex:1;overflow-y:auto;padding:26px 28px}
.df{display:flex;gap:10px;justify-content:flex-end;padding:16px 28px;border-top:1px solid var(--line);background:#fff}
.df.composer-foot{display:block;padding:14px 20px;background:var(--subtle)}
.modal{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);width:min(440px,92vw);background:#fff;border-radius:22px;z-index:101;box-shadow:var(--sh-lg);padding:28px;animation:pop .22s var(--ease)}
@keyframes pop{from{opacity:0;transform:translate(-50%,-47%) scale(.97)}to{opacity:1;transform:translate(-50%,-50%)}}
.modal h3{margin-bottom:8px;font-size:19px} .modal p{color:var(--ink-2);margin-bottom:20px}
.modal .row{display:flex;gap:10px;justify-content:flex-end;margin-top:8px}
.modal.wide{padding:0;width:min(520px,94vw);max-height:90vh;overflow:auto}
.modal.wide .mh{display:flex;justify-content:space-between;align-items:flex-start;padding:22px 26px 14px}
.modal.wide .mh small{color:var(--brand);font-weight:700;letter-spacing:.08em;font-size:11.5px;display:block}
.modal.wide .mb{padding:4px 26px 8px}
.modal.wide .row{padding:16px 26px 22px;border-top:1px solid var(--line);margin-top:8px}
.dl{display:grid;grid-template-columns:150px 1fr;gap:14px 16px;margin:0}
.dl dt{color:var(--ink-3);font-weight:700;font-size:12.5px;text-transform:uppercase;letter-spacing:.04em;padding-top:2px}
.dl dd{font-weight:600;word-break:break-word}
.steps{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:22px}
.step{height:36px;padding:0 15px;border-radius:999px;border:1px solid var(--line-2);background:#fff;font-weight:700;font-size:12.5px;color:var(--ink-2);transition:.15s}
.step:hover{border-color:var(--brand);color:var(--brand)}
.step.now{background:var(--grad);border-color:transparent;color:#fff;box-shadow:var(--glow)}
.step.past{background:var(--brand-50);border-color:var(--brand-100);color:var(--brand)}
.step:disabled{opacity:.45;cursor:not-allowed}
.tl{border-left:2px solid var(--line);margin-left:6px;padding-left:18px}
.tl div{position:relative;padding-bottom:14px;font-weight:600;font-size:13px}
.tl div::before{content:'';position:absolute;left:-25px;top:5px;width:10px;height:10px;border-radius:50%;background:var(--brand);border:2px solid #fff;box-shadow:0 0 0 1px var(--brand-100)}
.tl small{display:block;color:var(--ink-3)}
.sect{font-size:11.5px;text-transform:uppercase;letter-spacing:.09em;color:var(--ink-3);font-weight:700;margin:28px 0 12px;display:flex;align-items:center}
.ckrow{display:flex;align-items:center;gap:10px;padding:10px 14px;border:1px solid var(--line);border-radius:12px;margin-bottom:8px;font-weight:600;cursor:pointer;transition:.15s}
.ckrow:hover{border-color:var(--brand-100);background:var(--subtle)}
.ckrow.done{background:var(--ok-bg);border-color:#bfe6d5;color:var(--ok)}
.ckrow input{width:18px;height:18px;accent-color:var(--ok)}

/* ---------- task detail ---------- */
.dacts{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px}
.dhero{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 22px;border-radius:20px;background:var(--grad-soft);border:1px solid var(--brand-100);margin-bottom:18px}
.dhero small{display:block;color:var(--ink-3);font-weight:700;text-transform:uppercase;letter-spacing:.07em;font-size:11px}
.dhero b{display:block;font-size:22px;margin:2px 0 8px;letter-spacing:-.02em}
.dhero.overdue,.dhero.soon{background:linear-gradient(135deg,#fff1ef,#fff7f6);border-color:#f6cbc6}
.dhero.today{background:linear-gradient(135deg,#fff8e8,#fffcf5);border-color:#f3dba9}
.dhero.done{background:linear-gradient(135deg,#e9f9f1,#f5fcf9);border-color:#bfe6d5}
.ring{position:relative;width:64px;height:64px;flex:none}.ring span{position:absolute;inset:0;display:grid;place-items:center;font-weight:700;font-size:13px}
.facts{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;padding:18px;border:1px solid var(--line);border-radius:16px;margin-bottom:6px}
.fact small{display:block;color:var(--ink-3);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px}
.fact>div{font-weight:700;font-size:13.5px}
.plist{display:grid;gap:8px}
.prow{display:flex;align-items:center;gap:12px;padding:10px 14px;border:1px solid var(--line);border-radius:14px}
.prow.done{background:#f6fdf9;border-color:#cbeadb}
.prow .pinfo{flex:1}.prow .pinfo b{display:block;font-size:14px}.prow .pinfo small{color:var(--ink-3);font-weight:600}
.watch{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;color:var(--ink-3);font-weight:700;font-size:13px}
.desc{white-space:pre-wrap;font-weight:500;color:var(--ink-2);padding:16px 18px;background:var(--subtle);border-radius:14px}
.thread{position:relative;display:grid;gap:14px}
.thread-empty{display:grid;justify-items:center;gap:6px;padding:30px;border:1.5px dashed var(--line-2);border-radius:18px;color:var(--ink-3);text-align:center;font-weight:600}
.thread-empty b{color:var(--ink)}
.entry{display:grid;grid-template-columns:32px 1fr;gap:12px;align-items:flex-start;animation:fadeUp .3s var(--ease)}
.ecard{background:#fff;border:1px solid var(--line);border-radius:16px;padding:12px 16px;min-width:0}
.ehead{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}.ehead small{color:var(--ink-3);font-weight:600;margin-left:auto}
.etext{white-space:pre-wrap;font-weight:500;word-break:break-word}
.entry.blocker.open .ecard{background:#fff6f5;border-color:#f6cbc6}
.entry.complete .ecard{background:#f4fcf8;border-color:#c5e9d8}
.entry.sys{display:block;text-align:center;color:var(--ink-3);font-weight:700;font-size:12px}
.ebody{display:grid;gap:10px}
.attach{display:flex;align-items:center;gap:12px;padding:10px 14px;border:1px solid var(--line-2);border-radius:12px;background:#fff;color:var(--ink);transition:.15s}
.attach:hover{border-color:var(--brand);box-shadow:var(--sh)}
.attach>span{flex:1;min-width:0}.attach b{display:block;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attach small{color:var(--ink-3);font-weight:600}
.attach .ico:first-child{color:var(--brand)}
.blk{display:inline-flex;align-items:center;gap:6px;font-weight:700;color:var(--bad);font-size:13px}.blk.ok{color:var(--ok)}
.composer textarea{margin-bottom:10px;background:#fff;min-height:64px}
.crow{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.linkrow{display:flex;gap:8px;margin-bottom:10px}
.ro{display:flex;align-items:center;gap:8px;color:var(--ink-3);font-weight:700}
.dpreview{margin-top:10px;font-size:12.5px;font-weight:700;color:var(--brand);background:var(--brand-50);padding:9px 12px;border-radius:10px}

/* ---------- people picker ---------- */
.pp{position:relative}
.pp-box{display:block;border:1px solid var(--line-2);border-radius:12px;padding:6px 8px;min-height:46px;background:#fff;cursor:text;transition:.15s}
.pp-box:focus-within{border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-50)}
.pp-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.pp-chip{display:inline-flex;align-items:center;gap:6px;background:var(--brand-50);color:var(--brand);font-weight:700;font-size:13px;padding:3px 6px 3px 4px;border-radius:999px}
.pp-chip button{border:0;background:none;color:inherit;display:grid;place-items:center;width:18px;height:18px;border-radius:50%}.pp-chip button:hover{background:var(--brand-100)}
.pp-in{border:0;outline:0;flex:1;min-width:130px;height:32px;font-weight:500;background:transparent}
.pp-list{position:absolute;left:0;right:0;top:calc(100% + 6px);background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--sh-lg);max-height:260px;overflow:auto;z-index:60;padding:6px}
.pp-row{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:0;background:none;border-radius:10px;text-align:left}
.pp-row:hover,.pp-row.on{background:var(--brand-50)}.pp-row.on{color:var(--brand)}
.pp-t{flex:1}.pp-t b{display:block;font-size:13.5px}.pp-t small{color:var(--ink-3);font-weight:600}
.pp-none{padding:14px;color:var(--ink-3);font-weight:600;text-align:center}
.pp-quick{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.pp-quick .chip{height:30px;font-size:12px;padding:0 12px}

/* ---------- alerts ---------- */
.al{display:flex;gap:14px;padding:15px 22px;border-bottom:1px solid var(--line);align-items:center;cursor:pointer;transition:background .12s}
.al:hover{background:linear-gradient(90deg,var(--brand-50),rgba(255,255,255,0))} .al:last-child{border-bottom:0}
.al>.ico{width:38px;height:38px;border-radius:12px}
.al.critical>.ico{background:var(--bad-bg);color:var(--bad)} .al.warning>.ico{background:var(--warn-bg);color:var(--warn)} .al.info>.ico{background:var(--info-bg);color:var(--info)}
.al b{display:block} .al small{color:var(--ink-3);font-weight:600}
.al .when{margin-left:auto;color:var(--ink-3);font-weight:700;font-size:12.5px;white-space:nowrap}
.al.task{gap:12px}.al.task .tl-main{flex:1;min-width:0}.al.task .tl-main b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.al.task .tdot{width:10px;height:10px;border-radius:50%;background:#c8d0ea;flex:none}
.al.task.overdue .tdot,.al.task.soon .tdot{background:var(--bad);box-shadow:0 0 0 4px var(--bad-bg)}.al.task.today .tdot{background:#f5a524;box-shadow:0 0 0 4px var(--warn-bg)}.al.task.tomorrow .tdot{background:var(--info)}
.tl-side{display:flex;gap:6px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.nrow{position:relative;display:grid;grid-template-columns:40px 1fr auto;gap:14px;align-items:flex-start;padding:15px 22px;border-bottom:1px solid var(--line);cursor:pointer;transition:background .12s}
.nrow:hover{background:var(--subtle)}.nrow:last-child{border-bottom:0}
.nrow.unread{background:linear-gradient(90deg,#f5f6ff,#fff 60%)}
.nrow .nicon{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;background:var(--brand-50);color:var(--brand)}
.nrow.urgent .nicon{background:var(--bad-bg);color:var(--bad)}
.ntitle{font-weight:700;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.nrow.unread .ntitle{color:var(--ink)}
.nbody{color:var(--ink-2);font-weight:500;margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.nmeta{display:flex;gap:12px;color:var(--ink-3);font-weight:700;font-size:12px;margin-top:5px;flex-wrap:wrap}
.nrow .when{color:var(--ink-3);font-weight:700;font-size:12px;white-space:nowrap}
.udot{position:absolute;left:8px;top:28px;width:8px;height:8px;border-radius:50%;background:var(--brand)}
.bellpop .nrow{padding:12px 16px 12px 22px}.bellpop .nrow .nicon{width:34px;height:34px}.bellpop .nrow{grid-template-columns:34px 1fr auto}
.mods{display:grid;grid-template-columns:1fr 1fr;gap:4px 16px}
.mgroup{font-size:11.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);font-weight:700;margin:14px 0 4px;grid-column:1/-1}

/* ---------- login ---------- */
.auth{min-height:100vh;display:grid;grid-template-columns:minmax(400px,540px) 1fr;background:#fff}
.auth .l{display:flex;flex-direction:column;justify-content:center;padding:48px 64px;animation:fadeUp .5s var(--ease)}
.auth .l .brand{border:0;padding:0;height:auto;margin-bottom:46px}
.auth h1{font-size:34px;margin-bottom:10px} .auth .l>p{color:var(--ink-2);margin-bottom:30px;font-weight:600}
.auth .r{position:relative;overflow:hidden;background:linear-gradient(140deg,#f2f4ff 0%,#ebe9ff 50%,#f8f0ff 100%);display:flex;align-items:center;justify-content:center;padding:48px}
.auth .r .orb.o1{right:-80px;top:-60px;width:380px;height:380px}.auth .r .orb.o2{left:-60px;bottom:-80px;right:auto;width:320px;height:320px}
.demo{position:relative;z-index:1;width:min(440px,100%);display:grid;gap:18px}
.demo-card{background:rgba(255,255,255,.82);backdrop-filter:blur(14px);border:1px solid #fff;border-radius:22px;padding:20px 22px;box-shadow:0 24px 60px rgba(60,70,170,.18)}
.demo-card .dt{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.demo-card b{font-size:15.5px}
.demo-card .bar{margin-top:12px}
.feat{display:grid;gap:16px;margin-top:6px}
.feat>div{display:flex;gap:14px;align-items:flex-start;background:rgba(255,255,255,.55);border:1px solid rgba(255,255,255,.9);border-radius:16px;padding:14px 16px}
.feat .ico{width:38px;height:38px;border-radius:12px;background:#fff;border:1px solid var(--line);color:var(--brand);box-shadow:var(--sh)}
.feat b{display:block;font-size:14.5px;margin-bottom:2px} .feat span{color:var(--ink-2);font-weight:600;font-size:13px}
.note{padding:12px 14px;border-radius:12px;font-weight:700;font-size:13.5px;margin-bottom:16px}
.note.bad{background:var(--bad-bg);color:var(--bad)} .note.ok{background:var(--ok-bg);color:var(--ok)} .note.info{background:var(--info-bg);color:var(--info)}
.code-box{background:var(--subtle);border:1px solid var(--line);border-radius:12px;padding:12px;font-family:ui-monospace,monospace;font-size:12px;word-break:break-all;margin:10px 0}
.setup{max-width:680px;margin:64px auto;padding:0 24px}
.setup ol{margin:16px 0 0 20px;display:grid;gap:8px;color:var(--ink-2);font-weight:500}

/* ---------- toast ---------- */
#toasts{position:fixed;bottom:24px;right:24px;display:grid;gap:10px;z-index:200}
.toast{background:var(--ink);color:#fff;padding:13px 18px;border-radius:14px;font-weight:700;box-shadow:var(--sh-lg);display:flex;gap:10px;align-items:center;max-width:400px;animation:fadeUp .3s var(--ease)}
.toast.bad{background:linear-gradient(135deg,#e5484d,#c22b31)} .toast.ok{background:linear-gradient(135deg,#12a878,#0b8a62)}

/* ---------- responsive ---------- */
@media(max-width:1180px){
  .g4{grid-template-columns:repeat(2,1fr)}.g21,.g3{grid-template-columns:1fr}
  .pulse,.dash .pulse{grid-template-columns:repeat(2,1fr)}
  .people{grid-template-columns:1fr}
  .trow{grid-template-columns:1fr 110px 200px 40px}.trow .tppl{display:none}
  .hero{grid-template-columns:1fr}.hero-r{display:none}
}
@media(max-width:860px){
  .app{grid-template-columns:1fr}
  .side{position:fixed;left:0;top:0;width:284px;transform:translateX(-100%);transition:.28s var(--ease)}
  .side.open{transform:none;box-shadow:var(--sh-lg)}
  .top{padding:0 14px;gap:8px}.top .menu{display:grid}.create span:not(.ico){display:none}.create{padding:0 13px}
  .page{padding:18px 14px}
  .hero{padding:26px 22px}.hero h1{font-size:26px}
  .g4,.g2{grid-template-columns:1fr}.grid2{grid-template-columns:1fr}.mods{grid-template-columns:1fr}.brows{grid-template-columns:1fr}
  .auth{grid-template-columns:1fr}.auth .r{display:none}.auth .l{padding:32px 24px}
  .ubtn .t{display:none}.tb .search{width:100%}
  .dl{grid-template-columns:1fr;gap:4px}.dl dd{margin-bottom:10px}
  .trow{grid-template-columns:1fr;gap:10px}.trow .tstage{display:none}.trow .tact{position:absolute;right:10px;top:10px}
  .facts{grid-template-columns:1fr}
  .drawer,.drawer.wide{width:100vw;border-radius:0}
  .seg button span:not(.ico){display:none}
  .bellpop{position:fixed;left:12px;right:12px;top:72px;width:auto}
  .sr{position:fixed;left:12px;right:12px;top:72px}
}
@media print{.side,.top,.tb,.ph .acts,.pager{display:none!important}.app{display:block}.card{box-shadow:none}}

/* ==================== pipeline, direction, people, attendance, hiring, rules ==================== */
.form{display:block}.form2{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.small{font-size:12.5px}.bad-t{color:var(--bad)}.ok-t{color:var(--ok)}.inl{display:flex;align-items:center;gap:10px;margin-top:8px;flex-wrap:wrap}
.input.sm{height:36px;font-size:13px;border-radius:10px}
textarea.input{height:auto;min-height:88px;padding:11px 14px;line-height:1.5;resize:vertical}
.btn-lg{height:52px;padding:0 28px;font-size:15px;border-radius:15px}
.back{display:inline-flex;align-items:center;gap:6px;font-weight:700;color:var(--ink-3);margin-bottom:12px}.back:hover{color:var(--brand)}
.who.big{gap:16px}.who.big h1{font-size:26px}.who.big p{color:var(--ink-3);font-weight:600;margin-top:2px}
.avatar.lg{width:58px;height:58px;font-size:20px;border-radius:18px}
.pcttag{display:inline-flex;height:24px;align-items:center;padding:0 10px;border-radius:99px;background:var(--subtle-2);font-weight:700;font-size:12.5px}
.pcttag.ok{background:var(--ok-bg);color:var(--ok)}.pcttag.warn{background:var(--warn-bg);color:var(--warn)}.pcttag.bad{background:var(--bad-bg);color:var(--bad)}
.sub2{display:block;color:var(--ink-3);font-weight:600;font-size:11.5px;margin-top:3px}

/* pipeline */
.pipe .ch{gap:14px;flex-wrap:wrap}
.pipe-sum{display:flex;align-items:center;gap:22px;flex-wrap:wrap;margin-bottom:18px;color:var(--ink-3);font-weight:600}
.pipe-sum b{color:var(--ink);font-size:18px;margin-right:4px}.pipe-sum .bad b{color:var(--bad)}.pipe-sum .btn{margin-left:auto}
.rail{display:grid;gap:14px;margin-bottom:16px}
.rs{position:relative;padding:14px 16px 13px;border-radius:14px;background:var(--subtle);border:1px solid var(--line);animation:fadeUp .5s var(--ease) both;animation-delay:calc(var(--i,0)*60ms)}
.rs:not(:last-child)::after{content:'';position:absolute;right:-9px;top:50%;width:14px;height:14px;background:var(--subtle);border-top:1px solid var(--line);border-right:1px solid var(--line);transform:translateY(-50%) rotate(45deg);border-radius:3px;z-index:2}
.rs.done{background:var(--ok-bg);border-color:#c3e9da}.rs.done:not(:last-child)::after{background:var(--ok-bg);border-color:#c3e9da}
.rs-top{display:flex;align-items:center;justify-content:space-between}
.rs-n{font-size:28px;font-weight:700;letter-spacing:-.03em;line-height:1}.rs.done .rs-n{color:var(--ok)}
.rs-l{display:block;margin-top:6px;font-size:12px;font-weight:700;color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rs-stuck{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 8px;border-radius:99px;background:var(--warn-bg);color:var(--warn);font-size:11.5px;font-weight:700}
.rs-bar{display:block;height:4px;border-radius:9px;background:rgba(13,19,48,.07);margin-top:10px;overflow:hidden}.rs-bar b{display:block;height:100%;background:var(--grad);border-radius:9px;transition:width .6s var(--ease)}
.rs.done .rs-bar b{background:linear-gradient(90deg,#12a878,#0b8a62)}
.colwrap{overflow-x:auto;margin:0 -4px;padding:0 4px 6px}
.cols{display:grid;gap:14px;align-items:start;min-width:0}
.col{display:flex;flex-direction:column;gap:10px;min-width:0}
.pc{display:block;background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 13px;box-shadow:var(--sh);color:inherit;transition:.18s var(--ease)}
.pc:hover{transform:translateY(-2px);box-shadow:var(--sh-md);border-color:var(--line-2)}
.pc.stale{border-left:4px solid #f5a524}
.pc b{display:block;font-size:13.5px;line-height:1.35;margin-bottom:8px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.pc-m{font-size:12px;color:var(--ink-3);font-weight:600;margin-bottom:8px}.pc-m .who{gap:6px}.pc-m .avatar{width:20px;height:20px;font-size:9px;border-radius:7px}
.pc-f{display:flex;align-items:center;justify-content:space-between;gap:8px}
.age{font-size:11.5px;font-weight:700;color:var(--warn)}.age.ok{color:var(--ink-3);font-weight:600}
.col-none{border:1.5px dashed var(--line-2);border-radius:14px;padding:18px 12px;text-align:center;color:var(--ink-3);font-weight:600;font-size:12.5px}
.col-more{display:flex;align-items:center;justify-content:center;gap:4px;font-weight:700;font-size:12.5px;padding:6px}

/* direction */
.dir{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:14px;margin-bottom:12px}
.dtile{position:relative;display:flex;flex-direction:column;gap:2px;padding:16px;border-radius:16px;border:1px solid var(--line);background:linear-gradient(160deg,#fff,var(--subtle));color:inherit;transition:.2s var(--ease)}
.dtile:hover{transform:translateY(-3px);box-shadow:var(--sh-md);border-color:var(--line-2)}
.dic{width:34px;height:34px;border-radius:11px;background:var(--brand-50);color:var(--brand);display:grid;place-items:center;margin-bottom:8px}
.dtv{font-size:28px;font-weight:700;letter-spacing:-.03em;line-height:1.1}
.dtl{font-size:12px;font-weight:700;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em}
.dtd{display:flex;align-items:center;gap:5px;font-size:12.5px;font-weight:700;color:var(--ink-3);margin-top:6px}
.dtile.up .dtd{color:var(--ok)}.dtile.down .dtd{color:var(--bad)}.dtile.down .dtd .ico{transform:scaleY(-1)}
.dtile .bar{margin-top:8px}

/* people rows */
.pr2{display:grid;grid-template-columns:minmax(170px,1.2fr) 120px minmax(190px,2fr) 70px 70px;gap:16px;align-items:center;padding:13px 22px;border-bottom:1px solid var(--line);color:inherit;transition:background .15s}
.pr2:last-child{border-bottom:0}.pr2:hover{background:var(--subtle)}
.pr2 small{display:block;color:var(--ink-3);font-weight:600;font-size:12px}
.pr2 .who{gap:10px}.pr2 b{font-weight:700}
.tr-st{display:flex;flex-direction:column;gap:3px;align-items:flex-start}.tr-work b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tr-n{text-align:right}.tr-n b{font-size:16px}.tr-n b.ok{color:var(--ok)}.tr-n b.warn{color:var(--warn)}.tr-n b.bad{color:var(--bad)}
.ppl .focuscell{max-width:280px}.ppl .focuscell b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppl .focuscell small{color:var(--ink-3);font-weight:600}
.ppl tr,.att-t tr{cursor:pointer}
.today .tline{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;margin-bottom:6px}
.today h5{margin:14px 0 6px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3)}
.sum{white-space:pre-wrap;background:var(--subtle);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-top:8px;font-weight:500;color:var(--ink-2)}
.maplink{display:inline-flex;align-items:center;gap:4px;margin-left:10px;font-weight:700;font-size:12.5px}
.prj{display:block;padding:12px 0;border-bottom:1px solid var(--line);color:inherit}.prj:last-child{border-bottom:0}
.prj-t{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.prj small{color:var(--ink-3);font-weight:600;display:block;margin-top:6px}
.flushbox{padding:0}.flushbox .flush{margin:0}
.cal-nav{display:flex;align-items:center;gap:6px}
.tdot.ok{background:var(--ok)}.tdot.bad{background:var(--bad)}

/* attendance */
.att-card{overflow:hidden;background:linear-gradient(135deg,#fff 0%,#f5f6ff 100%)}
.att-hero{display:flex;align-items:center;gap:20px;flex-wrap:wrap}
.att-hero>div{flex:1;min-width:220px}.att-hero h2{font-size:22px}.att-hero p{color:var(--ink-3);font-weight:600;margin-top:4px}
.att-ico{width:64px;height:64px;border-radius:20px;display:grid;place-items:center;background:var(--grad);color:#fff;box-shadow:var(--glow);flex:none}
.att-ico.ok{background:linear-gradient(135deg,#12a878,#0b8a62);box-shadow:0 10px 26px rgba(11,138,98,.3)}
.att-open .fld{margin-top:18px}
.att-card .note{margin:16px 0 0}
.cal-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.cal em{font-style:normal;text-align:center;font-size:11.5px;font-weight:700;color:var(--ink-3);padding-bottom:4px}
.day{position:relative;aspect-ratio:1;border-radius:12px;border:1px solid var(--line);background:#fff;font-weight:700;font-size:13px;display:grid;place-items:center;color:var(--ink-2);transition:.15s}
.day.pad{border:0;background:none}.day:not(.pad):hover{border-color:var(--brand)}
.day.ok{background:var(--ok-bg);color:var(--ok);border-color:#c3e9da}.day.warn{background:var(--warn-bg);color:var(--warn);border-color:#f3dba9}
.day.bad{background:var(--bad-bg);color:var(--bad);border-color:#f6cbc6}.day.info{background:var(--info-bg);color:var(--info)}
.day.off{background:var(--subtle);color:#b3bad0;border-color:transparent}
.day.today{box-shadow:0 0 0 2px var(--brand)}.day.pick{outline:3px solid var(--brand-100)}
.day i{position:absolute;bottom:5px;width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.7}
.att-det h4{margin-bottom:8px}.att-det p{margin-top:6px}
.att-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;text-align:center}
.as b{display:block;font-size:24px}.as small{color:var(--ink-3);font-weight:700;font-size:11.5px}.as.ok b{color:var(--ok)}.as.warn b{color:var(--warn)}.as.bad b{color:var(--bad)}
.att-sum{display:grid;grid-template-columns:repeat(6,1fr);gap:14px}
.att-sum .pt{cursor:default;animation:none}.att-sum .pt:hover{transform:none}
.att-t .sumcell{max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2)}
.office{border:1px solid var(--line);border-radius:16px;padding:16px;margin-bottom:14px;background:var(--subtle)}
.og{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:0 14px}
.oa{display:flex;gap:10px;flex-wrap:wrap}
.chip.sm{height:26px;font-size:12px;padding:0 10px;cursor:default}
.chipcell{display:flex;gap:6px;flex-wrap:wrap;max-width:420px}

/* attendance: camera capture */
.cam-wrap{display:flex;flex-direction:column;align-items:center;gap:10px}
.cam-video,.cam-shot{width:100%;max-width:380px;aspect-ratio:4/3;border-radius:16px;background:#111;object-fit:cover;transform:scaleX(-1)}
.cam-shot{transform:none}

/* attendance: sessions list */
.sess-list{margin-top:18px;display:grid;gap:8px}
.sess-row{display:grid;grid-template-columns:36px 1fr auto auto auto;gap:10px;align-items:center;padding:9px 12px;border-radius:12px;background:var(--subtle);font-weight:600;font-size:13px}
.sess-n{color:var(--ink-3);font-weight:700}
.sess-ph{display:flex;gap:8px;color:var(--brand)}
.sess-ph a{display:inline-flex}

/* attendance: leave */
.ph.sub{margin-top:2px}
.leave-row .cb{padding:16px 20px}
.lr-h{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}
.lr-h small{color:var(--ink-3);font-weight:600}

/* attendance: shifts */
.shift-assign{display:grid;gap:8px}
.shift-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--line)}
.shift-row:last-child{border-bottom:0}
.shift-row select{max-width:220px}

/* hiring */
.hire{cursor:pointer;transition:.2s var(--ease)}.hire:hover{transform:translateY(-3px);box-shadow:var(--sh-md)}.hire.flagged{border-color:#f6cbc6}
.hire-top{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.hire-top h3{margin:2px 0}
.hire-mid{display:flex;gap:8px;margin:14px 0;flex-wrap:wrap}
.hire-next{padding:12px 14px;border-radius:12px;background:var(--subtle);margin-bottom:14px}.hire-next small{display:block;color:var(--ink-3);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.06em}.hire-next b{font-size:13.5px}
.hire-foot{display:flex;align-items:center;justify-content:space-between;gap:10px}
.hire-detail{display:grid;gap:18px}
.sps{display:flex;flex-direction:column}
.sp{display:flex;gap:14px;padding:14px 0;border-bottom:1px solid var(--line)}.sp:last-child{border-bottom:0}
.sn{width:32px;height:32px;border-radius:50%;flex:none;display:grid;place-items:center;font-weight:700;font-size:13px;background:var(--subtle-2);color:var(--ink-3)}
.sp.done .sn{background:var(--ok);color:#fff}.sp.skip .sn{background:var(--warn-bg);color:var(--warn)}
.sp.now .sn{background:var(--grad);color:#fff;box-shadow:var(--glow)}.sp.flag .sn{background:var(--bad);color:#fff}
.sb{flex:1;min-width:0}.st{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.st b{font-weight:700}
.own{font-size:11.5px;font-weight:700;background:var(--brand-50);color:var(--brand);border-radius:99px;padding:2px 9px}
.sub{display:block;color:var(--ink-3);font-weight:600;font-size:12.5px;margin-top:3px}
.sact{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;align-items:center}.sact .input{flex:1;min-width:180px}
.sp.done .st b{color:var(--ink-3);text-decoration:line-through;text-decoration-color:var(--line-2)}
.audit-top{display:flex;align-items:center;gap:18px;margin-bottom:16px}.audit .note{margin-bottom:12px}.audit .note small{display:block;font-weight:600;opacity:.85;margin-top:4px}
.audit .note b{display:block}
.stage-sel{height:36px;border-radius:10px}
.plan-sum{display:grid;gap:14px}.ps h5{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);margin-bottom:6px}
.ps ul{list-style:none;display:grid;gap:6px}.ps li{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:600;padding:8px 12px;border-radius:10px;background:var(--subtle)}
.give{margin-top:16px}
.sopc{cursor:pointer;transition:.2s var(--ease)}.sopc:hover{transform:translateY(-3px);box-shadow:var(--sh-md)}
.sopc h3{margin:8px 0 4px}.sop-preview{margin:14px 0 14px 18px;color:var(--ink-2);font-weight:600;display:grid;gap:4px}.sop-preview .more{color:var(--ink-3);list-style:none;margin-left:-18px}
.sps-in{font-family:inherit;min-height:220px}
.pi-row{border:1px solid var(--line);border-radius:14px;padding:12px;margin-bottom:10px;background:var(--subtle)}
.pi-a{display:grid;grid-template-columns:1fr 130px 70px auto 36px;gap:10px;align-items:center;margin-bottom:8px}.pi-a .input{height:40px}

/* rules */
.rule{cursor:pointer;transition:.2s var(--ease)}.rule:hover{transform:translateY(-2px);box-shadow:var(--sh-md)}.rule.off{opacity:.55}
.rule-top{display:flex;align-items:center;gap:14px;margin-bottom:10px}.rule-top>div{flex:1}.rule-top h3{font-size:15.5px}
.rule-ico{width:44px;height:44px;border-radius:14px;background:var(--brand-50);color:var(--brand);display:grid;place-items:center;flex:none}.rule-ico.bad{background:var(--bad-bg);color:var(--bad)}
.nicon.bad{background:var(--bad-bg);color:var(--bad)}.nicon.warn{background:var(--warn-bg);color:var(--warn)}

@media(max-width:1180px){.att-sum{grid-template-columns:repeat(3,1fr)}.og{grid-template-columns:1fr 1fr}.pr2{grid-template-columns:minmax(150px,1.2fr) 110px minmax(160px,2fr) 60px}.pr2 .tr-n:last-child{display:none}}
@media(max-width:860px){.form2,.og{grid-template-columns:1fr}.att-sum{grid-template-columns:repeat(2,1fr)}.att-stats{grid-template-columns:repeat(3,1fr)}.pi-a{grid-template-columns:1fr 1fr}.pr2{grid-template-columns:1fr auto}.pr2 .tr-work,.pr2 .tr-n{display:none}.pipe-sum .btn{margin-left:0}.att-hero .btn-lg{width:100%}}
.grid>*,.g2>*,.g3>*,.g21>*{min-width:0}
.tw{max-width:100%;overflow-x:auto}
.dash>.card{margin-bottom:20px}

/* reference numbers + budget calculator */
.ref-gen-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.ref-gen-grid .fld:only-child{grid-column:1/-1}
.sub-h{font-size:12px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);margin:0 0 12px}
.ref-row{transition:.2s var(--ease)}
.ref-row.fresh{border-color:var(--brand-100);box-shadow:0 0 0 3px var(--brand-50)}
.rr-h{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:8px}
.rr-h .row{align-items:center}
.refnum{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:800;font-size:16px;letter-spacing:.02em}
.budget-preview{margin-top:14px;padding-top:14px;border-top:1px dashed var(--line-2)}
.budget-rows{display:grid;gap:2px;margin-top:8px}
.brow{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:9px;font-weight:600;font-size:14px}
.brow span{color:var(--ink-2)}
.brow.cut{background:var(--bad-bg)}.brow.cut b{color:var(--bad)}
.brow.tax{background:var(--warn-bg)}.brow.tax b{color:var(--warn)}
.brow.base{background:var(--info-bg)}.brow.base b{color:var(--info)}
.brow.profit{background:var(--ok-bg);font-weight:800}.brow.profit b{color:var(--ok)}
