@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/archivo-vietnamese-wght-normal-XAtsl5Q_.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/archivo-latin-ext-wght-normal-C4zznr8T.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/archivo-latin-wght-normal-E0tuGl4L.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Spline Sans Mono Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/assets/spline-sans-mono-latin-ext-wght-normal-Dh0aNLWd.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Spline Sans Mono Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/assets/spline-sans-mono-latin-wght-normal-DlaB5ohX.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper: #eff1ec;--paper-lift: #f8f9f5;--ink: #16211d;--ink-soft: #61706a;--ink-faint: #99a49e;--rule: #ccd3c8;--laser: #ff3b18;--floor: rgba(42, 102, 82, .17);--floor-edge: #16211d;--wall-pending: #e08a76;--sans: "Archivo Variable", system-ui, -apple-system, sans-serif;--mono: "Spline Sans Mono Variable", ui-monospace, "SF Mono", monospace;--ease-out: cubic-bezier(.22, 1, .36, 1);--sheet-radius: 26px;--thumb-block: 40%;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;overscroll-behavior:none;-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:pointer;-webkit-tap-highlight-color:transparent}:focus-visible{outline:2px solid var(--laser);outline-offset:3px;border-radius:4px}.app{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;user-select:none;-webkit-user-select:none}.canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;touch-action:none;-webkit-touch-callout:none;display:block}.chrome{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;display:flex;flex-direction:column}.chrome button,.chrome .units{pointer-events:auto}.chrome-top{flex:none}.header{display:flex;align-items:center;justify-content:space-between;padding:calc(var(--safe-top) + 8px) 18px 0;gap:12px}.wordmark{font-size:14px;font-weight:600;letter-spacing:-.02em;color:var(--ink);transition:opacity .5s var(--ease-out)}.wordmark[data-dim=true]{opacity:0}.units{display:flex;gap:2px;padding:2px;border:1px solid var(--rule);border-radius:999px;background:color-mix(in srgb,var(--paper-lift) 70%,transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:opacity .22s var(--ease-out)}.units[data-hidden=true]{opacity:0}.units[data-hidden=true] button{pointer-events:none}.units button{min-width:36px;padding:0 6px;height:30px;border-radius:999px;font-family:var(--mono);font-size:12px;letter-spacing:.02em;color:var(--ink-soft);transition:background .22s var(--ease-out),color .22s var(--ease-out)}.units button[aria-pressed=true]{background:var(--ink);color:var(--paper-lift)}.spacer{position:relative;flex:1;pointer-events:none}.landing{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:0 28px;text-align:center;transition:opacity .26s var(--ease-out),transform .26s var(--ease-out)}.landing[data-hidden=true]{opacity:0;transform:translateY(-8px)}.landing-wordmark{font-size:40px;font-weight:600;letter-spacing:-.035em;line-height:1;color:var(--ink)}.landing-tagline{margin:0;font-size:15px;font-weight:450;letter-spacing:-.005em;color:var(--ink-soft)}.landing-cue{display:flex;flex-direction:column;align-items:center;gap:8px;margin-top:26px;color:var(--ink-faint)}.landing-cta{margin:0;font-size:14.5px;font-weight:450;color:var(--ink-soft)}.tap-target-ring{transform-origin:center;animation:tap-pulse 2.2s var(--ease-out) infinite}@keyframes tap-pulse{0%{opacity:.55;transform:scale(.72)}55%{opacity:0;transform:scale(1.15)}to{opacity:0;transform:scale(1.15)}}@media (prefers-reduced-motion: reduce){.tap-target-ring{animation:none;opacity:.55}}.chrome-bottom{position:relative;flex:none;display:flex;flex-direction:column;justify-content:flex-end;transition:opacity .2s var(--ease-out)}.chrome-bottom[data-hidden=true]{opacity:0}.chrome-bottom[data-hidden=true] button{pointer-events:none}@media (max-width: 699px){.chrome-bottom,.sheet{height:var(--thumb-block)}}.hint{flex:none;margin:10px auto 4px;min-height:2.6em;display:flex;align-items:flex-start;justify-content:center;font-size:15.5px;line-height:1.3;font-weight:450;letter-spacing:-.005em;color:var(--ink-soft);text-align:center;padding:0 28px;animation:hint-in .42s var(--ease-out) both}@keyframes hint-in{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}.readout{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0 20px 10px;transition:opacity .22s var(--ease-out)}.readout[data-hidden=true]{opacity:0}.readout-figure{display:flex;align-items:baseline;gap:8px;font-family:var(--mono);font-variant-numeric:tabular-nums;line-height:1;animation:readout-in .32s var(--ease-out) both}@keyframes readout-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.readout-value{font-size:62px;font-weight:500;letter-spacing:-.045em;color:var(--ink);transition:color .42s var(--ease-out)}.readout-value[data-provisional=true]{color:var(--ink-soft)}.readout-unit{font-size:21px;font-weight:400;color:var(--ink-soft);letter-spacing:-.01em}.readout-sub{animation:readout-in .32s 60ms var(--ease-out) both;margin-top:6px;font-family:var(--mono);font-size:13px;color:var(--ink-faint);font-variant-numeric:tabular-nums;letter-spacing:.01em}.readout-sub[data-measuring=true]{color:var(--wall-pending)}.corner-action{position:absolute;left:0;right:0;bottom:calc(var(--safe-bottom) + 80px);display:flex;justify-content:center;padding:0 20px;pointer-events:none}.corner-action button{pointer-events:auto}.undo-note{position:absolute;left:0;right:0;bottom:calc(var(--safe-bottom) + 82px);margin:0;display:flex;align-items:center;justify-content:center;gap:6px;padding:0 20px;font-size:14px;color:var(--ink-faint);pointer-events:none;animation:hint-in .42s var(--ease-out) both}.undo-note svg{color:var(--ink-soft)}.controls{flex:none;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;min-height:46px;padding:0 18px calc(var(--safe-bottom) + 24px)}.control-slot{display:flex;align-items:center;gap:10px;transition:opacity .22s var(--ease-out)}.control-slot[data-align=end]{justify-content:flex-end}.control-slot[data-hidden=true]{opacity:0}.control-slot[data-hidden=true] button{pointer-events:none}.icon-button{width:46px;height:46px;display:grid;place-items:center;border-radius:999px;border:1px solid var(--rule);background:color-mix(in srgb,var(--paper-lift) 74%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--ink);transition:transform .16s var(--ease-out),opacity .2s var(--ease-out)}.icon-button:active{transform:scale(.92)}.icon-button:disabled{opacity:.28;cursor:default}.text-button{height:40px;padding:0 16px;border-radius:999px;border:1px solid var(--rule);background:color-mix(in srgb,var(--paper-lift) 74%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font-size:12px;font-weight:500;letter-spacing:.04em;color:var(--ink-soft);transition:transform .16s var(--ease-out)}.text-button:active{transform:scale(.94)}.remove-corner{gap:7px;display:inline-flex;align-items:center;color:var(--laser);border-color:color-mix(in srgb,var(--laser) 30%,var(--rule));background:color-mix(in srgb,var(--laser) 7%,var(--paper-lift) 74%)}.remove-corner svg{opacity:.85}.sheet{position:absolute;left:0;right:0;bottom:0;z-index:3;display:flex;flex-direction:column;animation:sheet-up .3s var(--ease-out) both}.keypad{flex:1;min-height:0;display:flex;flex-direction:column;padding:12px 12px calc(var(--safe-bottom) + 12px);background:var(--paper-lift);border-top:1px solid var(--rule);border-radius:var(--sheet-radius) var(--sheet-radius) 0 0;box-shadow:0 -14px 40px -20px #16211d73}@keyframes sheet-up{0%{transform:translateY(102%)}to{transform:none}}.keypad-head{display:flex;align-items:center;justify-content:space-between;flex:none;gap:12px;padding:4px 8px 12px}.keypad-state{display:flex;align-items:center;gap:12px;min-width:0;font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap}.keypad-status{display:flex;align-items:center;gap:7px;font-size:13px;letter-spacing:.01em;color:var(--ink-soft)}.keypad-note{display:flex;align-items:baseline;gap:8px;min-height:15px;overflow:hidden;font-size:12.5px;line-height:15px;color:var(--ink-faint)}.state-dot{flex:none;width:7px;height:7px;border-radius:50%;background:var(--ink)}.state-dot[data-status=computed]{background:var(--ink-faint)}.state-dot[data-status=rough]{background:none;box-shadow:inset 0 0 0 1.5px var(--wall-pending)}.keypad-change{color:var(--ink-soft)}.keypad-note[data-warn=true] .keypad-change{color:var(--laser);font-weight:500}.keypad-dismiss{flex:none;display:grid;place-items:center;width:34px;height:34px;margin:-6px -4px -6px 0;border-radius:50%;color:var(--ink-soft)}@keyframes blink{0%,50%{opacity:1}50.01%,to{opacity:0}}.keys{flex:1;min-height:0;display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:1fr;gap:7px}.key{min-height:0;border-radius:14px;background:var(--paper);border:1px solid transparent;font-family:var(--mono);font-size:23px;font-weight:500;color:var(--ink);display:grid;place-items:center;transition:transform .12s var(--ease-out),background .14s var(--ease-out)}.key:active{transform:scale(.94);background:#e4e8e0}.key[data-role=aux]{color:var(--ink-soft);font-size:19px}.key[data-wide=true]{grid-column:span 2}.key[data-role=confirm]{grid-column:4;grid-row:2 / span 3;background:var(--laser);color:#fff;box-shadow:0 6px 18px -8px #ff3b18e6}.key[data-role=confirm]:active{background:#e6300f}.key[data-role=confirm]:disabled{background:var(--rule);color:var(--paper-lift);box-shadow:none;cursor:default}@media (min-width: 700px){.sheet{left:50%;right:auto;bottom:22px;width:384px;transform:translate(-50%)}@keyframes sheet-up{0%{transform:translate(-50%,calc(100% + 22px))}to{transform:translate(-50%)}}.keypad{padding-bottom:12px;border:1px solid var(--rule);border-radius:var(--sheet-radius);box-shadow:0 20px 50px -24px #16211d8c}.keys{flex:none;grid-auto-rows:56px}}.edit-bar{position:absolute;left:50%;bottom:calc(var(--safe-bottom) + 18px);transform:translate(-50%);z-index:3;display:flex;align-items:center;gap:14px;max-width:calc(100% - 40px);padding:7px 7px 7px 16px;border:1px solid var(--rule);border-radius:999px;background:color-mix(in srgb,var(--paper-lift) 88%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 14px 34px -20px #16211d80;font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap;animation:bar-in .22s var(--ease-out) both}@keyframes bar-in{0%{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%)}}.edit-status{display:flex;align-items:center;gap:7px;font-size:13px;letter-spacing:.01em;color:var(--ink-soft)}.edit-bar .keypad-note{min-height:0}.edit-tip{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--ink-faint)}kbd{font-family:var(--mono);font-size:11px;line-height:1;padding:3px 5px;border-radius:5px;border:1px solid var(--rule);background:var(--paper);color:var(--ink-soft)}.edit-set{display:flex;align-items:center;gap:7px;margin-left:auto;height:34px;padding:0 14px;border-radius:999px;background:var(--laser);color:#fff;font-size:13px;font-weight:500;letter-spacing:.01em;transition:background .14s var(--ease-out),opacity .16s var(--ease-out)}.edit-set kbd{border-color:#ffffff73;background:#ffffff29;color:#fff}.edit-set:hover{background:#e6300f}.edit-set[data-quiet=true]{background:none;border:1px solid var(--rule);color:var(--ink-soft)}.edit-set[data-quiet=true] kbd{border-color:var(--rule);background:var(--paper);color:var(--ink-soft)}.edit-set[data-quiet=true]:hover{background:var(--paper)}.edit-set:disabled{background:var(--rule);color:var(--paper-lift);cursor:default}.edit-set:disabled kbd{border-color:transparent;background:#ffffff40;color:var(--paper-lift)}.edit-dismiss{flex:none;display:grid;place-items:center;width:34px;height:34px;border-radius:50%;color:var(--ink-faint);transition:color .14s var(--ease-out)}.edit-dismiss:hover{color:var(--ink)}.grid-dot{fill:var(--rule)}.grid{transition:opacity .6s var(--ease-out);opacity:.85}.grid[data-quiet=true]{opacity:.32}.floor{fill:var(--floor);stroke:none;transition:fill .4s var(--ease-out)}.wall{fill:none;stroke:var(--floor-edge);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round;transition:stroke .32s var(--ease-out)}.wall[data-rough=true],.wall-close[data-rough=true]{stroke:var(--wall-pending)}.snap-guide{stroke:var(--laser);stroke-width:1.25;stroke-dasharray:2 5;stroke-linecap:round;opacity:.85}.wall-active{stroke:var(--laser);stroke-width:4;stroke-linecap:round}.wall-close{stroke:var(--floor-edge);stroke-width:2.5;stroke-linecap:round;fill:none;stroke-dasharray:1;animation:draw-home .42s var(--ease-out) both;transition:stroke .32s var(--ease-out)}@keyframes draw-home{0%{stroke-dashoffset:1}to{stroke-dashoffset:0}}.ghost{stroke:var(--ink-faint);stroke-width:1.5;stroke-dasharray:2 6;stroke-linecap:round}.corner,.here{fill:var(--ink)}.handle{fill:var(--paper-lift);stroke:var(--ink-soft);stroke-width:1.5;transition:r .16s var(--ease-out)}.handle[data-live=true]{fill:var(--laser);stroke:var(--laser)}.ext,.dim-line{stroke:var(--ink-soft);stroke-width:1}.ext{stroke:var(--ink-faint)}.tick{stroke:var(--ink-soft);stroke-width:1.4;stroke-linecap:round}.dim-text{font-family:var(--mono);font-size:16px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.01em;fill:var(--ink);paint-order:stroke fill;stroke:var(--paper);stroke-width:3.5px;stroke-linejoin:round}.dim-unit{font-size:12.5px;font-weight:500;fill:var(--ink-soft)}.dim[data-note=true] .dim-text{fill:var(--ink-soft);font-size:14.5px;font-weight:400;letter-spacing:.01em}.dim[data-note=true] .dim-unit{font-size:11.5px;font-weight:400;fill:var(--ink-faint)}.dim[data-rough=true] .tick{stroke:var(--ink-faint)}.dim[data-rough=true] .dim-line{stroke:var(--rule);stroke-dasharray:3 3.5}.dim[data-computed=true] .dim-line{stroke:var(--ink-faint);stroke-dasharray:1 3}.dim[data-computed=true] .tick{stroke:var(--ink-faint)}.dim-ref{fill:var(--ink-faint);font-weight:400;font-size:12.5px}.dim-caret{fill:var(--ink);font-weight:400;animation:blink 1.06s step-end infinite}@media (prefers-reduced-motion: reduce){.dim-caret{animation:none}}.dim[data-active=true] .dim-ref,.dim[data-active=true] .dim-text,.dim[data-active=true] .dim-unit{fill:var(--laser)}.dim[data-active=true] .dim-text{font-weight:600}.target-core{fill:var(--laser)}.target-ring{fill:none;stroke:var(--laser);stroke-width:1.5}.target-pulse{fill:none;stroke:var(--laser);stroke-width:1.5;transform-box:fill-box;transform-origin:center;animation:pulse 1.9s var(--ease-out) infinite}@keyframes pulse{0%{transform:scale(.62);opacity:.55}70%,to{transform:scale(1.5);opacity:0}}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
