:root{--bg:#f5f1ea;--panel:#fffdf9;--float:#fff;--sunken:#f3eee6;--ink:#2f2622;--muted:#74685e;--subtle:#9b8f84;--line:#e6ded2;--line-strong:#cfc3b3;--accent:#2f6f5e;--accent-hover:#275e50;--accent-soft:#e4efea;--accent-ink:#1f4d41;--danger:#c2413b;--danger-soft:#fbeceb;--danger-line:#f1c9c6;--warning:#a35a0f;--ok:#3c7a4a;--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:20px;--s6:24px;--r-sm:6px;--r-md:10px;--r-lg:14px;--r-pill:999px;--shadow-float:0 6px 20px #2f26221a, 0 1px 3px #2f262214;--shadow-pop:0 10px 30px #2f262224, 0 2px 6px #2f262214;--fs-title:15px;--fs-section:12px;--fs-body:13px;--fs-label:12px;--fs-helper:11px;--focus:0 0 0 2px var(--panel), 0 0 0 4px var(--accent);--control-h:32px;--left-w:288px;--right-w:272px;--rail-w:44px;color:var(--ink);background:var(--bg);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:var(--fs-body);-webkit-font-smoothing:antialiased;line-height:1.45}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}button,select,input{font:inherit;color:inherit}button{min-height:var(--control-h);border:1px solid var(--line);background:var(--panel);border-radius:var(--r-md);cursor:pointer;white-space:nowrap;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-weight:500;transition:background-color .12s ease-out,border-color .12s ease-out,color .12s ease-out;display:inline-flex}button:hover:not(:disabled){border-color:var(--line-strong);background:var(--sunken)}button:active:not(:disabled){background:var(--line)}button:disabled{opacity:.4;cursor:default}:focus-visible{box-shadow:var(--focus);outline:none}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}button.ghost{background:0 0;border-color:#0000}button.ghost:hover:not(:disabled){background:var(--sunken);border-color:#0000}button.icon{width:var(--control-h);padding:0}button.danger{color:var(--danger)}button.danger:hover:not(:disabled){background:var(--danger-soft);border-color:var(--danger-line)}button.small{min-height:24px;font-size:var(--fs-helper);padding:0 8px}button.chip{border-radius:var(--r-pill);background:var(--sunken);min-height:28px;font-size:var(--fs-label);border-color:#0000}svg.lucide{vertical-align:-.15em;flex:none}kbd svg.lucide{vertical-align:-.1em}.app{grid-template-columns:var(--left-w) minmax(0, 1fr) var(--right-w);grid-template-rows:auto minmax(0,1fr);grid-template-areas:"top top top""left stage right";height:100dvh;display:grid;overflow:hidden}.app.left-collapsed{--left-w:var(--rail-w)}.app.right-collapsed{--right-w:var(--rail-w)}.toolbar{align-items:center;gap:var(--s2);height:52px;padding:0 var(--s3);background:var(--panel);border-bottom:1px solid var(--line);grid-area:top;min-width:0;display:flex}.brand{font-size:var(--fs-title);margin:0 var(--s1) 0 0;align-items:center;gap:var(--s2);white-space:nowrap;font-weight:700;display:flex}.logo{border-radius:var(--r-sm)}.tool-sep{background:var(--line);width:1px;height:20px;margin:0 var(--s1);flex:none}.tool-group{align-items:center;gap:var(--s1);display:flex}.tool-group.right{gap:var(--s2);margin-left:auto}.segmented{background:var(--sunken);border-radius:var(--r-md);gap:2px;padding:2px;display:inline-flex}.segmented button{min-height:28px;color:var(--muted);background:0 0;border:0;border-radius:8px;padding:0 12px}.segmented.icons button{width:30px;padding:0}.segmented button:hover:not(:disabled){color:var(--ink);background:#fff9}.segmented button.on,.segmented button.on:hover:not(:disabled){background:var(--float);color:var(--ink);box-shadow:0 1px 2px #2f26221f}.lamp-toggle.on{color:#8a5a00;background:#fdf3d8;border-color:#f0d88f}.lamp-toggle.on:hover:not(:disabled){background:#fbebc0;border-color:#e6c66a}.ai-status{align-items:center;gap:var(--s1);font-size:var(--fs-helper);color:var(--muted);border:1px dashed var(--line-strong);border-radius:var(--r-pill);white-space:nowrap;padding:2px 8px;display:inline-flex}.ai-status.on{color:var(--ok);background:#e7f2ea;border:1px solid #c4e0cb}.share-note{z-index:50;background:var(--ink);color:var(--bg);font-size:var(--fs-body);border-radius:var(--r-pill);box-shadow:var(--shadow-float);text-align:center;max-width:90%;padding:6px 14px;position:fixed;top:60px;left:50%;transform:translate(-50%)}.menu{position:relative}.menu-pop{z-index:60;min-width:220px;padding:var(--s1);background:var(--float);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);gap:2px;display:grid;position:absolute;top:calc(100% + 6px)}.menu-pop.right{right:0}.menu-pop.left{left:0}.menu-pop:focus-visible{box-shadow:var(--shadow-pop)}.menu-pop>button,.menu-pop>a{border-radius:var(--r-sm);min-height:34px;color:var(--ink);justify-content:flex-start;align-items:center;gap:var(--s2);background:0 0;border:0;padding:0 10px;font-weight:400;text-decoration:none;display:flex}.menu-pop>button:hover:not(:disabled),.menu-pop>a:hover,.menu-pop>button:focus-visible,.menu-pop>a:focus-visible{background:var(--sunken);box-shadow:none}.menu-pop>button.danger{color:var(--danger)}.menu-pop>button.danger:hover:not(:disabled){background:var(--danger-soft)}.menu-note{font-size:var(--fs-helper);color:var(--muted);margin:4px 10px 6px}.menu-sep{background:var(--line);height:1px;margin:4px 6px}.help{padding:var(--s2) var(--s3) var(--s3);min-width:280px}.help h3{margin:0 0 var(--s2);font-size:var(--fs-section);color:var(--muted);font-weight:600}.sidebar{background:var(--panel);min-height:0;overflow-y:auto}.sidebar.left{border-right:1px solid var(--line);flex-direction:column;grid-area:left;display:flex;overflow:hidden}.sidebar.right{border-left:1px solid var(--line);grid-area:right;position:relative}.sidebar.rail{align-items:center;gap:var(--s1);padding:var(--s2) 0;flex-direction:column;display:flex;overflow:hidden}.panel-tabs{align-items:center;gap:var(--s2);padding:var(--s2) var(--s2) var(--s2) var(--s3);border-bottom:1px solid var(--line);flex:none;display:flex}.tabs{background:var(--sunken);border-radius:var(--r-md);flex:1;gap:2px;padding:2px;display:flex}.tabs button{min-height:28px;color:var(--muted);background:0 0;border:0;border-radius:8px;flex:1}.tabs button:hover:not(:disabled){color:var(--ink);background:#fff9}.tabs button.on,.tabs button.on:hover:not(:disabled){background:var(--float);color:var(--ink);box-shadow:0 1px 2px #2f26221f}.panel-body{flex:1;min-height:0;overflow-y:auto}.panel-collapse{top:var(--s2);right:var(--s2);z-index:1;position:absolute}.section{padding:var(--s3) var(--s4) var(--s4);border-bottom:1px solid var(--line)}.section>summary{cursor:pointer;font-size:var(--fs-section);text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:0 calc(-1 * var(--s1));padding:var(--s1);border-radius:var(--r-sm);justify-content:space-between;align-items:center;font-weight:600;list-style:none;display:flex}.section>summary::-webkit-details-marker{display:none}.section>summary:after{content:"";border-bottom:1.5px solid;border-right:1.5px solid;width:6px;height:6px;transition:transform .12s ease-out;transform:rotate(45deg)translateY(-2px)}.section:not([open])>summary:after{transform:rotate(-45deg)}.section>summary:hover{color:var(--ink)}.section[open]>summary{margin-bottom:var(--s3)}.inspector{padding:var(--s3) var(--s4) var(--s5)}.inspector-head{margin-bottom:var(--s3);padding-right:36px}.inspector-head h2{font-size:var(--fs-title);margin:4px 0 2px;font-weight:700}.inspector-head .hint{margin:0}.inspector h3{font-size:var(--fs-section);text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:var(--s4) 0 var(--s2);padding-top:var(--s3);border-top:1px solid var(--line);font-weight:600}.inspector h3.shopping-head{text-transform:none;letter-spacing:0}.hint{color:var(--muted);font-size:var(--fs-label);margin:var(--s2) 0 0}.hint.top{margin:0 0 var(--s2)}.warn{color:var(--danger)}.ok{color:var(--ok)}.stats{gap:var(--s2);grid-template-columns:1fr 1fr;margin:0;display:grid}.stats>div{background:var(--bg);border-radius:var(--r-md);padding:var(--s2) 10px;min-width:0}.stats>.wide{grid-column:1/-1}.stats dt{font-size:var(--fs-helper);color:var(--muted)}.stats dd{font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;margin:2px 0 0;font-weight:600;overflow:hidden}.field{gap:var(--s1);margin-bottom:var(--s3);flex-direction:column;flex:1;min-width:0;display:flex}.field>span{font-size:var(--fs-label);color:var(--muted);font-weight:500}.field small{font-size:var(--fs-helper);color:var(--subtle);font-variant-numeric:tabular-nums}.field small.field-error{color:var(--danger)}.field-input{height:var(--control-h);border:1px solid var(--line);border-radius:var(--r-md);background:var(--float);align-items:center;padding-right:10px;transition:border-color .12s ease-out;display:flex}.field-input:hover{border-color:var(--line-strong)}.field-input:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.field.invalid .field-input{border-color:var(--danger);box-shadow:0 0 0 3px var(--danger-soft)}.field-input input{font-variant-numeric:tabular-nums;background:0 0;border:0;outline:0;width:100%;min-width:0;height:100%;padding:0 10px}.field-input input:focus-visible{box-shadow:none}.field-input em{font-style:normal;font-size:var(--fs-helper);color:var(--muted)}.field select{height:var(--control-h);border:1px solid var(--line);border-radius:var(--r-md);background:var(--float);min-width:0;padding:0 8px}.field select:hover{border-color:var(--line-strong)}.field select:focus-visible{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.field-row{gap:10px;display:flex}.field-row.align-end{align-items:center}.field-row.align-end>button{margin-top:6px}.button-row{gap:var(--s2);display:flex}.button-row button{flex:1}.color-row{gap:var(--s2);align-items:center;display:flex}.color-row input[type=color]{width:44px;height:var(--control-h);border:1px solid var(--line);border-radius:var(--r-md);background:var(--float);cursor:pointer;padding:2px}.template-list{gap:var(--s2);display:grid}.template{padding:var(--s2) var(--s3);white-space:normal;text-align:left;flex-direction:column;align-items:flex-start;gap:2px;min-height:0}.template strong{font-weight:600}.template span{color:var(--muted);font-size:var(--fs-helper);font-weight:400}.catalog{padding:0 var(--s3) var(--s4)}.catalog-search-wrap{z-index:1;background:var(--panel);padding:var(--s3) 0 var(--s2);position:sticky;top:0}.catalog-search{width:100%;height:var(--control-h);border:1px solid var(--line);border-radius:var(--r-md);background:var(--float);padding:0 10px}.catalog-search:hover{border-color:var(--line-strong)}.catalog-search:focus,.catalog-search:focus-visible{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.catalog-group+.catalog-group{border-top:1px solid var(--line)}.catalog-head{border-radius:var(--r-sm);text-align:left;background:0 0;border:0;justify-content:flex-start;width:100%;min-height:36px;padding:0 4px;font-weight:600}.catalog-head:hover:not(:disabled){color:var(--accent);background:0 0}.catalog-head .chev{width:14px;color:var(--muted);display:inline-flex}.catalog-head em{font-style:normal;font-size:var(--fs-helper);color:var(--muted);background:var(--sunken);border-radius:var(--r-pill);font-variant-numeric:tabular-nums;margin-left:auto;padding:1px 7px;font-weight:500}.catalog-grid{margin-bottom:var(--s3);grid-template-columns:repeat(auto-fill,minmax(76px,1fr));gap:6px;display:grid}.catalog-item{white-space:normal;text-align:center;cursor:grab;background:var(--float);flex-direction:column;gap:2px;min-height:0;padding:6px 4px;font-weight:400}.catalog-item:hover:not(:disabled){background:var(--accent-soft);border-color:#b9d4ca}.catalog-item:active:not(:disabled){cursor:grabbing}.catalog-item span{font-size:var(--fs-label);font-weight:500;line-height:1.25}.catalog-item small{color:var(--muted);font-variant-numeric:tabular-nums;font-size:10px}.issues{background:var(--danger-soft);color:var(--danger);border:1px solid var(--danger-line);border-radius:var(--r-md);padding:var(--s2) 10px;margin-bottom:var(--s3);font-size:var(--fs-label);gap:2px;display:grid}.facing{background:var(--bg);color:var(--ink);border-radius:var(--r-md);font-size:var(--fs-label);align-items:center;gap:6px;padding:6px 10px;font-weight:500;display:flex}.actions{gap:var(--s2);margin-top:var(--s4);padding-top:var(--s3);border-top:1px solid var(--line);display:flex}.actions button{flex:1}.shortcuts{font-size:var(--fs-label);color:var(--muted);gap:6px;margin:0;padding:0;list-style:none;display:grid}kbd{border:1px solid var(--line);font-size:var(--fs-helper);background:var(--float);color:var(--ink);border-bottom-width:2px;border-radius:4px;padding:0 4px;font-family:inherit}.issue-list{margin:0 0 var(--s3);gap:6px;padding:0;list-style:none;display:grid}.issue-list button{text-align:left;white-space:normal;background:var(--danger-soft);border:1px solid var(--danger-line);width:100%;font-size:var(--fs-label);flex-direction:column;align-items:flex-start;gap:2px;padding:6px 10px;font-weight:400}.issue-list button:hover:not(:disabled){background:#f8dedc;border-color:#e9aeaa}.issue-list button span{color:var(--danger)}.shopping-head{justify-content:space-between;align-items:center;gap:var(--s2);display:flex}.shopping{margin:0 0 var(--s3);font-size:var(--fs-label);gap:4px;padding:0;list-style:none;display:grid}.shopping li{flex-wrap:wrap;align-items:center;gap:2px 8px;display:flex}.shopping .door-warning{color:var(--warning);font-size:var(--fs-helper);flex-basis:100%;padding-left:20px}.shopping .swatch{border:1px solid var(--line);border-radius:4px;flex:none;width:12px;height:12px}.shopping .name{flex:1;min-width:0}.shopping .size{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}.stage{background:var(--bg);grid-area:stage;min-width:0;min-height:0;position:relative}.canvas-wrap{touch-action:none;position:absolute;inset:0;overflow:hidden}.zoom-controls{right:var(--s3);bottom:var(--s3);z-index:4;background:var(--float);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-float);flex-direction:column;gap:2px;padding:3px;display:flex;position:absolute}.zoom-controls button{background:0 0;border-color:#0000;border-radius:8px;width:30px;min-height:30px}.empty-state{inset:auto 0 var(--s4);pointer-events:none;z-index:5;justify-content:center;padding:0 60px;display:flex;position:absolute}.empty-card{pointer-events:auto;background:var(--float);border:1px solid var(--line);border-radius:var(--r-lg);width:100%;max-width:560px;box-shadow:var(--shadow-float);padding:var(--s3) var(--s4);animation:.2s ease-out rise}.empty-head{gap:var(--s3);align-items:flex-start;display:flex}.empty-art{color:var(--ok);margin-top:2px}.empty-card h2{font-size:var(--fs-title);margin:0 0 2px}.empty-card p{color:var(--muted);font-size:var(--fs-label);margin:0}.empty-actions{margin-top:var(--s3);flex-wrap:wrap;gap:6px;padding-left:40px;display:flex}.empty-actions .primary{margin-left:auto}@keyframes rise{0%{opacity:0;transform:translateY(6px)}}@media (prefers-reduced-motion:reduce){.empty-card{animation:none}}.iso-hint{bottom:var(--s3);color:#fff;font-size:var(--fs-label);border-radius:var(--r-pill);pointer-events:none;background:#2f2622bf;padding:4px 10px;position:absolute;left:50%;transform:translate(-50%)}.iso-turn{top:var(--s3);right:var(--s3);gap:6px;display:flex;position:absolute}.iso-turn button{background:var(--float);box-shadow:var(--shadow-float)}.loading{color:var(--muted);place-items:center;display:grid;position:absolute;inset:0}.ai-toast{top:var(--s3);background:var(--accent-ink);color:#fff;font-size:var(--fs-body);border-radius:var(--r-pill);box-shadow:var(--shadow-float);pointer-events:none;text-align:center;z-index:6;max-width:90%;padding:6px 14px;position:absolute;left:50%;transform:translate(-50%)}@media (width<=1360px){:root{--left-w:256px;--right-w:248px}.toolbar .wide-only{display:none}}@media (width<=1100px){:root{--left-w:232px;--right-w:232px}.toolbar{gap:6px}.tool-sep{margin:0}}.app.mobile{grid-template:"top""stage"minmax(0,1fr)"tabs"/1fr}.app.mobile .toolbar{padding:0 var(--s2);scrollbar-width:none;gap:6px;overflow-x:auto}.app.mobile .toolbar::-webkit-scrollbar{display:none}.app.mobile .toolbar>*{flex-shrink:0}.app.mobile .brand{font-size:14px}.app.mobile .tool-sep{display:none}.app.mobile .menu-pop{top:56px;right:var(--s2);position:fixed;left:auto}.app.mobile .tool-group.right{margin-left:0}.app.mobile .zoom-controls{top:var(--s3);bottom:auto}.app.mobile .empty-state{padding:0 var(--s3)}.app.mobile .empty-actions{padding-left:0}.tabbar{background:var(--panel);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);grid-area:tabs;display:flex}.tabbar button{min-height:48px;font-size:var(--fs-body);color:var(--muted);background:0 0;border:0;border-radius:0;flex:1}.tabbar button.on{color:var(--accent);box-shadow:inset 0 2px 0 var(--accent);font-weight:600}.sheet{z-index:5;background:var(--panel);border-top:1px solid var(--line);border-radius:var(--r-lg) var(--r-lg) 0 0;overscroll-behavior:contain;grid-area:stage;align-self:end;max-height:60%;position:relative;overflow-y:auto;box-shadow:0 -8px 24px #2f26221f}.sheet-close{float:right;z-index:2;margin:8px 10px 0 0;position:sticky;top:8px}.sheet .catalog-grid{grid-template-columns:repeat(auto-fill,minmax(96px,1fr))}.quick-actions{bottom:var(--s3);background:var(--float);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-float);gap:6px;max-width:calc(100% - 24px);padding:6px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.app.mobile .iso-hint{white-space:nowrap;text-overflow:ellipsis;max-width:calc(100% - 24px);overflow:hidden}@media (pointer:coarse){:root{--control-h:40px}input,select{font-size:16px}}
