:root{--bg: oklch(.985 .002 250);--bg-soft: oklch(.972 .003 250);--surface: oklch(1 0 0);--surface-2: oklch(.978 .003 250);--surface-3: oklch(.96 .003 250);--hover: oklch(.965 .004 250);--line: oklch(.918 .004 250);--line-strong: oklch(.86 .005 250);--line-faint: oklch(.95 .003 250);--ink: oklch(.18 .012 250);--ink-2: oklch(.32 .01 250);--ink-3: oklch(.48 .008 250);--ink-4: oklch(.62 .007 250);--ink-5: oklch(.74 .006 250);--accent: oklch(.62 .17 145);--accent-2: oklch(.57 .17 145);--accent-soft: oklch(.62 .17 145 / .1);--accent-faint: oklch(.62 .17 145 / .05);--accent-line: oklch(.62 .17 145 / .3);--accent-ink: oklch(.36 .13 145);--accent-fg: oklch(.985 .002 250);--ok: var(--accent);--warn: oklch(.72 .16 65);--warn-soft: oklch(.72 .16 65 / .12);--warn-line: oklch(.72 .16 65 / .3);--err: oklch(.58 .2 25);--err-soft: oklch(.58 .2 25 / .1);--err-line: oklch(.58 .2 25 / .28);--info: oklch(.55 .13 245);--info-soft: oklch(.55 .13 245 / .1);--info-line: oklch(.55 .13 245 / .28);--sans: "Geist", -apple-system, "Helvetica Neue", system-ui, sans-serif;--mono: "JetBrains Mono", "SF Mono", ui-monospace, monospace;--radius: 6px;--radius-sm: 4px;--radius-xs: 3px;--shadow-sm: 0 1px 2px oklch(.18 .012 250 / .04);--shadow: 0 1px 2px oklch(.18 .012 250 / .04), 0 4px 8px oklch(.18 .012 250 / .04);--shadow-lg: 0 1px 2px oklch(.18 .012 250 / .04), 0 12px 28px oklch(.18 .012 250 / .08);--row-h: 36px;--row-h-sm: 30px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:13px;line-height:1.4;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body{min-height:100vh}#root{min-height:100vh;display:flex;flex-direction:column}button{font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;cursor:pointer}input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}a{color:inherit;text-decoration:none}.mono{font-family:var(--mono);font-feature-settings:"tnum" 1}.num{font-family:var(--mono);font-feature-settings:"tnum" 1;letter-spacing:-.01em}.eyebrow{font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4);font-weight:500}.label-cap{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-weight:500}.btn{display:inline-flex;align-items:center;gap:6px;padding:0 11px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-size:12.5px;font-weight:500;border-radius:var(--radius-sm);transition:background .12s,border-color .12s,color .12s,box-shadow .12s;height:30px;white-space:nowrap;box-shadow:var(--shadow-sm)}.btn:hover{background:var(--hover);border-color:var(--line-strong)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--ink);color:var(--surface);border-color:var(--ink)}.btn-primary:hover{background:#20252a;border-color:#20252a}.btn-accent{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}.btn-accent:hover{background:var(--accent-2);border-color:var(--accent-2)}.btn-ghost{background:transparent;border-color:transparent;box-shadow:none;color:var(--ink-2)}.btn-ghost:hover{background:var(--hover);color:var(--ink)}.btn-danger{background:var(--err);color:#fff;border-color:var(--err)}.btn-danger:hover{background:#c21725}.btn-sm{height:24px;padding:0 8px;font-size:11.5px}.btn-lg{height:36px;padding:0 16px;font-size:13.5px}.btn-icon{padding:0;width:30px;justify-content:center}.btn-icon.btn-sm{width:24px}kbd{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 4px;font-family:var(--mono);font-size:10.5px;color:var(--ink-3);background:var(--surface);border:1px solid var(--line);border-bottom-width:1.5px;border-radius:3px}.pill{display:inline-flex;align-items:center;gap:4px;padding:1px 7px;border:1px solid var(--line);border-radius:4px;font-family:var(--mono);font-size:10.5px;font-weight:500;color:var(--ink-3);background:var(--surface-2);line-height:1.6;white-space:nowrap}.pill-ok{color:var(--accent-ink);border-color:var(--accent-line);background:var(--accent-soft)}.pill-warn{color:#6f4000;color:oklch(.42 .14 65);border-color:var(--warn-line);background:var(--warn-soft)}.pill-err{color:var(--err);border-color:var(--err-line);background:var(--err-soft)}.pill-idle{color:var(--ink-3)}.pill-info{color:var(--info);border-color:var(--info-line);background:var(--info-soft)}.pill-solid{background:var(--ink);color:var(--surface);border-color:var(--ink)}.dot{width:6px;height:6px;border-radius:50%;display:inline-block;flex:none}.dot-ok{background:var(--accent)}.dot-warn{background:var(--warn)}.dot-err{background:var(--err)}.dot-idle{background:var(--ink-5)}.dot-info{background:var(--info)}.pulse{position:relative;width:6px;height:6px;border-radius:50%;background:var(--accent);flex:none}.pulse:after{content:"";position:absolute;inset:-2px;border-radius:50%;background:var(--accent);opacity:.5;animation:pulse 1.6s ease-out infinite}@keyframes pulse{0%{transform:scale(.7);opacity:.45}to{transform:scale(2.4);opacity:0}}@media(prefers-reduced-motion:reduce){.pulse:after{animation:none}}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm)}hr.line{border:0;height:1px;background:var(--line);margin:0}.input{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 10px;color:var(--ink);font-size:13px;height:30px;outline:none;transition:border-color .12s,box-shadow .12s;width:100%}.input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.input::placeholder{color:var(--ink-4)}textarea.input{height:auto;padding:8px 10px;resize:vertical}:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:3px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:5px;border:2px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:var(--ink-5)}::-webkit-scrollbar-track{background:transparent}.tbl{width:100%;border-collapse:collapse}.tbl thead th{position:sticky;top:0;background:var(--bg-soft);border-bottom:1px solid var(--line);font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4);font-weight:500;text-align:left;padding:0 12px;height:32px;white-space:nowrap;z-index:1}.tbl tbody td{height:var(--row-h);padding:0 12px;font-size:12.5px;color:var(--ink);border-bottom:1px solid var(--line-faint);white-space:nowrap}.tbl tbody tr:hover{background:var(--hover);cursor:pointer}.tbl tbody tr.is-selected{background:var(--accent-soft)}.tbl tbody tr:last-child td{border-bottom:0}.tbl-num{text-align:right;font-family:var(--mono)}.tbl thead th.tbl-num{text-align:right}.tbl-faint{color:var(--ink-3)}.tbl-strong{font-weight:500}.gridbg{background-image:linear-gradient(var(--line-faint) 1px,transparent 1px),linear-gradient(90deg,var(--line-faint) 1px,transparent 1px);background-size:48px 48px;background-position:center center}.backdrop{position:fixed;inset:0;background:#0e121766;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:100;animation:fadeIn .15s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes pop{0%{opacity:0;transform:translate(-50%,-48%) scale(.98)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.spinner{width:20px;height:20px;border-radius:50%;border:2px solid var(--line-strong);border-top-color:var(--accent);animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spinner{animation:none;border-top-color:var(--accent)}}.transition-bg{transition:background .12s}.value-chip-editable{border-style:solid;cursor:text}.inline-val:hover .value-chip-editable,.inline-val:focus-visible .value-chip-editable{border-color:var(--accent);background:var(--accent-faint);box-shadow:0 0 0 3px var(--accent-soft)}.inline-val:hover .inline-val-pencil{opacity:1!important;color:var(--accent-ink)!important;background:var(--accent-soft)}.inline-set-btn:hover{border-color:var(--accent)!important;border-style:solid!important;color:var(--accent-ink)!important;background:var(--accent-faint)!important}
