@font-face{font-family:Doodad Display;src:url(/fonts/Fredoka-Variable.ttf)format("truetype");font-weight:300 700;font-display:swap}:root{--bg:#eef1f5;--panel:#fff;--panel-2:#f6f8fa;--border:#d9dfe6;--text:#1f2a37;--muted:#6b7787;--accent:#2f7dd1;--accent-soft:#e3effc;--selection:#ff8a3d;--ok:#2e7d32;--error:#c0392b;--axis-x:#d9534f;--axis-y:#3f9b4f;--axis-z:#3b78d8;--radius:7px;color:var(--text);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:13px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}button,input,select{font:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:default;opacity:.4}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.app{grid-template:"top top top"48px"shapes view inspector"minmax(0,1fr)"status status status"32px/236px minmax(0,1fr) 276px;height:100%;display:grid}.topbar{background:var(--panel);border-bottom:1px solid var(--border);grid-area:top;align-items:center;gap:10px;padding:0 14px;display:flex}.logo-mark{width:auto;height:24px}.logo{font-family:Doodad Display,system-ui,sans-serif;font-size:18px;font-weight:600}.doc-title{border-radius:var(--radius);min-width:0;color:var(--muted);text-overflow:ellipsis;background:0 0;border:1px solid #0000;padding:5px 8px;font-size:14px}.doc-title:hover{border-color:var(--border)}.doc-title:focus{border-color:var(--accent);background:var(--panel);color:var(--text);outline:none}.file-menu{border-left:1px solid var(--border);padding-left:10px;position:relative}.menu-button{border-radius:var(--radius);background:0 0;border:1px solid #0000;align-items:center;gap:4px;height:30px;padding:0 8px 0 10px;font-weight:500;display:inline-flex}.menu-button:hover,.menu-button.open{background:var(--panel-2);border-color:var(--border)}.menu{z-index:20;border:1px solid var(--border);background:var(--panel);border-radius:9px;flex-direction:column;min-width:230px;padding:5px;display:flex;position:absolute;top:calc(100% + 6px);left:10px;box-shadow:0 10px 30px #0f1e3229}.menu button{text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:10px;padding:7px 9px;display:flex}.menu button:hover,.menu button:focus-visible{background:var(--accent-soft);outline:none}.menu button span{flex:1}.menu kbd,.shortcuts kbd{font:inherit;color:var(--muted);font-size:11px}.menu-divider{background:var(--border);height:1px;margin:4px 6px}.export-button{white-space:nowrap;height:34px;font-weight:600;padding:0 14px!important}.tools{align-items:center;gap:4px;margin:0 auto;display:flex}.tool{border-radius:var(--radius);background:0 0;border:1px solid #0000;place-items:center;width:34px;height:34px;display:grid}.tool:not(:disabled):hover{background:var(--panel-2);border-color:var(--border)}.divider{background:var(--border);width:1px;height:22px;margin:0 6px}.segmented{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel-2);gap:2px;padding:2px;display:inline-flex}.segmented button{color:var(--muted);background:0 0;border:0;border-radius:5px;align-items:center;gap:6px;padding:5px 10px;display:inline-flex}.segmented button:hover{color:var(--text)}.segmented button.active{background:var(--panel);color:var(--accent);box-shadow:0 1px 2px #0000001f}.segmented.small button{padding:1px 9px}.panel{background:var(--panel);overflow-y:auto}.panel h2{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:14px 0 6px;font-size:11px;font-weight:600}.left{border-right:1px solid var(--border);flex-direction:column;grid-area:shapes;min-height:0;padding:0 10px 8px;display:flex;overflow:hidden}.shape-grid{grid-template-columns:repeat(4,1fr);gap:2px;display:grid}.shape{border-radius:var(--radius);color:var(--accent);text-align:center;background:0 0;border:1px solid #0000;flex-direction:column;align-items:center;gap:2px;padding:6px 0 4px;font-size:10px;line-height:1.15;display:flex}.shape span{color:var(--text)}.shape.hole{color:var(--muted)}.shape:hover{background:var(--accent-soft);border-color:#c5ddf6}.inspector{border-left:1px solid var(--border);flex-direction:column;grid-area:inspector;padding:0 14px 12px;display:flex}.inspector-body{flex-direction:column;gap:10px;padding-top:14px;display:flex}.inspector section h3{align-items:baseline;gap:4px;margin:4px 0 6px;font-size:12px;font-weight:600;display:flex}.keep-proportions{color:var(--muted);cursor:pointer;align-items:center;gap:5px;margin-left:auto;font-size:12px;font-weight:400;display:inline-flex}.keep-proportions input{accent-color:var(--accent);margin:0}.inspector .unit{color:var(--muted);font-weight:400}.name-field{border-radius:var(--radius);background:0 0;border:1px solid #0000;width:100%;padding:6px 8px;font-size:15px;font-weight:600}.name-field:hover,.name-field:focus{border-color:var(--border);background:var(--panel)}.kind{color:var(--muted);align-items:center;gap:6px;margin-top:-6px;padding-left:9px;display:flex}.role-toggle{display:flex}.role-toggle button{flex:1;justify-content:center}.vec-fields{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;display:grid}.shape-fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.number-field{border:1px solid var(--border);background:var(--panel);border-radius:6px;align-items:center;min-width:0;display:flex}.number-field.axis-x{border-color:color-mix(in srgb, var(--axis-x) 35%, var(--border));background:color-mix(in srgb, var(--axis-x) 8%, var(--panel))}.number-field.axis-y{border-color:color-mix(in srgb, var(--axis-y) 35%, var(--border));background:color-mix(in srgb, var(--axis-y) 8%, var(--panel))}.number-field.axis-z{border-color:color-mix(in srgb, var(--axis-z) 35%, var(--border));background:color-mix(in srgb, var(--axis-z) 8%, var(--panel))}.number-field:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.number-field.invalid{border-color:var(--error);box-shadow:0 0 0 2px #f8dcd8}.field-label{color:var(--muted);white-space:nowrap;padding:0 4px 0 7px;font-size:11px;font-weight:600}.field-label.axis-x{color:var(--axis-x)}.field-label.axis-y{color:var(--axis-y)}.field-label.axis-z{color:var(--axis-z)}.number-field input{font-variant-numeric:tabular-nums;text-align:right;background:0 0;border:0;outline:0;width:100%;min-width:0;padding:5px 6px 5px 2px}.hint{color:var(--muted);margin:6px 0 0;font-size:11px}.edge-fields{flex-direction:column;gap:4px;margin-bottom:6px;display:flex}.edge-row{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:6px;display:grid}.edge-row:first-child{grid-template-columns:minmax(0,1fr)}.edge-row .sharp{min-width:118px;color:var(--muted);text-align:center;font-size:11px}.edge-fields .hint{margin-top:0}.locked-note{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel-2);align-items:center;gap:6px;padding:6px 8px;font-size:12px;display:flex}.locked-note span{flex:1}.locked-note button{border:1px solid var(--border);background:var(--panel);border-radius:5px;padding:2px 10px;font-size:12px}.my-parts h2{justify-content:space-between;align-items:center;display:flex}.save-part{border:1px solid var(--border);background:var(--panel);color:var(--accent);text-transform:none;letter-spacing:0;border-radius:5px;padding:1px 8px;font-size:11px;font-weight:600}.my-parts .hint{margin:0 0 4px}.part-grid{grid-template-columns:repeat(4,1fr);gap:4px;max-height:150px;display:grid;overflow-y:auto}.part-card{flex-direction:column;align-items:center;min-width:0;display:flex;position:relative}.part-card .part{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);padding:0;overflow:hidden}.part-card .part:hover{border-color:var(--accent)}.part-card .thumb{justify-content:center;align-items:center;width:48px;height:48px;display:flex}.part-card .thumb img{object-fit:cover;width:100%;height:100%}.part-name{text-align:center;text-overflow:ellipsis;white-space:nowrap;width:100%;font-size:10px;line-height:1.2;overflow:hidden}input.part-name{border:1px solid var(--accent);border-radius:3px;padding:0 2px}.part-card .remove{border:1px solid var(--border);background:var(--panel);color:var(--muted);border-radius:50%;padding:1px;display:none;position:absolute;top:-4px;right:2px}.part-card:hover .remove{display:inline-flex}.marquee{z-index:5;border:1px dashed var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent);pointer-events:none;position:absolute}.text-fields{flex-direction:column;gap:6px;display:flex}.text-fields h3{margin-bottom:0}.text-content{resize:vertical;border:1px solid var(--border);background:var(--panel);width:100%;color:var(--text);border-radius:6px;padding:6px 8px;font:14px/1.35 system-ui,sans-serif}.text-content:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft);outline:0}.font-button{border:1px solid var(--border);background:var(--panel);color:var(--text);text-align:left;border-radius:6px;align-items:center;gap:8px;padding:6px 8px;display:flex}.font-button span{flex:1;font-weight:600}.font-button small{color:var(--muted)}.font-button:hover{border-color:var(--accent)}.text-style,.text-arc{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.text-style .segmented button{justify-content:center;min-width:28px}.text-arc .number-field{flex:1;min-width:90px}.text-button{flex-direction:row;justify-content:center;gap:8px;width:100%;margin-top:2px;font-size:12px}.font-dialog .font-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px;display:grid}.font-card,.font-result{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);color:var(--text);text-align:left;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 10px;display:flex}.font-card:hover,.font-result:hover{border-color:var(--accent)}.font-card.current{border-color:var(--accent);background:var(--accent-soft)}.font-card .sample,.font-result .sample{white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:18px;line-height:1.2;overflow:hidden}.font-card small,.font-result small{color:var(--muted);font-size:11px}.font-search{border:1px solid var(--border);width:100%;font:inherit;border-radius:6px;padding:7px 10px}.font-results{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:6px;max-height:240px;display:grid;overflow-y:auto}.modal footer .spacer{flex:1}.align-rows{grid-template-columns:repeat(2,auto);justify-content:start;gap:4px 10px;display:grid}.align-row{align-items:center;gap:2px;display:flex}.align-row .field-label{width:18px;padding:0}.align-row button{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:5px;padding:4px;display:inline-flex}.align-row button:hover{border-color:var(--accent);color:var(--accent)}.align-row button.upright svg{transform:rotate(90deg)scaleX(-1)}.align .hint{margin-top:4px}.number-field.fixed{background:var(--panel-2);border-style:dashed}.number-field.fixed input{color:var(--muted);cursor:default}.screw-fields{flex-direction:column;gap:6px;display:flex}.screw-fields h3{margin-bottom:0}.screw-row{grid-template-columns:40px 1fr;align-items:center;font-size:12px;display:grid}.screw-row select{border:1px solid var(--border);background:var(--panel);border-radius:6px;min-width:0;padding:4px 6px}.screw-fit{border:1px solid var(--border);background:var(--panel-2);border-radius:6px;flex-direction:column;gap:2px;padding:4px 6px;font-size:12px;display:flex}.screw-fit label,.screw-check{cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.screw-fields .hint{margin-top:0}.actions{flex-direction:column;gap:6px;margin-top:6px;display:flex}.actions button{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);align-items:center;gap:8px;padding:7px 10px;display:flex}.actions button:hover{background:var(--panel-2)}.actions button.danger:hover{color:var(--error);background:#fdf1ef;border-color:#efc1bb}.multi-title{text-transform:none!important;letter-spacing:0!important;color:var(--text)!important;margin:0!important;font-size:15px!important}.inspector-empty{color:var(--muted);line-height:1.5}.inspector-empty ol{margin:0;padding-left:18px}.inspector-empty li{margin-bottom:6px}.shortcuts{border-top:1px solid var(--border);margin-top:auto;padding-top:8px}.inspector-body,.inspector-empty{margin-bottom:16px}.shortcuts summary{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;padding:6px 0;font-size:11px;font-weight:600}.shortcuts dl{grid-template-columns:auto 1fr;align-items:center;gap:5px 10px;margin:4px 0 10px;display:grid}.shortcuts dt{white-space:nowrap;gap:3px;display:flex}.shortcuts dd{color:var(--muted);margin:0;font-size:12px}.shortcuts .gesture{font-size:12px;font-weight:600}kbd{border:1px solid var(--border);background:var(--panel-2);text-align:center;min-width:20px;color:var(--text);border-bottom-width:2px;border-radius:4px;padding:0 5px;font:600 11px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:inline-block}.viewport-wrap{grid-area:view;min-width:0;min-height:0;position:relative}.viewport{-webkit-user-select:none;user-select:none;position:absolute;inset:0;overflow:hidden}.viewport canvas{touch-action:none;display:block}.empty-hint{border:1px solid var(--border);color:var(--muted);pointer-events:none;background:#ffffffeb;border-radius:10px;flex-direction:column;align-items:center;gap:2px;padding:10px 18px;display:flex;position:absolute;top:18px;left:50%;transform:translate(-50%);box-shadow:0 2px 10px #00000014}.empty-hint strong{color:var(--text)}.statusbar{white-space:nowrap;color:var(--muted);background:var(--panel);border-top:1px solid var(--border);grid-area:status;align-items:center;gap:14px;padding:0 12px;font-size:12px;display:flex;overflow:hidden}.status-control{align-items:center;gap:6px;display:inline-flex}.status-control select{border:1px solid var(--border);background:var(--panel);border-radius:5px;padding:1px 4px;font-size:12px}.statusbar .spacer{flex:1}.statusbar .error{color:var(--error)}.statusbar .notice{color:#9a6400}.backend{color:var(--text);font-weight:600}.backend.WebGPU{color:var(--ok)}@media (max-width:1100px){.statusbar .hint,.segmented .label{display:none}}.swatches{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.swatch{aspect-ratio:1;cursor:pointer;border:1px solid #00000026;border-radius:50%;padding:0;position:relative}.swatch.active{box-shadow:0 0 0 2px var(--panel), 0 0 0 4px var(--accent)}.swatch.custom{background:conic-gradient(#e54848,#f2c230,#3fa34d,#22a6a0,#3d8bd9,#8a5cd6,#e86fa6,#e54848)}.swatch.custom input{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.tool-toggle{white-space:nowrap;border-radius:var(--radius);height:34px;color:var(--muted);background:0 0;border:1px solid #0000;align-items:center;gap:6px;padding:0 10px;display:inline-flex}.tool-toggle:hover{background:var(--panel-2);border-color:var(--border);color:var(--text)}.tool-toggle.active{color:#5b3ad1;background:#efeafe;border-color:#cfc2fb}.measure-overlay{z-index:1;pointer-events:none;position:absolute;inset:0;overflow:hidden}.snap-label,.measure-label{white-space:nowrap;will-change:transform;position:absolute;top:0;left:0}.snap-label{background:var(--kind,#5c6773);color:#fff;border-radius:4px;padding:1px 6px;font-size:11px;font-weight:600}.measure-label{background:#fffffff2;border:1px solid #cfc2fb;border-radius:7px;flex-direction:column;align-items:center;padding:3px 8px 4px;font-size:11px;display:flex;translate:-50% -50%;box-shadow:0 2px 8px #0000001f}.measure-label strong{color:#5b3ad1;font-size:13px}.measure-label span{color:var(--muted);font-variant-numeric:tabular-nums}.measure-label b{margin-left:4px}.measure-label b.axis-x{color:var(--axis-x)}.measure-label b.axis-y{color:var(--axis-y)}.measure-label b.axis-z{color:var(--axis-z)}.measure-label button{border:1px solid var(--border);background:var(--panel);width:18px;height:18px;color:var(--muted);pointer-events:auto;border-radius:50%;padding:0;font-size:13px;line-height:15px;position:absolute;top:-8px;right:-8px}.measure-label button:hover{color:var(--error)}.measure-label.pending{border-style:dashed}.measure-hint{z-index:2;color:var(--muted);white-space:nowrap;background:#fffffff2;border:1px solid #cfc2fb;border-radius:10px;align-items:center;gap:12px;padding:7px 8px 7px 14px;display:flex;position:absolute;top:14px;left:50%;transform:translate(-50%);box-shadow:0 2px 10px #00000014}.measure-hint b{color:#5b3ad1}.measure-hint button{border:1px solid var(--border);background:var(--panel);border-radius:6px;padding:3px 10px}.measure-hint button:hover{background:var(--panel-2)}.parts{border-top:1px solid var(--border);flex-direction:column;flex:1;min-height:0;margin-top:10px;display:flex}.parts header{align-items:center;gap:4px;display:flex}.parts header h2{margin-right:auto}button.mini{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:6px;align-items:center;gap:4px;padding:2px 7px;font-size:11px;display:inline-flex}button.mini:not(:disabled):hover{background:var(--panel-2)}.tree{flex:1;min-height:40px;margin:0 -4px;padding:0 0 24px;list-style:none;overflow-y:auto}.tree-empty{color:var(--muted);padding:6px 8px;font-size:12px}.row{cursor:default;-webkit-user-select:none;user-select:none;border-radius:6px;align-items:center;gap:4px;height:26px;padding-right:4px;font-size:12.5px;display:flex}.row:hover{background:var(--panel-2)}.row.selected{background:var(--accent-soft);color:#174f8c}.row.editing{box-shadow:inset 3px 0 0 var(--selection);font-weight:600}.row.hidden .name,.row.hidden .row-icon,.row.hidden .dot{opacity:.4}.row.drop-before{box-shadow:inset 0 2px 0 var(--accent)}.row.drop-after{box-shadow:inset 0 -2px 0 var(--accent)}.row.drop-inside{outline:2px solid var(--accent);outline-offset:-2px}.row .caret{width:14px;color:var(--muted);background:0 0;border:0;padding:0;font-size:10px}.row .caret span{transition:transform .12s;display:inline-block}.row .caret span.open{transform:rotate(90deg)}.row-icon{color:var(--accent);display:inline-flex}.row-icon.hole{color:var(--muted)}.row .dot{border:1px solid #0003;border-radius:50%;flex:none;width:8px;height:8px}.row .name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.row .count{background:var(--panel-2);color:var(--muted);border-radius:8px;padding:0 5px;font-size:10.5px}.row .eye{color:var(--muted);visibility:hidden;background:0 0;border:0;padding:2px;display:inline-flex}.row:hover .eye,.row.hidden .eye,.row:hover .lock,.row.locked .lock{visibility:visible}.row .lock{color:var(--muted);visibility:hidden;background:0 0;border:0;padding:2px;display:inline-flex}.row.locked .lock{color:var(--text)}.row .rename{border:1px solid var(--accent);border-radius:4px;flex:1;min-width:0;padding:1px 4px;font-size:12.5px}.group-actions{grid-template-columns:1fr 1fr;gap:6px;display:grid}.group-actions button,button.primary{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);justify-content:center;align-items:center;gap:6px;padding:6px 8px;display:inline-flex}.group-actions button:hover{background:var(--panel-2)}button.primary{border-color:var(--accent);background:var(--accent);color:#fff}button.primary:hover{background:#2a6db8}.scope-bar{z-index:2;white-space:nowrap;background:#fffffff2;border:1px solid #ffc9a6;border-radius:10px;align-items:center;gap:4px;padding:5px 6px 5px 12px;display:flex;position:absolute;top:14px;left:14px;box-shadow:0 2px 10px #00000014}.scope-bar .label{color:var(--selection);margin-right:4px;font-weight:600}.scope-bar button{color:var(--accent);background:0 0;border:0;padding:1px 4px}.scope-bar button:hover{text-decoration:underline}.scope-bar .sep{color:var(--muted);margin-right:4px}.scope-bar .done{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:6px;margin-left:8px;padding:3px 12px}.scope-bar .done:hover{background:var(--panel-2);text-decoration:none}.tool-toggle.final.active{color:#217a3c;background:#e7f6ec;border-color:#a9dcb9}.import-button{border-radius:var(--radius);background:var(--panel-2);color:var(--text);border:1px dashed #b9c6d4;justify-content:center;align-items:center;gap:8px;margin-top:10px;padding:7px 10px;display:flex}.import-button:hover{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.drop-overlay{z-index:50;border:2px dashed var(--accent);color:var(--accent);pointer-events:none;background:#e3effce0;border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:10px;font-size:16px;display:flex;position:fixed;inset:12px}.modal-backdrop{z-index:40;background:#14203059;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal{background:var(--panel);border-radius:12px;flex-direction:column;gap:12px;width:min(440px,100%);max-height:100%;padding:18px 20px;display:flex;overflow-y:auto;box-shadow:0 20px 60px #0f1e324d}.modal.wide{width:min(860px,100%)}.modal header{align-items:center;display:flex}.modal h2{flex:1;margin:0;font-size:17px}.modal p{margin:0;line-height:1.45}.modal .close{border-radius:var(--radius);width:30px;height:30px;color:var(--muted);background:0 0;border:0;place-items:center;display:grid}.modal .close:hover{background:var(--panel-2);color:var(--text)}.modal section{flex-direction:column;gap:4px;display:flex}.modal section h3{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 2px;font-size:11px;font-weight:600}.choice{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;align-items:flex-start;gap:10px;padding:7px 10px;display:flex}.choice:has(input:checked){border-color:var(--accent);background:var(--accent-soft)}.choice.disabled{cursor:default;opacity:.55}.choice input{margin:3px 0 0}.choice span{flex-direction:column;gap:1px;display:flex}.choice small{color:var(--muted);font-size:12px}.choice .badge{background:var(--accent);color:#fff;vertical-align:1px;border-radius:10px;margin-left:6px;padding:1px 7px;font-size:10.5px;font-style:normal;font-weight:600}.choice .sub-option{align-self:flex-start;align-items:center;gap:6px;margin-top:6px;display:inline-flex}label.sub-option input{margin:0}.fit{border-radius:var(--radius);padding:9px 12px;line-height:1.45}.fit.ok{color:#1f5e23;background:#edf7ee}.fit.warn{color:#8a4b00;background:#fff4e5}.svg-import{grid-template-columns:160px minmax(0,1fr);align-items:start;gap:14px;display:grid}.svg-preview{border:1px solid var(--border);border-radius:var(--radius);background:repeating-conic-gradient(#f2f4f7 0% 25%,#fff 0% 50%) 50%/16px 16px;justify-content:center;align-items:center;height:160px;display:flex}.svg-preview img{max-width:92%;max-height:92%}.svg-colors{flex-wrap:wrap;gap:6px 14px;display:flex}.svg-color{align-items:center;gap:6px;font-size:13px;display:flex}.swatch-dot{border:1px solid #0003;border-radius:50%;width:14px;height:14px}.modal .pattern-fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.modal footer{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.modal footer button{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);align-items:center;gap:6px;padding:7px 14px;display:inline-flex}.modal footer button:not(.primary):hover{background:var(--panel-2)}.modal footer button.primary{border-color:var(--accent);background:var(--accent);color:#fff}.unit-choices{grid-template-columns:1fr 1fr;gap:10px;display:grid}.unit-choice{border:1px solid var(--border);background:var(--panel);text-align:left;border-radius:10px;flex-direction:column;align-items:flex-start;gap:3px;padding:12px 14px;display:flex}.unit-choice strong{font-size:15px}.unit-choice span{color:var(--muted)}.unit-choice em{background:var(--accent);color:#fff;border-radius:10px;margin-top:4px;padding:1px 7px;font-size:11px;font-style:normal}.unit-choice:hover,.unit-choice.likely{border-color:var(--accent);background:var(--accent-soft)}.library-actions{align-items:center;gap:8px;display:flex}.library-actions button{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);white-space:nowrap;align-items:center;gap:6px;padding:7px 12px;display:inline-flex}.library-actions button.primary{border-color:var(--accent);background:var(--accent);color:#fff}.library-actions button:not(.primary):hover{background:var(--panel-2)}.library-actions .hint{margin:0 0 0 8px}.design-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;min-height:0;display:grid;overflow-y:auto}.design-card{border:1px solid var(--border);background:var(--panel);border-radius:10px;flex-direction:column;display:flex;overflow:hidden}.design-card.current{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.design-card .open{text-align:left;background:0 0;border:0;flex-direction:column;align-items:stretch;gap:2px;padding:0 0 8px;display:flex}.design-card .open:hover .thumb{filter:brightness(.97)}.thumb{aspect-ratio:4/3;color:#b2bdc9;background:linear-gradient(#f4f7fa,#e4e9ef);place-items:center;margin-bottom:6px;display:grid}.thumb img{object-fit:cover;width:100%;height:100%}.design-card .title{text-overflow:ellipsis;white-space:nowrap;padding:0 10px;font-weight:600;overflow:hidden}.design-card .when{color:var(--muted);padding:0 10px;font-size:11px}.design-card.current .when{color:var(--accent)}.card-actions{justify-content:flex-end;align-items:center;gap:4px;padding:0 8px 8px;display:flex}.card-actions button{min-width:28px;height:28px;color:var(--muted);background:0 0;border:1px solid #0000;border-radius:6px;place-items:center;padding:0 8px;display:grid}.card-actions button:hover{border-color:var(--border);background:var(--panel-2);color:var(--text)}.card-actions button.danger:hover{color:var(--error);background:#fdf1ef;border-color:#efc1bb}.card-actions.confirm{justify-content:space-between;font-size:12px}.card-actions.confirm span{margin-right:auto}.card-actions.confirm button.danger{border-color:var(--error);background:var(--error);color:#fff}.toasts{z-index:60;pointer-events:none;flex-direction:column;align-items:center;gap:6px;display:flex;position:fixed;bottom:44px;left:50%;transform:translate(-50%)}.toast{color:#fff;pointer-events:auto;background:#1f2a37;border-radius:9px;align-items:center;gap:10px;max-width:min(560px,90vw);padding:8px 8px 8px 14px;animation:.18s ease-out toast-in;display:flex;box-shadow:0 8px 24px #0f1e3240}.toast.error{background:#9f2d22}.toast button{color:#ffffffbf;background:0 0;border:0;border-radius:6px;place-items:center;width:24px;height:24px;display:grid}.toast button:hover{color:#fff;background:#ffffff26}@keyframes toast-in{0%{opacity:0;transform:translateY(6px)}}.menu.context-menu{z-index:45;min-width:220px;position:fixed}.menu-title{max-width:260px;color:var(--muted);letter-spacing:.04em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap;padding:4px 9px 6px;font-size:11px;font-weight:600;overflow:hidden}.menu button.danger:hover,.menu button.danger:focus-visible{color:var(--error);background:#fdf1ef}.menu-colors{grid-template-columns:repeat(6,1fr);gap:5px;padding:6px 9px 4px;display:grid}.menu .menu-swatch{border:1px solid #0000001f;border-radius:5px;width:100%;height:22px;padding:0}.menu .menu-swatch:hover,.menu .menu-swatch:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.swatch.custom.paint{background-image:none}.link-button{color:var(--accent);background:0 0;border:0;align-self:flex-start;margin-top:6px;padding:0;font-size:12px}.link-button:hover{text-decoration:underline}.ref-badge{color:#8a5a00;background:#fff6e2;border:1px solid #e3c48a;border-radius:4px;margin-left:4px;padding:0 5px;font-size:10px;line-height:15px}.reference-note{border-radius:var(--radius);color:#6b4a00;background:#fff6e2;margin:0;padding:7px 9px;font-size:12px}.mouse-setting{white-space:nowrap;color:var(--muted);justify-content:space-between;align-items:center;gap:8px;margin:4px 0 10px;font-size:12px;display:flex}.group-actions button.wide{grid-column:1/-1}button.secondary{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);justify-content:center;align-items:center;gap:6px;padding:6px 8px;display:inline-flex}button.secondary:hover{background:var(--panel-2)}.fuse-slider{color:var(--muted);flex-direction:column;grid-column:1/-1;gap:2px;font-size:12px;display:flex}.fuse-slider b{color:var(--text);font-weight:600}.fuse-slider input{width:100%;accent-color:var(--accent)}.region-button{color:var(--selection);flex-direction:row;justify-content:flex-start;gap:8px;padding:6px 8px;font-size:12px}.region-button:hover{background:#fff1e6;border-color:#ffd2b0}.row-icon.region{color:var(--selection)}.region-note{margin:0;font-size:12px;line-height:1.45}.region-actions{grid-template-columns:1fr 1fr;gap:6px;display:grid}.region-actions button{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);justify-content:center;align-items:center;gap:6px;padding:6px 8px;display:inline-flex}.region-actions button.primary{border-color:var(--accent);background:var(--accent);color:#fff}.region-actions button:not(.primary):hover{background:var(--panel-2)}.region-actions button.danger:hover{color:var(--error);background:#fdf1ef;border-color:#efc1bb}.side-panel{border-radius:var(--radius);background:#fff6ef;border:1px solid #ffd2b0;flex-direction:column;gap:6px;margin-top:8px;padding:8px 9px;display:flex}.side-title{font-size:12px}.side-panel .hint{margin:0}.alignment{flex-direction:column;gap:4px;font-size:12px;display:flex}.alignment .exact{color:#17683c;background:#e3f6ec;border-radius:5px;padding:4px 7px}.alignment .near{color:#7a5200;background:#fdf1d9;border-radius:5px;padding:4px 7px}.alignment .none{color:var(--muted)}.draw-buttons{grid-template-columns:1fr 1fr;gap:6px;display:grid}.shape.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.sketch-bar{z-index:3;white-space:nowrap;background:#fffffff7;border:1px solid #b9d4f3;border-radius:10px;flex-wrap:wrap;justify-content:center;align-items:center;gap:3px;width:max-content;max-width:calc(100% - 28px);padding:5px 6px;display:flex;position:absolute;top:14px;left:50%;transform:translate(-50%);box-shadow:0 2px 10px #0000001a}.sketch-bar .label{color:var(--accent);align-items:center;gap:6px;margin-right:8px;font-weight:600;display:inline-flex}.sketch-tools{gap:2px;display:flex}.sketch-bar button{min-width:30px;height:32px;color:var(--text);background:0 0;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;padding:0 7px;display:inline-flex}.sketch-bar button:hover:not(:disabled){background:var(--panel-2)}.sketch-bar button.active{background:var(--accent-soft);color:var(--accent);border-color:#b9d4f3}.sketch-bar button:disabled{opacity:.35}.sketch-bar .sep{background:var(--border);width:1px;height:22px;margin:0 3px}.sketch-bar button.done{border-color:var(--accent);background:var(--accent);color:#fff;margin-left:2px;padding:0 16px;font-weight:600}.sketch-bar button.done:hover{background:#2a6db8}.measure-hint.sketch-hint{white-space:normal;text-align:center;border-color:#b9d4f3;max-width:calc(100% - 32px);top:auto;bottom:14px}.sketch-label{z-index:2;background:var(--accent);color:#fff;font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none;border-radius:5px;padding:2px 7px;font-size:11px;font-weight:600;position:absolute;top:0;left:0}.vec-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.sketch-inspector section .actions,.sketch-fields .actions{margin:0 0 8px}.sketch-inspector section .segmented{margin-top:8px}.sketch-actions{grid-template-columns:1fr 1fr;gap:6px;margin-top:12px;display:grid}.sketch-actions button{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);padding:7px 10px}.sketch-fields .hint{margin:6px 0 8px}.sketch-fields .sub-option{align-items:center;gap:6px;margin-top:8px;display:inline-flex}.sketch-actions button.primary{border-color:var(--accent);background:var(--accent);color:#fff;font-weight:600}.sketch-actions button.primary:hover{background:#2a6db8}.sketch-bar button.mirror.active{color:#7b5cd6;background:#f1ecfd;border-color:#d5c8f5}.sketch-inspector .choice-row{align-items:center;gap:8px;margin-top:8px;display:flex}.sketch-inspector .choice-row>span{min-width:38px;color:var(--muted);font-size:12px}.sketch-inspector .choice-row .segmented{margin-top:0}.sketch-inspector .radius{margin-top:8px}.sketch-bar .sketch-cut{margin:0 4px 0 2px}.sketch-bar .sketch-cut button{min-width:0;height:26px;padding:0 10px}.auth-page{background:radial-gradient(circle at 20% 15%, #dcebfb 0, transparent 45%), radial-gradient(circle at 85% 80%, #ffe7d6 0, transparent 40%), var(--bg);place-items:center;min-height:100%;padding:24px 16px;display:grid}.auth-card{border:1px solid var(--border);background:var(--panel);border-radius:16px;flex-direction:column;gap:16px;width:min(380px,100%);padding:26px 26px 22px;display:flex;box-shadow:0 20px 60px #0f1e321f}.auth-brand{text-align:center;flex-direction:column;align-items:center;gap:6px;display:flex}.auth-wordmark{color:#d9532c;margin:0;font-family:Doodad Display,system-ui,sans-serif;font-size:19px;font-weight:600}.auth-brand h1{text-wrap:balance;margin:0;font-family:Doodad Display,system-ui,sans-serif;font-size:28px;font-weight:600;line-height:1.12}.auth-tagline{color:var(--muted);margin:0;font-size:15px}.auth-brand img{width:150px;height:auto;margin-top:8px}.auth-card h2{margin:0;font-size:17px}.auth-tabs{display:flex}.auth-tabs button{flex:1;padding:6px 8px}.auth-card form{flex-direction:column;gap:12px;display:flex}.auth-card label{color:var(--text);flex-direction:column;gap:5px;font-size:12px;font-weight:600;display:flex}.auth-card label .optional{color:var(--muted);font-weight:400}.auth-card input{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);padding:9px 10px;font-size:14px}.auth-card input:focus{border-color:var(--accent);outline:2px solid var(--accent-soft)}.auth-card .hint{margin:0}.auth-name{flex-direction:column;gap:6px;display:flex}.name-picker{gap:6px;display:flex}.name-picker input{flex:1;min-width:0}.name-roll{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);width:38px;color:var(--muted);flex:none;place-items:center;display:grid}.name-roll:hover:not(:disabled){background:var(--panel-2);color:var(--accent)}.settings-section .name-picker .name-roll:not(.active){padding:0}.admin-rename .name-picker input{font-family:inherit;font-size:13px}.admin-rename .name-roll{width:32px;padding:0}.admin-rename-actions{gap:6px;display:flex}.admin-rename-actions button{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);white-space:nowrap;padding:5px 10px}.admin-rename-actions button:hover:not(:disabled){background:var(--panel-2)}.admin-rename p{grid-column:1/-1}.auth-card button.primary{height:38px;font-size:14px;font-weight:600}.auth-error{border-radius:var(--radius);color:var(--error);background:#fdf1ef;margin:0;padding:7px 10px}.settings-ok{color:var(--ok);margin:0}.auth-link{color:var(--accent);align-self:center;font-size:12px}.auth-starting{opacity:.5;animation:1.2s ease-in-out infinite alternate auth-pulse}.auth-starting img{width:96px}@keyframes auth-pulse{to{opacity:1}}.account-menu{margin-left:8px}.account-menu .menu{min-width:210px;left:auto;right:0}.avatar{color:#fff;letter-spacing:.02em;background:linear-gradient(135deg,#2f7dd1,#7b5cd6);border:2px solid #0000;border-radius:50%;place-items:center;width:34px;height:34px;padding:0;font-size:12px;font-weight:700;display:grid}.avatar:hover,.avatar.open{border-color:var(--accent-soft)}.menu-who{flex-direction:column;padding:6px 10px 4px;display:flex}.menu-who span{color:var(--muted);font-size:12px}.settings-dialog{width:min(560px,100%)}.settings-body{flex-direction:column;gap:18px;display:flex}.settings-section{flex-direction:column;gap:8px;display:flex}.settings-section h3{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:0;font-size:13px}.settings-section .hint{margin:0}.settings-row{align-items:flex-end;gap:8px;display:flex}.settings-row label{flex-direction:column;flex:1;gap:4px;font-size:12px;display:flex}.settings-section input:not([type=checkbox]),.settings-section select{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);padding:7px 9px}.settings-section button:not(.active):not([role=radio]){border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);padding:7px 12px}.settings-section button:hover:not(:disabled){background:var(--panel-2)}.settings-grid{grid-template-columns:150px 1fr;align-items:center;gap:10px 12px;display:grid}.settings-grid>span{color:var(--muted)}.settings-new{align-items:center;gap:8px;display:flex}.settings-new select{flex:1;min-width:0}.settings-password{grid-template-columns:1fr 1fr 1fr;gap:8px;display:grid}.settings-password button{grid-column:1/-1;justify-self:start}.settings-devices{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.settings-devices li{align-items:center;gap:8px;display:flex}.settings-devices em{color:var(--ok);font-style:normal}.settings-devices span span{color:var(--muted)}.admin-dialog{width:min(720px,100%)}.admin-dialog .hint{margin:0}.admin-users{border-collapse:collapse;width:100%}.admin-users th{border-bottom:1px solid var(--border);color:var(--muted);text-align:left;padding:6px 8px;font-size:12px;font-weight:600}.admin-users td{border-bottom:1px solid var(--border);vertical-align:middle;padding:8px}.admin-users tr.disabled td{opacity:.55}.admin-users .muted{color:var(--muted)}.badge{background:var(--accent-soft);color:var(--accent);border-radius:9px;margin-left:6px;padding:1px 6px;font-size:11px;font-weight:600}.badge.off{color:var(--error);background:#fdf1ef}.admin-actions{justify-content:flex-end;gap:6px;display:flex}.admin-actions button,.admin-link button{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);white-space:nowrap;padding:5px 10px}.admin-actions button:hover,.admin-link button:hover{background:var(--panel-2)}.admin-link{border-radius:var(--radius);background:var(--accent-soft);border:1px solid #b9d4f3;grid-template-columns:1fr auto;gap:6px 8px;padding:10px;display:grid}.admin-link span{grid-column:1/-1}.admin-link input{border:1px solid var(--border);border-radius:6px;padding:6px 8px;font-family:ui-monospace,monospace;font-size:12px}.legacy-dialog p{margin:0;line-height:1.5}.legacy-dialog footer{justify-content:flex-end;gap:8px;display:flex}.legacy-dialog footer button:not(.primary){border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);padding:6px 12px}.legacy-dialog footer button.primary{padding:6px 14px}.cloud-status{color:var(--muted);white-space:nowrap;align-items:center;gap:5px;margin-right:14px;display:inline-flex}.cloud-status.saved svg{color:var(--ok)}.cloud-status.saving svg,.cloud-status.connecting svg{color:var(--accent);animation:.9s ease-in-out infinite alternate auth-pulse}.cloud-status.offline{color:#b46a00}.storage-bar{background:var(--panel-2);height:8px;box-shadow:inset 0 0 0 1px var(--border);border-radius:4px;overflow:hidden}.storage-bar span{background:var(--accent);border-radius:4px;height:100%;display:block}.storage-bar.nearly-full span{background:#d9822b}.auth-human{min-height:65px}.version{background:var(--panel-2);color:var(--muted);white-space:nowrap;border-radius:5px;margin:0 6px 0 -2px;padding:1px 6px;font:500 11px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;text-decoration:none}a.version:hover{color:var(--accent)}@media (max-width:1480px){.topbar>.version{display:none}}.menu .version{align-self:flex-start;margin:2px 10px 6px}
