:root{--bg: #f6f7f7;--card: #ffffff;--line: #e3e7e5;--text: #1d2b27;--muted: #6b7770;--brand: #0e3d33;--accent: #15604e;--copper: #b9772f;--bad: #c0392b;--warn: #c2871f;--good: #1f9d57}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--text);background:var(--bg);font-size:14px}h1{font-size:20px;margin:0 0 12px;color:var(--brand)}h2{font-size:17px;margin:0 0 8px;color:var(--brand)}h3{font-size:14px;margin:0 0 8px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}h4{font-size:13px;margin:10px 0 4px}.muted{color:var(--muted)}.small{font-size:12px}.center{text-align:center}.error{color:var(--bad);background:#fdecec;border:1px solid #f5c6c6;padding:6px 10px;border-radius:6px;margin:8px 0}.error.small{padding:4px 8px}button{font:inherit;background:var(--accent);color:#fff;border:none;border-radius:6px;padding:7px 14px;cursor:pointer}button:disabled{opacity:.5;cursor:default}.link-btn{background:none;color:var(--accent);padding:2px 6px}.link-btn.danger{color:var(--bad)}input,select,textarea{font:inherit;width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:6px;background:#fff}label{display:block;margin:8px 0;font-size:13px;color:var(--muted)}label input,label select,label textarea{margin-top:3px;color:var(--text)}.checkbox{display:flex;align-items:center;gap:6px}.checkbox input{width:auto}.checkbox.inline{margin:0;font-size:13px;color:var(--text)}.datefield{position:relative;display:flex;align-items:center;gap:4px}.datefield>input[type=text]{flex:1}.datefield-btn{background:#fff;color:var(--text);border:1px solid var(--line);border-radius:6px;padding:6px 8px;cursor:pointer;line-height:1}.datefield-native{position:absolute;left:8px;bottom:0;width:1px;height:1px;opacity:0;pointer-events:none;border:0;padding:0}.party-add{margin-top:6px;padding:8px;border:1px dashed var(--line);border-radius:6px;display:grid;gap:6px}.party-add-actions{display:flex;gap:8px;align-items:center}.party-new{display:flex;gap:8px;align-items:center;margin:12px 0 16px}.party-new input{width:auto;flex:1}.party-new select{width:auto}.party-list{display:grid;gap:8px}.party-row{border:1px solid var(--line);border-radius:6px;padding:8px;background:#fff}.party-row.inactive-row{opacity:.6}.party-row-meta{display:flex;align-items:center;gap:10px;margin-top:6px;flex-wrap:wrap}.party-row-meta select{width:auto}.btn-outline{background:#fff;color:var(--accent);border:1px solid var(--accent)}.login-form .forgot{display:block;margin-top:10px;padding-left:0}.temp-pw code{background:#f3e7d4;color:#8a5a1f;padding:1px 6px;border-radius:4px;font-weight:700}.field-row{display:flex;gap:12px}.field-row label{flex:1}.grow{flex:2}.card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:16px;margin-bottom:16px}.centered{min-height:100vh;display:grid;place-items:center;padding:24px}.login-split{display:grid;grid-template-columns:1.05fr 1fr;min-height:100vh}.login-left{background:#fff;display:grid;place-items:center;padding:24px}.login-form{width:320px}.login-form label{margin:12px 0}.login-form button{width:100%;margin-top:10px;padding:10px}.login-brand{font-size:24px;font-weight:800;color:var(--brand);letter-spacing:.01em}.login-right{background:var(--brand);color:#fff;display:grid;place-items:center;padding:48px;position:relative;overflow:hidden}.login-right-inner{max-width:360px;position:relative;z-index:1}.login-right h2{color:#fff;font-size:26px}.login-right>.login-right-inner>p{color:#ffffffb3;margin-top:4px}.login-points{list-style:none;padding:0;margin:28px 0 0;display:grid;gap:14px}.login-points li{position:relative;padding-left:26px;color:#ffffffeb}.login-points li:before{content:"✓";position:absolute;left:0;color:var(--copper);font-weight:700}.login-right:after{content:"";position:absolute;right:-130px;bottom:-130px;width:380px;height:380px;border-radius:50%;border:44px solid rgba(255,255,255,.045)}@media (max-width: 820px){.login-split{grid-template-columns:1fr}.login-right{display:none}}.app{min-height:100vh}.topbar{display:flex;align-items:center;gap:20px;background:var(--brand);color:#fff;padding:10px 20px}.brand{font-weight:700;color:#fff;letter-spacing:.02em}.nav{display:flex;gap:4px}.nav a{text-decoration:none;color:#ffffffb8;padding:8px 12px;border-radius:6px}.nav a:hover{color:#fff;background:#ffffff14}.nav a.active{background:#ffffff24;color:#fff;box-shadow:inset 0 -2px 0 var(--copper)}.user{margin-left:auto;display:flex;align-items:center;gap:10px;color:#fff}.topbar .muted{color:#ffffffd9}.topbar .link-btn{color:#fff}.content{padding:20px;max-width:1200px;margin:0 auto}.role-tag{font-size:11px;padding:1px 6px;border-radius:10px;background:#eee;text-transform:capitalize}.role-owner{background:#f1e7d4;color:#8a5a1f}.role-engineer{background:#dcebe4;color:#15604e}.role-contractor{background:#e6eae8;color:#4a5a55}.metric-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}.metric{text-align:left;background:#fff;color:var(--text);border:1px solid var(--line);padding:14px;border-radius:8px}.metric-value{font-size:26px;font-weight:700}.metric-label{color:var(--muted);font-size:13px}.metric.bad .metric-value{color:var(--bad)}.metric.warn .metric-value{color:var(--warn)}.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.head-actions{display:flex;align-items:center;gap:14px}.export-group{display:flex;align-items:center;gap:8px;font-size:13px}.export-group a{color:var(--accent);text-decoration:none}.export-group a:hover{text-decoration:underline}.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}.filters select{width:auto}table.board{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:8px;overflow:hidden}.board th,.board td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line)}.board th{background:#f1f4f2;font-size:12px;color:var(--muted);text-transform:uppercase}.board th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.board th.sortable:hover{background:#e8efeb}.sort-caret{margin-left:4px;font-size:11px;color:var(--muted)}.sort-caret.active{color:var(--copper)}.edit-by{color:var(--accent);font-weight:600}.board tbody tr{cursor:pointer}.board tbody tr:hover{background:#f0f5f2}.row-overdue{background:#fdf3f1}.overdue-text{color:var(--bad);font-weight:600}.delayed-days{color:var(--bad);font-weight:700}.badge{display:inline-block;font-size:11px;padding:2px 8px;border-radius:10px;background:#eef0f3;white-space:nowrap}.badge.overdue{background:#fdecec;color:var(--bad);margin-left:6px}.status-not-started{background:#eceff3;color:#5b6470}.status-in-progress{background:#e0efe9;color:#15604e}.status-blocked{background:#fdecec;color:var(--bad)}.status-at-risk{background:#fff3df;color:var(--warn)}.status-submitted{background:#efe6ff;color:#6b30c9}.status-ready{background:#e0f3ff;color:#1574b3}.status-completed{background:#e3f6ec;color:var(--good)}.drawer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:flex;justify-content:flex-end;z-index:50}.drawer{width:min(560px,100%);height:100%;background:var(--bg);overflow-y:auto;box-shadow:-4px 0 16px #0000001f}.drawer-header{position:sticky;top:0;background:var(--bg);padding:10px 16px;border-bottom:1px solid var(--line)}.drawer-body{padding:16px}.detail-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.status-control{display:flex;align-items:center;gap:8px;margin:12px 0}.status-control select{width:auto}.detail-form,.detail-readonly{background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px}.detail-readonly{display:grid;grid-template-columns:130px 1fr;gap:4px 10px}.detail-readonly dt{color:var(--muted)}.detail-readonly dd{margin:0}.form-actions{display:flex;align-items:center;gap:12px;margin-top:10px}.panel-section{background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px;margin-top:16px}.rel-group{margin-bottom:8px}.rel-list,.downstream-list,.comment-list,.activity-list,.next-action-list,.recent-comments,.update-list{list-style:none;margin:0;padding:0}.rel-list li,.downstream-list li{padding:3px 0;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.rel-type{font-size:11px;background:#eef0f3;padding:1px 6px;border-radius:8px;color:var(--muted)}.rel-form{border-top:1px dashed var(--line);margin-top:10px;padding-top:6px}.comment-list li{border-top:1px solid var(--line);padding:8px 0}.comment-meta{display:flex;align-items:center;gap:8px}.comment-form{margin-top:10px}.comment-form button{margin-top:6px}.activity-list li{display:flex;align-items:center;gap:8px;padding:7px 0;border-bottom:1px solid var(--line);cursor:pointer}.activity-list li:hover{background:#f7f9ff}.al-title{font-weight:500}.next-action-list li,.recent-comments li,.update-list li{padding:6px 0;border-bottom:1px solid var(--line)}.modal{width:min(460px,100%);margin:auto}.tl-legend{display:flex;flex-wrap:wrap;gap:10px;align-items:center;font-size:12px;color:var(--muted)}.tl-legend-item{display:inline-flex;align-items:center;gap:4px}.tl-swatch{width:14px;height:12px;border-radius:3px;display:inline-block}.tl{background:#fff;border:1px solid var(--line);border-radius:8px;overflow:hidden}.tl-head{display:flex;border-bottom:1px solid var(--line);background:#fafbfc}.tl-head .tl-track{height:28px}.tl-month{position:absolute;top:0;height:28px;line-height:28px;font-size:11px;color:var(--muted);border-left:1px solid var(--line);padding-left:4px;box-sizing:border-box;white-space:nowrap}.tl-body{position:relative}.tl-label{flex:0 0 auto;padding:0 8px;font-size:12px;line-height:30px;height:30px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border-right:1px solid var(--line)}.tl-label:hover{color:var(--accent)}.tl-track{position:relative;flex:1 1 auto;height:30px}.tl-row{display:flex;align-items:center;border-bottom:1px solid #f0f2f5}.tl-row:hover{background:#f7f9ff}.tl-gridlines{position:absolute;top:0;bottom:0;right:0;pointer-events:none}.tl-gridline{position:absolute;top:0;bottom:0;width:0;border-left:1px solid #eef0f3}.tl-today{position:absolute;top:0;bottom:0;width:0;border-left:2px solid var(--bad)}.tl-today span{position:absolute;top:-2px;left:2px;font-size:10px;color:var(--bad);background:#fff;padding:0 2px}.tl-bar{position:absolute;top:5px;height:20px;min-width:4px;border-radius:4px;padding:0;border:none;color:#fff;display:flex;align-items:center;overflow:hidden;cursor:pointer}.tl-bar-text{font-size:11px;padding:0 6px;white-space:nowrap;text-shadow:0 1px 1px rgba(0,0,0,.25)}.tl-overdue{box-shadow:0 0 0 2px #d23f3f59}.tl-nodates{padding-left:8px;line-height:30px}.bar-not-started{background:#aab2bd}.bar-in-progress{background:#2f7d68}.bar-blocked{background:#d23f3f}.bar-at-risk{background:#e08a17}.bar-submitted{background:#8b5cf6}.bar-ready{background:#1574b3}.bar-completed{background:#1f9d57}.weekly-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}.weekly-update .field-row{align-items:end}.print-only{display:none}@media print{@page{margin:14mm}.topbar,.no-print,.drawer-overlay{display:none!important}.print-only{display:block}body{background:#fff;font-size:11px;color:#000}.content{padding:0;max-width:none}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}.print-only{font-size:16px;margin-bottom:10px}.card{border:1px solid #ccc;margin-bottom:10px;padding:10px;break-inside:avoid;page-break-inside:avoid}.weekly-grid{grid-template-columns:1fr 1fr;gap:10px}.activity-list li{cursor:default;padding:4px 0}.link-btn{color:#000;text-decoration:none;padding:0}h3{color:#333}}
