:root[data-theme=dark]{--color-succeeded:#22c55e;--color-failed:#ef4444;--color-running:#f59e0b;--color-pending:#94a3b8;--color-background:#0f172a;--color-surface:#1e293b;--color-surface-elevated:#273449;--color-border:#334155;--color-text-primary:#f1f5f9;--color-text-secondary:#94a3b8;--color-text-muted:#64748b;--color-accent:#3b82f6;--color-accent-hover:#2563eb}:root[data-theme=light]{--color-succeeded:#15803d;--color-failed:#dc2626;--color-running:#b45309;--color-pending:#64748b;--color-background:#f8fafc;--color-surface:#fff;--color-surface-elevated:#f1f5f9;--color-border:#e2e8f0;--color-text-primary:#0f172a;--color-text-secondary:#475569;--color-text-muted:#94a3b8;--color-accent:#2563eb;--color-accent-hover:#1d4ed8}.dashboard{background-color:var(--color-background);min-height:100vh;color:var(--color-text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.dashboard__header{border-bottom:1px solid var(--color-border);background-color:var(--color-surface);justify-content:space-between;align-items:center;padding:1.5rem 2rem;display:flex}.dashboard__header h1{margin:0;font-size:1.5rem;font-weight:700}.dashboard__meta{color:var(--color-text-secondary);align-items:center;gap:1rem;font-size:.875rem;display:flex}.dashboard__ws-status{border-radius:50%;flex-shrink:0;width:8px;height:8px;display:inline-block}.dashboard__ws-status--connected{background-color:var(--color-succeeded)}.dashboard__ws-status--connecting{background-color:var(--color-running);animation:1.5s ease-in-out infinite pulse}.dashboard__ws-status--disconnected{background-color:var(--color-pending)}.dashboard__notify-btn{color:var(--color-text-secondary);border:1px solid var(--color-border);cursor:pointer;background-color:#0000;border-radius:.375rem;padding:.5rem 1rem;font-size:.875rem;transition:border-color .15s,color .15s}.dashboard__notify-btn:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-text-primary)}.dashboard__notify-btn:disabled{opacity:.5;cursor:not-allowed}.dashboard__refresh-btn{background-color:var(--color-accent);color:#fff;cursor:pointer;border:none;border-radius:.375rem;padding:.5rem 1rem;font-size:.875rem;transition:background-color .15s}.dashboard__refresh-btn:hover{background-color:var(--color-accent-hover)}.dashboard__refresh-btn:disabled{opacity:.6;cursor:not-allowed}.dashboard__theme-btn{cursor:pointer;background-color:#0000;border:none;border-radius:.375rem;padding:.5rem 1rem;font-size:1.125rem;line-height:1;transition:background-color .15s}.dashboard__theme-btn:hover{background-color:var(--color-surface-elevated)}.dashboard__filters{border-bottom:1px solid var(--color-border);background-color:var(--color-surface);flex-wrap:wrap;align-items:center;gap:1rem;padding:1rem 2rem;display:flex}@media (width<=640px){.dashboard__filters{gap:.75rem;padding:.75rem 1rem}}.dashboard__filter-group{flex-wrap:wrap;gap:.5rem;display:flex}.dashboard__filter-btn{color:var(--color-text-secondary);border:1px solid var(--color-border);cursor:pointer;background-color:#0000;border-radius:.375rem;padding:.25rem .75rem;font-size:.875rem;transition:border-color .15s,color .15s,background-color .15s}.dashboard__filter-btn:hover{border-color:var(--color-accent);color:var(--color-text-primary)}.dashboard__filter-btn--active{background-color:var(--color-accent);border-color:var(--color-accent);color:#fff}.dashboard__filter-btn--active:hover{background-color:var(--color-accent-hover);border-color:var(--color-accent-hover);color:#fff}.dashboard__search-wrapper{flex:1;align-items:center;min-width:160px;max-width:320px;display:flex;position:relative}.dashboard__search-input{background-color:var(--color-background);width:100%;color:var(--color-text-primary);border:1px solid var(--color-border);border-radius:.375rem;padding:.25rem 1.75rem .25rem .75rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:.875rem;transition:border-color .15s}.dashboard__search-input::placeholder{color:var(--color-text-muted)}.dashboard__search-input:focus{border-color:var(--color-accent);outline:none}.dashboard__search-clear{color:var(--color-text-muted);cursor:pointer;background:0 0;border:none;padding:0 .25rem;font-size:1.125rem;line-height:1;transition:color .15s;position:absolute;right:.5rem}.dashboard__search-clear:hover{color:var(--color-text-primary)}.dashboard__filter-count{color:var(--color-text-muted);white-space:nowrap;margin-left:auto;font-size:.75rem}@media (width<=640px){.dashboard__filter-count{margin-left:0}}.dashboard__grid{grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:1.5rem;padding:2rem;display:grid}@media (width<=640px){.dashboard__grid{grid-template-columns:1fr;padding:1rem}}.dashboard__loading,.dashboard__error,.dashboard__empty{min-height:40vh;color:var(--color-text-secondary);flex-direction:column;justify-content:center;align-items:center;gap:1rem;font-size:1.125rem;display:flex}.dashboard__error{color:var(--color-failed)}.dashboard__retry-btn{background-color:var(--color-accent);color:#fff;cursor:pointer;border:none;border-radius:.375rem;padding:.5rem 1.25rem;font-size:.875rem;transition:background-color .15s}.dashboard__retry-btn:hover{background-color:var(--color-accent-hover)}.toast-container{z-index:100;pointer-events:none;flex-direction:column;gap:.75rem;display:flex;position:fixed;bottom:1.5rem;right:1.5rem}.toast{pointer-events:auto;border-radius:.375rem;justify-content:space-between;align-items:center;gap:1rem;max-width:360px;padding:.75rem 1rem;font-size:.875rem;animation:.2s ease-out toast-in;display:flex;box-shadow:0 4px 12px #0000004d}.toast__message{flex:1}.toast__dismiss{color:inherit;opacity:.7;cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:0;font-size:1.125rem;line-height:1}.toast__dismiss:hover{opacity:1}.toast--error{background-color:color-mix(in srgb, var(--color-failed) 20%, var(--color-surface));color:var(--color-text-primary);border:1px solid var(--color-failed)}.toast--info{background-color:color-mix(in srgb, var(--color-accent) 20%, var(--color-surface));color:var(--color-text-primary);border:1px solid var(--color-accent)}.toast--success{background-color:color-mix(in srgb, var(--color-succeeded) 20%, var(--color-surface));color:var(--color-text-primary);border:1px solid var(--color-succeeded)}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.error-boundary{background-color:var(--color-background);min-height:100vh;color:var(--color-text-primary);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:1rem;padding:2rem;display:flex}.error-boundary h2{margin:0;font-size:1.5rem;font-weight:700}.error-boundary p{color:var(--color-text-secondary);margin:0}.error-boundary__refresh-btn{background-color:var(--color-accent);color:#fff;cursor:pointer;border:none;border-radius:.375rem;padding:.75rem 1.5rem;font-size:1rem;transition:background-color .15s}.error-boundary__refresh-btn:hover{background-color:var(--color-accent-hover)}.error-boundary__details{background-color:var(--color-surface);border:1px solid var(--color-border);color:var(--color-failed);text-align:left;white-space:pre-wrap;word-break:break-all;border-radius:.375rem;max-width:800px;margin-top:1rem;padding:1rem;font-family:SF Mono,Fira Code,Fira Mono,monospace;font-size:.75rem;overflow:auto}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-shimmer{background:linear-gradient(90deg, var(--color-surface-elevated) 25%, var(--color-border) 50%, var(--color-surface-elevated) 75%);background-size:200% 100%;border-radius:.375rem;animation:1.5s ease-in-out infinite shimmer}.dashboard__empty-state{text-align:center;min-height:40vh;color:var(--color-text-secondary);flex-direction:column;justify-content:center;align-items:center;gap:1rem;padding:2rem;display:flex}.dashboard__empty-state svg{width:4rem;height:4rem;color:var(--color-text-muted)}.dashboard__empty-state h3{color:var(--color-text-primary);margin:0;font-size:1.125rem;font-weight:600}.dashboard__empty-state p{max-width:320px;margin:0;font-size:.875rem}.project-card{background-color:var(--color-surface);border:1px solid var(--color-border);cursor:pointer;border-radius:.75rem;flex-direction:column;transition:border-color .2s,transform .2s;display:flex;overflow:hidden}.project-card:hover{border-color:var(--color-accent);transform:translateY(-2px)}.project-card--succeeded{border-left:4px solid var(--color-succeeded)}.project-card--failed{border-left:4px solid var(--color-failed)}.project-card--running{border-left:4px solid var(--color-running)}.project-card--pending,.project-card--unknown{border-left:4px solid var(--color-pending)}.project-card__header{justify-content:space-between;align-items:flex-start;gap:.75rem;padding:1.25rem 1.25rem .75rem;display:flex}.project-card__name{color:var(--color-text-primary);word-break:break-word;margin:0;font-size:1.125rem;font-weight:600}.project-card__status-badge{text-transform:uppercase;letter-spacing:.05em;border-radius:9999px;flex-shrink:0;padding:.25rem .75rem;font-size:.75rem;font-weight:700}.project-card__status-badge--succeeded{background-color:color-mix(in srgb, var(--color-succeeded) 15%, transparent);color:var(--color-succeeded)}.project-card__status-badge--failed{background-color:color-mix(in srgb, var(--color-failed) 15%, transparent);color:var(--color-failed)}.project-card__status-badge--running{background-color:color-mix(in srgb, var(--color-running) 15%, transparent);color:var(--color-running)}.project-card__status-badge--pending,.project-card__status-badge--unknown{background-color:color-mix(in srgb, var(--color-pending) 15%, transparent);color:var(--color-pending)}.project-card__body{flex:1;padding:0 1.25rem 1.25rem}.project-card__no-build{color:var(--color-text-muted);font-size:.875rem;font-style:italic}.project-card__meta-row{flex-wrap:wrap;gap:.75rem 1.25rem;margin-top:.75rem;display:flex}.project-card__meta-item{flex-direction:column;gap:.25rem;display:flex}.project-card__meta-item .label{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.75rem}.project-card__meta-item .value{color:var(--color-text-secondary);font-family:SF Mono,Fira Code,Fira Mono,monospace;font-size:.875rem}.project-card__footer{border-top:1px solid var(--color-border);background-color:var(--color-surface-elevated);color:var(--color-text-muted);justify-content:space-between;align-items:center;padding:.75rem 1.25rem;font-size:.75rem;display:flex}.project-card__trend{align-items:center;gap:.25rem;font-size:.75rem;font-weight:500;display:inline-flex}.project-card__trend--faster{color:var(--color-succeeded)}.project-card__trend--slower{color:var(--color-failed)}.project-card__trend-badge{border-radius:9999px;align-items:center;margin-top:.5rem;padding:2px .5rem;font-family:SF Mono,Fira Code,Fira Mono,monospace;font-size:.75rem;font-weight:600;display:inline-flex}.project-card__trend-badge--faster{background-color:color-mix(in srgb, var(--color-succeeded) 15%, transparent);color:var(--color-succeeded)}.project-card__trend-badge--slower{background-color:color-mix(in srgb, var(--color-failed) 15%, transparent);color:var(--color-failed)}.project-card__history-link{color:var(--color-accent);cursor:pointer;background:0 0;border:none;padding:0;font-size:.75rem;text-decoration:underline}.project-card__history-link:hover{color:var(--color-accent-hover)}.project-card__issue-pills{flex-wrap:wrap;gap:.5rem;margin-top:.75rem;display:flex}.project-card--skeleton{cursor:default;pointer-events:none}.project-card--skeleton:hover{border-color:var(--color-border);transform:none}.project-card__trend-tooltip-wrapper{display:inline-flex;position:relative}.project-card__trend-tooltip-wrapper:after{content:attr(data-tooltip);background-color:var(--color-surface-elevated);color:var(--color-text-primary);border:1px solid var(--color-border);white-space:nowrap;z-index:10;opacity:0;pointer-events:none;border-radius:.375rem;padding:.5rem .75rem;font-size:.75rem;transition:opacity .15s;position:absolute;bottom:calc(100% + .5rem);left:50%;transform:translate(-50%)}.project-card__trend-tooltip-wrapper:hover:after{opacity:1}.issue-chip{white-space:nowrap;border-radius:9999px;align-items:center;gap:.25rem;padding:2px .5rem;font-size:.75rem;font-weight:600;display:inline-flex}.issue-chip--error{background-color:color-mix(in srgb, var(--color-failed) 15%, transparent);color:var(--color-failed)}.issue-chip--test{color:#f97316;background-color:#f9731626}.issue-chip--warning{background-color:color-mix(in srgb, var(--color-running) 15%, transparent);color:var(--color-running)}.issue-chip--analyzer{background-color:color-mix(in srgb, var(--color-text-secondary) 15%, transparent);color:var(--color-text-secondary)}.issue-chips{flex-shrink:0;gap:.25rem;display:flex}.build-history{background-color:var(--color-surface);border:1px solid var(--color-border);border-radius:.75rem;overflow:hidden}.build-history__header{border-bottom:1px solid var(--color-border);background-color:var(--color-surface-elevated);justify-content:space-between;align-items:flex-start;padding:1rem 1.5rem;display:flex}.build-history__header h2{margin:0;font-size:1.125rem;font-weight:600}.build-history__header-title{flex-direction:column;gap:.5rem;min-width:0;display:flex}.build-history__stats{flex-wrap:wrap;gap:.75rem 1.25rem;display:flex}.build-history__stats-item{align-items:center;gap:.25rem;display:flex}.build-history__stats-item .label{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.75rem}.build-history__stats-item .value{color:var(--color-text-secondary);font-family:SF Mono,Fira Code,Fira Mono,monospace;font-size:.75rem;font-weight:600}.build-history__close-btn{color:var(--color-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:.375rem;padding:.25rem;font-size:1.25rem;line-height:1;transition:color .15s}.build-history__close-btn:hover{color:var(--color-text-primary)}.build-history__loading,.build-history__error,.build-history__empty{text-align:center;color:var(--color-text-secondary);padding:2rem}.build-history__error{color:var(--color-failed)}.build-history__list{margin:0;padding:0;list-style:none}.build-history__item{border-bottom:1px solid var(--color-border);cursor:pointer;align-items:center;gap:1rem;padding:1rem 1.5rem;transition:background-color .15s;display:flex}.build-history__item:last-child{border-bottom:none}.build-history__item:hover{background-color:var(--color-surface-elevated)}.build-history__build-number{color:var(--color-text-muted);flex-shrink:0;min-width:3rem;font-family:SF Mono,Fira Code,Fira Mono,monospace;font-size:.875rem}.build-history__status{flex-shrink:0}.build-history__info{flex:1;min-width:0}.build-history__info .workflow{color:var(--color-text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:.875rem;font-weight:500;overflow:hidden}.build-history__info .branch{color:var(--color-text-muted);font-family:SF Mono,Fira Code,Fira Mono,monospace;font-size:.75rem}.build-history__author{color:var(--color-text-secondary);flex-shrink:0;font-size:.75rem}.build-history__duration{color:var(--color-text-secondary);text-align:right;flex-shrink:0;min-width:4rem;font-family:SF Mono,Fira Code,Fira Mono,monospace;font-size:.75rem}.build-history__time{color:var(--color-text-muted);text-align:right;flex-shrink:0;font-size:.75rem}.build-actions{border-top:1px solid var(--color-border);background-color:var(--color-background)}.build-actions__header{cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;padding:.75rem 1.5rem;display:flex}.build-actions__header:hover{background-color:var(--color-surface)}.build-actions__header h3{margin:0;font-size:1rem;font-weight:600}.build-actions__toggle{color:var(--color-text-secondary);font-size:.875rem}.build-actions__loading,.build-actions__error{color:var(--color-text-secondary);padding:1rem 1.5rem;font-size:.875rem}.build-actions__error{color:var(--color-failed)}.build-actions__list{margin:0;padding:0 1.5rem 1rem;list-style:none}.build-actions__item{border-bottom:1px solid var(--color-border);align-items:center;gap:.75rem;padding:.5rem 0;display:flex}.build-actions__item:last-child{border-bottom:none}.build-actions__action-name{color:var(--color-text-primary);flex:1;font-size:.875rem}.build-actions__action-type{color:var(--color-text-muted);font-family:SF Mono,Fira Code,Fira Mono,monospace;font-size:.75rem}.build-actions__required{color:var(--color-text-muted);font-size:.75rem;font-style:italic}.status-dot{border-radius:50%;flex-shrink:0;width:10px;height:10px;display:inline-block}.status-dot--succeeded{background-color:var(--color-succeeded)}.status-dot--failed{background-color:var(--color-failed)}.status-dot--running{background-color:var(--color-running);animation:1.5s ease-in-out infinite pulse}.status-dot--pending,.status-dot--unknown{background-color:var(--color-pending)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.live-timer{animation:2s ease-in-out infinite live-pulse}@keyframes live-pulse{0%,to{opacity:1}50%{opacity:.6}}.history-modal{z-index:50;background-color:#000000b3;justify-content:center;align-items:flex-start;padding:2rem 1rem;display:flex;position:fixed;inset:0;overflow-y:auto}.history-modal__content{width:100%;max-width:800px}.history-modal__drag-handle{background-color:var(--color-border);border-radius:9999px;width:40px;height:4px;margin:.75rem auto .5rem;display:none}@media (width<=640px){.history-modal{align-items:flex-end;padding:0}.history-modal__content{border-radius:.75rem .75rem 0 0;max-width:100%;max-height:85vh;animation:.25s ease-out slide-up;overflow-y:auto}.history-modal__drag-handle{display:block}}@keyframes slide-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}*,:before,:after{box-sizing:border-box}html,body{background-color:var(--color-background);color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:1rem;line-height:1.5}#root{min-height:100vh}
