:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0e0e11;--panel:#17171c;--panel-2:#1e1e25;--inset:#101014;--border:#2a2a33;--border-soft:#212129;--text:#e6e6ea;--label:#c3c3cd;--muted:#8b8b96;--faint:#60606b;--accent:#e8b34b;--accent-dim:#9c7a35;--ok:#8ac79b;--warn:#e06c6c;--radius:10px;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}body{color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;margin:0;font:14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}#app{align-items:stretch;min-height:100vh;display:flex}#controls{overscroll-behavior:contain;border-right:1px solid var(--border-soft);background:linear-gradient(#141419 0%,#111114 100%);flex:none;width:316px;height:100vh;padding:20px 14px 32px;position:sticky;top:0;overflow-y:auto}#controls::-webkit-scrollbar{width:10px}#controls::-webkit-scrollbar-thumb{background:#2a2a33 padding-box content-box;border:3px solid #0000;border-radius:5px}.brand{align-items:center;gap:11px;margin:4px 4px 18px;display:flex}.brand svg{flex:none;width:30px;height:30px}.brand h1{letter-spacing:-.01em;margin:0;font-size:15px;font-weight:650}.brand p{color:var(--faint);letter-spacing:.04em;margin:0;font-size:11.5px}.panel{background:var(--panel);border:1px solid var(--border-soft);border-radius:var(--radius);margin-bottom:12px;padding:13px 13px 10px}.panel>h2{text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin:0 0 8px;font-size:10.5px;font-weight:650}.panel label{color:var(--label);justify-content:space-between;align-items:center;gap:10px;padding:3px 0;font-size:13px;display:flex}.u,.u2{color:var(--faint);margin-left:3px;font-size:11px}input[type=number],select{background:var(--inset);color:var(--text);border:1px solid var(--border);font:inherit;border-radius:7px;padding:5px 8px;font-size:13px}input[type=number]{text-align:right;font-variant-numeric:tabular-nums;width:88px}select{min-width:88px}input:hover,select:hover{border-color:#35353f}button{font:inherit;color:var(--text);background:var(--panel-2);border:1px solid var(--border);cursor:pointer;border-radius:8px;padding:6px 12px;font-size:13px;transition:background .12s,border-color .12s}button:hover{background:#262630;border-color:#383844}button.primary,label.primary{background:var(--accent);color:#201503;cursor:pointer;border:1px solid #0000;border-radius:8px;padding:8px 18px;font-size:13px;font-weight:600;display:inline-block}button.primary:hover,label.primary:hover{background:#f3c15c}input:focus-visible,select:focus-visible,button:focus-visible,label:focus-visible,.dropzone:focus-visible{outline:2px solid var(--accent);outline-offset:1px}input[type=file]{color:var(--muted);width:100%;font-size:11.5px}input[type=file]::file-selector-button{font:inherit;color:var(--text);background:var(--panel-2);border:1px solid var(--border);cursor:pointer;border-radius:7px;margin-right:8px;padding:5px 10px;font-size:12px}input[type=file]::file-selector-button:hover{background:#262630}.linkish{color:var(--accent)}.dropzone{background:var(--panel);cursor:pointer;border:1.5px dashed #3a3a46;border-radius:14px;transition:border-color .15s,background .15s,transform .1s}.dropzone:hover,.dropzone.drag{border-color:var(--accent);background:#1b1a20}.dropzone.drag{transform:scale(1.01)}.dropzone.nope{border-color:var(--warn)}.dropzone.small{color:var(--muted);text-align:center;border-radius:9px;margin-bottom:8px;padding:12px;font-size:12.5px}body:not(.loaded) #controls,body:not(.loaded) #loadedState{display:none}body:not(.loaded) #preview{justify-content:center;align-items:center;display:flex}body.loaded #emptyState{display:none}#emptyState{text-align:center;max-width:460px;padding:24px}.hero-mark{width:54px;height:54px}#emptyState h1{letter-spacing:-.015em;margin:16px 0 8px;font-size:23px;font-weight:650}#emptyState .lede{color:var(--muted);margin:0 0 28px}#dropzone{padding:38px 26px 26px}#dropzone>svg{width:30px;height:30px;color:var(--muted)}#dropzone p{margin:12px 0 0}#dropzone .muted{color:var(--faint);margin:10px 0;font-size:12px}#dropzone .hint{color:var(--faint);margin-top:20px;font-size:12px}#preview{flex:1;min-width:0;padding:28px 32px}#loadedState{flex-wrap:wrap;align-items:flex-start;gap:32px;display:flex}#preview h2{text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin:0 0 10px;font-size:10.5px;font-weight:650}#patternPane{flex:560px;min-width:0}#patternPane h2:not(:first-child){margin-top:26px}#platesPane{flex:300px;min-width:0}canvas{background:#fff;border-radius:8px;max-width:100%;box-shadow:0 1px #ffffff0d,0 10px 28px #0006}#piecesCanvas{cursor:pointer;width:100%;box-shadow:none;background:0 0}#paletteHost{flex-wrap:wrap;gap:7px;display:flex}.swatch{color:var(--label);background:var(--panel);border:1px solid var(--border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:999px;align-items:center;gap:8px;padding:5px 12px 5px 6px;font-size:12px;transition:border-color .12s,background .12s;display:flex}.swatch:hover{border-color:var(--accent-dim);background:var(--panel-2)}.chip{border:1px solid #00000073;border-radius:50%;width:16px;height:16px;display:inline-block}.swatch.off{opacity:.45}.swatch.off .chip{opacity:.4}#plates{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;display:grid}.plate{flex-direction:column;gap:6px;display:flex}.plate span{color:var(--muted);font-size:11.5px;font-family:var(--mono)}#status{font-family:var(--mono);color:var(--ok);background:var(--inset);border:1px solid var(--border-soft);white-space:pre-line;border-radius:8px;margin:4px 0 12px;padding:10px 12px;font-size:11px;line-height:1.6}#status:empty{display:none}#downloads{gap:6px;display:grid}#downloads button{text-align:left;font-family:var(--mono);padding:7px 10px;font-size:12px}.calibBtns{flex-wrap:wrap;gap:6px;display:flex}.calibBtns button{font-family:var(--mono);font-size:11.5px}.calibSteps{color:var(--muted);margin:10px 0;padding-left:18px;font-size:11.5px}.calibSteps li{margin-bottom:3px}.calibLines{font-family:var(--mono);white-space:pre-wrap;color:var(--ok);margin-top:10px;font-size:11px}#calibResult button{margin-top:8px;font-size:12px}#calibCanvas{border-radius:6px;width:100%;margin-top:10px;display:block}#calibCanvas:not([width]){display:none}#calibPhoto{margin-top:4px}@media (width<=920px){#app{flex-direction:column}#controls{overscroll-behavior:auto;border-right:0;border-bottom:1px solid var(--border-soft);width:auto;height:auto;position:static;overflow-y:visible}#preview{padding:18px}}
