[{"data":1,"prerenderedAt":2547},["ShallowReactive",2],{"$fGXrygUUX6sZnzyek1G-oEbPVICvu8SzsWAOlqvSoLto":3},{"newThing":4,"project":5,"cycle":8,"sections":20,"threads":2536,"otherDocs":2537,"documents":2539,"images":2544,"archiveItems":2545,"links":2546},null,{"id":6,"label":7,"liveBase":4},"qmap","Qmap",{"id":9,"num":10,"dir":11,"name":12,"title":12,"focus":13,"status":14,"statusNote":4,"created":15,"completed":4,"mode":4,"report":4,"recordless":16,"thumbnail":4,"imageCount":17,"artifactCount":18,"lastActivity":15,"hasPickup":16,"hasInitialPrompt":19},"c29",29,"c29.look-and-feel","look-and-feel","Visual look and feel, hierarchy, and labeling — tuned by hand","active","2026-11-03",false,0,2,true,[21,35,45,64,118,155,1735],{"key":22,"title":23,"empty":16,"ast":24},"why","Why",{"type":25,"children":26},"root",[27],{"type":28,"tag":29,"props":30,"children":31},"element","p",{},[32],{"type":33,"value":34},"text","The data pipeline (c22 → c28) is proven. What's left is how the map reads: visual language, how hierarchy (rugs, nesting, actor prominence) comes across, and how labels are placed and sized. This is a hands-on tuning cycle — iterate directly in the scene rather than plan-then-execute.",{"key":36,"title":37,"empty":16,"ast":38},"outcome","Outcome",{"type":25,"children":39},[40],{"type":28,"tag":29,"props":41,"children":42},{},[43],{"type":33,"value":44},"TBD",{"key":46,"title":47,"empty":16,"ast":48},"extra","Working mode",{"type":25,"children":49},[50],{"type":28,"tag":29,"props":51,"children":52},{},[53,55,62],{"type":33,"value":54},"Manual, iterative adjustment. Record each notable adjustment below as a dated entry (what changed, why, before\u002Fafter if a screenshot exists). Thread prompts go in this directory as ",{"type":28,"tag":56,"props":57,"children":59},"code",{"className":58},[],[60],{"type":33,"value":61},"\u003Cthread>-prompt.md",{"type":33,"value":63}," when a thread grows its own artifacts.",{"key":46,"title":65,"empty":16,"ast":66},"Starting point",{"type":25,"children":67},[68],{"type":28,"tag":69,"props":70,"children":71},"ul",{},[72,92,105],{"type":28,"tag":73,"props":74,"children":75},"li",{},[76,78,84,86],{"type":33,"value":77},"Experiment surface: ",{"type":28,"tag":56,"props":79,"children":81},{"className":80},[],[82],{"type":33,"value":83},"dev\u002Fexperiments\u002Fc29.look-and-feel\u002F",{"type":33,"value":85}," — forked from ",{"type":28,"tag":56,"props":87,"children":89},{"className":88},[],[90],{"type":33,"value":91},"c28.live-qcontrol-stream",{"type":28,"tag":73,"props":93,"children":94},{},[95,97,103],{"type":33,"value":96},"Opens in ",{"type":28,"tag":98,"props":99,"children":100},"strong",{},[101],{"type":33,"value":102},"Fixture",{"type":33,"value":104}," source mode (deterministic, no bridge needed); SSE\u002FPoll still available via the toolbar",{"type":28,"tag":73,"props":106,"children":107},{},[108,110,116],{"type":33,"value":109},"Light-rig localStorage key renamed (",{"type":28,"tag":56,"props":111,"children":113},{"className":112},[],[114],{"type":33,"value":115},"c29LookAndFeelLightRig",{"type":33,"value":117},") so tuning here doesn't disturb c28",{"key":46,"title":119,"empty":16,"ast":120},"Areas",{"type":25,"children":121},[122],{"type":28,"tag":69,"props":123,"children":124},{},[125,135,145],{"type":28,"tag":73,"props":126,"children":127},{},[128,133],{"type":28,"tag":98,"props":129,"children":130},{},[131],{"type":33,"value":132},"Look & feel",{"type":33,"value":134}," — materials, colors, lighting, line\u002Fflow styling, background",{"type":28,"tag":73,"props":136,"children":137},{},[138,143],{"type":28,"tag":98,"props":139,"children":140},{},[141],{"type":33,"value":142},"Hierarchy",{"type":33,"value":144}," — rug nesting, rug weight\u002Fcontrast by level, actor prominence",{"type":28,"tag":73,"props":146,"children":147},{},[148,153],{"type":28,"tag":98,"props":149,"children":150},{},[151],{"type":33,"value":152},"Labeling",{"type":33,"value":154}," — actor and rug labels: size, placement, density, truncation, collisions",{"key":46,"title":156,"empty":16,"ast":157},"Adjustments",{"type":25,"children":158},[159],{"type":28,"tag":69,"props":160,"children":161},{},[162,268,351,367,383,466,538,610,635,696,750,797,931,963,1065,1214],{"type":28,"tag":73,"props":163,"children":164},{},[165,169,171,178,180,186,188,193,195],{"type":28,"tag":98,"props":166,"children":167},{},[168],{"type":33,"value":15},{"type":33,"value":170}," — Design scenarios as the working material. Design c101's six finding sessions (handoff: ",{"type":28,"tag":172,"props":173,"children":175},"a",{"href":174},"\u002Fcycles\u002Fqmap\u002Fc29\u002Fdoc\u002Fdesign-c101-finding-sessions",[176],{"type":33,"value":177},"design-c101-finding-sessions.md",{"type":33,"value":179},") become the scenes we tune against. Scenario 1, ",{"type":28,"tag":181,"props":182,"children":183},"em",{},[184],{"type":33,"value":185},"The stranger on the phone",{"type":33,"value":187}," (Vanta MCP), is staged as the page's default ",{"type":28,"tag":98,"props":189,"children":190},{},[191],{"type":33,"value":192},"C101 Scenario",{"type":33,"value":194}," source with Dataflows on.",{"type":28,"tag":69,"props":196,"children":197},{},[198,232,258],{"type":28,"tag":73,"props":199,"children":200},{},[201,206,208,214,216,222,224,230],{"type":28,"tag":98,"props":202,"children":203},{},[204],{"type":33,"value":205},"Data:",{"type":33,"value":207}," ",{"type":28,"tag":56,"props":209,"children":211},{"className":210},[],[212],{"type":33,"value":213},"shared\u002Fdata\u002Fc101-finding-sessions.json",{"type":33,"value":215}," is a copy of design's export, and design owns it. ",{"type":28,"tag":56,"props":217,"children":219},{"className":218},[],[220],{"type":33,"value":221},"shared\u002Fc101Scenarios.js",{"type":33,"value":223}," maps c101 kinds to placeholder meshes and one rug per kind, and holds hand-written flows per scenario. Only ",{"type":28,"tag":56,"props":225,"children":227},{"className":226},[],[228],{"type":33,"value":229},"vanta",{"type":33,"value":231}," has flows so far.",{"type":28,"tag":73,"props":233,"children":234},{},[235,240,242,248,250,256],{"type":28,"tag":98,"props":236,"children":237},{},[238],{"type":33,"value":239},"Finding marks:",{"type":33,"value":241}," a temporary ",{"type":28,"tag":56,"props":243,"children":245},{"className":244},[],[246],{"type":33,"value":247},"⚑",{"type":33,"value":249}," label prefix, with policy, severity and outcome in tags. Favicons now read ",{"type":28,"tag":56,"props":251,"children":253},{"className":252},[],[254],{"type":33,"value":255},"tags.domain",{"type":33,"value":257}," so the prefix doesn't break them.",{"type":28,"tag":73,"props":259,"children":260},{},[261,266],{"type":28,"tag":98,"props":262,"children":263},{},[264],{"type":33,"value":265},"Placeholders:",{"type":33,"value":267}," provider and model share the vendor mesh.",{"type":28,"tag":73,"props":269,"children":270},{},[271,275,277,282,284,330,334,336,342,344,349],{"type":28,"tag":98,"props":272,"children":273},{},[274],{"type":33,"value":15},{"type":33,"value":276}," — ",{"type":28,"tag":98,"props":278,"children":279},{},[280],{"type":33,"value":281},"Zones",{"type":33,"value":283}," rug hierarchy, now the default grouping. Mark's spec:",{"type":28,"tag":69,"props":285,"children":286},{},[287,297],{"type":28,"tag":73,"props":288,"children":289},{},[290,295],{"type":28,"tag":98,"props":291,"children":292},{},[293],{"type":33,"value":294},"Internet:",{"type":33,"value":296}," MCP servers, models (and providers), HTTP destinations.",{"type":28,"tag":73,"props":298,"children":299},{},[300,305,307],{"type":28,"tag":98,"props":301,"children":302},{},[303],{"type":33,"value":304},"Endpoint:",{"type":33,"value":306}," the person stands on it directly.\n",{"type":28,"tag":69,"props":308,"children":309},{},[310,320],{"type":28,"tag":73,"props":311,"children":312},{},[313,318],{"type":28,"tag":98,"props":314,"children":315},{},[316],{"type":33,"value":317},"Provider Account",{"type":33,"value":319}," (personal or business): harness, tools.",{"type":28,"tag":73,"props":321,"children":322},{},[323,328],{"type":28,"tag":98,"props":324,"children":325},{},[326],{"type":33,"value":327},"Repo · Workspace:",{"type":33,"value":329}," files, skills.",{"type":28,"tag":331,"props":332,"children":333},"br",{},[],{"type":33,"value":335},"Endpoint, account and repo are now rugs, not actors. Flows through them are spliced out (A → X → B becomes A → B), so harness → account → Anthropic now reads harness → Anthropic. Flows with only one side, like repo → Read, are dropped. Each rug's subheading is the name of the tag it was grouped by (",{"type":28,"tag":56,"props":337,"children":339},{"className":338},[],[340],{"type":33,"value":341},"ZONE_GROUP_BY",{"type":33,"value":343}," in ",{"type":28,"tag":56,"props":345,"children":347},{"className":346},[],[348],{"type":33,"value":221},{"type":33,"value":350},"). A ⚑ on an account now sits in its rug label. Pre-split meshes are unchanged.",{"type":28,"tag":73,"props":352,"children":353},{},[354,358,360,365],{"type":28,"tag":98,"props":355,"children":356},{},[357],{"type":33,"value":15},{"type":33,"value":359}," — Inside Internet, models, providers and MCP servers moved to their own ",{"type":28,"tag":98,"props":361,"children":362},{},[363],{"type":33,"value":364},"AI Services",{"type":33,"value":366}," rug (subheading \"Models · MCP\"). HTTP destinations stay on the Internet rug itself. The other names considered were Connected Services, AI Endpoints and Agent Services.",{"type":28,"tag":73,"props":368,"children":369},{},[370,374,376,381],{"type":28,"tag":98,"props":371,"children":372},{},[373],{"type":33,"value":15},{"type":33,"value":375}," — AI Services promoted to a top-level rug, ",{"type":28,"tag":181,"props":377,"children":378},{},[379],{"type":33,"value":380},"outside",{"type":33,"value":382}," Internet. Mark: \"even though they're on the internet, let's make them their own rug … outside of the internet\". The three top-level rugs are now AI Services, Internet (HTTP destinations only) and the Endpoint. Scenario 1 has no destinations, so its Internet rug doesn't draw.",{"type":28,"tag":73,"props":384,"children":385},{},[386,390,392,397,399,404,406],{"type":28,"tag":98,"props":387,"children":388},{},[389],{"type":33,"value":15},{"type":33,"value":391}," — Every actor is a plain ",{"type":28,"tag":98,"props":393,"children":394},{},[395],{"type":33,"value":396},"grey sphere",{"type":33,"value":398},", and actor labels show ",{"type":28,"tag":98,"props":400,"children":401},{},[402],{"type":33,"value":403},"on hover only",{"type":33,"value":405},", so the scene reads by hierarchy alone while rugs are tuned.",{"type":28,"tag":69,"props":407,"children":408},{},[409,441],{"type":28,"tag":73,"props":410,"children":411},{},[412,417,418,424,426,432,433,439],{"type":28,"tag":98,"props":413,"children":414},{},[415],{"type":33,"value":416},"Sphere:",{"type":33,"value":207},{"type":28,"tag":56,"props":419,"children":421},{"className":420},[],[422],{"type":33,"value":423},"shared\u002FPlaceholderSphereMesh.js",{"type":33,"value":425},", experiment-only. Default and selected stay grey; highlighted, warning and ignored keep their scheme colors. To bring the meshes back, set ",{"type":28,"tag":56,"props":427,"children":429},{"className":428},[],[430],{"type":33,"value":431},"usePlaceholderSpheres = false",{"type":33,"value":343},{"type":28,"tag":56,"props":434,"children":436},{"className":435},[],[437],{"type":33,"value":438},"ExperimentsApp.vue",{"type":33,"value":440},".",{"type":28,"tag":73,"props":442,"children":443},{},[444,449,450,456,458,464],{"type":28,"tag":98,"props":445,"children":446},{},[447],{"type":33,"value":448},"Labels:",{"type":33,"value":207},{"type":28,"tag":56,"props":451,"children":453},{"className":452},[],[454],{"type":33,"value":455},"actorLabelMode",{"type":33,"value":457}," is set to ",{"type":28,"tag":56,"props":459,"children":461},{"className":460},[],[462],{"type":33,"value":463},"hover",{"type":33,"value":465},". It's still adjustable in the Controls panel.",{"type":28,"tag":73,"props":467,"children":468},{},[469,473,475,480,482,488,490,495,497,503,505],{"type":28,"tag":98,"props":470,"children":471},{},[472],{"type":33,"value":15},{"type":33,"value":474}," — The ",{"type":28,"tag":98,"props":476,"children":477},{},[478],{"type":33,"value":479},"harness",{"type":33,"value":481}," is the one non-sphere pawn: the stock ",{"type":28,"tag":56,"props":483,"children":485},{"className":484},[],[486],{"type":33,"value":487},"AgentMesh",{"type":33,"value":489}," icosahedron with a small hat (a brim and crown), at ",{"type":28,"tag":98,"props":491,"children":492},{},[493],{"type":33,"value":494},"4x",{"type":33,"value":496}," size, still and without bobbing. Its base is lifted to line up with the spheres. It lives in ",{"type":28,"tag":56,"props":498,"children":500},{"className":499},[],[501],{"type":33,"value":502},"shared\u002FHarnessMesh.js",{"type":33,"value":504},", and is also used for the root process in live data.",{"type":28,"tag":69,"props":506,"children":507},{},[508,518,528],{"type":28,"tag":73,"props":509,"children":510},{},[511,516],{"type":28,"tag":98,"props":512,"children":513},{},[514],{"type":33,"value":515},"Layout:",{"type":33,"value":517}," the layout still gives it a one-actor cell, so it overhangs the back corner of the account rug.",{"type":28,"tag":73,"props":519,"children":520},{},[521,526],{"type":28,"tag":98,"props":522,"children":523},{},[524],{"type":33,"value":525},"Hover label:",{"type":33,"value":527}," the camera frames the scene by the rugs, not by mesh height, so the label sits under the page header.",{"type":28,"tag":73,"props":529,"children":530},{},[531,536],{"type":28,"tag":98,"props":532,"children":533},{},[534],{"type":33,"value":535},"Color:",{"type":33,"value":537}," it keeps AgentMesh's black default state, not the spheres' grey.",{"type":28,"tag":73,"props":539,"children":540},{},[541,545,547,552,554,560,562],{"type":28,"tag":98,"props":542,"children":543},{},[544],{"type":33,"value":15},{"type":33,"value":546}," — Replaced by an existing model. Mark: \"use our existing models, I see the helpers. can we split the grey one with the red hat out of the pair\". The harness is now the ",{"type":28,"tag":98,"props":548,"children":549},{},[550],{"type":33,"value":551},"grey, red-hatted helper",{"type":33,"value":553},", split out of the MagicaVoxel ",{"type":28,"tag":56,"props":555,"children":557},{"className":556},[],[558],{"type":33,"value":559},"Helpers",{"type":33,"value":561}," pair.",{"type":28,"tag":69,"props":563,"children":564},{},[565,590,600],{"type":28,"tag":73,"props":566,"children":567},{},[568,573,574,580,582,588],{"type":28,"tag":98,"props":569,"children":570},{},[571],{"type":33,"value":572},"How it was split:",{"type":33,"value":207},{"type":28,"tag":56,"props":575,"children":577},{"className":576},[],[578],{"type":33,"value":579},"scripts\u002Fsplit-helpers.py",{"type":33,"value":581}," keeps the faces at y ≥ 0.7 that aren't purple, caps the two feet the export had culled where the figures touched, and drops the model onto y=0. Output: ",{"type":28,"tag":56,"props":583,"children":585},{"className":584},[],[586],{"type":33,"value":587},"assets\u002Fhelper-grey\u002FHelper Grey.{obj,mtl,png}",{"type":33,"value":589},", 134 vertices and 100 faces. It stays in c29, so c23's manifest is untouched.",{"type":28,"tag":73,"props":591,"children":592},{},[593,598],{"type":28,"tag":98,"props":594,"children":595},{},[596],{"type":33,"value":597},"Size and placement:",{"type":33,"value":599}," 4x the sphere height (1.76), with its base level with the spheres' bases, original colors, and no state tint. Its hover label now shows.",{"type":28,"tag":73,"props":601,"children":602},{},[603,608],{"type":28,"tag":98,"props":604,"children":605},{},[606],{"type":33,"value":607},"The hat:",{"type":33,"value":609}," in the source geometry it sits 2 voxels (0.2) above the body (body top y=1.4, hat bottom y=1.6).",{"type":28,"tag":73,"props":611,"children":612},{},[613,617,619,625,627,633],{"type":28,"tag":98,"props":614,"children":615},{},[616],{"type":33,"value":15},{"type":33,"value":618}," — The account rug label is now just its class: ",{"type":28,"tag":56,"props":620,"children":622},{"className":621},[],[623],{"type":33,"value":624},"⚑ personal",{"type":33,"value":626}," (or ",{"type":28,"tag":56,"props":628,"children":630},{"className":629},[],[631],{"type":33,"value":632},"business",{"type":33,"value":634},"). The full name (\"dana's Claude Pro · personal\") was stretching the rug. Mark: \"That long name isn't working well here.. it's stretching out the rug\". The rug shrank, and the workspace rug now packs beside it inside the Endpoint.",{"type":28,"tag":73,"props":636,"children":637},{},[638,642,644,649,651,656,658,664,665],{"type":28,"tag":98,"props":639,"children":640},{},[641],{"type":33,"value":15},{"type":33,"value":643}," — A ",{"type":28,"tag":98,"props":645,"children":646},{},[647],{"type":33,"value":648},"View",{"type":33,"value":650}," toggle in the toolbar, ",{"type":28,"tag":98,"props":652,"children":653},{},[654],{"type":33,"value":655},"Isometric | Flat",{"type":33,"value":657},", bound to ",{"type":28,"tag":56,"props":659,"children":661},{"className":660},[],[662],{"type":33,"value":663},"config.camera.cameraPreset",{"type":33,"value":440},{"type":28,"tag":69,"props":666,"children":667},{},[668,686],{"type":28,"tag":73,"props":669,"children":670},{},[671,676,678,684],{"type":28,"tag":98,"props":672,"children":673},{},[674],{"type":33,"value":675},"What Flat does:",{"type":33,"value":677}," Flat is qmap's ",{"type":28,"tag":56,"props":679,"children":681},{"className":680},[],[682],{"type":33,"value":683},"flatland",{"type":33,"value":685}," preset: a top-down camera, with voxel models (the harness helper) pitched up to face it. The spheres look the same either way.",{"type":28,"tag":73,"props":687,"children":688},{},[689,694],{"type":28,"tag":98,"props":690,"children":691},{},[692],{"type":33,"value":693},"Behaviour when switching:",{"type":33,"value":695}," the model pose flips at once, while the camera animates over, so for a moment the helper lies flat in the isometric view.",{"type":28,"tag":73,"props":697,"children":698},{},[699,703,705,710,712,717,719,725,727,733,735,741,743,749],{"type":28,"tag":98,"props":700,"children":701},{},[702],{"type":33,"value":15},{"type":33,"value":704}," — The page now ",{"type":28,"tag":98,"props":706,"children":707},{},[708],{"type":33,"value":709},"opens in Flat",{"type":33,"value":711},". The harness helper now renders ",{"type":28,"tag":98,"props":713,"children":714},{},[715],{"type":33,"value":716},"unlit",{"type":33,"value":718},": voxel ",{"type":28,"tag":56,"props":720,"children":722},{"className":721},[],[723],{"type":33,"value":724},"materialMode: \"original\"",{"type":33,"value":726},", a MeshBasicMaterial with the exact palette colors. Scene lighting was washing it out. Face-on in Flat it reads like the 2D pixel pawn. In Isometric its faces are all the same tone, so it loses shading. The other modes (",{"type":28,"tag":56,"props":728,"children":730},{"className":729},[],[731],{"type":33,"value":732},"original-lit",{"type":33,"value":734},", ",{"type":28,"tag":56,"props":736,"children":738},{"className":737},[],[739],{"type":33,"value":740},"override",{"type":33,"value":742},"…) are in c23's ",{"type":28,"tag":56,"props":744,"children":746},{"className":745},[],[747],{"type":33,"value":748},"voxAssetLoader.js",{"type":33,"value":440},{"type":28,"tag":73,"props":751,"children":752},{},[753,757,759,764,766,772,774,780,782,788,790,795],{"type":28,"tag":98,"props":754,"children":755},{},[756],{"type":33,"value":15},{"type":33,"value":758}," — The Controls panel's sections (camera, appearance, labels, behavior, dataflow, lighting) now ",{"type":28,"tag":98,"props":760,"children":761},{},[762],{"type":33,"value":763},"start closed",{"type":33,"value":765},". This needed a new optional ",{"type":28,"tag":56,"props":767,"children":769},{"className":768},[],[770],{"type":33,"value":771},"collapsed",{"type":33,"value":773}," prop on q-nuxt-layer's ",{"type":28,"tag":56,"props":775,"children":777},{"className":776},[],[778],{"type":33,"value":779},"dev\u002FConfigurator.vue",{"type":33,"value":781},", passed through to ",{"type":28,"tag":56,"props":783,"children":785},{"className":784},[],[786],{"type":33,"value":787},"ControlSection",{"type":33,"value":789},"'s existing ",{"type":28,"tag":56,"props":791,"children":793},{"className":792},[],[794],{"type":33,"value":771},{"type":33,"value":796}," prop. It defaults to false, so other users of the panel are unchanged. The change is uncommitted in q-nuxt-layer, alongside that repo's other unrelated uncommitted edits.",{"type":28,"tag":73,"props":798,"children":799},{},[800,804,805,810,812,818,819,825,827,833,835],{"type":28,"tag":98,"props":801,"children":802},{},[803],{"type":33,"value":15},{"type":33,"value":643},{"type":28,"tag":98,"props":806,"children":807},{},[808],{"type":33,"value":809},"rugs",{"type":33,"value":811}," section in Controls: ",{"type":28,"tag":56,"props":813,"children":815},{"className":814},[],[816],{"type":33,"value":817},"rugStrokeColor",{"type":33,"value":734},{"type":28,"tag":56,"props":820,"children":822},{"className":821},[],[823],{"type":33,"value":824},"rugStrokeWidth",{"type":33,"value":826}," (0.5–6px) and ",{"type":28,"tag":56,"props":828,"children":830},{"className":829},[],[831],{"type":33,"value":832},"rugFillDepth0–3",{"type":33,"value":834},", all applied live.",{"type":28,"tag":69,"props":836,"children":837},{},[838,871,921],{"type":28,"tag":73,"props":839,"children":840},{},[841,846,847,853,855,861,863,869],{"type":28,"tag":98,"props":842,"children":843},{},[844],{"type":33,"value":845},"How it works:",{"type":33,"value":207},{"type":28,"tag":56,"props":848,"children":850},{"className":849},[],[851],{"type":33,"value":852},"shared\u002FrugStyle.js",{"type":33,"value":854}," writes into ",{"type":28,"tag":56,"props":856,"children":858},{"className":857},[],[859],{"type":33,"value":860},"COLORS.rugDepth",{"type":33,"value":862},", which new rugs read, and calls a new ",{"type":28,"tag":56,"props":864,"children":866},{"className":865},[],[867],{"type":33,"value":868},"GroupRug.refreshStyle()",{"type":33,"value":870}," on the rugs already on screen. Both rug-creation paths (initial load and transitions) pick it up without extra wiring. The section stays out of QMap props.",{"type":28,"tag":73,"props":872,"children":873},{},[874,887,889,895,897,903,905,911,913,919],{"type":28,"tag":98,"props":875,"children":876},{},[877,879,885],{"type":33,"value":878},"src change (",{"type":28,"tag":56,"props":880,"children":882},{"className":881},[],[883],{"type":33,"value":884},"src\u002Fboundaries\u002FGroupRug.js",{"type":33,"value":886},"):",{"type":33,"value":888}," the rug border is now ",{"type":28,"tag":56,"props":890,"children":892},{"className":891},[],[893],{"type":33,"value":894},"Line2",{"type":33,"value":896}," + ",{"type":28,"tag":56,"props":898,"children":900},{"className":899},[],[901],{"type":33,"value":902},"LineMaterial",{"type":33,"value":904},", because ",{"type":28,"tag":56,"props":906,"children":908},{"className":907},[],[909],{"type":33,"value":910},"LineBasicMaterial",{"type":33,"value":912}," is always 1px in WebGL. ",{"type":28,"tag":56,"props":914,"children":916},{"className":915},[],[917],{"type":33,"value":918},"COLORS.rugDepth.borderWidth",{"type":33,"value":920}," defaults to 1, so the look is unchanged by default.",{"type":28,"tag":73,"props":922,"children":923},{},[924,929],{"type":28,"tag":98,"props":925,"children":926},{},[927],{"type":33,"value":928},"Not exposed yet:",{"type":33,"value":930}," fill opacity is still the global 0.2.",{"type":28,"tag":73,"props":932,"children":933},{},[934,938,940,945,947,953,955,961],{"type":28,"tag":98,"props":935,"children":936},{},[937],{"type":33,"value":15},{"type":33,"value":939}," — Color controls use a ",{"type":28,"tag":98,"props":941,"children":942},{},[943],{"type":33,"value":944},"hex picker",{"type":33,"value":946}," in place of the browser's native picker, whose UI opens on RGB. It's in q-nuxt-layer's ",{"type":28,"tag":56,"props":948,"children":950},{"className":949},[],[951],{"type":33,"value":952},"dev\u002FControlColor.vue",{"type":33,"value":954},": a saturation\u002Fbrightness square, a hue strip and a hex field, teleported to the body, and it opens upward when there's no room below. The props and events are unchanged, so every page using ",{"type":28,"tag":56,"props":956,"children":958},{"className":957},[],[959],{"type":33,"value":960},"DevControlColor",{"type":33,"value":962}," now gets it. Uncommitted in q-nuxt-layer.",{"type":28,"tag":73,"props":964,"children":965},{},[966,970,972],{"type":28,"tag":98,"props":967,"children":968},{},[969],{"type":33,"value":15},{"type":33,"value":971}," — More picker and rug-default changes, from Mark:",{"type":28,"tag":69,"props":973,"children":974},{},[975,985,1008],{"type":28,"tag":73,"props":976,"children":977},{},[978,983],{"type":28,"tag":98,"props":979,"children":980},{},[981],{"type":33,"value":982},"HSB fields:",{"type":33,"value":984}," the picker gained H (0–360), S and B (0–100) number fields above the hex row. Mark: \"keep the picker, but use hsb\".",{"type":28,"tag":73,"props":986,"children":987},{},[988,993,995,1000,1002,1007],{"type":28,"tag":98,"props":989,"children":990},{},[991],{"type":33,"value":992},"New c29 rug defaults:",{"type":33,"value":994}," every fill is ",{"type":28,"tag":98,"props":996,"children":997},{},[998],{"type":33,"value":999},"F5F5F5",{"type":33,"value":1001}," (depths 4 and up follow step 3). The border is ",{"type":28,"tag":98,"props":1003,"children":1004},{},[1005],{"type":33,"value":1006},"2px D9D9D9",{"type":33,"value":440},{"type":28,"tag":73,"props":1009,"children":1010},{},[1011,1016,1018,1024,1026,1031,1033,1039,1041,1047,1049,1055,1057,1063],{"type":28,"tag":98,"props":1012,"children":1013},{},[1014],{"type":33,"value":1015},"Labels in the lower left:",{"type":33,"value":1017}," a new ",{"type":28,"tag":56,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":33,"value":1023},"rugLabelAlign",{"type":33,"value":1025}," control (left or right) defaults to left. In ",{"type":28,"tag":56,"props":1027,"children":1029},{"className":1028},[],[1030],{"type":33,"value":884},{"type":33,"value":1032},", the label position (duplicated in create and resize) became ",{"type":28,"tag":56,"props":1034,"children":1036},{"className":1035},[],[1037],{"type":33,"value":1038},"_positionLabel()",{"type":33,"value":1040},", the canvas text aligns to match, and ",{"type":28,"tag":56,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":33,"value":1046},"refreshStyle()",{"type":33,"value":1048}," rebuilds the label when the alignment changes. ",{"type":28,"tag":56,"props":1050,"children":1052},{"className":1051},[],[1053],{"type":33,"value":1054},"COLORS.rugDepth.labelAlign",{"type":33,"value":1056}," defaults to ",{"type":28,"tag":56,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":33,"value":1062},"'right'",{"type":33,"value":1064},", so other pages are unchanged.",{"type":28,"tag":73,"props":1066,"children":1067},{},[1068,1072,1074,1079,1081,1086,1088,1094,1095,1101,1102,1108,1110,1116,1117],{"type":28,"tag":98,"props":1069,"children":1070},{},[1071],{"type":33,"value":15},{"type":33,"value":1073}," — Rug label typography. The name is ",{"type":28,"tag":98,"props":1075,"children":1076},{},[1077],{"type":33,"value":1078},"Inter semibold (600) at 75%",{"type":33,"value":1080},", and the small heading is ",{"type":28,"tag":98,"props":1082,"children":1083},{},[1084],{"type":33,"value":1085},"Inter bold (700) at 50%",{"type":33,"value":1087},". The new controls are ",{"type":28,"tag":56,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":33,"value":1093},"rugNameWeight",{"type":33,"value":734},{"type":28,"tag":56,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":33,"value":1100},"rugNameScale",{"type":33,"value":734},{"type":28,"tag":56,"props":1103,"children":1105},{"className":1104},[],[1106],{"type":33,"value":1107},"rugHeadingWeight",{"type":33,"value":1109}," and ",{"type":28,"tag":56,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":33,"value":1115},"rugHeadingScale",{"type":33,"value":440},{"type":28,"tag":69,"props":1118,"children":1119},{},[1120,1161,1171,1187,1197],{"type":28,"tag":73,"props":1121,"children":1122},{},[1123,1128,1129,1135,1137,1143,1145,1151,1153,1159],{"type":28,"tag":98,"props":1124,"children":1125},{},[1126],{"type":33,"value":1127},"src changes:",{"type":33,"value":207},{"type":28,"tag":56,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":33,"value":1134},"src\u002Fstyles\u002FlabelMetrics.js",{"type":33,"value":1136}," gains ",{"type":28,"tag":56,"props":1138,"children":1140},{"className":1139},[],[1141],{"type":33,"value":1142},"RUG_LABEL_STYLE",{"type":33,"value":1144}," (defaults 500 \u002F 400 at 1×, the shipped look) and ",{"type":28,"tag":56,"props":1146,"children":1148},{"className":1147},[],[1149],{"type":33,"value":1150},"layoutRugLabel()",{"type":33,"value":1152},". GroupRug and ",{"type":28,"tag":56,"props":1154,"children":1156},{"className":1155},[],[1157],{"type":33,"value":1158},"measureLabelWidth",{"type":33,"value":1160}," both use it now, where each used to carry its own copy of the fonts and sizes.",{"type":28,"tag":73,"props":1162,"children":1163},{},[1164,1169],{"type":28,"tag":98,"props":1165,"children":1166},{},[1167],{"type":33,"value":1168},"Why the label height changed:",{"type":33,"value":1170}," it is now canvas pixels × a fixed world-per-pixel. It used to be a fixed 0.7 or 0.5 × scale, which stretched smaller fonts back up to the same size.",{"type":28,"tag":73,"props":1172,"children":1173},{},[1174,1179,1180,1185],{"type":28,"tag":98,"props":1175,"children":1176},{},[1177],{"type":33,"value":1178},"Live changes:",{"type":33,"value":207},{"type":28,"tag":56,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":33,"value":1046},{"type":33,"value":1186}," rebuilds a label when its alignment or typography changes. Layout spacing that depends on label width only updates on the next rebuild.",{"type":28,"tag":73,"props":1188,"children":1189},{},[1190,1195],{"type":28,"tag":98,"props":1191,"children":1192},{},[1193],{"type":33,"value":1194},"Font loading:",{"type":33,"value":1196}," Inter still isn't loaded by the page; it's installed on Mark's machine.",{"type":28,"tag":73,"props":1198,"children":1199},{},[1200,1205,1207,1212],{"type":28,"tag":98,"props":1201,"children":1202},{},[1203],{"type":33,"value":1204},"Heading bump:",{"type":33,"value":1206}," Mark: \"increase sub 25%\". The heading went from 50% to ",{"type":28,"tag":98,"props":1208,"children":1209},{},[1210],{"type":33,"value":1211},"62.5%",{"type":33,"value":1213},", and the slider step is now 0.025. Endpoint, account and repo use service, app and database until the c101 pawns exist.",{"type":28,"tag":73,"props":1215,"children":1216},{},[1217,1221,1222,1227,1229,1235,1237,1243,1245],{"type":28,"tag":98,"props":1218,"children":1219},{},[1220],{"type":33,"value":15},{"type":33,"value":276},{"type":28,"tag":98,"props":1223,"children":1224},{},[1225],{"type":33,"value":1226},"Tool treatments",{"type":33,"value":1228},", a side-by-side comparison page (",{"type":28,"tag":56,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":33,"value":1234},"tool-treatments.html",{"type":33,"value":1236},", linked from the dev app as ",{"type":28,"tag":56,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":33,"value":1242},"c29.tool-treatments",{"type":33,"value":1244},"). The same scenario three ways: labels on lines, tool belt and expanding stack. Mark: tools \"as 3d objects with as much space as a harness feels wrong.\" The main c29 page still draws tools as pawns.",{"type":28,"tag":69,"props":1246,"children":1247},{},[1248,1289,1307,1324,1350,1368,1384,1394,1418,1428,1446,1464,1496,1522,1570,1594,1644,1676,1725],{"type":28,"tag":73,"props":1249,"children":1250},{},[1251,1256,1257,1263,1265,1271,1273,1279,1281,1287],{"type":28,"tag":98,"props":1252,"children":1253},{},[1254],{"type":33,"value":1255},"Code:",{"type":33,"value":207},{"type":28,"tag":56,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":33,"value":1262},"shared\u002FtoolTreatments.js",{"type":33,"value":1264}," (tool data and sessions), ",{"type":28,"tag":56,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":33,"value":1270},"shared\u002FtoolGraphics.js",{"type":33,"value":1272}," (line tags, chips, stack pawn), ",{"type":28,"tag":56,"props":1274,"children":1276},{"className":1275},[],[1277],{"type":33,"value":1278},"components\u002FToolTreatmentMap.vue",{"type":33,"value":1280}," (one panel). ",{"type":28,"tag":56,"props":1282,"children":1284},{"className":1283},[],[1285],{"type":33,"value":1286},"shared\u002Fc29Config.js",{"type":33,"value":1288}," now holds the config both pages share.",{"type":28,"tag":73,"props":1290,"children":1291},{},[1292,1297,1299,1305],{"type":28,"tag":98,"props":1293,"children":1294},{},[1295],{"type":33,"value":1296},"Stand-in:",{"type":33,"value":1298}," repo reads have no actor to land on now that the repo is a rug, so these panels add an ",{"type":28,"tag":56,"props":1300,"children":1302},{"className":1301},[],[1303],{"type":33,"value":1304},"infra-tools files",{"type":33,"value":1306}," actor that isn't in design's cast.",{"type":28,"tag":73,"props":1308,"children":1309},{},[1310,1322],{"type":28,"tag":98,"props":1311,"children":1312},{},[1313,1315,1321],{"type":33,"value":1314},"src fix (",{"type":28,"tag":56,"props":1316,"children":1318},{"className":1317},[],[1319],{"type":33,"value":1320},"src\u002Fcore\u002FcameraAnimation.js",{"type":33,"value":886},{"type":33,"value":1323}," the camera animation token was module-wide, so each map's camera move cancelled the others on a multi-map page. It is now per camera.",{"type":28,"tag":73,"props":1325,"children":1326},{},[1327,1332,1334,1340,1342,1348],{"type":28,"tag":98,"props":1328,"children":1329},{},[1330],{"type":33,"value":1331},"Fit:",{"type":33,"value":1333}," QMap's default fit assumed the isometric angle even in Flat, which drew wide scenes too small and clipped tall ones. Fixed at the source: ",{"type":28,"tag":56,"props":1335,"children":1337},{"className":1336},[],[1338],{"type":33,"value":1339},"useActorSelection",{"type":33,"value":1341}," now reads the active camera preset, and a preset change refits (",{"type":28,"tag":56,"props":1343,"children":1345},{"className":1344},[],[1346],{"type":33,"value":1347},"QMap.vue",{"type":33,"value":1349},"). Isometric pages use the same numbers as before; c25 was reloaded as a check. Panels still refit on resize.",{"type":28,"tag":73,"props":1351,"children":1352},{},[1353,1358,1360,1366],{"type":28,"tag":98,"props":1354,"children":1355},{},[1356],{"type":33,"value":1357},"Fixes after first look:",{"type":33,"value":1359}," line tags sit 68% of the way along their flow from the harness, and the harness's chips go across its body, so both clear the ",{"type":28,"tag":56,"props":1361,"children":1363},{"className":1362},[],[1364],{"type":33,"value":1365},"personal",{"type":33,"value":1367}," label. Stack clicks are caught before QMap's click handler, because letting selection run zoomed the camera and never opened the stack.",{"type":28,"tag":73,"props":1369,"children":1370},{},[1371,1376,1378,1382],{"type":28,"tag":98,"props":1372,"children":1373},{},[1374],{"type":33,"value":1375},"View toggle:",{"type":33,"value":1377}," the page header has an ",{"type":28,"tag":98,"props":1379,"children":1380},{},[1381],{"type":33,"value":655},{"type":33,"value":1383}," switch for all three maps; each panel refits after a switch.",{"type":28,"tag":73,"props":1385,"children":1386},{},[1387,1392],{"type":28,"tag":98,"props":1388,"children":1389},{},[1390],{"type":33,"value":1391},"Status:",{"type":33,"value":1393}," checked in the browser with no console errors: chip hover, stack open and close, and the toggle.",{"type":28,"tag":73,"props":1395,"children":1396},{},[1397,1402,1404,1410,1411,1416],{"type":28,"tag":98,"props":1398,"children":1399},{},[1400],{"type":33,"value":1401},"Fourth treatment, Tools box:",{"type":33,"value":1403}," Mark: \"adds the word tools above a simple box with a number similar to the expanding stack, but without the stack of items\". One flat box per owner with its tool count and the word \"Tools\" above it, with the same data and click to open or close as the stack (",{"type":28,"tag":56,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":33,"value":1409},"createToolBoxMesh",{"type":33,"value":343},{"type":28,"tag":56,"props":1412,"children":1414},{"className":1413},[],[1415],{"type":33,"value":1270},{"type":33,"value":1417},"). The page is now four panels across, or 2×2 under 1500px wide.",{"type":28,"tag":73,"props":1419,"children":1420},{},[1421,1426],{"type":28,"tag":98,"props":1422,"children":1423},{},[1424],{"type":33,"value":1425},"Exploration menu:",{"type":33,"value":1427}," header checkboxes show or hide each treatment, with the first (Labels on lines) hidden by default. The grid fits whatever is showing (four wrap to 2×2 under 1500px wide). A hidden panel is unmounted, so an opened stack or box resets when it comes back.",{"type":28,"tag":73,"props":1429,"children":1430},{},[1431,1436,1438,1444],{"type":28,"tag":98,"props":1432,"children":1433},{},[1434],{"type":33,"value":1435},"Tools sit where they run:",{"type":33,"value":1437}," Mark: \"let's move the tools over to vanta's rug\". MCP tools now go on their server's rug (AI Services) in ",{"type":28,"tag":56,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":33,"value":1443},"c101Scenarios.js",{"type":33,"value":1445},", so the main page changes too; built-in tools stay with the harness. The Stack and Box panels place their boxes the same way.",{"type":28,"tag":73,"props":1447,"children":1448},{},[1449,1454,1456,1462],{"type":28,"tag":98,"props":1450,"children":1451},{},[1452],{"type":33,"value":1453},"Harness rug (Tools box panel only):",{"type":33,"value":1455}," Mark: \"add a rug for the harness and let the tools and the agent pixel pawn live on it\". A third rug level inside Provider Account holds the helper and the built-in box, or its opened tools. \"Agent pixel pawn\" was read as the grey helper; design's actual ",{"type":28,"tag":56,"props":1457,"children":1459},{"className":1458},[],[1460],{"type":33,"value":1461},"AgentPawn",{"type":33,"value":1463}," SVG art isn't used.",{"type":28,"tag":73,"props":1465,"children":1466},{},[1467,1472,1473,1479,1481,1487,1489,1494],{"type":28,"tag":98,"props":1468,"children":1469},{},[1470],{"type":33,"value":1471},"Footprint (src):",{"type":33,"value":207},{"type":28,"tag":56,"props":1474,"children":1476},{"className":1475},[],[1477],{"type":33,"value":1478},"actor.footprint",{"type":33,"value":1480}," on ",{"type":28,"tag":56,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":33,"value":1486},"src\u002Flayout\u002FActorItem.js",{"type":33,"value":1488}," reserves layout room for an oversized pawn; it defaults to the old 1×1. The harness now uses 2×2 on every scenario map (",{"type":28,"tag":56,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":33,"value":1443},{"type":33,"value":1495},"), including the main page.",{"type":28,"tag":73,"props":1497,"children":1498},{},[1499,1504,1506,1512,1514,1520],{"type":28,"tag":98,"props":1500,"children":1501},{},[1502],{"type":33,"value":1503},"Flat centering:",{"type":33,"value":1505}," Mark: going from Isometric to Flat, pawns don't \"take the front surface size in to consideration for item centering the mesh over it's location\". Pitching laid each voxel model along -z from its base. ",{"type":28,"tag":56,"props":1507,"children":1509},{"className":1508},[],[1510],{"type":33,"value":1511},"applyModelPose",{"type":33,"value":1513}," in c23's ",{"type":28,"tag":56,"props":1515,"children":1517},{"className":1516},[],[1518],{"type":33,"value":1519},"createVoxModelEntity.js",{"type":33,"value":1521}," now centers the model's face over its location and keeps the label below the face, which replaces the earlier harness-only workaround. It's shared code, so any voxel model in Flat changes, including c25's; c25 was checked with models centered and labels below.",{"type":28,"tag":73,"props":1523,"children":1524},{},[1525,1530,1532,1538,1540,1546,1548,1554,1555,1561,1563,1568],{"type":28,"tag":98,"props":1526,"children":1527},{},[1528],{"type":33,"value":1529},"Red account rug:",{"type":33,"value":1531}," Mark: \"with the provider account rug, will you make it red and 4px\". Default was 4px ",{"type":28,"tag":56,"props":1533,"children":1535},{"className":1534},[],[1536],{"type":33,"value":1537},"EF4444",{"type":33,"value":1539}," (the scheme's warning red; now ",{"type":28,"tag":56,"props":1541,"children":1543},{"className":1542},[],[1544],{"type":33,"value":1545},"DC2626",{"type":33,"value":1547},") with ",{"type":28,"tag":56,"props":1549,"children":1551},{"className":1550},[],[1552],{"type":33,"value":1553},"rugAccountStrokeColor",{"type":33,"value":1109},{"type":28,"tag":56,"props":1556,"children":1558},{"className":1557},[],[1559],{"type":33,"value":1560},"rugAccountStrokeWidth",{"type":33,"value":1562}," controls, on both c29 pages and for any account type. In src, a by-category override on ",{"type":28,"tag":56,"props":1564,"children":1566},{"className":1565},[],[1567],{"type":33,"value":860},{"type":33,"value":1569}," changes a rug's border; it's empty by default.",{"type":28,"tag":73,"props":1571,"children":1572},{},[1573,1584,1586,1592],{"type":28,"tag":98,"props":1574,"children":1575},{},[1576,1578,1583],{"type":33,"value":1577},"Border stretch fix (",{"type":28,"tag":56,"props":1579,"children":1581},{"className":1580},[],[1582],{"type":33,"value":884},{"type":33,"value":886},{"type":33,"value":1585}," Mark noticed fatter horizontal lines. three r160 doesn't update ",{"type":28,"tag":56,"props":1587,"children":1589},{"className":1588},[],[1590],{"type":33,"value":1591},"LineMaterial.resolution",{"type":33,"value":1593}," itself, and it was set once from the window, so widths scaled with the mismatch between window and canvas shape, and could vanish when a pane first opened. The rug border now reads the real canvas size each frame.",{"type":28,"tag":73,"props":1595,"children":1596},{},[1597,1602,1604,1610,1612,1618,1620,1626,1628,1634,1636,1642],{"type":28,"tag":98,"props":1598,"children":1599},{},[1600],{"type":33,"value":1601},"Stretch fix everywhere:",{"type":33,"value":1603}," Mark: \"same bug elsewhere - yes, let's fix everywhere\". New ",{"type":28,"tag":56,"props":1605,"children":1607},{"className":1606},[],[1608],{"type":33,"value":1609},"src\u002Futils\u002FlineResolution.js",{"type":33,"value":1611}," (",{"type":28,"tag":56,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":33,"value":1617},"trackCanvasResolution",{"type":33,"value":1619},") now covers rug borders, flow lines (",{"type":28,"tag":56,"props":1621,"children":1623},{"className":1622},[],[1624],{"type":33,"value":1625},"LineFlow",{"type":33,"value":1627},"), pawn edges (",{"type":28,"tag":56,"props":1629,"children":1631},{"className":1630},[],[1632],{"type":33,"value":1633},"BaseMesh",{"type":33,"value":1635},") and c29's event markers. It replaces each line's window-based resolution; ",{"type":28,"tag":56,"props":1637,"children":1639},{"className":1638},[],[1640],{"type":33,"value":1641},"LineFlow.updateResolution",{"type":33,"value":1643}," had no callers and is gone. Older cycles (c2–c14, c28) keep their own frozen copies of the bug.",{"type":28,"tag":73,"props":1645,"children":1646},{},[1647,1652,1654,1660,1661,1667,1669,1674],{"type":28,"tag":98,"props":1648,"children":1649},{},[1650],{"type":33,"value":1651},"Pose tween:",{"type":33,"value":1653}," switching views now tips voxel models over the camera's move (",{"type":28,"tag":56,"props":1655,"children":1657},{"className":1656},[],[1658],{"type":33,"value":1659},"CAMERA_CONFIG.focusDuration",{"type":33,"value":734},{"type":28,"tag":56,"props":1662,"children":1664},{"className":1663},[],[1665],{"type":33,"value":1666},"easeInOutQuint",{"type":33,"value":1668},"), blending rotation, lift, centering and label position in c23's ",{"type":28,"tag":56,"props":1670,"children":1672},{"className":1671},[],[1673],{"type":33,"value":1519},{"type":33,"value":1675},". A switch mid-move continues from the current pose, and loads settle straight into the pose. It replaces the earlier instant flip. Checked: the start of the move and end states, including after rapid toggling. Not confirmed: a mid-motion frame (pane screenshots lag the page) or performance with c25's model count.",{"type":28,"tag":73,"props":1677,"children":1678},{},[1679,1684,1686,1691,1693,1699,1701,1707,1709,1715,1717,1723],{"type":28,"tag":98,"props":1680,"children":1681},{},[1682],{"type":33,"value":1683},"Account rug label:",{"type":33,"value":1685}," Mark: \"with the personal account, let's remove the flag, and make the text red as well\", then \"a touch darker red\". The label has no ⚑, and the border, name and heading are all ",{"type":28,"tag":56,"props":1687,"children":1689},{"className":1688},[],[1690],{"type":33,"value":1545},{"type":33,"value":1692},", with a new ",{"type":28,"tag":56,"props":1694,"children":1696},{"className":1695},[],[1697],{"type":33,"value":1698},"rugAccountLabelColor",{"type":33,"value":1700}," control. The src override is now ",{"type":28,"tag":56,"props":1702,"children":1704},{"className":1703},[],[1705],{"type":33,"value":1706},"COLORS.rugDepth.styleByCategory",{"type":33,"value":1708}," with ",{"type":28,"tag":56,"props":1710,"children":1712},{"className":1711},[],[1713],{"type":33,"value":1714},"{ color, width, labelColor }",{"type":33,"value":1716}," (renamed from ",{"type":28,"tag":56,"props":1718,"children":1720},{"className":1719},[],[1721],{"type":33,"value":1722},"borderByCategory",{"type":33,"value":1724},"). The rug label texture is now tagged sRGB; without that, colored text rendered washed out. Red is the only finding signal on this rug for now, and every account type gets it.",{"type":28,"tag":73,"props":1726,"children":1727},{},[1728,1733],{"type":28,"tag":98,"props":1729,"children":1730},{},[1731],{"type":33,"value":1732},"Known rough edges:",{"type":33,"value":1734}," rug style edits in Controls on this page only reach rugs built afterwards. In Isometric the chips lie flat on the floor, so the harness's belt no longer reads as a belt.",{"key":46,"title":1736,"empty":16,"ast":1737},"Captures",{"type":25,"children":1738},[1739,1760],{"type":28,"tag":29,"props":1740,"children":1741},{},[1742,1744,1750,1752,1758],{"type":33,"value":1743},"Working screengrabs from the session, in order, in ",{"type":28,"tag":56,"props":1745,"children":1747},{"className":1746},[],[1748],{"type":33,"value":1749},"captures\u002F",{"type":33,"value":1751},". They are about 800px wide, taken from the browser pane, so treat them as a record of the path and recapture at full size for the design repo's ",{"type":28,"tag":56,"props":1753,"children":1755},{"className":1754},[],[1756],{"type":33,"value":1757},"## Visual record",{"type":33,"value":1759}," process.",{"type":28,"tag":1761,"props":1762,"children":1763},"table",{},[1764,1783],{"type":28,"tag":1765,"props":1766,"children":1767},"thead",{},[1768],{"type":28,"tag":1769,"props":1770,"children":1771},"tr",{},[1772,1778],{"type":28,"tag":1773,"props":1774,"children":1775},"th",{},[1776],{"type":33,"value":1777},"File",{"type":28,"tag":1773,"props":1779,"children":1780},{},[1781],{"type":33,"value":1782},"State",{"type":28,"tag":1784,"props":1785,"children":1786},"tbody",{},[1787,1805,1822,1839,1856,1873,1890,1907,1924,1941,1958,1975,1992,2009,2026,2043,2060,2077,2094,2111,2128,2145,2162,2179,2196,2213,2230,2247,2264,2281,2298,2315,2332,2349,2366,2383,2400,2417,2434,2451,2468,2485,2502,2519],{"type":28,"tag":1769,"props":1788,"children":1789},{},[1790,1800],{"type":28,"tag":1791,"props":1792,"children":1793},"td",{},[1794],{"type":28,"tag":56,"props":1795,"children":1797},{"className":1796},[],[1798],{"type":33,"value":1799},"01-fork-of-c28-fixture",{"type":28,"tag":1791,"props":1801,"children":1802},{},[1803],{"type":33,"value":1804},"Fresh fork of c28 on its fixture",{"type":28,"tag":1769,"props":1806,"children":1807},{},[1808,1817],{"type":28,"tag":1791,"props":1809,"children":1810},{},[1811],{"type":28,"tag":56,"props":1812,"children":1814},{"className":1813},[],[1815],{"type":33,"value":1816},"02-scenario-1-rug-per-kind",{"type":28,"tag":1791,"props":1818,"children":1819},{},[1820],{"type":33,"value":1821},"Scenario 1, one rug per actor kind",{"type":28,"tag":1769,"props":1823,"children":1824},{},[1825,1834],{"type":28,"tag":1791,"props":1826,"children":1827},{},[1828],{"type":28,"tag":56,"props":1829,"children":1831},{"className":1830},[],[1832],{"type":33,"value":1833},"03-zones-hierarchy",{"type":28,"tag":1791,"props":1835,"children":1836},{},[1837],{"type":33,"value":1838},"Internet \u002F Endpoint \u002F Provider Account \u002F Workspace",{"type":28,"tag":1769,"props":1840,"children":1841},{},[1842,1851],{"type":28,"tag":1791,"props":1843,"children":1844},{},[1845],{"type":28,"tag":56,"props":1846,"children":1848},{"className":1847},[],[1849],{"type":33,"value":1850},"04-ai-services-inside-internet",{"type":28,"tag":1791,"props":1852,"children":1853},{},[1854],{"type":33,"value":1855},"AI Services rug inside Internet",{"type":28,"tag":1769,"props":1857,"children":1858},{},[1859,1868],{"type":28,"tag":1791,"props":1860,"children":1861},{},[1862],{"type":28,"tag":56,"props":1863,"children":1865},{"className":1864},[],[1866],{"type":33,"value":1867},"05-ai-services-own-rug",{"type":28,"tag":1791,"props":1869,"children":1870},{},[1871],{"type":33,"value":1872},"AI Services top-level, outside Internet",{"type":28,"tag":1769,"props":1874,"children":1875},{},[1876,1885],{"type":28,"tag":1791,"props":1877,"children":1878},{},[1879],{"type":28,"tag":56,"props":1880,"children":1882},{"className":1881},[],[1883],{"type":33,"value":1884},"06-grey-spheres-hover-labels",{"type":28,"tag":1791,"props":1886,"children":1887},{},[1888],{"type":33,"value":1889},"Grey spheres, hover-only labels",{"type":28,"tag":1769,"props":1891,"children":1892},{},[1893,1902],{"type":28,"tag":1791,"props":1894,"children":1895},{},[1896],{"type":28,"tag":56,"props":1897,"children":1899},{"className":1898},[],[1900],{"type":33,"value":1901},"07-harness-agent-mesh-with-hat",{"type":28,"tag":1791,"props":1903,"children":1904},{},[1905],{"type":33,"value":1906},"Harness: AgentMesh with hat, 4x",{"type":28,"tag":1769,"props":1908,"children":1909},{},[1910,1919],{"type":28,"tag":1791,"props":1911,"children":1912},{},[1913],{"type":28,"tag":56,"props":1914,"children":1916},{"className":1915},[],[1917],{"type":33,"value":1918},"08-harness-grey-helper",{"type":28,"tag":1791,"props":1920,"children":1921},{},[1922],{"type":33,"value":1923},"Harness: grey helper split from the pair",{"type":28,"tag":1769,"props":1925,"children":1926},{},[1927,1936],{"type":28,"tag":1791,"props":1928,"children":1929},{},[1930],{"type":28,"tag":56,"props":1931,"children":1933},{"className":1932},[],[1934],{"type":33,"value":1935},"09-account-rug-personal",{"type":28,"tag":1791,"props":1937,"children":1938},{},[1939],{"type":33,"value":1940},"Account rug shortened to \"personal\"",{"type":28,"tag":1769,"props":1942,"children":1943},{},[1944,1953],{"type":28,"tag":1791,"props":1945,"children":1946},{},[1947],{"type":28,"tag":56,"props":1948,"children":1950},{"className":1949},[],[1951],{"type":33,"value":1952},"10-flat-mid-transition",{"type":28,"tag":1791,"props":1954,"children":1955},{},[1956],{"type":33,"value":1957},"Isometric to Flat, pose flipped before the camera",{"type":28,"tag":1769,"props":1959,"children":1960},{},[1961,1970],{"type":28,"tag":1791,"props":1962,"children":1963},{},[1964],{"type":28,"tag":56,"props":1965,"children":1967},{"className":1966},[],[1968],{"type":33,"value":1969},"11-flat-default-unlit-helper",{"type":28,"tag":1791,"props":1971,"children":1972},{},[1973],{"type":33,"value":1974},"Flat by default, unlit helper",{"type":28,"tag":1769,"props":1976,"children":1977},{},[1978,1987],{"type":28,"tag":1791,"props":1979,"children":1980},{},[1981],{"type":28,"tag":56,"props":1982,"children":1984},{"className":1983},[],[1985],{"type":33,"value":1986},"12-controls-sections-closed",{"type":28,"tag":1791,"props":1988,"children":1989},{},[1990],{"type":33,"value":1991},"Controls sections closed",{"type":28,"tag":1769,"props":1993,"children":1994},{},[1995,2004],{"type":28,"tag":1791,"props":1996,"children":1997},{},[1998],{"type":28,"tag":56,"props":1999,"children":2001},{"className":2000},[],[2002],{"type":33,"value":2003},"13-rug-controls-live-test",{"type":28,"tag":1791,"props":2005,"children":2006},{},[2007],{"type":33,"value":2008},"Rug controls test (red stroke, yellow fill)",{"type":28,"tag":1769,"props":2010,"children":2011},{},[2012,2021],{"type":28,"tag":1791,"props":2013,"children":2014},{},[2015],{"type":28,"tag":56,"props":2016,"children":2018},{"className":2017},[],[2019],{"type":33,"value":2020},"14-hex-picker",{"type":28,"tag":1791,"props":2022,"children":2023},{},[2024],{"type":33,"value":2025},"Hex picker",{"type":28,"tag":1769,"props":2027,"children":2028},{},[2029,2038],{"type":28,"tag":1791,"props":2030,"children":2031},{},[2032],{"type":28,"tag":56,"props":2033,"children":2035},{"className":2034},[],[2036],{"type":33,"value":2037},"15-rugs-f5f5f5-2px-d9d9d9",{"type":28,"tag":1791,"props":2039,"children":2040},{},[2041],{"type":33,"value":2042},"F5F5F5 fills, 2px D9D9D9 border",{"type":28,"tag":1769,"props":2044,"children":2045},{},[2046,2055],{"type":28,"tag":1791,"props":2047,"children":2048},{},[2049],{"type":28,"tag":56,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":33,"value":2054},"16-hsb-picker",{"type":28,"tag":1791,"props":2056,"children":2057},{},[2058],{"type":33,"value":2059},"HSB picker",{"type":28,"tag":1769,"props":2061,"children":2062},{},[2063,2072],{"type":28,"tag":1791,"props":2064,"children":2065},{},[2066],{"type":28,"tag":56,"props":2067,"children":2069},{"className":2068},[],[2070],{"type":33,"value":2071},"17-rug-labels-lower-left",{"type":28,"tag":1791,"props":2073,"children":2074},{},[2075],{"type":33,"value":2076},"Rug labels lower left",{"type":28,"tag":1769,"props":2078,"children":2079},{},[2080,2089],{"type":28,"tag":1791,"props":2081,"children":2082},{},[2083],{"type":28,"tag":56,"props":2084,"children":2086},{"className":2085},[],[2087],{"type":33,"value":2088},"18-rug-label-typography",{"type":28,"tag":1791,"props":2090,"children":2091},{},[2092],{"type":33,"value":2093},"Inter semibold name, bold heading at 50%",{"type":28,"tag":1769,"props":2095,"children":2096},{},[2097,2106],{"type":28,"tag":1791,"props":2098,"children":2099},{},[2100],{"type":28,"tag":56,"props":2101,"children":2103},{"className":2102},[],[2104],{"type":33,"value":2105},"19-rug-heading-62pct",{"type":28,"tag":1791,"props":2107,"children":2108},{},[2109],{"type":33,"value":2110},"Heading at 62.5%",{"type":28,"tag":1769,"props":2112,"children":2113},{},[2114,2123],{"type":28,"tag":1791,"props":2115,"children":2116},{},[2117],{"type":28,"tag":56,"props":2118,"children":2120},{"className":2119},[],[2121],{"type":33,"value":2122},"20-tool-treatments-wide",{"type":28,"tag":1791,"props":2124,"children":2125},{},[2126],{"type":33,"value":2127},"Tool treatments at 1680px wide (work in progress)",{"type":28,"tag":1769,"props":2129,"children":2130},{},[2131,2140],{"type":28,"tag":1791,"props":2132,"children":2133},{},[2134],{"type":28,"tag":56,"props":2135,"children":2137},{"className":2136},[],[2138],{"type":33,"value":2139},"21-tool-treatments-1020",{"type":28,"tag":1791,"props":2141,"children":2142},{},[2143],{"type":33,"value":2144},"Tool treatments at 1020px wide (work in progress)",{"type":28,"tag":1769,"props":2146,"children":2147},{},[2148,2157],{"type":28,"tag":1791,"props":2149,"children":2150},{},[2151],{"type":28,"tag":56,"props":2152,"children":2154},{"className":2153},[],[2155],{"type":33,"value":2156},"22-tool-belt-chip-hover",{"type":28,"tag":1791,"props":2158,"children":2159},{},[2160],{"type":33,"value":2161},"Tool belt, hovering a chip on Vanta",{"type":28,"tag":1769,"props":2163,"children":2164},{},[2165,2174],{"type":28,"tag":1791,"props":2166,"children":2167},{},[2168],{"type":28,"tag":56,"props":2169,"children":2171},{"className":2170},[],[2172],{"type":33,"value":2173},"23-tool-stack-opened",{"type":28,"tag":1791,"props":2175,"children":2176},{},[2177],{"type":33,"value":2178},"Expanding stack with the Vanta stack open",{"type":28,"tag":1769,"props":2180,"children":2181},{},[2182,2191],{"type":28,"tag":1791,"props":2183,"children":2184},{},[2185],{"type":28,"tag":56,"props":2186,"children":2188},{"className":2187},[],[2189],{"type":33,"value":2190},"24-tool-treatments-flat-with-toggle",{"type":28,"tag":1791,"props":2192,"children":2193},{},[2194],{"type":33,"value":2195},"All three in Flat, with the view toggle",{"type":28,"tag":1769,"props":2197,"children":2198},{},[2199,2208],{"type":28,"tag":1791,"props":2200,"children":2201},{},[2202],{"type":28,"tag":56,"props":2203,"children":2205},{"className":2204},[],[2206],{"type":33,"value":2207},"25-tool-treatments-isometric",{"type":28,"tag":1791,"props":2209,"children":2210},{},[2211],{"type":33,"value":2212},"All three in Isometric",{"type":28,"tag":1769,"props":2214,"children":2215},{},[2216,2225],{"type":28,"tag":1791,"props":2217,"children":2218},{},[2219],{"type":28,"tag":56,"props":2220,"children":2222},{"className":2221},[],[2223],{"type":33,"value":2224},"26-tools-box",{"type":28,"tag":1791,"props":2226,"children":2227},{},[2228],{"type":33,"value":2229},"All four treatments, with the Tools box",{"type":28,"tag":1769,"props":2231,"children":2232},{},[2233,2242],{"type":28,"tag":1791,"props":2234,"children":2235},{},[2236],{"type":28,"tag":56,"props":2237,"children":2239},{"className":2238},[],[2240],{"type":33,"value":2241},"27-tools-box-opened",{"type":28,"tag":1791,"props":2243,"children":2244},{},[2245],{"type":33,"value":2246},"Tools box with one box opened",{"type":28,"tag":1769,"props":2248,"children":2249},{},[2250,2259],{"type":28,"tag":1791,"props":2251,"children":2252},{},[2253],{"type":28,"tag":56,"props":2254,"children":2256},{"className":2255},[],[2257],{"type":33,"value":2258},"28-exploration-menu-default",{"type":28,"tag":1791,"props":2260,"children":2261},{},[2262],{"type":33,"value":2263},"Exploration menu, first treatment hidden",{"type":28,"tag":1769,"props":2265,"children":2266},{},[2267,2276],{"type":28,"tag":1791,"props":2268,"children":2269},{},[2270],{"type":28,"tag":56,"props":2271,"children":2273},{"className":2272},[],[2274],{"type":33,"value":2275},"29-exploration-menu-two-panels",{"type":28,"tag":1791,"props":2277,"children":2278},{},[2279],{"type":33,"value":2280},"Two treatments showing, maps larger",{"type":28,"tag":1769,"props":2282,"children":2283},{},[2284,2293],{"type":28,"tag":1791,"props":2285,"children":2286},{},[2287],{"type":28,"tag":56,"props":2288,"children":2290},{"className":2289},[],[2291],{"type":33,"value":2292},"30-vanta-tools-on-ai-services",{"type":28,"tag":1791,"props":2294,"children":2295},{},[2296],{"type":33,"value":2297},"Vanta's tools moved onto AI Services",{"type":28,"tag":1769,"props":2299,"children":2300},{},[2301,2310],{"type":28,"tag":1791,"props":2302,"children":2303},{},[2304],{"type":28,"tag":56,"props":2305,"children":2307},{"className":2306},[],[2308],{"type":33,"value":2309},"31-main-page-preset-fit",{"type":28,"tag":1791,"props":2311,"children":2312},{},[2313],{"type":33,"value":2314},"Main page after the camera fit fix",{"type":28,"tag":1769,"props":2316,"children":2317},{},[2318,2327],{"type":28,"tag":1791,"props":2319,"children":2320},{},[2321],{"type":28,"tag":56,"props":2322,"children":2324},{"className":2323},[],[2325],{"type":33,"value":2326},"32-harness-rug",{"type":28,"tag":1791,"props":2328,"children":2329},{},[2330],{"type":33,"value":2331},"Tools box panel with the Harness rug",{"type":28,"tag":1769,"props":2333,"children":2334},{},[2335,2344],{"type":28,"tag":1791,"props":2336,"children":2337},{},[2338],{"type":28,"tag":56,"props":2339,"children":2341},{"className":2340},[],[2342],{"type":33,"value":2343},"33-harness-rug-box-opened",{"type":28,"tag":1791,"props":2345,"children":2346},{},[2347],{"type":33,"value":2348},"Built-in box opened on the Harness rug",{"type":28,"tag":1769,"props":2350,"children":2351},{},[2352,2361],{"type":28,"tag":1791,"props":2353,"children":2354},{},[2355],{"type":28,"tag":56,"props":2356,"children":2358},{"className":2357},[],[2359],{"type":33,"value":2360},"34-harness-rug-isometric",{"type":28,"tag":1791,"props":2362,"children":2363},{},[2364],{"type":33,"value":2365},"Harness rug in Isometric",{"type":28,"tag":1769,"props":2367,"children":2368},{},[2369,2378],{"type":28,"tag":1791,"props":2370,"children":2371},{},[2372],{"type":28,"tag":56,"props":2373,"children":2375},{"className":2374},[],[2376],{"type":33,"value":2377},"35-account-rug-red-before-stretch-fix",{"type":28,"tag":1791,"props":2379,"children":2380},{},[2381],{"type":33,"value":2382},"Red account rug, before the stretch fix",{"type":28,"tag":1769,"props":2384,"children":2385},{},[2386,2395],{"type":28,"tag":1791,"props":2387,"children":2388},{},[2389],{"type":28,"tag":56,"props":2390,"children":2392},{"className":2391},[],[2393],{"type":33,"value":2394},"36-account-rug-red-even-border",{"type":28,"tag":1791,"props":2396,"children":2397},{},[2398],{"type":33,"value":2399},"Red account rug, even border",{"type":28,"tag":1769,"props":2401,"children":2402},{},[2403,2412],{"type":28,"tag":1791,"props":2404,"children":2405},{},[2406],{"type":28,"tag":56,"props":2407,"children":2409},{"className":2408},[],[2410],{"type":33,"value":2411},"37-flow-lines-even-thickness",{"type":28,"tag":1791,"props":2413,"children":2414},{},[2415],{"type":33,"value":2416},"Flow lines switched on, even at every angle",{"type":28,"tag":1769,"props":2418,"children":2419},{},[2420,2429],{"type":28,"tag":1791,"props":2421,"children":2422},{},[2423],{"type":28,"tag":56,"props":2424,"children":2426},{"className":2425},[],[2427],{"type":33,"value":2428},"38-event-markers-even-lines",{"type":28,"tag":1791,"props":2430,"children":2431},{},[2432],{"type":33,"value":2433},"Fixture data with event markers on",{"type":28,"tag":1769,"props":2435,"children":2436},{},[2437,2446],{"type":28,"tag":1791,"props":2438,"children":2439},{},[2440],{"type":28,"tag":56,"props":2441,"children":2443},{"className":2442},[],[2444],{"type":33,"value":2445},"39-flat-pawn-centered",{"type":28,"tag":1791,"props":2447,"children":2448},{},[2449],{"type":33,"value":2450},"Expanding stack panel: helper centered on its rug in Flat",{"type":28,"tag":1769,"props":2452,"children":2453},{},[2454,2463],{"type":28,"tag":1791,"props":2455,"children":2456},{},[2457],{"type":28,"tag":56,"props":2458,"children":2460},{"className":2459},[],[2461],{"type":33,"value":2462},"40-flat-hover-label-below-face",{"type":28,"tag":1791,"props":2464,"children":2465},{},[2466],{"type":33,"value":2467},"Harness hover label below the face",{"type":28,"tag":1769,"props":2469,"children":2470},{},[2471,2480],{"type":28,"tag":1791,"props":2472,"children":2473},{},[2474],{"type":28,"tag":56,"props":2475,"children":2477},{"className":2476},[],[2478],{"type":33,"value":2479},"41-c25-flat-centered-models",{"type":28,"tag":1791,"props":2481,"children":2482},{},[2483],{"type":33,"value":2484},"c25 in Flat with centered models",{"type":28,"tag":1769,"props":2486,"children":2487},{},[2488,2497],{"type":28,"tag":1791,"props":2489,"children":2490},{},[2491],{"type":28,"tag":56,"props":2492,"children":2494},{"className":2493},[],[2495],{"type":33,"value":2496},"42-pose-tween-start",{"type":28,"tag":1791,"props":2498,"children":2499},{},[2500],{"type":33,"value":2501},"First frame after switching to Isometric: no instant flip",{"type":28,"tag":1769,"props":2503,"children":2504},{},[2505,2514],{"type":28,"tag":1791,"props":2506,"children":2507},{},[2508],{"type":28,"tag":56,"props":2509,"children":2511},{"className":2510},[],[2512],{"type":33,"value":2513},"43-pose-tween-after-rapid-switching",{"type":28,"tag":1791,"props":2515,"children":2516},{},[2517],{"type":33,"value":2518},"Flat after rapid back-and-forth switching",{"type":28,"tag":1769,"props":2520,"children":2521},{},[2522,2531],{"type":28,"tag":1791,"props":2523,"children":2524},{},[2525],{"type":28,"tag":56,"props":2526,"children":2528},{"className":2527},[],[2529],{"type":33,"value":2530},"44-account-rug-darker-red-text",{"type":28,"tag":1791,"props":2532,"children":2533},{},[2534],{"type":33,"value":2535},"Account rug: no flag, darker red border and text",[],[177,2538],"initial-prompt.md",[2540,2542],{"file":177,"title":2541},"From design c101: six finding sessions, and the pawns they need",{"file":2538,"title":2543},"Look and Feel",[],[],[],1794599379008]