:root{--paper: #f6f3ee;--ink: #14171a;--ink-secondary: #3e434a;--ink-muted: #595e66;--panel: #eae6dd;--panel-raised: #fffdf9;--line: #d5d0c5;--line-strong: #bdb6a7;--accent: #0f766e;--accent-hover: #0b5c56;--accent-soft: #d8efe9;--accent-border: #99d5c9;--success: #166534;--success-soft: #dcfce7;--fail: #b91c1c;--fail-soft: #fee2e2;--skip: #b45309;--skip-soft: #ffedd5;--rail-w: 236px;--top-h: 60px;--run-h: 68px;--font: "Public Sans", -apple-system, BlinkMacSystemFont, sans-serif;--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--radius: 8px;--shadow-sm: 0 1px 2px rgba(20, 23, 26, .05);--shadow: 0 2px 4px rgba(20, 23, 26, .05), 0 10px 28px rgba(20, 23, 26, .06);--ease: .18s cubic-bezier(.16, 1, .3, 1)}*,*:before,*:after{box-sizing:border-box}::selection{background:var(--accent-soft);color:var(--ink)}html,body,#root{height:100%;margin:0}body{font-family:var(--font);background:var(--paper);color:var(--ink);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;caret-color:var(--accent)}*{scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}*::-webkit-scrollbar{width:7px;height:7px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:var(--line-strong);border-radius:999px}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--accent);text-underline-offset:3px}h1,h2,h3{margin:0 0 .4rem;font-weight:700;letter-spacing:-.02em;text-wrap:balance}h1{font-size:1.5rem;line-height:1.25}h2{font-size:1.05rem;line-height:1.3}h3{font-size:.925rem}p{margin:0 0 1rem;color:var(--ink-muted);max-width:68ch}code{font-family:var(--mono);font-size:.8125rem;background:var(--panel);padding:.12rem .38rem;border-radius:4px;color:var(--ink)}.mono{font-family:var(--mono)}.tabular{font-variant-numeric:tabular-nums}.sr-only,.sr-live{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.app-shell{display:grid;grid-template-columns:var(--rail-w) minmax(0,1fr);grid-template-rows:var(--top-h) 1fr auto;height:100%;min-height:100vh}.rail{grid-row:1 / -1;background:var(--ink);color:#f3efe7;padding:1.25rem .85rem;display:flex;flex-direction:column;justify-content:space-between;gap:1.5rem;border-right:1px solid rgba(255,255,255,.06)}.rail-top{display:flex;flex-direction:column;gap:1.5rem}.rail-brand{padding:.25rem .65rem;display:flex;align-items:center;gap:.65rem}.rail-logo{width:32px;height:32px;border-radius:8px;background:var(--accent);color:#fff;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 2px 8px #0f766e66}.rail-brand-text{font-weight:700;font-size:.98rem;letter-spacing:-.015em;line-height:1.2}.rail-brand-text span{display:block;font-weight:400;font-size:.72rem;color:#9da4ae;margin-top:.18rem;letter-spacing:0}.rail nav{display:flex;flex-direction:column;gap:.2rem}.rail a{display:flex;align-items:center;justify-content:space-between;gap:.65rem;padding:.6rem .75rem;border-radius:6px;color:#c5cad0;text-decoration:none;font-weight:500;transition:background var(--ease),color var(--ease)}.rail a .nav-label{display:inline-flex;align-items:center;gap:.6rem}.rail a .nav-count{font-family:var(--mono);font-size:.7rem;font-variant-numeric:tabular-nums;padding:.08rem .4rem;border-radius:999px;background:#ffffff14;color:#d5d9de}.rail a:hover,.rail a:focus-visible{background:#ffffff14;color:#fff;outline:none}.rail a.active{background:var(--accent);color:#fff;font-weight:600}.rail a.active .nav-count{background:#ffffff38;color:#fff}.rail-footer{padding:.75rem .65rem .25rem;border-top:1px solid rgba(255,255,255,.08);font-size:.75rem;color:#9da4ae;display:flex;flex-direction:column;gap:.5rem}.rail-footer-status{display:flex;align-items:center;gap:.45rem}.status-dot{width:8px;height:8px;border-radius:999px;background:#22c55e;flex-shrink:0}.status-dot.warn{background:#f59e0b}.topbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:0 1.5rem;border-bottom:1px solid var(--line);background:var(--panel-raised)}.topbar-left{display:flex;align-items:center;gap:.65rem;min-width:0;flex-wrap:wrap}.topbar-right{display:flex;align-items:center;gap:.75rem}.env-switcher-group{display:inline-flex;align-items:center;gap:.5rem}.env-quick-select{height:34px;padding:0 2rem 0 .7rem;border:1px solid var(--line);border-radius:6px;background-color:#fff;font-weight:600;font-size:.8125rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23595e66' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .6rem center;cursor:pointer}.env-quick-select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.env-chip{display:inline-flex;align-items:center;gap:.5rem;padding:.32rem .75rem;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-weight:600;font-size:.8125rem;transition:background var(--ease),color var(--ease),box-shadow var(--ease);text-decoration:none;border:1px solid var(--accent-border)}.env-chip.idle{background:var(--panel);color:var(--ink-muted);border-color:var(--line)}.env-chip:hover,.env-chip:focus-visible{box-shadow:0 0 0 2px #0f766e4d;outline:none}.env-chip .host{font-family:var(--mono);font-weight:500;font-size:.75rem;color:var(--ink-secondary);max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.security-pill{display:inline-flex;align-items:center;gap:.38rem;font-size:.75rem;color:var(--ink-muted);padding:.25rem .6rem;border-radius:6px;background:var(--paper);border:1px solid var(--line)}.stage{overflow:auto;min-width:0;padding:1.35rem 1.75rem 3.5rem}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1.25rem}.page-header h1{margin-bottom:.25rem}.page-header p{margin:0}.header-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.kpi-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.85rem;margin-bottom:1.25rem}.kpi-box{background:var(--panel-raised);border:1px solid var(--line);border-radius:var(--radius);padding:.85rem 1rem;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:.2rem}.kpi-label{font-size:.75rem;color:var(--ink-muted);font-weight:600}.kpi-value{font-size:1.35rem;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em;color:var(--ink)}.kpi-sub{font-size:.75rem;color:var(--ink-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.run-bar{display:flex;align-items:center;flex-wrap:wrap;gap:.65rem .85rem;min-height:var(--run-h);padding:.45rem 1.5rem;border-top:1px solid var(--line);background:var(--panel-raised);box-shadow:0 -4px 16px #14171a0a}.run-bar select,.run-bar .run-select{min-width:220px;height:38px;padding:0 2rem 0 .75rem;border:1px solid var(--line);border-radius:6px;background-color:#fff;font-weight:500;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23595e66' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center}.run-bar select:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}.run-bar .run-writes{display:inline-flex;align-items:center;gap:.42rem;font-size:.8125rem;font-weight:500;color:var(--ink-secondary);white-space:nowrap;cursor:pointer;padding:.35rem .55rem;border-radius:6px;transition:background var(--ease)}.run-bar .run-writes:hover{background:var(--panel)}.run-bar .run-writes input{accent-color:var(--accent);width:.95rem;height:.95rem;margin:0}.run-bar .run-cls{display:inline-flex;align-items:center;gap:.35rem;min-height:38px}.run-bar .run-cls-budget{display:inline-flex;align-items:center;gap:.35rem}.run-bar .run-cls-select{min-width:11.5rem;height:34px;padding:0 1.75rem 0 .6rem;font-size:.78rem}.run-bar .run-cls-custom{width:4.4rem;height:34px;padding:0 .45rem;border:1px solid var(--line);border-radius:6px;background:#fff;font-family:var(--mono);font-size:.78rem;font-variant-numeric:tabular-nums}.run-bar .run-cls-custom:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}.run-bar .btn-primary:active:not(:disabled){transform:scale(.97)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.42rem;padding:.52rem .95rem;border-radius:6px;border:1px solid transparent;font-weight:600;font-size:.84rem;cursor:pointer;white-space:nowrap;transition:background var(--ease),border-color var(--ease),color var(--ease),opacity var(--ease),transform .16s ease-out}.btn:active:not(:disabled){transform:scale(.97)}.btn-sm{padding:.32rem .65rem;font-size:.78rem;min-height:36px}.btn:disabled{opacity:.45;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-ghost{background:var(--panel-raised);border-color:var(--line);color:var(--ink)}.btn-ghost:hover:not(:disabled){background:var(--panel);border-color:var(--line-strong)}.btn-danger{background:transparent;border-color:#fecaca;color:var(--fail)}.btn-danger:hover:not(:disabled){background:var(--fail-soft)}.panel{background:var(--panel-raised);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.panel-pad{padding:1.25rem}.table-wrap{overflow-x:auto;max-width:100%}.table{width:100%;border-collapse:collapse}.env-action-row{display:inline-grid;grid-template-columns:5.6rem 3.15rem 4.15rem;justify-content:end;align-items:center;gap:.35rem}.env-action-row .btn{width:100%}.env-action-slot{display:block}.table th.env-actions,.table td.env-actions{width:1%;white-space:nowrap;text-align:right;vertical-align:middle}.env-url{min-width:0;max-width:36ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-secondary)}.env-meta{margin-top:.2rem;font-size:.75rem;color:var(--ink-secondary)}.sandbox-section{margin-top:2rem}.sandbox-section h2{margin-bottom:.35rem}.sandbox-section>p{margin:0 0 .75rem;font-size:.8125rem;color:var(--ink-secondary)}.sandbox-row-actions{display:inline-flex;align-items:center;flex-shrink:0;gap:.35rem}.table th,.table td{text-align:left;padding:.72rem 1rem;border-bottom:1px solid var(--line);vertical-align:middle}.table tbody tr:last-child td{border-bottom:none}.table th{font-size:.75rem;color:var(--ink-muted);font-weight:600;background:var(--panel)}.table tbody tr.clickable-row{cursor:pointer;transition:background var(--ease)}.table tbody tr.clickable-row:hover{background:#f2efe8}.table tbody tr.selected-row{background:var(--accent-soft)}.field{display:flex;flex-direction:column;gap:.35rem;margin-bottom:1rem}.field label{font-weight:600;font-size:.8125rem;color:var(--ink)}.field-hint{font-size:.75rem;color:var(--ink-muted);margin-top:-.15rem}.field input,.field select,.field textarea{padding:.58rem .75rem;border:1px solid var(--line);border-radius:6px;background:#fff}.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}.field textarea{min-height:190px;font-family:var(--mono);font-size:.8rem;line-height:1.55}.field textarea.textarea-prose{font-family:var(--font);font-size:.875rem}.field-error{font-size:.8125rem;color:var(--fail);margin:0 0 1rem}.field-error a{color:var(--accent)}.field-inline{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#14171a61;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:40;animation:fadeIn var(--ease)}.drawer{position:fixed;top:0;right:0;width:min(460px,100%);height:100%;background:var(--panel-raised);z-index:50;padding:1.5rem;box-shadow:-8px 0 32px #14171a24;overflow:auto;animation:slideIn var(--ease)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(16px);opacity:.6}to{transform:none;opacity:1}}.badge{display:inline-flex;align-items:center;gap:.3rem;padding:.16rem .55rem;border-radius:999px;font-size:.73rem;font-weight:600}.badge-ok{background:var(--success-soft);color:var(--success)}.badge-fail{background:var(--fail-soft);color:var(--fail)}.badge-skip{background:var(--skip-soft);color:var(--skip)}.badge-run{background:var(--accent-soft);color:var(--accent)}.badge-neutral{background:var(--panel);color:var(--ink-secondary)}.empty{text-align:center;padding:2.5rem 1.5rem;color:var(--ink-muted)}.empty h2{color:var(--ink);margin-bottom:.35rem}.empty p{margin-left:auto;margin-right:auto}.progress{height:5px;background:var(--panel);border-radius:999px;overflow:hidden;flex:1}.progress>span{display:block;height:100%;background:var(--accent);width:100%;transform:scaleX(0);transform-origin:left center;transition:transform .22s ease}.progress.running>span{transform:scaleX(.75);animation:pulse 1.2s ease infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.skeleton{background:linear-gradient(90deg,var(--panel) 25%,#f3efe7 50%,var(--panel) 75%);background-size:200% 100%;animation:shimmer 1.2s ease infinite;border-radius:4px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.layout-summary{margin-top:.9rem;padding:.85rem 1rem;background:var(--panel-raised);border:1px solid var(--line);border-radius:var(--radius)}.layout-summary h3{margin:0 0 .35rem;font-size:.8125rem;font-weight:650;color:var(--ink)}.layout-summary[data-tone=fail] h3{color:var(--fail)}.layout-summary[data-tone=ok] h3{color:var(--success)}.layout-summary p{margin:0;color:var(--ink);font-size:.9375rem;line-height:1.5;max-width:72ch}.log-box{background:#14171a;color:#e8e4dc;font-family:var(--mono);font-size:.76rem;line-height:1.55;padding:1rem;border-radius:var(--radius);max-height:340px;overflow:auto;white-space:pre-wrap;margin:0}.runs-layout{display:grid;grid-template-columns:minmax(300px,.38fr) minmax(0,.62fr);gap:1.25rem;align-items:start}.spec-areas{position:sticky;top:0;max-height:calc(100vh - var(--top-h) - var(--run-h) - 3rem);display:flex;flex-direction:column;overflow:hidden}.spec-areas-header{padding:1rem 1rem .85rem;border-bottom:1px solid var(--line);background:var(--panel-raised)}.spec-areas-header h2{margin:0 0 .2rem}.spec-areas-header p{margin:0 0 .65rem;font-size:.8rem}.spec-search{width:100%;padding:.45rem .65rem;border:1px solid var(--line);border-radius:6px;font-size:.8125rem;background:#fff;margin-bottom:.55rem}.spec-search:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}.spec-areas-actions{display:flex;flex-wrap:wrap;gap:.35rem}.spec-areas-body{overflow:auto;padding:.5rem .5rem 1rem;flex:1}.spec-tree,.spec-tree ul{list-style:none;margin:0;padding:0}.spec-row{display:flex;align-items:center;gap:.42rem;min-height:36px;padding:.2rem .5rem;border-radius:6px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background var(--ease)}.spec-row:hover{background:var(--panel)}.spec-row:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.spec-row.selected{background:var(--accent-soft)}.spec-row.selected:hover{background:#c5e8df}.spec-areas-meta{margin-top:.6rem;font-size:.75rem;font-variant-numeric:tabular-nums;color:var(--accent);font-weight:600}.suite-pick-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem}.suite-pick{display:flex;align-items:center;justify-content:space-between;gap:.65rem;width:100%;min-height:44px;padding:.45rem .55rem .45rem .35rem;border:1px solid transparent;border-radius:6px;background:transparent;transition:background var(--ease),border-color var(--ease)}.suite-pick-select{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex:1;min-width:0;text-align:left;border:0;background:transparent;cursor:pointer;font:inherit;color:inherit;padding:.15rem .35rem;border-radius:4px}.suite-pick:hover{background:var(--panel)}.suite-pick-select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.suite-pick.selected{background:var(--accent-soft);border-color:var(--accent-border)}.suite-pick.selected:hover{background:#c5e8df}.suite-pick-main{display:flex;flex-direction:column;gap:.1rem;min-width:0}.suite-pick-main strong{font-weight:600}.suite-pick-meta{font-size:.75rem;color:var(--ink-muted)}.suite-pick-count{flex-shrink:0;font-size:.75rem;color:var(--ink-secondary);font-variant-numeric:tabular-nums}.spec-row.folder .spec-label{font-weight:600}.spec-row.file .spec-label{color:var(--ink-secondary);font-family:var(--mono);font-size:.8rem}.spec-chevron{width:1.1rem;height:1.1rem;border:none;background:transparent;padding:0;cursor:pointer;color:var(--ink-muted);display:inline-flex;align-items:center;justify-content:center;transition:transform .18s ease;flex-shrink:0}.spec-chevron.expanded{transform:rotate(90deg)}.spec-check{width:.95rem;height:.95rem;accent-color:var(--accent);flex-shrink:0}.spec-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.85rem}.spec-count{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:.72rem;color:var(--ink-muted);flex-shrink:0}.run-target-chip{display:inline-flex;align-items:center;gap:.35rem;padding:.42rem .75rem;border-radius:6px;background:var(--accent-soft);color:var(--accent);font-weight:600;font-size:.8125rem;font-variant-numeric:tabular-nums;border:1px solid var(--accent-border)}.template-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:.85rem;margin-top:.75rem}.template-item{background:var(--panel-raised);border:1px solid var(--line);border-radius:var(--radius);padding:1rem;display:flex;flex-direction:column;justify-content:space-between;gap:.75rem;min-width:0}.template-item-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:.5rem}.template-item-head strong{display:block;margin-bottom:4px}.template-item-head .badge{margin-right:.35rem}.template-item .env-url{max-width:none}.template-item-copy{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:0;font-size:.8rem;color:var(--ink-secondary)}.workflow-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.85rem;margin-bottom:1.25rem}.workflow-step{padding:.85rem 1rem;border-radius:var(--radius);border:1px solid var(--line);background:var(--panel-raised)}.workflow-step.active{border-color:var(--accent);background:var(--accent-soft)}.workflow-step h3{margin-bottom:.2rem;font-size:.85rem}.workflow-step p{margin:0;font-size:.78rem}.toast{position:fixed;bottom:calc(var(--run-h) + 1rem);right:1.5rem;background:var(--ink);color:#fff;padding:.65rem .85rem .65rem 1rem;border-radius:8px;z-index:60;max-width:380px;display:flex;align-items:center;gap:.75rem;box-shadow:var(--shadow)}.toast button{border:none;background:transparent;color:#c8ccd1;cursor:pointer;font-size:1.1rem;line-height:1;padding:0 .15rem;flex-shrink:0}.toast button:hover{color:#fff}.login-screen{min-height:100%;display:grid;place-items:center;padding:2rem 1rem;background:var(--paper)}.login-card{width:min(420px,100%);background:var(--panel-raised);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.75rem 1.5rem 1.5rem}.login-card h1{margin-bottom:.35rem}.login-card .btn{width:100%;margin-top:.35rem}.live-browser{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--ink)}.live-browser iframe{display:block;width:100%;height:min(62vh,560px);border:0;background:#111}.live-browser .field-hint{margin:0;padding:.55rem .75rem;background:var(--panel-raised);color:var(--ink)}@media (max-width: 960px){.app-shell{grid-template-columns:1fr}.rail{display:none}.kpi-strip{grid-template-columns:1fr 1fr}.workflow-steps,.runs-layout{grid-template-columns:1fr}.spec-areas{position:static;max-height:360px}}
