:root{--primary: #1a73e8;--primary-hover: #1557b0;--bg: #f5f7fa;--sidebar-bg: #1e293b;--sidebar-text: #e2e8f0;--card-bg: #ffffff;--border: #e2e8f0;--text: #1e293b;--text-muted: #64748b;--success: #22c55e;--warning: #f59e0b;--danger: #ef4444}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text)}.app{display:flex;min-height:100vh}.sidebar{width:240px;background:var(--sidebar-bg);color:var(--sidebar-text);padding:1.5rem 0;position:fixed;height:100vh;overflow-y:auto}.sidebar-header{padding:0 1.5rem 1.5rem;border-bottom:1px solid rgba(255,255,255,.1)}.sidebar-header h1{font-size:1.25rem;font-weight:600}.nav-links{list-style:none;padding:1rem 0}.nav-links li a{display:block;padding:.75rem 1.5rem;color:var(--sidebar-text);text-decoration:none;transition:background .2s}.nav-links li a:hover{background:#ffffff0d}.nav-links li a.active{background:#ffffff1a;border-left:3px solid var(--primary)}.content{flex:1;margin-left:240px;padding:2rem}.page-header{margin-bottom:2rem}.page-header h2{font-size:1.75rem;font-weight:600;margin-bottom:.5rem}.page-header p{color:var(--text-muted)}.card{background:var(--card-bg);border-radius:8px;border:1px solid var(--border);padding:1.5rem;margin-bottom:1rem}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;margin-bottom:2rem}.stat-card{background:var(--card-bg);border-radius:8px;border:1px solid var(--border);padding:1.25rem}.stat-card .label{font-size:.875rem;color:var(--text-muted);margin-bottom:.25rem}.stat-card .value{font-size:1.75rem;font-weight:700}.badge{display:inline-block;padding:.25rem .75rem;border-radius:9999px;font-size:.75rem;font-weight:500}.badge-success{background:#dcfce7;color:#166534}.badge-warning{background:#fef3c7;color:#92400e}.badge-danger{background:#fee2e2;color:#991b1b}.badge-info{background:#dbeafe;color:#1e40af}.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:6px;font-size:.875rem;font-weight:500;cursor:pointer;border:none;transition:background .2s}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover)}.btn-success{background:var(--success);color:#fff}.btn-danger{background:var(--danger);color:#fff}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.75rem 1rem;border-bottom:1px solid var(--border)}th{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-weight:600}.linked-item{display:flex;align-items:center;padding:.4rem 0;font-size:.9rem}input,textarea,select{font-family:inherit;font-size:.9rem}input:focus,textarea:focus,select:focus{outline:2px solid var(--primary);outline-offset:1px}code{background:var(--bg);padding:.1rem .4rem;border-radius:3px;font-size:.8rem}.pipeline-container{display:flex;align-items:center;justify-content:center;padding:2rem 1rem;background:var(--card-bg);border-radius:12px;border:1px solid var(--border)}.pipeline-stage-wrapper{display:flex;align-items:center}.pipeline-connector{display:flex;align-items:center;width:60px;opacity:.3}.pipeline-connector.active{opacity:1}.connector-line{flex:1;height:2px;background:var(--border)}.connector-arrow{font-size:1.25rem;color:var(--text-muted);margin:0 .25rem}.pipeline-stage{display:flex;flex-direction:column;align-items:center;padding:1.5rem 2rem;border-radius:12px;border:2px solid var(--border);min-width:180px;transition:all .2s}.pipeline-stage.stage-active{border-color:var(--primary);box-shadow:0 4px 12px #1a73e81a}.pipeline-stage.stage-active.stage-dev{border-color:#3b82f6;box-shadow:0 4px 12px #3b82f626}.pipeline-stage.stage-active.stage-beta{border-color:#f59e0b;box-shadow:0 4px 12px #f59e0b26}.pipeline-stage.stage-active.stage-prod{border-color:#22c55e;box-shadow:0 4px 12px #22c55e26}.stage-icon{font-size:2rem;margin-bottom:.5rem}.stage-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-weight:600;margin-bottom:.5rem}.stage-version{display:flex;flex-direction:column;align-items:center;gap:.25rem}.version-number{font-size:1.25rem;font-weight:700}.version-hash{font-family:monospace;font-size:.75rem;color:var(--text-muted)}.version-time{font-size:.7rem;color:var(--text-muted)}.version-empty{font-size:.85rem;color:var(--text-muted);font-style:italic}.promote-btn{display:inline-flex;align-items:center;gap:.25rem;margin-top:.75rem;padding:.4rem .75rem;border-radius:6px;font-size:.8rem;font-weight:600;cursor:pointer;border:none;background:linear-gradient(135deg,#3b82f6,#1d4ed8);color:#fff;transition:transform .1s,box-shadow .2s}.promote-btn:hover{transform:translateY(-1px);box-shadow:0 4px 8px #3b82f64d}.rollback-btn{display:inline-flex;align-items:center;margin-top:.5rem;padding:.3rem .6rem;border-radius:6px;font-size:.75rem;font-weight:500;cursor:pointer;border:1px solid var(--danger);background:transparent;color:var(--danger);transition:background .2s}.rollback-btn:hover{background:#fee2e2}.version-stages{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.version-stage-card{background:var(--card-bg);border-radius:10px;border:1px solid var(--border);overflow:hidden}.vsc-header{padding:1rem 1.25rem;border-top:3px solid;display:flex;justify-content:space-between;align-items:center}.vsc-stage-name{font-size:.8rem;text-transform:uppercase;letter-spacing:.05em;font-weight:600;color:var(--text-muted)}.vsc-version{font-size:1.5rem;font-weight:700}.vsc-details{padding:0 1.25rem 1.25rem;display:flex;flex-direction:column;gap:.4rem}.vsc-time{font-size:.8rem;color:var(--text-muted)}.vsc-actions{display:flex;gap:.5rem;margin-top:.5rem}.version-list{display:flex;flex-direction:column;gap:.5rem}.version-item{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;border-radius:8px;border:1px solid var(--border);cursor:pointer;transition:background .15s,border-color .15s}.version-item:hover{background:var(--bg)}.version-item.selected{border-color:var(--primary);background:#1a73e80a}.version-item.rolled-back{opacity:.6}.vi-left{display:flex;align-items:center;gap:.75rem}.vi-indicator{width:10px;height:10px;border-radius:50%;flex-shrink:0}.vi-info{display:flex;flex-direction:column;gap:.2rem}.vi-title{display:flex;align-items:center;gap:.5rem}.vi-commit{font-size:.8rem;color:var(--text-muted)}.vi-right{display:flex;flex-direction:column;align-items:flex-end;gap:.25rem}.vi-stats{display:flex;gap:.5rem;font-size:.8rem}.vi-time{font-size:.75rem;color:var(--text-muted)}.deployment-row{display:flex;align-items:center;gap:1rem;padding:.75rem 0;border-bottom:1px solid var(--border)}.deployment-row:last-child{border-bottom:none}.deploy-indicator{width:8px;height:8px;border-radius:50%;flex-shrink:0}.deploy-dev{background:#3b82f6}.deploy-beta{background:#f59e0b}.deploy-prod{background:#22c55e}.deploy-info{flex:1;display:flex;flex-direction:column;gap:.2rem}.deploy-msg{font-size:.8rem;color:var(--text-muted)}.deploy-meta{display:flex;flex-direction:column;align-items:flex-end;gap:.25rem}.deploy-time{font-size:.75rem;color:var(--text-muted)}.aws-config-status{display:flex;align-items:center;gap:.5rem;font-size:.85rem;padding:.5rem .75rem;background:#dcfce7;border-radius:6px}.config-dot{width:8px;height:8px;border-radius:50%}.config-dot.connected{background:#22c55e}.config-dot.disconnected{background:#ef4444}.config-link{background:none;border:none;color:var(--primary);cursor:pointer;font-size:.8rem;text-decoration:underline}.aws-config-panel{padding:1rem;background:var(--card-bg);border:1px solid var(--border);border-radius:8px;min-width:280px}.config-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem;font-weight:500}.config-form{display:flex;flex-direction:column;gap:.5rem}.config-form input{padding:.4rem .6rem;border:1px solid var(--border);border-radius:4px;font-size:.85rem}.config-actions{display:flex;gap:.5rem;margin-top:.25rem}.config-hint{font-size:.7rem;color:var(--text-muted);margin-top:.5rem}.pipeline-card{background:var(--card-bg);border:1px solid var(--border);border-radius:12px;overflow:hidden}.pc-header{display:flex;justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;border-bottom:1px solid var(--border);background:var(--bg)}.pc-title{display:flex;align-items:center;gap:.75rem}.pc-name{font-family:monospace;font-size:.95rem;font-weight:600}.pc-status-pill{padding:.2rem .6rem;border-radius:9999px;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.pc-status-pill.running{background:#dbeafe;color:#1e40af}.pc-status-pill.failed{background:#fee2e2;color:#991b1b}.pc-status-pill.idle{background:#f1f5f9;color:#64748b}.pc-controls{display:flex;gap:.5rem}.ctrl-btn{display:inline-flex;align-items:center;gap:.3rem;padding:.45rem .85rem;border-radius:6px;font-size:.8rem;font-weight:600;cursor:pointer;border:none;transition:transform .1s,box-shadow .2s}.ctrl-btn:disabled{opacity:.5;cursor:not-allowed}.ctrl-btn:hover:not(:disabled){transform:translateY(-1px)}.ctrl-btn.trigger{background:linear-gradient(135deg,#3b82f6,#1d4ed8);color:#fff}.ctrl-btn.trigger:hover:not(:disabled){box-shadow:0 4px 8px #3b82f64d}.ctrl-btn.stop{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff}.ctrl-btn.stop:hover:not(:disabled){box-shadow:0 4px 8px #ef44444d}.ctrl-btn.refresh{background:var(--card-bg);border:1px solid var(--border);color:var(--text)}.pc-stages{display:flex;flex-direction:column}.pc-stage{display:flex;align-items:center;padding:.9rem 1.5rem;border-bottom:1px solid var(--border);transition:background .15s}.pc-stage:last-child{border-bottom:none}.pc-stage:hover{background:#00000003}.pc-stage.active{background:#3b82f60a}.pc-stage.failed{background:#ef444408}.pc-stage.gated{opacity:.7}.stage-gate{width:36px;flex-shrink:0}.gate-toggle{background:none;border:none;font-size:1rem;cursor:pointer;padding:.2rem;border-radius:4px;transition:transform .15s}.gate-toggle:hover{transform:scale(1.2)}.stage-body{flex:1;display:flex;flex-direction:column;gap:.3rem}.stage-row-header{display:flex;align-items:center;gap:.75rem}.stage-row-name{font-size:.9rem;font-weight:500}.stage-row-status{font-size:.7rem;font-weight:600;padding:.1rem .45rem;border-radius:4px}.s-succeeded{color:#166534;background:#dcfce7}.s-inprogress{color:#1e40af;background:#dbeafe}.s-failed{color:#991b1b;background:#fee2e2}.s-unknown{color:#64748b;background:#f1f5f9}.stage-row-actions{display:flex;align-items:center;gap:.5rem;min-height:1.5rem}.action-btn{padding:.3rem .65rem;border:none;border-radius:5px;font-size:.75rem;font-weight:600;cursor:pointer;transition:transform .1s}.action-btn:hover:not(:disabled){transform:scale(1.05)}.action-btn:disabled{opacity:.5;cursor:not-allowed}.action-btn.approve{background:linear-gradient(135deg,#22c55e,#16a34a);color:#fff}.action-btn.reject{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff}.action-btn.retry{background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff}.gate-reason{font-size:.75rem;color:var(--text-muted);font-style:italic}.env-badge{padding:.2rem .5rem;border-radius:4px;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}.env-dev{background:#dbeafe;color:#1e40af}.env-beta{background:#fef3c7;color:#92400e}.env-prod{background:#dcfce7;color:#166534}.pc-empty{padding:2rem;text-align:center;color:var(--text-muted)}
