@import "https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;600;700;800;900&display=swap";
:root{--bg:#f4f6fb;--bg-elevated:#fff;--surface:#fff;--surface-soft:#f8faff;--surface-strong:#fff;--border:#e6eaf2;--border-strong:#d2d9e6;--text:#0d1729;--text-mid:#3f4a60;--text-muted:#6b7588;--text-dim:#98a2b3;--primary:#1d4ed8;--primary-hover:#1742ac;--primary-soft:#eaf0ff;--primary-strong:#2563eb;--primary-glow:#2563eb2e;--accent:#f59e0b;--accent-soft:#fff5e1;--success:#16a34a;--success-soft:#e6f7ec;--error:#dc2626;--error-soft:#fdecec;--warn:#d97706;--warn-soft:#fef3c7;--info:#2563eb;--info-soft:#e7efff;--shadow-sm:0 1px 2px #0f172a0a;--shadow-md:0 8px 24px #0f172a0f;--shadow-lg:0 24px 60px #0f172a14;--shadow-glow:0 0 0 4px var(--primary-glow);--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--radius-xl:20px;--noto-kr:"Noto Sans KR", "Noto Sans CJK KR", "Noto Sans", sans-serif;--mono:var(--noto-kr);--sans:var(--noto-kr)}*{box-sizing:border-box;margin:0;padding:0}html,body{min-height:100%}body{color:var(--text);background:var(--bg);font-family:var(--sans);font-feature-settings:"ss01", "cv11";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;letter-spacing:-.01em;background-image:radial-gradient(900px 400px at 8% -10%,#2563eb0f,#0000 60%),radial-gradient(700px 380px at 100% 0,#f59e0b0d,#0000 55%);background-attachment:fixed}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button,select{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}input,select,textarea{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);height:40px;padding:0 14px;transition:border-color .15s,box-shadow .15s}input::placeholder{color:var(--text-dim)}input:hover,select:hover,textarea:hover{border-color:var(--border-strong)}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{border-color:var(--primary);box-shadow:var(--shadow-glow);outline:none}::selection{background:var(--primary-soft);color:var(--primary)}*{scrollbar-width:thin;scrollbar-color:#0f172a2e transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#0f172a2e padding-box content-box;border:2px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#0f172a47 padding-box content-box}.btn,.btn-primary,.btn-ghost,.btn-icon{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);height:38px;color:var(--text);letter-spacing:-.005em;cursor:pointer;justify-content:center;align-items:center;gap:8px;padding:0 16px;font-size:13px;font-weight:600;transition:border-color .15s,background .15s,color .15s,transform .1s,box-shadow .15s;display:inline-flex}.btn:hover,.btn-ghost:hover{border-color:var(--border-strong);background:var(--surface-soft)}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff;box-shadow:0 6px 18px #2563eb38}.btn-primary:hover{background:var(--primary-hover);border-color:var(--primary-hover);transform:translateY(-1px)}.btn-icon{width:38px;color:var(--text-mid);padding:0}.btn-icon svg{opacity:.7;display:block}.btn-svg-icon{opacity:.68;display:block}.btn-primary .btn-svg-icon{opacity:.95}.btn-icon:hover{color:var(--primary);border-color:var(--primary);background:var(--primary-soft)}.btn-icon[aria-busy=true] svg,.btn-icon[data-spinning=true] svg{animation:.9s linear infinite spin}.btn-ghost{color:var(--text-mid);background:0 0;border-color:#0000}.btn-ghost:hover{color:var(--text);background:var(--surface-soft);border-color:var(--border)}.status-badge{letter-spacing:.01em;border-radius:999px;align-items:center;gap:6px;height:24px;padding:0 10px;font-size:11.5px;font-weight:700;display:inline-flex}.status-badge:before{content:"";border-radius:50%;flex-shrink:0;width:7px;height:7px}.status-badge.success{background:var(--success-soft);color:var(--success)}.status-badge.success:before{background:var(--success)}.status-badge.error{background:var(--error-soft);color:var(--error)}.status-badge.error:before{background:var(--error)}.status-badge.cancelled{color:var(--text-muted);background:#eef1f6}.status-badge.cancelled:before{background:var(--text-dim)}.status-badge.running{background:var(--primary-soft);color:var(--primary)}.status-badge.running:before{background:var(--primary);box-shadow:0 0 0 0 var(--primary-glow);animation:1.6s ease-in-out infinite pulse}.status-badge.warn{background:var(--warn-soft);color:var(--warn)}.status-badge.warn:before{background:var(--warn)}.status-badge.pending,.status-badge.neutral{color:var(--text-muted);background:#eef1f6}.status-badge.pending:before,.status-badge.neutral:before{background:var(--text-dim)}@keyframes pulse{0%,to{box-shadow:0 0 0 0 var(--primary-glow)}50%{box-shadow:0 0 0 6px #2563eb00}}@keyframes shimmer{0%{background-position:-120% 0}to{background-position:220% 0}}@keyframes spin{to{transform:rotate(360deg)}}.eyebrow{color:var(--primary);font-family:var(--mono);letter-spacing:.18em;text-transform:uppercase;align-items:center;gap:8px;font-size:11.5px;font-weight:700;display:inline-flex}.eyebrow:before{content:"";background:currentColor;width:16px;height:1px}.mono{font-family:var(--mono)}.muted{color:var(--text-muted)}.app-shell{grid-template-columns:248px minmax(0,1fr);min-height:100vh;display:grid}.sidebar{border-right:1px solid var(--border);background:var(--surface);flex-direction:column;align-self:start;height:100vh;padding:22px 14px;display:flex;position:sticky;top:0}.sidebar .brand{letter-spacing:-.02em;align-items:center;gap:11px;padding:6px 8px 22px;font-size:15px;font-weight:700;display:flex}.brand-mark{width:25px;height:25x;border-radius:6px;display:inline-block;overflow:hidden}.brand-mark img{object-fit:cover;width:100%;height:100%;display:block}.repo-switch{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-soft);margin:0 -2px 16px;padding:12px 14px}.repo-switch small{color:var(--text-dim);font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;font-size:10.5px}.repo-switch strong{word-break:break-all;margin-top:4px;font-size:13px;font-weight:600;display:block}.repo-switch .branch{font-family:var(--mono);color:var(--text-muted);align-items:center;gap:6px;margin-top:8px;font-size:11px;display:inline-flex}.side-section-label{color:var(--text-dim);font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;margin:18px 12px 6px;font-size:10.5px;display:block}.side-nav{gap:2px;display:grid}.side-nav a{border-radius:var(--radius-sm);height:38px;color:var(--text-mid);grid-template-columns:20px 1fr auto;align-items:center;gap:12px;padding:0 12px;font-size:13.5px;font-weight:500;transition:background .15s,color .15s;display:grid;position:relative}.side-nav a:hover{background:var(--surface-soft);color:var(--text)}.side-nav a.active{background:var(--primary-soft);color:var(--primary);font-weight:600}.nav-icon{opacity:.62}.side-nav a.active .nav-icon{opacity:.9;filter:invert(29%)sepia(88%)saturate(2311%)hue-rotate(215deg)brightness(91%)contrast(91%)}.side-nav a.active:before{content:"";background:var(--primary);border-radius:2px;width:3px;height:16px;position:absolute;left:-14px}.side-nav a span:first-child{place-items:center;font-size:14px;display:inline-grid}.side-nav a kbd{border:1px solid var(--border);background:var(--bg);min-width:22px;height:18px;color:var(--text-dim);font-family:var(--mono);border-radius:4px;place-items:center;padding:0 5px;font-size:10px;display:inline-grid}.side-footer{border-top:1px solid var(--border);gap:6px;margin-top:auto;padding-top:14px;display:grid}.side-footer a{border-radius:var(--radius-sm);color:var(--text-muted);align-items:center;gap:8px;padding:8px 10px;font-size:13px;display:flex}.side-footer a:hover{color:var(--text);background:var(--surface-soft)}.user-chip{grid-template-columns:32px minmax(0,1fr) auto;align-items:center;gap:10px;margin-top:4px;padding:10px 8px;display:grid}.user-chip .avatar{color:#fff;background:linear-gradient(135deg,#2563eb,#f59e0b);border-radius:50%;place-items:center;width:32px;height:32px;font-size:13px;font-weight:800;display:grid;overflow:hidden}.user-chip .avatar-img{background:var(--surface-soft);object-fit:cover}.user-chip-meta{min-width:0}.user-chip-meta strong{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;display:block;overflow:hidden}.user-chip-meta small{color:var(--text-muted);font-size:11px}.user-chip-logout button{width:30px;height:30px;color:var(--text-dim)}.user-chip-logout button:hover{color:var(--error);border-color:var(--error);background:var(--error-soft)}.app-main{flex-direction:column;min-width:0;min-height:100vh;display:flex}.app-topbar{z-index:10;border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(16px);background:#ffffffdb;justify-content:space-between;align-items:center;gap:24px;height:64px;padding:0 clamp(24px,4vw,40px);display:flex;position:sticky;top:0}.crumbs{color:var(--text-muted);align-items:center;gap:10px;font-size:13px;font-weight:500;display:flex}.crumbs strong{color:var(--text);font-weight:600}.crumbs span{color:var(--text-dim)}.crumbs a:hover{color:var(--primary)}.topbar-actions{align-items:center;gap:10px;display:flex}.live-pill{border:1px solid var(--border);background:var(--surface);height:30px;color:var(--text-mid);font-family:var(--mono);letter-spacing:.02em;border-radius:999px;align-items:center;gap:8px;padding:0 12px;font-size:11.5px;font-weight:600;transition:border-color .15s,color .15s;display:inline-flex}.live-pill:before{content:"";background:var(--success);border-radius:50%;width:7px;height:7px;animation:1.6s ease-in-out infinite pulse-live;box-shadow:0 0 #16a34a52}.live-pill[data-state=stale]:before{background:var(--text-dim);animation:none}@keyframes pulse-live{0%,to{box-shadow:0 0 #16a34a66}50%{box-shadow:0 0 0 6px #16a34a00}}.page{flex:1;align-content:start;gap:28px;padding:clamp(28px,4vw,48px);display:grid}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:24px;display:flex}.page-header h1{letter-spacing:-.025em;margin-top:8px;font-size:clamp(26px,2.6vw,32px);font-weight:700}.page-header .subtitle{color:var(--text-muted);max-width:600px;margin-top:8px;font-size:14px}.page-header .actions{align-items:center;gap:10px;display:flex}.stats-grid{grid-template-columns:repeat(4,1fr);gap:14px;display:grid}.stat-tile{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-sm);padding:20px 22px;transition:border-color .18s,transform .18s,box-shadow .18s;position:relative;overflow:hidden}.stat-tile:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-1px)}.stat-tile:after{content:"";opacity:.55;height:2px;color:var(--primary);background:linear-gradient(90deg,#0000,currentColor,#0000);position:absolute;inset:0 0 auto}.stat-tile.success:after{color:var(--success)}.stat-tile.error:after{color:var(--error)}.stat-tile.running:after{color:var(--primary)}.stat-tile.warn:after{color:var(--warn)}.stat-tile .label{color:var(--text-muted);letter-spacing:.04em;text-transform:uppercase;align-items:center;gap:8px;font-size:11.5px;font-weight:700;display:flex}.stat-tile .value{font-family:var(--mono);letter-spacing:-.02em;color:var(--text);margin-top:12px;font-size:32px;font-weight:600}.stat-tile .delta{color:var(--text-muted);align-items:center;gap:6px;margin-top:6px;padding-left:16px;font-size:12px;display:inline-flex}.stat-tile .delta.up{color:var(--success)}.stat-tile .delta.down{color:var(--error)}.stat-tile .icon-blob{background:var(--surface-soft);width:30px;height:30px;color:var(--text-muted);border-radius:9px;place-items:center;font-size:14px;display:grid;position:absolute;top:16px;right:16px}.stat-tile .icon-blob svg{opacity:.85;display:block}.stat-tile.success .icon-blob{color:var(--success)}.stat-tile.error .icon-blob{color:var(--error)}.stat-tile.running .icon-blob{color:var(--primary)}.stat-tile.warn .icon-blob{color:var(--warn)}.panel{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-sm);padding:24px}.panel-head{justify-content:space-between;align-items:center;gap:16px;margin-bottom:20px;display:flex}.panel-head h2{letter-spacing:-.005em;font-size:15px;font-weight:600}.panel-head .legend{color:var(--text-muted);gap:14px;font-size:11.5px;font-weight:500;display:flex}.panel-head .legend span{align-items:center;gap:6px;display:inline-flex}.panel-head .legend span:before{content:"";background:currentColor;border-radius:999px;width:14px;height:2px}.legend .success-dot{color:var(--success)}.legend .error-dot{color:var(--error)}.legend .running-dot{color:var(--primary)}.dashboard-grid{grid-template-columns:minmax(0,1.45fr) minmax(0,1fr);gap:18px;display:grid}.trend-chart{width:100%;height:280px;position:relative}.trend-chart canvas{display:block}.recent-list{gap:4px;display:grid}.recent-list a{border-radius:var(--radius-sm);grid-template-columns:8px minmax(0,1fr) auto auto;align-items:center;gap:14px;padding:12px;transition:background .15s;display:grid}.recent-list a:hover{background:var(--surface-soft)}.recent-list .bullet{background:var(--text-dim);border-radius:50%;width:8px;height:8px}.recent-list .bullet.success{background:var(--success)}.recent-list .bullet.error{background:var(--error)}.recent-list .bullet.cancelled{background:var(--text-dim)}.recent-list .bullet.running{background:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);animation:1.6s ease-in-out infinite pulse}.recent-list .meta{gap:3px;min-width:0;display:grid}.recent-list .meta strong{white-space:nowrap;text-overflow:ellipsis;font-size:13.5px;font-weight:600;overflow:hidden}.recent-list .meta small{font-family:var(--mono);color:var(--text-muted);font-size:11.5px}.recent-list time{color:var(--text-muted);font-size:12px;font-family:var(--mono)}.repo-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;display:grid}.repo-card{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-sm);gap:12px;padding:22px;transition:border-color .18s,transform .18s,box-shadow .18s;display:grid}.repo-card:hover{border-color:var(--primary);box-shadow:var(--shadow-md);transform:translateY(-1px)}.repo-card .repo-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.repo-card .repo-name{gap:4px;min-width:0;display:grid}.repo-card .repo-name strong{letter-spacing:-.01em;white-space:nowrap;text-overflow:ellipsis;font-size:15px;font-weight:600;overflow:hidden}.repo-card .repo-name small{color:var(--text-muted);font-family:var(--mono);font-size:11.5px}.repo-card .description{color:var(--text-muted);-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;min-height:40px;font-size:13px;line-height:1.55;display:-webkit-box;overflow:hidden}.repo-card .meta-row{border-top:1px solid var(--border);color:var(--text-muted);font-size:12px;font-family:var(--mono);flex-wrap:wrap;gap:14px;margin-top:auto;padding-top:12px;display:flex}.repo-card .meta-row span{align-items:center;gap:6px;display:inline-flex}.toolbar{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.toolbar input,.toolbar select{min-width:160px;height:38px;font-size:13px}.toolbar input[type=search]{min-width:240px;padding-left:36px}.toolbar .search{align-items:center;display:inline-flex;position:relative}.toolbar .search .search-icon{color:var(--text-muted);opacity:.65;pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.table-wrap{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-sm);overflow:hidden}table{border-collapse:collapse;width:100%;font-size:13px}thead th{text-align:left;background:var(--surface-soft);border-bottom:1px solid var(--border);color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;padding:14px 18px;font-size:11px;font-weight:700}tbody td{border-bottom:1px solid var(--border);color:var(--text);vertical-align:middle;padding:14px 18px}tbody tr:last-child td{border-bottom:0}tbody tr{transition:background .15s}tbody tr:hover{background:var(--surface-soft)}tbody td a{color:var(--primary);font-family:var(--mono);font-size:12.5px;font-weight:600}tbody td a:hover{color:var(--primary-hover);text-decoration:underline}tbody td.mono,tbody td .mono{font-family:var(--mono);color:var(--text-mid);font-size:12.5px}.empty-state{text-align:center;color:var(--text-muted);border:1px dashed var(--border);border-radius:var(--radius-lg);background:var(--surface);justify-items:center;gap:8px;padding:56px 32px;display:grid}.empty-state strong{color:var(--text);font-size:15px;font-weight:600}.banner-error{border-radius:var(--radius-md);color:var(--error);background:#fff5f5;border:1px solid #fcd5d5;padding:14px 18px;font-size:13px}.banner-error strong{margin-bottom:4px;font-weight:700;display:block}.pagination{flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;margin-top:4px;display:flex}.pagination button,.pagination a,.pagination span{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);min-width:36px;height:36px;color:var(--text-muted);font-family:var(--mono);place-items:center;padding:0 10px;font-size:12.5px;display:grid}.pagination button:hover,.pagination a:hover{color:var(--primary);border-color:var(--primary)}.pagination svg{opacity:.55;display:block}.pagination a:hover svg{opacity:.95;color:var(--primary)}.pagination button:disabled{background:var(--surface-soft);color:var(--text-dim)}.pagination .active{background:var(--primary);border-color:var(--primary);color:#fff}.pagination .ellipsis{background:0 0;border-color:#0000}.pagination .pagination-summary{width:100%;height:auto;color:var(--text-muted);font-family:var(--sans);background:0 0;border:0;margin-bottom:4px}.detail-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.detail-header .crumbs{font-family:var(--mono);font-size:12px}.detail-grid{grid-template-columns:minmax(280px,.85fr) minmax(0,1.35fr);gap:18px;display:grid}.info-panel,.steps-panel,.log-panel{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-sm);padding:26px}.info-panel{grid-area:1/1/auto/-1}.steps-panel{flex-direction:column;grid-area:2/1;height:clamp(420px,100vh - 260px,720px);display:flex;overflow:hidden}.log-panel{grid-area:2/2}.info-panel h2,.steps-panel h2,.log-panel h2{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin-bottom:18px;font-size:12.5px;font-weight:700}.info-panel-grid{grid-template-columns:minmax(280px,.9fr) minmax(360px,1.1fr);align-items:start;gap:32px;display:grid}.run-summary,.run-detail{min-width:0}.panel-title-row{justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px;display:flex}.panel-title-row h2{margin:0}.step-filter-reset{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft);height:28px;color:var(--text-muted);padding:0 10px;font-size:11.5px;font-weight:600}.step-filter-reset:hover{border-color:var(--primary);color:var(--primary)}.run-title{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:8px;display:flex}.run-title h1{font-family:var(--mono);letter-spacing:-.02em;font-size:30px;font-weight:600}.run-subtitle{color:var(--text);margin-bottom:18px;font-size:15px;font-weight:600}.repo-meta{border-bottom:1px solid var(--border);font-family:var(--mono);color:var(--text-muted);flex-wrap:wrap;gap:10px;padding-bottom:18px;font-size:12px;display:flex}.run-summary .repo-meta{border-bottom:0;padding-bottom:0}.repo-meta span{background:var(--surface-soft);border-radius:6px;align-items:center;gap:6px;padding:4px 10px;display:inline-flex}.repo-meta svg{opacity:.55;display:block}.run-insights{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:28px;display:grid}.run-insights>div{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft);gap:6px;padding:12px 14px;display:grid}.run-insights span{color:var(--text-muted);letter-spacing:.04em;font-size:11px;font-weight:700}.run-insights strong{color:var(--text);font-family:var(--mono);font-size:16px;font-weight:700}.run-progress{gap:10px;margin-top:18px;display:grid}.run-progress-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.run-progress-head span{color:var(--text-muted);letter-spacing:.04em;font-size:11.5px;font-weight:700}.run-progress-head strong{color:var(--text);font-family:var(--mono);font-size:20px;font-weight:700}.run-progress-track{background:var(--surface-soft);border:1px solid #16a34a2e;border-radius:999px;height:12px;overflow:hidden}.run-progress-track span{border-radius:inherit;background:linear-gradient(90deg, var(--success), #22c55e);min-width:0;height:100%;transition:width .25s;display:block}.run-progress-track.error{border-color:#dc262633}.run-progress-track.error span{background:linear-gradient(90deg, var(--error), #f97316)}.detail-list{gap:10px;display:grid}.detail-list>div{border-radius:var(--radius-sm);background:var(--surface-soft);justify-content:space-between;align-items:center;gap:16px;padding:11px 14px;display:flex}.detail-list dt{color:var(--text-muted);letter-spacing:.04em;text-transform:uppercase;align-items:center;gap:6px;font-size:11.5px;font-weight:700;display:inline-flex}.detail-list dt svg{opacity:.55;display:block}.detail-list dd{text-align:right;font-size:13px;font-weight:600;font-family:var(--mono);color:var(--text);word-break:break-all}.step-list{overscroll-behavior:contain;flex:1;align-content:start;gap:6px;min-height:0;padding-right:4px;list-style:none;display:grid;position:relative;overflow:auto}.step-list:before{content:"";background:var(--border);border-radius:2px;width:2px;position:absolute;top:22px;bottom:22px;left:0}.step-list li{border-radius:var(--radius-md);border:1px solid #0000;transition:background .15s,border-color .15s;position:relative}.step-list li button{text-align:left;background:0 0;border:0;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:14px;width:100%;padding:12px 14px;display:grid}.step-list li.active{background:var(--primary-soft);border-color:var(--primary);box-shadow:0 0 0 3px #2563eb14}.step-list li.error{background:var(--error-soft);border-color:var(--error)}.step-list li.cancelled{border-color:var(--border-strong);background:#eef1f6}.step-list li.selected{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb14}.step-list .step-dot{z-index:1;background:var(--surface);border:2px solid var(--border);width:28px;height:28px;color:var(--text-muted);font-family:var(--mono);border-radius:50%;place-items:center;font-size:11px;font-weight:700;display:grid;position:relative}.step-list .done .step-dot{background:var(--success);border-color:var(--success);color:#fff;font-size:18px;font-weight:900;line-height:1}.step-list .done .step-dot svg{color:#fff;display:block}.step-list .active .step-dot{background:var(--primary);border-color:var(--primary);color:#fff;box-shadow:0 0 0 4px #2563eb33}.step-list .active .step-dot:after{content:"";border:2px solid #ffffff8c;border-top-color:#fff;border-radius:50%;width:12px;height:12px;animation:.9s linear infinite spin}.step-list .error .step-dot{background:var(--error);border-color:var(--error);color:#fff;font-size:17px;font-weight:900;line-height:1}.step-list .cancelled .step-dot{background:var(--text-dim);border-color:var(--text-dim);color:#fff;font-size:15px;font-weight:900;line-height:1}.step-list .step-body{gap:4px;min-width:0;display:grid}.step-list .step-body strong{color:var(--text);font-size:13.5px;font-weight:600}.step-list li:not(.done):not(.active):not(.error):not(.cancelled) .step-body strong{color:var(--text-muted)}.step-list .step-body small{color:var(--text-muted);font-size:11.5px;font-family:var(--mono)}.step-list time{color:var(--text-mid);font-family:var(--mono);font-size:11.5px}.step-list .active time{color:var(--primary);font-weight:600}.log-panel{background:#0c1220;border-color:#0c1220;flex-direction:column;height:clamp(420px,100vh - 260px,720px);padding:0;display:flex;overflow:hidden;box-shadow:0 8px 28px #0f172a2e}.log-head{border-bottom:1px solid #ffffff0d;justify-content:space-between;align-items:center;gap:10px;padding:16px 22px;display:flex}.log-head h2{color:#ffffff80;margin:0}.log-head span:not(.status-badge){color:#ffffffb8;margin-top:4px;font-size:12px;font-weight:600;display:block}.log-stream{font-family:var(--mono);color:#d2dde8;white-space:pre;overscroll-behavior:contain;scrollbar-color:#94a3b88c #ffffff0f;flex:1;min-height:0;padding:16px 22px 22px;font-size:12.5px;line-height:1.65;overflow:auto}.log-stream .line{grid-template-columns:76px 1fr;gap:14px;min-width:max-content;padding:1px 0;display:grid}.log-stream .text{white-space:pre;min-width:0}.log-stream .ts{color:#ffffff5c}.log-stream .line.success .text{color:#6ee7b7}.log-stream .line.error .text{color:#fca5a5}.log-stream .line.warn .text{color:#fcd34d}.log-stream .line.info .text{color:#93c5fd}.alert-list{gap:12px;display:grid}.alert-card{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);grid-template-columns:4px 38px minmax(0,1fr) auto;align-items:center;gap:18px;padding:16px 20px;transition:border-color .15s,transform .15s,box-shadow .15s;display:grid}.alert-card:before{content:"";background:var(--text-dim);border-radius:999px;width:4px;height:32px}.alert-card.success:before{background:var(--success)}.alert-card.error:before{background:var(--error)}.alert-card.running:before{background:var(--primary)}.alert-card.warn:before{background:var(--warn)}.alert-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-1px)}.alert-card .icon{background:var(--surface-soft);width:38px;height:38px;color:var(--text-mid);border-radius:10px;place-items:center;font-size:16px;display:grid}.alert-card .body{gap:4px;display:grid}.alert-card strong{font-size:14px;font-weight:600}.alert-card p{color:var(--text-muted);font-size:13px;line-height:1.5}.alert-card time{color:var(--text-muted);font-family:var(--mono);font-size:12px}.job-detail-grid{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:18px;display:grid}.muted-copy{color:var(--text-mid);font-size:14px;line-height:1.7}.inline-action{align-items:center;gap:8px;height:42px;margin-top:22px;padding:0 18px;display:inline-flex}.settings-section{gap:14px;display:grid}.settings-section h2{letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);font-size:12.5px;font-weight:700}.settings-section h2+p{color:var(--text-muted);margin-top:-6px;font-size:13px}.swatches{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;display:grid}.swatch{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);gap:8px;padding:14px;font-size:11.5px;display:grid}.swatch .chip{border-radius:var(--radius-sm);border:1px solid var(--border);height:56px}.swatch strong{font-size:12.5px;font-weight:600}.swatch small{color:var(--text-muted);font-family:var(--mono);font-size:11px}.component-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.kbd-row{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm);grid-template-columns:1fr auto;align-items:center;gap:12px;padding:14px 16px;display:grid}.kbd-row strong{font-size:13px;font-weight:600}.kbd-row small{color:var(--text-muted);font-size:12px}.kbd-row kbd{border:1px solid var(--border);background:var(--surface-soft);min-width:26px;height:22px;font-family:var(--mono);color:var(--text);border-radius:5px;place-items:center;padding:0 6px;font-size:11px;display:inline-grid}.landing{place-items:center;min-height:100vh;padding:40px 24px;display:grid}.landing-card{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);width:min(420px,100%);box-shadow:var(--shadow-md);text-align:center;gap:16px;padding:32px;display:grid}.landing-brand-mark{border-radius:12px;justify-self:center;width:44px;height:44px}.landing-title{letter-spacing:-.02em;font-size:22px;font-weight:700}.landing-subtitle{color:var(--text-muted);font-size:14px;line-height:1.65}.landing-hint{border-radius:var(--radius-sm);background:var(--surface-soft);border:1px solid var(--border);color:var(--text);padding:10px 14px;font-size:12.5px;display:inline-block}.login-cta{justify-self:center;min-width:150px;height:42px;padding:0 22px;font-size:13.5px}.login-cta[aria-disabled=true]{pointer-events:none;opacity:.86;transform:none}.login-error{border-radius:var(--radius-sm);background:var(--error-soft);color:var(--error);padding:10px 14px;font-size:12.5px;line-height:1.6}.login-button-spinner,.login-loading-spinner{border:2px solid;border-right-color:#0000;border-radius:999px;animation:.75s linear infinite spin;display:inline-block}.login-button-spinner{width:14px;height:14px}.login-loading-overlay{z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0d17297a;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.login-loading-overlay-static{background:#0d17298f}.login-loading-panel{border-radius:var(--radius-md);min-height:54px;color:var(--text);box-shadow:var(--shadow-lg);background:#fffffff0;border:1px solid #ffffff47;align-items:center;gap:12px;padding:0 18px;font-size:14px;font-weight:700;display:inline-flex}.login-loading-spinner{width:20px;height:20px;color:var(--primary)}@media (max-width:1100px){.stats-grid{grid-template-columns:repeat(2,1fr)}.dashboard-grid,.detail-grid,.job-detail-grid{grid-template-columns:1fr}.steps-panel,.info-panel,.log-panel{grid-area:auto/1}.info-panel-grid{grid-template-columns:1fr}.run-insights{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:760px){.app-shell{grid-template-columns:1fr}.sidebar{border-right:0;border-bottom:1px solid var(--border);height:auto;position:static}.side-nav{grid-auto-columns:max-content;grid-auto-flow:column;gap:6px;padding-bottom:4px;overflow-x:auto}.side-nav a{grid-template-columns:auto auto}.side-nav a kbd,.side-nav a.active:before,.side-footer,.repo-switch,.side-section-label{display:none}.stats-grid{grid-template-columns:1fr}.toolbar input[type=search]{width:100%;min-width:0}.run-insights{grid-template-columns:1fr}.page-header{flex-direction:column;align-items:flex-start}.alert-card{grid-template-columns:4px 36px 1fr}.alert-card time{grid-column:2/-1}}
