:root{--bg-primary:#0d1117;--bg-secondary:#161b22;--bg-tertiary:#21262d;--text-primary:#e6edf3;--text-secondary:#8b949e;--accent:#f90;--green:#2ecc71;--yellow:#f39c12;--red:#e74c3c;--border:#30363d}*{box-sizing:border-box;margin:0;padding:0}body{background:#0d1117;background:var(--bg-primary);color:#e6edf3;color:var(--text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;min-height:100vh}.app{margin:0 auto;max-width:100%;padding:20px}.app-header{align-items:baseline;border-bottom:1px solid #30363d;border-bottom:1px solid var(--border);display:flex;gap:16px;margin-bottom:24px;padding-bottom:16px}.app-header h1{color:#f90;color:var(--accent);font-size:24px;font-weight:600}.app-subtitle{color:#8b949e;color:var(--text-secondary);font-size:14px}.controls-row{align-items:flex-end;display:flex;gap:24px;margin-bottom:20px}.jump-input-container{display:flex;flex-direction:column;gap:4px}.jump-input-container label{color:#8b949e;color:var(--text-secondary);font-size:11px;letter-spacing:.5px;text-transform:uppercase}.jump-fields{align-items:center;display:flex;gap:4px}.jump-prefix{color:#8b949e;color:var(--text-secondary);font-size:13px;font-weight:600}.jump-input,.jump-prefix{font-family:SF Mono,Fira Code,monospace}.jump-input{background:#161b22;background:var(--bg-secondary);border:1px solid #30363d;border:1px solid var(--border);border-radius:6px;color:#e6edf3;color:var(--text-primary);font-size:14px;padding:8px;text-align:center;width:50px}.jump-input:focus{border-color:#f90;border-color:var(--accent);outline:none}.jump-input::placeholder{color:#8b949e;color:var(--text-secondary);opacity:.6}.filter-bar{display:flex;gap:16px}.filter-group{display:flex;flex-direction:column;gap:4px}.filter-error{align-self:center;color:#e74c3c;color:var(--red);font-size:12px}.filter-group label{color:#8b949e;color:var(--text-secondary);font-size:11px;letter-spacing:.5px;text-transform:uppercase}.filter-group select{background:#161b22;background:var(--bg-secondary);border:1px solid #30363d;border:1px solid var(--border);border-radius:6px;color:#e6edf3;color:var(--text-primary);cursor:pointer;font-size:14px;min-width:150px;padding:8px 12px}.filter-group select:disabled{cursor:not-allowed;opacity:.4}.filter-group select:focus{border-color:#f90;border-color:var(--accent);outline:none}.summary-bar{background:#161b22;background:var(--bg-secondary);border:1px solid #30363d;border:1px solid var(--border);border-radius:8px;display:flex;gap:20px;margin-bottom:20px;padding:12px 16px}.summary-item{color:#8b949e;color:var(--text-secondary);font-size:13px}.summary-item strong{color:#e6edf3;color:var(--text-primary)}.summary-item.on-track strong{color:#2ecc71;color:var(--green)}.summary-item.at-risk strong{color:#f39c12;color:var(--yellow)}.summary-item.breached strong{color:#e74c3c;color:var(--red)}.summary-item.cursor-info{margin-left:auto}.summary-item.cursor-info strong{color:#f90;color:var(--accent)}.rack-filters{display:flex;gap:24px;margin-bottom:12px}.filter-section{align-items:center;display:flex;gap:6px}.filter-label{letter-spacing:.5px;margin-right:4px;text-transform:uppercase}.filter-btn,.filter-label{color:#8b949e;color:var(--text-secondary);font-size:11px}.filter-btn{background:#21262d;background:var(--bg-tertiary);border:1px solid #30363d;border:1px solid var(--border);border-radius:4px;cursor:pointer;padding:4px 10px;transition:all .1s}.filter-btn:hover{border-color:#8b949e;border-color:var(--text-secondary)}.filter-btn.active,.filter-btn:hover{color:#e6edf3;color:var(--text-primary)}.filter-btn.active{background:#161b22;background:var(--bg-secondary);border-color:#f90;border-color:var(--accent)}.filter-btn.filter-on-track.active{border-color:#2ecc71;border-color:var(--green);color:#2ecc71;color:var(--green)}.filter-btn.filter-at-risk.active{border-color:#f39c12;border-color:var(--yellow);color:#f39c12;color:var(--yellow)}.filter-btn.filter-breached.active{border-color:#e74c3c;border-color:var(--red);color:#e74c3c;color:var(--red)}.floor-plan-3d-container{border:1px solid #30363d;border:1px solid var(--border);border-radius:8px;height:80vh;margin-bottom:24px;overflow:hidden;position:relative}.floor-plan-legend-3d{background:#0d1117d9;bottom:12px;left:50%;padding:8px 16px;transform:translateX(-50%)}.floor-plan-legend-3d,.view-switcher{border:1px solid #30363d;border:1px solid var(--border);border-radius:6px;position:absolute}.view-switcher{background:#0d1117e6;display:flex;gap:2px;padding:3px;right:12px;top:12px;z-index:10}.view-btn{background:#0000;border:none;border-radius:4px;color:#8b949e;color:var(--text-secondary);cursor:pointer;font-size:12px;font-weight:500;padding:6px 12px;transition:all .15s}.view-btn:hover{color:#e6edf3;color:var(--text-primary)}.view-btn.active,.view-btn:hover{background:#21262d;background:var(--bg-tertiary)}.view-btn.active{color:#f90;color:var(--accent)}.axis-label{color:#888;font-size:11px;font-weight:600;pointer-events:none;position:absolute;-webkit-user-select:none;user-select:none;z-index:10}.axis-label-x{bottom:50px;left:50%;transform:translateX(-50%)}.axis-label-y{left:16px;top:50%;transform:translateY(-50%)}.rack-tooltip{background:#0d1117f2;border:1px solid #30363d;border:1px solid var(--border);border-radius:6px;display:flex;flex-direction:column;gap:2px;padding:6px 10px;pointer-events:none;position:fixed;z-index:100}.rack-tooltip strong{color:#f90;color:var(--accent);font-size:12px}.rack-tooltip span{color:#8b949e;color:var(--text-secondary);font-size:11px}.floor-plan-container{margin-bottom:24px}.floor-plan-empty{align-items:center;background:#161b22;background:var(--bg-secondary);border:1px dashed #30363d;border:1px dashed var(--border);border-radius:8px;color:#8b949e;color:var(--text-secondary);height:300px}.floor-plan-empty,.floor-plan-iso{display:flex;justify-content:center}.floor-plan-iso{padding:40px 0;perspective:1000px}.floor-plan-svg{border-radius:8px;box-shadow:20px 20px 60px #00000080;height:auto;max-width:900px;transform:rotateX(55deg) rotate(-45deg);transform-style:preserve-3d;transition:transform .3s ease;width:100%}.floor-plan-svg:hover{transform:rotateX(50deg) rotate(-45deg) scale(1.02)}.rack-tile rect{transition:opacity .15s}.rack-tile:hover rect{stroke:#f90;stroke:var(--accent);stroke-width:1.5;opacity:.8}.floor-plan-legend{display:flex;gap:20px;justify-content:center;margin-top:16px}.legend-item{align-items:center;color:#8b949e;color:var(--text-secondary);display:flex;font-size:12px;gap:6px}.legend-dot{border-radius:2px;height:10px;width:10px}.side-panel{animation:slideIn .2s ease-out;height:100vh;position:fixed;right:0;top:0;width:50%;z-index:1000}@keyframes slideIn{0%{transform:translateX(100%)}to{transform:translateX(0)}}.side-panel-content{background:#161b22;background:var(--bg-secondary);border-left:1px solid #30363d;border-left:1px solid var(--border);height:100%;overflow-y:auto;padding:24px;position:relative}.app.panel-open .floor-plan-3d-container{border:none;border-radius:0;height:100vh;left:0;margin:0;position:fixed;top:0;width:50%;z-index:999}.app.panel-open .app-header,.app.panel-open .controls-row,.app.panel-open .summary-bar{display:none}.popup-close{background:none;border:none;color:#8b949e;color:var(--text-secondary);cursor:pointer;font-size:24px;position:absolute;right:16px;top:12px}.popup-close:hover{color:#e6edf3;color:var(--text-primary)}.popup-error,.popup-loading{color:#8b949e;color:var(--text-secondary);padding:40px;text-align:center}.popup-error{color:#e74c3c;color:var(--red)}.popup-header h2{font-size:20px;margin-bottom:8px}.popup-meta{display:flex;gap:8px;margin-bottom:8px}.badge{border-radius:4px;font-size:11px;font-weight:600;padding:3px 8px;text-transform:uppercase}.badge-on_track{background:#2ecc71;background:var(--green);color:#000}.badge-at_risk{background:#f39c12;background:var(--yellow);color:#000}.badge-breached{background:#e74c3c;background:var(--red);color:#fff}.badge-type{border:1px solid #f90;border:1px solid var(--accent);color:#f90;color:var(--accent)}.badge-lifecycle,.badge-type{background:#21262d;background:var(--bg-tertiary)}.badge-lifecycle{border:1px solid #30363d;border:1px solid var(--border)}.badge-lifecycle,.popup-info{color:#8b949e;color:var(--text-secondary)}.popup-info{display:flex;font-size:13px;gap:16px;margin-bottom:16px}.timeline-bar{display:flex;gap:2px;margin-bottom:20px;overflow-x:auto;padding:12px 0}.timeline-stage{align-items:center;display:flex;flex-direction:column;gap:4px;min-width:70px}.timeline-dot{background:#21262d;background:var(--bg-tertiary);border:2px solid #30363d;border:2px solid var(--border);border-radius:50%;height:12px;width:12px}.timeline-stage.completed .timeline-dot{background:#2ecc71;background:var(--green);border-color:#2ecc71;border-color:var(--green)}.timeline-stage.active .timeline-dot{background:#f90;background:var(--accent);border-color:#f90;border-color:var(--accent);box-shadow:0 0 8px #f90;box-shadow:0 0 8px var(--accent)}.timeline-label{color:#8b949e;color:var(--text-secondary);font-size:9px;text-align:center;text-transform:uppercase}.timeline-stage.active .timeline-label{color:#f90;color:var(--accent);font-weight:600}h3{color:#8b949e;color:var(--text-secondary);font-size:14px;letter-spacing:.5px;margin-bottom:8px;text-transform:uppercase}.connections-table,.detail-table{border-collapse:collapse;font-size:13px;margin-bottom:16px;width:100%}.connections-table th,.detail-table th{background:#21262d;background:var(--bg-tertiary);color:#8b949e;color:var(--text-secondary);font-size:11px;letter-spacing:.3px;text-align:left;text-transform:uppercase}.connections-table td,.connections-table th,.detail-table td,.detail-table th{border-bottom:1px solid #30363d;border-bottom:1px solid var(--border);padding:8px 10px}.connections-table td,.detail-table td{color:#e6edf3;color:var(--text-primary)}.device-row{cursor:pointer}.device-row:hover td{background:#21262d;background:var(--bg-tertiary)}.connections-row td{background:#0d1117;background:var(--bg-primary);padding:0}.connections-table{margin:8px 0}.connections-table td{font-family:SF Mono,Fira Code,monospace;font-size:12px}.premonition-overlay{align-items:center;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#000000b3;display:flex;inset:0;justify-content:center;position:fixed;z-index:2000}.premonition-modal{background:#161b22;background:var(--bg-secondary);border:1px solid #30363d;border:1px solid var(--border);border-radius:12px;max-height:80vh;max-width:600px;overflow-y:auto;padding:28px;position:relative;width:90%}.premonition-confirm h2,.premonition-results h2,.premonition-running h2{font-size:18px;margin-bottom:12px}.premonition-position{background:#21262d;background:var(--bg-tertiary);border-radius:6px;color:#f90;color:var(--accent);display:inline-block;font-family:SF Mono,Fira Code,monospace;font-size:16px;font-weight:600;margin:8px 0;padding:8px 12px}.premonition-note{color:#8b949e;color:var(--text-secondary);font-size:12px;line-height:1.5;margin:12px 0 20px}.premonition-run-btn{background:#f90;background:var(--accent);border:none;border-radius:6px;color:#000;cursor:pointer;font-size:14px;font-weight:600;padding:10px 20px}.premonition-run-btn:hover{opacity:.9}.premonition-running{padding:20px 0;text-align:center}.premonition-spinner{animation:spin .8s linear infinite;border:3px solid #30363d;border-top-color:#f90;border:3px solid var(--border);border-radius:50%;border-top-color:var(--accent);height:36px;margin:16px auto;width:36px}@keyframes spin{to{transform:rotate(1turn)}}.premonition-summary{display:flex;font-size:13px;font-weight:600;gap:16px;margin-bottom:16px}.premonition-runtime{color:#8b949e;color:var(--text-secondary);font-weight:400;margin-left:auto}.premonition-table{border-collapse:collapse;font-size:12px;margin-bottom:16px;width:100%}.premonition-table th{background:#21262d;background:var(--bg-tertiary);color:#8b949e;color:var(--text-secondary);font-size:11px;text-align:left;text-transform:uppercase}.premonition-table td,.premonition-table th{border-bottom:1px solid #30363d;border-bottom:1px solid var(--border);padding:8px 10px}.premonition-table .check-pass td{color:#2ecc71;color:var(--green)}.premonition-table .check-fail td{color:#e74c3c;color:var(--red)}.premonition-table .check-warn td{color:#f39c12;color:var(--yellow)}.premonition-summary .check-pass{color:#2ecc71;color:var(--green)}.premonition-summary .check-fail{color:#e74c3c;color:var(--red)}.premonition-summary .check-warn{color:#f39c12;color:var(--yellow)}.no-links{color:#8b949e;color:var(--text-secondary);font-size:12px;font-style:italic;padding:12px}