:root{--bg: #14161c;--panel: #1c1f28;--panel2: #232735;--line: #323848;--ink: #e8eaf2;--dim: #8b93a7;--amber: #f0a838;--amber-dim: #8a6420;--ok: #5ec98a;--warn: #e2635d;--focus: #7aa2f7;font-size:15px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:IBM Plex Sans,system-ui,-apple-system,sans-serif;line-height:1.45}code,.mono,td.num,.pill,kbd{font-family:IBM Plex Mono,ui-monospace,Menlo,Consolas,monospace}kbd{border:1px solid var(--line);border-bottom-width:2px;border-radius:4px;padding:0 4px;font-size:11px;background:var(--panel2)}header{padding:20px 28px 8px;display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}header h1{font-size:20px;margin:0;letter-spacing:.4px;font-weight:500}header h1 b{color:var(--amber);font-weight:600}header .sub,header .privacy{color:var(--dim);font-size:13px}header .privacy{border:1px solid var(--line);border-radius:10px;padding:1px 10px}.spacer{flex:1 1 auto}main{display:grid;grid-template-columns:minmax(320px,420px) 1fr;gap:16px;padding:16px 28px 40px;align-items:start}@media(max-width:980px){main{grid-template-columns:1fr}}section{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px}section h2{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin:0 0 12px;display:flex;align-items:center;gap:8px}section h3{font-size:13px;margin:0;font-weight:500}section h2 .step{color:var(--amber);font-weight:600}.stack{display:flex;flex-direction:column;gap:16px}label{font-size:13px;color:var(--dim)}label.check{display:flex;align-items:baseline;gap:8px;font-size:13px;color:var(--ink);flex-wrap:wrap}input[type=number]{width:68px;background:var(--panel2);border:1px solid var(--line);color:var(--ink);border-radius:6px;padding:5px 7px;font:inherit;font-size:13px}input:focus-visible,button:focus-visible,canvas:focus-visible{outline:2px solid var(--focus);outline-offset:1px}.gridcfg{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}#cells{display:grid;gap:6px}.cell{position:relative;border:1px dashed var(--line);border-radius:8px;background:var(--panel2);min-height:78px;display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;transition:border-color .12s}.cell:hover,.cell.drag{border-color:var(--amber)}.cell.filled{border-style:solid}.cell.ref{box-shadow:inset 0 0 0 1px var(--amber-dim)}.cell canvas{width:100%;height:100%;object-fit:cover;display:block;opacity:.9}.cell .tag{position:absolute;left:6px;top:6px;background:#000a;color:var(--ink);font-size:11px;padding:2px 6px;border-radius:4px;pointer-events:none}.cell .drop{position:absolute;right:4px;top:4px;background:#000a;border:0;color:var(--warn);font-size:13px;line-height:1;padding:3px 6px;border-radius:4px;cursor:pointer}.cell .empty{color:var(--dim);font-size:12px;pointer-events:none;padding:4px;text-align:center}.modes{display:flex;gap:6px;margin-bottom:10px;align-items:center;flex-wrap:wrap}.modes button,.btn{background:var(--panel2);border:1px solid var(--line);color:var(--ink);border-radius:7px;padding:6px 12px;font:inherit;font-size:13px;cursor:pointer}.modes button[aria-pressed=true]{border-color:var(--amber);color:var(--amber)}.btn.ghost,.modes button.ghost{color:var(--dim)}.btn.ghost:hover,.modes button.ghost:hover{color:var(--ink)}.btn.primary{background:var(--amber);border-color:var(--amber);color:#1a1405;font-weight:600;padding:9px 18px;font-size:14px}.btn.primary:disabled{background:var(--amber-dim);border-color:var(--amber-dim);cursor:not-allowed;color:#0008}.btn[hidden]{display:none}.zoomlabel{font-size:12px;color:var(--dim);min-width:46px;text-align:right}#cropWrap{position:relative;user-select:none;touch-action:none}#cropCanvas{width:100%;display:block;border-radius:6px;background:#0a0c12;cursor:crosshair}#cropCanvas.panning{cursor:grab}#cropWrap .readout{position:absolute;right:6px;bottom:6px;background:#000b;color:var(--dim);font-size:11px;padding:2px 7px;border-radius:4px;pointer-events:none}.hint{font-size:12.5px;color:var(--dim);margin-top:8px}.workfields{display:flex;gap:8px;align-items:center;margin-top:10px;flex-wrap:wrap}.masklist{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px}.masklist li{display:flex;align-items:center;gap:6px;background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:2px 4px 2px 8px;font-size:12px}.masklist button{background:none;border:0;color:var(--warn);cursor:pointer;font-size:14px;padding:2px 6px}#progress{height:6px;background:var(--panel2);border-radius:3px;overflow:hidden;margin:12px 0 4px}#progress i{display:block;height:100%;width:0;background:var(--amber);transition:width .15s}#status{font-size:13px;color:var(--dim);min-height:18px;margin-top:8px}#status.warn{color:var(--warn)}table{border-collapse:collapse;width:100%;font-size:13px;margin-top:10px}th,td{text-align:left;padding:5px 10px 5px 0;border-bottom:1px solid var(--line)}th{color:var(--dim);font-weight:500;font-size:12px}td.num{text-align:right;padding-right:18px;font-family:IBM Plex Mono,ui-monospace,Menlo,Consolas,monospace}.pill{font-size:12px;padding:1px 8px;border-radius:10px}.pill.ok{color:var(--ok);border:1px solid var(--ok)}.pill.bad{color:var(--warn);border:1px solid var(--warn)}#outWrap{margin-top:14px}.outhead{display:flex;gap:12px;align-items:baseline;flex-wrap:wrap;margin-bottom:6px}.outhead .hint{margin:0}#outScroll{max-height:70vh;overflow:auto;border-radius:6px;background:#fff}#outCanvas{width:100%;display:block}.rowline{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}.dbg{margin-top:14px;border:1px solid var(--line);border-radius:8px;overflow:hidden}.dbghead{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:6px 10px;background:var(--panel2);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim)}.dbghead .btn{padding:3px 10px;font-size:12px;text-transform:none;letter-spacing:0}.dbg pre{margin:0;padding:10px 12px;font-size:12px;line-height:1.5;max-height:300px;overflow:auto;background:var(--panel);color:var(--dim)}.sessions{margin-top:10px}.sessions details{border-top:1px solid var(--line);padding:6px 0}.sessions summary{cursor:pointer;font-size:12.5px;display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}.sessions summary .when{color:var(--dim)}.sessions pre{margin:6px 0 0;font-size:11.5px;color:var(--dim);max-height:220px;overflow:auto}.empty-note{font-size:12.5px;color:var(--dim);margin:8px 0 0}
