@import "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600&family=Figtree:wght@400;500;600;700&display=swap";:root{--ink:#1c2430;--ink-soft:#4a5568;--ink-faint:#7a8699;--paper:#e9eef3;--paper-deep:#dce4ec;--surface:#ffffffc7;--surface-solid:#f7f9fb;--line:#1c24301a;--line-strong:#1c24302e;--calibrate:#c47a12;--calibrate-soft:#c47a1224;--measure:#0f766e;--measure-soft:#0f766e1f;--danger:#b42318;--shadow:0 1px 0 #1c24300a, 0 12px 40px #1c243014;--radius:12px;--dim-chip-font:13px;--dim-chip-pad-x:6px;--dim-chip-pad-y:5px;--dim-chip-radius:4px;--dim-chip-lift:10px;--font-display:"Fraunces", Georgia, serif;--font-ui:"Figtree", "Segoe UI", sans-serif;color:var(--ink);background:var(--paper);font-family:var(--font-ui);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;min-height:100%;margin:0}body{overflow:hidden}button,input{font:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.45}.empty{place-items:center;min-height:100%;padding:2.5rem 1.25rem 3rem;display:grid;position:relative;overflow:auto}.empty-atmosphere{background:radial-gradient(ellipse 80% 55% at 50% -10%, #0f766e1a, transparent 55%), radial-gradient(ellipse 50% 40% at 90% 80%, #c47a1214, transparent 50%), linear-gradient(180deg, #f3f6f9 0%, var(--paper) 45%, var(--paper-deep) 100%);pointer-events:none;position:absolute;inset:0}.empty-atmosphere:after{content:"";opacity:.35;background-image:linear-gradient(#1c24300a 1px,#0000 1px),linear-gradient(90deg,#1c24300a 1px,#0000 1px);background-size:48px 48px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(70% 60% at 50% 40%,#000,#0000);mask-image:radial-gradient(70% 60% at 50% 40%,#000,#0000)}.empty-content{text-align:center;width:min(440px,100%);animation:.7s cubic-bezier(.22,1,.36,1) both rise;position:relative}.brand{font-family:var(--font-display);letter-spacing:-.03em;margin:0 0 1.25rem;font-size:clamp(2.4rem,6vw,3.25rem);font-weight:600;line-height:1}.empty-title{letter-spacing:-.02em;color:var(--ink);margin:0 0 .65rem;font-size:1.15rem;font-weight:600}.empty-sub{max-width:34ch;color:var(--ink-soft);margin:0 auto 1.75rem;font-size:.98rem;line-height:1.5}.dropzone{border:1.5px dashed var(--line-strong);border-radius:calc(var(--radius) + 4px);background:var(--surface);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);flex-direction:column;align-items:center;gap:.35rem;width:100%;padding:2rem 1.25rem;transition:border-color .2s,background .2s,transform .25s cubic-bezier(.22,1,.36,1);display:flex}.dropzone:hover:not(:disabled),.dropzone.is-dragging{border-color:var(--measure);background:#ffffffeb;transform:translateY(-2px)}.dropzone.is-loading{opacity:.7}.dropzone-icon{width:48px;height:48px;color:var(--measure);background:var(--measure-soft);border-radius:50%;place-items:center;margin-bottom:.35rem;animation:4s ease-in-out infinite float;display:grid}.dropzone-label{letter-spacing:-.01em;font-weight:600}.dropzone-hint{color:var(--ink-faint);font-size:.88rem}.empty-error{color:var(--danger);margin:1rem 0 0;font-size:.9rem}.app{background:radial-gradient(ellipse 90% 60% at 50% 0%, #0f766e0f, transparent 50%), var(--paper);grid-template-rows:auto 1fr;height:100%;display:grid;position:relative}.topbar{border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);z-index:5;background:#f7f9fbe0;grid-template-columns:1fr auto 1fr;align-items:center;gap:.75rem;padding:.7rem 1rem;display:grid}.topbar-brand{align-items:center;gap:.75rem;min-width:0;display:flex}.usage-help{flex-shrink:0;position:relative}.usage-help-trigger{width:1.7rem;height:1.7rem;color:var(--ink-faint);cursor:help;background:0 0;border:1px solid #0000;border-radius:999px;place-items:center;margin:0;padding:0;transition:color .15s,background .15s,border-color .15s;display:grid}.usage-help-trigger:hover,.usage-help:focus-within .usage-help-trigger{color:var(--measure);background:var(--measure-soft);border-color:#0f766e38}.usage-help-panel{z-index:30;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface-solid);width:min(320px,100vw - 2rem);box-shadow:var(--shadow);opacity:0;visibility:hidden;pointer-events:none;padding:.85rem .95rem .9rem;transition:opacity .16s,transform .16s,visibility .16s;position:absolute;top:calc(100% + .55rem);left:0;transform:translateY(-4px)}.usage-help:hover .usage-help-panel,.usage-help:focus-within .usage-help-panel{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0)}.usage-help-title{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);margin:0 0 .55rem;font-size:1.05rem;font-weight:600}.usage-help-list{color:var(--ink-soft);flex-direction:column;gap:.45rem;margin:0;padding:0;font-size:.82rem;line-height:1.35;list-style:none;display:flex}.usage-help-list li{padding-left:.7rem;position:relative}.usage-help-list strong{color:var(--ink);font-weight:650}.usage-help-list li:before{content:"";background:var(--measure);opacity:.7;border-radius:999px;width:4px;height:4px;position:absolute;top:.55em;left:0}.usage-help-list kbd{border:1px solid var(--line-strong);background:var(--paper);font-family:var(--font-ui);color:var(--ink);border-radius:4px;padding:.05em .35em;font-size:.78em;font-weight:600;line-height:1.3;display:inline-block}.brand-btn{font-family:var(--font-display);letter-spacing:-.03em;background:0 0;border:0;padding:0;font-size:1.35rem;font-weight:600}.brand-btn:hover{color:var(--measure)}.plan-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ink-faint);font-size:.85rem;overflow:hidden}.mode-toggle{background:var(--paper-deep);border:1px solid var(--line);border-radius:10px;padding:3px;display:inline-flex}.mode-toggle button{color:var(--ink-soft);background:0 0;border:0;border-radius:8px;padding:.4rem .9rem;font-size:.9rem;font-weight:600;transition:background .18s,color .18s,box-shadow .18s}.mode-toggle button.is-active{background:var(--surface-solid);color:var(--ink);box-shadow:0 1px 2px #1c243014}.topbar-actions{justify-content:flex-end;align-items:center;gap:.5rem;display:flex}.add-object-btn{gap:.3rem}.add-object-btn>span:first-child{margin-top:-.05em;font-size:1.15rem;font-weight:500;line-height:1}.add-object-btn:disabled{opacity:.45;cursor:not-allowed}.btn{border:1px solid #0000;border-radius:9px;justify-content:center;align-items:center;gap:.35rem;padding:.55rem 1rem;font-weight:600;transition:background .15s,border-color .15s,color .15s,box-shadow .15s;display:inline-flex}.btn.compact{padding:.4rem .75rem;font-size:.88rem}.btn.primary{background:var(--ink);color:#fff}.btn.primary:hover:not(:disabled){background:#2a3545}.btn.ghost{border-color:var(--line-strong);color:var(--ink-soft);background:0 0}.btn.ghost:hover:not(:disabled){color:var(--ink);background:#ffffffb3}.btn.ghost.add-object-btn.is-active,.btn.ghost.add-object-btn.is-active:hover:not(:disabled){background:var(--measure);border-color:var(--measure);color:#fff;box-shadow:0 1px 2px #0f766e47}.settings{position:relative}.settings-trigger{gap:.4rem}.settings-trigger.is-open{color:var(--ink);background:#ffffffb3}.settings-panel{z-index:20;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface-solid);width:min(252px,100vw - 2rem);box-shadow:var(--shadow);flex-direction:column;gap:1.05rem;padding:.95rem 1rem 1rem;animation:.2s both rise;display:flex;position:absolute;top:calc(100% + .45rem);right:0}.settings-section{flex-direction:column;gap:.55rem;display:flex}.settings-label-row{justify-content:space-between;align-items:baseline;gap:.75rem;display:flex}.settings-label-row-units{align-items:center}.settings-label{color:var(--ink);font-size:.84rem;font-weight:600}.settings-value{font-variant-numeric:tabular-nums;color:var(--ink-faint);font-size:.8rem;font-weight:500}.settings-unit-toggle{background:var(--paper-deep);border:1px solid var(--line);border-radius:8px;flex:none;padding:2px;display:inline-flex}.settings-unit-toggle button{min-width:2rem;color:var(--ink-soft);background:0 0;border:0;border-radius:6px;padding:.28rem .55rem;font-size:.8rem;font-weight:600;transition:background .18s,color .18s,box-shadow .18s}.settings-unit-toggle button.is-active{background:var(--surface-solid);color:var(--ink);box-shadow:0 1px 2px #1c243014}.settings-slider{appearance:none;background:var(--paper-deep);cursor:pointer;border-radius:999px;outline:none;width:100%;height:4px}.settings-slider::-webkit-slider-thumb{appearance:none;background:var(--measure);border:2px solid #fff;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #1c243033}.settings-slider::-moz-range-thumb{background:var(--measure);border:2px solid #fff;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #1c243033}.settings-slider::-moz-range-track{background:var(--paper-deep);border-radius:999px;height:4px}.settings-divider{background:var(--line);height:1px;margin:-.15rem 0}.settings-change-plan{border:1px solid var(--line-strong);width:100%;color:var(--ink-soft);cursor:pointer;background:0 0;border-radius:9px;justify-content:center;align-items:center;margin:0;padding:.55rem .75rem;font-size:.86rem;font-weight:600;transition:background .15s,border-color .15s,color .15s;display:flex}.settings-change-plan:hover{background:var(--paper);color:var(--ink)}.viewer-wrap{min-height:0;position:relative;overflow:hidden}.coach{z-index:3;border:1px solid var(--line);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);max-width:min(420px,100% - 2rem);color:var(--ink-soft);text-align:center;pointer-events:none;background:#f7f9fbeb;border-radius:999px;margin:0;padding:.5rem 1rem;font-size:.9rem;font-weight:500;line-height:1.25;animation:.35s cubic-bezier(.22,1,.36,1) both coach-rise;position:absolute;bottom:1.25rem;left:50%;box-shadow:0 8px 28px #1c24301a}.coach-calibrate{border-color:#c47a1247}.coach-measure{border-color:#0f766e47}.coach-place{color:var(--measure);background:#ecf8f7f2;border-color:#0f766e66}.viewport{touch-action:none;cursor:crosshair;-webkit-user-select:none;user-select:none;background-color:#e2e8ef;background-image:linear-gradient(#1c243008 1px,#0000 1px),linear-gradient(90deg,#1c243008 1px,#0000 1px),none;background-position:0 0,0 0,0 0;background-repeat:repeat,repeat,repeat;background-size:32px 32px;background-attachment:scroll,scroll,scroll;background-origin:padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box;width:100%;height:100%;overflow:hidden}.viewport.is-panning{cursor:grabbing}.viewport.is-drawing{cursor:crosshair}.viewport.is-dragging-seg{cursor:grabbing}.viewport.is-marqueeing{cursor:crosshair}.viewport.is-editing-length{cursor:default}.viewport.is-placing-object{cursor:crosshair}.marquee{fill:#0f766e1a;stroke:var(--measure);stroke-dasharray:none}.seg .dimension-marks{pointer-events:none}.seg.is-interactive .seg-hit{cursor:grab}.seg.is-interactive .end-hit{fill:#0000;stroke:none;cursor:move;pointer-events:all}.viewport.is-drawing .end-hit{cursor:crosshair}.viewport.is-dragging-seg .end-hit{cursor:grabbing}.plan-object .object-shape{fill:#0f766e14;stroke:var(--measure);pointer-events:none}.plan-object .object-hit{fill:#0000;stroke:none;cursor:grab;pointer-events:all}.plan-object.is-selected .object-shape{fill:#1c24300f;stroke:var(--ink)}.plan-object.is-draft .object-shape{fill:#1c24300a;stroke:var(--ink);opacity:.55}.plan-object.is-draft .object-dim{opacity:.9;pointer-events:none}.object-name{pointer-events:none}.object-name.has-chip rect:not(.object-name-hit){fill:#ffffffeb;stroke:#0f766e59}.object-name-hit{fill:#0000;stroke:none}.object-name text{fill:var(--ink);font-family:var(--font-ui);font-weight:600}.object-name.is-placeholder text{fill:var(--ink-faint);font-weight:500}.object-name.is-editable{cursor:text;pointer-events:all}.object-dim rect{fill:#fffffff0;stroke:#1c24302e}.object-dim text{fill:var(--ink);font-family:var(--font-ui);font-weight:600}.object-dim.is-editable{cursor:text}.object-rotate line{stroke:var(--ink-faint);stroke-dasharray:none;opacity:.55;pointer-events:none}.object-rotate-hit{fill:#0000;stroke:none;cursor:grab;pointer-events:all}.object-rotate-knob{fill:#fff;stroke:var(--ink);pointer-events:none}.name-edit-input{text-align:left}@media (width<=720px){.add-object-label{display:none}}.world{transform-origin:0 0;position:absolute;top:0;left:0}.plan-image{-webkit-user-select:none;user-select:none;pointer-events:none;width:100%;height:100%;box-shadow:var(--shadow);image-rendering:auto;transition:opacity .15s;display:block}.overlay{-webkit-user-select:none;user-select:none;position:absolute;inset:0;overflow:visible}.seg line,.anchor line{stroke-linecap:butt;stroke-linejoin:miter}.seg.calibrate .dimension-marks line{stroke:var(--calibrate)}.seg.measure .dimension-marks line{stroke:var(--measure)}.seg.draft .dimension-marks line{stroke:var(--ink);opacity:.55}.seg.draft .dimension-tick{opacity:.75}.anchor line{stroke:var(--ink)}.snap-ring{stroke:var(--measure);opacity:.9;fill:none!important}.seg.is-selected .dimension-marks line{stroke:var(--ink)}.seg-label rect{fill:#ffffffeb;stroke:var(--line-strong)}.seg.calibrate .seg-label rect{stroke:#c47a1259}.seg.measure .seg-label rect{stroke:#0f766e59}.seg-label,.seg-label text{-webkit-user-select:none;user-select:none}.seg-label.is-editable{cursor:text}.seg-label text{fill:var(--ink);font-family:var(--font-ui);paint-order:stroke;font-weight:600}.length-edit{z-index:5;box-sizing:border-box;height:calc(var(--dim-chip-font) + 2 * var(--dim-chip-pad-y));padding:0 var(--dim-chip-pad-x);border-radius:var(--dim-chip-radius);pointer-events:auto;font-family:var(--font-ui);font-size:var(--dim-chip-font);background:#fffffff5;border:1px solid #0f766e59;align-items:center;gap:.25em;font-weight:600;line-height:1;display:inline-flex;position:absolute;transform:translate(-50%,-50%);box-shadow:0 1px 3px #1c243014}.length-edit-input{color:var(--ink);font:inherit;letter-spacing:-.01em;text-align:right;background:0 0;border:none;outline:none;margin:0;padding:0;line-height:1}.length-edit-unit{color:var(--ink-soft);font:inherit;line-height:1}.selection-bar{color:#fff;z-index:4;background:#1c2430eb;border-radius:999px;align-items:center;gap:.75rem;padding:.45rem .55rem .45rem .9rem;font-size:.88rem;animation:.25s both coach-rise;display:flex;position:absolute;bottom:1.1rem;left:50%}.selection-bar .btn.ghost{color:#fff;border-color:#ffffff40}.selection-bar .btn.ghost:hover{color:#fff;background:#ffffff1f}.sheet{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:6;background:#1c243038;place-items:end center;padding:1.25rem;animation:.2s both fade-in;display:grid;position:absolute;inset:0}.sheet-card{border-radius:calc(var(--radius) + 2px);background:var(--surface-solid);border:1px solid var(--line);width:min(360px,100%);box-shadow:var(--shadow);margin-bottom:.5rem;padding:1.25rem 1.25rem 1.1rem;animation:.35s cubic-bezier(.22,1,.36,1) both rise}.sheet-title{font-family:var(--font-display);letter-spacing:-.02em;margin:0;font-size:1.35rem;font-weight:600}.sheet-sub{color:var(--ink-soft);margin:.35rem 0 1rem;font-size:.92rem}.sheet-row{grid-template-columns:1fr auto;align-items:center;gap:.5rem;margin-bottom:1rem;display:grid}.sheet-input{border:1.5px solid var(--line-strong);letter-spacing:-.01em;background:#fff;border-radius:10px;outline:none;width:100%;padding:.7rem .85rem;font-size:1.15rem;font-weight:600;transition:border-color .15s}.sheet-input:focus{border-color:var(--calibrate)}.sheet-unit{min-width:2rem;color:var(--ink-soft);font-weight:600}.sheet-actions{justify-content:flex-end;gap:.5rem;display:flex}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes coach-rise{0%{opacity:0;transform:translate(-50%)translateY(10px)}to{opacity:1;transform:translate(-50%)translateY(0)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@media (width<=720px){.topbar{grid-template-columns:1fr;justify-items:stretch;gap:.55rem}.topbar-brand{justify-content:space-between}.mode-toggle{justify-self:stretch}.mode-toggle button{flex:1}.topbar-actions{justify-content:flex-end}.coach{font-size:.82rem;bottom:1rem}}
