:root{--bg: #f6f7f9;--panel: #ffffff;--ink: #1e2330;--ink-soft: #5b6472;--ink-faint: #95a0b0;--line: #e7eaef;--line-soft: #eef1f5;--brand: #4f46e5;--brand-soft: #eef0ff;--accent: #0ea5e9;--danger: #ef4444;--warn: #f59e0b;--ok: #10b981;--shadow: 0 1px 2px rgba(16, 24, 40, .06), 0 1px 3px rgba(16, 24, 40, .08);--shadow-lg: 0 10px 30px rgba(16, 24, 40, .14);--radius: 10px;--sidebar-w: 232px;--rail-w: 200px;--row-h: 56px;--col-w: 44px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-size:14px;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}::-webkit-scrollbar{height:10px;width:10px}::-webkit-scrollbar-thumb{background:#cdd4de;border-radius:6px;border:2px solid var(--bg)}.app{display:flex;height:100vh;overflow:hidden}.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);background:#131a2b;color:#c7cedb;display:flex;flex-direction:column;padding:14px 12px}.sidebar .brand{display:flex;align-items:center;gap:10px;padding:6px 8px 14px}.sidebar .brand .logo{width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,#6366f1,#0ea5e9);display:grid;place-items:center;color:#fff;font-weight:800}.sidebar .brand b{color:#fff;font-size:15px;letter-spacing:.2px}.sidebar .brand small{display:block;color:#7c879b;font-size:11px}.nav{display:flex;flex-direction:column;gap:2px;margin-top:6px}.nav a{display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:8px;color:#aab3c4;font-weight:500}.nav a .ico{width:18px;text-align:center;opacity:.9}.nav a:hover{background:#1c2435;color:#e8ecf3}.nav a.active{background:#283250;color:#fff}.sidebar .spacer{flex:1}.sidebar .org-pill{margin-top:10px;padding:10px;background:#1b2334;border-radius:9px;font-size:12px;color:#9aa4b6}.sidebar .org-pill b{color:#e8ecf3;display:block;font-size:13px}.main{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{height:56px;flex:0 0 56px;background:var(--panel);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:14px;padding:0 20px}.topbar h1{font-size:16px;margin:0;font-weight:650}.topbar .sub{color:var(--ink-faint);font-size:12.5px}.topbar .right{margin-left:auto;display:flex;align-items:center;gap:10px}.content{flex:1;overflow:auto;padding:20px}.btn{border:1px solid var(--line);background:var(--panel);color:var(--ink);padding:7px 13px;border-radius:8px;font-weight:600;font-size:13px;display:inline-flex;align-items:center;gap:7px;box-shadow:var(--shadow)}.btn:hover{background:#fafbfc}.btn.primary{background:var(--brand);color:#fff;border-color:var(--brand)}.btn.primary:hover{background:#4338ca}.btn.ghost{box-shadow:none;border-color:transparent;background:transparent}.btn.ghost:hover{background:#eef1f5}.btn.sm{padding:4px 9px;font-size:12px}.btn.danger{color:var(--danger)}.chip{display:inline-flex;align-items:center;gap:6px;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:600;background:var(--line-soft);color:var(--ink-soft)}.chip.dot:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}.tag{font-size:11px;padding:1px 8px;border-radius:6px;background:var(--brand-soft);color:var(--brand);font-weight:600}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card .hd{padding:14px 16px;border-bottom:1px solid var(--line-soft);display:flex;align-items:center;gap:10px}.card .hd h3{margin:0;font-size:14px;font-weight:650}.card .bd{padding:16px}.grid{display:grid;gap:16px}.muted{color:var(--ink-faint)}.soft{color:var(--ink-soft)}.row{display:flex;align-items:center;gap:10px}.between{display:flex;align-items:center;justify-content:space-between;gap:10px}.spread{display:flex;gap:14px;flex-wrap:wrap}hr.sep{border:none;border-top:1px solid var(--line-soft);margin:12px 0}.avatar{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:700;font-size:12px;flex:0 0 auto}.avatar.sq{border-radius:7px}input,select,textarea{font-family:inherit;font-size:13px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);width:100%}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}label.field{display:block;margin-bottom:12px}label.field>span{display:block;font-size:12px;font-weight:600;color:var(--ink-soft);margin-bottom:5px}table.tbl{width:100%;border-collapse:collapse;font-size:13px}table.tbl th{text-align:left;font-weight:600;color:var(--ink-soft);font-size:11.5px;text-transform:uppercase;letter-spacing:.4px;padding:9px 12px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel)}table.tbl td{padding:9px 12px;border-bottom:1px solid var(--line-soft)}table.tbl tr:hover td{background:#fafbfc}.num{text-align:right;font-variant-numeric:tabular-nums}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}.kpi .label{font-size:12px;color:var(--ink-faint);font-weight:600}.kpi .value{font-size:24px;font-weight:720;margin-top:4px;letter-spacing:-.5px}.kpi .delta{font-size:12px;margin-top:2px;font-weight:600}.delta.up{color:var(--ok)}.delta.down{color:var(--danger)}.meter{height:8px;border-radius:999px;background:var(--line);overflow:hidden}.meter>span{display:block;height:100%;border-radius:999px;background:var(--brand)}.sched-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.zoom{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;box-shadow:var(--shadow)}.zoom button{border:none;background:#fff;padding:6px 11px;font-size:12.5px;font-weight:600;color:var(--ink-soft);border-right:1px solid var(--line)}.zoom button:last-child{border-right:none}.zoom button.on{background:var(--brand);color:#fff}.sched{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:auto;max-height:calc(100vh - 190px);position:relative}.sched-inner{display:grid}.sched-head{display:grid;position:sticky;top:0;z-index:6;background:var(--panel)}.sched-corner{position:sticky;left:0;z-index:8;background:var(--panel);border-right:1px solid var(--line);border-bottom:1px solid var(--line);width:var(--rail-w);display:flex;align-items:center;padding:0 12px;font-size:12px;font-weight:600;color:var(--ink-soft)}.day-cells{display:grid}.day-cell{border-right:1px solid var(--line-soft);border-bottom:1px solid var(--line);text-align:center;padding:5px 0;font-size:11px;color:var(--ink-soft)}.day-cell.weekend{background:#f7f8fa}.day-cell.today{background:var(--brand-soft);color:var(--brand);font-weight:700}.day-cell .wd{font-size:10px;color:var(--ink-faint)}.day-cell .dm{font-weight:600}.month-row{display:grid}.month-cell{font-size:11.5px;font-weight:700;color:var(--ink-soft);padding:4px 8px;border-right:1px solid var(--line);border-bottom:1px solid var(--line-soft);position:sticky}.group-row{display:grid;grid-template-columns:var(--rail-w) 1fr;background:#f3f5f8;border-bottom:1px solid var(--line);position:sticky;left:0}.group-row .lbl{padding:5px 12px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--ink-faint);position:sticky;left:0}.res-row{display:grid;position:relative;border-bottom:1px solid var(--line)}.res-rail{position:sticky;left:0;z-index:4;background:var(--panel);border-right:1px solid var(--line);width:var(--rail-w);display:flex;align-items:center;gap:9px;padding:0 10px}.res-rail .nm{min-width:0}.res-rail .nm b{font-size:13px;font-weight:600;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.res-rail .nm small{color:var(--ink-faint);font-size:11px}.res-rail .clash-badge{margin-left:auto;background:var(--danger);color:#fff;font-size:10.5px;font-weight:700;border-radius:999px;min-width:18px;height:18px;padding:0 5px;display:grid;place-items:center}.lane{position:relative}.lane-cells{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;pointer-events:none}.lane-cell{border-right:1px solid var(--line-soft)}.lane-cell.weekend{background:#f7f8fa}.lane-cell.today{background:#4f46e50d}.lane-cell.off{background:repeating-linear-gradient(45deg,#fbe9e9,#fbe9e9 4px,#fff 4px,#fff 8px)}.lane-hit{position:absolute;top:0;right:0;bottom:0;left:0;display:grid}.lane-hit>div{cursor:copy}.lane-hit>div.dragover{background:var(--brand-soft)}.avail-bar{position:absolute;left:0;right:0;bottom:2px;height:4px;display:grid;pointer-events:none}.avail-bar>span{margin:0 3px;border-radius:2px;background:#d6f5e3}.avail-bar>span.partial{background:#fde8c8}.avail-bar>span.over{background:#f6c9c9}.avail-bar>span.none{background:transparent}.bk{position:absolute;top:5px;height:calc(var(--row-h) - 16px);border-radius:7px;padding:4px 8px;color:#fff;font-size:11.5px;overflow:hidden;box-shadow:0 1px 2px #0000002e;cursor:grab;z-index:2;border:1.5px solid transparent}.bk:active{cursor:grabbing}.bk b{font-weight:700;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.25}.bk small{opacity:.92;font-size:10.5px}.bk.tentative{background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.22),rgba(255,255,255,.22) 5px,transparent 5px,transparent 10px)}.bk.pending{border-color:#fff;border-style:dashed}.bk.waitlisted{opacity:.72;border-style:dotted;border-color:#fff}.bk .badge-q{position:absolute;top:2px;right:4px;font-weight:800}.bk .grip{position:absolute;top:0;bottom:0;width:7px;cursor:ew-resize}.bk .grip.l{left:0}.bk .grip.r{right:0}.bk.clashing{box-shadow:0 0 0 2px var(--danger),0 1px 2px #0003}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#1418216b;display:grid;place-items:center;z-index:50;padding:20px}.modal{background:var(--panel);border-radius:14px;box-shadow:var(--shadow-lg);width:540px;max-width:100%;max-height:90vh;overflow:auto}.modal.wide{width:720px}.modal .mhd{padding:16px 20px;border-bottom:1px solid var(--line-soft);display:flex;align-items:center}.modal .mhd h3{margin:0;font-size:16px}.modal .mbd{padding:20px}.modal .mft{padding:14px 20px;border-top:1px solid var(--line-soft);display:flex;gap:10px;justify-content:flex-end}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}.toggle{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:500;cursor:pointer}.x{margin-left:auto;border:none;background:transparent;font-size:20px;color:var(--ink-faint);line-height:1;padding:2px 6px}.x:hover{color:var(--ink)}.banner{padding:9px 13px;border-radius:9px;font-size:12.5px;font-weight:600;display:flex;align-items:center;gap:8px}.banner.warn{background:#fff5e6;color:#9a6700;border:1px solid #ffe2b3}.banner.err{background:#fdecec;color:#a3261f;border:1px solid #f7c9c5}.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--ink-soft)}.legend span{display:inline-flex;align-items:center;gap:6px}.swatch{width:13px;height:13px;border-radius:4px}.empty{text-align:center;padding:50px 20px;color:var(--ink-faint)}.loader{display:grid;place-items:center;height:100vh;color:var(--ink-faint);font-weight:600}.gantt{overflow-x:auto}.gantt-row{display:grid;align-items:center;border-bottom:1px solid var(--line-soft);height:38px}.gantt-rail{position:sticky;left:0;background:var(--panel);padding:0 12px;font-size:13px;display:flex;align-items:center;gap:8px;z-index:2}.gantt-track{position:relative;height:100%}.gbar{position:absolute;top:8px;height:22px;border-radius:6px;display:flex;align-items:center;padding:0 8px;color:#fff;font-size:11px;font-weight:600;white-space:nowrap;overflow:hidden}.gbar.phase{opacity:.96}.gbar.task{height:18px;top:10px}.gmile{position:absolute;top:7px;width:0;height:0}.gmile i{position:absolute;transform:translate(-50%) rotate(45deg);width:12px;height:12px;top:4px;box-shadow:var(--shadow)}.gmile span{position:absolute;transform:translate(-50%);top:20px;font-size:10px;white-space:nowrap;color:var(--ink-soft)}.dep-line{position:absolute;height:2px;background:var(--ink-faint);z-index:1}.seg{display:flex;gap:6px}.pill-btn{padding:5px 10px;border-radius:999px;border:1px solid var(--line);background:#fff;font-size:12px;font-weight:600;color:var(--ink-soft)}.pill-btn.on{background:var(--brand);color:#fff;border-color:var(--brand)}
