:root{color:#1c2128;--line:#d8dee4;--line-soft:#e6e9ed;--muted:#5c6772;--accent:#1f4e79;--today:#c4554e;--header:#f7f8fa;--phase:#f4f6f8;--section:#e8edf2;--selected:#e7f0f8;--weekend:#1f4e790f;background:#e8eaee;font-family:Segoe UI,system-ui,sans-serif;font-size:13px;line-height:1.35}*{box-sizing:border-box}html,body,#app{height:100%;min-height:0;margin:0}html,body{overflow:hidden}body{background:var(--line)}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}#app{background:#fff;flex-direction:column;min-width:0;height:100dvh;max-height:100dvh;display:flex;overflow:hidden}#toolbar,#project-header{flex:none}#toolbar{background:var(--header);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;display:flex}.spacer{flex:1;min-width:8px}.sep{background:#d0d6dd;flex:none;width:1px;height:20px}.btn{white-space:nowrap;background:#fff;border:1px solid #cfd6de;border-radius:4px;height:28px;padding:0 10px}.btn:hover{background:#f2f5f8}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:#1a4368}.btn.danger{color:#8d2f2f;background:#fff;border-color:#e2c8c8}.btn.active{border-color:var(--accent);color:var(--accent);background:#e6eef6}.btn.icon{min-width:32px;padding:0 6px;font-size:16px;line-height:1}.btn:disabled{opacity:.45;cursor:default;background:#fff}.zoom{display:inline-flex}.zoom .btn{border-radius:0;margin-left:-1px}.zoom .btn:first-child{border-radius:4px 0 0 4px;margin-left:0}.zoom .btn:last-child{border-radius:0 4px 4px 0}.menu{position:relative}.menu-pop{border:1px solid var(--line);z-index:30;background:#fff;border-radius:6px;min-width:140px;padding:4px;display:none;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 8px 24px #14181e1f}.menu.open .menu-pop{display:block}.menu-pop .btn{text-align:left;background:0 0;border:0;width:100%;display:block}.menu-pop .btn:hover{background:#f2f5f8}.save-status{color:var(--muted);white-space:nowrap;font-size:12px}.save-status.saved{color:#2f7d57}.save-status.unsaved,.save-status.error{color:#8a5a12}#project-header{border-bottom:1px solid var(--line);background:#fff;align-items:center;gap:14px;min-height:68px;padding:8px 14px;display:flex}.project-logo{object-fit:contain;max-width:132px;max-height:48px;display:block}.project-titles{min-width:0}.project-titles h1{letter-spacing:-.01em;margin:0;font-size:18px;font-weight:650}.project-titles p{color:var(--muted);margin:1px 0 0;font-size:12.5px}.project-dates{color:var(--muted);white-space:nowrap;margin-left:auto;font-size:12.5px}.chrome-fold{width:28px;height:28px;color:var(--muted);background:#fff;border:1px solid #cfd6de;border-radius:4px;flex:none;padding:0}.chrome-fold:hover{color:var(--accent);background:#f2f5f8}#project-header.is-collapsed{gap:8px;min-height:0;padding:4px 10px}#project-header.is-collapsed .project-logo,#project-header.is-collapsed .company,#project-header.is-collapsed .meta,#project-header.is-collapsed .project-dates{display:none}#project-header.is-collapsed h1{font-size:15px}#planner{-webkit-overflow-scrolling:touch;background:#fff;flex:auto;min-height:0;position:relative;overflow:auto}#legend{max-height:120px;padding:8px 14px calc(8px + env(safe-area-inset-bottom));border-top:1px solid var(--line);background:#fff;flex-wrap:wrap;flex:none;align-items:center;gap:8px 16px;display:flex;overflow:auto}.legend-empty{color:var(--muted);margin:0;font-size:12.5px}#legend.is-collapsed{max-height:none;padding-top:4px;padding-bottom:calc(4px + env(safe-area-inset-bottom));flex-wrap:nowrap;gap:8px;overflow-x:auto}#legend.is-collapsed .legend-meta,#legend.is-collapsed .legend-empty{display:none}#legend.is-collapsed .legend-item{flex:none;padding:0 2px}#legend.is-collapsed .legend-name{font-size:12px;font-weight:600}.legend-item,.party-chip{text-align:left;background:0 0;border:1px solid #0000;border-radius:4px;align-items:center;gap:8px;min-width:0;padding:2px 4px;display:inline-flex}.legend-item:hover,.party-chip:hover,.party-chip.selected{border-color:var(--line);background:#f4f7fb}.legend-swatch,.party-mark{border-radius:3px;flex:none;width:14px;height:14px}.party-mark{width:8px;height:8px}.marks{flex:none;align-items:center;gap:4px;display:inline-flex}.legend-text{flex-direction:column;min-width:0;display:flex}.legend-name{font-weight:650}.legend-meta{color:var(--muted);font-size:12px}.party-list{flex-wrap:wrap;gap:6px;margin-bottom:12px;display:flex}.color-field{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.swatches{flex-wrap:wrap;gap:6px;display:flex}.swatch{border:2px solid #fff;border-radius:4px;width:22px;height:22px;padding:0;box-shadow:0 0 0 1px #cfd6de}.swatch.selected{box-shadow:0 0 0 2px var(--accent)}.color-field input[type=color]{background:#fff;border:1px solid #cfd6de;width:36px;height:28px;padding:0}.planner-canvas{min-height:100%;position:relative}.gantt-head{z-index:5;border-bottom:1px solid var(--line);background:#fff;height:52px;display:flex;position:sticky;top:0}.label-col{z-index:4;border-right:1px solid var(--line);background:#fff;flex:none;position:sticky;left:0}.gantt-head .label-col{z-index:6;background:var(--header)}.gantt-row{border-bottom:1px solid var(--line-soft);display:flex;position:relative}.gantt-row.phase,.gantt-row.phase .label-col{background:var(--phase)}.gantt-row.section,.gantt-row.section .label-col{background:var(--section)}.gantt-row.selected .label-col{background:var(--selected);box-shadow:inset 3px 0 0 var(--accent)}.gantt-row:hover .label-col{background:#f7fafc}.gantt-row.selected:hover .label-col{background:var(--selected)}.cols{grid-template-columns:minmax(0,1fr) 108px 68px 68px 46px 42px;align-items:center;gap:0 6px;height:100%;padding:0 8px 0 6px;display:grid}.cols.compact{grid-template-columns:minmax(0,1fr) 64px 64px 42px}.cols.narrow{grid-template-columns:minmax(0,1fr)}.name-text{flex-direction:column;min-width:0;display:flex}.name-stack{align-items:flex-start}.name-stack .chevron{margin-top:1px}.task-sub{color:var(--muted);letter-spacing:0;text-transform:none;font-size:11px;font-weight:400;line-height:1.2}.cell{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;color:#3c4652;min-width:0;font-size:12px;overflow:hidden}.cell-head{color:var(--muted);letter-spacing:.02em;font-size:11px;font-weight:600}.cell-name{overflow:visible}.name-head{justify-content:space-between;align-items:center;gap:4px;display:flex}.fold-cols{width:28px;height:28px;color:var(--muted);background:0 0;border:0;border-radius:4px;flex:none;padding:0}.fold-cols:hover{color:var(--accent);background:#e6eef6}.name-wrap{align-items:center;gap:6px;min-width:0;display:flex}.task-indent{padding-left:18px}.task-name,.phase-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.phase-name{letter-spacing:.04em;text-transform:uppercase;color:#3c4652;font-size:12px;font-weight:650}.section-name{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:0 12px;font-size:11px;font-weight:700;line-height:34px}.prio{border-radius:50%;flex:none;width:8px;height:8px}.ms-mark{color:var(--accent);flex:none;font-size:12px}.chevron{width:18px;height:18px;color:var(--muted);background:0 0;border:0;flex:none;padding:0}.phase-input{width:100%;font:inherit;letter-spacing:.04em;text-transform:uppercase;border:1px solid var(--accent);border-radius:3px;padding:2px 4px;font-weight:650}.time-head{background:var(--header);flex:none;height:52px;position:relative}.band{height:26px;position:absolute;left:0;right:0}.band-top{top:0}.band-bottom{border-top:1px solid var(--line-soft);top:26px}.band-cell{white-space:nowrap;height:100%;color:var(--muted);border-left:1px solid var(--line-soft);align-items:center;padding:0 4px;font-size:11px;display:flex;position:absolute;top:0;overflow:hidden}.band-top .band-cell{color:#243040;font-size:12px;font-weight:650;overflow:clip}.band-label{left:var(--label-w,560px);max-width:100%;padding-right:8px;position:sticky}.band-cell.weekend{background:var(--weekend)}.band-cell.today{color:var(--today);font-weight:700}.band-cell.week-start{border-left-color:#c5ccd4}.time-col{flex:none;height:100%;position:relative}.show-grid .time-col{background-image:repeating-linear-gradient(to right, transparent, transparent calc(var(--day) - 1px), var(--line-soft) calc(var(--day) - 1px), var(--line-soft) var(--day))}.gantt-body{position:relative}.time-bg,.time-fg{pointer-events:none;position:absolute;top:0}.time-bg{z-index:0}.time-fg{z-index:2}.weekend-shade{background:var(--weekend);position:absolute;top:0;bottom:0}.month-line{background:#c5ccd4;width:1px;position:absolute;top:0;bottom:0}.today-line{background:var(--today);z-index:3;opacity:.9;width:2px;position:absolute;top:0;bottom:0}.today-flag{border-left:5px solid #0000;border-right:5px solid #0000;border-top:6px solid var(--today);z-index:4;width:0;height:0;position:absolute;top:0}.bar{cursor:grab;z-index:1;border-radius:3px;height:18px;position:absolute;top:9px}.bar-progress{border-radius:inherit;height:100%}.bar-handle{cursor:ew-resize;z-index:2;width:8px;height:100%;position:absolute;top:0}.bar-handle.left{left:0}.bar-handle.right{right:0}.bar:hover .bar-handle,.gantt-row.selected .bar-handle{background:#ffffff59}.phase-bar{cursor:default;pointer-events:none;border-radius:2px;height:10px;top:12px}.milestone-hit{cursor:grab;z-index:1;width:22px;height:24px;position:absolute;top:6px;transform:translate(-50%)}.diamond{background:var(--accent);width:12px;height:12px;position:absolute;top:6px;left:5px;transform:rotate(45deg);box-shadow:0 0 0 1px #fff}.dep-layer{position:absolute;top:0;left:0;overflow:visible}.dep-layer path{fill:none;stroke:#60707e;stroke-width:1.25px}.empty-plan{color:var(--muted);padding:28px 16px}body.dragging,body.dragging *{cursor:ew-resize!important;-webkit-user-select:none!important;user-select:none!important}#drag-tip{z-index:80;color:#fff;pointer-events:none;background:#1c2128;border-radius:4px;padding:4px 8px;font-size:12px;position:fixed}#toast{z-index:70;color:#fff;background:#1c2128;border-radius:4px;max-width:360px;padding:8px 12px;font-size:12.5px;position:fixed;bottom:16px;right:16px}.log-dialog{width:min(720px,100%)}.log-view{white-space:pre-wrap;word-break:break-word;border:1px solid var(--line);background:#f7f8fa;border-radius:4px;max-height:60vh;margin:0;padding:8px;font:12px/1.4 ui-monospace,Consolas,monospace;overflow:auto}.overlay{z-index:50;background:#14181e59;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog{border:1px solid var(--line);background:#fff;border-radius:8px;width:min(560px,100vw - 32px);max-height:calc(100vh - 48px);padding:16px 18px 14px;overflow:auto;box-shadow:0 16px 40px #14181e2e}.dialog h2{margin:0 0 14px;font-size:16px;font-weight:650}.form{grid-template-columns:140px 1fr;align-items:center;gap:8px 12px;display:grid}.form label.top{align-self:start;margin-top:6px}.form .hint,.form .form-error{grid-column:1/-1;margin:0}.hint{color:var(--muted);font-size:12px}.form-error{color:#8d2f2f;min-height:1em;font-size:12px}.readonly{color:#243040}.dialog input,.dialog select,.dialog textarea{background:#fff;border:1px solid #cfd6de;border-radius:4px;width:100%;padding:6px 8px}.dialog textarea{resize:vertical;min-height:72px}.dialog-actions{justify-content:flex-end;gap:8px;margin-top:14px;display:flex}.dialog-actions .danger{margin-right:auto}.logo-block{flex-direction:column;gap:8px;display:flex}.logo-preview{background:#fafbfc;border:1px dashed #cfd6de;border-radius:4px;justify-content:center;align-items:center;width:180px;height:72px;display:flex}.logo-preview img{object-fit:contain;max-width:168px;max-height:64px}.logo-actions{flex-wrap:wrap;gap:8px;display:flex}.muted{color:var(--muted);font-size:12px}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.dialog.export-dialog{flex-direction:column;width:min(1100px,100vw - 24px);height:min(820px,100vh - 24px);padding:14px 16px 12px;display:flex}.export-layout{flex:1;grid-template-columns:280px minmax(0,1fr);gap:14px;min-height:0;display:grid}.export-fields{padding-right:4px;overflow:auto}.export-field{color:var(--muted);flex-direction:column;gap:3px;margin-top:8px;font-size:12px;display:flex}.export-field[hidden]{display:none}.export-field select,.export-field input{height:28px}.check-row{align-items:flex-start;gap:8px;margin-top:10px;font-size:12.5px;display:flex}.check-row input{margin-top:2px}.recommend{background:#f4f7fb;border:1px solid #d5deea;border-radius:6px;padding:8px 10px}.recommend strong{margin-bottom:4px;display:block}.recommend p{color:#243040;margin:0 0 8px}.preview-heading{color:var(--muted);margin:0 0 6px;font-size:12px}.export-preview-wrap{flex-direction:column;min-width:0;min-height:0;display:flex}.export-preview{border:1px solid var(--line);background:#e8eaee;border-radius:6px;flex:1;padding:12px;overflow:auto}.preview-caption{color:#243040;margin:0 0 10px;font-size:12px}.preview-scale{position:relative}.print-pages{flex-direction:column;gap:6mm;display:flex}.print-page{background:#fff;position:relative;overflow:hidden;box-shadow:0 8px 24px #14181e1f}.pp-header,.pp-scale,.pp-body,.pp-footer,.pp-legend{position:absolute}.pp-legend{border-top:.2mm solid #d5dae0}.pp-legend-item{position:absolute;overflow:hidden}.pp-swatch{border-radius:.4mm;width:3.4mm;height:3.4mm;position:absolute;top:1.3mm;left:0}.pp-legend-item strong,.pp-legend-item span{white-space:nowrap;position:absolute;left:5mm;right:0;overflow:hidden}.pp-legend-item strong{font-size:8pt;font-weight:650;top:.6mm}.pp-legend-item span{color:var(--muted);font-size:7pt;top:4.2mm}.pp-header{align-items:center;gap:3mm;display:flex}.pp-header img{object-fit:contain;width:auto;max-width:28mm;height:12mm}.pp-header-text{min-width:0}.pp-header-text p,.pp-header-text strong{margin:0;display:block}.pp-header-text p{color:var(--muted);font-size:8pt}.pp-header-text strong{font-size:12pt}.pp-period{color:var(--muted);white-space:nowrap;margin-left:auto;font-size:8pt}.pp-scale{background:var(--header);box-sizing:border-box;border:.2mm solid #d5dae0;display:flex}.pp-scale-label{border-right:.2mm solid #d5dae0;align-items:center;padding:0 1.5mm;font-size:8pt;font-weight:650;display:flex}.pp-scale-chart{height:100%;position:relative}.pp-band{white-space:nowrap;height:50%;color:var(--muted);padding-left:.6mm;font-size:7pt;position:absolute;overflow:hidden}.pp-band.top{color:#243040;font-weight:650}.pp-body{position:absolute}.pp-chart{position:absolute;top:0;bottom:0}.pp-row{border-bottom:.15mm solid #e6e9ed;position:absolute;left:0;right:0}.pp-name{white-space:nowrap;background:#fff;align-items:center;padding:0 1.5mm;font-size:8pt;display:flex;position:absolute;top:0;bottom:0;left:0;overflow:hidden}.pp-row.phase .pp-name{letter-spacing:.03em;background:var(--phase);font-weight:650}.pp-row.section .pp-name{background:var(--section)}.pp-time{position:absolute;top:0;bottom:0}.pp-weekend,.pp-month,.pp-today,.pp-bar,.pp-phasebar,.pp-diamond{position:absolute}.pp-weekend{background:#1f4e790f;top:0;bottom:0}.pp-month{background:#c5ccd4;width:.15mm;top:0;bottom:0}.pp-today{background:var(--today);width:.35mm;top:0;bottom:0}.pp-bar,.pp-phasebar{border-radius:.4mm;height:3mm;top:1.6mm;overflow:hidden}.pp-phasebar{background:#8ea0b0;height:2.2mm}.pp-bar b{height:100%;display:block}.pp-diamond{background:var(--accent);width:2.6mm;height:2.6mm;top:50%;transform:translate(-50%,-50%)rotate(45deg)}.pp-footer{height:5mm;color:var(--muted);justify-content:space-between;align-items:center;font-size:8pt;display:flex}#print-root{display:none}.backup-list{flex-direction:column;gap:6px;min-width:min(480px,80vw);max-height:60vh;display:flex;overflow:auto}.backup-row{border-bottom:1px solid #e6e9ed;justify-content:space-between;align-items:center;gap:12px;padding:4px 0;display:flex}html{overscroll-behavior:none}@media (width<=1099px){.btn{min-height:40px;padding:0 12px}.menu-pop .btn{min-height:44px}.menu-pop{max-height:min(70vh,420px);overflow:auto}.chevron{width:32px;height:32px}.bar{height:22px;top:12px}.bar-handle{width:18px}.phase-bar{height:12px;top:16px}.milestone-hit{width:36px;height:36px;top:4px}.export-field select,.export-field input{height:40px}}@media (width<=719px){:root{font-size:15px}#toolbar{padding:calc(8px + env(safe-area-inset-top)) 10px 8px;gap:6px}#project-header{flex-wrap:wrap;gap:6px;min-height:0;padding:8px 12px}.project-logo{max-width:96px;max-height:36px}.project-titles h1{font-size:16px}.project-dates{white-space:normal;margin-left:0}.save-status{text-overflow:ellipsis;max-width:42vw;overflow:hidden}input,select,textarea{font-size:16px}.form{grid-template-columns:1fr}.form label{margin-top:4px}.dialog{padding:14px 14px 12px}.dialog-actions{flex-wrap:wrap}.dialog-actions .btn{min-height:40px}#toast{left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));max-width:none}}@media (width<=800px){.dialog.export-dialog{width:calc(100vw - 16px);height:calc(100vh - 16px);max-height:none}.export-layout{grid-template-columns:1fr;overflow:auto}.export-preview{min-height:240px}}@media (pointer:coarse){.fold-cols,.chrome-fold{width:36px;height:36px}.bar,.bar-handle,.milestone-hit{touch-action:pan-x pan-y;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.chevron{touch-action:manipulation}}@media print{@page{margin:0}html,body{background:#fff;height:auto;overflow:visible}#app,#toast,#modal-root,#drag-tip{display:none!important}#print-root{display:block!important}.print-page{box-shadow:none;break-after:page}.print-page:last-child{break-after:auto}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
