.studio{min-height:100vh;padding-block-end:clamp(3rem,6vw,5rem)}.studio__head{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:1.25rem;display:flex}.studio__head .phead{width:auto;margin:0}.studio__head .phead:before{display:none}.tabs{border-radius:var(--pill);background:var(--surface-2);border:1px solid var(--border);gap:4px;padding:4px;display:inline-flex}.tab{border-radius:var(--pill);color:var(--dim);padding:.55rem 1.2rem;font-size:.92rem;font-weight:600;transition:background .16s,color .16s}.tab[aria-selected=true]{background:var(--primary);color:var(--on-primary)}.studio__grid{grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);align-items:start;gap:1.5rem;display:grid}@media (width<=1000px){.studio__grid{grid-template-columns:minmax(0,1fr)}}.viewer{top:calc(var(--nav-h) + 1rem);aspect-ratio:1;border-radius:var(--radius-xl);border:1px solid var(--border-strong);background:var(--stage-bg);box-shadow:var(--shadow);position:sticky;overflow:hidden}@media (width<=1000px){.viewer{aspect-ratio:4/3;position:relative;top:auto}}.viewer canvas{touch-action:none;width:100%;height:100%}.viewer__drop{z-index:3;text-align:center;border:2px dashed var(--border-strong);border-radius:calc(var(--radius-xl) - 10px);background:color-mix(in srgb, var(--surface) 72%, transparent);place-content:center;justify-items:center;gap:.9rem;padding:2rem;transition:background .2s,border-color .2s;display:grid;position:absolute;inset:14px}.viewer.is-dragging .viewer__drop{border-color:var(--accent);background:var(--glow-soft)}.viewer__drop svg{stroke:#fff;background:linear-gradient(145deg, var(--blue-bright), var(--blue-deep));width:64px;height:64px;box-shadow:0 12px 30px -10px var(--glow);border-radius:18px;padding:14px}.viewer__drop h3{font-size:1.3rem}.viewer__drop p{max-width:36ch;font-size:.92rem}.viewer__hint,.viewer__dims{z-index:2;pointer-events:none;background:color-mix(in srgb, var(--surface) 80%, transparent);backdrop-filter:blur(8px);border:1px solid var(--border);color:var(--dim);border-radius:12px;padding:.45rem .75rem;font-size:.8rem;position:absolute}.viewer__hint{inset-block-end:14px;inset-inline-start:14px}.viewer__dims{font-variant-numeric:tabular-nums;gap:2px;display:grid;inset-block-start:14px;inset-inline-start:14px}.viewer__dims b{color:var(--text);font-weight:600}.viewer__name{color:var(--text);text-overflow:ellipsis;white-space:nowrap;max-width:26ch;margin-block-end:2px;font-size:.88rem;font-weight:600;overflow:hidden}.viewer__tools{z-index:4;gap:6px;display:flex;position:absolute;inset-block-start:14px;inset-inline-end:14px}.viewer__tool{border:1px solid var(--border);width:38px;height:38px;color:var(--dim);background:color-mix(in srgb, var(--surface) 80%, transparent);border-radius:50%;place-content:center;font-size:1rem;transition:color .16s,border-color .16s,background .16s;display:grid}.viewer__tool:hover{color:var(--text);border-color:var(--accent)}.viewer__tool[aria-pressed=true]{color:#fff;background:var(--primary);border-color:var(--primary)}.hint--touch{display:none}@media (pointer:coarse){.hint--mouse{display:none}.hint--touch{display:inline}.viewer canvas{touch-action:pan-y}}.viewer:has([data-drop]:not([hidden])) .viewer__tools,.viewer:has([data-drop]:not([hidden])) .viewer__hint{display:none}.viewer__err{z-index:7;background:var(--danger);color:#fff;white-space:pre-line;cursor:pointer;box-shadow:var(--shadow-sm);border-radius:12px;padding:.8rem 2.4rem .8rem 1rem;font-size:.9rem;position:absolute;inset-block-start:14px;inset-inline:14px}:root[dir=rtl] .viewer__err{padding:.8rem 1rem .8rem 2.4rem}.viewer__err:after{content:"×";font-size:1.3rem;line-height:1;position:absolute;inset-block-start:.5rem;inset-inline-end:.85rem}.viewer__loading{z-index:6;text-align:center;background:color-mix(in srgb, var(--bg) 80%, transparent);color:var(--text);place-content:center;justify-items:center;gap:1rem;padding:2rem;font-size:.9rem;display:grid;position:absolute;inset:0}.viewer__loading p{overflow-wrap:anywhere;max-width:34ch;color:var(--text)}.viewer__spin{border:3px solid var(--border-strong);border-block-start-color:var(--accent);border-radius:50%;block-size:38px;inline-size:38px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.panel{background:var(--surface);background-image:var(--card-sheen);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);gap:1.4rem;padding:clamp(1.25rem,2.5vw,1.75rem);display:grid}.panel>:is(.field,[data-pane]):not([hidden])~.field:not([hidden]){border-block-start:1px solid var(--border);margin-block-start:-.2rem;padding-block-start:1.4rem}@media (width<=640px){.panel>.field{border-block-start:0;margin-block-start:0;padding-block-start:0}.panel>:is(.field,[data-pane=preset]):not([hidden])~.field:not([hidden]){border-block-start:1px solid var(--border);margin-block-start:-.2rem;padding-block-start:1.4rem}}.field__label--wide{font-size:.95rem}.panel small[style]{line-height:1.5;color:var(--dim)!important;font-size:.84rem!important}.chips{flex-wrap:wrap;gap:.5rem;display:flex}.chip{border-radius:var(--pill);border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text);align-items:center;gap:.45rem;padding:.55rem 1rem;font-size:.9rem;font-weight:500;transition:border-color .16s,background .16s,color .16s;display:inline-flex}.chip:hover{border-color:var(--accent)}.chip small{color:var(--dim);font-size:.78rem}.chip[aria-pressed=true]{background:var(--primary);border-color:var(--primary);color:#fff;box-shadow:0 8px 20px -10px var(--glow)}.chip[aria-pressed=true] small{color:#fffc}.chip input[type=checkbox]{width:16px;height:16px;accent-color:var(--blue)}.swatches{flex-wrap:wrap;gap:.6rem;display:flex}.swatch{justify-items:center;gap:.35rem;inline-size:64px;display:grid}.swatch>span{block-size:38px;inline-size:38px;box-shadow:0 0 0 1px var(--dot-ring), inset 0 -3px 6px #0000002e;transition:transform .2s var(--ease), box-shadow .2s ease;border-radius:50%;display:block}.swatch>small{text-align:center;color:var(--dim);font-size:.72rem;line-height:1.3}.swatch:hover>span{transform:scale(1.06)}.swatch[aria-pressed=true]>span{box-shadow:0 0 0 3px var(--bg), 0 0 0 5px var(--accent), inset 0 -3px 6px #0000002e}.swatch[aria-pressed=true]>small{color:var(--text);font-weight:600}.colourtab{padding:.45rem .8rem}.colourtab__dot{background:var(--dot);block-size:13px;inline-size:13px;box-shadow:0 0 0 1px var(--dot-ring);border-radius:50%;flex:none}.colourtab[aria-pressed=true] .colourtab__dot{box-shadow:0 0 0 2px #fff}input[type=range]{-webkit-appearance:none;appearance:none;cursor:pointer;background:var(--surface-2);border:1px solid var(--border);border-radius:99px;width:100%;height:6px}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:var(--primary);width:22px;height:22px;box-shadow:0 2px 10px var(--glow);cursor:pointer;border:4px solid #fff;border-radius:50%;transition:transform .15s}input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.12)}input[type=range]::-moz-range-thumb{background:var(--primary);width:16px;height:16px;box-shadow:0 2px 10px var(--glow);cursor:pointer;border:4px solid #fff;border-radius:50%}input[type=range]:disabled,.stepper:has(:disabled){opacity:.45;cursor:not-allowed}.stepper button:disabled{pointer-events:none}.stepper{border:1px solid var(--border-strong);border-radius:var(--pill);background:var(--surface-2);align-items:center;width:max-content;display:inline-flex;overflow:hidden}.stepper button{width:44px;height:44px;color:var(--text);font-size:1.15rem;transition:background .16s}.stepper button:hover{background:var(--glow-soft)}.stepper input{text-align:center;font-variant-numeric:tabular-nums;background:0 0;border:none;width:56px;font-weight:700}.stepper input::-webkit-outer-spin-button,.stepper input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.stepper input{-moz-appearance:textfield}.quote{border-radius:var(--radius-lg);border:1px solid var(--border-strong);background:radial-gradient(80% 120% at 100% 0%, var(--glow-soft), transparent 60%), var(--surface-2);gap:1rem;padding:1.4rem;display:grid}.quote.is-stale{opacity:.55}.quote__total{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.quote__total .n{font-family:"Poppins", var(--font-head);letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--text);font-size:clamp(2rem,4.6vw,2.6rem);font-weight:700;line-height:1}.quote__total .n small{color:var(--dim);letter-spacing:0;margin-inline-start:.35rem;font-size:.95rem;font-weight:500}.quote__rows{font-variant-numeric:tabular-nums;gap:.45rem;font-size:.88rem;display:grid}.quote__row{color:var(--dim);justify-content:space-between;gap:1rem;display:flex}.quote__row b{color:var(--text);font-weight:600}.quote__row--sep{border-block-start:1px solid var(--border);margin-block-start:.25rem;padding-block-start:.5rem}.quote__row--part>span{align-items:center;min-width:0;display:flex}.quote__row--part b[dir=ltr]{color:var(--dim);margin-inline-end:.4rem}.quote__n{margin-inline-end:.5em}.quote__note{font-size:.82rem;line-height:1.55}.quote__dot{background:var(--dot);width:10px;height:10px;box-shadow:0 0 0 1px var(--dot-ring);border-radius:50%;margin-inline-end:.45rem;display:inline-block}.quote__dot--paint{width:7px;height:7px;margin-inline-start:-.25rem}.parts{gap:.6rem}.parts__list{gap:.7rem;max-block-size:min(58vh,34rem);margin:0;padding:0;padding-inline-end:2px;list-style:none;display:grid;overflow-y:auto}.parts__add{margin-block-start:.2rem}.filegroup{gap:.4rem;display:grid}.filegroup--split{border-inline-start:2px solid var(--border-strong);padding-inline-start:.7rem}.filegroup__list{gap:.4rem;margin:0;padding:0;list-style:none;display:grid}.filegroup__head{color:var(--dim);justify-content:space-between;align-items:center;gap:1rem;font-size:.8rem;display:flex}.filegroup__name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text);font-weight:600;overflow:hidden}.filegroup__n{flex:none;margin-inline-start:auto}.filegroup__x{border:1px solid var(--border);block-size:28px;inline-size:28px;color:var(--dim);border-radius:50%;flex:none;place-content:center;font-size:.95rem;line-height:1;transition:border-color .16s,color .16s;display:grid}.filegroup__x:hover{border-color:var(--danger);color:var(--danger)}.part{align-items:stretch;gap:.35rem;display:flex}.part__pick{text-align:start;border:1px solid var(--border);background:var(--surface-2);border-radius:12px;flex:1;align-items:center;gap:.7rem;min-width:0;padding:.65rem .8rem;transition:border-color .16s,background .16s;display:flex}.part__pick:hover{border-color:var(--border-strong)}.part.is-active .part__pick{border-color:var(--accent);background:var(--glow-soft)}.part__no{color:var(--faint);font-variant-numeric:tabular-nums;flex:none;font-size:.75rem}.part__dot{background:var(--dot);width:18px;height:18px;box-shadow:0 0 0 1px var(--dot-ring);border-radius:50%;flex:none;position:relative}.part__dot--paint{align-self:center;width:11px;height:11px}.part__dots{flex:none;gap:3px;display:flex}.part__was{background:var(--dot);width:9px;height:9px;box-shadow:0 0 0 1.5px var(--surface);border-radius:50%;position:absolute;inset-block-end:-3px;inset-inline-end:-4px}.part__body{gap:.1rem;min-width:0;display:grid}.part__name{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:.9rem;font-weight:500;overflow:hidden}.part__meta{color:var(--dim);font-size:.76rem}.part__hasnote{color:var(--accent);margin-inline-start:.3rem;font-style:normal}.part__hasnote svg{vertical-align:-1px;fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linejoin:round;width:11px;height:11px;display:inline-block}.part__x,.part__ren{border:1px solid var(--border);width:38px;color:var(--dim);border-radius:12px;flex:none;place-content:center;font-size:1.1rem;line-height:1;transition:border-color .16s,color .16s,opacity .16s;display:grid}.part__x:hover{border-color:var(--danger);color:var(--danger)}.part__ren{opacity:0}.part__ren svg{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linejoin:round;width:14px;height:14px}.part:hover .part__ren,.part.is-active .part__ren,.part:focus-within .part__ren{opacity:1}.part__ren:hover,.part__ren:focus-visible{border-color:var(--accent);color:var(--text)}.part.is-active .part__name{cursor:text}.part.is-renaming .part__pick{border-color:var(--accent);background:var(--glow-soft);cursor:default}.part.is-renaming .part__body{flex:1}.part__rename{width:100%;min-width:0;font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--accent);border-radius:8px;outline:none;padding:.15rem .45rem;font-size:.9rem}.slots{border:1px solid var(--border);background:var(--surface-2);color:var(--dim);border-radius:12px;align-items:center;gap:.6rem;padding:.6rem .8rem;font-size:.82rem;display:flex}.slots__dots{gap:3px;display:flex}.slots__dots .quote__dot{margin-inline-end:0}.slots__label{flex:1;min-width:0}.slots__n{color:var(--text);font-variant-numeric:tabular-nums}.slots.is-over{border-color:var(--warn)}.slots.is-over .slots__n{color:var(--warn)}.parts__note,.parts__scope{color:var(--dim);font-size:.8rem;line-height:1.55}.parts__note--warn,.parts__note--3mf{color:var(--text);background:var(--glow-soft);border-inline-start:3px solid var(--accent);border-radius:10px;padding:.55rem .75rem}.parts__note--warn{background:var(--warn-bg);border-inline-start-color:var(--warn)}.parts__editing{color:var(--dim);font-size:.85rem}.parts__editing b{color:var(--text)}.part-meta{gap:.4rem}.part-meta textarea.input{min-height:3.4rem}.presets{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.8rem;display:grid}.preset{text-align:start;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-2);gap:.5rem;padding:.85rem;transition:border-color .16s;display:grid}.preset:hover{border-color:var(--border-strong)}.preset[aria-pressed=true]{border-color:var(--accent);background:var(--glow-soft)}.preset__thumb{aspect-ratio:1;background:var(--surface);border-radius:12px;justify-content:center;align-items:center;width:100%;display:flex}.preset__thumb svg{width:62%;height:62%;stroke:var(--text);fill:none;stroke-width:2.4px}.preset__name{font-size:.95rem;font-weight:600}.preset__meta{color:var(--dim);font-size:.78rem}.ctxmenu{z-index:300;background:var(--surface);border:1px solid var(--border);min-width:190px;box-shadow:var(--shadow);border-radius:14px;padding:.35rem;display:grid;position:fixed}.ctxmenu button{text-align:start;color:var(--text);border-radius:9px;justify-content:space-between;align-items:baseline;gap:1.6rem;padding:.55rem .75rem;font-size:.9rem;display:flex}.ctxmenu button:hover,.ctxmenu button:focus-visible{background:var(--glow-soft);outline:none}.ctxmenu kbd{color:var(--dim);font-family:inherit;font-size:.72rem}@media (pointer:coarse){.ctxmenu kbd{display:none}}.sheet{z-index:210;background:var(--overlay);backdrop-filter:blur(8px);padding:var(--gut);opacity:0;visibility:hidden;place-items:center;transition:opacity .25s,visibility .25s;display:grid;position:fixed;inset:0;overflow-y:auto}.sheet.is-open{opacity:1;visibility:visible}.sheet__box{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-xl);width:min(100%,580px);box-shadow:var(--shadow);transition:transform .3s var(--ease);gap:1.1rem;padding:clamp(1.5rem,4vw,2.25rem);display:grid;transform:translateY(16px)scale(.98)}.sheet.is-open .sheet__box{transform:none}.sheet__box h2.display{font-size:1.7rem!important}.sheet__row{grid-template-columns:1fr 1fr;align-items:start;gap:.9rem;display:grid}@media (width<=520px){.sheet__row{grid-template-columns:1fr}}.sheet__summary{border-radius:var(--radius);border:1px solid var(--border);background:var(--surface-2);color:var(--dim);gap:.4rem;padding:.95rem 1.1rem;font-size:.9rem;display:grid}.sheet__summary b{color:var(--accent)}.sheet__part{color:var(--text);grid-template-columns:auto minmax(0,1fr);align-items:start;column-gap:.55rem;font-size:.9rem;display:grid}.sheet__dots{align-items:center;padding-block-start:.35rem;display:flex}.sheet__what{flex-wrap:wrap;column-gap:.45rem;min-width:0;display:flex}.sheet__what>span{overflow-wrap:anywhere}.sheet__what b{color:var(--dim);font-weight:500}.sheet__note,.sheet__bodies{color:var(--dim);white-space:pre-wrap;padding-inline-start:1.1rem;font-size:.82rem;line-height:1.5}.sheet__bodies{white-space:normal;flex-wrap:wrap;gap:.25rem .9rem;display:flex}.done{text-align:center;justify-items:center;gap:1rem;padding:1rem 0;display:grid}@media (width<=640px){[data-pane=upload]{display:none}.viewer{aspect-ratio:1;border-radius:var(--radius-lg)}.viewer__drop{gap:.7rem;padding:1.25rem}.viewer__drop svg{width:52px;height:52px;padding:11px}.viewer__drop h3{font-size:1.08rem}.viewer__dims{font-size:.74rem;inset-block-start:62px}.swatch{inline-size:58px}.swatch>span{block-size:34px;inline-size:34px}.panel{padding-block-end:5rem}.sheet{padding:0;display:block;overflow:hidden}.sheet__box{-webkit-overflow-scrolling:touch;border-radius:var(--radius-xl) var(--radius-xl) 0 0;border-block-end:none;width:100%;max-height:90dvh;position:absolute;inset-block-end:0;inset-inline:0;overflow-y:auto}}.totalbar{display:none}@media (width<=640px){.totalbar{z-index:80;padding:.75rem 1rem calc(.75rem + env(safe-area-inset-bottom));background:color-mix(in srgb, var(--surface) 92%, transparent);backdrop-filter:blur(16px);border-block-start:1px solid var(--border);transition:transform .3s var(--ease);align-items:center;gap:.9rem;display:flex;position:fixed;inset-block-end:0;inset-inline:0;transform:translateY(110%)}.totalbar.is-on{transform:none}.totalbar__n{font-family:"Poppins", var(--font-head);font-variant-numeric:tabular-nums;font-size:1.35rem;font-weight:700;line-height:1.1}.totalbar__n small{font-family:var(--font-body);color:var(--dim);font-size:.72rem;font-weight:500;display:block}.totalbar .btn{margin-inline-start:auto}body:has(.totalbar.is-on) .wa{inset-block-end:82px}}.attach{gap:.4rem;margin-block-start:.75rem;display:grid}.attach__title{color:var(--dim);font-size:.82rem;font-weight:600}.attach__item{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);justify-content:space-between;align-items:center;gap:.5rem;padding:.45rem .7rem;font-size:.85rem;display:flex}.attach__item>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.attach__item button{color:var(--dim);border-radius:var(--pill);padding:.1rem .4rem}.attach__item button:hover{color:var(--danger);background:var(--danger-bg)}
