:root{--bg: #121417;--panel: #1a1d22;--line: #2b3038;--text: #e8eaed;--muted: #8b929c;--accent: #ff6a13;--sel: #4d7cff;--radius: 10px;color-scheme:dark;font:14px/1.45 ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--text);background:var(--bg)}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit;color:inherit}button{cursor:pointer}.muted{color:var(--muted)}.small{font-size:12px}.app{height:100dvh;display:flex;flex-direction:column}header{display:flex;align-items:center;gap:16px;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--panel)}.logo{display:flex;align-items:center;gap:8px;font-weight:700;letter-spacing:.02em;color:var(--text);text-decoration:none;font-size:16px}.logo b{color:var(--accent)}.logo-mark{width:18px;height:18px;border-radius:50%;background:radial-gradient(circle,var(--bg) 0 30%,var(--accent) 31%)}.head-actions{margin-left:auto;display:flex;gap:8px;align-items:center}.btn{background:#252a31;border:1px solid var(--line);border-radius:8px;padding:7px 14px}.btn:hover{border-color:#3b424d}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.btn.primary:disabled{opacity:.6}.btn.sm{padding:4px 10px;font-size:13px}.link{background:none;border:0;color:var(--sel);padding:0}.link:hover{text-decoration:underline}main{flex:1;display:grid;grid-template-columns:1fr 400px;min-height:0}.stage{position:relative;min-height:0;background:radial-gradient(ellipse at 50% 30%,#252930,var(--bg) 70%)}.viewer{position:absolute;inset:0}.viewer canvas{display:block;width:100%;height:100%;touch-action:none}.dragging .stage:after{content:"";position:absolute;inset:12px;border:2px dashed var(--accent);border-radius:16px;pointer-events:none}.drop{position:absolute;inset:0;margin:auto;width:min(440px,86%);height:220px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:#1a1d22d9;border:2px dashed #3b424d;border-radius:18px;text-align:center;padding:20px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.drop:hover{border-color:var(--accent)}.drop strong{font-size:18px}.drop strong~span{color:var(--muted)}.drop-icon{width:44px;height:44px;border-radius:50%;background:conic-gradient(#ff6a13,#f4d03f,#00b1b7,#0056b8,#a03cc8,#ff6a13);-webkit-mask:radial-gradient(circle,transparent 0 34%,#000 35%);mask:radial-gradient(circle,transparent 0 34%,#000 35%)}.busy{position:absolute;top:16px;left:50%;transform:translate(-50%);background:var(--panel);border:1px solid var(--line);padding:8px 16px;border-radius:99px}.hud{position:absolute;left:14px;bottom:12px;display:flex;gap:14px;align-items:center;background:#1a1d22d9;padding:6px 12px;border-radius:8px;font-variant-numeric:tabular-nums}.warn{color:#ffb020}.hint{position:absolute;right:14px;bottom:6px;color:var(--muted);font-size:12px;margin:0;pointer-events:none}aside{border-left:1px solid var(--line);background:var(--panel);overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px}.panel h3{margin:0 0 8px;font-size:13px;text-transform:uppercase;letter-spacing:.06em;display:flex;gap:8px;align-items:baseline}.panel h3 .muted{text-transform:none;letter-spacing:0;font-weight:400}.error{background:#3a1d1d;border:1px solid #6b2a2a;color:#ffb4b4;padding:8px 10px;border-radius:8px}.file{border:1px solid var(--line);border-radius:var(--radius);padding:8px;margin-bottom:8px}.file-head{display:grid;grid-template-columns:1fr auto;gap:0 8px}.file-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-head .muted{grid-column:1;font-size:12px}.file-head .x{grid-row:1 / span 2;grid-column:2;background:none;border:0;color:var(--muted);font-size:20px;line-height:1}.file-head .x:hover{color:#ff7a7a}.toggle{display:flex;gap:6px;align-items:center;margin:6px 0 2px;font-size:13px}.parts{list-style:none;margin:6px 0 0;padding:0;max-height:220px;overflow-y:auto}.part{width:100%;display:grid;grid-template-columns:18px auto 1fr;gap:8px;align-items:center;background:none;border:1px solid transparent;border-radius:6px;padding:4px 6px;text-align:left}.part:hover{background:#22262c}.part.on{border-color:var(--sel);background:#4d7cff1f}.part .muted{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}.sel-actions{display:flex;gap:14px;font-size:13px}.dot{width:18px;height:18px;border-radius:50%;display:inline-block;box-shadow:inset 0 0 0 1px #ffffff2e;flex:none}.dot.clear{opacity:.55}.picker.is-disabled{opacity:.55;pointer-events:none}.picker-top{display:flex;gap:8px;margin-bottom:8px}.picker-top select,.picker-top input{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:6px 8px}.picker-top input{flex:1;min-width:0}.brand-name{font-weight:700;align-self:center;white-space:nowrap}.chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.chip{background:#22262c;border:1px solid var(--line);border-radius:99px;padding:3px 10px;font-size:13px}.chip.sm{font-size:12px;padding:2px 8px}.chip.on{background:var(--text);color:var(--bg);border-color:var(--text)}.chip .n{opacity:.55}.swatch-groups{max-height:46vh;overflow-y:auto;padding-right:4px}.swatch-groups h4{margin:10px 0 6px;font-size:13px;display:flex;gap:8px;align-items:baseline;position:sticky;top:0;background:var(--panel);padding:2px 0;z-index:1}.finish{color:var(--muted);font-weight:400;font-size:12px}.swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(78px,1fr));gap:6px}.swatch{background:none;border:1px solid transparent;border-radius:8px;padding:6px 2px 4px;display:flex;flex-direction:column;align-items:center;gap:4px}.swatch:hover{background:#22262c}.swatch.on{border-color:var(--accent);background:#ff6a131a}.swatch .dot{width:30px;height:30px}.swatch .label{font-size:11px;line-height:1.2;text-align:center;color:#c5cad1}.custom{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line);font-size:13px}.custom input[type=color]{width:34px;height:26px;border:0;background:none;padding:0}.usage{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.usage li{display:grid;grid-template-columns:18px 1fr auto;gap:8px;align-items:center}.grams{font-variant-numeric:tabular-nums;color:var(--muted)}@media(max-width:860px){main{grid-template-columns:1fr;grid-template-rows:55dvh auto;overflow-y:auto}aside{border-left:0;border-top:1px solid var(--line);overflow:visible}.hint{display:none}.swatch-groups{max-height:none}}
