:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--bg:#f5f5f3;--panel:#fff;--text:#1d1d1b;--muted:#5f605c;--line:#e2e2de;--line-strong:#c2c2bc;--field:#fff;--focus-ring:#1d1d1b;--ok:#2e7d4f;--warn:#b8392a;--accent:#3a5ba0;--accent-text:#fff;--stage:#ebebe7;--sans:system-ui, -apple-system, "Segoe UI", "Microsoft JhengHei UI", "Microsoft JhengHei", "PingFang TC", "Noto Sans TC", Roboto, sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#141414;--panel:#1b1b1b;--text:#ededeb;--muted:#a3a4a0;--line:#2a2a29;--line-strong:#454543;--field:#101010;--focus-ring:#ededeb;--ok:#6fcf97;--warn:#ef7b69;--accent:#7f9bd8;--accent-text:#0e0e0e;--stage:#222221}}[hidden]{display:none!important}*{box-sizing:border-box}html,body{min-height:100%;margin:0}body{background:var(--bg);color:var(--text);font:14px/1.5 var(--sans);font-variant-numeric:tabular-nums}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px;box-shadow:0 0 0 5px color-mix(in srgb, var(--accent) 40%, transparent)}.topbar{background:var(--panel);border-bottom:1px solid var(--line);align-items:center;gap:6px 16px;min-height:48px;padding:8px 16px;display:flex}.brand{letter-spacing:.01em;font-weight:700}.brand:before{content:"";vertical-align:-1px;border:1.5px solid var(--text);background:linear-gradient(115deg, transparent 46%, var(--text) 46% 54%, transparent 54%);border-radius:50%;width:12px;height:12px;margin-right:8px;display:inline-block}.tagline{color:var(--muted)}.spacer{flex:1}.lang{border:1px solid var(--line-strong);border-radius:5px;display:inline-flex;overflow:hidden}.lang button{cursor:pointer;background:0 0;border:0;border-radius:0;padding:3px 10px}.lang button[aria-pressed=true]{background:var(--text);color:var(--bg);font-weight:600}.workspace{grid-template-columns:330px minmax(0,1fr) 300px;grid-template-areas:"params views export";min-height:calc(100vh - 49px);display:grid}.col{min-width:0}.params{grid-area:params}.views{grid-area:views;padding:4px 18px 24px;container-type:inline-size}.export{grid-area:export}.params,.export{background:var(--panel);max-height:calc(100vh - 49px);padding:4px 16px 24px;position:sticky;top:0;overflow-y:auto}.params{border-right:1px solid var(--line)}.export{border-left:1px solid var(--line)}.loading,.notice{color:var(--muted);margin:0;padding:16px}@media (max-width:1179px){.workspace{grid-template-columns:330px minmax(0,1fr);grid-template-areas:"params views""params export"}.export{border-left:0;border-top:1px solid var(--line);max-height:none;position:static}}@media (max-width:759px){.workspace{grid-template-columns:minmax(0,1fr);grid-template-areas:"views""params""export"}.params,.export{border:0;border-top:1px solid var(--line);max-height:none;position:static}.views{padding:4px 10px 20px}.tagline{display:none}}.group{padding:12px 0 14px}.group+.group{border-top:1px solid var(--line)}.group h3{margin:4px 0 10px;font-size:14px;font-weight:700}.group h4{color:var(--muted);margin:14px 0 8px;font-size:13px;font-weight:600}.field{flex-direction:column;gap:3px;min-width:0;margin:0 0 9px;display:flex}.field>label{color:var(--muted);font-size:12.5px}.field.check{flex-direction:row;align-items:flex-start;gap:8px}.field.check>input{margin-top:3px}.field.check>label{color:var(--text);font-size:13.5px}.control{align-items:center;gap:6px;min-width:0;display:flex}.control>input[type=number],.control>select,.control>input[type=text]{flex:1;min-width:0}.control>input[type=range]{min-width:0;accent-color:var(--accent);flex:1}.unit,.num-out{color:var(--muted);min-width:28px;font-size:12.5px}input[type=number],input[type=text],select{background:var(--field);border:1px solid var(--line-strong);border-radius:4px;height:30px;padding:4px 7px}.pair{grid-template-columns:1fr 1fr;align-items:end;gap:0 10px;display:grid}.hint,.muted{color:var(--muted);margin:4px 0 8px;font-size:12.5px}.status,.stats{color:var(--muted);min-height:1.5em;margin:6px 0;font-size:12.5px}.issues{color:var(--warn);margin:6px 0 0;padding-left:18px;font-size:12.5px}.row{align-items:center;gap:8px;display:flex}.row.wrap{flex-wrap:wrap}.row.end{justify-content:flex-end}.row.spread{flex-wrap:wrap;justify-content:space-between}.stack{flex-direction:column;gap:6px;margin-bottom:10px;display:flex}progress{width:100%;height:6px;accent-color:var(--accent);margin-top:8px}button{background:var(--field);border:1px solid var(--line-strong);cursor:pointer;text-align:left;border-radius:5px;padding:5px 12px}button:hover:not(:disabled){border-color:var(--text)}button:disabled{opacity:.5;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text);font-weight:600}button.link{color:var(--accent);background:0 0;border:0;padding:0;text-decoration:underline}.segmented{border:1px solid var(--line-strong);border-radius:5px;flex-wrap:wrap;display:inline-flex;overflow:hidden}.segmented button{border:0;border-radius:0;padding:4px 10px}.segmented button+button{border-left:1px solid var(--line-strong)}.segmented button[aria-checked=true],.segmented button[aria-selected=true],.segmented button[aria-pressed=true]{background:var(--text);color:var(--bg)}#toast{background:var(--text);color:var(--bg);z-index:20;border-radius:6px;max-width:min(560px,100vw - 24px);padding:8px 16px;position:fixed;bottom:18px;left:50%;transform:translate(-50%)}#toast.error{background:var(--warn);color:#fff}#drop-overlay{background:color-mix(in srgb, var(--accent) 18%, transparent);border:3px dashed var(--accent);z-index:30;place-items:center;font-size:20px;font-weight:600;display:grid;position:fixed;inset:0}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}:root{--ring:#1d1d1b8c}@media (prefers-color-scheme:dark){:root{--ring:#ededeb99}}h2.step{align-items:center;gap:8px;margin:6px 0 12px;font-size:15px;font-weight:700;display:flex}.step-no{background:var(--text);width:22px;height:22px;color:var(--bg);border-radius:50%;place-items:center;font-size:12.5px;font-weight:700;display:inline-grid}details.group>summary{cursor:pointer;margin:4px 0 6px;font-size:14px;font-weight:700}details.group[open]>summary{margin-bottom:10px}.source{overflow-wrap:anywhere;margin:8px 0 0;font-size:13px}.advice{color:var(--warn);margin:6px 0;font-size:13px}.crop-tools{margin-top:10px}button.big{padding:9px 16px;font-size:15px}button.icon{text-align:center;min-width:28px;padding:2px 7px}.issues li.plain{color:var(--muted);margin-left:-18px;list-style:none}input[type=color]{border:1px solid var(--line-strong);background:0 0;border-radius:4px;flex:none;width:34px;height:28px;padding:0}input.hex{font-variant-numeric:tabular-nums;text-transform:uppercase;flex:none;width:84px}.threads{counter-reset:thread;flex-direction:column;gap:6px;margin:0 0 8px;padding:0;list-style:none;display:flex}.thread{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:5px;padding-top:6px;display:flex}.thread:first-child{border-top:0;padding-top:0}.thread .grip{cursor:grab;width:14px;color:var(--muted);-webkit-user-select:none;user-select:none}.thread .thread-name{flex:90px;min-width:0}.thread .budget{width:88px;margin-left:19px}.dot{border:1px solid var(--line-strong);vertical-align:-1px;border-radius:50%;width:11px;height:11px;margin-right:4px;display:inline-block}.dots .dot{margin-right:2px}.order-scores{color:var(--muted);margin:6px 0;padding-left:22px;font-size:12.5px}.order-scores li:first-child{color:var(--text);font-weight:600}.order-scores li{display:list-item}.order-scores li>span+span{margin-left:8px}.order-tools{margin-top:8px}.tabs{margin:10px 0 8px}.view-tools{flex-wrap:wrap;align-items:flex-end;gap:4px 18px;margin-bottom:4px;display:flex}.view-tools .field{min-width:150px;margin-bottom:4px}.banner{background:color-mix(in srgb, var(--warn) 12%, var(--panel));border:1px solid var(--warn);border-radius:6px;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:6px 0;padding:6px 10px;font-size:13px;display:flex}.stage{background:var(--stage);border-radius:8px;min-height:260px;margin-top:6px;padding:0;position:relative}.stage-canvas{touch-action:none;border-radius:8px;width:100%;display:block}.stage-canvas.pan{cursor:grab}.stage-canvas.brush{cursor:crosshair}.stage .empty{color:var(--muted);pointer-events:none;text-align:center;place-items:center;margin:0;padding:16px;display:grid;position:absolute;inset:0}.lens{border:2px solid var(--text);pointer-events:none;background:#fff;border-radius:50%;width:220px;height:220px;position:absolute;box-shadow:0 4px 18px #00000059}.legend{color:var(--muted);min-height:1.5em;margin:6px 0;font-size:12.5px}.empty{color:var(--muted)}.metrics{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;margin:10px 0;display:grid}.metrics .card{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:6px 10px}.metrics .card.wide{grid-column:1/-1}.metrics dt{color:var(--muted);font-size:12px}.metrics dd{margin:0;font-size:17px;font-weight:600}.metrics dd.line-counts{flex-wrap:wrap;gap:4px 14px;font-size:15px;display:flex}.materials{border-collapse:collapse;width:100%;margin-bottom:10px;font-size:13px}.materials th{text-align:left;padding:3px 6px 3px 0;font-weight:400}.materials td{text-align:right;white-space:nowrap;padding:3px 0 3px 6px}.materials tr.total th,.materials tr.total td{border-top:1px solid var(--line-strong);font-weight:600}.materials th{white-space:nowrap}.materials td.detail{white-space:normal;color:var(--muted);padding-top:0}.stack button{width:100%}dialog.player{border:1px solid var(--line-strong);background:var(--panel);width:min(880px,100vw - 16px);max-height:calc(100vh - 16px);color:var(--text);border-radius:10px;padding:14px 18px 16px}dialog.player::backdrop{background:#0000008c}.player-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.player-colour{flex-wrap:wrap;align-items:center;gap:10px;font-size:15px;display:flex}.player-swatch{border:1px solid var(--line-strong);border-radius:4px;width:44px;height:22px}.player-thread{font-weight:700}.player-count{color:var(--muted)}.player-body{grid-template-columns:minmax(0,1fr) 280px;align-items:center;gap:12px 24px;margin:8px 0;display:grid}.player-main{text-align:center;min-width:0}.player-note{color:var(--muted);min-height:1.5em;margin:0}.player-label{color:var(--muted);margin-top:6px;font-size:15px;display:block}.player-pin{color:var(--accent);font-variant-numeric:tabular-nums;font-size:clamp(88px,22vw,210px);font-weight:700;line-height:1;display:block}.player-pin.done{padding:30px 0;font-size:clamp(36px,8vw,64px)}.player-clock{margin:4px 0;font-size:20px}.player-then{color:var(--muted);min-height:1.5em;margin:0}.player-map{width:280px;height:280px}.player-maps{justify-items:center;gap:6px;display:grid}.player-near{border:1px solid var(--line);border-radius:4px;width:220px;height:220px}.player-near-label{text-align:center;margin:0}.player-status{text-align:center;color:var(--muted);margin:6px 0 10px}.player-buttons{grid-template-columns:1fr 2fr;gap:10px;display:grid}.player-buttons button{text-align:center;padding:16px;font-size:18px}.player-jump{flex-wrap:wrap;margin-top:12px;font-size:13px}.player-jump input{width:90px}@media (max-width:640px){.player-body{grid-template-columns:minmax(0,1fr)}.player-map{width:180px;height:180px;margin:0 auto}}.run{padding:12px 0 2px}.run .row{gap:8px 14px}.run progress{width:180px;margin:0}.run .status{min-height:0;margin:0}.run .issues{margin-top:8px}.shelf-box h4{margin-top:10px}.shelf{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.chip{border:1px solid var(--line-strong);border-radius:14px;display:inline-flex;overflow:hidden}.chip button{background:var(--field);border:0;border-radius:0;padding:2px 8px;font-size:12.5px}.chip .chip-remove{color:var(--muted);padding:2px 7px 2px 4px}.gamut{border-top:1px solid var(--line);margin-top:12px;padding-top:2px}.gamut-status{margin:0 0 6px;font-size:13px}.gamut-status.warn{color:var(--warn)}.gamut-list{color:var(--muted);flex-direction:column;gap:4px;margin:0 0 8px;padding:0;font-size:12.5px;list-style:none;display:flex}.gamut-list li{align-items:center;gap:6px;display:flex}.swatch{border:1px solid var(--line-strong);border-radius:3px;flex:none;width:26px;height:16px;display:inline-block}.gamut .row{margin-bottom:8px}dialog.sheet{border:1px solid var(--line-strong);background:var(--panel);width:min(680px,100vw - 16px);max-height:calc(100vh - 16px);color:var(--text);border-radius:10px;padding:14px 18px 16px}dialog.sheet::backdrop{background:#0000008c}dialog.sheet h2{margin:0;font-size:16px}.calib-steps{margin:10px 0;padding-left:20px;font-size:13px}.calib-steps li{margin-bottom:4px}.calib-photo{background:var(--stage);border-radius:8px;place-items:center;min-height:120px;margin:10px 0;display:grid;position:relative;overflow:hidden}.calib-canvas{touch-action:none;cursor:crosshair;max-width:100%;display:block}.calib-photo .empty{margin:0;padding:16px}.calib-result{min-height:1.5em;margin:4px 0;font-size:14px;font-weight:600}.calib-result.warn{color:var(--warn);font-weight:400}.player-voice{margin-top:8px;font-size:13px}.player-voice .field,.player-voice .hint{margin:0}.frame-advice{margin:4px 0 8px}.frame-advice .advice{margin-top:0}.tune .blank{border-top:1px solid var(--line);margin-top:10px;padding-top:8px}.tune .blank .advice{margin-top:0}
