PageSourceSearch

https://cona.design/_next/static/chunks/6957-47ff7b6e7ad30a46.js?dpl=dpl_2cHF1b1npXHgmbkHuJhyPGsqANCi

js cona.design collected 2026-10-05 04:04:43 UTC 51,316 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6957],{22004:e=>{e.exports=JSON.parse('{"_comment":"Slice 5 of FUNCTIONAL_ZONES_PLAN.md (Part B integration, \xa76.10). Maps a user-assigned RoomType label to the ordered list of functional zones that activate inside rooms with that label. `optional: true` mirrors the `?` marker in \xa76.10 — those zones are included only when room area allows after mandatory zones claim their cells (post-Slice-5 work, currently informational only). `circulation` is referenced in \xa76.10 for hallway / entry / mudroom but is NOT yet a shipped zone in placementFields.json (Slice 4 ships 12 zones, circulation is deferred per \xa76.4.13) so those slots are omitted; hallway therefore has no program. `reading` in \xa76.10 master_bedroom is folded into `retreat` per \xa76.4.12 (retreat = own time / reading / meditation). Vendored copies in room/lambdas/{app-api,items,post-object-pipeline}/ MUST stay byte-identical with this file; the TS-side parity test in roomPrograms.test.ts enforces it.","version":1,"programs":{"bedroom":[{"function":"sleep"},{"function":"wardrobe"},{"function":"work","optional":true},{"function":"storage","optional":true}],"master_bedroom":[{"function":"sleep"},{"function":"wardrobe"},{"function":"work","optional":true},{"function":"retreat","optional":true}],"kids_bedroom":[{"function":"sleep"},{"function":"play"},{"function":"storage"},{"function":"work","optional":true}],"guest_bedroom":[{"function":"sleep"},{"function":"storage"}],"living_room":[{"function":"lounge"},{"function":"storage","optional":true},{"function":"work","optional":true},{"function":"retreat","optional":true}],"family_room":[{"function":"lounge"},{"function":"play","optional":true},{"function":"storage"}],"dining_room":[{"function":"dine"},{"function":"storage"}],"kitchen":[{"function":"cook"},{"function":"dine","optional":true}],"kitchen_dining":[{"function":"cook"},{"function":"dine"}],"bathroom":[{"function":"bath"}],"office":[{"function":"work"},{"function":"storage"}],"study":[{"function":"work"},{"function":"storage"},{"function":"retreat","optional":true}],"hallway":[],"entry":[{"function":"entry"},{"function":"storage","optional":true}],"mudroom":[{"function":"entry"},{"function":"storage"},{"function":"utility","optional":true}],"laundry":[{"function":"utility"},{"function":"storage"}],"closet":[{"function":"wardrobe"}],"walk_in_closet":[{"function":"wardrobe"},{"function":"storage"}],"studio":[{"function":"sleep"},{"function":"work","optional":true},{"function":"lounge"},{"function":"dine","optional":true},{"function":"cook"},{"function":"storage"}],"loft":[{"function":"sleep"},{"function":"work","optional":true},{"function":"lounge"},{"function":"storage"}]}}')},29159:(e,r,n)=>{n.d(r,{Gt:()=>s,Mi:()=>p,VQ:()=>c});var a=n(22004),t=n(97388),o=n(68818);let i=t.zones,l=new Set(i.map(e=>e.id)),c=Object.freeze(i.map(e=>{var r;return Object.freeze({id:e.id,displayName:null!=(r=e.displayName)?r:e.id})})),s=Object.freeze(o.sR.reduce((e,r)=>{let n=a.programs[r];if(null==n)throw Error("programForRoomType.json: missing program for RoomType ".concat(JSON.stringify(r),". ")+"Every entry in ROOM_TYPES (floorplanGeometry.ts) must have a program here, even if empty.");return e[r]=Object.freeze(n.map(e=>(function(e,r){if(!l.has(e.function))throw Error("programForRoomType.json: room ".concat(JSON.stringify(r)," references function ").concat(JSON.stringify(e.function)," which is not a known zone in placementFields.json"));return Object.freeze({function:e.function,optional:!0===e.optional,minAreaM2:"number"==typeof e.minAreaM2?e.minAreaM2:null})})(e,r))),e},{}));for(let e of Object.keys(a.programs))if(!o.sR.includes(e))throw Error("programForRoomType.json: program for unknown RoomType ".concat(JSON.stringify(e),". ")+"Add it to ROOM_TYPES in floorplanGeometry.ts or remove the entry.");let f=Object.freeze([]);function u(e){var r;return(null==e?f:null!=(r=s[e])?r:f).map(e=>e.function)}function p(e){if(null!=e.functions){if(0===e.functions.length)return d;let r=new Set;for(let n of e.functions)"string"==typeof n&&l.has(n)&&r.add(n);return Object.freeze(Array.from(r))}let r=(0,o.Fx)(e.roomType);if(null!=r)return u(r);let n=(0,o.Fx)(e.derivedRoomType);return null!=n?u(n):d}let d=Object.freeze([])},42173:(e,r,n)=>{n.d(r,{GY:()=>o,NE:()=>p,ST:()=>u,dD:()=>h,nS:()=>y,s0:()=>d,tu:()=>m,vK:()=>s,wb:()=>b,xl:()=>l});var a=n(65840),t=n(21929);let o="window",i=new Map;function l(e){let r=i.get(e.id);if(r)return r;let n=e.prefersNear,a=[];if(n)for(let e of n){let r=function(e){var r,n;if("string"==typeof e)return e?Object.freeze({type:e,minDistanceM:0,idealDistanceM:.6,maxDistanceM:1.5,side:"any",contact:!1,alignTo:"midpoint",preferPair:!1}):null;if(!e||"object"!=typeof e||"string"!=typeof e.type)return null;let a="number"==typeof e.minDistanceM?e.minDistanceM:0,t="number"==typeof e.idealDistanceM?e.idealDistanceM:!0===e.contact?a:.6,o="number"==typeof e.maxDistanceM?e.maxDistanceM:1.5;return Object.freeze({type:e.type,minDistanceM:a,idealDistanceM:t,maxDistanceM:o,side:null!=(r=e.side)?r:"any",contact:!0===e.contact,alignTo:null!=(n=e.alignTo)?n:"midpoint",preferPair:!0===e.preferPair})}(e);r&&a.push(r)}let t=Object.freeze(a);return i.set(e.id,t),t}Object.freeze(a.types.map(e=>e.id));let c=new Set(a.types.map(e=>e.id)),s=Object.freeze(a.types.reduce((e,r)=>{let n=r.routing;if(null==n||"object"!=typeof n)throw Error("placementTypes.json: type ".concat(r.id," is missing required `routing` field"));if(null!=n.primary&&!Object.prototype.hasOwnProperty.call(t._e,n.primary))throw Error("placementTypes.json: type ".concat(r.id," declares routing.primary=").concat(JSON.stringify(n.primary)," which is not a known zone in placementFields.json"));
1if(null!=n.secondary){if(!Array.isArray(n.secondary))throw Error("placementTypes.json: type ".concat(r.id,".routing.secondary must be an array"));for(let e of n.secondary)if(!Object.prototype.hasOwnProperty.call(t._e,e))throw Error("placementTypes.json: type ".concat(r.id,".routing.secondary references unknown zone ").concat(JSON.stringify(e)))}if(!0===n.inheritFromHost&&!r.surfaces.includes("surface_top"))throw Error("placementTypes.json: type ".concat(r.id,'.routing.inheritFromHost=true requires surfaces to include "surface_top"'));let a=r.surfaces.includes("surface_top");if(null!=r.surfaceZones){if(!Array.isArray(r.surfaceZones))throw Error("placementTypes.json: type ".concat(r.id,".surfaceZones must be an array"));let e=new Set;for(let n of r.surfaceZones){if(null==n||"object"!=typeof n||"string"!=typeof n.id||0===n.id.length)throw Error("placementTypes.json: type ".concat(r.id,".surfaceZones entry missing or has invalid `id`"));if(e.has(n.id))throw Error("placementTypes.json: type ".concat(r.id,".surfaceZones has duplicate id ").concat(JSON.stringify(n.id)));e.add(n.id);let a=n.rect;if(!Array.isArray(a)||4!==a.length||a.some(e=>"number"!=typeof e||!Number.isFinite(e)))throw Error("placementTypes.json: type ".concat(r.id,".surfaceZones[").concat(n.id,"].rect must be [minX, minZ, maxX, maxZ] numbers"));let[t,o,i,l]=a;if(!(t<i)||!(o<l))throw Error("placementTypes.json: type ".concat(r.id,".surfaceZones[").concat(n.id,"].rect must satisfy minX<maxX and minZ<maxZ (got ").concat(JSON.stringify(a),")"))}}if(null!=r.surfaceCoverageMax&&("number"!=typeof r.surfaceCoverageMax||!Number.isFinite(r.surfaceCoverageMax)||r.surfaceCoverageMax<=0||r.surfaceCoverageMax>1))throw Error("placementTypes.json: type ".concat(r.id,".surfaceCoverageMax must be a number in (0, 1] (got ").concat(r.surfaceCoverageMax,")"));if(null!=r.preferredZones){if(!a)throw Error("placementTypes.json: type ".concat(r.id,'.preferredZones requires surfaces to include "surface_top"'));if(!Array.isArray(r.preferredZones)||r.preferredZones.some(e=>"string"!=typeof e||0===e.length))throw Error("placementTypes.json: type ".concat(r.id,".preferredZones must be a non-empty string array"))}if(null!=r.clearanceFrontV2M&&("number"!=typeof r.clearanceFrontV2M||r.clearanceFrontV2M<=0))throw Error("placementTypes.json: type ".concat(r.id,".clearanceFrontV2M must be a positive number"));if(null!=r.surfaceHostTypes){if(!a)throw Error("placementTypes.json: type ".concat(r.id,'.surfaceHostTypes requires surfaces to include "surface_top"'));if(!Array.isArray(r.surfaceHostTypes)||0===r.surfaceHostTypes.length||r.surfaceHostTypes.some(e=>"string"!=typeof e))throw Error("placementTypes.json: type ".concat(r.id,".surfaceHostTypes must be a non-empty string array"))}if(null!=r.maxPerHost){if(!a)throw Error("placementTypes.json: type ".concat(r.id,'.maxPerHost requires surfaces to include "surface_top"'));if("number"!=typeof r.maxPerHost||!Number.isInteger(r.maxPerHost)||r.maxPerHost<1)throw Error("placementTypes.json: type ".concat(r.id,".maxPerHost must be a positive integer (got ").concat(r.maxPerHost,")"))}if(null!=r.facesType){let e=Array.isArray(r.facesType)?r.facesType:[r.facesType];if(0===e.length)throw Error("placementTypes.json: type ".concat(r.id,".facesType must be a non-empty string or string array"));if(!(r.surfaces.includes("floor")||r.surfaces.includes("wall")))throw Error("placementTypes.json: type ".concat(r.id,'.facesType requires surfaces to include "floor" or "wall"'));for(let n of e){if("string"!=typeof n||0===n.length)throw Error("placementTypes.json: type ".concat(r.id,".facesType entries must be non-empty strings"));if(n!==o&&!c.has(n))throw Error("placementTypes.json: type ".concat(r.id,".facesType references unknown type ").concat(JSON.stringify(n),' (must be a known placement type id or "window")'))}}return e[r.id]=Object.freeze({...r}),e},{})),f=new Set(["floor","wall","ceiling","surface_top"]);function u(e){if(!e)return null;let r=e.mountedAt;return"string"!=typeof r?null:f.has(r)?r:null}function p(e){return"string"==typeof e&&Object.prototype.hasOwnProperty.call(s,e)}function d(e){var r;return e&&"string"==typeof e&&null!=(r=s[e])?r:null}function m(e){let r=d(e);return null==r||"surface_top"===r.surfaces[0]}let g=new Set(["rug","sofa","armchair","dining_chair","office_chair","ottoman","stool","bed_single","bed_double","floor_lamp","plant_floor","plant_floor_large","poster","mirror","wall_clock","tv_wall_mount","pendant_lamp"]);function h(e){return!e||!g.has(e)}function y(e){if(null==e)return null;if("string"==typeof e){var r=e;let n=r.trim();if(!n)return null;if(p(n))return n;let t=w(n);if(void 0!==t)return t;let o=n.toLowerCase();for(let e of a.keywordRules)for(let r of e.match)if(o.includes(r.toLowerCase()))return p(e.type)?e.type:null;return null}if("string"==typeof e.type&&p(e.type))return e.type;let n=[];"string"==typeof e.category_name&&e.category_name&&n.push(e.category_name),"string"==typeof e.category&&e.category&&n.push(e.category);let t=n.map(e=>e.toLowerCase());for(let e of a.keywordRules)for(let r of e.match){let n=r.toLowerCase();if(t.some(e=>e.includes(n)))return p(e.type)?e.type:null}if("string"==typeof e.name&&e.name){let r=e.name.toLowerCase(),n=null,t=0;for(let e of a.keywordRules)for(let a of e.match){let o=a.toLowerCase();if(o.length>t&&r.includes(o)){let r=p(e.type)?e.type:null;r&&(n=r,t=o.length)}}if(n)return n}for(let e of n){let r=w(e);if(null!=r)return r}return null}function w(e){if(Object.prototype.hasOwnProperty.call(a.legacyLookup,e))return a.legacyLookup[e]}function b(){let e=[],r=new Map;for(let n of a.types)r.has(n.group)||(r.set(n.group,[]),e.push(n.group)),r.get(n.group).push({id:n.id,displayName:n.displayName});return e.map(e=>({group:e,options:Object.freeze(r.get(e).slice())}))}},54057:(e,r,n)=>{n.d(r,{JX:()=>c,TB:()=>p,g0:()=>s,j1:()=>l,j2:()=>g,ny:()=>f,rs:()=>i,x3:()=>u});var a=n(95704);let t=null;function o(){let e="";try{var r,n;e=null!=(n=null==(r=globalThis.localStorage)?void 0:r.getItem("cona:perfx"))?n:""}catch(r){e=""}if(!e)try{e=void 0!==a&&a.env&&a.env.PERFX||""}catch(r){e=""}return new Set(e.split(",").map(e=>e.trim()).filter(e=>e.startsWith("-")).map(e=>e.slice(1)))}function i(e){return t||(t=o()),!(t.has(e)||t.has("all"))}function l(){return t||(t=o()),[...t].map(e=>"-".concat(e)).join(",")}let c="1"===a.env.NEXT_PUBLIC_PERF_AUDIT,s=0;function f(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(c&&n){let e=globalThis.__perfHoldMs;"number"==typeof e&&(r=e)}let a=!1,t=0,o=null,i=()=>{a||(a=!0,clearTimeout(l),e())},l=setTimeout(i,250+r);return"function"==typeof requestAnimationFrame?t=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>{o=setTimeout(i,r)})}):o=setTimeout(i,r),()=>{a=!0,clearTimeout(l),null!==o&&clearTimeout(o),t&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(t)}}let u=4e3,p=6e4,d=0,m=!1;function g(){if(!m){m=!0;let e=()=>{d=Date.now()};for(let r of["pointerdown","pointerup","keydown","wheel","touchstart"])window.addEventListener(r,e,{capture:!0,passive:!0})}return d}},64387:(e,r,n)=>{n.d(r,{Rq:()=>a,_P:()=>t,kt:()=>u,lk:()=>i,to:()=>o,uA:()=>s,wf:()=>c,xb:()=>l});let a={planeId:"top",yFraction:1,rectFraction:{minX:0,maxX:1,minZ:0,maxZ:1}};function t(e,r,n){return e+n*(r-e)}function o(e,r,n){let a=n.maxX-n.minX,t=n.maxZ-n.minZ;return{halfX:(Number.isFinite(a)?Math.max(0,a):0)*e,halfZ:(Number.isFinite(t)?Math.max(0,t):0)*r}}let i=1,l=8192;function c(e){return new TextEncoder().encode(JSON.stringify(e)).length}function s(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"detected";return{v:i,provenance:r,planes:e.map((e,r)=>
1({planeId:"shelf".concat(r),yFraction:e.yFraction,rectFraction:{minX:e.rectFraction.minX,maxX:e.rectFraction.maxX,minZ:e.rectFraction.minZ,maxZ:e.rectFraction.maxZ}}))}}let f=e=>"number"==typeof e&&Number.isFinite(e);function u(e){if(!e||"object"!=typeof e)return null;let r=Array.isArray(e.planes)?e.planes:[],n=[];for(let e of r){if(!e||"object"!=typeof e)continue;let r=e.rectFraction;if(!f(e.yFraction)||!r||"object"!=typeof r||!f(r.minX)||!f(r.maxX)||!f(r.minZ)||!f(r.maxZ))continue;let a="string"==typeof e.planeId&&e.planeId?e.planeId:"shelf".concat(n.length);n.push({planeId:a,yFraction:Math.min(1,Math.max(0,e.yFraction)),rectFraction:{minX:r.minX,maxX:r.maxX,minZ:r.minZ,maxZ:r.maxZ}})}return n.length?{v:i,provenance:"override"===e.provenance?"override":"detected",planes:n}:null}},65840:e=>{e.exports=JSON.parse('{"_comment":"2026-09-13: five Electronics types (monitor, keyboard, laptop, speaker, desk_accessory) -- surface_top satellites of the desk with maxSurfaceHeightM 1.2, so they host on a 0.75 m desk, which tv_freestanding\'s 0.70 never allowed; keyword rules for them sit before desk/bookshelf/book so \'desk shelf\' and \'macbook\' do not land on desk/bookshelf/book_stack. Stage A of the Intelligent Object Placement project. Single source of truth for the Type enum + PlacementSpec lookup table used by the placement engine (Stages B+). Vendored copies in room/lambdas/app-api/, room/lambdas/items/, and room/lambdas/post-object-pipeline/ MUST stay byte-identical with this file; future CI guard will enforce it. See room/docs/STAGE_A_PLAN.md. Slice 6: replaced the flat belongsToFunction field with structured routing { primary, secondary?, inheritFromHost? } per FUNCTIONAL_ZONES_PLAN.md \xa77.2. Slice 8: added optional facesType (string | string[]) on floor/wall items for the rotation-hint pass per \xa74.7; entries are known type ids or the \\"window\\" sentinel.","version":1,"types":[{"id":"sofa","displayName":"Sofa","group":"Seating","surfaces":["floor"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"lounge"},"clearanceM":{"front":1}},{"id":"sectional","displayName":"Sectional","group":"Seating","surfaces":["floor"],"wallPreference":"long","cornerPreference":true,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"lounge"},"clearanceM":{"front":1}},{"id":"armchair","displayName":"Armchair","group":"Seating","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"lounge","secondary":["retreat"]},"prefersNear":["sofa"]},{"id":"dining_chair","displayName":"Dining chair","group":"Seating","surfaces":["floor"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"dine"},"prefersNear":[{"type":"dining_table","minDistanceM":0,"idealDistanceM":0,"maxDistanceM":0.5,"side":"any","contact":true}],"facesType":"dining_table"},{"id":"office_chair","displayName":"Office chair","group":"Seating","surfaces":["floor"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"work"},"prefersNear":[{"type":"desk","minDistanceM":0,"idealDistanceM":0,"maxDistanceM":0.4,"side":"front","contact":true}],"facesType":"desk","clearanceM":{"back":0.6}},{"id":"bench","displayName":"Bench","group":"Seating","surfaces":["floor"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"entry","secondary":["sleep","dine"]}},{"id":"stool","displayName":"Stool","group":"Seating","surfaces":["floor"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"cook","secondary":["dine","lounge"]},"facesType":"bar_table","prefersNear":[{"type":"bar_table","minDistanceM":0,"idealDistanceM":0,"maxDistanceM":0.4,"side":"long_edge","contact":true}]},{"id":"ottoman","displayName":"Ottoman","group":"Seating","surfaces":["floor"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"rout
1ing":{"primary":"lounge","secondary":["sleep"]}},{"id":"bar_table","displayName":"Bar table","group":"Tables","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"dine","secondary":["cook"]}},{"id":"dining_table","displayName":"Dining table","group":"Tables","surfaces":["floor"],"wallPreference":"none","cornerPreference":false,"centerPreference":true,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"dine"},"clearanceM":{"any":0.9}},{"id":"coffee_table","displayName":"Coffee table","group":"Tables","surfaces":["floor"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"lounge"},"prefersNear":[{"type":"sofa","minDistanceM":0.35,"idealDistanceM":0.45,"maxDistanceM":0.65,"side":"front"},{"type":"sectional","minDistanceM":0.35,"idealDistanceM":0.45,"maxDistanceM":0.65,"side":"front"}],"surfaceCoverageMax":0.4,"surfaceZones":[{"id":"center","rect":[-0.2,-0.15,0.2,0.15]},{"id":"corner_nw","rect":[-0.6,-0.3,-0.2,-0.05]},{"id":"corner_ne","rect":[0.2,-0.3,0.6,-0.05]},{"id":"corner_sw","rect":[-0.6,0.05,-0.2,0.3]},{"id":"corner_se","rect":[0.2,0.05,0.6,0.3]},{"id":"side_n","rect":[-0.2,-0.3,0.2,-0.15]},{"id":"side_s","rect":[-0.2,0.15,0.2,0.3]}]},{"id":"side_table","displayName":"Side table","group":"Tables","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"lounge","secondary":["sleep","retreat"]}},{"id":"console_table","displayName":"Console table","group":"Tables","surfaces":["floor"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"entry","secondary":["lounge","dine"]}},{"id":"desk","displayName":"Desk","group":"Tables","surfaces":["floor"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"work"},"clearanceM":{"front":0.75},"surfaceCoverageMax":0.5,"surfaceZones":[{"id":"back_edge","rect":[-0.9,-0.4,0.9,-0.25]},{"id":"monitor_zone","rect":[-0.45,-0.25,0.45,0]},{"id":"primary","rect":[-0.45,0,0.45,0.4]},{"id":"left_side","rect":[-0.9,-0.25,-0.45,0.4]},{"id":"right_side","rect":[0.45,-0.25,0.9,0.4]}],"facesType":"window"},{"id":"dresser","displayName":"Dresser","group":"Storage","surfaces":["floor","surface_top"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"wardrobe"},"surfaceCoverageMax":0.45,"surfaceZones":[{"id":"center","rect":[-0.2,-0.15,0.2,0.15]},{"id":"back_left","rect":[-0.6,-0.25,-0.2,-0.05]},{"id":"back_right","rect":[0.2,-0.25,0.6,-0.05]},{"id":"back_edge","rect":[-0.2,-0.25,0.2,-0.1]},{"id":"side_left","rect":[-0.6,-0.05,-0.2,0.25]},{"id":"side_right","rect":[0.2,-0.05,0.6,0.25]}],"clearanceFrontV2M":0.75},{"id":"bookshelf","displayName":"Bookshelf","group":"Storage","surfaces":["floor","surface_top"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"storage","secondary":["lounge","work","retreat"]},"clearanceM":{"front":0.45},"clearanceFrontV2M":0.6},{"id":"sideboard","displayName":"Sideboard","group":"Storage","surfaces":["floor","surface_top"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"dine","secondary":["lounge","entry"]},"surfaceCoverageMax":0.4,"surfaceZones":[{"id":"center","rect":[-0.3,-0.15,0.3,0.15]},{"id":"corner_nw","rect":[-0.8,-0.25,-0.3,-0.05]},{"id":"corner_ne","rect":[0.3,-0.25,0.8,-0.05]},{"id":"corner_sw","rect":[-0.8,0.05,-0.3,0.25]},{"id":"corner_se","rect":[0.3,0.05,0.8,0.25]},{"id":"back_edge","rect":[-0.3,-0.25,0.3,-0.1]}],"clearanceFrontV2M":0.75},{"id":"nightstand","displayName":"Nightstand","group":"Storage","surfaces":["floor","surface_top"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"rout
1ing":{"primary":"sleep"},"prefersNear":[{"type":"bed_double","side":"long_edge","contact":true,"alignTo":"headboard","preferPair":true,"maxDistanceM":1.2},{"type":"bed_single","side":"long_edge","contact":true,"alignTo":"headboard","preferPair":true,"maxDistanceM":1.2}],"surfaceCoverageMax":0.5,"surfaceZones":[{"id":"center","rect":[-0.12,-0.1,0.12,0.1]},{"id":"corner_back_left","rect":[-0.3,-0.25,-0.1,-0.05]},{"id":"corner_back_right","rect":[0.1,-0.25,0.3,-0.05]},{"id":"back","rect":[-0.1,-0.25,0.1,-0.1]}]},{"id":"cabinet","displayName":"Cabinet","group":"Storage","surfaces":["floor","surface_top"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"storage","secondary":["wardrobe","cook"]},"clearanceM":{"front":0.8,"doorSwing":"hinge"},"clearanceFrontV2M":0.9},{"id":"shoe_cabinet","displayName":"Shoe cabinet","group":"Storage","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"entry","secondary":["wardrobe"]},"homeArea":"entry"},{"id":"coat_rack","displayName":"Coat rack","group":"Storage","surfaces":["floor"],"wallPreference":"any","cornerPreference":true,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"entry"},"homeArea":"entry"},{"id":"tv_stand","displayName":"TV stand","group":"Storage","surfaces":["floor","surface_top"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"lounge"},"prefersNear":[{"type":"sofa","minDistanceM":1.8,"idealDistanceM":2.5,"maxDistanceM":4,"side":"front"},{"type":"sectional","minDistanceM":1.8,"idealDistanceM":2.5,"maxDistanceM":4,"side":"front"}],"facesType":["sofa","sectional"]},{"id":"bed_single","displayName":"Single bed","group":"Beds","surfaces":["floor"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"sleep"},"clearanceM":{"longSide":{"min":0.45,"ideal":0.6,"required":"one"},"footboard":{"min":0.3}}},{"id":"bed_double","displayName":"Double / queen bed","group":"Beds","surfaces":["floor"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"sleep"},"clearanceM":{"longSide":{"min":0.45,"ideal":0.6,"required":"one"},"footboard":{"min":0.3}}},{"id":"crib","displayName":"Crib","group":"Beds","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"sleep"}},{"id":"floor_lamp","displayName":"Floor lamp","group":"Lighting","surfaces":["floor"],"wallPreference":"any","cornerPreference":true,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"lounge","secondary":["work","retreat","sleep"]},"prefersNear":["sofa","armchair","sectional"]},{"id":"table_lamp","displayName":"Table lamp","group":"Lighting","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.2,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"prefersNear":["nightstand","side_table","dresser","console_table","desk","sideboard"],"preferredZones":["left_side","right_side","center"],"maxPerHost":1,"surfaceHostTypes":["nightstand","side_table","dresser","console_table","desk","sideboard","bar_table","coffee_table"]},{"id":"pendant_lamp","displayName":"Pendant lamp","group":"Lighting","surfaces":["ceiling"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"dine"},"prefersNear":["dining_table","coffee_table"]},{"id":"chandelier","displayName":"Chandelier","group":"Lighting","surfaces":["ceiling"],"wallPreference":"none","cornerPreference":false,"centerPreference":true,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"rout
1ing":{"primary":"dine"},"prefersNear":["dining_table"]},{"id":"sconce","displayName":"Wall sconce","group":"Lighting","surfaces":["wall"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":1.6,"isAnchor":false,"routing":{"primary":null}},{"id":"ceiling_fan","displayName":"Ceiling fan","group":"Lighting","surfaces":["ceiling"],"wallPreference":"none","cornerPreference":false,"centerPreference":true,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null}},{"id":"poster","displayName":"Poster / wall art","group":"Wall art","surfaces":["wall"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":1.5,"isAnchor":false,"routing":{"primary":null}},{"id":"mirror","displayName":"Mirror","group":"Wall art","surfaces":["wall"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":1.5,"isAnchor":false,"routing":{"primary":"wardrobe","secondary":["bath","entry"]}},{"id":"wall_hooks","displayName":"Wall hooks","group":"Wall art","surfaces":["wall"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":1.7,"isAnchor":false,"routing":{"primary":"entry"},"homeArea":"entry"},{"id":"wall_clock","displayName":"Wall clock","group":"Wall art","surfaces":["wall"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":1.8,"isAnchor":false,"routing":{"primary":null}},{"id":"tv_wall_mount","displayName":"TV (wall-mount)","group":"Wall art","surfaces":["wall"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":1.08,"isAnchor":false,"routing":{"primary":"lounge"},"facesType":["sofa","sectional"]},{"id":"rug","displayName":"Rug","group":"Floor decor","surfaces":["floor"],"wallPreference":"none","cornerPreference":false,"centerPreference":true,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null},"fitStrategy":"footprint-only"},{"id":"doormat","displayName":"Doormat","group":"Floor decor","surfaces":["floor"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"entry"},"fitStrategy":"footprint-only","homeArea":"entry"},{"id":"plant_floor","displayName":"Floor plant","group":"Floor decor","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null},"fitStrategy":"height-only"},{"id":"plant_floor_large","displayName":"Floor plant (large)","group":"Floor decor","surfaces":["floor"],"wallPreference":"any","cornerPreference":true,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null},"fitStrategy":"height-only"},{"id":"plant_table","displayName":"Tabletop plant","group":"Surface decor","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.5,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"fitStrategy":"preserve-aspect","requireSurface":true,"prefersNear":["coffee_table","side_table","console_table","sideboard"],"preferredZones":["corner_nw","corner_ne","corner_sw","corner_se","side_left","side_right"],"maxPerHost":2},{"id":"vase","displayName":"Vase","group":"Surface decor","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.5,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"fitStrategy":"preserve-aspect","requireSurface":true,"prefersNear":["coffee_table","dining_table","console_table","side_table","sideboard"],"preferredZones":["center"],"maxPerHost":1},{"id":"book_stack","displayName":"Book stack","group":"Surface decor","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.5,"wallHeightM":null,"isAnchor":false,"rout
1ing":{"primary":null,"inheritFromHost":true},"requireSurface":true,"prefersNear":["coffee_table","dining_table","side_table","console_table","bookshelf","desk"],"preferredZones":["left_side","right_side","corner_nw","corner_ne","corner_sw","corner_se","corner_back_left","corner_back_right"],"maxPerHost":3},{"id":"candle","displayName":"Candle","group":"Surface decor","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.5,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"requireSurface":true,"prefersNear":["coffee_table","dining_table","side_table","console_table"],"preferredZones":["corner_nw","corner_ne","corner_sw","corner_se","corner_back_left","corner_back_right"],"maxPerHost":3},{"id":"frame","displayName":"Picture frame","group":"Surface decor","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.5,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"requireSurface":true,"prefersNear":["dresser","console_table","sideboard","nightstand","side_table","desk"],"preferredZones":["back_edge","back_left","back_right","back","corner_back_left","corner_back_right"],"maxPerHost":3},{"id":"tv_freestanding","displayName":"TV (freestanding)","group":"Appliances","surfaces":["surface_top","floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":0.95,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"lounge"},"prefersNear":["tv_stand","sideboard","cabinet","dresser"],"facesType":["sofa","sectional"]},{"id":"monitor","displayName":"Monitor","group":"Electronics","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.2,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"requireSurface":true,"prefersNear":["desk","dresser","tv_stand","sideboard","console_table"],"preferredZones":["monitor_zone","back_edge","center"],"maxPerHost":2},{"id":"keyboard","displayName":"Keyboard","group":"Electronics","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.2,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"requireSurface":true,"prefersNear":["desk"],"preferredZones":["primary","center"],"maxPerHost":1},{"id":"laptop","displayName":"Laptop","group":"Electronics","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.2,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"requireSurface":true,"fitStrategy":"preserve-aspect","prefersNear":["desk","coffee_table","dining_table","nightstand"],"preferredZones":["primary","center"],"maxPerHost":1},{"id":"speaker","displayName":"Speaker","group":"Electronics","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.2,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"requireSurface":true,"prefersNear":["desk","dresser","tv_stand","sideboard","console_table","nightstand","bookshelf","side_table"],"preferredZones":["left_side","right_side","corner_back_left","corner_back_right","corner_nw","corner_ne"],"maxPerHost":2},{"id":"desk_accessory","displayName":"Desk accessory","group":"Electronics","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.2,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"requireSurface":true,"fitStrategy":"preserve-aspect","prefersNear":["desk","nightstand","dresser","bookshelf","sideboard"],"preferredZones":["left_side","right_side","corner_back_left","corner_back_right","corner_nw","corner_ne"],"maxPerHost":3},{"id":"refrigerator","displayName":"Refrigerator","group":"Appliances","surfaces":["floor"],"wallPreference":"any","cornerPreference":true,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"cook"},"clearanceM":{"front":0.9,"doorSwing":"hinge"}},{"id":"stove","displayName":"Stove","group":"Appliances","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"cook"},"clearanceM":{"front":1}},{"id":"dishwasher","displayName":"Dishwasher","group":"Appliances","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"rout
1ing":{"primary":"cook"},"clearanceM":{"front":0.9}},{"id":"washing_machine","displayName":"Washing machine","group":"Appliances","surfaces":["floor"],"wallPreference":"any","cornerPreference":true,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"bath","secondary":["cook"]},"clearanceM":{"front":0.9}},{"id":"range_hood","displayName":"Range hood","group":"Appliances","surfaces":["wall"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":1.5,"isAnchor":false,"routing":{"primary":"cook"},"prefersNear":["stove"]},{"id":"microwave","displayName":"Microwave","group":"Appliances","surfaces":["surface_top","floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.6,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"cook"},"prefersNear":["cabinet","sideboard"]},{"id":"kitchen_sink","displayName":"Kitchen sink","group":"Kitchen","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"cook"},"clearanceM":{"front":0.9}},{"id":"wall_cabinet","displayName":"Wall cabinet","group":"Kitchen","surfaces":["wall"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":1.5,"isAnchor":false,"routing":{"primary":"cook"},"prefersNear":["cabinet","kitchen_sink","stove"]},{"id":"countertop_appliance","displayName":"Countertop appliance","group":"Kitchen","surfaces":["surface_top"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":1.5,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null,"inheritFromHost":true},"fitStrategy":"preserve-aspect","prefersNear":["sideboard","console_table","dining_table"],"maxPerHost":2},{"id":"toilet","displayName":"Toilet","group":"Bathroom","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":"bath"},"clearanceM":{"front":0.6}},{"id":"bathtub","displayName":"Bathtub","group":"Bathroom","surfaces":["floor"],"wallPreference":"long","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"bath"},"clearanceM":{"front":0.7}},{"id":"shower","displayName":"Shower","group":"Bathroom","surfaces":["floor"],"wallPreference":"any","cornerPreference":true,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"bath"},"clearanceM":{"front":0.6}},{"id":"bathroom_vanity","displayName":"Bathroom vanity","group":"Bathroom","surfaces":["floor"],"wallPreference":"any","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":true,"routing":{"primary":"bath"},"clearanceM":{"front":0.7}},{"id":"decor_misc","displayName":"Other decor","group":"Other","surfaces":["floor"],"wallPreference":"none","cornerPreference":false,"centerPreference":false,"maxSurfaceHeightM":null,"wallHeightM":null,"isAnchor":false,"routing":{"primary":null}}],"legacyLookup":{"Sofas & Couches":"sofa","Chairs":"dining_chair","Tables":"side_table","Beds":"bed_double","Storage":"dresser","Lighting":"decor_misc","Decor":"decor_misc","Rugs":"rug","Kitchen":"decor_misc","Bathroom":"decor_misc","Furniture":null},"keywordRules":[{"match":["shoe rack","shoe cabinet","shoe storage","shoe organizer","shoe bench"],"type":"shoe_cabinet"},{"match":["doormat","door mat","welcome mat","entryway rug","entry rug"],"type":"doormat"},{"match":["coat rack","coat stand","hall tree"],"type":"coat_rack"},{"match":["wall hook","coat hook","hook rail","wall hooks"],"type":"wall_hooks"},{"match":["coffee table"],"type":"coffee_table"},{"match":["bar table","counter table","counter height table"],"type":"bar_table"},{"match":["dining table"],"type":"dining_table"},{"match":["console table","console"],"type":"console_table"},{"match":["nightstand","bedside table"],"type":"nightstand"},{"match":["side table","end table","accent table"],"type":"side_table"},{"match":["desk organizer","pen holder","pencil cup","desk tray","monitor stand","monitor riser","desk shelf","desk pad"],"type":"desk_accessory"},{"match":["laptop","macbook","chromebook","notebook computer"],"type":"laptop"},{"match":["monitor","computer display"],"type":"monitor"},{"match":["keyboard"],"type":"keyboard"},{"match":["speaker","soundbar","sound bar"],"type":"speaker"},{"match":["desk"],"type":"desk"},{"match":["sectional"],"type":"sectional"},{"match":["sofa","couch","loveseat"],"type":"sofa"},{"match":["armchair","accent chair","lounge chair","club chair"],"type":"armchair"},{"match":["dining chair"],"type":"dining_chair"},{"match":["office chair","task chair","desk chair"],"type":"office_chair"},{"match":["bench"],"type":"bench"},{"match":["bar stool","counter stool","stool"],"type":"stool"},{"match":["ottoman","pouf"],"type":"ottoman"},{"match":["dresser","chest of drawers"],"type":"dresser"},{"match":["bookshelf","bookcase","shelf"],"type":"bookshelf"},{"match":["sideboard","credenza","buffet"],"type":"sideboard"},{"match":["tv stand","media console","tv console"],"type":"tv_stand"},{"match":["wardrobe","armoire","cabinet"],"type":"cabinet"},{"match":["crib","bassinet"],"type":"crib"},{"match":["king bed","queen bed","double bed","full bed"],"type":"bed_double"},{"match":["single bed","twin bed"],"type":"bed_single"},{"match":["bed"],"type":"bed_double"},{"match":["floor lamp"],"type":"floor_lamp"},{"match":["table lamp","desk lamp","bedside lamp","reading lamp","lamp"],"type":"table_lamp"},{"match":["pendant"],"type":"pendant_lamp"},{"match":["chandelier"],"type":"chandelier"},{"match":["sconce"],"type":"sconce"},{"match":["ceiling fan"],"type":"ceiling_fan"},{"match":["mirror"],"type":"mirror"},{"match":["wall clock"],"type":"wall_clock"},{"match":["wall tv","tv wall mount","wall-mount tv"],"type":"tv_wall_mount"},{"match":["poster","wall art","painting","print","artwork"],"type":"poster"},{"match":["tv","television"],"type":"tv_freestanding"},{"match":["rug","carpet"],"type":"rug"},{"match":["plant"],"type":"plant_floor"},{"match":["vase"],"type":"vase"},{"match":["candle"],"type":"candle"},{"match":["picture frame","photo frame","frame"],"type":"frame"},{"match":["book"],"type":"book_stack"},{"match":["refrigerator","fridge"],"type":"refrigerator"},{"match":["stove","cooktop","range cooker","wall oven","kitchen range"],"type":"stove"},{"match":["dishwasher"],"type":"dishwasher"},{"match":["washing machine","tumble dryer"],"type":"washing_machine"},{"match":["range hood","cooker hood","extractor hood","vent hood"],"type":"range_hood"},{"match":["microwave"],"type":"microwave"},{"match":["kitchen sink"],"type":"kitchen_sink"},{"match":["wall cabinet","hanging cabinet","upper cabinet"],"type":"wall_cabinet"},{"match":["kettle","toaster","coffee maker","coffee machine","blender","air fryer"],"type":"countertop_appliance"},{"match":["toilet"],"type":"toilet"},{"match":["bathtub","bath tub"],"type":"bathtub"},{"match":["shower"],"type":"shower"},{"match":["bathroom vanity","washbasin","bathroom sink"],"type":"bathroom_vanity"}]}')},97388:e=>{e.exports=JSON.parse('{"_comment":"Slice 4 of FUNCTIONAL_ZONES_PLAN.md (Part B core, \xa76). Single source of truth for functional-zone attractors / repellors. Zones are declared in \xa76.6 resolution order so cross-zone repellors (zone-region) see prior zones. Vendored copies in room/lambdas/{app-api,items,post-object-pipeline}/ MUST stay byte-identical with this file; the TS-side parity test in placementFields.test.ts enforces it.","version":1,"zone
1s":[{"id":"entry","displayName":"Entry","minAreaM2":1,"privacy":0.1,"wet":false,"lightNeed":0.3,"quietNeed":0.2,"combine":"sum","attractors":[{"kind":"point","from":"door-centers","weight":1,"falloffM":1.5,"shape":"linear"}],"repellors":[],"coexistsWith":["storage","circulation"],"conflictsWith":["sleep","work"]},{"id":"bath","displayName":"Bath","minAreaM2":2.5,"privacy":1,"wet":true,"lightNeed":0.4,"quietNeed":0.6,"combine":"sum","attractors":[{"kind":"segment","from":"long-walls","weight":1,"falloffM":0.6,"shape":"linear"},{"kind":"point","from":"window-midpoints","weight":0.3,"falloffM":1.5,"shape":"linear"}],"repellors":[{"kind":"point","from":"room-centroid","weight":0.7,"falloffM":1.5,"shape":"linear"}],"coexistsWith":["sleep","utility"],"conflictsWith":["cook","dine","work"]},{"id":"cook","displayName":"Cook","minAreaM2":4,"privacy":0.3,"wet":true,"lightNeed":0.7,"quietNeed":0.3,"combine":"sum","attractors":[{"kind":"segment","from":"perimeter-band","widthM":0.6,"weight":1,"falloffM":0.6,"shape":"linear"},{"kind":"polygon","from":"placed-items","of":"cook","weight":1,"toleranceM":1.5,"shape":"linear"}],"repellors":[{"kind":"point","from":"room-centroid","weight":0.5,"falloffM":1.5,"shape":"linear"}],"coexistsWith":["dine","utility"],"conflictsWith":["sleep","bath","work"]},{"id":"sleep","displayName":"Sleep","minAreaM2":5,"privacy":0.9,"wet":false,"lightNeed":0.4,"quietNeed":0.9,"combine":"sum","attractors":[{"kind":"point","from":"corners","weight":0.6,"falloffM":0.8,"shape":"gauss"},{"kind":"segment","from":"perimeter-band","widthM":0.5,"weight":0.4,"falloffM":0.5,"shape":"linear"},{"kind":"segment","from":"long-walls","weight":0.4,"falloffM":0.6,"shape":"linear"}],"repellors":[{"kind":"point","from":"door-centers","weight":1,"falloffM":2.5,"shape":"linear"},{"kind":"polygon","from":"zone-region","of":"cook","weight":0.8},{"kind":"polygon","from":"zone-region","of":"bath","weight":0.6},{"kind":"polygon","from":"zone-region","of":"entry","weight":0.7},{"kind":"polygon","from":"placed-items","of":"cook","weight":0.8,"toleranceM":1.5,"shape":"linear"}],"coexistsWith":["wardrobe","retreat"],"conflictsWith":["dine","cook","entry","play"]},{"id":"wardrobe","displayName":"Wardrobe","minAreaM2":1.5,"privacy":0.7,"wet":false,"lightNeed":0.3,"quietNeed":0.5,"combine":"sum","attractors":[{"kind":"segment","from":"short-walls","weight":1,"falloffM":0.6,"shape":"linear"},{"kind":"segment","from":"perimeter-band","widthM":0.6,"weight":0.5,"falloffM":0.6,"shape":"linear"},{"kind":"polygon","from":"zone-region","of":"sleep","weight":0.7}],"repellors":[{"kind":"point","from":"window-midpoints","weight":0.4,"falloffM":1,"shape":"linear"},{"kind":"point","from":"door-centers","weight":0.5,"falloffM":1.2,"shape":"linear"}],"coexistsWith":["sleep"],"conflictsWith":["bath","cook"]},{"id":"dine","displayName":"Dine","minAreaM2":5,"privacy":0.3,"wet":false,"lightNeed":0.7,"quietNeed":0.4,"combine":"sum","attractors":[{"kind":"point","from":"room-centroid","weight":0.8,"falloffM":1.5,"shape":"gauss"},{"kind":"polygon","from":"zone-region","of":"cook","weight":0.6},{"kind":"point","from":"window-midpoints","weight":0.4,"falloffM":2,"shape":"linear"},{"kind":"polygon","from":"placed-items","of":"cook","weight":0.6,"toleranceM":2.5,"shape":"linear"}],"repellors":[{"kind":"segment","from":"perimeter-band","widthM":0.3,"weight":0.3,"falloffM":0.3,"shape":"linear"},{"kind":"point","from":"door-centers","weight":0.8,"falloffM":1.5,"shape":"linear"},{"kind":"polygon","from":"zone-region","of":"bath","weight":1},{"kind":"polygon","from":"zone-region","of":"sleep","weight":0.8}],"coexistsWith":["cook","lounge"],"conflictsWith":["sleep","bath"]},{"id":"lounge","displayName":"Lounge","minAreaM2":6,"privacy":0.3,"wet":false,"lightNeed":0.6,"quietNeed":0.4,"combine":"sum","attractors":[{"kind":"segment","from":"long-walls","weight":0.6,"falloffM":0.7,"shape":"linear"},{"kind":"point","from":"room-centroid","weight":0.5,"falloffM":2,"shape":"linear"},{"kind":"point","from":"window-midpoints","weight":0.5,"falloffM":2.5,"shape":"linear"},{"kind":"polygon","from":"placed-items","of":"lounge","weight":0.3,"toleranceM":3,"shape":"linear"}],"repellors":[{"kind":"point","from":"door-centers","weight":0.7,"falloffM":1.5,"shape":"linear"},{"kind":"polygon","from":"zone-region","of":"cook","weight":0.4},{"kind":"polygon","from":"zone-region","of":"bath","weight":1},{"kind":"polygon","from":"placed-items","of":"cook","weight":0.8,"toleranceM":1,"shape":"linear"}],"coexistsWith":["dine","work","storage","retreat"],"conflictsWith":["sleep","bath"]},{"id":"work","displayName":"Work","minAreaM2":2.5,"privacy":0.6,"wet":false,"lightNeed":0.9,"quietNeed":0.7,"combine":"sum","attractors":[{"kind":"point","from":"window-midpoints","weight":1,"falloffM":2,"shape":"gauss"},{"kind":"segment","from":"long-walls","weight":0.4,"falloffM":0.9,"shape":"linear","idealOffsetM":0.7}],"repellors":[{"kind":"point","from":"door-centers","weight":0.6,"falloffM":1.5,"shape":"linear"},{"kind":"polygon","from":"zone-region","of":"cook","weight":0.8},{"kind":"polygon","from":"zone-region","of":"bath","weight":1},{"kind":"polygon","from":"placed-items","of":"cook","weight":0.8,"toleranceM":1.5,"shape":"linear"}],"coexistsWith":["lounge","storage","sleep","retreat"],"conflictsWith":["bath","cook"]},{"id":"play","displayName":"Play","minAreaM2":2.25,"privacy":0.2,"wet":false,"lightNeed":0.7,"quietNeed":0.2,"combine":"sum","attractors":[{"kind":"point","from":"room-centroid","weight":0.6,"falloffM":2,"shape":"linear"},{"kind":"point","from":"window-midpoints","weight":0.4,"falloffM":2,"shape":"linear"}],"repellors":[{"kind":"polygon","from":"zone-region","of":"bath","weight":1},{"kind":"polygon","from":"zone-region","of":"cook","weight":0.8}],"coexistsWith":["sleep","storage","lounge"],"conflictsWith":["bath","cook"]},{"id":"retreat","displayName":"Retreat","minAreaM2":1.5,"privacy":0.8,"wet":false,"lightNeed":0.5,"quietNeed":0.9,"combine":"sum","attractors":[{"kind":"point","from":"corners","weight":1,"falloffM":0.8,"shape":"gauss"},{"kind":"point","from":"window-midpoints","weight":0.5,"falloffM":1.5,"shape":"linear"},{"kind":"segment","from":"long-walls","weight":0.2,"falloffM":0.5,"shape":"linear"}],"repellors":[{"kind":"point","from":"door-centers","weight":0.7,"falloffM":2,"shape":"linear"},{"kind":"polygon","from":"zone-region","of":"cook","weight":1},{"kind":"polygon","from":"zone-region","of":"bath","weight":1},{"kind":"polygon","from":"zone-region","of":"sleep","weight":0.4},{"kind":"polygon","from":"zone-region","of":"lounge","weight":0.4}],"coexistsWith":["storage","lounge","sleep"],"conflictsWith":[]},{"id":"utility","displayName":"Utility","minAreaM2":1.5,"privacy":0.4,"wet":true,"lightNeed":0.4,"quietNeed":0.2,"combine":"sum","attractors":[{"kind":"segment","from":"perimeter-band","widthM":0.6,"weight":0.5,"falloffM":0.6,"shape":"linear"},{"kind":"polygon","from":"zone-region","of":"bath","weight":0.6},{"kind":"polygon","from":"zone-region","of":"cook","weight":0.6}],"repellors":[{"kind":"polygon","from":"zone-region","of":"sleep","weight":0.8},{"kind":"polygon","from":"zone-region","of":"dine","weight":0.6},{"kind":"polygon","from":"zone-region","of":"lounge","weight":0.6}],"coexistsWith":["storage","bath","cook"],"conflictsWith":["sleep","lounge"]},{"id":"storage","displayName":"Storage","minAreaM2":0.6,"privacy":0.2,"wet":false,"lightNeed":0.3,"quietNeed":0.3,"combine":"sum","attractors":[{"kind":"segment","from":"long-walls","weight":0.6,"falloffM":0.6,"shape":"linear"},{"kind":"segment","from":"perimeter-band","widthM":1,"weight":0.4,"falloffM":1,"shape":"linear"}],"repellors":[{"kind":"polygon","from":"zone-region","of":"cook","weight":0.5}],"coexistsWith":["sleep","work","lounge","dine","wardrobe","entry","play","retreat"],"conflictsWith":[]}]}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.