:root{--bg:#0e0b18;--bg-elevated:#171224;--card:#1b1730;--card-border:#ffffff14;--accent:#8b7cf6;--accent-strong:#a78bfa;--accent-soft:#8b7cf626;--text:#f2f0fa;--text-muted:#9d97b8;--danger:#f87171;--success:#34d399;--warning:#fbbf24;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-family:-apple-system,PingFang TC,Noto Sans TC,Microsoft JhengHei,system-ui,sans-serif}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);margin:0}a{color:var(--accent-strong);text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}.app-shell{flex-direction:column;min-height:100%;display:flex}.topnav{background:var(--bg-elevated);border-bottom:1px solid var(--card-border);flex-wrap:wrap;align-items:center;gap:10px 16px;padding:14px 28px;display:flex}.topnav-brand-group{align-items:center;gap:12px;min-width:0;display:flex}.topnav-brand{color:var(--text);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:15px;font-weight:700;overflow:hidden}.topnav-user{align-items:center;gap:14px;margin-left:auto;display:flex}.brand-logo{flex-shrink:0;width:auto;height:26px}.brand-logo-fallback{background:linear-gradient(135deg, var(--accent), var(--accent-strong));color:#fff;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:26px;height:26px;font-size:11px;font-weight:700;display:flex}.topnav-links{flex-wrap:wrap;align-items:center;gap:8px 20px;display:flex}.topnav-links a,.topnav-links button.link{color:var(--text-muted);font-weight:500}.topnav-links a.active,.topnav-links a:hover,.topnav-links button.link:hover{color:var(--text);text-decoration:none}.link-button{cursor:pointer;background:0 0;border:none;padding:0}.main{flex:1;width:100%;max-width:1200px;margin:0 auto;padding:28px}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px;display:flex}.page-header h1{margin:0;font-size:24px}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:28px;display:grid}.stat-card{background:linear-gradient(160deg, var(--card), var(--bg-elevated));border:1px solid var(--card-border);border-radius:16px;padding:20px}.stat-card .label{color:var(--text-muted);margin-bottom:8px;font-size:13px}.stat-card .value{font-size:28px;font-weight:700}.stat-card.overdue .value{color:var(--danger)}.card{background:var(--card);border:1px solid var(--card-border);border-radius:16px;margin-bottom:20px;padding:20px}.card h2{margin-top:0;font-size:16px}.status-bars{flex-direction:column;gap:10px;display:flex}.status-bar-row{grid-template-columns:120px 1fr 40px;align-items:center;gap:12px;font-size:13px;display:grid}.status-bar-track{background:#ffffff0f;border-radius:8px;height:10px;overflow:hidden}.status-bar-fill{background:linear-gradient(90deg, var(--accent), var(--accent-strong));border-radius:8px;height:100%}.table-scroll{-webkit-overflow-scrolling:touch;margin:0 -20px;padding:0 20px;overflow-x:auto}table{border-collapse:collapse;width:100%;min-width:640px;font-size:14px}.stage-table{min-width:760px}th,td{text-align:left;border-bottom:1px solid var(--card-border);padding:10px 12px}th{color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:500}th.text-right,td.text-right{text-align:right}tr:last-child td{border-bottom:none}.badge{background:var(--accent-soft);color:var(--accent-strong);border-radius:999px;padding:3px 10px;font-size:12px;display:inline-block}.badge.overdue{color:var(--danger);background:#f8717126}.badge.closed{color:var(--text-muted);background:#ffffff14}.btn{border:1px solid var(--card-border);background:var(--bg-elevated);color:var(--text);cursor:pointer;border-radius:10px;align-items:center;gap:6px;padding:9px 16px;font-weight:500;display:inline-flex}.btn:hover{border-color:var(--accent)}.btn-primary{background:linear-gradient(135deg, var(--accent), var(--accent-strong));color:#fff;border:none}.btn-primary:hover{filter:brightness(1.08)}.btn-danger{color:var(--danger)}.form-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;display:grid}.field{flex-direction:column;gap:6px;display:flex}.field.span-2{grid-column:span 2}.field label{color:var(--text-muted);font-size:13px}.field input,.field select,.field textarea{background:var(--bg-elevated);border:1px solid var(--card-border);color:var(--text);border-radius:10px;padding:9px 12px}.field textarea{resize:vertical;min-height:70px}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent);outline:none}.login-shell{justify-content:center;align-items:center;min-height:100%;display:flex}.login-card{background:var(--card);border:1px solid var(--card-border);border-radius:16px;width:340px;padding:36px}.login-card h1{margin-top:0;font-size:20px}.login-brand{text-align:center;flex-direction:column;align-items:center;gap:12px;margin-bottom:28px;display:flex}.login-brand h1{margin:0}.brand-logo-large{height:56px}.brand-logo-fallback-large{border-radius:12px;width:56px;height:56px;font-size:18px}.error-text{color:var(--danger);margin:8px 0 0;font-size:13px}.muted{color:var(--text-muted)}input[type=date]::-webkit-calendar-picker-indicator{filter:invert(.8);cursor:pointer}.stage-table td.date-cell input{width:140px}.roadmap-legend{color:var(--text-muted);gap:20px;margin-bottom:14px;font-size:12px;display:flex}.roadmap-legend .swatch{vertical-align:middle;border-radius:50%;width:10px;height:10px;margin-right:6px;display:inline-block}.roadmap-legend .swatch.kickoff{background:#5b4bc4}.roadmap-legend .swatch.bid{background:#d8cffb}.roadmap-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}.roadmap-inner{min-width:480px}.roadmap{max-height:440px;overflow-y:auto}.roadmap-row,.roadmap-axis{align-items:center;min-height:32px;display:flex}.roadmap-label{text-overflow:ellipsis;white-space:nowrap;flex-shrink:0;width:220px;padding-right:14px;font-size:13px;overflow:hidden}.roadmap-axis .roadmap-label{color:var(--text-muted);font-size:12px}.roadmap-track{border-bottom:1px solid var(--card-border);flex:1;height:32px;position:relative}.roadmap-axis .roadmap-track{border-bottom:none;height:20px}.roadmap-tick{color:var(--text-muted);white-space:nowrap;font-size:11px;position:absolute;top:0;transform:translate(-50%)}.roadmap-bar{background:#ffffff40;border-radius:2px;height:2px;position:absolute;top:50%;transform:translateY(-50%)}.roadmap-dot{width:10px;height:10px;box-shadow:0 0 0 2px var(--card);border-radius:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.roadmap-dot.kickoff{background:#5b4bc4}.roadmap-dot.bid{background:#d8cffb}.roadmap-empty{color:var(--text-muted);font-size:13px}.stage-table td.reason-cell input{width:100%}.project-name-link{font-weight:600}.actions-row{gap:10px;margin-top:16px;display:flex}@media (width<=720px){.topnav{padding:12px 16px}.topnav-brand{max-width:46vw}.topnav-user{margin-left:0}.main{padding:16px}.page-header h1{font-size:20px}.login-card{width:auto;margin:0 16px}.roadmap-label{width:130px}.table-scroll{margin:0 -16px;padding:0 16px}}
