:root{--bg: #f6f7f9;--panel: #ffffff;--ink: #1d2430;--muted: #6b7280;--line: #e3e6ec;--accent: #2b6cb0;--accent-ink: #ffffff;--ok: #1a7f37;--warn: #9a6700;--err: #cf222e;--danger: #cd5c5c;--danger-hover: #b14545;--radius: 8px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);line-height:1.45}.topbar{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;background:var(--panel);border-bottom:1px solid var(--line)}.topbar .brand strong{font-size:1.05rem}.topbar .brand .muted,.topbar-actions button{margin-left:8px}.muted{color:var(--muted)}code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:#eef1f5;padding:1px 5px;border-radius:4px;font-size:.9em}.stepper{display:flex;gap:4px;list-style:none;margin:0;padding:12px 20px 0}.stepper li button{border:1px solid var(--line);background:var(--panel);padding:7px 12px;border-radius:999px;cursor:pointer;font-size:.85rem;color:var(--muted)}.stepper li.active button{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.panels{padding:16px 20px 40px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;max-width:1100px;margin:8px auto}.panel h2{margin-top:0}.panel h3{margin:0 0 8px;font-size:1rem}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.form-grid label,.output-options label{display:flex;flex-direction:column;gap:4px;font-size:.85rem;color:var(--muted)}.form-grid .span-2{grid-column:1 / -1}.form-grid textarea{resize:vertical}.help-panel{padding:14px 18px;margin-top:10px}.help-panel>details>summary{cursor:pointer}.help{padding:0}.help-body h3{margin:14px 0 4px;font-size:.95rem}.help-body p{margin:6px 0}.help-body ol,.help-body ul{margin:6px 0;padding-left:20px}.help-body li{margin:2px 0}.help-body blockquote{margin:8px 0;padding:6px 12px;border-left:3px solid var(--line);background:#fff}.help-body dl{margin:6px 0}.help-body dt{font-weight:600;margin-top:8px}.help-body dd{margin:0 0 2px}.file-load{margin:6px 0;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.file-load input[type=file]{font-size:.85rem}input[type=text],input[type=url],textarea,select{border:1px solid var(--line);border-radius:6px;padding:7px 9px;font:inherit;background:#fff;color:var(--ink)}input[type=text]:focus,input[type=url]:focus,textarea:focus,select:focus{outline:2px solid #bcd6f1;border-color:var(--accent)}button{border:1px solid var(--line);background:#fff;color:var(--ink);padding:7px 12px;border-radius:6px;cursor:pointer;font:inherit}button:hover:not(:disabled){background:#f0f3f7}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}button.primary:hover:not(:disabled){background:#25598f}button.danger{background:var(--danger);color:#fff;border-color:var(--danger)}button.danger:hover:not(:disabled){background:var(--danger-hover);border-color:var(--danger-hover)}.actions{display:flex;gap:8px;align-items:center;margin-top:14px}.dims{display:flex;flex-direction:column;gap:12px}.dim-card{border:1px solid var(--line);border-radius:var(--radius);padding:12px;background:#f2f2f2}.dim-head{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.dim-head input,.dim-head select{flex:1 1 140px;min-width:120px}.cat-block{margin:8px 0 0}.cat-summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:4px 2px;border-radius:4px}.cat-summary::-webkit-details-marker{display:none}.cat-summary:before{content:"";display:inline-block;width:20px;height:20px;flex:0 0 20px;background-color:#fff;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232b6cb0' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M9 6 L15 12 L9 18'/></svg>");background-position:center;background-repeat:no-repeat;background-size:12px 12px;border:1px solid var(--line);border-radius:50%;transition:transform .12s ease,background-color .12s ease}.cat-block[open]>.cat-summary:before{transform:rotate(90deg);background-color:#dce8f6}.cat-count{font-weight:600}.cat-preview{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cat-block[open]>.cats{margin-top:10px}.cats{margin:0;display:flex;flex-direction:column;gap:6px}.cat-row{display:flex;gap:6px;align-items:center}.cat-row input{flex:1;min-width:80px}.cat-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}.layout{display:flex;flex-direction:column;gap:8px}.layout-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:#fbfcfe}.layout-row .dimname{flex:1 1 160px}.axis-badge{font-size:.75rem;padding:2px 8px;border-radius:999px;text-transform:uppercase;letter-spacing:.04em}.axis-badge.rows{background:#e7f0fb;color:#1d4e8a}.axis-badge.cols{background:#fdf0e6;color:#9a4d00}.data-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}@media(max-width:820px){.data-grid{grid-template-columns:1fr}}.data-grid>div{min-width:0}.data-grid textarea{width:100%;resize:vertical}.data-mode-bar{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin:4px 0 14px}.data-mode-bar select{font:inherit}.data-mode-bar #modeInfo{margin:0;flex:1 1 240px}#pasteHelp{margin:4px 0 8px}#dataMessage.error{color:var(--err)}.crosstab-scroll{max-height:65vh;max-width:100%;overflow:auto}table.crosstab{border-collapse:separate;border-spacing:0;border-top:1px solid var(--line);border-left:1px solid var(--line);font-size:.85rem}table.crosstab th,table.crosstab td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:4px 7px;text-align:center;white-space:nowrap}table.crosstab th{background:#f0f3f7;font-weight:600}table.crosstab th.corner{background:#e6ebf2;border-bottom:2px solid var(--line)}table.crosstab tr.colhead th{background:#eaf1f9}table.crosstab td input{width:72px;padding:3px 5px;text-align:right}table.crosstab td.val{text-align:right;color:var(--ink)}table.crosstab td.val:empty:before,.muted.dot{content:none}.output-options{display:flex;gap:18px;align-items:center;flex-wrap:wrap;margin-bottom:12px}.output-options label{flex-direction:row;align-items:center;gap:6px;color:var(--ink)}.value-type-hint{margin:-6px 0 10px}.output-cols{display:grid;grid-template-columns:1.3fr 1fr;gap:18px}@media(max-width:900px){.output-cols{grid-template-columns:1fr}}.output-cols>div{min-width:0}pre.output{background:#0f1521;color:#e6edf3;padding:14px;border-radius:var(--radius);overflow:auto;max-height:420px;font-size:.8rem;white-space:pre-wrap;overflow-wrap:anywhere}pre.output code{background:none;padding:0;border-radius:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:inherit;color:inherit}pre.output .token.property{color:#79c0ff}pre.output .token.string{color:#7ee787}pre.output .token.number{color:#f0883e}pre.output .token.boolean{color:#ff7b72}pre.output .token.null{color:#d2a8ff}pre.output .token.punctuation,pre.output .token.operator{color:#8b949e}.validation{margin:8px 0 14px}.validation .ok{color:var(--ok);font-weight:600}.validation .error{color:var(--err);font-weight:600}.finding{font-size:.85rem;padding:3px 0}.finding.warning{color:var(--warn)}.finding.error{color:var(--err)}.finding code{background:#fdecef;color:var(--err)}footer{padding:14px 20px;text-align:center}.layout-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px}.axis-group{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;background:#fbfcfe}.axis-group h4{margin:0 0 10px;font-size:.85rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.axis-group .layout-row{margin-bottom:6px}@media(max-width:700px){.layout-cols{grid-template-columns:1fr}}dialog.import-dialog{border:1px solid var(--line);border-radius:var(--radius);padding:18px;width:min(92vw,620px);box-shadow:0 12px 40px #0000002e;color:var(--ink)}dialog.import-dialog::backdrop{background:#14192373}dialog.import-dialog h3{margin:0 0 8px}dialog.import-dialog textarea{width:100%;resize:vertical}#importPreview{min-height:1.1em}#importMessage.error{color:var(--err)}.ext-editor{position:relative}.ext-editor .ext-highlight,.ext-editor textarea{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9rem;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;tab-size:2}.ext-editor .ext-highlight{position:absolute;inset:0;pointer-events:none;border:1px solid var(--line);border-radius:6px;padding:7px 9px;background:#fff;overflow:auto}.ext-editor .ext-highlight code{background:none;padding:0;border-radius:0;color:var(--ink);font:inherit;white-space:pre-wrap;overflow-wrap:anywhere}.ext-editor textarea{position:relative;z-index:1;width:100%;color:transparent;caret-color:var(--ink);background:transparent;-webkit-text-fill-color:transparent;resize:vertical}.ext-editor textarea::placeholder{color:var(--muted);-webkit-text-fill-color:var(--muted)}.ext-highlight .token.property{color:#2b6cb0}.ext-highlight .token.string{color:#1a7f37}.ext-highlight .token.number{color:#9a6700}.ext-highlight .token.boolean{color:#cf222e}.ext-highlight .token.null{color:#8250df}.ext-highlight .token.punctuation,.ext-highlight .token.operator{color:#6b7280}#extRootMsg.error,#extDimMsg.error{color:var(--err)}.open-tabs{display:flex;gap:0;border-bottom:1px solid var(--line);margin:4px 0 12px}.open-tab{border:1px solid transparent;border-bottom:none;background:transparent;padding:6px 14px;border-radius:6px 6px 0 0;cursor:pointer;color:var(--muted);font:inherit;font-size:.88rem}.open-tab[aria-selected=true]{background:var(--panel);color:var(--ink);border-color:var(--line);margin-bottom:-1px}.open-endpoint-row{display:flex;gap:8px;align-items:center;margin-bottom:8px}.open-endpoint-row input.open-url{flex:1}#openPayloadWrap{margin-bottom:8px}#openPayloadWrap textarea{width:100%;resize:vertical}button.link{background:none;border:none;color:var(--accent);padding:0;cursor:pointer;text-decoration:underline;font:inherit;font-size:.8rem}button.link:hover{color:#25598f}dialog.unit-dialog{border:1px solid var(--line);border-radius:var(--radius);padding:18px;width:min(94vw,720px);box-shadow:0 12px 40px #0000002e;color:var(--ink)}dialog.unit-dialog::backdrop{background:#14192373}dialog.unit-dialog h3{margin:0 0 8px}.unit-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 0;border-top:1px solid var(--line)}.unit-row:first-child{border-top:none}.unit-cat{flex:0 0 160px;font-size:.85rem}.unit-cat .muted{font-size:.78rem}.unit-row input,.unit-row select{font-family:inherit;font-size:.85rem;padding:7px 9px}.unit-row input[type=number]{width:96px}.unit-row input[type=text]{flex:1 1 140px;min-width:120px}.unit-row select{flex:0 0 auto}.status-panel{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin:14px 0;background:#fbfcfe}.status-panel summary{cursor:pointer}.status-code{display:flex;gap:6px;align-items:center;margin:6px 0}.status-code input{flex:1;min-width:80px}.status-panel .actions{margin-top:8px;flex-wrap:wrap}label.inline{display:inline-flex;align-items:center;gap:6px;font-size:.85rem;color:var(--muted)}.cell-stack{display:flex;flex-direction:column;align-items:flex-end;gap:2px}.cell-status{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:2px;font-size:.7rem}.cell-status select{font-size:.7rem;padding:1px 2px;min-width:36px}.status-chips{display:inline-flex;flex-wrap:wrap;gap:2px}.status-chip{display:inline-flex;align-items:center;gap:2px;padding:0 4px;border-radius:8px;background:var(--warn-bg, rgba(220,150,0,.15));color:var(--warn, #b80);font-weight:600;font-size:.66rem;line-height:1.5}.status-chip.locked{opacity:.6;font-style:italic}.status-chip-x{border:none;background:none;cursor:pointer;color:inherit;font-size:.66rem;padding:0;line-height:1}.status-baseline{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px}.status-baseline select{font-size:.85rem}.status-paste{margin-top:10px}.status-paste textarea{width:100%;resize:vertical}#statusMessage.error{color:var(--err)}.crosstab td.val.has-status{white-space:nowrap}.status-flag{font-size:.62rem;color:var(--warn);margin-left:2px;vertical-align:super;font-weight:600}.tiny{font-size:.72rem}.val-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:6px 0 10px}.badge{font-size:.72rem;font-weight:600;padding:2px 8px;border-radius:999px;border:1px solid var(--line);background:#f0f3f7;color:var(--ink);white-space:nowrap}.badge-engine{background:#e7f0fb;color:#1d4e8a;border-color:#cfe0f5}.badge-builtin{background:#fdf0e6;color:#9a4d00;border-color:#f3ddc6}.badge-ok{background:#e7f6ec;color:var(--ok);border-color:#c7e8d2}.badge-err{background:#fdecef;color:var(--err);border-color:#f5cdd3}.badge-warn{background:#fff6e6;color:var(--warn);border-color:#f1e0bd}.badge-pass{background:#eef1f5;color:var(--muted);border-color:var(--line);text-transform:uppercase;letter-spacing:.03em}.finding{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.finding .muted.tiny{margin-left:auto}.fs-wrap{position:relative}.fs-btn{position:absolute;top:6px;right:6px;z-index:5;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:1px solid var(--line);background:#ffffffd9;border-radius:6px;cursor:pointer;color:var(--ink);opacity:.55;transition:opacity .15s ease}.fs-btn:hover,.fs-btn:focus-visible{opacity:1;outline:2px solid #bcd6f1;outline-offset:1px}.fs-btn svg{width:16px;height:16px;display:block;pointer-events:none}.fs-wrap.on-dark .fs-btn{background:#0f1521bf;border-color:#2a3550;color:#e6edf3;opacity:.7}.fs-wrap.on-dark .fs-btn:hover,.fs-wrap.on-dark .fs-btn:focus-visible{opacity:1}.fs-wrap:fullscreen,.fs-wrap:-webkit-full-screen{width:100vw;height:100vh;max-width:none;max-height:none;background:var(--bg);padding:24px;display:flex;flex-direction:column;gap:12px;overflow:auto}.fs-wrap:fullscreen .fs-btn,.fs-wrap:-webkit-full-screen .fs-btn{opacity:.9}.fs-wrap:fullscreen>textarea,.fs-wrap:fullscreen>pre,.fs-wrap:fullscreen>div,.fs-wrap:-webkit-full-screen>textarea,.fs-wrap:-webkit-full-screen>pre,.fs-wrap:-webkit-full-screen>div{flex:1 1 auto;width:100%;min-height:0;overflow:auto}.fs-wrap:fullscreen>textarea,.fs-wrap:-webkit-full-screen>textarea{height:100%;resize:none}.fs-wrap:fullscreen pre.output,.fs-wrap:-webkit-full-screen pre.output{max-height:none}.fs-wrap:fullscreen .crosstab,.fs-wrap:-webkit-full-screen .crosstab{margin:0 auto}.fs-wrap:fullscreen .crosstab-scroll,.fs-wrap:-webkit-full-screen .crosstab-scroll{max-height:none;max-width:none;overflow:visible}.toast{position:fixed;right:16px;bottom:16px;z-index:1000;max-width:320px;padding:8px 12px;border-radius:var(--radius);border:1px solid var(--err);background:#fff5f5;color:var(--err);font-size:.85rem;box-shadow:0 2px 10px #00000026;visibility:hidden;opacity:0;transform:translateY(8px);transition:opacity .15s ease,transform .15s ease,visibility .15s ease}.toast.show{visibility:visible;opacity:1;transform:translateY(0)}
