:root{--bg: #08080a;--bg-elev: #101013;--bg-elev2: #16161a;--panel: #0d0d10;--border: #1f1f24;--border-strong: #2a2a31;--text: #e6e6e9;--text-dim: #9a9aa4;--text-faint: #6a6a73;--accent: #5e6ad2;--accent-soft: #5e6ad233;--accent-bright: #7c8af0;--green: #4cb782;--amber: #f2c94c;--red: #eb5757;--orange: #e8833a;--radius: 7px;--bar-h: 26px;--row-h: 44px;--font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--font);background:var(--bg);color:var(--text);font-size:13px;line-height:1.45;-webkit-font-smoothing:antialiased;letter-spacing:-.01em}button{font-family:inherit;cursor:pointer}::selection{background:var(--accent-soft)}.app{display:flex;flex-direction:column;height:100%}.topbar{height:48px;display:flex;align-items:center;gap:14px;padding:0 16px;border-bottom:1px solid var(--border);background:var(--bg-elev);flex-shrink:0}.brand{display:flex;align-items:center;gap:9px;font-weight:600;font-size:14px;letter-spacing:-.02em}.brand .logo{width:20px;height:20px;border-radius:6px;background:linear-gradient(135deg,var(--accent-bright),var(--accent));box-shadow:0 0 14px var(--accent-soft)}.brand .sub{color:var(--text-faint);font-weight:400;font-size:12px}.spacer{flex:1}.topbar .org{color:var(--text-dim);font-size:12px;display:flex;align-items:center;gap:6px}.topbar select{background:var(--bg-elev2);color:var(--text);border:1px solid var(--border-strong);border-radius:var(--radius);padding:5px 8px;font-size:12px}.main{flex:1;display:flex;min-height:0}.canvas{flex:1;display:flex;flex-direction:column;min-width:0}.sidebar{background:var(--panel);display:flex;flex-direction:column;overflow-y:auto;flex-shrink:0}.sidebar-resizer{width:7px;flex-shrink:0;margin-left:-3px;z-index:7;cursor:col-resize;background:transparent;border-left:1px solid var(--border)}.sidebar-resizer:hover,.sidebar-resizer:active{background:var(--accent-soft);border-left-color:var(--accent)}.btn{display:inline-flex;align-items:center;gap:6px;background:var(--bg-elev2);color:var(--text);border:1px solid var(--border-strong);border-radius:var(--radius);padding:6px 11px;font-size:12px;font-weight:500;transition:background .12s,border-color .12s}.btn:hover{background:#1d1d22;border-color:#34343d}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:var(--accent-bright)}.btn.primary:disabled{opacity:.45;cursor:not-allowed}.btn.ghost{background:transparent;border-color:transparent;color:var(--text-dim)}.btn.ghost:hover{background:var(--bg-elev2);color:var(--text)}.btn.danger:hover{border-color:var(--red);color:var(--red)}.btn.sm{padding:3px 7px;font-size:11px}.pill{font-size:10.5px;padding:2px 7px;border-radius:20px;font-weight:600;background:var(--bg-elev2);color:var(--text-dim);border:1px solid var(--border)}.pill.warn{color:var(--amber);border-color:#4a3f1a;background:#1f1a0c}.pill.bad{color:var(--red);border-color:#4a1f1f;background:#1f0d0d}.pill.ok{color:var(--green);border-color:#16382a;background:#0c1f17}.pill.accent{color:var(--accent-bright);border-color:#2c3066;background:#14152b}.toolbar{height:44px;display:flex;align-items:center;gap:10px;padding:0 14px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--bg-elev)}.toolbar .seg{display:flex;background:var(--bg);border:1px solid var(--border-strong);border-radius:var(--radius);overflow:hidden}.toolbar .seg button{background:transparent;border:none;color:var(--text-dim);padding:5px 11px;font-size:12px}.toolbar .seg button.active{background:var(--bg-elev2);color:var(--text)}.toolbar .zoom{display:flex;align-items:center;gap:4px;color:var(--text-faint)}.gantt{flex:1;display:flex;min-height:0}.g-left{flex-shrink:0;display:flex;flex-direction:column;min-height:0;background:var(--bg-elev)}.g-left-body{flex:1;overflow-y:auto;overflow-x:hidden}.g-col-head{position:sticky;top:0;z-index:5;height:30px;display:flex;align-items:center;padding:0 14px;font-size:11px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.06em;background:var(--bg-elev);border-bottom:1px solid var(--border)}.g-group{display:flex;align-items:center;gap:7px;padding:0 14px;box-sizing:border-box;background:var(--bg-elev2);border-bottom:1px solid var(--border);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim)}.g-group .dot{width:8px;height:8px}.g-namerow{display:flex;flex-direction:column;justify-content:center;gap:2px;padding:0 14px;box-sizing:border-box;border-bottom:1px solid #131316}.g-namerow:hover{background:#0c0c0f}.g-resizer{width:7px;flex-shrink:0;margin:0 -3px;z-index:7;cursor:col-resize;background:transparent;border-right:1px solid var(--border)}.g-resizer:hover,.g-resizer:active{background:var(--accent-soft);border-right-color:var(--accent)}.g-right{flex:1;min-width:0}.g-right-body{height:100%;overflow:auto}.g-canvas{position:relative}.g-ticks{position:sticky;top:0;z-index:5;background:var(--bg-elev);border-bottom:1px solid var(--border)}.g-rows{position:relative}.g-band{position:absolute;left:0;width:100%;background:var(--bg-elev2);border-bottom:1px solid var(--border)}.g-lane{position:absolute;left:0;width:100%;border-bottom:1px solid #131316}.g-lane:hover{background:#0c0c0f}.month-tick{position:absolute;top:0;bottom:0;border-left:1px solid var(--border);font-size:11px;color:var(--text-faint);padding:7px 0 0 6px}.row-name{font-size:12.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:6px}.row-meta{font-size:10.5px;color:var(--text-faint);display:flex;gap:6px;align-items:center}.dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.dot.backlog{background:#6a6a73}.dot.planned{background:#9a9aa4}.dot.started{background:var(--accent-bright)}.dot.paused{background:var(--amber)}.dot.completed{background:var(--green)}.dot.canceled{background:var(--red)}.group-count{margin-left:auto;color:var(--text-faint);font-weight:600;background:var(--bg);border:1px solid var(--border);border-radius:20px;padding:0 7px;font-size:10px}.bar{position:absolute;height:var(--bar-h);top:calc((var(--row-h) - var(--bar-h)) / 2);border-radius:6px;display:flex;align-items:center;padding:0 8px;gap:6px;background:linear-gradient(180deg,#3a4080,#2f3568);border:1px solid #4a52a8;color:#eef;font-size:11px;font-weight:500;cursor:grab;-webkit-user-select:none;user-select:none;overflow:hidden;white-space:nowrap;box-shadow:0 1px 3px #0006;transition:box-shadow .12s,filter .12s}.bar:hover{filter:brightness(1.12);box-shadow:0 2px 8px #5e6ad24d}.bar.dragging{cursor:grabbing;filter:brightness(1.18);box-shadow:0 4px 16px #5e6ad273;z-index:10}.bar.drifted{border-color:var(--orange)}.bar.changed{border-color:var(--accent-bright);box-shadow:0 0 0 1px var(--accent-soft),0 1px 3px #0006}.bar.resolution{background-image:repeating-linear-gradient(45deg,transparent,transparent 5px,rgba(255,255,255,.05) 5px,rgba(255,255,255,.05) 10px)}.bar .handle{position:absolute;top:0;bottom:0;width:7px;cursor:ew-resize}.bar .handle.l{left:0}.bar .handle.r{right:0}.bar .handle:hover{background:#ffffff2e}.bar .bar-label{overflow:hidden;text-overflow:ellipsis;pointer-events:none}.baseline-ghost{position:absolute;height:var(--bar-h);top:calc((var(--row-h) - var(--bar-h)) / 2);border-radius:6px;border:1px dashed #55555f;background:repeating-linear-gradient(45deg,transparent,transparent 6px,#ffffff08 6px,#ffffff08 12px);pointer-events:none}.ms{position:absolute;width:10px;height:10px;top:50%;transform:translate(-50%,-50%) rotate(45deg);background:var(--amber);border:1px solid #1a1505;z-index:4;cursor:pointer}.ms:hover{background:#ffe07a}.deadline-line{position:absolute;top:0;bottom:0;width:0;border-left:2px dashed var(--red);z-index:3;pointer-events:none}.deadline-flag{position:absolute;top:2px;transform:translate(-50%);font-size:10px;color:#fff;background:var(--red);padding:1px 6px;border-radius:4px;white-space:nowrap;z-index:8;pointer-events:auto;cursor:default}.today-line{position:absolute;top:0;bottom:0;width:0;border-left:1px solid var(--accent);opacity:.55;z-index:2}.dep-svg{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:3;overflow:visible}.dep-path{stroke:#6b6b78;stroke-width:1.5;fill:none}.dep-path.violated{stroke:var(--red);stroke-dasharray:4 3}.panel{border-bottom:1px solid var(--border)}.panel-head{display:flex;align-items:center;gap:8px;padding:11px 14px;font-size:12px;font-weight:600;position:sticky;top:0;background:var(--panel);z-index:1}.panel-head .count{margin-left:auto}.panel-body{padding:4px 14px 14px;display:flex;flex-direction:column;gap:7px}.change-row,.drift-row{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elev);font-size:12px}.change-row .k{font-weight:500}.change-row .d,.drift-row .d{color:var(--text-dim);font-size:11px}.drift-row.bad{border-color:#3a1f1f}.drift-row .delta{font-weight:600}.delta.pos{color:var(--orange)}.delta.neg{color:var(--green)}.delta.zero{color:var(--text-faint)}.empty{color:var(--text-faint);font-size:12px;padding:8px 0;text-align:center}.apply-bar{padding:14px;display:flex;flex-direction:column;gap:9px;border-top:1px solid var(--border);background:var(--bg-elev)}.apply-bar .summary{font-size:12px;color:var(--text-dim)}.banner{padding:9px 11px;border-radius:var(--radius);font-size:12px;display:flex;gap:8px;align-items:flex-start}.banner.warn{background:#1f1a0c;border:1px solid #4a3f1a;color:var(--amber)}.banner.bad{background:#1f0d0d;border:1px solid #4a1f1f;color:#f3a}.banner.ok{background:#0c1f17;border:1px solid #16382a;color:var(--green)}.rollup{display:flex;gap:8px;flex-wrap:wrap;padding:11px 14px}.chip{background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--radius);padding:8px 11px;flex:1;min-width:92px}.chip .v{font-size:18px;font-weight:650;letter-spacing:-.02em}.chip .l{font-size:10.5px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.05em;margin-top:2px}.chip.alert .v{color:var(--orange)}.chip.bad .v{color:var(--red)}.center{flex:1;display:flex;align-items:center;justify-content:center}.connect-card{max-width:440px;text-align:center;padding:44px 40px;border:1px solid var(--border);border-radius:14px;background:var(--bg-elev);box-shadow:0 24px 60px #00000080}.connect-card .logo-lg{width:52px;height:52px;border-radius:14px;margin:0 auto 22px;background:linear-gradient(135deg,var(--accent-bright),var(--accent));box-shadow:0 0 40px var(--accent-soft)}.connect-card h1{font-size:23px;letter-spacing:-.03em;margin-bottom:10px}.connect-card p{color:var(--text-dim);margin-bottom:26px;line-height:1.6}.connect-card .features{text-align:left;margin:0 auto 28px;max-width:320px;display:flex;flex-direction:column;gap:10px}.connect-card .feature{display:flex;gap:10px;font-size:12.5px;color:var(--text-dim)}.connect-card .feature b{color:var(--text);font-weight:600}.spinner{width:22px;height:22px;border:2px solid var(--border-strong);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:50}.modal{width:380px;background:var(--bg-elev);border:1px solid var(--border-strong);border-radius:12px;padding:20px;box-shadow:0 24px 60px #0009}.modal h3{font-size:15px;margin-bottom:14px}.field{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}.field label{font-size:11px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em}.field input,.field select{background:var(--bg);border:1px solid var(--border-strong);border-radius:var(--radius);padding:8px 10px;color:var(--text);font-size:13px;font-family:inherit}.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:6px}.multi{display:flex;flex-direction:column;gap:5px;max-height:160px;overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius);padding:8px}.multi label{display:flex;gap:8px;align-items:center;font-size:12px;color:var(--text);text-transform:none;letter-spacing:0}.toast{position:fixed;bottom:18px;left:50%;transform:translate(-50%);background:var(--bg-elev2);border:1px solid var(--border-strong);padding:9px 16px;border-radius:9px;font-size:12.5px;z-index:60;box-shadow:0 12px 32px #00000080}.toast.bad{border-color:var(--red);color:#f88}.toast.ok{border-color:var(--green);color:#8f8}.linkbtn{background:none;border:none;color:var(--accent-bright);font-size:12px;padding:0}.linkbtn:hover{text-decoration:underline}.hint{font-size:11px;color:var(--text-faint)}
