:root{--ink: #142033;--ink-2: #44546a;--ink-3: #6b7a8f;--line: #dfe4ec;--line-2: #eef1f6;--bg: #f4f6fa;--panel: #fff;--navy: #14305c;--navy-2: #1d4486;--accent: #2a63d4;--ok: #157347;--ok-bg: #e2f5ea;--bad: #b42318;--bad-bg: #fdeceb;--warn: #8a5a00;--warn-bg: #fff4dc;--muted-bg: #edf0f5;--run: #1f54b3;--run-bg: #e5eefc;--radius: 8px;--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;font:14px/1.5 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink)}*{box-sizing:border-box}body{margin:0;background:var(--bg)}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1{font-size:20px;margin:0}h2{font-size:15px;margin:0 0 12px}h3{font-size:14px;margin:0 0 8px}code,.mono{font-family:var(--mono);font-size:12.5px}.shell{display:grid;grid-template-columns:224px 1fr;min-height:100vh}.side{background:var(--navy);color:#c9d6ee;padding:18px 14px;display:flex;flex-direction:column;gap:4px}.brand{display:flex;align-items:center;gap:10px;color:#fff;font-weight:700;font-size:16px;padding:4px 8px 18px}.brand small{display:block;font-weight:400;font-size:11px;color:#9fb3d6;letter-spacing:.02em}.side a{color:#c9d6ee;padding:8px 10px;border-radius:6px;display:block}.side a.active,.side a:hover{background:#ffffff17;color:#fff;text-decoration:none}.side .spacer{flex:1}.side .who{font-size:12px;padding:10px;border-top:1px solid rgba(255,255,255,.12);color:#9fb3d6}.side .who b{color:#fff;display:block;font-size:13px}.main{padding:26px 32px 60px;min-width:0}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap}.crumbs{font-size:12px;color:var(--ink-3);margin-bottom:4px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;margin-bottom:16px}.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}.stat .k{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3)}.stat .v{font-size:20px;font-weight:700;margin-top:2px}table.t{width:100%;border-collapse:collapse}.t th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);font-weight:600;padding:8px 10px;border-bottom:1px solid var(--line)}.t td{padding:10px;border-bottom:1px solid var(--line-2);vertical-align:top}.t tr:last-child td{border-bottom:0}.t tr.click:hover td{background:#f8fafd;cursor:pointer}.btn{font:inherit;font-weight:600;border:1px solid var(--line);background:#fff;color:var(--ink);padding:7px 14px;border-radius:6px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.btn:hover:not(:disabled){border-color:#b9c3d3;text-decoration:none}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover:not(:disabled){background:#2154bb}.btn.danger{color:var(--bad)}.btn.sm{padding:4px 10px;font-size:12.5px}.btn:disabled{opacity:.5;cursor:not-allowed}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}label.f{display:block;font-weight:600;font-size:12.5px;margin:12px 0 4px}input.i,textarea.i,select.i{font:inherit;width:100%;padding:8px 10px;border:1px solid #cfd6e1;border-radius:6px;background:#fff;color:var(--ink)}textarea.i{min-height:90px;resize:vertical}textarea.code{font-family:var(--mono);font-size:12.5px;min-height:340px}input.i:focus,textarea.i:focus,select.i:focus{outline:2px solid #bcd0f5;border-color:var(--accent)}.hint{font-size:12px;color:var(--ink-3);margin-top:4px}.badge{display:inline-block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:2px 9px;border-radius:999px;background:var(--muted-bg);color:var(--ink-2)}.badge.passed{background:var(--ok-bg);color:var(--ok)}.badge.failed,.badge.error{background:var(--bad-bg);color:var(--bad)}.badge.running,.badge.queued{background:var(--run-bg);color:var(--run)}.tag{display:inline-block;font-size:11.5px;padding:1px 8px;border-radius:4px;background:var(--muted-bg);color:var(--ink-2);margin-right:4px}.alert{padding:10px 14px;border-radius:6px;margin-bottom:14px;font-size:13.5px;border:1px solid}.alert.err{background:var(--bad-bg);border-color:#f5c2bd;color:#7a1a13}.alert.warn{background:var(--warn-bg);border-color:#f1d9a2;color:#5e3e00}.alert.ok{background:var(--ok-bg);border-color:#b5e2c6;color:#0d4d2e}.muted{color:var(--ink-3)}.small{font-size:12.5px}pre.err{white-space:pre-wrap;word-break:break-word;font:12px/1.45 var(--mono);color:#7a1a13;background:#fff7f6;border:1px solid #f6d5d2;padding:8px 10px;border-radius:6px;margin:6px 0 0}.steps{counter-reset:s}.stepline{display:grid;grid-template-columns:34px 1fr auto;gap:10px;padding:12px 0;border-bottom:1px solid var(--line-2)}.stepline:last-child{border-bottom:0}.stepline .n{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700;background:var(--muted-bg);color:var(--ink-2)}.stepline.passed .n{background:var(--ok-bg);color:var(--ok)}.stepline.failed .n{background:var(--bad-bg);color:var(--bad)}.thumbs{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}.thumbs img{width:220px;border:1px solid var(--line);border-radius:4px;cursor:zoom-in;background:#fff}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a1220d1;display:grid;place-items:center;z-index:50;cursor:zoom-out;padding:24px}.lightbox img{max-width:100%;max-height:100%;border-radius:4px}.ai-box{white-space:pre-wrap;background:#f6f8ff;border:1px solid #d9e2fa;border-radius:6px;padding:12px 14px;font-size:13.5px}.login-wrap{min-height:100vh;display:grid;place-items:center;background:linear-gradient(160deg,#10284f,#1d4486 60%,#2a63d4);padding:20px}.login{width:100%;max-width:380px;background:#fff;border-radius:12px;padding:30px 30px 26px;box-shadow:0 20px 60px #00000040}.login .brand{color:var(--navy);padding:0 0 18px}.login .brand small{color:var(--ink-3)}.empty{text-align:center;padding:36px 16px;color:var(--ink-3)}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a122073;display:grid;place-items:center;z-index:40;padding:20px}.modal{background:#fff;border-radius:10px;width:620px;max-width:100%;max-height:90vh;overflow:auto;padding:22px 24px}.badge.blocked{background:var(--warn-bg);color:var(--warn)}.badge.retest{background:#f1e8fd;color:#6a3fb5}.badge.untested,.badge.skipped,.badge.cancelled{background:var(--muted-bg);color:var(--ink-2)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs button{font:inherit;font-weight:600;background:none;border:0;border-bottom:2px solid transparent;padding:10px 14px;color:var(--ink-3);cursor:pointer;white-space:nowrap;margin-bottom:-1px}.tabs button.on{color:var(--accent);border-bottom-color:var(--accent)}.prog{display:flex;height:8px;border-radius:99px;overflow:hidden;background:var(--muted-bg);min-width:80px}.prog .seg.passed{background:#2f9e62}.prog .seg.failed{background:#d64535}.prog .seg.blocked{background:#d99a1e}.prog .seg.retest{background:#8b5fd1}.prog .seg.skipped{background:#a9b4c4}.prog .seg.untested{background:transparent}.counts{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:12px;color:var(--ink-2);margin-top:6px}.cnt i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;background:#a9b4c4}.cnt.passed i{background:#2f9e62}.cnt.failed i{background:#d64535}.cnt.blocked i{background:#d99a1e}.cnt.retest i{background:#8b5fd1}.cnt.untested i{background:var(--line)}.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding:12px 16px;border-bottom:1px solid var(--line-2)}.toolbar .i{width:auto;flex:1 1 160px;min-width:0}.toolbar select.i{flex:0 1 180px}.chips{display:flex;gap:6px;flex-wrap:wrap}.chip{font:inherit;font-size:12.5px;font-weight:600;border:1px solid var(--line);background:#fff;color:var(--ink-2);padding:4px 10px;border-radius:99px;cursor:pointer}.chip.on{background:var(--navy);border-color:var(--navy);color:#fff}.bulkbar{position:sticky;bottom:0;z-index:20;display:flex;gap:8px;flex-wrap:wrap;align-items:center;background:var(--navy);color:#fff;padding:10px 14px;border-radius:8px;margin-top:12px;box-shadow:0 6px 24px #0a122040}.bulkbar .btn{background:#ffffff1a;border-color:#ffffff40;color:#fff}.morebar{text-align:center;padding:12px}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;display:block;color:inherit}a.card:hover{border-color:#b9c3d3;text-decoration:none}.card .ttl{font-weight:700;margin-bottom:2px;word-break:break-word}.items{list-style:none;margin:0;padding:0}.item{border-bottom:1px solid var(--line-2)}.item:last-child{border-bottom:0}.item .head{display:grid;grid-template-columns:22px 1fr auto;gap:10px;align-items:start;padding:10px 16px;cursor:pointer}.item .head:hover{background:#f8fafd}.item.open .head{background:#f3f6fc}.item .body{padding:4px 16px 16px 48px;background:#f3f6fc}.kv{display:grid;grid-template-columns:140px 1fr;gap:6px 14px;font-size:13.5px;margin-bottom:12px}.kv dt{color:var(--ink-3);font-weight:600}.kv dd{margin:0;white-space:pre-wrap;word-break:break-word}.verdict{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}.verdict .btn.on.passed{background:var(--ok);border-color:var(--ok);color:#fff}.verdict .btn.on.failed{background:var(--bad);border-color:var(--bad);color:#fff}.verdict .btn.on.blocked{background:#b77900;border-color:#b77900;color:#fff}.verdict .btn.on.retest{background:#6a3fb5;border-color:#6a3fb5;color:#fff}.verdict .btn.on.skipped,.verdict .btn.on.untested{background:var(--ink-2);border-color:var(--ink-2);color:#fff}.sub{font-size:12px;color:var(--ink-3)}.wsteps{display:flex;gap:6px;margin-bottom:18px;overflow-x:auto;padding-bottom:2px}.wsteps div{flex:1 0 auto;font-size:12.5px;font-weight:600;color:var(--ink-3);padding:8px 10px;border-radius:6px;background:var(--muted-bg);white-space:nowrap}.wsteps div.on{background:var(--accent);color:#fff}.wsteps div.done{background:#dbe6fb;color:var(--navy-2)}.drop{border:2px dashed #c3ccdb;border-radius:10px;padding:34px 16px;text-align:center;background:#fafbfd;cursor:pointer}.drop.over{border-color:var(--accent);background:#eef3fd}.maprow{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr) minmax(0,1.2fr);gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line-2)}.maprow .ex{font-size:12px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opt{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:8px;padding:12px 14px;margin-bottom:8px;cursor:pointer;background:#fff}.opt.on{border-color:var(--accent);background:#f4f7fe}.opt input{margin-top:3px}.grouplist{max-height:340px;overflow:auto;border:1px solid var(--line);border-radius:8px;margin-top:8px}.grouplist label{display:flex;gap:10px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--line-2);font-size:13.5px}.grouplist label:last-child{border-bottom:0}.grouplist .n{margin-left:auto;color:var(--ink-3);font-size:12px}ul.summary{margin:0;padding-left:20px}ul.summary li{margin:4px 0}.consent{display:flex;gap:10px;align-items:flex-start;background:var(--warn-bg);border:1px solid #f1d9a2;padding:12px 14px;border-radius:8px;margin:14px 0;font-weight:600}.wnav{display:flex;justify-content:space-between;gap:8px;margin-top:18px;flex-wrap:wrap}.editor-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(260px,1fr);gap:16px}.f2{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}.mobilebar{display:none}@media(max-width:820px){.shell{display:block}.mobilebar{display:flex;position:sticky;top:0;z-index:30;align-items:center;justify-content:space-between;background:var(--navy);color:#fff;padding:8px 12px;padding-top:max(8px,env(safe-area-inset-top))}.mobilebar .brand{padding:0;font-size:15px}.mobilebar .brand small{display:none}.mobilebar button{font:inherit;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff;border-radius:6px;padding:7px 12px;min-height:40px}.side{display:none;position:fixed;inset:56px 0 auto 0;z-index:29;box-shadow:0 12px 30px #0000004d;padding:10px 12px 14px}.side.open{display:flex}.side>.brand{display:none}.side .spacer{display:none}.side a{padding:12px 10px;font-size:15px}.main{padding:14px 12px 70px}h1{font-size:18px;word-break:break-word}.topbar{flex-direction:column;align-items:stretch;gap:10px}.topbar>.row{gap:6px}.topbar>.row .btn{flex:1 1 auto;justify-content:center}.panel{padding:14px;border-radius:8px}.btn{min-height:40px;padding:8px 14px}.btn.sm{min-height:34px;padding:6px 10px}input.i,textarea.i,select.i{font-size:16px}.grid2,.editor-grid,.f2{grid-template-columns:1fr}.stats{grid-template-columns:repeat(2,1fr)}.thumbs img{width:100%}.modal-bg{padding:0;align-items:end}.modal{width:100%;max-height:92vh;border-radius:14px 14px 0 0;padding:18px 16px calc(18px + env(safe-area-inset-bottom))}.cards{grid-template-columns:1fr}.maprow{grid-template-columns:1fr 1fr}.maprow .ex{grid-column:1 / -1;order:3;white-space:normal}.toolbar .i{flex:1 1 100%}.toolbar select.i{flex:1 1 45%}.item .head{padding:12px}.item .body{padding:6px 12px 14px}.kv{grid-template-columns:1fr;gap:2px}.kv dd{margin-bottom:8px}.verdict .btn{flex:1 1 30%}.bulkbar{bottom:env(safe-area-inset-bottom);border-radius:10px}.stepline{grid-template-columns:28px 1fr}.stepline>:last-child{grid-column:2;text-align:left!important}table.t.resp thead{display:none}table.t.resp,.t.resp tbody,.t.resp tr,.t.resp td{display:block;width:100%}.t.resp tr{padding:10px 14px;border-bottom:1px solid var(--line-2)}.t.resp tr:last-child{border-bottom:0}.t.resp td{padding:3px 0!important;border:0;text-align:left!important}.t.resp td[data-label]:before{content:attr(data-label);display:inline-block;min-width:96px;color:var(--ink-3);font-size:11px;text-transform:uppercase;letter-spacing:.04em;font-weight:600}.t.resp td.hide-sm{display:none}.t.resp td.sel{float:right;width:auto;padding:2px 0 8px 12px!important}.t.resp td.sel input{width:20px;height:20px}.mono{word-break:break-all}}.legal h2{font-size:16px;margin:26px 0 8px}.legal p,.legal li{line-height:1.6}.legal ul{padding-left:20px}.legal table.t{margin:8px 0 12px;font-size:13px}.shell{transition:grid-template-columns .15s ease}.shell.collapsed{grid-template-columns:64px 1fr}.side .collapse-btn{background:none;border:0;color:#9fb3d6;cursor:pointer;font:inherit;font-size:18px;padding:4px 8px;border-radius:6px;align-self:flex-end;line-height:1}.side .collapse-btn:hover{background:#ffffff17;color:#fff}.side a .ico{display:inline-block;width:22px;text-align:center;margin-right:8px;opacity:.9}.shell.collapsed .side{padding:14px 8px;align-items:center}.shell.collapsed .side .label,.shell.collapsed .brand>div,.shell.collapsed .side .who,.shell.collapsed .side .legal-links{display:none}.shell.collapsed .side a{padding:8px 0;width:44px;text-align:center}.shell.collapsed .side a .ico{margin:0}.shell.collapsed .brand{padding:4px 0 14px;justify-content:center}.side .legal-links{font-size:11px;padding:6px 10px 0;color:#7f93b8}.side .legal-links a{display:inline;padding:0;color:#9fb3d6}.side .legal-links a:hover{background:none;text-decoration:underline}.icon-btn{background:none;border:1px solid var(--line);border-radius:6px;cursor:pointer;padding:3px 8px;font-size:14px;color:var(--ink-2);line-height:1.2}.icon-btn:hover{border-color:#b9c3d3;color:var(--ink)}.check{display:flex;gap:8px;align-items:flex-start;margin-top:10px}.check input{margin-top:3px}.pill{display:inline-block;font-size:11.5px;padding:1px 8px;border-radius:999px;background:var(--muted-bg);color:var(--ink-2)}.pill.ok{background:var(--ok-bg);color:var(--ok)}.pill.bad{background:var(--bad-bg);color:var(--bad)}.pill.warn{background:var(--warn-bg);color:var(--warn)}.picker{border:1px solid var(--line);border-radius:6px;max-height:260px;overflow:auto;margin-top:6px}.picker button{display:block;width:100%;text-align:left;background:#fff;border:0;border-bottom:1px solid var(--line-2);padding:8px 10px;cursor:pointer;font:inherit}.picker button:hover{background:#f5f8fd}.picker button.sel{background:#e8f0fd;font-weight:600}@media(max-width:820px){.shell.collapsed{grid-template-columns:1fr}.side .collapse-btn{display:none}}@media(max-width:820px){.shell.collapsed .side{padding:10px 12px 14px;align-items:stretch}.shell.collapsed .side .label{display:inline}.shell.collapsed .side .who,.shell.collapsed .side .legal-links{display:block}.shell.collapsed .side a{width:auto;text-align:left;padding:12px 10px}.shell.collapsed .side a .ico{margin-right:8px}}
