:root{--ink:#111;--line:#d5d5d5;--muted:#6b6b6b;--bg:#fafafa;--red:#8f1f1f;--warn:#9a6700;--ok:#1a7f37}*{box-sizing:border-box;margin:0}body{color:var(--ink);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,sans-serif;line-height:1.5}.shell{max-width:64rem;margin:0 auto;padding:3rem 1.5rem}.layout{grid-template-columns:19rem minmax(0,1fr);align-items:start;gap:1.5rem;display:grid}@media (width<=48rem){.layout{grid-template-columns:1fr}}.masthead{border-bottom:2px solid var(--ink);align-items:baseline;gap:.75rem;margin-bottom:2rem;padding-bottom:.75rem;display:flex}.masthead h1{letter-spacing:.08em;font-size:1.25rem}.masthead span{color:var(--muted);text-transform:uppercase;letter-spacing:.12em;font-size:.85rem}.steps{border:1px solid var(--line);background:#fff;margin:0;padding:0;list-style:none}@media (width<=48rem){.steps{margin-bottom:.5rem}}.steps li{border-bottom:1px solid var(--line);color:var(--muted);gap:.9rem;padding:.7rem 1rem;display:flex}.steps li:last-child{border-bottom:none}.steps li.active{color:var(--ink);border-left:3px solid var(--ink);padding-left:calc(1rem - 3px)}.steps li.done{color:var(--ink)}.steps li.done .title:after{content:" ✓";color:var(--ok);font-weight:600}.steps .num{font-variant-numeric:tabular-nums;text-align:right;flex-shrink:0;width:1.25rem}.steps .title{display:block}.steps .hint{color:var(--muted);font-size:.8rem;display:block}.panel{border:1px solid var(--line);background:#fff;padding:1.5rem}.panel h2{text-transform:uppercase;letter-spacing:.06em;margin-bottom:1rem;font-size:1rem}.panel.alert{border-color:var(--ink)}.kv{grid-template-columns:max-content 1fr;gap:.35rem 1.5rem;margin-bottom:1rem;display:grid}.kv dt{color:var(--muted)}.kv dd{font-variant-numeric:tabular-nums}.muted{color:var(--muted);font-size:.9rem}.danger{color:var(--red);margin:.5rem 0;font-size:.9rem}.warning{color:var(--warn);align-items:flex-start;gap:.6rem;margin:.5rem 0 .75rem;font-size:.9rem;display:flex}.warning svg{flex-shrink:0;width:1.15rem;height:1.15rem;margin-top:.15rem}button{font:inherit;background:var(--ink);color:#fff;border:1px solid var(--ink);cursor:pointer;letter-spacing:.03em;border-radius:8px;margin-top:.75rem;padding:.55rem 1.4rem;font-weight:500;transition:background-color .15s,border-color .15s,box-shadow .15s,transform 50ms;box-shadow:0 1px 2px #00000014}button:hover:not(:disabled){background:#2b2b2b;border-color:#2b2b2b;box-shadow:0 2px 6px #00000024}button:active:not(:disabled){transform:translateY(1px);box-shadow:0 1px 2px #0000001a}button:focus-visible{outline:2px solid var(--ink);outline-offset:2px}button:disabled{background:var(--line);border-color:var(--line);color:#fff;cursor:not-allowed;box-shadow:none}.form{flex-direction:column;gap:.75rem;margin-top:1rem;display:flex}.form label{color:var(--muted);flex-direction:column;gap:.25rem;font-size:.85rem;display:flex}input[type=text],input[type=password],input:not([type]){font:inherit;border:1px solid var(--line);color:var(--ink);background:#fff;padding:.5rem .7rem}input:focus{border-color:var(--ink);outline:none}.confirm{align-items:center;gap:.5rem;margin:1rem 0 .25rem;display:flex}.keys{flex-direction:column;gap:.4rem;margin:1rem 0;padding-left:1.5rem;display:flex}.key-row{align-items:center;gap:.6rem;display:flex}.key-row code{flex:1;min-width:0}button.copy{color:var(--ink);border:1px solid var(--line);min-width:5.2rem;box-shadow:none;background:#fff;border-radius:6px;flex-shrink:0;margin-top:0;padding:.2rem .7rem;font-size:.8rem}button.copy:hover:not(:disabled){border-color:var(--ink);background:#fff;box-shadow:0 1px 3px #00000014}.keys code,code{background:var(--bg);border:1px solid var(--line);word-break:break-all;padding:.15rem .4rem;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.85rem}.report{flex-direction:column;gap:.3rem;margin:.75rem 0;padding-left:1.25rem;display:flex}.checks{border-collapse:collapse;width:100%;margin:1rem 0;font-size:.9rem}.checks th,.checks td{border:1px solid var(--line);text-align:left;vertical-align:top;padding:.45rem .7rem}.checks th{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-size:.75rem}.checks tr.bad td{color:var(--red)}.checks tr.ok td:last-child{color:var(--ok);font-weight:600}.shell.admin .masthead .logout,.shell.admin .masthead .reset-link{align-self:center;margin-top:0;padding:.35rem 1rem;font-size:.9rem}.shell.admin .masthead .reset-link{color:var(--red);margin-left:auto}.shell.admin .masthead .reset-link:hover:not(:disabled){border-color:var(--red)}.panel.narrow{max-width:24rem;margin:4rem auto 0}.panel.wide{max-width:none}.panel+.panel{margin-top:1rem}.row{align-items:center;gap:.75rem;display:flex}.row.spread{justify-content:space-between}.row.end{justify-content:flex-end}.modal-overlay{z-index:10;background:#00000073;justify-content:center;align-items:center;padding:1.5rem;display:flex;position:fixed;inset:0}.modal{border:1px solid var(--ink);background:#fff;width:100%;max-width:28rem;padding:1.5rem;box-shadow:0 12px 40px #00000040}.modal p{margin-bottom:.5rem}.reset-steps{flex-direction:column;gap:.6rem;margin:.75rem 0;padding-left:1.4rem;display:flex}.reset-progress{flex-direction:column;gap:.9rem;margin:1.25rem 0;padding:0;list-style:none;display:flex}.reset-progress li{color:var(--muted);align-items:flex-start;gap:.75rem;display:flex}.reset-progress li.running,.reset-progress li.done,.reset-progress li.skipped,.reset-progress li.error{color:var(--ink)}.reset-progress .mark{border:2px solid var(--line);border-radius:50%;flex-shrink:0;place-items:center;width:1.15rem;height:1.15rem;margin-top:.15rem;font-size:.7rem;font-weight:700;line-height:1;display:grid}.reset-progress li.running .mark{border-top-color:var(--ink);animation:.8s linear infinite markspin}.reset-progress li.done .mark{border-color:var(--ok);color:var(--ok)}.reset-progress li.done .mark:after{content:"✓"}.reset-progress li.skipped .mark:after{content:"–"}.reset-progress li.error .mark{border-color:var(--red);color:var(--red)}.reset-progress li.error .mark:after{content:"✕"}.reset-progress .label{font-weight:600;display:block}.reset-progress .detail{color:var(--muted);font-size:.85rem;display:block}@keyframes markspin{to{transform:rotate(360deg)}}button.ghost{color:var(--ink);border:1px solid var(--line);box-shadow:none;background:#fff}button.ghost:hover:not(:disabled){border-color:var(--ink);background:#fff;box-shadow:0 1px 3px #00000014}button.accent{background:#e69500;border-color:#e69500}button.accent:hover:not(:disabled){background:#cf8600;border-color:#cf8600}button.accent:focus-visible{outline-color:#cf8600}button.danger-btn{background:#d64545;border-color:#d64545}button.danger-btn:hover:not(:disabled){background:#c13a3a;border-color:#c13a3a}button.danger-btn:focus-visible{outline-color:#c13a3a}.badge{border-radius:999px;padding:.2rem .7rem;font-size:.85rem;font-weight:600;display:inline-block}.badge.success{color:#1c7c39;background:#d9f2df}.badge.partial{color:#9a6210;background:#fdeecf}.badge.failed{color:#c22047;background:#fadbe1}.badge.running{color:#2456c2;background:#dbe8fa}.badge.stopped{color:#666;background:#e8e8e8}.nextrun{color:#a06a00;background:#fff2d8;border-radius:8px;padding:.35rem .8rem;font-weight:600}.crumbs{color:#777;align-items:center;gap:.5rem;margin-bottom:.75rem;display:flex}.crumbs a{cursor:pointer;color:#2456c2;text-decoration:none}.crumbs a:hover{text-decoration:underline}.filters{gap:1rem;margin:.75rem 0 1rem;display:flex}.filters label{color:#666;flex-direction:column;gap:.25rem;font-size:.85rem;display:flex}.filters input,.filters select{font:inherit;border:1px solid #ccc;border-radius:6px;padding:.4rem .6rem}table.runs{border-collapse:collapse;width:100%}table.runs th,table.runs td{text-align:left;border-bottom:1px solid #eee;padding:.55rem .75rem}table.runs th{text-transform:uppercase;letter-spacing:.03em;color:#888;font-size:.8rem}table.runs a{cursor:pointer;color:#2456c2;text-decoration:underline}.entries-count{font-weight:600}.live{color:#2456c2;margin-left:.4rem}.live .dot{background:#2456c2;border-radius:50%;width:.5rem;height:.5rem;margin-right:.25rem;animation:1.2s infinite livepulse;display:inline-block}@keyframes livepulse{0%,to{opacity:1}50%{opacity:.3}}.log{flex-direction:column;gap:.45rem;display:flex}.log-entry{align-items:baseline;gap:.6rem;display:flex}.log-entry .ts{color:#888;background:0 0;padding:0}.level{border:1px solid;border-radius:6px;padding:.05rem .5rem;font-size:.72rem;font-weight:700}.level.info{color:#2456c2;background:#f0f5ff;border-color:#2456c2}.level.warn{color:#9a6210;background:#fdf6ea;border-color:#9a6210}.level.error{color:#c22047;background:#fff0f3;border-color:#c22047}pre.result{background:#f6f6f6;border:1px solid #eee;border-radius:8px;margin:.5rem 0 0 6rem;padding:.9rem 1.1rem;overflow-x:auto}.topnav{align-self:center;gap:1.75rem;margin-left:auto;display:flex}.topnav a{color:var(--muted);text-transform:uppercase;letter-spacing:.12em;border-bottom:2px solid #0000;padding-bottom:.15rem;font-size:.85rem;text-decoration:none}.topnav a:hover{color:var(--ink);border-bottom-color:var(--ink)}.health{background:var(--line);border:1px solid var(--line);grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));gap:1px;margin:1.25rem 0 1rem;display:grid}.health>div{background:#fff;padding:.85rem 1rem}.health dt{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:.35rem;font-size:.75rem}.health dd{flex-wrap:wrap;align-items:center;gap:.5rem;font-size:1.05rem;font-weight:600;display:flex}.health dd .badge{font-size:.8rem}.health dd .when{color:var(--muted);font-size:.85rem;font-weight:400}.health dd .muted{font-weight:400}.source{margin-top:.75rem;font-size:.8rem}.source code{font-size:.78rem}@media (width<=34rem){.topnav{gap:1.1rem}}.shell.admin{max-width:84rem}.topnav a{cursor:pointer}.topnav a.active{color:var(--ink);border-bottom-color:var(--ink)}.shell.admin .masthead .topnav{margin-left:1.5rem;margin-right:auto}.shell.admin .masthead .logout{margin-left:0}table.runs td{white-space:nowrap}table.runs td.wrap{white-space:normal;word-break:break-word;min-width:18rem}table.runs td.num{font-variant-numeric:tabular-nums}table.runs code{white-space:nowrap;word-break:normal;font-size:.8rem}table.runs td.url{white-space:normal}table.runs td.url code{white-space:normal;word-break:break-all}.pager{margin-top:.75rem}.pager button{margin-top:0;padding:.35rem 1rem;font-size:.9rem}.row .badge{margin-left:.5rem}.row button{margin-top:0}.row.actions{flex-wrap:wrap;align-items:flex-end;margin-top:1rem}.row.actions .filters{margin:0}.row.actions .filters input{border-radius:8px;padding:.5rem .6rem}.filters form{display:contents}.filters .apply{align-self:flex-end;margin-top:0;padding:.4rem 1rem}
