:root{--ink:#2b3344;--ink-soft:#5b6478;--cloud-1:#eef1f6;--cloud-2:#d9e3f3;--paper:#fbf9f4;--paper-line:#e4ddcf;--line:#c9d2e0;--ignition:#ff8c5a;--ignition-dark:#e8703f;--signal:#46d6c0;--signal-glow:#46d6a0;--danger:#ff5a5a;--radius-lg:18px;--radius-md:12px;--shadow-soft:0 8px 24px #2b334414;--shadow-pop:0 14px 34px #2b33442e;--shadow-up:0 -8px 28px #2b334424;--font-display:"Space Grotesk", "Segoe UI", system-ui, sans-serif;--font-body:"Manrope", "Segoe UI", system-ui, sans-serif;--ease:cubic-bezier(.2, .8, .2, 1);--topbar-h:56px;--sheet-h:0px;--safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px);--safe-l:env(safe-area-inset-left,0px);--safe-r:env(safe-area-inset-right,0px);--touch:44px}*{box-sizing:border-box}body.workshop{font-family:var(--font-body);color:var(--ink);background:linear-gradient(160deg, var(--cloud-1) 0%, var(--cloud-2) 100%);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior:none;overflow:hidden}body.workshop.dragging,body.workshop.dragging *{user-select:none;cursor:grabbing!important}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:200;background:var(--ink);color:#fff;border-radius:999px;padding:8px 14px;font-size:14px;font-weight:700;position:absolute;top:-48px;left:12px}.skip-link:focus{top:calc(var(--safe-t) + 8px)}#workshop{flex-direction:column;height:100dvh}#ws-topbar{min-height:var(--topbar-h);padding:max(8px, var(--safe-t)) max(12px, var(--safe-r)) 8px max(12px, var(--safe-l));backdrop-filter:blur(10px);z-index:8;background:#ffffffb8;border-bottom:1px solid #2b334414;flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;display:flex}.brand{flex:1;align-items:baseline;gap:8px;min-width:0;display:flex;overflow:hidden}.brand-name{white-space:nowrap}.brand-mark{color:var(--ignition);flex-shrink:0;font-size:16px}#ws-topbar h1{font-family:var(--font-display);letter-spacing:.01em;align-items:baseline;gap:8px;min-width:0;margin:0;font-size:16px;font-weight:600;display:flex}.brand-sub{font-family:var(--font-body);color:var(--ink-soft);letter-spacing:.04em;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.topbar-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.ghost-btn{font-family:var(--font-body);min-height:var(--touch);min-width:var(--touch);border:1.5px solid var(--line);color:var(--ink-soft);cursor:pointer;background:#fff;border-radius:999px;justify-content:center;align-items:center;gap:6px;padding:8px 12px;font-size:13px;font-weight:600;transition:border-color .15s,color .15s,background-color .15s,transform .15s;display:inline-flex}.ghost-btn svg{flex-shrink:0}.ghost-btn:active{transform:translateY(1px)}.ghost-btn:focus-visible{outline:2px solid var(--ignition);outline-offset:2px}.ghost-btn:disabled{opacity:.4;cursor:default}@media (hover:hover) and (pointer:fine){.ghost-btn:hover{border-color:var(--ignition);color:var(--ignition-dark);background:#ff8c5a14}}@media (width<=479px){.ghost-btn .btn-label{display:none}.ghost-btn{padding:8px}.brand-sub{display:none}}@media (width<=959.98px){.layer-dot .dot-label{display:none}.layer-dot.active .dot-label{display:inline}}#main{flex:1;min-height:0;position:relative}#assembly-panel{top:0;left:0;right:0;bottom:var(--sheet-h);z-index:0;position:absolute}#assembly-panel:after{content:"";pointer-events:none;background:radial-gradient(120% 90% at 50% 38%,#0000 58%,#2b33441a 100%);position:absolute;inset:0}#assembly-canvas{cursor:grab;touch-action:none;width:100%;height:100%;display:block}#camera-hint,#control-hint{z-index:1;color:var(--ink-soft);backdrop-filter:blur(4px);box-shadow:var(--shadow-soft);pointer-events:none;background:#fffc;border-radius:999px;margin:0;padding:7px 12px;font-size:12px;font-weight:600;position:absolute}#camera-hint{left:max(12px, var(--safe-l));opacity:0;transition:opacity .35s var(--ease);top:12px}#camera-hint.show{opacity:1}#control-hint{right:max(12px, var(--safe-r));top:12px}.fit-hint{z-index:3;left:50%;bottom:calc(var(--sheet-h) + 84px);background:var(--ink);color:#fff;box-shadow:var(--shadow-pop);pointer-events:none;border-radius:999px;margin:0;padding:8px 14px;font-size:13px;font-weight:700;position:absolute;transform:translate(-50%)}#rotate-fab{z-index:4;top:12px;right:max(14px, var(--safe-r));background:var(--ink);color:#fff;min-width:52px;min-height:52px;font-family:var(--font-body);box-shadow:var(--shadow-pop);cursor:pointer;touch-action:none;border:none;border-radius:999px;justify-content:center;align-items:center;gap:8px;padding:14px;font-size:15px;font-weight:700;transition:background-color .15s,transform .15s,box-shadow .15s;display:none;position:absolute;bottom:auto;left:auto;transform:none}@media (width<=959.98px){#rotate-fab span{display:none}}#rotate-fab:focus-visible{outline:2px solid var(--ignition);outline-offset:3px}#rotate-fab:active{transform:translateY(1px)}#rotate-fab.hot{background:var(--ignition);transform:scale(1.06);box-shadow:0 12px 28px #ff8c5a73}body.workshop.dragging #rotate-fab{display:inline-flex}body.workshop.dragging #camera-hint,body.workshop.dragging #control-hint{display:none}@media (pointer:coarse){#control-hint{display:none}}kbd{border:1px solid var(--line);font-family:var(--font-display);background:#fff;border-bottom-width:2px;border-radius:5px;padding:1px 6px;font-size:11px}.toast{z-index:5;background:var(--ink);color:#fff;box-shadow:var(--shadow-pop);opacity:0;pointer-events:none;transition:opacity .28s var(--ease), transform .28s var(--ease);text-align:center;border-radius:999px;max-width:calc(100% - 32px);padding:10px 20px;font-size:13.5px;font-weight:600;position:absolute;top:16px;left:50%;transform:translate(-50%)translateY(-12px)}.toast.show{opacity:1;transform:translate(-50%)translateY(0)}#parts-sheet:not(.ready){display:none}#parts-sheet{z-index:6;height:var(--sheet-h);background:var(--paper);border-top:1.5px dashed var(--paper-line);max-height:82dvh;box-shadow:var(--shadow-up);padding:0 max(14px, var(--safe-r)) max(10px, var(--safe-b)) max(14px, var(--safe-l));touch-action:none;border-radius:20px 20px 0 0;flex-direction:column;display:flex;position:absolute;bottom:0;left:0;right:0}#parts-sheet[data-snap=stow] .sheet-header,#parts-sheet[data-snap=stow] #parts-canvas-wrap,#parts-sheet[data-snap=stow] .parts-roster,#parts-sheet[data-snap=stow] .sheet-close{visibility:hidden}.sheet-chrome{flex-shrink:0;position:relative}.sheet-close{background:#2b334412;flex-shrink:0;width:36px;height:36px;position:static}.sheet-handle-btn{cursor:pointer;background:0 0;border:0;flex-shrink:0;justify-content:center;align-items:center;width:100%;min-height:28px;padding:10px 0 6px;display:flex}.sheet-handle{background:#2b334438;border-radius:999px;width:40px;height:4px}.sheet-header{flex-shrink:0}.layer-progress{scrollbar-width:none;-webkit-overflow-scrolling:touch;align-items:center;gap:6px;margin:0 -4px;padding:2px 0 8px;display:flex;overflow-x:auto}.layer-progress::-webkit-scrollbar{display:none}.layer-dot{opacity:.45;flex-shrink:0;align-items:center;gap:6px;transition:opacity .2s;display:flex}.layer-dot.active,.layer-dot.done{opacity:1}.dot-num{width:28px;min-width:28px;height:28px;font-family:var(--font-display);border:1.5px dashed var(--line);color:var(--ink-soft);background:#fff;border-radius:50%;justify-content:center;align-items:center;font-size:12px;font-weight:600;display:flex}.layer-dot.active .dot-num{background:var(--ignition);border-color:var(--ignition);color:#fff;border-style:solid}.layer-dot.done .dot-num{background:var(--signal-glow);border-color:var(--signal-glow);color:#fff;border-style:solid}.dot-label{color:var(--ink-soft);white-space:nowrap;font-size:12px;font-weight:600}.layer-dot.active .dot-label{color:var(--ink)}.layer-dot:not(.active) .dot-label{display:none}.layer-divider{background:var(--line);flex-shrink:0;width:10px;height:1px}.layer-progress.compact{gap:4px}.layer-progress.compact .layer-divider{width:6px}.layer-progress.compact .dot-label{display:none!important}.layer-progress.compact .dot-num{width:22px;min-width:22px;height:22px;font-size:11px}.sheet-toolbar{align-items:center;gap:8px;min-height:32px;display:flex}.sheet-toolbar .layer-progress{flex:1;min-width:0;margin:0;padding:2px 0}.layer-title{display:none}.piece-count{color:var(--ink-soft);white-space:nowrap;flex-shrink:0;font-size:12px;font-weight:700}.text-btn{font-family:var(--font-body);color:var(--ignition-dark);cursor:pointer;background:0 0;border:0;min-height:32px;padding:6px 4px;font-size:12px;font-weight:700}.text-btn[hidden]{display:none}.text-btn:focus-visible{outline:2px solid var(--ignition);outline-offset:2px;border-radius:6px}#parts-canvas-wrap{border-radius:var(--radius-md);border:1.5px dashed var(--paper-line);background-color:#2b334404;background-image:repeating-linear-gradient(45deg,#2b334409 0 1px,#0000 1px 14px);flex:1;min-height:96px;position:relative;overflow:hidden;box-shadow:inset 0 2px 10px #2b33440d}#parts-canvas{cursor:default;touch-action:none;width:100%;height:100%;display:block}.parts-roster{scrollbar-width:none;-webkit-overflow-scrolling:touch;touch-action:pan-x;flex-shrink:0;gap:8px;margin:0 -4px;padding:4px 2px 8px;list-style:none;display:flex;overflow:auto hidden}.parts-roster::-webkit-scrollbar{display:none}.parts-roster:empty{display:none}.parts-roster>li{margin:0;padding:0;list-style:none}@media (width<=959.98px){#parts-canvas-wrap{display:none}.parts-roster{touch-action:pan-y;flex-wrap:wrap;max-height:min(48vh,340px);overflow:hidden auto}}.part-chip{appearance:none;border:1.5px dashed var(--paper-line);cursor:pointer;min-width:64px;min-height:64px;font-family:var(--font-body);color:var(--ink);touch-action:none;background:#fff;border-radius:10px;flex-direction:column;flex:none;justify-content:center;align-items:center;gap:5px;padding:10px 12px 8px;display:flex;position:relative}.part-chip:focus-visible{outline:2px solid var(--ignition);outline-offset:2px}.part-chip:active{transform:scale(.97)}.part-chip-brick{width:calc(11px * var(--sx,1));height:calc(11px * var(--sz,1));background:var(--chip,var(--ink));border-radius:3px;min-width:18px;max-width:52px;min-height:14px;max-height:28px;display:block;box-shadow:inset 0 1px #fff6,0 2px #2b33442e}.part-chip-size{color:var(--ink-soft);letter-spacing:.02em;font-size:11px;font-weight:700}.part-chip-qty{color:var(--ink);font-size:12px;font-weight:800;line-height:1;position:absolute;top:4px;right:6px}#drag-ghost{pointer-events:none;z-index:50;opacity:0;border-radius:7px;width:28px;height:28px;transition:opacity .12s;position:fixed;transform:translate(-50%,-50%)rotate(-6deg);box-shadow:0 6px 14px #2b33444d,inset 0 0 0 1.5px #ffffff8c}#drag-ghost.visible{opacity:.95}@media (pointer:coarse){#drag-ghost{width:36px;height:36px}}@keyframes overlay-fade{0%{opacity:0}to{opacity:1}}@keyframes sheet-up{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.modal-overlay{z-index:100;backdrop-filter:blur(3px);background:#2b334473;justify-content:center;align-items:flex-end;padding:0;animation:.22s both overlay-fade;display:flex;position:fixed;inset:0}.modal-overlay.hidden{display:none}.modal-card{padding:48px 20px max(22px, var(--safe-b));text-align:center;width:100%;max-height:min(88dvh,720px);box-shadow:var(--shadow-up);animation:sheet-up .32s var(--ease) both;background:#fff;border-radius:20px 20px 0 0;position:relative;overflow:auto}.modal-card h2{font-family:var(--font-display);margin:4px 0 8px;font-size:20px}.modal-card p{color:var(--ink-soft);margin:0 0 16px;font-size:14px;line-height:1.55}.modal-actions{flex-direction:column;gap:8px;display:flex}.primary-btn{font-family:var(--font-body);background:var(--ignition);color:#fff;min-height:var(--touch);cursor:pointer;border:none;border-radius:999px;padding:12px 24px;font-size:15px;font-weight:700;transition:transform .15s;box-shadow:0 10px 20px #ff8c5a59}.primary-btn:active{transform:translateY(1px)}.primary-btn:focus-visible{outline:2px solid var(--ink);outline-offset:3px}.icon-close{top:12px;right:max(12px, var(--safe-r));width:var(--touch);height:var(--touch);background:var(--paper);color:var(--ink-soft);cursor:pointer;border:0;border-radius:50%;justify-content:center;align-items:center;display:inline-flex;position:absolute}.icon-close:focus-visible{outline:2px solid var(--ignition);outline-offset:2px}.icon-close.hidden{display:none}#model-cards{text-align:left;flex-direction:column;gap:10px;margin:8px 0 6px;display:flex}.model-card{text-align:left;background:var(--paper);border:1.5px dashed var(--paper-line);border-radius:var(--radius-md);cursor:pointer;width:100%;min-height:64px;font-family:var(--font-body);align-items:center;gap:12px;padding:12px 14px;transition:border-color .15s,transform .15s,box-shadow .15s;display:flex}.model-card:active{transform:scale(.99)}.model-card:focus-visible{outline:2px solid var(--ignition);outline-offset:2px}@media (hover:hover) and (pointer:fine){.model-card:hover{border-color:var(--ignition);box-shadow:var(--shadow-soft);border-style:solid;transform:translateY(-1px)}.model-card:hover .model-card-icon{transform:scale(1.08)rotate(-4deg)}.primary-btn:hover{transform:translateY(-1px)}}.model-card-icon{transition:transform .2s var(--ease);flex-shrink:0;font-size:26px}.model-card-text{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.model-card-name{font-family:var(--font-display);color:var(--ink);font-size:15px;font-weight:600}.model-card-blurb{color:var(--ink-soft);font-size:12.5px;line-height:1.35}.model-card-count{color:var(--ink-soft);white-space:nowrap;background:#2b33440f;border-radius:999px;flex-shrink:0;padding:4px 10px;font-size:11.5px;font-weight:700}#model-picker-status{color:var(--ink-soft);margin:10px 0 0;font-size:13px;font-weight:600}#model-picker-status.error{color:var(--danger)}.hidden{display:none!important}@media (orientation:landscape) and (height<=540px){#ws-topbar{min-height:44px;padding-top:max(4px, var(--safe-t));padding-bottom:4px}#ws-topbar h1{font-size:14px}.brand-sub,#camera-hint{display:none}#rotate-fab{top:8px;right:max(12px, var(--safe-r));min-width:44px;min-height:44px;padding:10px}.fit-hint{bottom:calc(var(--sheet-h) + 64px)}}@media (width>=960px){:root{--sheet-h:0px}#ws-topbar{gap:20px;padding:12px 24px}#ws-topbar h1{font-size:19px}.brand-sub{font-size:11.5px}.ghost-btn .btn-label{display:inline}.ghost-btn{padding:8px 16px}#main{flex-direction:row;display:flex}#assembly-panel{flex:1;min-width:0;position:relative;inset:auto}#parts-sheet{border-top:0;border-right:1.5px dashed var(--paper-line);width:300px;max-height:none;box-shadow:none;touch-action:auto;border-radius:0;order:-1;padding:18px 18px 16px;position:relative;bottom:auto;left:auto;right:auto;height:auto!important}.sheet-handle-btn,.sheet-close{display:none}.parts-roster{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.layer-dot:not(.active) .dot-label{display:inline}.layer-progress.compact .layer-dot:not(.active) .dot-label{display:none}#camera-hint{top:auto;bottom:16px;left:16px}#control-hint{top:auto;bottom:16px;right:16px}#rotate-fab{min-width:auto;padding:12px 18px;top:16px;bottom:auto;right:16px}.fit-hint{bottom:88px}.modal-overlay{align-items:center;padding:24px}.modal-card{border-radius:var(--radius-lg);width:auto;max-width:380px;box-shadow:var(--shadow-pop);padding:36px 40px;animation-name:overlay-fade}.modal-card-wide{max-width:560px}.modal-actions{flex-direction:column;align-items:stretch}}@media (prefers-reduced-motion:reduce){.toast{transition:opacity .15s linear}.ghost-btn,.primary-btn,.layer-dot .dot-num,.model-card,.model-card-icon{transition:none}.modal-overlay,.modal-card{animation:none}}#model-cards{-webkit-overflow-scrolling:touch;max-height:min(58vh,520px);overflow-y:auto}.model-card.locked{opacity:.72}.model-card.built .model-card-count{color:#1a7a5c;background:#46d6a02e}
