:root{--bg:#090c14;--surface-1:#0d1220;--surface-2:#121a2c;--surface-3:#182238;--border:#1c2537;--border-strong:#2a3854;--ink:#e8edf7;--ink-muted:#8b96b3;--ink-faint:#5c6785;--accent:#4f7cff;--accent-strong:#6d8fff;--accent-soft:#4f7cff24;--success:#34d399;--failed:#f87171;--pending:#fbbf24;--neutral:#8b96b3;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, sans-serif;--font-mono:"SF Mono", ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;--radius-sm:6px;--radius-md:10px;--radius-lg:14px}*{box-sizing:border-box}body{font-family:var(--font-sans);background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;margin:0}a{color:var(--accent-strong);text-decoration:none}a:hover{text-decoration:underline}.mono{font-family:var(--font-mono);color:var(--ink-muted);font-size:12.5px}.muted{color:var(--ink-muted);font-size:13px}.shell{max-width:960px;margin:0 auto;padding:32px 20px 64px}.app-shell{min-height:100vh;display:flex}.sidebar{background:var(--surface-1);border-right:1px solid var(--border);flex-shrink:0;width:216px;height:100vh;padding:20px 0;position:sticky;top:0}.sidebar-brand{letter-spacing:-.01em;color:var(--ink);align-items:center;gap:9px;padding:4px 20px 22px;font-size:14.5px;font-weight:800;display:flex}.sidebar-brand-mark{background:linear-gradient(135deg, var(--accent), #8b6cff);color:#fff;border-radius:7px;flex-shrink:0;justify-content:center;align-items:center;width:26px;height:26px;display:flex}.sidebar-nav{margin:0;padding:0;list-style:none}.sidebar-link{border-radius:var(--radius-sm);color:var(--ink-muted);align-items:center;gap:11px;margin:1px 8px;padding:9px 20px;font-size:13.5px;font-weight:600;text-decoration:none;display:flex}.sidebar-link:hover{color:var(--ink);background:#ffffff08;text-decoration:none}.sidebar-link.active{color:var(--accent-strong);background:var(--accent-soft)}.sidebar-icon{opacity:.9;flex-shrink:0;align-items:center;display:flex}.app-main{flex:1;min-width:0}.app-content{max-width:1180px;padding:30px 32px 64px}.topbar{justify-content:space-between;align-items:center;margin-bottom:28px;display:flex}.topbar-pad{padding:20px 28px 0}.topbar-actions{align-items:center;gap:14px;display:flex}.topbar h1{margin:0;font-size:20px}.topbar form{margin:0}.btn-ghost{border:1px solid var(--border-strong);color:var(--ink-muted);border-radius:var(--radius-sm);cursor:pointer;background:0 0;padding:6px 14px;font-size:13px}.btn-ghost:hover{border-color:var(--accent);color:var(--ink);text-decoration:none}.project-card{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-lg);margin-bottom:20px;padding:20px 22px;overflow-x:auto}.project-card h2{align-items:center;gap:8px;margin:0 0 12px;font-size:15px;display:flex}.project-card .error{color:var(--failed);font-size:13px}table{border-collapse:collapse;width:100%;font-size:13px}th{text-align:left;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--border);padding:0 10px 10px;font-size:11px;font-weight:700}td{border-bottom:1px solid var(--border);vertical-align:middle;padding:11px 10px}.table-card{padding:6px 20px 4px}.table-card table{min-width:920px}.table-card tbody tr:last-child td{border-bottom:none}.table-card tbody tr:hover{background:#ffffff04}.row-running td:first-child{box-shadow:inset 3px 0 0 var(--accent)}.row-project-link{color:var(--ink);font-weight:700}.row-project-link:hover{color:var(--accent-strong)}.badge{text-transform:uppercase;letter-spacing:.03em;border-radius:999px;padding:2px 9px;font-size:11px;font-weight:700;display:inline-block}.badge-success{color:var(--success);background:#34d39926}.badge-failed{color:var(--failed);background:#f8717126}.badge-running{background:var(--accent-soft);color:var(--accent-strong)}.badge-pending{color:var(--pending);background:#fbbf2426}.badge-canceled,.badge-skipped{color:var(--neutral);background:#8b96b326}.stage-stepper{align-items:center;margin-bottom:16px;display:flex}.stage-step{flex:1;align-items:center;display:flex}.stage-connector{background:var(--border);flex:1;min-width:16px;height:2px}.stage-box{border-radius:var(--radius-sm);border:1px solid #0000;flex-direction:column;align-items:center;gap:2px;min-width:90px;padding:8px 16px;display:flex}.stage-name{text-transform:uppercase;letter-spacing:.03em;font-size:12px;font-weight:700}.stage-status{opacity:.85;font-size:10.5px}.stage-success{color:var(--success);background:#34d3991a;border-color:#34d3994d}.stage-failed{color:var(--failed);background:#f871711a;border-color:#f871714d}.stage-pending,.stage-canceled{color:var(--neutral);background:#8b96b312;border-color:#8b96b333}.stage-running{background:var(--accent-soft);color:var(--accent-strong);border-color:#4f7cff73;animation:1.6s ease-in-out infinite stage-pulse}@keyframes stage-pulse{0%,to{box-shadow:0 0 #4f7cff59}50%{box-shadow:0 0 0 6px #4f7cff00}}.pipeline-progress{flex-direction:column;gap:10px;max-width:360px;margin-bottom:16px;display:flex}.progress-row-label{color:var(--ink-muted);text-transform:uppercase;letter-spacing:.03em;justify-content:space-between;margin-bottom:4px;font-size:11px;font-weight:600;display:flex}.progress-track{background:var(--border-strong);border-radius:999px;height:6px;overflow:hidden}.progress-fill{background:linear-gradient(90deg, var(--accent), var(--accent-strong));border-radius:999px;height:100%;transition:width .6s}.progress-fill-stage{background:linear-gradient(90deg, #8b6cff, var(--accent-strong))}.mini-progress{flex-direction:column;gap:3px;width:72px;margin-top:6px;display:flex}.mini-progress-track{background:var(--border-strong);border-radius:999px;height:3px;overflow:hidden}.mini-progress-fill{background:var(--accent-strong);border-radius:999px;height:100%;transition:width .6s}.mini-progress-fill-stage{background:#8b6cff}.mini-stepper,.mini-stepper-item{align-items:center;display:flex}.mini-stepper-line{background:var(--border-strong);width:10px;height:1.5px}.stage-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.stage-dot-success{background:var(--success)}.stage-dot-failed{background:var(--failed)}.stage-dot-pending,.stage-dot-canceled{background:var(--ink-faint)}.stage-dot-running{background:var(--accent-strong);animation:1.4s ease-in-out infinite stage-pulse-dot}@keyframes stage-pulse-dot{0%,to{box-shadow:0 0 #4f7cff80}50%{box-shadow:0 0 0 4px #4f7cff00}}.health-row{color:var(--ink-muted);align-items:center;gap:5px;font-size:12px;display:flex}.health-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.health-dot.up{background:var(--success);box-shadow:0 0 0 3px #34d39929}.health-dot.down{background:var(--failed);box-shadow:0 0 0 3px #f8717129}.errors-badge{border-radius:999px;justify-content:center;align-items:center;min-width:20px;height:20px;padding:0 6px;font-size:11px;font-weight:700;display:inline-flex}.errors-zero{color:var(--success);background:#34d39926}.errors-some{color:var(--failed);background:#f8717126}.errors-unknown{color:var(--neutral);cursor:help;background:#8b96b326}.errors-row{color:var(--ink-muted);align-items:center;gap:5px;font-size:12px;display:flex}.errors-card h2{margin-bottom:10px}.errors-load-error{color:var(--failed);font-size:13px}.errors-list{margin:0;padding:0;list-style:none}.errors-item{border-top:1px solid var(--border);padding:9px 0}.errors-item:first-child{border-top:0}.errors-row-link{color:inherit;align-items:center;gap:10px;text-decoration:none;display:flex}.errors-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;font-weight:600;overflow:hidden}.errors-count{flex-shrink:0;font-size:12px}.errors-since{white-space:nowrap;flex-shrink:0;font-size:12px}.errors-culprit{color:var(--ink-muted);text-overflow:ellipsis;white-space:nowrap;margin:4px 0 0;font-size:12px;overflow:hidden}.errors-card-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.errors-card-header h2{margin-bottom:0}.errors-overview-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;display:grid}.errors-card-link{color:inherit;text-decoration:none;transition:border-color .15s;display:block}.errors-card-link:hover{border-color:var(--accent);text-decoration:none}.errors-detail-layout{grid-template-columns:minmax(260px,1fr) minmax(320px,1.4fr);align-items:start;gap:12px;display:grid}@media (max-width:900px){.errors-detail-layout{grid-template-columns:1fr}}.errors-truncated-note{margin-top:10px;font-size:12px}.issue-row{border-top:1px solid var(--border);padding:0}.issue-row:first-child{border-top:0}.issue-row-btn{text-align:left;cursor:pointer;width:100%;color:inherit;font:inherit;background:0 0;border:none;padding:9px 0;display:block}.issue-row-active .issue-row-btn .errors-title{color:var(--accent)}.errors-detail-occurrences{min-height:120px}.occurrence-list{margin:0;padding:0;list-style:none}.occurrence-row{border-top:1px solid var(--border);padding:9px 0}.occurrence-row:first-child{border-top:0}.occurrence-row-top{align-items:center;gap:10px;font-size:12.5px;display:flex}.occurrence-when{flex-shrink:0}.occurrence-toggle{margin-top:6px;padding:3px 10px;font-size:12px}.occurrence-detail{margin-top:8px}.occurrence-tags{color:var(--ink-muted);word-break:break-word;font-size:11.5px}.occurrence-stack{background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius-sm);white-space:pre-wrap;word-break:break-word;max-height:280px;margin:6px 0 0;padding:10px;font-size:11.5px;line-height:1.5;overflow-y:auto}.login-shell{background:radial-gradient(600px 400px at 20% 10%, #4f7cff14, transparent), radial-gradient(500px 400px at 85% 90%, #8b6cff0f, transparent), var(--bg);justify-content:center;align-items:center;min-height:100vh;display:flex}.login-card{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-lg);width:380px;max-width:100%;padding:38px 36px;position:relative;overflow:hidden;box-shadow:0 24px 70px -20px #000000a6}.login-card:before{content:"";background:linear-gradient(90deg, var(--accent), #8b6cff, var(--accent));height:3px;position:absolute;top:0;left:0;right:0}.login-brand{align-items:center;gap:14px;margin-bottom:26px;display:flex}.login-brand-mark{background:linear-gradient(135deg, var(--accent), #8b6cff);color:#fff;width:44px;height:44px;box-shadow:0 0 0 6px var(--accent-soft);border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.login-card h1{letter-spacing:-.01em;margin:0;font-size:18px}.login-tagline{color:var(--ink-faint);margin:3px 0 0;font-size:12px}.login-status-strip{border-top:1px solid var(--border);align-items:center;gap:7px;margin-top:24px;padding-top:18px;display:flex}.login-status-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px}.login-status-dot.success{background:var(--success);animation:2.4s ease-in-out infinite login-dot-pulse}.login-status-dot.running{background:var(--accent-strong);animation:2.4s ease-in-out .3s infinite login-dot-pulse}.login-status-dot.pending{background:var(--pending);animation:2.4s ease-in-out .6s infinite login-dot-pulse}@keyframes login-dot-pulse{0%,to{opacity:.4}50%{opacity:1}}.login-status-strip-label{color:var(--ink-faint);margin-left:4px;font-size:11.5px}.field{margin-bottom:14px}.field label{color:var(--ink-muted);margin-bottom:5px;font-size:12px;font-weight:600;display:block}.field input{border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface-1);width:100%;color:var(--ink);padding:9px 11px;font-size:14px}.field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.btn-primary{border-radius:var(--radius-sm);background:linear-gradient(135deg, var(--accent), #6d5cff);color:#fff;cursor:pointer;border:none;justify-content:center;align-items:center;gap:8px;width:100%;margin-top:6px;padding:10px;font-size:14px;font-weight:700;display:flex}.btn-primary:hover:not(:disabled){filter:brightness(1.08)}.btn-primary:disabled{opacity:.5;cursor:default;filter:none}.btn-spinner{border:2px solid #fff6;border-top-color:#fff;border-radius:50%;flex-shrink:0;width:14px;height:14px;animation:.7s linear infinite btn-spin}@keyframes btn-spin{to{transform:rotate(360deg)}}.login-error{color:var(--failed);border-radius:var(--radius-sm);background:#f871711a;border:1px solid #f8717140;margin-bottom:14px;padding:9px 12px;font-size:13px}.page-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:20px;display:flex}.page-header h1{text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.01em;min-width:0;margin:0;font-size:20px;overflow:hidden}.page-header .btn-ghost{white-space:nowrap;flex-shrink:0}.card{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-lg);margin-bottom:20px;padding:20px 22px;overflow-x:auto}.card h2{color:var(--ink-muted);text-transform:uppercase;letter-spacing:.04em;margin:0 0 14px;font-size:13.5px;font-weight:700}.inline-form{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.inline-form .field{flex:1;min-width:160px;margin-bottom:0}.inline-form .btn-primary{flex-shrink:0;width:auto;margin-top:0;padding:9px 20px}.btn-danger{color:var(--failed);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:1px solid #f871714d;padding:5px 12px;font-size:12px}.btn-danger:hover{background:#f8717114}.form-msg-error{color:var(--failed);margin:8px 0 0;font-size:12.5px}.form-msg-ok{color:var(--success);margin:8px 0 0;font-size:12.5px}.stat-tiles{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:16px;display:grid}.stat-tile{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px 18px}.stat-tile-value{letter-spacing:-.01em;color:var(--ink);font-variant-numeric:proportional-nums;font-size:30px;font-weight:700;line-height:1.1}.stat-tile-success{color:var(--success)}.stat-tile-failed{color:var(--failed)}.stat-tile-running{color:var(--accent-strong)}.stat-tile-label{color:var(--ink-muted);margin-top:4px;font-size:12.5px;font-weight:600}.bh-chart{align-items:flex-end;gap:2px;display:flex}.bh-bar-wrap{outline:none;align-items:flex-end;height:100%;display:flex;position:relative}.bh-bar{border-radius:3px 3px 0 0;transition:filter .1s}.bh-bar-wrap:hover .bh-bar,.bh-bar-wrap:focus-visible .bh-bar{filter:brightness(1.3)}.bh-tooltip{background:var(--surface-3);border:1px solid var(--border-strong);border-radius:var(--radius-sm);white-space:nowrap;opacity:0;pointer-events:none;z-index:5;flex-direction:column;gap:1px;padding:7px 10px;font-size:11px;transition:opacity .1s;display:flex;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);box-shadow:0 8px 20px -6px #00000080}.bh-tooltip strong{color:var(--ink);font-size:12.5px}.bh-tooltip span{color:var(--ink-muted)}.bh-bar-wrap:hover .bh-tooltip,.bh-bar-wrap:focus-visible .bh-tooltip{opacity:1}.btn-header{white-space:nowrap;flex-shrink:0;width:auto;margin-top:0;padding:9px 16px}.row-edit-input{border:1px solid var(--border-strong);border-radius:var(--radius-sm);width:100%;color:var(--ink);background:0 0;padding:4px 8px;font-size:13px}.row-edit-input:focus{border-color:var(--accent);outline:none}.modal-overlay{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:100;background:#04060ca6;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal-card{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius-lg);width:100%;max-width:420px;padding:24px;box-shadow:0 20px 60px #00000080}.modal-card h2{color:var(--ink);margin:0 0 18px;font-size:15px}.modal-actions{justify-content:flex-end;gap:10px;margin-top:4px;display:flex}.modal-actions .btn-primary,.modal-actions .btn-ghost{width:auto;margin-top:0}.in-flight-card{border-color:#4f7cff59}.in-flight-header{justify-content:space-between;align-items:baseline;margin-bottom:12px;display:flex}.in-flight-title{color:var(--ink);text-transform:uppercase;letter-spacing:.04em;font-size:13.5px;font-weight:700}.in-flight-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.in-flight-item{border-top:1px solid var(--border);padding:10px 0}.in-flight-item:first-child{border-top:none;padding-top:0}.in-flight-row{align-items:center;gap:12px;display:flex}.in-flight-project{min-width:110px;font-weight:600}.in-flight-ref{color:var(--ink-muted)}.in-flight-sha{color:var(--ink-faint)}.in-flight-source{text-transform:capitalize}.in-flight-view{flex-shrink:0}.in-flight-commit-title{color:var(--ink-muted);text-overflow:ellipsis;white-space:nowrap;margin:6px 0 0;font-size:13px;overflow:hidden}.in-flight-detail{border-top:1px dashed var(--border);margin-top:14px;padding-top:14px}.in-flight-detail .stage-stepper{margin-bottom:14px}.in-flight-detail .pipeline-progress{max-width:480px;margin-bottom:0}.in-flight-since{margin-left:auto}.pipeline-jobs{flex-direction:column;gap:16px;margin-bottom:22px;display:flex}.job-stage-group{border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden}.job-stage-heading{background:var(--surface-3);border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:10px 14px;display:flex}.job-stage-name{text-transform:uppercase;letter-spacing:.03em;color:var(--ink-muted);font-size:12.5px;font-weight:700}.job-row{border-bottom:1px solid var(--border)}.job-row:last-child{border-bottom:none}.job-row-header{width:100%;color:var(--ink);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:10px;padding:9px 14px;font-size:13.5px;display:flex}.job-row-header:hover{background:var(--surface-1)}.job-caret{color:var(--ink-faint);font-size:11px;transition:transform .15s;display:inline-block}.job-caret-open{transform:rotate(90deg)}.job-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.job-duration{flex-shrink:0;font-size:12.5px}.job-log-panel{padding:0 14px 14px}.job-log{border-radius:var(--radius-sm);border:1px solid var(--border);color:#b9c2d6;max-height:340px;font-family:var(--font-mono);white-space:pre-wrap;word-break:break-word;background:#05070c;margin:0 0 8px;padding:12px 14px;font-size:12px;line-height:1.5;overflow:auto}.job-gitlab-link{font-size:12.5px}.btn-retry{border-radius:var(--radius-sm);color:var(--failed);cursor:pointer;background:#f871711a;border:1px solid #f8717166;flex-shrink:0;margin-left:auto;padding:4px 12px;font-size:12px;font-weight:700}.btn-retry:hover:not(:disabled){background:#f871712e}.btn-retry:disabled{opacity:.6;cursor:default}.job-retry-error{margin:0;padding:4px 14px 8px;font-size:12px}.retry-pipeline-row{align-items:center;gap:12px;margin-bottom:14px;display:flex}.retry-pipeline-row .btn-retry{margin-left:0;padding:8px 16px;font-size:13px}.token-status-btn{border-radius:var(--radius-sm);border:1px solid var(--border-strong);color:var(--ink-muted);font-size:12px;font-family:var(--font-mono);cursor:pointer;white-space:nowrap;background:0 0;padding:4px 10px}.token-status-btn:hover{border-color:var(--accent);color:var(--ink)}.api-key-cell{white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.api-key-cell code{color:var(--ink-muted);font-size:12px}.api-key-cell .btn-ghost{padding:3px 8px;font-size:11px}.projects-card-list,.dashboard-card-list,.pipeline-card-list{display:none}@media (max-width:768px){.app-shell{flex-direction:column}.sidebar{border-right:none;border-top:1px solid var(--border);width:100%;height:auto;padding:4px 0;padding-bottom:max(4px, env(safe-area-inset-bottom));z-index:50;position:fixed;inset:auto 0 0}.sidebar-brand,.nav-desktop-only{display:none}.sidebar-nav{flex-direction:row;justify-content:space-around;display:flex}.sidebar-link{text-align:center;flex-direction:column;align-items:center;gap:3px;margin:0;padding:6px 4px;font-size:10.5px}.app-content{padding:18px 14px 84px}.topbar-pad{padding:14px 14px 0}.page-header{flex-wrap:wrap;row-gap:10px}.stat-tiles{gap:10px}.modal-card{padding:18px}.in-flight-row{flex-wrap:wrap;row-gap:6px}.in-flight-source{display:none}.in-flight-since,.in-flight-view{margin-left:0}.projects-table-wrap{display:none}.projects-card-list{flex-direction:column;gap:10px;display:flex}.project-card-item{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px 16px}.project-card-top{justify-content:space-between;align-items:center;gap:10px;display:flex}.project-card-name{color:var(--ink);font-size:15px;font-weight:700}.project-card-meta{color:var(--ink-muted);align-items:center;gap:12px;margin-top:6px;font-size:12.5px;display:flex}.project-card-actions{border-top:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;margin-top:12px;padding-top:12px;display:flex}.dashboard-table-wrap{display:none}.dashboard-card-list{flex-direction:column;gap:10px;display:flex}.dash-card-item{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-lg);color:inherit;padding:14px 16px;text-decoration:none;display:block}.dash-card-top{justify-content:space-between;align-items:center;gap:10px;display:flex}.dash-card-name{color:var(--ink);font-size:15px;font-weight:700}.dash-card-meta{color:var(--ink-muted);align-items:center;gap:12px;margin-top:6px;font-size:12.5px;display:flex}.pipeline-table-wrap{display:none}.pipeline-card-list{flex-direction:column;gap:8px;margin-top:4px;display:flex}.pipeline-card-item{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-md);color:inherit;padding:10px 14px;text-decoration:none;display:block}.pipeline-card-top{justify-content:space-between;align-items:center;gap:10px;display:flex}.pipeline-card-meta{color:var(--ink-muted);align-items:center;gap:12px;margin-top:5px;font-size:12px;display:flex}}
