:root{--bg: #0b0d12;--panel: #12151d;--panel-2: #171b25;--line: #252b3a;--line-soft: #1c2130;--text: #e6e9f2;--muted: #8d95ab;--dim: #666e85;--accent: #7c9eff;--accent-dim: #3d5699;--good: #5fd9a8;--warn: #f0b45f;--bad: #ff6b7a;--mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--radius: 8px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}.app{display:flex;flex-direction:column;min-height:100%}.topbar{display:flex;align-items:center;gap:16px;padding:10px 20px;border-bottom:1px solid var(--line);background:var(--panel);flex-wrap:wrap}.brand{font-weight:650;letter-spacing:-.01em;font-size:15px}.brand span{color:var(--accent)}.topbar .spacer{flex:1 1 auto}.backend-chip{display:inline-flex;align-items:center;gap:8px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;background:var(--panel-2);font-size:12px;color:var(--muted);font-family:var(--mono)}.backend-chip .dot{width:7px;height:7px;border-radius:50%;background:var(--good);flex:none}.backend-chip.down .dot{background:var(--bad)}.backend-chip.mock .dot{background:var(--warn)}.columns{display:grid;grid-template-columns:minmax(360px,1fr) minmax(420px,1.15fr);gap:16px;padding:16px 20px 40px;align-items:start}@media(max-width:1000px){.columns{grid-template-columns:1fr}}.stack{display:flex;flex-direction:column;gap:16px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.panel>header{display:flex;align-items:center;gap:10px;padding:9px 14px;border-bottom:1px solid var(--line-soft);background:var(--panel-2)}.panel>header h2{margin:0;font-size:12px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.panel>header .spacer{flex:1 1 auto}.panel .body{padding:14px}.note{font-size:12px;color:var(--dim);line-height:1.45}.note.warn{color:var(--warn)}.field{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:9px 11px;font-family:var(--mono);font-size:13.5px;outline:none;min-height:38px}.field:focus{border-color:var(--accent-dim);box-shadow:0 0 0 2px #7c9eff24}.field.error{border-color:var(--bad)}textarea.field{resize:vertical;line-height:1.5}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:34px;padding:0 14px;border:1px solid var(--line);border-radius:6px;background:var(--panel-2);cursor:pointer;font-size:13px;font-weight:550;white-space:nowrap;transition:background .12s,border-color .12s}.btn:hover:not(:disabled){background:#1e2432;border-color:#333b4f}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:var(--accent-dim);border-color:#4c68b8;color:#eef2ff}.btn.primary:hover:not(:disabled){background:#47609e}.btn.small{min-height:26px;padding:0 9px;font-size:12px;font-weight:500}.btn.danger{color:var(--bad)}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.row.tight{gap:6px}label.check{display:inline-flex;align-items:center;gap:7px;cursor:pointer;font-size:12.5px;color:var(--muted);min-height:26px;-webkit-user-select:none;user-select:none}label.check input{width:17px;height:17px;accent-color:var(--accent);cursor:pointer;margin:0;flex:none}label.check:hover{color:var(--text)}.num-field{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted)}.num-field input,.num-field select{width:68px;background:var(--bg);border:1px solid var(--line);border-radius:5px;padding:4px 7px;font-family:var(--mono);font-size:12.5px;min-height:28px}.num-field select{width:auto;min-width:90px}.geometry{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:1px;background:var(--line-soft);border-top:1px solid var(--line-soft)}.geometry .cell{background:var(--panel);padding:10px 12px}.geometry .k{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--dim);white-space:nowrap}.geometry .v{font-family:var(--mono);font-size:17px;font-variant-numeric:tabular-nums;margin-top:2px}.geometry .sub{font-size:11px;color:var(--dim);font-family:var(--mono)}.v.good{color:var(--good)}.v.warn{color:var(--warn)}.v.bad{color:var(--bad)}table.grid{width:100%;border-collapse:collapse;font-size:13px}table.grid th{text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--dim);font-weight:600;padding:6px 10px;border-bottom:1px solid var(--line-soft);white-space:nowrap}table.grid td{padding:5px 10px;border-bottom:1px solid var(--line-soft);vertical-align:middle}table.grid tr:last-child td{border-bottom:none}table.grid tr.is-input td{background:#7c9eff0e}table.grid td.num{font-family:var(--mono);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}table.grid td.term{font-family:var(--mono);word-break:break-word}.rank{color:var(--dim);font-family:var(--mono);font-size:11.5px;width:1%}.badge{display:inline-block;padding:0 6px;border-radius:4px;font-size:10px;font-weight:650;letter-spacing:.05em;text-transform:uppercase;border:1px solid;vertical-align:1px}.badge.input{color:var(--accent);border-color:var(--accent-dim);background:#7c9eff1a}.badge.warn{color:var(--warn);border-color:#6b5326;background:#f0b45f1a}.badge.bad{color:var(--bad);border-color:#6d2f37;background:#ff6b7a1a}.cosbar{display:inline-block;vertical-align:middle;position:relative;width:90px;height:7px;background:var(--panel-2);border-radius:2px;overflow:hidden;flex:none}.cosbar .zero{position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--line)}.cosbar .fill{position:absolute;top:0;bottom:0;border-radius:2px}.cosbar .fill.pos{left:50%;background:var(--good)}.cosbar .fill.neg{right:50%;background:var(--bad)}.decode-out{background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:12px 14px;font-family:var(--mono);font-size:15px;line-height:1.55;word-break:break-word;min-height:46px}.decode-out.pending{color:var(--muted)}.decode-out.empty{color:var(--dim);font-style:italic;font-size:13px}.roundtrip{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:6px;border:1px solid;font-size:12.5px}.roundtrip.good{border-color:#2c5c48;background:#5fd9a812}.roundtrip.mid{border-color:#6b5326;background:#f0b45f12}.roundtrip.poor{border-color:#6d2f37;background:#ff6b7a12}.roundtrip .big{font-family:var(--mono);font-size:19px;font-variant-numeric:tabular-nums;font-weight:600}.roundtrip.good .big{color:var(--good)}.roundtrip.mid .big{color:var(--warn)}.roundtrip.poor .big{color:var(--bad)}.roundtrip .label{color:var(--muted);line-height:1.35}.progress{height:4px;background:var(--panel-2);border-radius:2px;overflow:hidden}.progress .bar{height:100%;background:var(--accent);transition:width .2s linear}.progress .bar.indeterminate{width:34%;animation:slide 1.15s ease-in-out infinite}@keyframes slide{0%{margin-left:-34%}to{margin-left:100%}}.steplog{max-height:132px;overflow-y:auto;font-family:var(--mono);font-size:11.5px;color:var(--muted);background:var(--bg);border:1px solid var(--line-soft);border-radius:6px;padding:7px 9px}.steplog div{white-space:pre-wrap;word-break:break-word}.steplog .n{color:var(--dim)}.steplog .c{color:var(--accent)}input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:26px;background:transparent;cursor:pointer;margin:0}input[type=range]::-webkit-slider-runnable-track{height:5px;border-radius:3px;background:linear-gradient(90deg,var(--accent-dim),#4a3f7a)}input[type=range]::-moz-range-track{height:5px;border-radius:3px;background:linear-gradient(90deg,var(--accent-dim),#4a3f7a)}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:17px;height:17px;border-radius:50%;background:var(--text);border:2px solid var(--bg);margin-top:-6px;box-shadow:0 1px 4px #00000080}input[type=range]::-moz-range-thumb{width:15px;height:15px;border-radius:50%;background:var(--text);border:2px solid var(--bg)}.slider-ends{display:flex;justify-content:space-between;font-size:11px;color:var(--dim);font-family:var(--mono)}.error-box{border:1px solid #6d2f37;background:#ff6b7a14;color:#ffb0b8;border-radius:6px;padding:9px 12px;font-size:12.5px;font-family:var(--mono);word-break:break-word}.chiplist{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 4px 3px 9px;border:1px solid var(--line);border-radius:999px;background:var(--panel-2);font-size:12px;font-family:var(--mono);min-height:26px}.chip button{border:none;background:transparent;color:var(--dim);cursor:pointer;padding:0 4px;min-width:18px;min-height:18px;line-height:1;border-radius:50%}.chip button:hover{color:var(--bad);background:#ff6b7a1f}.chip .use{color:var(--accent);cursor:pointer}.chip .use:hover{text-decoration:underline}.example-btn{border:1px dashed var(--line);background:transparent;color:var(--muted);border-radius:999px;padding:3px 10px;font-size:11.5px;font-family:var(--mono);cursor:pointer;min-height:26px}.example-btn:hover{color:var(--text);border-color:var(--accent-dim)}.spin{width:12px;height:12px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite;flex:none}@keyframes spin{to{transform:rotate(360deg)}}.sweep-t{color:var(--accent);font-family:var(--mono)}
