: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)}.login-page{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--bg);padding:2rem}.login-card{background:var(--card-bg);border-radius:12px;padding:2.5rem;max-width:440px;width:100%;box-shadow:0 4px 24px #00000014}.login-header{text-align:center;margin-bottom:2rem}.login-header h1{font-size:1.75rem;color:var(--text);margin-bottom:.5rem}.login-header p{color:var(--text-muted);font-size:.9rem}.login-form .form-group{margin-bottom:1.25rem}.login-form label{display:block;font-size:.85rem;font-weight:500;margin-bottom:.35rem;color:var(--text)}.login-form input{width:100%;padding:.65rem .75rem;border:1px solid var(--border);border-radius:6px;font-size:.9rem;transition:border-color .2s}.login-form input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #1a73e81a}.login-btn{width:100%;padding:.75rem;font-size:1rem;margin-top:.5rem}.login-footer{margin-top:2rem;padding-top:1.5rem;border-top:1px solid var(--border)}.login-footer h4{font-size:.85rem;color:var(--text-muted);margin-bottom:.75rem}.role-grid{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.role-info{display:flex;align-items:center;gap:.75rem;font-size:.8rem;color:var(--text-muted)}.role-badge{display:inline-block;padding:.2rem .5rem;border-radius:4px;font-size:.7rem;font-weight:600;text-transform:uppercase;color:#fff;min-width:80px;text-align:center}.role-badge.admin{background:#ef4444}.role-badge.authorizer{background:#f59e0b}.role-badge.user{background:#3b82f6}.login-hint{font-size:.75rem;color:var(--text-muted);line-height:1.5}.login-hint code{background:var(--bg);padding:.15rem .35rem;border-radius:3px;font-size:.7rem}.sidebar-footer{margin-top:auto;padding:1rem 1.25rem;border-top:1px solid rgba(255,255,255,.1)}.user-info{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.user-name{font-size:.85rem;color:var(--sidebar-text);font-weight:500}.role-pill{display:inline-block;padding:.15rem .5rem;border-radius:10px;font-size:.65rem;font-weight:600;text-transform:uppercase;color:#fff}.logout-btn{background:none;border:none;color:var(--sidebar-text);opacity:.7;font-size:.8rem;cursor:pointer;padding:.25rem 0}.logout-btn:hover{opacity:1}.live-indicator{display:flex;align-items:center;gap:.4rem;font-size:.75rem;color:var(--text-muted)}.live-dot{width:8px;height:8px;border-radius:50%;background:var(--success);animation:pulse 2s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.deploy-queue-item{display:flex;align-items:center;gap:.75rem;padding:.6rem .75rem;border-radius:6px;margin-bottom:.5rem;font-size:.85rem}.deploy-queue-item.deploying{background:#3b82f614;border:1px solid rgba(59,130,246,.2)}.dq-status{font-size:1.1rem}.dq-version{font-weight:600}.dq-stage{color:var(--text-muted)}.dq-commits{font-size:.75rem;color:var(--text-muted)}.dq-exec{font-size:.7rem;margin-left:auto;color:var(--text-muted)}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px);max-height:0}to{opacity:1;transform:translateY(0);max-height:1000px}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes progressPulse{0%,to{opacity:1}50%{opacity:.6}}.animate-fade-in{animation:fadeIn .3s ease-out}.animate-slide-down{animation:slideDown .3s ease-out;overflow:hidden}.animate-slide-up{animation:slideUp .3s ease-out}.active-stages{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:1.5rem}.active-stage-card{background:var(--card-bg);border-radius:10px;overflow:hidden;box-shadow:0 2px 8px #0000000a;transition:transform .2s,box-shadow .2s}.active-stage-card:hover{transform:translateY(-2px);box-shadow:0 4px 16px #00000014}.asc-bar{height:4px;width:100%}.asc-content{padding:1rem 1.25rem}.asc-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.25rem}.asc-stage{font-weight:600;font-size:.9rem;text-transform:uppercase;letter-spacing:.5px}.asc-version{font-size:1.1rem;font-weight:700}.asc-meta{font-size:.75rem;color:var(--text-muted);display:flex;gap:.4rem;margin-bottom:.75rem}.asc-actions{display:flex;gap:.5rem}.mini-btn{padding:.3rem .6rem;border-radius:4px;border:none;font-size:.75rem;font-weight:500;cursor:pointer;transition:background .2s,transform .1s}.mini-btn:active{transform:scale(.95)}.mini-btn.promote{background:#22c55e1a;color:#16a34a}.mini-btn.promote:hover{background:#22c55e33}.mini-btn.rollback{background:#ef44441a;color:#dc2626}.mini-btn.rollback:hover{background:#ef444433}.mini-btn.deploy{background:#3b82f61a;color:#2563eb}.mini-btn.deploy:hover{background:#3b82f633}.mini-btn:disabled{opacity:.5;cursor:not-allowed}.version-card{background:var(--card-bg);border:1px solid var(--border);border-radius:8px;margin-bottom:.75rem;cursor:pointer;transition:border-color .2s,box-shadow .2s,transform .15s;overflow:hidden}.version-card:hover{border-color:var(--primary);box-shadow:0 2px 12px #1a73e814}.version-card.selected{border-color:var(--primary);box-shadow:0 0 0 2px #1a73e826}.version-card.rolled-back{opacity:.6}.vc-progress-track{height:4px;background:var(--border);position:relative;overflow:visible}.vc-progress-bar{height:100%;transition:width .6s ease-in-out;border-radius:0 2px 2px 0}.vc-progress-bar.animating{animation:progressPulse 1.5s infinite}.vc-progress-markers{position:absolute;top:-3px;left:0;right:0;height:10px}.vc-marker{position:absolute;width:10px;height:10px;border-radius:50%;background:var(--border);border:2px solid var(--card-bg);transform:translate(-50%);transition:background .3s}.vc-marker.reached{background:var(--success)}.vc-body{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem}.vc-left{display:flex;align-items:center;gap:.75rem}.vc-icon{font-size:1.2rem}.vc-title{display:flex;align-items:center;gap:.5rem;margin-bottom:.15rem}.vc-subtitle{font-size:.75rem;color:var(--text-muted)}.vc-right{display:flex;flex-direction:column;align-items:flex-end;gap:.35rem}.vc-actions{display:flex;gap:.4rem}.vc-time{font-size:.7rem;color:var(--text-muted)}.commit-list{max-height:300px;overflow:auto;border:1px solid var(--border);border-radius:6px}.commit-row{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-bottom:1px solid var(--border);cursor:pointer;transition:background .15s}.commit-row:hover{background:var(--bg)}.commit-row.selected{background:#1a73e80d}.commit-msg{font-size:.85rem;flex:1}.commit-meta{font-size:.75rem;color:var(--text-muted);white-space:nowrap}.changelog-block{margin-top:1rem;font-size:.85rem;white-space:pre-wrap;background:var(--bg);padding:1rem;border-radius:6px;border-left:3px solid var(--primary)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal-content{background:var(--card-bg);border-radius:12px;padding:2rem;max-width:500px;width:90%;box-shadow:0 20px 60px #0003}.modal-body{margin:1rem 0}.modal-info{background:var(--bg);padding:.75rem 1rem;border-radius:6px;font-size:.85rem;color:var(--text-muted)}.modal-actions{display:flex;gap:.75rem;margin-top:1.5rem}.stage-selector{display:flex;gap:.5rem;margin-top:.5rem}.stage-option{flex:1;padding:.6rem 1rem;border:2px solid var(--border);border-radius:8px;background:var(--card-bg);cursor:pointer;font-weight:500;text-align:center;transition:border-color .2s,background .2s,transform .1s}.stage-option:hover{background:var(--bg)}.stage-option.active{background:#1a73e80d;transform:scale(1.02)}.btn-danger{background:var(--danger);color:#fff;border:none;padding:.6rem 1.25rem;border-radius:6px;cursor:pointer;font-weight:500;transition:background .2s}.btn-danger:hover{background:#dc2626}
