:root{--rail: #151b38;--rail-active: #2a3463;--rail-icon: #aab2d3;--bg: #f3f5fa;--panel: #ffffff;--line: #e1e5ef;--line-soft: #eceff6;--grid: #f0f2f8;--text: #1c2340;--muted: #5d6585;--accent: #4a5bd6;--accent-ink: #3943a8;--accent-soft: #eef1fd;--today: #e5383b;--warn-bg: #fff6e0;--warn-line: #f1dca6;--warn-ink: #4d3500;--danger: #b42318;--ok-bg: #d9f2e6;--ok-ink: #14573a;--row: 32px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;font-size:14px}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--accent-ink)}h1{margin:0;font-size:20px;font-weight:600}h2{margin:0;font-size:15px;font-weight:600}.app{display:flex;min-height:100%}.rail{flex:0 0 64px;background:var(--rail);display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 0;position:sticky;top:0;height:100vh;z-index:60}.rail .logo{width:36px;height:36px;border-radius:10px;overflow:hidden;box-shadow:0 0 0 1px #ffffff24;margin-bottom:16px}.rail-btn{width:44px;height:44px;border:0;border-radius:12px;background:transparent;color:var(--rail-icon);display:flex;align-items:center;justify-content:center;cursor:pointer;text-decoration:none;position:relative}.rail-btn:hover{background:#1f2750;color:#fff}.rail-btn.active{background:var(--rail-active);color:#fff}.rail-btn .tip{display:none;position:absolute;left:54px;top:50%;transform:translateY(-50%);background:var(--text);color:#fff;font-size:12px;padding:4px 8px;border-radius:6px;white-space:nowrap;z-index:50}.rail-btn:hover .tip{display:block}.avatar{border-radius:22px;background:var(--rail-active);color:#fff;font-size:13px;font-weight:600}.main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column}.page{padding:20px 24px 24px;display:flex;flex-direction:column;gap:16px}.btn{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 16px;background:#fff;border:1px solid #d5dae8;color:var(--text);border-radius:10px;font-size:14px;font-weight:500;cursor:pointer;white-space:nowrap;text-decoration:none}.btn:hover{border-color:#b8bfd6}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:#3f4fc4}.btn.outline{border-color:var(--accent);color:var(--accent-ink)}.btn.danger{color:var(--danger)}.btn.small{min-height:32px;padding:0 10px;font-size:13px;border-radius:8px}.btn:disabled{opacity:.55;cursor:default}.link-btn{min-height:36px;padding:0 10px;background:transparent;border:0;color:var(--accent-ink);font-size:13px;font-weight:500;cursor:pointer}.link-btn:disabled{color:#8a8fa8;cursor:default}.icon-btn{width:36px;height:36px;border:0;background:transparent;color:var(--muted);border-radius:8px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.icon-btn:hover{background:var(--accent-soft);color:var(--text)}.input,select.input,textarea.input{height:40px;border:1px solid #d5dae8;border-radius:8px;padding:0 12px;width:100%;background:#fff;font-size:13px}textarea.input{height:auto;padding:8px 12px}.input:focus{outline:2px solid #c7cdf5;border-color:var(--accent)}.input[readonly],.input:disabled{background:#f0f2f8;color:var(--muted);border-color:var(--line)}.input.bad{border-color:var(--danger);background:#fff5f4}.input.changed{border-color:#e0a100;box-shadow:0 0 0 2px #ffe9b8}.lab{display:block;font-size:12px;font-weight:600;color:var(--muted);margin-bottom:6px}.check{display:inline-flex;align-items:center;gap:8px;min-height:36px;font-size:13px;cursor:pointer}.check input,input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);margin:0}.seg{display:inline-flex;border:1px solid #d5dae8;border-radius:10px;overflow:hidden;background:#fff}.seg button{min-height:38px;padding:0 14px;background:#fff;border:0;font-size:13px;cursor:pointer;flex:1 1 auto}.seg button.on{background:var(--text);color:#fff;font-weight:500}.chip{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 14px;background:#fff;border:1px solid #d5dae8;border-radius:22px;font-size:13px;cursor:pointer}.chip .k{color:var(--muted)}.chip .v{font-weight:600;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chip.active{border-color:var(--accent);background:var(--accent-soft)}.pill{padding:5px 12px;border-radius:16px;background:var(--accent-soft);color:var(--accent-ink);font-size:13px}.badge{font-size:12px;font-weight:600;padding:3px 10px;border-radius:12px}.badge.open{background:var(--ok-bg);color:var(--ok-ink)}.badge.closed{background:#e8eaf1;color:var(--muted)}.mv{font-size:11px;font-weight:600;padding:2px 7px;border-radius:10px;background:#ffe9b8;color:#6b4700;margin-left:8px}.muted{color:var(--muted)}.small{font-size:12px}.error-box{background:#fff1f0;border:1px solid #f5c2bd;color:#7a1a12;padding:10px 14px;border-radius:8px;font-size:13px}.warn-box{display:flex;align-items:center;gap:10px;padding:12px 20px;background:var(--warn-bg);border-bottom:1px solid var(--warn-line);font-size:13px;color:var(--warn-ink)}.card{background:var(--panel);border:1px solid var(--line);border-radius:10px}.card.pad{padding:20px}.card-head{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:16px 20px;border-bottom:1px solid var(--line)}.row-wrap{display:flex;flex-wrap:wrap;gap:16px}.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.spacer{flex:1 1 auto}.dd{position:relative}.dd-panel{position:absolute;top:calc(100% + 6px);left:0;z-index:40;min-width:240px;max-height:360px;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 28px #1c234029;padding:6px}.dd-panel.right{left:auto;right:0}.dd-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:6px;font-size:13px;cursor:pointer}.dd-item:hover{background:var(--accent-soft)}.dd-foot{display:flex;justify-content:space-between;border-top:1px solid var(--line-soft);margin-top:4px;padding-top:4px}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#151b3873;display:flex;align-items:center;justify-content:center;z-index:100;padding:16px}.modal{background:#fff;border-radius:14px;width:100%;max-width:1200px;max-height:calc(100vh - 32px);display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 60px #151b384d}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 24px;min-height:64px;border-bottom:1px solid var(--line)}.modal-body{flex:1 1 auto;min-height:0;overflow:auto;padding:20px 24px}.modal-foot{display:flex;align-items:center;gap:12px;padding:14px 24px;border-top:1px solid var(--line)}.stepper{list-style:none;margin:0;padding:14px 24px;display:flex;flex-wrap:wrap;gap:28px;border-bottom:1px solid var(--line-soft)}.stepper li{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}.stepper li.cur{color:var(--text);font-weight:600}.stepper .dot{width:28px;height:28px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;border:2px solid #c9cfe0}.stepper li.done .dot{background:var(--accent);border-color:var(--accent);color:#fff}.stepper li.cur .dot{border-color:var(--accent);color:var(--accent-ink)}.tgrid-wrap{border:1px solid var(--line);border-radius:10px;overflow:auto;background:#fff}.tgrid{min-width:1000px}.tg{display:grid;grid-template-columns:28px 32px minmax(240px,1fr) 160px 84px 150px 190px 84px 36px;align-items:start;column-gap:10px;padding:6px 16px;min-height:52px;border-bottom:1px solid var(--line-soft);font-size:13px}.tg>*{align-self:center}.tg.head{min-height:40px;background:#f8f9fd;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.tg.phase{min-height:40px;background:#f8f9fd;font-weight:600}.tg.off{color:var(--muted)}.tg.off .tname{text-decoration:line-through}.tg.moved{background:#fffbf0}.tg.err{background:#fff5f4}.tg .num{color:var(--muted);font-variant-numeric:tabular-nums}.tg .input{height:36px;padding:0 8px}.links{display:flex;flex-direction:column;gap:4px}.link-line{display:flex;gap:4px;align-items:center}.swatch{width:10px;height:10px;border-radius:3px;display:inline-block;flex:0 0 auto}.gantt{display:flex;background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden}.g-left{flex:0 0 auto;border-right:1px solid var(--line);background:#fff;z-index:2}.g-head-left{height:56px;display:flex;align-items:flex-end;gap:6px;padding:0 12px 8px;border-bottom:1px solid var(--line);font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.lr{display:flex;align-items:center;gap:6px;height:var(--row);border-bottom:1px solid var(--line-soft);font-size:13px;padding-right:12px;cursor:default}.lr.hover,.tr.hover{background:#f3f5ff}.lr .chev{flex:0 0 22px;width:22px;height:22px;border:0;background:transparent;color:var(--muted);border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}.lr .chev:hover{background:var(--accent-soft)}.lr .nm{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lr .nm.link{cursor:pointer}.lr .nm.link:hover{color:var(--accent-ink);text-decoration:underline}.lr .st{flex:0 0 68px;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}.lr .du{flex:0 0 44px;text-align:right;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}.lr.closed .nm{color:var(--muted)}.g-right{flex:1 1 0;min-width:0;overflow-x:auto}.g-canvas{position:relative}.g-head{height:56px;border-bottom:1px solid var(--line);position:relative}.g-tier{position:absolute;left:0;right:0;height:28px}.g-tier.top{top:0;border-bottom:1px solid var(--line-soft);font-weight:600;font-size:12px}.g-tier.bottom{top:28px;font-size:11px;color:var(--muted)}.g-cell{position:absolute;top:0;bottom:0;display:flex;align-items:center;border-left:1px solid var(--line-soft);overflow:hidden;white-space:nowrap}.g-tier.top .g-cell{padding-left:8px;border-left-color:var(--line)}.g-tier.bottom .g-cell{justify-content:center}.g-grid{position:absolute;top:56px;bottom:0;width:1px;background:var(--grid);pointer-events:none}.tr{position:relative;height:var(--row);border-bottom:1px solid var(--line-soft)}.tr.closed{opacity:.55}.off-day{position:absolute;top:0;bottom:0;background:#f4f5f9;pointer-events:none}.bar{position:absolute;top:9px;height:14px;border-radius:7px;cursor:pointer}.bar.phase{top:11px;height:10px;border-radius:5px}.bar.summary{top:13px;height:6px;border-radius:3px;background:#5b5fc7}.segbar{position:absolute;top:9px;height:14px;border-right:2px solid #fff;cursor:pointer}.segbar.first{border-radius:7px 0 0 7px}.segbar.last{border-radius:0 7px 7px 0;border-right:0}.segbar.first.last{border-radius:7px}.ms{position:absolute;top:9px;width:14px;height:14px;margin-left:-7px;transform:rotate(45deg);border:2px solid #fff;box-shadow:0 0 0 1px #1c234059;cursor:pointer}.el{position:absolute;top:8px;font-size:11px;line-height:16px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums;pointer-events:none}.today-line{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;background:var(--today);z-index:3;pointer-events:none}.today-tag{position:absolute;top:6px;margin-left:4px;z-index:4;background:var(--today);color:#fff;font-size:10px;font-weight:600;letter-spacing:.06em;padding:3px 8px;border-radius:4px;pointer-events:none}.g-links{position:absolute;left:0;top:56px;pointer-events:none;z-index:2;overflow:visible}.g-empty{padding:48px 24px;text-align:center;color:var(--muted)}.hovercard{position:fixed;z-index:90;width:280px;background:#fff;border:1px solid #d5dae8;border-radius:10px;box-shadow:0 8px 24px #1c234029;padding:14px 16px;display:flex;flex-direction:column;gap:8px;pointer-events:none}.hovercard .kv{display:flex;justify-content:space-between;gap:12px;font-size:12px}.hovercard .kv span:first-child{color:var(--muted)}.hovercard .kv span:last-child{font-weight:500;text-align:right}.legend{display:flex;flex-wrap:wrap;align-items:center;gap:16px;font-size:12px}.legend>span{display:flex;align-items:center;gap:6px}.table{width:100%;border-collapse:collapse;font-size:13px}.table th{text-align:left;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);background:#f8f9fd;padding:10px 16px}.table td{padding:10px 16px;border-top:1px solid var(--line-soft);vertical-align:middle}.tabs{display:flex;flex-wrap:wrap;border-bottom:1px solid var(--line)}.tab{min-height:44px;padding:0 16px;background:transparent;border:0;border-bottom:2px solid transparent;color:var(--muted);font-size:14px;cursor:pointer}.tab.on{color:var(--text);font-weight:600;border-bottom-color:var(--accent)}.login-wrap{min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--rail)}.login{width:100%;max-width:380px;background:#fff;border-radius:14px;padding:32px;display:flex;flex-direction:column;gap:16px}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--text);color:#fff;padding:10px 18px;border-radius:10px;font-size:13px;z-index:200;box-shadow:0 8px 24px #0003}@media(max-width:720px){.app{flex-direction:column}.rail{flex-direction:row;height:auto;position:static;padding:8px 12px;justify-content:flex-start}.rail .logo{margin:0 8px 0 0}.page{padding:16px}.grid2{grid-template-columns:1fr}}
