:root{--bg:#0a0a0a;--bg-elevated:#111111;--surface:#161616;--surface-2:#1d1d1d;--border:#262626;--border-strong:#343434;--accent:#ff9000;--accent-hover:#ffa31a;--accent-pressed:#e07f00;--accent-soft:rgba(255,144,0,0.12);--on-accent:#0a0a0a;--text:#f5f5f5;--text-2:#a6a6a6;--text-3:#6e6e6e;--ok:#22c55e;--ok-soft:rgba(34,197,94,0.12);--run:#ff9000;--run-soft:rgba(255,144,0,0.12);--pend:#8a8a8a;--pend-soft:rgba(138,138,138,0.12);--fail:#ef4444;--fail-soft:rgba(239,68,68,0.12);--info:#38bdf8;--info-soft:rgba(56,189,248,0.12);--r-s:8px;--r-m:12px;--r-l:16px;--shadow-1:0 1px 2px rgba(0,0,0,0.4),0 8px 24px rgba(0,0,0,0.36);--shadow-2:0 4px 12px rgba(0,0,0,0.45),0 16px 40px rgba(0,0,0,0.4);--glow-accent:0 0 0 1px rgba(255,144,0,0.4),0 8px 32px rgba(255,144,0,0.22);--t-fast:150ms cubic-bezier(0.4,0,0.2,1);--t-slow:300ms cubic-bezier(0.4,0,0.2,1);--font-sans:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";--font-mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;--fs-12:12px;--fs-13:13px;--fs-14:14px;--fs-16:16px;--fs-20:20px;--fs-26:26px;--fs-36:36px;color-scheme:dark}*{box-sizing:border-box}body,html{padding:0;margin:0;height:100%}body,html{overflow-x:hidden}body{background:var(--bg);background-image:radial-gradient(ellipse 1200px 640px at 50% -12%,rgba(255,144,0,.05),transparent 60%),radial-gradient(ellipse 900px 500px at 100% 0,rgba(255,144,0,.03),transparent 55%);background-repeat:no-repeat;background-attachment:fixed;color:var(--text);font-family:var(--font-sans);font-size:var(--fs-14);line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--accent);color:var(--on-accent)}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background-color:var(--border-strong);border-radius:999px;border:2px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background-color:var(--accent)}:focus{outline:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-s)}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}h1,h2,h3{margin:0 0 12px;font-weight:650;letter-spacing:-.02em;color:var(--text)}h1{font-size:var(--fs-26);font-weight:700}h2{font-size:var(--fs-20)}h3{font-size:var(--fs-12);font-weight:650;color:var(--text-3);text-transform:uppercase;letter-spacing:.06em}p{margin:0 0 8px}a,p{color:var(--text)}a{text-decoration:none;transition:color var(--t-fast)}a:hover{color:var(--accent)}ol,ul{margin:0 0 8px;padding-left:20px}li{margin-bottom:4px}strong{font-weight:650}.tabular{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.app-header{position:-webkit-sticky;position:sticky;top:0;z-index:500;background:rgba(10,10,10,.75);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}.app-header-inner{max-width:1200px;margin:0 auto;padding:0 24px;height:60px;display:flex;align-items:center;gap:32px}.app-header .brand{font-size:var(--fs-16);font-weight:750;letter-spacing:-.03em;color:var(--text)}.app-header .brand:hover{color:var(--text)}.app-header .brand-dot{color:var(--accent)}.app-nav{display:flex;align-items:center;gap:24px;flex:1 1}.app-header .nav-link{position:relative;color:var(--text-2);font-size:var(--fs-14);font-weight:550;padding:20px 0}.app-header .nav-link-active,.app-header .nav-link:hover{color:var(--text)}.app-header .nav-link-active:after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--accent);border-radius:2px 2px 0 0}.container{max-width:1200px;margin:0 auto;padding:32px 24px 80px}.container-narrow{max-width:420px;margin:0 auto;padding:0 16px}.grid{display:grid;grid-gap:16px;gap:16px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}@media (max-width:720px){.grid-2,.grid-3{grid-template-columns:1fr}}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-l);padding:24px;margin-bottom:20px;animation:fadeInUp var(--t-slow) both}.card+.card{margin-top:20px}.card-hover{transition:transform var(--t-fast),border-color var(--t-fast),box-shadow var(--t-fast)}.card-hover:hover{transform:translateY(-2px);border-color:var(--border-strong);box-shadow:var(--shadow-1)}.btn,button{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--surface-2);color:var(--text);border:1px solid var(--border-strong);border-radius:var(--r-s);padding:9px 16px;font-size:var(--fs-14);font-weight:550;font-family:inherit;cursor:pointer;transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast),transform var(--t-fast),box-shadow var(--t-fast);white-space:nowrap}.btn:hover,button:hover{border-color:var(--text-3);background:var(--surface-2)}.btn:active,button:active{transform:translateY(1px)}.btn-sm{padding:6px 12px;font-size:var(--fs-13);border-radius:var(--r-s)}.btn-primary,button:not(.btn-ghost):not(.btn-danger):not(.secondary):not(.danger){background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:650}.btn-primary:hover,button:not(.btn-ghost):not(.btn-danger):not(.secondary):not(.danger):hover{background:var(--accent-hover);border-color:var(--accent-hover);box-shadow:var(--glow-accent);transform:translateY(-1px)}.btn-primary:active,button:not(.btn-ghost):not(.btn-danger):not(.secondary):not(.danger):active{background:var(--accent-pressed);border-color:var(--accent-pressed);box-shadow:none;transform:translateY(0)}.btn-ghost,.secondary,button.secondary{background:transparent;border-color:var(--border-strong);color:var(--text);font-weight:550}.btn-ghost:hover,.secondary:hover,button.secondary:hover{background:var(--surface-2);border-color:var(--text-3)}.btn-danger,.danger,button.danger{background:transparent;border-color:var(--fail);color:var(--fail)}.btn-danger:hover,.danger:hover,button.danger:hover{background:var(--fail-soft);border-color:var(--fail);box-shadow:none;transform:none}.btn:disabled,button:disabled{background:var(--surface-2);border-color:var(--border);color:var(--text-3);cursor:not-allowed;box-shadow:none;transform:none}.btn.loading,button.loading{position:relative;color:transparent!important;pointer-events:none}.btn.loading:after,button.loading:after{content:"";position:absolute;width:14px;height:14px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:currentcolor;color:var(--on-accent);animation:spin .7s linear infinite}.button-row{display:flex;gap:10px;align-items:center;margin-top:12px;flex-wrap:wrap}label{display:block;font-size:var(--fs-13);color:var(--text-2);margin-bottom:6px}.field{margin-bottom:16px}.input,.select,input[type=email],input[type=file],input[type=number],input[type=password],input[type=search],input[type=text],select,textarea{width:100%;background:var(--bg-elevated);color:var(--text);border:1px solid var(--border);border-radius:var(--r-s);padding:10px 12px;font-size:var(--fs-14);font-family:inherit;outline:none;transition:border-color var(--t-fast),box-shadow var(--t-fast)}.input:hover,input[type=number]:hover,input[type=password]:hover,input[type=text]:hover,select:hover,textarea:hover{border-color:var(--border-strong)}.input:focus,.select:focus,input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=text]:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}::placeholder{color:var(--text-3)}textarea{resize:vertical;font-family:var(--font-mono);line-height:1.6}select{cursor:pointer}input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);margin-right:8px;cursor:pointer}.checkbox-row{display:flex;align-items:center;margin-bottom:14px}.checkbox-row label{margin:0;color:var(--text);font-size:var(--fs-14);cursor:pointer}.switch{position:relative;display:inline-flex;align-items:center;width:36px;height:20px;flex:0 0 auto}.switch input{position:absolute;inset:0;opacity:0;margin:0;cursor:pointer;z-index:1}.switch .switch-track{position:absolute;inset:0;background:var(--surface-2);border:1px solid var(--border-strong);border-radius:999px;transition:background var(--t-fast),border-color var(--t-fast)}.switch .switch-thumb{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:var(--text-2);transition:transform var(--t-fast),background var(--t-fast)}.switch input:checked~.switch-track{background:var(--accent);border-color:var(--accent)}.switch input:checked~.switch-thumb{transform:translateX(16px);background:var(--on-accent)}.switch input:focus-visible~.switch-track{outline:2px solid var(--accent);outline-offset:2px}.segmented{display:inline-flex;padding:3px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-s);gap:2px}.segmented label{margin:0;padding:6px 14px;font-size:var(--fs-13);color:var(--text-2);border-radius:calc(var(--r-s) - 3px);cursor:pointer;transition:background var(--t-fast),color var(--t-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none}.segmented input{position:absolute;opacity:0;pointer-events:none}.segmented input:checked+label,.segmented label.active{background:var(--surface-2);color:var(--accent);font-weight:600}.badge{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:var(--fs-12);font-weight:600;background:var(--surface-2);color:var(--text-2);border:1px solid var(--border);white-space:nowrap;line-height:1.6}.badge:before{content:"";width:6px;height:6px;flex:0 0 auto;border-radius:50%;background:currentColor}.badge-done,.badge-ok{color:var(--ok);background:var(--ok-soft);border-color:transparent}.badge-run,.badge-running{color:var(--run);background:var(--run-soft);border-color:transparent}.badge-run:before,.badge-running:before{animation:pulse 1.4s ease-in-out infinite}.badge-pend,.badge-pending{color:var(--pend);background:var(--pend-soft);border-color:transparent}.badge-fail,.badge-failed{color:var(--fail);background:var(--fail-soft);border-color:transparent}.badge-info{color:var(--info);background:var(--info-soft);border-color:transparent}.table-wrap{overflow-x:auto}.table,table{width:100%;border-collapse:collapse;font-size:var(--fs-14)}.table th,.table thead th,table th,table thead th{text-align:left;padding:10px 14px;border-bottom:1px solid var(--border);color:var(--text-3);font-weight:650;font-size:var(--fs-12);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap}.table td,table td{text-align:left;padding:12px 14px;border-bottom:1px solid var(--border);vertical-align:middle}.table tbody tr,table tbody tr{transition:background var(--t-fast)}.table tbody tr:hover,table tbody tr:hover{background:var(--surface)}.table tbody tr:last-child td,table tbody tr:last-child td{border-bottom:none}.progress{position:relative;width:100%;height:8px;background:var(--surface-2);border-radius:999px;overflow:hidden}.progress-bar{position:absolute;top:0;left:0;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--accent),var(--accent-hover));transition:width .4s ease}.progress-bar-failed,.progress-bar.progress-fail,.progress-fail .progress-bar{background:var(--fail)}.progress-bar-failed{position:absolute;top:0;height:100%;transition:width .4s ease,left .4s ease}.skeleton{position:relative;overflow:hidden;background:var(--surface-2);border-radius:var(--r-s);height:14px}.skeleton:after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.06),transparent);animation:shimmer 1.6s infinite}.empty,.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:6px;padding:56px 24px;color:var(--text-2)}.empty .empty-icon{font-size:32px;margin-bottom:8px;opacity:.8}.empty .empty-title{color:var(--text);font-size:var(--fs-16);font-weight:650}.empty .empty-hint{color:var(--text-3);font-size:var(--fs-13);max-width:360px}.loading{color:var(--text-2);padding:24px 0}.stat{display:flex;flex-direction:column;gap:4px}.stat .stat-value{font-size:var(--fs-26);font-weight:700;letter-spacing:-.02em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;color:var(--text)}.stat .stat-label{font-size:var(--fs-12);color:var(--text-2);text-transform:uppercase;letter-spacing:.06em}.color-swatch-box,.swatch{width:56px;height:56px;border-radius:var(--r-m);border:1px solid rgba(255,255,255,.08);cursor:pointer;transition:transform var(--t-fast)}.color-swatch-box:hover,.swatch:hover{transform:scale(1.06)}.color-swatches{display:flex;flex-wrap:wrap;gap:16px}.color-swatch{display:flex;flex-direction:column;align-items:center;gap:6px;font-size:var(--fs-12);color:var(--text-2)}.logo-list{display:flex;flex-wrap:wrap;gap:16px}.logo-list img{max-height:80px;max-width:160px;border-radius:var(--r-s);border:1px solid var(--border);background:#fff;padding:6px}.toast-stack{position:fixed;right:20px;bottom:20px;z-index:1000;display:flex;flex-direction:column;gap:10px;max-width:360px}.toast{position:relative;background:var(--surface-2);border:1px solid var(--border);border-left:3px solid var(--border-strong);border-radius:var(--r-m);padding:12px 16px;font-size:var(--fs-13);color:var(--text);box-shadow:var(--shadow-2);animation:toastIn var(--t-slow) both}.toast-ok{border-left-color:var(--ok)}.toast-err{border-left-color:var(--fail)}.toast-leaving{animation:toastOut var(--t-fast) both}.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1100;padding:20px;animation:fadeIn var(--t-fast) both}.modal{width:100%;max-width:420px;background:var(--bg-elevated);border:1px solid var(--border-strong);border-radius:var(--r-l);padding:24px;box-shadow:var(--shadow-2);animation:scaleIn var(--t-fast) both}.modal h2{margin-bottom:8px}.modal .modal-body{color:var(--text-2);font-size:var(--fs-14);margin-bottom:20px}.modal .modal-actions{display:flex;justify-content:flex-end;gap:10px}.dropzone{border:1px dashed var(--border-strong);border-radius:var(--r-l);padding:32px 20px;text-align:center;color:var(--text-2);transition:border-color var(--t-fast),background var(--t-fast)}.dropzone.drag{border-color:var(--accent);background:var(--accent-soft);color:var(--text)}.kbd{display:inline-flex;align-items:center;padding:2px 6px;font-size:11px;color:var(--text-2);border:solid var(--border-strong);border-width:1px 1px 2px;border-radius:5px}.code,.kbd{font-family:var(--font-mono);background:var(--surface-2)}.code{font-size:.92em;border:1px solid var(--border);border-radius:4px;padding:1px 6px;color:var(--accent)}pre,pre.json{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-m);padding:14px 16px;white-space:pre-wrap;word-break:break-word;font-family:var(--font-mono);font-size:12.5px;color:var(--text-2);overflow:auto;max-height:480px}.pre-scroll{max-height:320px}details{border:1px solid var(--border);border-radius:var(--r-m);padding:12px 14px;margin-bottom:10px;background:var(--surface)}details+details{margin-top:10px}details summary{cursor:pointer;font-size:var(--fs-13);display:flex;align-items:center;gap:10px;color:var(--text);list-style:none}details summary::-webkit-details-marker{display:none}details summary:before{content:"▸";color:var(--text-3);transition:transform var(--t-fast);font-size:10px}details[open] summary:before{transform:rotate(90deg)}details[open] summary{margin-bottom:12px}.muted{color:var(--text-2)}.error-text{color:var(--fail)}.error-text,.success-text{font-size:var(--fs-13);margin:8px 0}.success-text{color:var(--ok)}.truncate{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.section-fade{animation:fadeInUp var(--t-slow) both}@keyframes fadeInUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{opacity:0;transform:scale(.96) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes toastIn{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes toastOut{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(8px)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes shimmer{to{transform:translateX(100%)}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes shake{10%,90%{transform:translateX(-1px)}20%,80%{transform:translateX(2px)}30%,50%,70%{transform:translateX(-4px)}40%,60%{transform:translateX(4px)}}@keyframes drift{0%{transform:translate(0) scale(1)}50%{transform:translate(30px,-20px) scale(1.08)}to{transform:translate(0) scale(1)}}.login-screen{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;overflow:hidden;background:var(--bg)}.login-blob{position:absolute;width:480px;height:480px;border-radius:50%;background:var(--accent);opacity:.06;filter:blur(90px);animation:drift 20s ease-in-out infinite;pointer-events:none}.login-blob-a{top:-140px;left:-120px}.login-blob-b{bottom:-160px;right:-100px;animation-delay:-10s}.login-content{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:32px;padding:24px;width:100%}.login-wordmark{font-size:var(--fs-36);font-weight:750;letter-spacing:-.03em;color:var(--text)}.login-card{width:100%;max-width:380px;margin-bottom:0}.login-title{margin-bottom:20px}.login-submit{width:100%;margin-top:4px;padding-top:11px;padding-bottom:11px}.login-shake{animation:shake .4s cubic-bezier(.4,0,.2,1)}