.timeline-wrap{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);overflow-x:auto}.timeline-grid{min-width:1600px;display:grid}.tl-head,.tl-cell{text-align:center;font-size:12px}.tl-head{padding:4px 2px}.tl-cell{padding:4px 0}.tl-head{background:var(--color-surface);border-bottom:1px solid var(--color-border);color:var(--color-text-muted);position:sticky;top:0}.tl-label{background:var(--color-surface);border-right:1px solid var(--color-border);white-space:nowrap;z-index:2;padding:6px 10px;font-size:13px;position:sticky;left:0}.tl-row-line{border-bottom:1px solid var(--color-border)}.tl-holiday{background:var(--color-holiday)}.tl-current{outline:2px solid var(--color-primary);outline-offset:-2px}.tl-block{color:#fff;white-space:nowrap;cursor:pointer;border-radius:0;height:20px;margin:3px 0;padding:0 4px;font-size:11px;line-height:20px;overflow:hidden}.tl-project-name{cursor:pointer;font-weight:600}.tl-project-name:hover{color:var(--color-primary)}@media print{@page{size:A3 landscape;margin:10mm}.no-print{display:none!important}.print-page{padding:0!important}.timeline-wrap{border:none;overflow:visible}.timeline-grid{--tl-label-w:140px;--tl-col-min:0px;min-width:0}.tl-head,.tl-label{position:static}.tl-head,.tl-cell{font-size:9px}.tl-label{padding:4px 6px;font-size:10px}.tl-block{-webkit-print-color-adjust:exact;print-color-adjust:exact;padding:0 2px;font-size:8px}.tl-holiday{-webkit-print-color-adjust:exact;print-color-adjust:exact}}:root{--color-primary:#1d4ed8;--color-primary-dark:#1e40af;--color-bg:#f8fafc;--color-surface:#fff;--color-text:#0f172a;--color-text-muted:#64748b;--color-border:#e2e8f0;--color-holiday:#fee2e2;--color-danger:#dc2626;--radius:8px;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{background:var(--color-bg);color:var(--color-text);margin:0}button{font:inherit;cursor:pointer;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);padding:8px 14px}button.primary{background:var(--color-primary);border-color:var(--color-primary);color:#fff}input,select{font:inherit;border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);padding:8px 10px}label{color:var(--color-text-muted);margin-bottom:4px;font-size:14px;display:block}
