:root{--color-bg:#f6f7f9;--color-panel:#fff;--color-ink:#0f1729;--color-muted:#697586;--color-faint:#9aa4b2;--color-line:#e6e8ec;--color-line-soft:#eef0f3;--color-primary:#4f46e5;--color-primary-dark:#4338ca;--color-primary-soft:#eef0fe;--color-primary-ink:#3730a3;--color-primary-tint:#4f46e514;--color-primary-tint-hover:#4f46e524;--color-text-primary:var(--color-ink);--color-text-secondary:var(--color-muted);--color-text-muted:var(--color-muted);--color-text-subtle:var(--color-faint);--color-text-inverse:#fff;--color-surface:var(--color-panel);--color-surface-raised:var(--color-panel);--color-surface-sunken:var(--color-line-soft);--color-surface-hover:var(--color-line-soft);--color-surface-glass:#ffffffeb;--color-border-subtle:var(--color-line-soft);--color-border:var(--color-line);--color-border-strong:#d0d5dd;--color-separator:var(--color-faint);--color-danger:#dc2626;--color-danger-dark:#b91c1c;--color-danger-surface:#fef2f2;--radius-sm:6px;--radius-md:9px;--radius-lg:12px;--radius-xl:14px;--radius-2xl:20px;--radius-full:9999px;--shadow-sm:0 1px 2px #1018280a, 0 8px 24px -12px #1018281f;--shadow-md:0 4px 16px -4px #1018281a;--shadow-lg:0 12px 32px -8px #10182824;--shadow-xl:0 24px 48px -12px #1018282e;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--text-xs:11px;--text-sm:12px;--text-ui:13.5px;--text-base:14px;--text-lg:16px;--text-xl:18px;--transition-fast:.12s ease;--transition-base:.15s ease;--lightningcss-light:initial;--lightningcss-dark: ;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--color-ink);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Plus Jakarta Sans,system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.4}html,body,#root{background:var(--color-bg);height:100%;margin:0;padding:0}body{overflow:hidden}.btn{border-radius:var(--radius-md);height:34px;font:inherit;font-size:var(--text-sm);cursor:pointer;white-space:nowrap;transition:background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast), box-shadow var(--transition-fast);border:1px solid #0000;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-weight:600;display:inline-flex}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-icon{flex-shrink:0;align-items:center;display:flex}.btn--sm{height:34px;font-size:var(--text-sm);padding:0 12px}.btn--md{height:38px;font-size:var(--text-ui);padding:0 16px}.btn--primary{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-text-inverse);box-shadow:0 2px 8px -2px #4f46e573}.btn--primary:hover:not(:disabled){background:var(--color-primary-dark);border-color:var(--color-primary-dark)}.btn--ghost{background:var(--color-panel);border-color:var(--color-line);color:var(--color-ink)}.btn--ghost:hover:not(:disabled){background:var(--color-line-soft)}.btn--subtle{color:var(--color-ink);background:0 0;border-color:#0000}.btn--subtle:hover:not(:disabled){background:var(--color-line-soft)}.btn--danger-filled{background:var(--color-danger);border-color:var(--color-danger);color:#fff;box-shadow:0 2px 8px -2px #dc262673}.btn--danger-filled:hover:not(:disabled){background:var(--color-danger-dark);border-color:var(--color-danger-dark)}.btn--danger{color:var(--color-danger);background:0 0;border-color:#0000}.btn--danger:hover:not(:disabled){background:var(--color-danger-surface);color:var(--color-danger-dark)}.flyout{z-index:60;background:var(--color-panel);border:1px solid var(--color-line);border-radius:var(--radius-xl);width:200px;box-shadow:var(--shadow-lg);opacity:0;visibility:hidden;transform-origin:0;padding:10px;transition:opacity .16s cubic-bezier(.34,1.2,.64,1),transform .16s cubic-bezier(.34,1.2,.64,1),visibility .16s;position:fixed;left:100px;transform:translate(-6px)scale(.98)}.flyout.flyout--open{opacity:1;visibility:visible;transform:translate(0)scale(1)}.flyout:before{content:"";left:-5px;top:var(--flyout-arrow,50%);background:var(--color-panel);border-left:1px solid var(--color-line);border-bottom:1px solid var(--color-line);width:10px;height:10px;margin-top:-5px;position:absolute;transform:rotate(45deg)}.flyout-section+.flyout-section{border-top:1px solid var(--color-line-soft);margin-top:12px;padding-top:12px}.flyout-section-label{letter-spacing:.06em;text-transform:uppercase;color:var(--color-faint);margin-bottom:8px;font-size:10.5px;font-weight:700}.icon-btn{border-radius:var(--radius-md);cursor:pointer;width:34px;height:34px;transition:background var(--transition-fast), color var(--transition-fast);border:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.icon-btn:disabled{opacity:.32;cursor:not-allowed}.icon-btn--sm{width:28px;height:28px}.icon-btn--md{width:34px;height:34px}.icon-btn--subtle{color:var(--color-muted);background:0 0}.icon-btn--subtle:hover:not(:disabled){background:var(--color-line-soft);color:var(--color-ink)}.icon-btn--ghost{color:var(--color-muted);border:1px solid var(--color-line);background:0 0}.icon-btn--ghost:hover:not(:disabled){background:var(--color-line-soft);color:var(--color-ink)}.icon-btn--primary{background:var(--color-primary-soft);color:var(--color-primary)}.icon-btn--primary:hover:not(:disabled){background:var(--color-primary-tint-hover)}.icon-btn--danger{color:var(--color-danger);background:0 0}.icon-btn--danger:hover:not(:disabled){background:var(--color-danger-surface);color:var(--color-danger-dark)}.divider{background:var(--color-border-subtle);height:1px;margin:var(--space-1) 0;border:none}.divider--thick{height:2px}.menu-shell{background:var(--color-panel);border:1px solid var(--color-line);border-radius:var(--radius-xl);min-width:220px;box-shadow:var(--shadow-lg);z-index:100;opacity:0;visibility:hidden;padding:5px;transition:opacity .16s,transform .16s,visibility .16s;position:absolute;top:calc(100% + 8px);transform:translateY(-6px)scale(.98)}.menu-shell--left{transform-origin:0 0;left:0}.menu-shell--right{transform-origin:100% 0;right:0}.menu-shell.open{opacity:1;visibility:visible;transform:translateY(0)scale(1)}.menu-item{border-radius:var(--radius-md);width:100%;font:inherit;font-size:var(--text-ui);color:var(--color-ink);cursor:pointer;text-align:left;transition:background var(--transition-fast);background:0 0;border:none;align-items:center;gap:11px;padding:9px 11px;font-weight:600;display:flex}.menu-item svg{color:var(--color-muted);flex-shrink:0}.menu-item:hover{background:var(--color-line-soft)}.menu-item--danger,.menu-item--danger svg{color:var(--color-danger)}.menu-item--danger:hover{background:var(--color-danger-surface)}.modal-overlay{z-index:200;padding:var(--space-6);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);opacity:0;visibility:hidden;background:#0f17296b;justify-content:center;align-items:center;transition:opacity .18s,visibility .18s;display:flex;position:fixed;inset:0}.modal-overlay.open{opacity:1;visibility:visible}.modal-card{background:var(--color-panel);border:1px solid var(--color-line);width:100%;max-width:440px;max-height:calc(100vh - 48px);box-shadow:var(--shadow-xl);border-radius:18px;flex-direction:column;transition:transform .22s cubic-bezier(.34,1.3,.64,1);display:flex;overflow:hidden;transform:translateY(10px)scale(.97)}.modal-overlay.open .modal-card{transform:translateY(0)scale(1)}.modal-header{justify-content:space-between;align-items:flex-start;gap:var(--space-3);border-bottom:1px solid var(--color-line-soft);flex-shrink:0;padding:20px 16px 16px 20px;display:flex}.modal-header-main{align-items:flex-start;gap:var(--space-3);flex:1;min-width:0;display:flex}.modal-titles{flex-direction:column;gap:4px;min-width:0;display:flex}.modal-icon-chip{border-radius:11px;flex-shrink:0;place-items:center;width:40px;height:40px;display:grid}.modal-icon-chip--default{background:var(--color-primary-soft);color:var(--color-primary)}.modal-icon-chip--danger{background:var(--color-danger-surface);color:var(--color-danger)}.modal-title{font-size:var(--text-lg);color:var(--color-ink);letter-spacing:-.01em;font-weight:700;line-height:1.3}.modal-subtitle{font-size:var(--text-ui);color:var(--color-muted);margin:0;line-height:1.5}.modal-close{border-radius:var(--radius-md);width:30px;height:30px;color:var(--color-muted);cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;flex-shrink:0;place-items:center;display:grid}.modal-close:hover{background:var(--color-line-soft);color:var(--color-ink)}.modal-body{padding:var(--space-3);flex:1;overflow-y:auto}.modal-footer{justify-content:flex-end;align-items:center;gap:var(--space-2);padding:var(--space-3);border-top:1px solid var(--color-line-soft);flex-shrink:0;display:flex}.toolbar{background:var(--color-panel);border:1px solid var(--color-line);border-radius:var(--radius-2xl);box-shadow:var(--shadow-lg);flex-direction:column;align-items:center;gap:4px;padding:10px 8px;display:flex}.toolbar-group{flex-direction:column;align-items:center;gap:4px;width:100%;display:flex}.toolbar-group+.toolbar-group{margin-top:4px}.toolbar-group+.toolbar-group:before{content:"";background:var(--color-line);width:40px;height:1px;margin-bottom:4px;display:block}.rail-btn{color:#3d4757;width:60px;font:inherit;cursor:pointer;border-radius:var(--radius-lg);transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;flex-direction:column;justify-content:center;align-items:center;padding:9px 0;display:flex;position:relative}.rail-btn:hover:not(:disabled):not(.rail-btn--active){background:var(--color-line-soft);color:var(--color-ink)}.rail-btn--active{background:var(--color-primary-soft);color:var(--color-primary)}.rail-btn-flyout-dot{width:5px;height:5px;transition:background var(--transition-fast);pointer-events:none;background:#bcbfc4;border-radius:50%;position:absolute;top:6px;right:6px}.rail-btn:hover:not(.rail-btn--active) .rail-btn-flyout-dot{background:#696e79}.rail-btn--active .rail-btn-flyout-dot{background:var(--color-primary)}.rail-btn-inner{flex-direction:column;align-items:center;gap:5px;display:flex}.rail-btn-label{letter-spacing:-.01em;font-size:11px;font-weight:600;line-height:1}.shortcut-hint{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--color-line);height:36px;box-shadow:var(--shadow-sm);transition:background var(--transition-fast), border-color var(--transition-fast), box-shadow var(--transition-fast);pointer-events:none;-webkit-user-select:none;user-select:none;background:#ffffffd1;border-radius:10px;grid-template-columns:1fr auto;align-items:center;gap:10px;padding:0 6px 0 14px;animation:.22s cubic-bezier(.34,1.4,.64,1) both hint-in;display:grid}.shortcut-hint-label{color:var(--color-ink);white-space:nowrap;transition:color var(--transition-fast);font-size:13px;font-weight:600}.shortcut-hint-keys{gap:4px;display:inline-flex}.shortcut-hint-key{color:var(--color-muted);border:1px solid var(--color-line);min-width:26px;height:24px;transition:transform 80ms, background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);background:#fff;border-bottom-width:2px;border-radius:6px;justify-content:center;align-items:center;padding:0 7px;font-family:Geist Mono,monospace;font-size:11.5px;font-weight:500;display:inline-flex}.shortcut-hint--active{background:var(--color-primary);border-color:var(--color-primary);box-shadow:var(--shadow-sm), 0 4px 14px -4px #4f46e58c}.shortcut-hint--active .shortcut-hint-label{color:#fff}.shortcut-hint--active .shortcut-hint-key{color:#fff;background:#ffffff2e;border-color:#ffffff59;border-bottom-width:1px;transform:translateY(1px)}@keyframes hint-in{to{opacity:1;transform:translate(-50%)translateY(0)}}.toast-region{z-index:300;pointer-events:none;flex-direction:column-reverse;align-items:center;gap:10px;width:max-content;max-width:calc(100vw - 40px);display:flex;position:fixed;bottom:20px;left:50%;transform:translate(-50%)}.toast{background:var(--color-panel);border:1px solid var(--color-line);min-width:280px;max-width:420px;box-shadow:var(--shadow-lg);pointer-events:auto;border-radius:13px;align-items:center;gap:11px;padding:12px 12px 12px 14px;animation:.26s cubic-bezier(.34,1.4,.64,1) both toast-in;display:flex}.toast--leaving{animation:.18s forwards toast-out}.toast-icon{border-radius:7px;flex:0 0 22px;place-items:center;width:22px;height:22px;display:grid}.toast-icon--success{color:#059669;background:#ecfdf3}.toast-icon--error{background:var(--color-danger-surface);color:var(--color-danger)}.toast-icon--info{background:var(--color-primary-soft);color:var(--color-primary)}.toast-body{font-size:var(--text-ui);color:var(--color-ink);flex:1;font-weight:600;line-height:1.35}.toast-detail{color:var(--color-muted);font-weight:500;font-size:var(--text-sm);margin-top:1px;display:block}.toast-action{font:inherit;font-size:var(--text-sm);color:var(--color-primary);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast);background:0 0;border:none;flex-shrink:0;padding:6px 10px;font-weight:700}.toast-action:hover{background:var(--color-primary-soft)}.toast-dismiss{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--color-faint);cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;flex-shrink:0;place-items:center;display:grid}.toast-dismiss:hover{background:var(--color-line-soft);color:var(--color-ink)}@keyframes toast-in{0%{opacity:0;transform:translateY(14px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes toast-out{to{opacity:0;transform:translateY(8px)scale(.97)}}.tooltip{z-index:400;pointer-events:none;color:#fff;white-space:nowrap;opacity:0;background:#1f2533;border-radius:8px;align-items:center;gap:7px;padding:6px 8px 6px 10px;font-size:12.5px;font-weight:600;transition:opacity .12s,transform .12s;display:flex;position:fixed;transform:scale(.96);box-shadow:0 6px 20px -6px #10182866}.tooltip.tooltip--show{opacity:1;transform:scale(1)}.tooltip-key{color:#c7cdda;background:#ffffff1f;border:1px solid #ffffff29;border-radius:5px;padding:1px 6px;font-family:Geist Mono,ui-monospace,monospace;font-size:11px;font-weight:500;line-height:1.4}.tooltip:after{content:"";background:#1f2533;width:7px;height:7px;position:absolute;transform:rotate(45deg)}.tooltip[data-pos=right]:after{margin-top:-3.5px;top:50%;left:-3px}.tooltip[data-pos=left]:after{margin-top:-3.5px;top:50%;right:-3px}.tooltip[data-pos=bottom]:after{margin-left:-3.5px;top:-3px;left:50%}.tooltip[data-pos=top]:after{margin-left:-3.5px;bottom:-3px;left:50%}.ctx-toolbar{z-index:40;background:var(--color-panel,#fff);border:1px solid var(--color-line);box-shadow:var(--shadow-lg);opacity:0;visibility:hidden;pointer-events:none;border-radius:15px;align-items:center;gap:3px;padding:6px 8px;transition:opacity .18s,transform .2s cubic-bezier(.34,1.3,.64,1),visibility .18s;display:inline-flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%)translateY(8px)}.ctx-toolbar--show{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%)translateY(0)}.ctx-name{color:var(--color-ink);white-space:nowrap;padding:0 7px 0 5px;font-size:12.5px;font-weight:700}.ctx-div{background:var(--color-line);flex-shrink:0;width:1px;height:24px;margin:0 3px}.ctx-btn{cursor:pointer;color:#3d4757;background:0 0;border:none;border-radius:10px;flex-direction:column;flex-shrink:0;align-items:center;gap:4px;width:46px;padding:6px 0;font-family:inherit;transition:background .15s,color .15s,transform .1s;display:flex}.ctx-btn svg{width:18px;height:18px}.ctx-btn .ctx-lbl{letter-spacing:-.01em;font-size:10px;font-weight:600}.ctx-btn:hover{background:var(--color-line-soft);color:var(--color-ink)}.ctx-btn:active{transform:scale(.96)}.ctx-btn:disabled{opacity:.35;cursor:not-allowed}.ctx-btn:disabled:hover{color:#3d4757;background:0 0}.ctx-btn--danger:hover{background:var(--color-danger-surface);color:var(--color-danger)}.ctx-btn--confirm{background:var(--color-primary-soft);color:var(--color-primary)}.ctx-btn--confirm .ctx-lbl{font-weight:700}.ctx-btn--confirm:hover{background:#e2e5fc}.compass{background:var(--color-surface-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);width:52px;height:52px;box-shadow:var(--shadow-sm);cursor:pointer;transition:box-shadow var(--transition-fast), transform var(--transition-fast);-webkit-user-select:none;user-select:none;border:none;border-radius:50%;outline:none;padding:0;position:relative}.compass:hover{box-shadow:0 0 0 3px var(--color-primary-tint-hover)}.compass:active{box-shadow:0 0 0 3px var(--color-primary-tint-hover);transform:scale(.93)}.compass-rose{border-radius:50%;position:absolute;inset:0}.compass-label{letter-spacing:.02em;width:12px;height:12px;color:var(--color-faint);justify-content:center;align-items:center;margin:-6px 0 0 -6px;font-size:9px;font-weight:500;line-height:1;display:flex;position:absolute;top:50%;left:50%}.compass-label.compass-n{color:var(--color-primary);font-size:10px;font-weight:700;transform:translateY(-17px)}.compass-label.compass-e{transform:translate(17px)}.compass-label.compass-s{transform:translateY(17px)}.compass-label.compass-w{transform:translate(-17px)}.left-rail{z-index:20;position:fixed;top:50%;left:18px;transform:translateY(-50%)}.paint-flyout-targets{gap:6px;display:flex}.paint-target{border-radius:var(--radius-md);border:1px solid var(--color-line);background:var(--color-line-soft);color:var(--color-ink);font:inherit;cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);flex-direction:column;flex:1;align-items:center;gap:2px;padding:8px 6px 6px;display:flex}.paint-target span{letter-spacing:.2px;font-size:11px;font-weight:600;line-height:1}.paint-target:hover:not(:disabled){background:var(--color-line)}.paint-target.active{background:var(--color-primary);color:#fff;border-color:var(--color-primary-dark)}.paint-target.active:hover{background:var(--color-primary-dark);border-color:var(--color-primary-dark)}.paint-target:disabled{opacity:.45;cursor:not-allowed}.paint-flyout-swatches{grid-template-columns:repeat(5,1fr);gap:6px;display:grid}.paint-swatch{border-radius:var(--radius-sm);cursor:pointer;border:1px solid #0f172a2e;width:28px;height:28px;padding:0;transition:transform .1s,box-shadow .15s}.paint-swatch:hover{transform:scale(1.08)}.paint-swatch.active{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary)}.furniture-items{flex-direction:column;gap:4px;display:flex}.furniture-item{border-radius:var(--radius-md);border:1px solid var(--color-line);background:var(--color-line-soft);color:var(--color-ink);font:inherit;font-size:var(--text-ui);cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);align-items:center;gap:10px;padding:8px 10px;font-weight:600;display:flex}.furniture-item:hover{background:var(--color-line)}.furniture-item.active{background:var(--color-primary);color:#fff;border-color:var(--color-primary-dark)}.furniture-item.active:hover{background:var(--color-primary-dark);border-color:var(--color-primary-dark)}.furniture-hint{font-size:var(--text-xs);color:var(--color-faint);text-align:center;margin:8px 0 0}.flyout.flyout--picker{width:300px}.picker-grid{grid-template-columns:repeat(3,1fr);gap:8px;max-height:340px;margin:-2px;padding:2px;display:grid;overflow-y:auto}.picker-grid::-webkit-scrollbar{width:8px}.picker-grid::-webkit-scrollbar-thumb{background:var(--color-line);border-radius:4px}.picker-item{background:var(--color-panel);border:1px solid var(--color-line);border-radius:var(--radius-md);cursor:pointer;font:inherit;text-align:left;transition:background var(--transition-fast), border-color var(--transition-fast);flex-direction:column;gap:6px;padding:8px;display:flex}.picker-item:hover{background:var(--color-line-soft)}.picker-item.sel{background:var(--color-primary-soft);border-color:var(--color-primary);box-shadow:0 0 0 1px var(--color-primary)}.picker-thumb{aspect-ratio:1;background:var(--color-line-soft);color:var(--color-muted);border-radius:7px;place-items:center;display:grid}.picker-item.sel .picker-thumb{color:var(--color-primary);background:var(--color-primary-soft)}.picker-name{color:var(--color-ink);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;line-height:1.25;overflow:hidden}.picker-item.sel .picker-name{color:var(--color-primary-dark)}.picker-hint{font-size:var(--text-xs);color:var(--color-faint);text-align:center;margin:8px 0 0}.hint{z-index:10;color:var(--color-muted);letter-spacing:.005em;white-space:nowrap;pointer-events:none;opacity:0;align-items:center;gap:8px;font-size:13px;font-weight:500;animation:.2s forwards hint-in;display:flex;position:fixed;top:96px;left:50%;transform:translate(-50%)translateY(-4px)}.hint-icon{color:var(--color-primary);flex:none}.hint b{color:var(--color-ink);font-weight:600}.shortcuts{z-index:10;flex-direction:column;align-items:stretch;gap:8px;display:flex;position:fixed;bottom:18px;right:18px}.shortcuts>.shortcut-hint:nth-child(2){animation-delay:50ms}.shortcuts>.shortcut-hint:nth-child(3){animation-delay:.1s}.corner-hud{z-index:20;-webkit-user-select:none;user-select:none;pointer-events:none;flex-direction:column;align-items:flex-end;display:flex;position:fixed;top:50%;right:14px;transform:translateY(-50%)}.debug-panel{pointer-events:all;-webkit-backdrop-filter:blur(6px);background:#ffffffb8;border-radius:9px;flex-direction:column;gap:7px;min-width:140px;padding:9px 11px;display:flex;box-shadow:0 2px 10px #0000001f}.dbg-head{justify-content:space-between;align-items:baseline;gap:14px;display:flex}.fps-counter{color:#0009;font-variant-numeric:tabular-nums;letter-spacing:.3px;font-size:13px;font-weight:600}.dbg-gpu{color:#00000080;font-variant-numeric:tabular-nums;letter-spacing:.3px;font-size:11px}.dbg-sub{color:#0006;font-variant-numeric:tabular-nums;letter-spacing:.2px;font-size:10px}.dbg-divider{background:#00000014;height:1px;margin:2px 0}.dbg-row{cursor:pointer;justify-content:space-between;align-items:center;gap:14px;display:flex}.dbg-row.disabled{opacity:.4;pointer-events:none}.dbg-label{color:#0000008c;letter-spacing:.3px;white-space:nowrap;font-size:11px}.dbg-row input{display:none}.dbg-track{background:#0000002e;border-radius:999px;flex:none;width:26px;height:14px;transition:background .15s;position:relative}.dbg-row input:checked+.dbg-track{background:#00000073}.dbg-thumb{background:#fff;border-radius:50%;width:10px;height:10px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000040}.dbg-row input:checked+.dbg-track .dbg-thumb{transform:translate(12px)}.dbg-chip{font:inherit;letter-spacing:.3px;color:#000000b3;text-align:center;cursor:pointer;text-transform:capitalize;background:#00000014;border:none;border-radius:6px;min-width:78px;padding:2px 8px;font-size:11px;transition:background .15s}.dbg-chip:hover{background:#00000024}.design-manager-empty{text-align:center;color:var(--color-faint);font-size:var(--text-base);padding:32px 0}.design-list{flex-direction:column;gap:4px;display:flex}.design-row{border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast);align-items:center;gap:10px;padding:10px 12px;display:flex}.design-row:hover{background:var(--color-line-soft)}.design-row-info{flex:1;min-width:0}.design-row-name{font-size:var(--text-base);color:var(--color-ink);white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.design-row-date{font-size:var(--text-sm);color:var(--color-faint);margin-top:1px}.design-row-action{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--color-faint);cursor:pointer;opacity:0;transition:opacity var(--transition-fast), background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.design-row:hover .design-row-action{opacity:1}.design-row-action:hover{background:var(--color-line-soft);color:var(--color-ink)}.design-row-action--danger:hover{background:var(--color-danger-surface);color:var(--color-danger)}.design-save-input{border:1px solid var(--color-line);border-radius:var(--radius-md);height:34px;font:inherit;font-size:var(--text-sm);color:var(--color-ink);background:var(--color-panel);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);outline:none;flex:1;padding:0 12px}.design-save-input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-tint)}.design-menu{position:relative}.design-menu-trigger{font:inherit;font-size:var(--text-ui);color:var(--color-ink);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast), border-color var(--transition-fast);background:0 0;border:1px solid #0000;align-items:center;gap:6px;padding:5px 8px;font-weight:700;display:flex}.design-menu-trigger:hover,.design-menu-trigger.open{background:var(--color-line-soft);border-color:var(--color-line)}.design-menu-chev{color:var(--color-faint);flex-shrink:0;transition:transform .18s}.design-menu-trigger.open .design-menu-chev{transform:rotate(180deg)}.design-json{max-height:60vh;color:var(--color-ink);background:var(--color-line-soft);border:1px solid var(--color-line);border-radius:var(--radius-md);white-space:pre;tab-size:2;margin:0;padding:12px 14px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.5;overflow:auto}.user-menu-profile{align-items:center;gap:var(--space-2);padding:8px 10px 10px;display:flex}.user-menu-avatar{border-radius:var(--radius-full);width:30px;height:30px;color:var(--color-text-inverse);font-size:var(--text-sm);background:#697586;flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:flex}.user-menu-avatar--lg{width:38px;height:38px;font-size:var(--text-ui)}.user-menu-info{flex-direction:column;gap:1px;min-width:0;display:flex}.user-menu-name{font-size:var(--text-ui);color:var(--color-ink);font-weight:600}.user-menu-email{font-size:var(--text-xs);color:var(--color-faint);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.user-menu-tag{letter-spacing:.02em;color:var(--color-primary-ink);background:var(--color-primary-soft);border-radius:var(--radius-sm);padding:2px 7px;font-size:10.5px;font-weight:700}.top-bar{height:60px;padding:0 var(--space-4);background:var(--color-panel);border-bottom:1px solid var(--color-line);z-index:30;align-items:center;gap:6px;display:flex;position:fixed;top:0;left:0;right:0}.top-bar-logo{flex-shrink:0;align-items:center;gap:9px;padding-right:14px;display:flex}.top-bar-logomark{background:linear-gradient(140deg,#6366f1,#4f46e5);border-radius:9px;flex-shrink:0;place-items:center;width:30px;height:30px;display:grid;box-shadow:0 4px 10px -3px #4f46e580}.top-bar-brand{font-size:var(--text-xl);color:var(--color-ink);letter-spacing:-.02em;font-weight:800}.top-bar-crumbs{font-size:var(--text-ui);color:var(--color-muted);align-items:center;gap:6px;font-weight:500;display:flex}.top-bar-crumb-chip{border-radius:var(--radius-md);font:inherit;font-size:var(--text-ui);color:var(--color-muted);cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;align-items:center;gap:6px;padding:4px 9px;font-weight:500;display:flex}.top-bar-crumb-chip:hover{background:var(--color-line-soft);color:var(--color-ink)}.top-bar-crumb-sep{color:var(--color-faint)}.top-bar-rename{align-items:center;gap:4px;display:flex}.top-bar-rename-input{font:inherit;font-size:var(--text-ui);color:var(--color-ink);background:var(--color-panel);border:1.5px solid var(--color-primary);border-radius:var(--radius-md);width:160px;box-shadow:0 0 0 3px var(--color-primary-tint);outline:none;padding:4px 8px;font-weight:700}.top-bar-rename-confirm{border-radius:var(--radius-sm);color:var(--color-primary);cursor:pointer;transition:background var(--transition-fast);background:0 0;border:none;justify-content:center;align-items:center;padding:4px;display:flex}.top-bar-rename-confirm:hover{background:var(--color-line-soft)}.top-bar-spacer{flex:1}.top-bar-iconbtn{border-radius:var(--radius-md);cursor:pointer;width:34px;height:34px;color:var(--color-muted);transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;flex-shrink:0;place-items:center;display:grid}.top-bar-iconbtn:hover:not(:disabled){background:var(--color-line-soft);color:var(--color-ink)}.top-bar-iconbtn:disabled{opacity:.32;cursor:default}.top-bar-bar-div{background:var(--color-line);flex-shrink:0;width:1px;height:24px;margin:0 6px}.top-bar-user-wrap{display:flex;position:relative}.top-bar-avatar{border-radius:var(--radius-full);color:#fff;width:34px;height:34px;font-size:var(--text-sm);cursor:pointer;-webkit-user-select:none;user-select:none;border:2px solid var(--color-panel);box-shadow:0 0 0 1px var(--color-line);background:#697586;flex-shrink:0;place-items:center;font-weight:700;display:grid}.empty-state{text-align:center;pointer-events:none;-webkit-user-select:none;user-select:none;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.empty-state-ill{background:linear-gradient(140deg, var(--color-primary-soft), #fff);border:1px solid var(--color-line);width:84px;height:84px;box-shadow:var(--shadow-sm);color:var(--color-primary);border-radius:22px;place-items:center;margin:0 auto 20px;display:grid}.empty-state-heading{color:var(--color-ink);letter-spacing:-.02em;margin-bottom:8px;font-size:19px;font-weight:800}.empty-state-body{font-size:var(--text-ui);color:var(--color-muted);max-width:280px;margin:0 auto;line-height:1.55}.empty-state-body strong{color:var(--color-ink);font-weight:700}.empty-state-hint{align-items:center;gap:7px;margin-top:16px;display:inline-flex}.empty-state-kbd{color:var(--color-muted);background:var(--color-panel);border:1px solid var(--color-line);border-bottom-width:2px;border-radius:6px;justify-content:center;align-items:center;min-width:26px;padding:3px 8px;font-family:Geist Mono,monospace;font-size:11px;font-weight:500;display:inline-flex}.empty-state-hint-label{color:var(--color-faint);font-size:11px;font-weight:500}.empty-state-templates{pointer-events:auto;margin-top:28px}.empty-state-templates-label{letter-spacing:.04em;text-transform:uppercase;color:var(--color-faint);margin-bottom:12px;font-size:11px;font-weight:600;display:block}.empty-state-template-row{justify-content:center;gap:10px;display:flex}.empty-state-template-card{width:124px;font:inherit;text-align:center;cursor:pointer;color:var(--color-primary);background:var(--color-panel);border:1px solid var(--color-line);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);transition:border-color var(--transition-fast), transform var(--transition-fast), box-shadow var(--transition-fast);flex-direction:column;align-items:center;gap:4px;padding:14px 12px;display:flex}.empty-state-template-card:hover{border-color:var(--color-primary);box-shadow:var(--shadow-md,var(--shadow-sm));transform:translateY(-2px)}.empty-state-template-name{font-size:var(--text-ui);color:var(--color-ink);margin-top:4px;font-weight:700}.empty-state-template-desc{color:var(--color-muted);font-size:11px;font-weight:500}.wall-view-toggle{background:var(--color-surface-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:var(--radius-full);box-shadow:var(--shadow-sm);gap:2px;padding:4px;display:flex}.wall-view-btn{border-radius:var(--radius-full);width:34px;height:34px;color:var(--color-muted);cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.wall-view-btn:hover{background:var(--color-line-soft);color:var(--color-ink)}.wall-view-btn.is-active{background:var(--color-primary-soft);color:var(--color-primary)}.app{position:fixed;inset:0}.app canvas{touch-action:none;cursor:url(/cursor.svg) 4 3,default;width:100%;height:100%;display:block}.app.tool-erase canvas{cursor:url(/cursor-hammer.svg) 24 4,crosshair}.app.tool-paint canvas{cursor:url(/cursor-paint.svg) 16 28,crosshair}.app.cursor-move canvas{cursor:move}.app.cursor-rotate canvas{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='white' stroke-width='2.5'/%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='%23374151' stroke-width='1.5'/%3E%3Cpath d='M12 2 A10 10 0 0 1 22 12' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round'/%3E%3Cpath d='M12 2 A10 10 0 0 1 22 12' fill='none' stroke='%23374151' stroke-width='1.5' stroke-linecap='round'/%3E%3Cpolygon points='22,7 22,12 17,12' fill='white'/%3E%3Cpolygon points='22,7 22,12 17,12' fill='%23374151' transform='scale(0.85) translate(3.3,1.8)'/%3E%3C/svg%3E") 12 12,grab}.dim-label{background:var(--color-primary);color:#fff;letter-spacing:.2px;white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:4px 12px;font-size:13px;font-weight:600;display:inline-flex;transform:translateY(-6px);box-shadow:0 4px 10px #4f46e559}.dim-label--typing{background:var(--color-primary-dark);box-shadow:0 4px 12px #4338ca80}.dim-caret{vertical-align:-.15em;background:#fff;width:1px;height:.95em;margin:0 1px;animation:1s step-end infinite dim-caret-blink;display:inline-block}.dim-unit{opacity:.85}@keyframes dim-caret-blink{50%{opacity:0}}.angle-label{color:#fff;letter-spacing:.2px;white-space:nowrap;text-shadow:0 1px 2px #0009,0 0 4px #0006;flex-direction:column;align-items:center;gap:2px;font-size:18px;font-weight:700;display:inline-flex}.angle-label svg{filter:drop-shadow(0 1px 1px #00000080);display:block}.wall-edit{background:var(--color-primary);color:#fff;letter-spacing:.2px;white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:4px 12px 4px 6px;font-size:13px;font-weight:600;display:inline-flex;transform:translateY(-6px);box-shadow:0 4px 10px #0284c759}.wall-edit input{width:64px;font:inherit;color:var(--color-primary-ink);text-align:right;-moz-appearance:textfield;background:#fff;border:0;border-radius:999px;outline:none;padding:3px 10px}.wall-edit input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.wall-edit input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
