@vectoriox/iox-ui 5.76.1 → 5.78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/design-core/index.d.ts +34 -4
- package/fesm2022/vectoriox-iox-ui-design-core.mjs +34 -4
- package/fesm2022/vectoriox-iox-ui-design-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs +647 -12
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-harness-core.mjs +38 -3
- package/fesm2022/vectoriox-iox-ui-harness-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-media-core.mjs +11 -11
- package/fesm2022/vectoriox-iox-ui-media-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-scene-core.mjs +29 -1
- package/fesm2022/vectoriox-iox-ui-scene-core.mjs.map +1 -1
- package/generation-core/index.d.ts +411 -7
- package/harness-core/index.d.ts +37 -2
- package/media-core/index.d.ts +7 -5
- package/package.json +1 -1
- package/scene-core/index.d.ts +19 -2
- package/src/design-core/flavor-spec.generated.ts +34 -4
- package/src/generation-core/compose-site.ts +12 -2
- package/src/generation-core/patterns.ts +37 -4
- package/src/generation-core/serialized-node.ts +3 -0
- package/src/generation-core/showcase.ts +18 -7
- package/src/generation-core/site-spec.generated.ts +577 -0
- package/src/generation-core/validate-site-plan.ts +24 -2
- package/src/harness-core/business-types.ts +3 -0
- package/src/harness-core/harness-spec.generated.ts +32 -2
- package/src/harness-core/motion.ts +8 -1
- package/src/media-core/frames.ts +10 -11
- package/src/scene-core/scene-edit.ts +35 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vectoriox-iox-ui-harness-core.mjs","sources":["../../../projects/iox-ui/src/harness-core/harness-spec.generated.ts","../../../projects/iox-ui/src/harness-core/business-types.ts","../../../projects/iox-ui/src/harness-core/look.ts","../../../projects/iox-ui/src/harness-core/needs.ts","../../../projects/iox-ui/src/harness-core/site-analysis.ts","../../../projects/iox-ui/src/harness-core/rank.ts","../../../projects/iox-ui/src/harness-core/motion.ts","../../../projects/iox-ui/src/harness-core/lint.ts","../../../projects/iox-ui/src/harness-core/prompt-context.ts","../../../projects/iox-ui/src/harness-core/intake.ts","../../../projects/iox-ui/src/harness-core/structure.ts","../../../projects/iox-ui/src/harness-core/palette.ts","../../../projects/iox-ui/src/harness-core/reference-colour.ts","../../../projects/iox-ui/src/harness-core/site-reading.ts","../../../projects/iox-ui/src/harness-core/generation-view.ts","../../../projects/iox-ui/src/harness-core/starting-design.ts","../../../projects/iox-ui/src/harness-core/public-api.ts","../../../projects/iox-ui/src/harness-core/vectoriox-iox-ui-harness-core.ts"],"sourcesContent":["// GENERATED from iox-ai-guidance flavor-spec.v1.json — do not edit; re-run scripts/gen-flavor-spec.mjs\n// (npm run gen:flavor-spec). The JSON is itself generated by iox-ai-guidance\n// architecture/builder/design-system/build-spec.mjs: change a value THERE, then regenerate both.\n/* eslint-disable */\nexport const SPEC_HARNESS_SOURCE = {\n \"repo\": \"nextlevelbuilder/ui-ux-pro-max-skill\",\n \"sha\": \"d14efff8ed1faa4187f004f79926f428c8074ec7\",\n \"date\": \"2026-10-23\",\n \"licence\": \"MIT — Copyright (c) 2024 Next Level Builder\",\n \"notice\": \"Business-type rules adapted from UI UX Pro Max (MIT, Copyright (c) 2024 Next Level Builder).\"\n} as const;\n\nexport const SPEC_NEEDS = {\n \"collection\": {\n \"label\": \"Your work or products\",\n \"archetype\": \"collection\"\n },\n \"detail\": {\n \"label\": \"A page for each item\",\n \"archetype\": \"detail\"\n },\n \"services\": {\n \"label\": \"Services\",\n \"archetype\": \"services\"\n },\n \"prices\": {\n \"label\": \"Prices\",\n \"archetype\": \"services\"\n },\n \"menu\": {\n \"label\": \"Menu\",\n \"archetype\": \"collection\"\n },\n \"visit\": {\n \"label\": \"Hours and how to find you\",\n \"archetype\": \"contact\"\n },\n \"team\": {\n \"label\": \"The team\",\n \"archetype\": \"about\"\n },\n \"about\": {\n \"label\": \"About you\",\n \"archetype\": \"about\"\n },\n \"faq\": {\n \"label\": \"Questions people ask\",\n \"archetype\": \"about\"\n },\n \"blog\": {\n \"label\": \"News or a journal\",\n \"archetype\": \"collection\"\n },\n \"gallery\": {\n \"label\": \"A gallery\",\n \"archetype\": \"collection\"\n },\n \"booking-request\": {\n \"label\": \"A booking request form\",\n \"archetype\": \"contact\"\n },\n \"sign-up-form\": {\n \"label\": \"A sign-up form\",\n \"archetype\": \"contact\"\n },\n \"contact\": {\n \"label\": \"Contact\",\n \"archetype\": \"contact\"\n }\n} as const;\n\nexport const SPEC_USER_AVOIDS = {\n \"dark-pages\": {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"You asked for no dark backgrounds.\"\n },\n \"loud-colour\": {\n \"when\": {\n \"moods\": [\n \"bold\",\n \"energetic\"\n ]\n },\n \"say\": \"You asked for nothing loud.\"\n },\n \"lots-of-motion\": {\n \"when\": {\n \"motion\": [\n \"snappy\",\n \"lively\"\n ]\n },\n \"say\": \"You asked for little movement.\"\n },\n \"too-cute\": {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"You asked for nothing cute or childish.\"\n },\n \"too-corporate\": {\n \"when\": {\n \"moods\": [\n \"trustworthy\",\n \"technical\"\n ]\n },\n \"say\": \"You asked for nothing corporate.\"\n }\n} as const;\n\nexport const SPEC_STRUCTURES = {\n \"studio\": {\n \"label\": \"Studio\",\n \"blurb\": \"Your work, what you do, and a way to reach you.\",\n \"pages\": [\n \"Home\",\n \"Work\",\n \"Project (one per project)\",\n \"About\",\n \"Contact\"\n ],\n \"shipped\": true\n },\n \"practice\": {\n \"label\": \"Practice\",\n \"blurb\": \"Services, prices and a clear way to book.\",\n \"pages\": [\n \"Home\",\n \"Services\",\n \"Prices\",\n \"About\",\n \"Contact\"\n ],\n \"shipped\": true\n },\n \"place\": {\n \"label\": \"Place\",\n \"blurb\": \"A menu, opening hours and how to find you.\",\n \"pages\": [\n \"Home\",\n \"Menu\",\n \"Visit (hours and address)\",\n \"About\",\n \"Contact\"\n ],\n \"shipped\": true\n }\n} as const;\n\nexport const SPEC_BUSINESS_TYPES = [\n {\n \"id\": \"photographer\",\n \"label\": \"Photographer\",\n \"he\": \"צלם/ת\",\n \"group\": \"Creative work\",\n \"uupm\": \"53 Photography Studio\",\n \"match\": [\n \"photographer\",\n \"photography\",\n \"photo studio\",\n \"צלם\",\n \"צילום\"\n ],\n \"good\": [\n {\n \"preset\": \"night-gallery\",\n \"reason\": \"Pictures sit on black, as in a darkened gallery.\",\n \"reasonHe\": \"התמונות יושבות על שחור, כמו בגלריה חשוכה.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"White space and a quiet serif keep every eye on the photos.\",\n \"reasonHe\": \"מרחב לבן וסריף שקט משאירים את כל תשומת הלב על התמונות.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Soft grey glass frames the pictures without competing.\",\n \"reasonHe\": \"זכוכית אפורה ורכה ממסגרת את התמונות בלי להתחרות בהן.\"\n },\n {\n \"preset\": \"swiss-grid\",\n \"reason\": \"A strict grid lines your photos up like contact sheets.\",\n \"reasonHe\": \"גריד קפדני מסדר את התמונות כמו גיליון קונטקט.\"\n }\n ],\n \"colour\": {\n \"mood\": \"black, white and one quiet accent\",\n \"swatches\": [\n \"#18181B\",\n \"#3F4A5A\",\n \"#8B9BB4\"\n ]\n },\n \"fonts\": \"elegant and minimal\",\n \"tone\": \"Few words. Let the pictures speak; one line per project.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"subtle\",\n \"between\": \"cinematic\"\n },\n \"imagery\": \"Your own photos only, large and uncropped; never stock.\",\n \"pages\": [\n \"home\",\n \"work (collection)\",\n \"project (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.masonry-gallery\",\n \"proof.testimonial-single\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Loud colour and bouncy shapes fight the photos for attention.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n },\n {\n \"check\": \"copy-length\",\n \"max\": \"standard\",\n \"say\": \"Heavy text buries the pictures.\"\n }\n ],\n \"words\": [\n \"capturing memories\",\n \"stunning\",\n \"passionate\"\n ],\n \"structure\": \"studio\",\n \"slice\": true,\n \"stock\": false,\n \"booking\": \"sometimes\"\n },\n {\n \"id\": \"interior-design\",\n \"label\": \"Interior designer\",\n \"he\": \"מעצב/ת פנים\",\n \"group\": \"Creative work\",\n \"uupm\": \"161 Home Decoration & Interior Design · 84 Architecture / Interior\",\n \"match\": [\n \"interior\",\n \"interiors\",\n \"עיצוב פנים\",\n \"decor\"\n ],\n \"good\": [\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Calm white rooms let the materials show.\",\n \"reasonHe\": \"חללים לבנים ורגועים נותנים לחומרים לבלוט.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Warm bronze says considered and high-end.\",\n \"reasonHe\": \"ברונזה חמה אומרת: מוקפד ויוקרתי.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Reads like a design magazine feature about your rooms.\",\n \"reasonHe\": \"נקרא כמו כתבה במגזין עיצוב על החללים שלכם.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Light, airy panels around big project photos.\",\n \"reasonHe\": \"משטחים בהירים ואווריריים סביב תמונות פרויקט גדולות.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm neutrals with one material accent\",\n \"swatches\": [\n \"#7A5B36\",\n \"#78716C\",\n \"#5E6B3A\"\n ]\n },\n \"fonts\": \"architectural and elegant\",\n \"tone\": \"Calm and specific: materials, light, the brief.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"subtle\",\n \"between\": \"cinematic\"\n },\n \"imagery\": \"Wide, bright room shots; details of materials.\",\n \"pages\": [\n \"home\",\n \"projects (collection)\",\n \"project (detail)\",\n \"services\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"services\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"feature.triad\",\n \"proof.testimonial-carousel\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful shapes cheapen a portfolio of finished rooms.\"\n },\n {\n \"when\": {\n \"density\": [\n \"compact\"\n ]\n },\n \"say\": \"A cramped page is the opposite of a well-designed room.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n }\n ],\n \"words\": [\n \"dream home\",\n \"luxurious\",\n \"stunning\"\n ],\n \"structure\": \"studio\",\n \"slice\": true,\n \"stock\": false,\n \"booking\": \"none\"\n },\n {\n \"id\": \"architecture\",\n \"label\": \"Architect\",\n \"he\": \"אדריכל/ית\",\n \"group\": \"Creative work\",\n \"uupm\": \"84 Architecture / Interior · 51 Construction/Architecture\",\n \"match\": [\n \"architect\",\n \"architecture\",\n \"אדריכל\"\n ],\n \"good\": [\n {\n \"preset\": \"swiss-grid\",\n \"reason\": \"A strict grid and clean type, like a drawing set.\",\n \"reasonHe\": \"גריד קפדני וטיפוגרפיה נקייה, כמו סט שרטוטים.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Big images and generous margins, like a monograph.\",\n \"reasonHe\": \"תמונות גדולות ושוליים נדיבים, כמו מונוגרפיה.\"\n },\n {\n \"preset\": \"night-gallery\",\n \"reason\": \"Buildings at dusk on a dark page.\",\n \"reasonHe\": \"בניינים בשעת דמדומים על דף כהה.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Soft glass over large project photos.\",\n \"reasonHe\": \"זכוכית רכה מעל תמונות פרויקט גדולות.\"\n }\n ],\n \"colour\": {\n \"mood\": \"monochrome and one accent\",\n \"swatches\": [\n \"#171717\",\n \"#3F4A5A\",\n \"#A16207\"\n ]\n },\n \"fonts\": \"architectural, precise\",\n \"tone\": \"Precise and brief: the project, the place, the year.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Large project photos and drawings.\",\n \"pages\": [\n \"home\",\n \"projects (collection)\",\n \"project (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.card-grid\",\n \"story.quote-break\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful shapes undercut the precision clients pay for.\"\n },\n {\n \"check\": \"brand-hue\",\n \"from\": 270,\n \"to\": 335,\n \"minChroma\": 0.12,\n \"say\": \"A purple-pink brand is the colour of AI tools right now; on this kind of site it can read as generic.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n }\n ],\n \"words\": [\n \"iconic\",\n \"world-class\",\n \"cutting-edge\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"none\"\n },\n {\n \"id\": \"creative-studio\",\n \"label\": \"Design or branding studio\",\n \"he\": \"סטודיו לעיצוב\",\n \"group\": \"Creative work\",\n \"uupm\": \"10 Creative Agency\",\n \"match\": [\n \"design studio\",\n \"branding\",\n \"agency\",\n \"graphic design\",\n \"סטודיו לעיצוב\",\n \"מיתוג\"\n ],\n \"good\": [\n {\n \"preset\": \"zine\",\n \"reason\": \"Shows you take risks with type and colour.\",\n \"reasonHe\": \"מראה שאתם לא מפחדים להעז בטיפוגרפיה ובצבע.\"\n },\n {\n \"preset\": \"tech-studio\",\n \"reason\": \"Dark and exact, for digital work.\",\n \"reasonHe\": \"כהה ומדויק, לעבודה דיגיטלית.\"\n },\n {\n \"preset\": \"bold-maker\",\n \"reason\": \"Loud outlines that clients remember.\",\n \"reasonHe\": \"קווי מתאר בולטים שלקוחות זוכרים.\"\n },\n {\n \"preset\": \"swiss-grid\",\n \"reason\": \"Confident, classic design-studio grid.\",\n \"reasonHe\": \"גריד בטוח וקלאסי של סטודיו לעיצוב.\"\n }\n ],\n \"colour\": {\n \"mood\": \"bold primaries, artistic freedom\",\n \"swatches\": [\n \"#3D5AFE\",\n \"#FF5C39\",\n \"#111827\"\n ]\n },\n \"fonts\": \"bold and expressive\",\n \"tone\": \"Confident, short, a little witty.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"lively\",\n \"between\": \"slide\"\n },\n \"imagery\": \"Case-study images of your own work.\",\n \"pages\": [\n \"home\",\n \"work (collection)\",\n \"case study (detail)\",\n \"services\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"services\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.stacked-editorial\",\n \"collection.card-grid\",\n \"feature.triad\",\n \"proof.logo-strip\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"no-pattern\",\n \"pattern\": \"pricing.tiers\",\n \"say\": \"Studios that sell projects rarely list fixed prices; a price table can undersell you.\"\n }\n ],\n \"words\": [\n \"synergy\",\n \"cutting-edge\",\n \"solutions\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"none\"\n },\n {\n \"id\": \"artist\",\n \"label\": \"Artist or illustrator\",\n \"he\": \"אמן/ית\",\n \"group\": \"Creative work\",\n \"uupm\": \"11 Portfolio/Personal · Museum/Gallery\",\n \"match\": [\n \"artist\",\n \"painter\",\n \"illustrator\",\n \"אמנית\",\n \"אמן\",\n \"ציור\",\n \"איור\"\n ],\n \"good\": [\n {\n \"preset\": \"zine\",\n \"reason\": \"Hand-made energy that suits an illustrator.\",\n \"reasonHe\": \"אנרגיה של עבודת יד שמתאימה למאיירים.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"A white-cube gallery for your pieces.\",\n \"reasonHe\": \"גלריה לבנה ונקייה ליצירות שלכם.\"\n },\n {\n \"preset\": \"night-gallery\",\n \"reason\": \"Work glowing on a dark wall.\",\n \"reasonHe\": \"היצירות זוהרות על קיר כהה.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Like a catalogue from a small gallery.\",\n \"reasonHe\": \"כמו קטלוג של גלריה קטנה.\"\n }\n ],\n \"colour\": {\n \"mood\": \"your work's own palette; a neutral page\",\n \"swatches\": [\n \"#3D5AFE\",\n \"#3F4A5A\",\n \"#9A4F2B\"\n ]\n },\n \"fonts\": \"expressive\",\n \"tone\": \"Personal, first person, short.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Your pieces, photographed flat and true to colour.\",\n \"pages\": [\n \"home\",\n \"works (collection)\",\n \"work (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.masonry-gallery\",\n \"about.story\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"trustworthy\"\n ],\n \"flavor\": [\n \"crisp\"\n ]\n },\n \"say\": \"A corporate look makes an artist look like a firm.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"unique\",\n \"passionate\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"none\"\n },\n {\n \"id\": \"makers\",\n \"label\": \"Ceramics, crafts and makers\",\n \"he\": \"קרמיקה ויוצרים\",\n \"group\": \"Creative work\",\n \"uupm\": \"no row — nearest: Nature Distilled, Anti-Polish styles; Indie/Craft pairing\",\n \"match\": [\n \"ceramic\",\n \"ceramics\",\n \"pottery\",\n \"stoneware\",\n \"handmade\",\n \"crafts\",\n \"maker\",\n \"workshop\",\n \"קרמיקה\",\n \"כלי חרס\",\n \"עבודת יד\",\n \"סדנ\"\n ],\n \"good\": [\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Cream and terracotta echo clay; a serif with a hand-made feel.\",\n \"reasonHe\": \"שמנת וטרקוטה מהדהדים את החימר; סריף עם תחושה של עבודת יד.\"\n },\n {\n \"preset\": \"bold-maker\",\n \"reason\": \"Proud, chunky outlines for a maker with a voice.\",\n \"reasonHe\": \"קווי מתאר עבים וגאים ליוצרים עם קול משלהם.\"\n },\n {\n \"preset\": \"corner-cafe\",\n \"reason\": \"Friendly and round for workshops and classes.\",\n \"reasonHe\": \"ידידותי ועגול, לסדנאות ולחוגים.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Pieces shown like objects in a gallery.\",\n \"reasonHe\": \"העבודות מוצגות כמו חפצים בגלריה.\"\n }\n ],\n \"colour\": {\n \"mood\": \"earth, clay and glaze\",\n \"swatches\": [\n \"#9A4F2B\",\n \"#5E6B3A\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"warm, hand-made\",\n \"tone\": \"Warm and plain; how it is made, who makes it.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"lively\",\n \"between\": \"slide\"\n },\n \"imagery\": \"Your pieces and hands at work; natural light.\",\n \"pages\": [\n \"home\",\n \"pieces (collection)\",\n \"piece (detail)\",\n \"workshops\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"feature.triad\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"A cold, technical look hides the hand that made the work.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"perfect\",\n \"premium quality\",\n \"mass-produced\"\n ],\n \"structure\": \"studio\",\n \"slice\": true,\n \"stock\": false,\n \"booking\": \"sometimes\"\n },\n {\n \"id\": \"jewellery\",\n \"label\": \"Jewellery\",\n \"he\": \"תכשיטים\",\n \"group\": \"Creative work\",\n \"uupm\": \"33 Luxury/Premium Brand · 4 E-commerce Luxury\",\n \"match\": [\n \"jewel\",\n \"jewellery\",\n \"jewelry\",\n \"rings\",\n \"תכשיט\"\n ],\n \"good\": [\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Bronze and serif: precious without shouting.\",\n \"reasonHe\": \"ברונזה וסריף: יקר ערך בלי לצעוק.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Each piece alone on white, like a vitrine.\",\n \"reasonHe\": \"כל תכשיט לבד על לבן, כמו בוויטרינה.\"\n },\n {\n \"preset\": \"night-gallery\",\n \"reason\": \"Metal and stones shine on black.\",\n \"reasonHe\": \"מתכת ואבנים מנצנצות על שחור.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Soft glass, clean and premium.\",\n \"reasonHe\": \"זכוכית רכה, נקי ויוקרתי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"black, gold, white\",\n \"swatches\": [\n \"#7A5B36\",\n \"#1C1917\",\n \"#3F4A5A\"\n ]\n },\n \"fonts\": \"elegant, refined\",\n \"tone\": \"Few, exact words: the metal, the stone, the making.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"subtle\",\n \"between\": \"cinematic\"\n },\n \"imagery\": \"Close-ups on a plain ground.\",\n \"pages\": [\n \"home\",\n \"collection\",\n \"piece (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"about.story\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful colours read as costume jewellery.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"snappy\",\n \"lively\"\n ]\n },\n \"say\": \"Fast animation feels cheap next to fine pieces.\"\n }\n ],\n \"words\": [\n \"cheap\",\n \"bargain\",\n \"bling\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"none\"\n },\n {\n \"id\": \"tattoo\",\n \"label\": \"Tattoo or barber studio\",\n \"he\": \"סטודיו קעקועים / ברבר\",\n \"group\": \"Creative work\",\n \"uupm\": \"no row\",\n \"match\": [\n \"tattoo\",\n \"barber\",\n \"piercing\",\n \"קעקוע\",\n \"ברבר\",\n \"מספרה לגברים\"\n ],\n \"good\": [\n {\n \"preset\": \"ink-studio\",\n \"reason\": \"Black, sharp and orange: a studio with attitude.\",\n \"reasonHe\": \"שחור, חד וכתום: סטודיו עם אופי.\"\n },\n {\n \"preset\": \"after-dark\",\n \"reason\": \"Dark and bold, open late.\",\n \"reasonHe\": \"כהה ונועז, פתוח עד מאוחר.\"\n },\n {\n \"preset\": \"zine\",\n \"reason\": \"Flash-sheet energy.\",\n \"reasonHe\": \"אנרגיה של דף פלאש.\"\n },\n {\n \"preset\": \"night-gallery\",\n \"reason\": \"Your work on black, like a portfolio book.\",\n \"reasonHe\": \"העבודות שלכם על שחור, כמו תיק עבודות מודפס.\"\n }\n ],\n \"colour\": {\n \"mood\": \"black and one hot accent\",\n \"swatches\": [\n \"#EA580C\",\n \"#DB2777\",\n \"#111827\"\n ]\n },\n \"fonts\": \"bold, condensed\",\n \"tone\": \"Direct, a bit of attitude.\",\n \"motion\": \"snappy\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"standard\",\n \"between\": \"slide\"\n },\n \"imagery\": \"Healed work, clean photos.\",\n \"pages\": [\n \"home\",\n \"work (collection)\",\n \"artists\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.masonry-gallery\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"romantic\"\n ]\n },\n \"say\": \"Soft pastels don't match the shop people expect.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"cheap\",\n \"walk-ins guaranteed\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"must\"\n },\n {\n \"id\": \"spa\",\n \"label\": \"Spa and massage\",\n \"he\": \"ספא ועיסוי\",\n \"group\": \"Wellness and beauty\",\n \"uupm\": \"32 Beauty/Spa/Wellness Service\",\n \"match\": [\n \"spa\",\n \"massage\",\n \"wellness\",\n \"ספא\",\n \"עיסוי\",\n \"טיפולי\"\n ],\n \"good\": [\n {\n \"preset\": \"soft-spa\",\n \"reason\": \"Rose cream, a fine serif and slow motion: calm before they arrive.\",\n \"reasonHe\": \"שמנת ורודה, סריף עדין ותנועה איטית: רוגע עוד לפני שמגיעים.\"\n },\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Fresh, frosted and light.\",\n \"reasonHe\": \"רענן, חלבי ובהיר.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"For a high-end spa: bronze and space.\",\n \"reasonHe\": \"לספא יוקרתי: ברונזה והרבה מרחב.\"\n },\n {\n \"preset\": \"garden-party\",\n \"reason\": \"Soft and warm, for a friendly day spa.\",\n \"reasonHe\": \"רך וחם, לספא יום ידידותי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"soft pastels — pink, sage, cream — with gold\",\n \"swatches\": [\n \"#7D4E5E\",\n \"#5E6B3A\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"elegant and calming\",\n \"tone\": \"Soft, unhurried, second person.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Rooms, textures, hands; no faces needed.\",\n \"pages\": [\n \"home\",\n \"treatments (services)\",\n \"prices\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"prices\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"proof.testimonial-carousel\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"Dark pages feel like a night club, not a place to rest.\"\n },\n {\n \"when\": {\n \"moods\": [\n \"bold\",\n \"energetic\"\n ]\n },\n \"say\": \"Loud, bright colour is the opposite of a quiet room.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"snappy\",\n \"lively\"\n ]\n },\n \"say\": \"Fast, bouncy motion works against the calm people come for.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n }\n ],\n \"words\": [\n \"deal\",\n \"hurry\",\n \"cheap\"\n ],\n \"structure\": \"practice\",\n \"slice\": true,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"salon\",\n \"label\": \"Hair and beauty salon\",\n \"he\": \"מספרה וסלון יופי\",\n \"group\": \"Wellness and beauty\",\n \"uupm\": \"32 Beauty/Spa/Wellness Service (salon keyword)\",\n \"match\": [\n \"salon\",\n \"hair\",\n \"nails\",\n \"beauty\",\n \"lashes\",\n \"מספרה\",\n \"סלון\",\n \"ציפורניים\",\n \"קוסמטיקה\"\n ],\n \"good\": [\n {\n \"preset\": \"soft-spa\",\n \"reason\": \"Elegant and soft for a beauty salon.\",\n \"reasonHe\": \"אלגנטי ורך לסלון יופי.\"\n },\n {\n \"preset\": \"coral-studio\",\n \"reason\": \"Bright and fun for a busy hair studio.\",\n \"reasonHe\": \"בהיר וכיפי למספרה עמוסה.\"\n },\n {\n \"preset\": \"garden-party\",\n \"reason\": \"Warm, friendly and a little romantic.\",\n \"reasonHe\": \"חם, ידידותי וקצת רומנטי.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Minimal and chic, lets the cuts speak.\",\n \"reasonHe\": \"מינימלי ושיקי, נותן לתספורות לדבר.\"\n }\n ],\n \"colour\": {\n \"mood\": \"soft pinks or warm coral\",\n \"swatches\": [\n \"#7D4E5E\",\n \"#E5484D\",\n \"#7D5260\"\n ]\n },\n \"fonts\": \"elegant or friendly\",\n \"tone\": \"Friendly, upbeat, short.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Your own before-and-after photos.\",\n \"pages\": [\n \"home\",\n \"services\",\n \"prices\",\n \"gallery\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"prices\",\n \"gallery\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"collection.masonry-gallery\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"A technical look feels clinical in a salon.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n }\n ],\n \"words\": [\n \"cheap\",\n \"flawless\"\n ],\n \"structure\": \"practice\",\n \"slice\": true,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"yoga\",\n \"label\": \"Yoga or pilates studio\",\n \"he\": \"סטודיו ליוגה / פילאטיס\",\n \"group\": \"Wellness and beauty\",\n \"uupm\": \"141 Yoga & Stretching Guide (app)\",\n \"match\": [\n \"yoga\",\n \"pilates\",\n \"meditation\",\n \"יוגה\",\n \"פילאטיס\",\n \"מדיטציה\"\n ],\n \"good\": [\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Fresh air and soft light, like a morning class.\",\n \"reasonHe\": \"אוויר צח ואור רך, כמו שיעור בוקר.\"\n },\n {\n \"preset\": \"soft-spa\",\n \"reason\": \"Calm and warm.\",\n \"reasonHe\": \"רגוע וחם.\"\n },\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Open and welcoming for a community studio.\",\n \"reasonHe\": \"פתוח ומזמין לסטודיו קהילתי.\"\n },\n {\n \"preset\": \"fresh-practice\",\n \"reason\": \"Light and gentle.\",\n \"reasonHe\": \"בהיר ועדין.\"\n }\n ],\n \"colour\": {\n \"mood\": \"sage, terracotta, cream\",\n \"swatches\": [\n \"#0E8A89\",\n \"#5E6B3A\",\n \"#9A4F2B\"\n ]\n },\n \"fonts\": \"warm, humanist\",\n \"tone\": \"Gentle and inviting; who it is for.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"imagery\": \"The room, real classes, daylight.\",\n \"pages\": [\n \"home\",\n \"classes\",\n \"schedule\",\n \"teachers\",\n \"prices\",\n \"contact\"\n ],\n \"needs\": [\n \"prices\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"pricing.tiers\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"bold\"\n ]\n },\n \"say\": \"Bold, loud design fights the calm a class promises.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"snappy\",\n \"lively\"\n ]\n },\n \"say\": \"Fast, bouncy motion works against the calm people come for.\"\n }\n ],\n \"words\": [\n \"burn fat\",\n \"no pain no gain\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"fitness\",\n \"label\": \"Trainer, gym or dance\",\n \"he\": \"מאמן/ת, חדר כושר, מחול\",\n \"group\": \"Wellness and beauty\",\n \"uupm\": \"35 Fitness/Gym App\",\n \"match\": [\n \"gym\",\n \"fitness\",\n \"trainer\",\n \"crossfit\",\n \"dance\",\n \"boxing\",\n \"כושר\",\n \"מאמן\",\n \"מחול\",\n \"ריקוד\"\n ],\n \"good\": [\n {\n \"preset\": \"coral-studio\",\n \"reason\": \"Warm, energetic and bouncy.\",\n \"reasonHe\": \"חם, אנרגטי וקופצני.\"\n },\n {\n \"preset\": \"fresh-market\",\n \"reason\": \"Bright green energy.\",\n \"reasonHe\": \"אנרגיה ירוקה ובהירה.\"\n },\n {\n \"preset\": \"after-dark\",\n \"reason\": \"Dark and intense for a serious gym.\",\n \"reasonHe\": \"כהה ואינטנסיבי לחדר כושר רציני.\"\n },\n {\n \"preset\": \"bold-maker\",\n \"reason\": \"Loud and direct.\",\n \"reasonHe\": \"רועש וישיר.\"\n },\n {\n \"preset\": \"festival\",\n \"reason\": \"Poster energy for a dance or boxing studio.\",\n \"reasonHe\": \"אנרגיה של פוסטר לסטודיו למחול או לאגרוף.\"\n }\n ],\n \"colour\": {\n \"mood\": \"energetic orange or green\",\n \"swatches\": [\n \"#E5484D\",\n \"#00B86B\",\n \"#EA580C\"\n ]\n },\n \"fonts\": \"bold, motivational\",\n \"tone\": \"Short, motivating, active verbs.\",\n \"motion\": \"lively\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"lively\",\n \"between\": \"slide\"\n },\n \"imagery\": \"Real people training; movement.\",\n \"pages\": [\n \"home\",\n \"classes\",\n \"prices\",\n \"coaches\",\n \"contact\"\n ],\n \"needs\": [\n \"prices\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"feature.triad\",\n \"pricing.tiers\",\n \"proof.testimonial-carousel\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"motion\": [\n \"off\",\n \"calm\"\n ]\n },\n \"say\": \"A still, slow site feels low-energy for training.\"\n },\n {\n \"when\": {\n \"moods\": [\n \"luxurious\"\n ]\n },\n \"say\": \"Hushed luxury can feel unwelcoming to beginners.\"\n }\n ],\n \"words\": [\n \"guaranteed results\",\n \"lose 10 kilos\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"therapist\",\n \"label\": \"Therapist or counsellor\",\n \"he\": \"מטפל/ת\",\n \"group\": \"Wellness and beauty\",\n \"uupm\": \"22 Mental Health App (nearest)\",\n \"match\": [\n \"therapist\",\n \"therapy\",\n \"psychologist\",\n \"counsellor\",\n \"counselor\",\n \"מטפל\",\n \"פסיכולוג\",\n \"טיפול רגשי\"\n ],\n \"good\": [\n {\n \"preset\": \"fresh-practice\",\n \"reason\": \"Soft and reassuring; nothing sharp.\",\n \"reasonHe\": \"רך ומרגיע; שום דבר חד.\"\n },\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Calm, light and open.\",\n \"reasonHe\": \"רגוע, בהיר ופתוח.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Clear and professional.\",\n \"reasonHe\": \"ברור ומקצועי.\"\n },\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Warm and human.\",\n \"reasonHe\": \"חם ואנושי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"calm pastels and trust colours\",\n \"swatches\": [\n \"#0284C7\",\n \"#0E8A89\",\n \"#3B6939\"\n ]\n },\n \"fonts\": \"calming, readable\",\n \"tone\": \"Gentle, plain, never salesy.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"subtle\",\n \"between\": \"none\"\n },\n \"imagery\": \"A calm room, daylight; your portrait.\",\n \"pages\": [\n \"home\",\n \"how I work\",\n \"about\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"about\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"bold\",\n \"energetic\"\n ]\n },\n \"say\": \"Bright, loud design can feel overwhelming to someone looking for help.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"snappy\",\n \"lively\"\n ]\n },\n \"say\": \"Fast, bouncy motion works against the calm people come for.\"\n },\n {\n \"check\": \"no-pattern\",\n \"pattern\": \"proof.testimonial-carousel\",\n \"say\": \"Client quotes can reveal who saw you; ask before showing any.\"\n }\n ],\n \"words\": [\n \"fix\",\n \"cure\",\n \"guaranteed\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"clinic\",\n \"label\": \"Clinic or practice\",\n \"he\": \"מרפאה\",\n \"group\": \"Health\",\n \"uupm\": \"58 Medical Clinic\",\n \"match\": [\n \"clinic\",\n \"doctor\",\n \"physio\",\n \"physiotherapy\",\n \"medical\",\n \"מרפאה\",\n \"רופא\",\n \"פיזיותרפיה\"\n ],\n \"good\": [\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Clean and readable; trust first.\",\n \"reasonHe\": \"נקי וקריא; האמון קודם לכל.\"\n },\n {\n \"preset\": \"fresh-practice\",\n \"reason\": \"Friendly, light and calm.\",\n \"reasonHe\": \"ידידותי, בהיר ורגוע.\"\n },\n {\n \"preset\": \"trusted-advisor\",\n \"reason\": \"Firm and professional.\",\n \"reasonHe\": \"יציב ומקצועי.\"\n },\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Modern and calm.\",\n \"reasonHe\": \"עכשווי ורגוע.\"\n }\n ],\n \"colour\": {\n \"mood\": \"medical blue and white\",\n \"swatches\": [\n \"#0E7490\",\n \"#0284C7\",\n \"#1E3A8A\"\n ]\n },\n \"fonts\": \"professional, readable\",\n \"tone\": \"Clear and plain; what you treat, how to book.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Your team and rooms; no stock doctors.\",\n \"pages\": [\n \"home\",\n \"treatments (services)\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful design can make patients doubt the care.\"\n },\n {\n \"check\": \"brand-hue\",\n \"from\": 270,\n \"to\": 335,\n \"minChroma\": 0.12,\n \"say\": \"A purple-pink brand is the colour of AI tools right now; on this kind of site it can read as generic.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"phone\",\n \"say\": \"A phone number is the first thing people need here.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n }\n ],\n \"words\": [\n \"cure\",\n \"guaranteed\",\n \"miracle\",\n \"best in town\"\n ],\n \"structure\": \"practice\",\n \"slice\": true,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"dental\",\n \"label\": \"Dental practice\",\n \"he\": \"מרפאת שיניים\",\n \"group\": \"Health\",\n \"uupm\": \"60 Dental Practice\",\n \"match\": [\n \"dental\",\n \"dentist\",\n \"orthodont\",\n \"שיניים\",\n \"רופא שיניים\"\n ],\n \"good\": [\n {\n \"preset\": \"fresh-practice\",\n \"reason\": \"Fresh blue and soft shapes: a friendly smile.\",\n \"reasonHe\": \"כחול רענן וצורות רכות: חיוך ידידותי.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Clean and trustworthy.\",\n \"reasonHe\": \"נקי ואמין.\"\n },\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Bright and modern.\",\n \"reasonHe\": \"בהיר ועכשווי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"fresh blue, white, a touch of yellow\",\n \"swatches\": [\n \"#0284C7\",\n \"#0E7490\",\n \"#0E8A89\"\n ]\n },\n \"fonts\": \"friendly, professional\",\n \"tone\": \"Reassuring, plain.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Your clinic and team.\",\n \"pages\": [\n \"home\",\n \"treatments\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"proof.testimonial-carousel\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"Dark pages feel heavy for a dental practice.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"phone\",\n \"say\": \"A phone number is the first thing people need here.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n }\n ],\n \"words\": [\n \"painless\",\n \"guaranteed\",\n \"perfect smile\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"vet\",\n \"label\": \"Vet or pet care\",\n \"he\": \"וטרינר / טיפוח חיות\",\n \"group\": \"Health\",\n \"uupm\": \"61 Veterinary Clinic\",\n \"match\": [\n \"vet\",\n \"veterinary\",\n \"pet\",\n \"dog\",\n \"groom\",\n \"וטרינר\",\n \"כלבים\",\n \"חיות\"\n ],\n \"good\": [\n {\n \"preset\": \"little-ones\",\n \"reason\": \"Round, warm and playful.\",\n \"reasonHe\": \"עגול, חם ושובב.\"\n },\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Friendly and caring.\",\n \"reasonHe\": \"ידידותי ואכפתי.\"\n },\n {\n \"preset\": \"fresh-practice\",\n \"reason\": \"Clean and reassuring for a clinic.\",\n \"reasonHe\": \"נקי ומרגיע למרפאה.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Professional, for a medical practice.\",\n \"reasonHe\": \"מקצועי, כיאה למרפאה.\"\n }\n ],\n \"colour\": {\n \"mood\": \"caring blue or teal, warm accents\",\n \"swatches\": [\n \"#006A6A\",\n \"#3B6939\",\n \"#0284C7\"\n ]\n },\n \"fonts\": \"friendly, welcoming\",\n \"tone\": \"Warm, practical.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Real animals you treat (with permission).\",\n \"pages\": [\n \"home\",\n \"services\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"Dark pages feel unfriendly for pet owners.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"phone\",\n \"say\": \"A phone number is the first thing people need here.\"\n }\n ],\n \"words\": [\n \"guaranteed\",\n \"cure\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"restaurant\",\n \"label\": \"Restaurant\",\n \"he\": \"מסעדה\",\n \"group\": \"Food and drink\",\n \"uupm\": \"34 Restaurant/Food Service\",\n \"match\": [\n \"restaurant\",\n \"bistro\",\n \"kitchen\",\n \"chef\",\n \"מסעדה\",\n \"שף\",\n \"ביסטרו\"\n ],\n \"good\": [\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Warm paper and serif, like a printed menu.\",\n \"reasonHe\": \"נייר חם וסריף, כמו תפריט מודפס.\"\n },\n {\n \"preset\": \"corner-cafe\",\n \"reason\": \"Friendly and casual.\",\n \"reasonHe\": \"ידידותי וקליל.\"\n },\n {\n \"preset\": \"after-dark\",\n \"reason\": \"Dark and lively for an evening place.\",\n \"reasonHe\": \"כהה ותוסס למקום של ערב.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"For fine dining.\",\n \"reasonHe\": \"למסעדת שף.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm — orange, red, brown\",\n \"swatches\": [\n \"#9A4F2B\",\n \"#9C4146\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"appetising, clear\",\n \"tone\": \"Inviting, sensory, short.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Your own food and room photos.\",\n \"pages\": [\n \"home\",\n \"menu\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"menu\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"feature.triad\",\n \"proof.testimonial-carousel\",\n \"contact.split-map\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"A cold, technical look kills appetite.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"address\",\n \"say\": \"Visitors need the address to find you.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n }\n ],\n \"words\": [\n \"best food in town\",\n \"world-class\",\n \"mouth-watering\"\n ],\n \"structure\": \"place\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"tables\"\n },\n {\n \"id\": \"cafe-bakery\",\n \"label\": \"Café or bakery\",\n \"he\": \"בית קפה / מאפייה\",\n \"group\": \"Food and drink\",\n \"uupm\": \"63 Bakery/Cafe\",\n \"match\": [\n \"cafe\",\n \"café\",\n \"coffee\",\n \"bakery\",\n \"patisserie\",\n \"בית קפה\",\n \"קפה\",\n \"מאפייה\",\n \"קונדיטוריה\"\n ],\n \"good\": [\n {\n \"preset\": \"corner-cafe\",\n \"reason\": \"Warm, round and cheerful.\",\n \"reasonHe\": \"חם, עגול ועליז.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Cream and brown, like a paper bag.\",\n \"reasonHe\": \"שמנת וחום, כמו שקית נייר.\"\n },\n {\n \"preset\": \"fresh-market\",\n \"reason\": \"Bright and fresh for a juice or brunch spot.\",\n \"reasonHe\": \"בהיר ורענן למקום של מיצים או בראנץ'.\"\n },\n {\n \"preset\": \"garden-party\",\n \"reason\": \"Soft and sweet for a patisserie.\",\n \"reasonHe\": \"רך ומתוק לקונדיטוריה.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm brown, cream, appetising accents\",\n \"swatches\": [\n \"#9C4146\",\n \"#9A4F2B\",\n \"#7D5260\"\n ]\n },\n \"fonts\": \"warm, inviting\",\n \"tone\": \"Friendly, short, a little playful.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"slide\"\n },\n \"imagery\": \"Your bakes and drinks, close up.\",\n \"pages\": [\n \"home\",\n \"menu\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"menu\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"collection.masonry-gallery\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"A café is a daytime place; dark pages feel closed.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"address\",\n \"say\": \"Visitors need the address to find you.\"\n }\n ],\n \"words\": [\n \"best coffee in town\",\n \"to die for\"\n ],\n \"structure\": \"place\",\n \"slice\": true,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"bar-winery\",\n \"label\": \"Bar, winery or brewery\",\n \"he\": \"בר / יקב / מבשלה\",\n \"group\": \"Food and drink\",\n \"uupm\": \"64 Brewery/Winery\",\n \"match\": [\n \"bar\",\n \"wine\",\n \"winery\",\n \"brewery\",\n \"cocktail\",\n \"יקב\",\n \"בר\",\n \"יין\",\n \"בירה\"\n ],\n \"good\": [\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Bronze and serif, like a good label.\",\n \"reasonHe\": \"ברונזה וסריף, כמו תווית טובה.\"\n },\n {\n \"preset\": \"after-dark\",\n \"reason\": \"Dark and lively, open late.\",\n \"reasonHe\": \"כהה ותוסס, פתוח עד מאוחר.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Heritage and story.\",\n \"reasonHe\": \"מורשת וסיפור.\"\n },\n {\n \"preset\": \"ink-studio\",\n \"reason\": \"Craft-beer attitude.\",\n \"reasonHe\": \"האופי של מבשלת בוטיק.\"\n }\n ],\n \"colour\": {\n \"mood\": \"deep amber, burgundy, gold\",\n \"swatches\": [\n \"#7A5B36\",\n \"#9C4146\",\n \"#DB2777\"\n ]\n },\n \"fonts\": \"artisanal, heritage\",\n \"tone\": \"Story-led: the place, the people, the craft.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"subtle\",\n \"between\": \"cinematic\"\n },\n \"imagery\": \"The cellar, the bar, the bottle.\",\n \"pages\": [\n \"home\",\n \"menu or wines\",\n \"our story\",\n \"visit\",\n \"contact\"\n ],\n \"needs\": [\n \"menu\",\n \"visit\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"about.story\",\n \"collection.card-grid\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"flavor\": [\n \"bloom\"\n ]\n },\n \"say\": \"Round, bouncy design reads as a kids' brand, not a cellar.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"address\",\n \"say\": \"Visitors need the address to find you.\"\n }\n ],\n \"words\": [\n \"best wine\",\n \"award-winning (unless you are)\"\n ],\n \"structure\": \"place\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"boutique\",\n \"label\": \"Fashion or lifestyle shop\",\n \"he\": \"בוטיק\",\n \"group\": \"Shops\",\n \"uupm\": \"3 E-commerce · 4 E-commerce Luxury\",\n \"match\": [\n \"boutique\",\n \"fashion\",\n \"clothing\",\n \"shop\",\n \"store\",\n \"בוטיק\",\n \"אופנה\",\n \"חנות\"\n ],\n \"good\": [\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Clean and chic; the products lead.\",\n \"reasonHe\": \"נקי ושיקי; המוצרים במרכז.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Premium and calm.\",\n \"reasonHe\": \"יוקרתי ורגוע.\"\n },\n {\n \"preset\": \"bold-maker\",\n \"reason\": \"A brand with a loud voice.\",\n \"reasonHe\": \"מותג עם קול חזק.\"\n },\n {\n \"preset\": \"zine\",\n \"reason\": \"Indie and edgy.\",\n \"reasonHe\": \"אינדי ונועז.\"\n }\n ],\n \"colour\": {\n \"mood\": \"your brand colour on a quiet page\",\n \"swatches\": [\n \"#3F4A5A\",\n \"#7A5B36\",\n \"#FF5C39\"\n ]\n },\n \"fonts\": \"refined or bold\",\n \"tone\": \"Short and confident.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"slide\"\n },\n \"imagery\": \"Product photos on plain grounds; real people wearing them.\",\n \"pages\": [\n \"home\",\n \"collection\",\n \"product (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"proof.logo-strip\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"check\": \"copy-length\",\n \"max\": \"standard\",\n \"say\": \"Text-heavy pages slow down shoppers.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"cheap\",\n \"must-have\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"florist\",\n \"label\": \"Florist or plant shop\",\n \"he\": \"חנות פרחים\",\n \"group\": \"Shops\",\n \"uupm\": \"62 Florist/Plant Shop\",\n \"match\": [\n \"florist\",\n \"flowers\",\n \"plants\",\n \"bouquet\",\n \"פרחים\",\n \"צמחים\",\n \"זרים\"\n ],\n \"good\": [\n {\n \"preset\": \"garden-party\",\n \"reason\": \"Soft, romantic and full of colour.\",\n \"reasonHe\": \"רך, רומנטי ומלא צבע.\"\n },\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Leaf green and friendly.\",\n \"reasonHe\": \"ירוק עלים וידידותי.\"\n },\n {\n \"preset\": \"fresh-market\",\n \"reason\": \"Bright, like a flower stall.\",\n \"reasonHe\": \"בהיר, כמו דוכן פרחים.\"\n },\n {\n \"preset\": \"soft-spa\",\n \"reason\": \"Elegant for a design florist.\",\n \"reasonHe\": \"אלגנטי לחנות פרחים מעוצבת.\"\n }\n ],\n \"colour\": {\n \"mood\": \"natural green with floral pinks\",\n \"swatches\": [\n \"#3B6939\",\n \"#7D5260\",\n \"#00B86B\"\n ]\n },\n \"fonts\": \"elegant, natural\",\n \"tone\": \"Seasonal, warm.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Your own arrangements in daylight.\",\n \"pages\": [\n \"home\",\n \"flowers (collection)\",\n \"weddings and events\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.masonry-gallery\",\n \"feature.triad\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"Flowers lose their colour on a dark page.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"cheap\",\n \"best prices\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"home-goods\",\n \"label\": \"Furniture or home goods\",\n \"he\": \"רהיטים ועיצוב הבית\",\n \"group\": \"Shops\",\n \"uupm\": \"161 Home Decoration & Interior Design\",\n \"match\": [\n \"furniture\",\n \"home goods\",\n \"homeware\",\n \"decor shop\",\n \"רהיטים\",\n \"כלי בית\"\n ],\n \"good\": [\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Warm and tactile, like a catalogue.\",\n \"reasonHe\": \"חם ומוחשי, כמו קטלוג.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Clean and calm; each piece stands alone.\",\n \"reasonHe\": \"נקי ורגוע; כל פריט עומד בפני עצמו.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Premium pieces deserve it.\",\n \"reasonHe\": \"פריטים יוקרתיים ראויים לזה.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Soft glass and space.\",\n \"reasonHe\": \"זכוכית רכה והרבה מרחב.\"\n }\n ],\n \"colour\": {\n \"mood\": \"neutral interior palette, a material accent\",\n \"swatches\": [\n \"#78716C\",\n \"#9A4F2B\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"professional, clean\",\n \"tone\": \"Clear and specific: size, material, care.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Pieces in real rooms and on plain grounds.\",\n \"pages\": [\n \"home\",\n \"collection\",\n \"product (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"feature.alternating-rows\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Excessive decoration distracts from the pieces.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"luxury\",\n \"cheap\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"consultant\",\n \"label\": \"Consultant\",\n \"he\": \"יועץ/ת\",\n \"group\": \"Professional services\",\n \"uupm\": \"5 B2B Service (consult keyword)\",\n \"match\": [\n \"consult\",\n \"consultant\",\n \"advisor\",\n \"strategy\",\n \"יועץ\",\n \"ייעוץ\"\n ],\n \"good\": [\n {\n \"preset\": \"trusted-advisor\",\n \"reason\": \"Navy and plain type: serious and clear.\",\n \"reasonHe\": \"כחול כהה ואותיות פשוטות: רציני וברור.\"\n },\n {\n \"preset\": \"swiss-grid\",\n \"reason\": \"Sharp and modern.\",\n \"reasonHe\": \"חד ועכשווי.\"\n },\n {\n \"preset\": \"tech-studio\",\n \"reason\": \"For tech and data consultants.\",\n \"reasonHe\": \"ליועצי טכנולוגיה ודאטה.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Light and approachable.\",\n \"reasonHe\": \"בהיר ונגיש.\"\n }\n ],\n \"colour\": {\n \"mood\": \"professional blue and neutral grey\",\n \"swatches\": [\n \"#1E3A8A\",\n \"#111827\",\n \"#0E7490\"\n ]\n },\n \"fonts\": \"formal, clear\",\n \"tone\": \"Plain and specific: problems you solve, results.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Your portrait; diagrams over stock.\",\n \"pages\": [\n \"home\",\n \"services\",\n \"case studies\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"proof.stat-row\",\n \"proof.testimonial-carousel\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful reads as unserious to a client buying advice.\"\n },\n {\n \"check\": \"brand-hue\",\n \"from\": 270,\n \"to\": 335,\n \"minChroma\": 0.12,\n \"say\": \"A purple-pink brand is the colour of AI tools right now; on this kind of site it can read as generic.\"\n }\n ],\n \"words\": [\n \"synergy\",\n \"guaranteed ROI\",\n \"world-class\"\n ],\n \"structure\": \"practice\",\n \"slice\": true,\n \"stock\": true,\n \"booking\": \"sometimes\"\n },\n {\n \"id\": \"coach\",\n \"label\": \"Life or business coach\",\n \"he\": \"מאמן/ת אישי/ת\",\n \"group\": \"Professional services\",\n \"uupm\": \"no row\",\n \"match\": [\n \"life coach\",\n \"business coach\",\n \"mentor\",\n \"coaching\",\n \"מאמנת\",\n \"אימון אישי\",\n \"קואצ'ינג\"\n ],\n \"good\": [\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Fresh and hopeful.\",\n \"reasonHe\": \"רענן ומלא תקווה.\"\n },\n {\n \"preset\": \"trusted-advisor\",\n \"reason\": \"Credible for business coaching.\",\n \"reasonHe\": \"אמין לאימון עסקי.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Warm and personal, story-led.\",\n \"reasonHe\": \"חם ואישי, סביב הסיפור שלכם.\"\n },\n {\n \"preset\": \"coral-studio\",\n \"reason\": \"Energetic and upbeat.\",\n \"reasonHe\": \"אנרגטי ואופטימי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm and hopeful\",\n \"swatches\": [\n \"#0E8A89\",\n \"#E5484D\",\n \"#1E3A8A\"\n ]\n },\n \"fonts\": \"warm, clear\",\n \"tone\": \"Personal, encouraging, first person.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Your portrait, working with people.\",\n \"pages\": [\n \"home\",\n \"how it works\",\n \"programmes\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"pricing.tiers\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"A cold, technical look is the opposite of personal.\"\n }\n ],\n \"words\": [\n \"life-changing\",\n \"guaranteed\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"law-accounting\",\n \"label\": \"Law or accounting firm\",\n \"he\": \"משרד עורכי דין / רואי חשבון\",\n \"group\": \"Professional services\",\n \"uupm\": \"40 Legal Services\",\n \"match\": [\n \"law\",\n \"lawyer\",\n \"attorney\",\n \"legal\",\n \"accountant\",\n \"accounting\",\n \"עורך דין\",\n \"עורכת דין\",\n \"רואה חשבון\",\n \"משפט\"\n ],\n \"good\": [\n {\n \"preset\": \"trusted-advisor\",\n \"reason\": \"Navy and gold: authority without fuss.\",\n \"reasonHe\": \"כחול כהה וזהב: סמכותי בלי גינונים.\"\n },\n {\n \"preset\": \"swiss-grid\",\n \"reason\": \"Precise and modern.\",\n \"reasonHe\": \"מדויק ועכשווי.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Clear and approachable.\",\n \"reasonHe\": \"ברור ונגיש.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"For a boutique firm.\",\n \"reasonHe\": \"למשרד בוטיק.\"\n }\n ],\n \"colour\": {\n \"mood\": \"navy, gold, white\",\n \"swatches\": [\n \"#1E3A8A\",\n \"#111827\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"professional, authoritative\",\n \"tone\": \"Formal, exact, no promises you cannot keep.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"still\",\n \"between\": \"none\"\n },\n \"imagery\": \"Your team; your office.\",\n \"pages\": [\n \"home\",\n \"practice areas (services)\",\n \"team\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"team\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"proof.stat-row\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"flavor\": [\n \"pop\",\n \"bloom\"\n ]\n },\n \"say\": \"Playful design undermines the trust clients need.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"lively\"\n ]\n },\n \"say\": \"Bouncy motion feels out of place for legal or financial advice.\"\n },\n {\n \"check\": \"brand-hue\",\n \"from\": 270,\n \"to\": 335,\n \"minChroma\": 0.12,\n \"say\": \"A purple-pink brand is the colour of AI tools right now; on this kind of site it can read as generic.\"\n }\n ],\n \"words\": [\n \"guarantee\",\n \"win your case\",\n \"best lawyer\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"sometimes\"\n },\n {\n \"id\": \"real-estate\",\n \"label\": \"Real estate agent\",\n \"he\": \"נדל\\\"ן\",\n \"group\": \"Professional services\",\n \"uupm\": \"36 Real Estate/Property\",\n \"match\": [\n \"real estate\",\n \"realtor\",\n \"property\",\n \"apartments\",\n \"נדל\\\"ן\",\n \"נדלן\",\n \"דירות\"\n ],\n \"good\": [\n {\n \"preset\": \"holiday-light\",\n \"reason\": \"Bright glass and big photos.\",\n \"reasonHe\": \"זכוכית בהירה ותמונות גדולות.\"\n },\n {\n \"preset\": \"trusted-advisor\",\n \"reason\": \"Professional and trustworthy.\",\n \"reasonHe\": \"מקצועי ואמין.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"For luxury property.\",\n \"reasonHe\": \"לנדל\\\"ן יוקרה.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Clean and modern.\",\n \"reasonHe\": \"נקי ועכשווי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"trust blue, gold, white\",\n \"swatches\": [\n \"#0A66E8\",\n \"#1E3A8A\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"professional, confident\",\n \"tone\": \"Clear and factual.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"slide\"\n },\n \"imagery\": \"Your own property photos; never stock.\",\n \"pages\": [\n \"home\",\n \"properties (collection)\",\n \"property (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.card-grid\",\n \"proof.testimonial-carousel\",\n \"contact.split-map\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful design doesn't fit a large purchase.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"phone\",\n \"say\": \"A phone number is the first thing people need here.\"\n }\n ],\n \"words\": [\n \"dream home\",\n \"guaranteed\",\n \"once in a lifetime\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"sometimes\"\n },\n {\n \"id\": \"nonprofit\",\n \"label\": \"Nonprofit or community\",\n \"he\": \"עמותה\",\n \"group\": \"Community and places\",\n \"uupm\": \"44 Non-profit/Charity\",\n \"match\": [\n \"nonprofit\",\n \"non-profit\",\n \"charity\",\n \"ngo\",\n \"volunteer\",\n \"community\",\n \"עמותה\",\n \"מתנדבים\",\n \"קהילה\"\n ],\n \"good\": [\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Warm, open and welcoming.\",\n \"reasonHe\": \"חם, פתוח ומזמין.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Clear and credible.\",\n \"reasonHe\": \"ברור ואמין.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"For telling stories.\",\n \"reasonHe\": \"לספר סיפורים.\"\n },\n {\n \"preset\": \"little-ones\",\n \"reason\": \"For children's causes.\",\n \"reasonHe\": \"לעמותות למען ילדים.\"\n }\n ],\n \"colour\": {\n \"mood\": \"cause colours, trust, warmth\",\n \"swatches\": [\n \"#3B6939\",\n \"#0E7490\",\n \"#9A4F2B\"\n ]\n },\n \"fonts\": \"heartfelt, readable\",\n \"tone\": \"Honest, specific about impact.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"imagery\": \"Real people you help (with permission).\",\n \"pages\": [\n \"home\",\n \"what we do\",\n \"stories\",\n \"get involved\",\n \"contact\"\n ],\n \"needs\": [\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"proof.stat-row\",\n \"story.long-form\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"luxurious\"\n ]\n },\n \"say\": \"Looking expensive makes donors ask where the money goes.\"\n }\n ],\n \"words\": [\n \"donate now!!\",\n \"save the world\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"venue-events\",\n \"label\": \"Venue, weddings or events\",\n \"he\": \"אולם, חתונות ואירועים\",\n \"group\": \"Community and places\",\n \"uupm\": \"39 Wedding/Event Planning · 70 Event Management\",\n \"match\": [\n \"venue\",\n \"wedding\",\n \"events\",\n \"event\",\n \"hall\",\n \"festival\",\n \"אולם\",\n \"חתונות\",\n \"אירועים\",\n \"גן אירועים\"\n ],\n \"good\": [\n {\n \"preset\": \"garden-party\",\n \"reason\": \"Romantic and warm for weddings.\",\n \"reasonHe\": \"רומנטי וחם לחתונות.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Elegant for a premium venue.\",\n \"reasonHe\": \"אלגנטי לאולם יוקרתי.\"\n },\n {\n \"preset\": \"after-dark\",\n \"reason\": \"Dark and lively for parties.\",\n \"reasonHe\": \"כהה ותוסס למסיבות.\"\n },\n {\n \"preset\": \"festival\",\n \"reason\": \"Poster energy for festivals.\",\n \"reasonHe\": \"אנרגיה של פוסטר לפסטיבלים.\"\n }\n ],\n \"colour\": {\n \"mood\": \"soft pink, gold, cream — or event colours\",\n \"swatches\": [\n \"#7D5260\",\n \"#7A5B36\",\n \"#FF4FA3\"\n ]\n },\n \"fonts\": \"elegant or bold\",\n \"tone\": \"Evocative; the day, the place, the people.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"standard\",\n \"between\": \"cinematic\"\n },\n \"imagery\": \"Real events at your venue.\",\n \"pages\": [\n \"home\",\n \"spaces\",\n \"gallery\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"gallery\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.masonry-gallery\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"A technical look takes the romance out of the day.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n }\n ],\n \"words\": [\n \"fairy tale\",\n \"once in a lifetime\"\n ],\n \"structure\": \"place\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"tables\"\n },\n {\n \"id\": \"hotel-bnb\",\n \"label\": \"Hotel, B&B or guesthouse\",\n \"he\": \"מלון / צימר\",\n \"group\": \"Community and places\",\n \"uupm\": \"38 Hotel/Hospitality\",\n \"match\": [\n \"hotel\",\n \"b&b\",\n \"guesthouse\",\n \"cabin\",\n \"zimmer\",\n \"מלון\",\n \"צימר\",\n \"אירוח\"\n ],\n \"good\": [\n {\n \"preset\": \"holiday-light\",\n \"reason\": \"Sea-blue glass: makes people want to go.\",\n \"reasonHe\": \"זכוכית בכחול של ים: מעורר חשק לבוא.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"For a boutique hotel.\",\n \"reasonHe\": \"למלון בוטיק.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Warm and personal for a B&B.\",\n \"reasonHe\": \"חם ואישי לצימר.\"\n },\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Fresh and calm.\",\n \"reasonHe\": \"רענן ורגוע.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm neutrals, gold — or sea blue\",\n \"swatches\": [\n \"#0A66E8\",\n \"#7A5B36\",\n \"#0E8A89\"\n ]\n },\n \"fonts\": \"elegant, welcoming\",\n \"tone\": \"Welcoming, sensory.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"subtle\",\n \"between\": \"cinematic\"\n },\n \"imagery\": \"Rooms, views, breakfast; your own photos.\",\n \"pages\": [\n \"home\",\n \"rooms (collection)\",\n \"room (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.card-grid\",\n \"proof.testimonial-carousel\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"Cold and technical is the opposite of a welcome.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"address\",\n \"say\": \"Visitors need the address to find you.\"\n }\n ],\n \"words\": [\n \"paradise\",\n \"luxury (unless rated)\"\n ],\n \"structure\": \"place\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"tables\"\n },\n {\n \"id\": \"classes\",\n \"label\": \"Teacher, tutor or classes\",\n \"he\": \"מורה, חוגים ושיעורים\",\n \"group\": \"Community and places\",\n \"uupm\": \"153 Music Instrument Learning · 56 Childcare/Daycare\",\n \"match\": [\n \"tutor\",\n \"lessons\",\n \"teacher\",\n \"classes\",\n \"school\",\n \"music lessons\",\n \"kids\",\n \"מורה\",\n \"שיעורים\",\n \"חוג\",\n \"חוגים\",\n \"ילדים\"\n ],\n \"good\": [\n {\n \"preset\": \"little-ones\",\n \"reason\": \"Playful and safe for children.\",\n \"reasonHe\": \"שובב ובטוח לילדים.\"\n },\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Warm and open.\",\n \"reasonHe\": \"חם ופתוח.\"\n },\n {\n \"preset\": \"coral-studio\",\n \"reason\": \"Energetic for dance or music.\",\n \"reasonHe\": \"אנרגטי למחול או למוזיקה.\"\n },\n {\n \"preset\": \"fresh-market\",\n \"reason\": \"Bright and lively.\",\n \"reasonHe\": \"בהיר ותוסס.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm, energetic\",\n \"swatches\": [\n \"#006A6A\",\n \"#E5484D\",\n \"#3B6939\"\n ]\n },\n \"fonts\": \"friendly, large\",\n \"tone\": \"Encouraging, clear for parents.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"lively\",\n \"between\": \"slide\"\n },\n \"imagery\": \"Real classes (with permission).\",\n \"pages\": [\n \"home\",\n \"classes\",\n \"prices\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"prices\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"pricing.tiers\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"luxurious\"\n ]\n },\n \"say\": \"An expensive look puts off parents comparing classes.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"off\"\n ]\n },\n \"say\": \"A still site feels low-energy for a class.\"\n }\n ],\n \"words\": [\n \"guaranteed\",\n \"genius\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n }\n] as const;\n\nexport const SPEC_ANALYSIS_SHAPE = {\n \"analysis\": {\n \"businessType\": \"string — a harness.businessTypes id\",\n \"alternatives\": \"[string, string] — the two nearest business types\",\n \"business\": \"business\",\n \"needs\": \"need[] — what the site needs: the owner's (from: you) and the type's (from: type)\",\n \"facts\": \"{ [fact]: factRead } — site.facts keys, only what the prompt states; every quote is words of the prompt\",\n \"missingFacts\": \"string[] — site.facts keys the prompt does not state\",\n \"voice\": \"voice\",\n \"moods\": \"string[] — ≤ 3 moods\",\n \"avoid\": \"string[] — harness.userAvoids ids the owner asked for\",\n \"hero\": \"hero\",\n \"locale\": \"'he' | 'en'\"\n },\n \"business\": {\n \"name\": \"string — the business as the owner names it\",\n \"audience\": \"string — who it is for, one short line\"\n },\n \"need\": {\n \"id\": \"string — a harness.needs id\",\n \"from\": \"'you' | 'type'\",\n \"name?\": \"string — the owner's own word for it\"\n },\n \"factRead\": {\n \"value\": \"string — the fact\",\n \"quote\": \"string — the words of the prompt it came from\"\n },\n \"voice\": {\n \"tone\": \"string — one line\",\n \"person\": \"'we' | 'I'\",\n \"formality\": \"'casual' | 'neutral' | 'formal'\",\n \"avoidWords\": \"string[]\"\n },\n \"hero\": {\n \"headline\": \"string — the hero headline\",\n \"lead\": \"string — the hero lead\"\n }\n} as const;\n\nexport const SPEC_HARNESS_EXAMPLES = [\n {\n \"id\": \"kadar\",\n \"locale\": \"he\",\n \"dir\": \"rtl\",\n \"prompt\": \"סטודיו קדר — כלי חרס בעבודת יד מסטודיו קטן ביפו. רוצה אתר שמציג את הכלים החדשים, מסביר על סדנאות יום שישי ומאפשר להשאיר פרטים להרשמה. בלי משהו קר או טכנולוגי.\",\n \"business\": {\n \"name\": \"סטודיו קדר\",\n \"latin\": \"Studio Kadar\",\n \"facts\": {\n \"email\": \"hello@studiokadar.co.il\"\n }\n },\n \"analysis\": {\n \"businessType\": \"makers\",\n \"alternatives\": [\n \"artist\",\n \"classes\"\n ],\n \"moods\": [\n \"warm\",\n \"crafted\",\n \"calm\"\n ],\n \"avoid\": [\n \"too-corporate\"\n ],\n \"copyLength\": \"standard\",\n \"sentences\": [\n [\n \"The business\",\n \"A small ceramics studio in Jaffa that makes stoneware by hand.\",\n \"כלי חרס בעבודת יד מסטודיו קטן ביפו\"\n ],\n [\n \"Who it is for\",\n \"People who buy hand-made tableware, and beginners who want to try the wheel.\",\n \"סדנאות יום שישי\"\n ],\n [\n \"What the site should do\",\n \"Show the new pieces and get people to sign up for a Friday workshop.\",\n \"ומאפשר להשאיר פרטים להרשמה\"\n ],\n [\n \"How it should feel\",\n \"Warm, hand-made and calm.\",\n \"בלי משהו קר או טכנולוגי\"\n ],\n [\n \"Put first\",\n \"New pieces from the kiln · Friday workshops · Made by hand in Jaffa\",\n \"הכלים החדשים\"\n ]\n ],\n \"hero\": {\n \"eyebrow\": \"כלי חרס · יפו\",\n \"headline\": \"סטודיו קדר\",\n \"lead\": \"כלי חרס בעבודת יד מסטודיו קטן ביפו.\"\n },\n \"missing\": [\n \"phone\",\n \"city\",\n \"address\",\n \"hours\"\n ],\n \"voice\": {\n \"tone\": \"Warm and plain, like the potter talking at the wheel. Short sentences.\",\n \"person\": \"we\",\n \"formality\": \"casual\",\n \"sample\": \"כל כלי יוצא מהתנור שלנו ביפו, ואין שניים זהים.\",\n \"avoid\": [\n \"מושלם\",\n \"יוקרתי\",\n \"ייצור המוני\"\n ]\n }\n },\n \"plan\": {\n \"homePatterns\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"feature.triad\",\n \"cta.banner\"\n ],\n \"heroHasImage\": true,\n \"facts\": {\n \"email\": \"x\"\n }\n },\n \"said\": [\n {\n \"id\": \"collection\",\n \"name\": \"New pieces\"\n },\n {\n \"id\": \"services\",\n \"name\": \"Friday workshops\"\n },\n {\n \"id\": \"sign-up-form\",\n \"name\": \"Workshop sign-up\"\n }\n ],\n \"read\": {\n \"sources\": [\n {\n \"kind\": \"site\",\n \"ref\": \"harastudio.example\"\n }\n ],\n \"palette\": [\n {\n \"hex\": \"#EFE5D6\",\n \"share\": 0.46\n },\n {\n \"hex\": \"#3B2F2A\",\n \"share\": 0.22\n },\n {\n \"hex\": \"#8E4A2C\",\n \"share\": 0.18\n },\n {\n \"hex\": \"#7A8B6F\",\n \"share\": 0.08\n }\n ],\n \"brand\": \"#8E4A2C\",\n \"ground\": \"light\",\n \"shape\": \"soft\",\n \"density\": \"airy\",\n \"motion\": \"some\",\n \"headings\": \"serif\",\n \"moods\": [\n \"warm\",\n \"crafted\",\n \"calm\"\n ]\n }\n },\n {\n \"id\": \"spa\",\n \"locale\": \"en\",\n \"dir\": \"ltr\",\n \"prompt\": \"Tamar Spa is a small day spa in Haifa: massages, facials and a quiet garden. I want people to see the treatments and prices and book by phone. It should feel calm and natural, nothing flashy, and please no dark backgrounds.\",\n \"business\": {\n \"name\": \"Tamar Spa\",\n \"facts\": {\n \"city\": \"Haifa\"\n }\n },\n \"analysis\": {\n \"businessType\": \"spa\",\n \"alternatives\": [\n \"salon\",\n \"yoga\"\n ],\n \"moods\": [\n \"calm\",\n \"natural\",\n \"elegant\"\n ],\n \"avoid\": [\n \"dark-pages\",\n \"loud-colour\"\n ],\n \"copyLength\": \"standard\",\n \"sentences\": [\n [\n \"The business\",\n \"A small day spa in Haifa with massages, facials and a garden.\",\n \"a small day spa in Haifa\"\n ],\n [\n \"Who it is for\",\n \"Locals who want a quiet few hours; gift buyers.\",\n \"a quiet garden\"\n ],\n [\n \"What the site should do\",\n \"Show treatments and prices, and get people to call to book.\",\n \"book by phone\"\n ],\n [\n \"How it should feel\",\n \"Calm and natural; nothing flashy.\",\n \"calm and natural, nothing flashy\"\n ],\n [\n \"Put first\",\n \"Treatments · Prices · The garden · How to book\",\n \"treatments and prices\"\n ]\n ],\n \"hero\": {\n \"eyebrow\": \"Day spa · Haifa\",\n \"headline\": \"A quiet afternoon in Haifa\",\n \"lead\": \"Massages, facials and a garden to rest in.\"\n },\n \"missing\": [\n \"phone\",\n \"address\",\n \"hours\"\n ],\n \"voice\": {\n \"tone\": \"Soft and unhurried; speaks to the guest.\",\n \"person\": \"we\",\n \"formality\": \"neutral\",\n \"sample\": \"Leave the week at the gate. The garden is quiet until four.\",\n \"avoid\": [\n \"deal\",\n \"hurry\",\n \"cheap\"\n ]\n }\n },\n \"plan\": {\n \"homePatterns\": [\n \"hero.split\",\n \"feature.triad\",\n \"pricing.tiers\",\n \"proof.testimonial-carousel\",\n \"cta.banner\"\n ],\n \"heroHasImage\": true,\n \"facts\": {\n \"city\": \"Haifa\"\n }\n },\n \"said\": [\n {\n \"id\": \"services\",\n \"name\": \"Treatments\"\n },\n {\n \"id\": \"prices\",\n \"name\": \"Prices\"\n }\n ],\n \"read\": {\n \"sources\": [\n {\n \"kind\": \"image\",\n \"ref\": \"garden-terrace.jpg\"\n },\n {\n \"kind\": \"image\",\n \"ref\": \"linen-towels.jpg\"\n }\n ],\n \"palette\": [\n {\n \"hex\": \"#E9DFD3\",\n \"share\": 0.5\n },\n {\n \"hex\": \"#A3B18A\",\n \"share\": 0.2\n },\n {\n \"hex\": \"#4F5E46\",\n \"share\": 0.15\n },\n {\n \"hex\": \"#C9A27E\",\n \"share\": 0.1\n }\n ],\n \"brand\": \"#4F5E46\",\n \"ground\": \"light\",\n \"shape\": \"round\",\n \"density\": \"airy\",\n \"motion\": \"some\",\n \"headings\": \"serif\",\n \"moods\": [\n \"calm\",\n \"natural\",\n \"elegant\"\n ]\n }\n },\n {\n \"id\": \"physio\",\n \"locale\": \"en\",\n \"dir\": \"ltr\",\n \"prompt\": \"Levi Physio — sports and back physiotherapy in Tel Aviv, two therapists. I need a professional, modern site: what we treat, the team, and a way to book an appointment. Patients are mostly runners and office workers.\",\n \"business\": {\n \"name\": \"Levi Physio\",\n \"facts\": {\n \"email\": \"clinic@leviphysio.co.il\",\n \"city\": \"Tel Aviv\"\n }\n },\n \"analysis\": {\n \"businessType\": \"clinic\",\n \"alternatives\": [\n \"fitness\",\n \"therapist\"\n ],\n \"moods\": [\n \"professional\",\n \"trustworthy\",\n \"calm\"\n ],\n \"avoid\": [],\n \"copyLength\": \"standard\",\n \"sentences\": [\n [\n \"The business\",\n \"A physiotherapy clinic in Tel Aviv for sports injuries and back pain, with two therapists.\",\n \"sports and back physiotherapy in Tel Aviv\"\n ],\n [\n \"Who it is for\",\n \"Runners and office workers with pain.\",\n \"mostly runners and office workers\"\n ],\n [\n \"What the site should do\",\n \"Explain what you treat, introduce the team, and get people to book.\",\n \"a way to book an appointment\"\n ],\n [\n \"How it should feel\",\n \"Professional and modern.\",\n \"professional, modern\"\n ],\n [\n \"Put first\",\n \"What we treat · The team · Book an appointment\",\n \"what we treat, the team\"\n ]\n ],\n \"hero\": {\n \"eyebrow\": \"Physiotherapy · Tel Aviv\",\n \"headline\": \"Back to running, sooner\",\n \"lead\": \"Sports and back physiotherapy in Tel Aviv.\"\n },\n \"missing\": [\n \"phone\",\n \"address\",\n \"hours\"\n ],\n \"voice\": {\n \"tone\": \"Clear and confident; plain words a patient understands.\",\n \"person\": \"we\",\n \"formality\": \"neutral\",\n \"sample\": \"We find what is causing the pain, then build a plan to get you moving.\",\n \"avoid\": [\n \"cure\",\n \"guaranteed\",\n \"miracle\"\n ]\n }\n },\n \"plan\": {\n \"homePatterns\": [\n \"hero.split\",\n \"feature.triad\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"heroHasImage\": false,\n \"facts\": {\n \"email\": \"x\",\n \"city\": \"x\"\n }\n },\n \"said\": [\n {\n \"id\": \"services\",\n \"name\": \"What we treat\"\n },\n {\n \"id\": \"team\",\n \"name\": \"The team\"\n },\n {\n \"id\": \"booking-request\",\n \"name\": \"Book an appointment\"\n }\n ],\n \"read\": null\n }\n] as const;\n","import type { DensityId, DesignMotion, MoodId, MotionId, TintId } from '@vectoriox/iox-ui/design-core';\nimport type { FactKey } from '@vectoriox/iox-ui/generation-core';\n\nimport {\n SPEC_BUSINESS_TYPES, SPEC_HARNESS_SOURCE, SPEC_NEEDS, SPEC_STRUCTURES, SPEC_USER_AVOIDS,\n} from './harness-spec.generated';\n\n/**\n * The design harness's knowledge (AI plan rev 3 §3f, H2): the 30 kinds of business IOX serves, each with the\n * styles that suit it (best first, with the reason), its look rules and content rules (one closed grammar,\n * read by the ranker and the lint), its voice, its motion, the pages it needs and its home sections.\n * Generated 1:1 from the contract (`harness`, gated in build-spec.mjs). Seeded from UI UX Pro Max — the\n * attribution travels with the data (`HARNESS_SOURCE.notice`).\n */\nexport const HARNESS_SOURCE = SPEC_HARNESS_SOURCE;\n\n/** What a site may need — the closed list an analysis returns; each maps to the archetype a plan writes. */\nexport type NeedId = keyof typeof SPEC_NEEDS;\nexport const NEED_IDS = Object.keys(SPEC_NEEDS) as ReadonlyArray<NeedId>;\nexport interface NeedDef {\n readonly label: string;\n readonly archetype: string;\n}\nexport const NEEDS: Readonly<Record<NeedId, NeedDef>> = SPEC_NEEDS;\n\n/** What an owner may ask to avoid (\"no dark backgrounds\") — each one look rule. */\nexport type UserAvoidId = keyof typeof SPEC_USER_AVOIDS;\nexport const USER_AVOID_IDS = Object.keys(SPEC_USER_AVOIDS) as ReadonlyArray<UserAvoidId>;\n\n/** The structures a site is built from (Studio · Practice · Place). */\nexport type StructureId = keyof typeof SPEC_STRUCTURES;\nexport const STRUCTURES = SPEC_STRUCTURES;\n\n/** How much a kind of business needs \"book a slot\" — the next product bet (off this road). */\nexport enum BookingNeed {\n Must = 'must',\n Tables = 'tables',\n Sometimes = 'sometimes',\n None = 'none',\n}\n\n/** The content checks of the avoid grammar (a look rule is the other kind). */\nexport enum AvoidCheck {\n NeedsFamily = 'needs-family',\n NeedsFact = 'needs-fact',\n ImageHero = 'image-hero',\n NoPattern = 'no-pattern',\n BrandHue = 'brand-hue',\n CopyLength = 'copy-length',\n}\n\n/** How much text a site carries, shortest first. */\nexport enum CopyLength {\n Short = 'short',\n Standard = 'standard',\n Rich = 'rich',\n}\nexport const COPY_LENGTH_ORDER: ReadonlyArray<`${CopyLength}`> = [CopyLength.Short, CopyLength.Standard, CopyLength.Rich];\n\n/** A look a business should not wear: each named axis lists the values that match (all named axes must). */\nexport interface LookCondition {\n readonly flavor?: ReadonlyArray<string>;\n readonly mode?: ReadonlyArray<string>;\n readonly motion?: ReadonlyArray<MotionId>;\n readonly moods?: ReadonlyArray<MoodId>;\n readonly tint?: ReadonlyArray<TintId>;\n readonly density?: ReadonlyArray<DensityId>;\n readonly scroll?: ReadonlyArray<string>;\n readonly animate?: ReadonlyArray<string>;\n readonly between?: ReadonlyArray<string>;\n}\n\nexport interface LookRule {\n readonly when: LookCondition;\n readonly say: string;\n}\n\nexport type CheckRule =\n | { readonly check: `${AvoidCheck.NeedsFamily}`; readonly family: string; readonly say: string }\n | { readonly check: `${AvoidCheck.NeedsFact}`; readonly fact: FactKey; readonly say: string }\n | { readonly check: `${AvoidCheck.ImageHero}`; readonly say: string }\n | { readonly check: `${AvoidCheck.NoPattern}`; readonly pattern: string; readonly say: string }\n | { readonly check: `${AvoidCheck.BrandHue}`; readonly from: number; readonly to: number; readonly minChroma: number; readonly say: string }\n | { readonly check: `${AvoidCheck.CopyLength}`; readonly max: `${CopyLength}`; readonly say: string };\n\nexport type AvoidRule = LookRule | CheckRule;\n\nexport const isLookRule = (rule: AvoidRule): rule is LookRule => 'when' in rule;\n\nexport interface GoodFit {\n readonly preset: string;\n readonly reason: string;\n /** The reason in Hebrew (2026-10-25). */\n readonly reasonHe: string;\n}\n\nexport interface BusinessType {\n readonly id: string;\n readonly label: string;\n readonly he: string;\n readonly group: string;\n readonly uupm: string;\n /** Keywords (English + Hebrew): the eval's expected answer and the no-model fallback. */\n readonly match: ReadonlyArray<string>;\n /** The styles that suit it, best first, each with why. */\n readonly good: ReadonlyArray<GoodFit>;\n readonly colour: { readonly mood: string; readonly swatches: ReadonlyArray<string> };\n readonly fonts: string;\n readonly tone: string;\n /** The motion TIMING it suits (the design axis — hover lift, durations). */\n readonly motion: MotionId;\n /** How its site usually scrolls, how animated it is and what plays between pages (rev 3.1). */\n readonly moves: Readonly<DesignMotion>;\n readonly imagery: string;\n readonly pages: ReadonlyArray<string>;\n /** The needs its page set implies, in page order (derived from `pages` at contract build). */\n readonly needs: ReadonlyArray<NeedId>;\n /** The home page's sections, library ids. */\n readonly home: ReadonlyArray<string>;\n readonly avoid: ReadonlyArray<AvoidRule>;\n /** Words its copy must not use. */\n readonly words: ReadonlyArray<string>;\n readonly structure: StructureId;\n /** In the M1-alpha slice. */\n readonly slice: boolean;\n /** Stock photos may fill its pictures (never the work itself). */\n readonly stock: boolean;\n readonly booking: `${BookingNeed}`;\n}\n\n/** The 30, in the board's order. Assignment here proves the generated data fits the type. */\nexport const BUSINESS_TYPES: ReadonlyArray<BusinessType> = SPEC_BUSINESS_TYPES;\n\nexport function businessTypeById(id: string | null | undefined): BusinessType | undefined {\n return id ? BUSINESS_TYPES.find(t => t.id === id) : undefined;\n}\n\nexport const BUSINESS_TYPE_IDS: ReadonlyArray<string> = BUSINESS_TYPES.map(t => t.id);\n\n/** The user-avoid rule for an id, or undefined. */\nexport function userAvoidRule(id: string): LookRule | undefined {\n return (SPEC_USER_AVOIDS as Readonly<Record<string, LookRule>>)[id];\n}\n","import type { DesignChoices, DesignMode, DesignMotion, StylePreset } from '@vectoriox/iox-ui/design-core';\n\nimport { LookCondition } from './business-types';\n\n/** The parts of a look a rule can name: the design's choices (motion included) in one colour mode. */\nexport type LookDesign = Pick<DesignChoices, 'flavorId' | 'motion' | 'density'> & Partial<Pick<DesignChoices, 'tint'>>\n & Partial<DesignMotion> & { mode: DesignMode };\n\nconst LIST_AXES = ['flavor', 'mode', 'motion', 'tint', 'density', 'scroll', 'animate', 'between'] as const;\ntype ListAxis = (typeof LIST_AXES)[number];\nconst DESIGN_KEY: Readonly<Record<ListAxis, keyof LookDesign>> = {\n flavor: 'flavorId', mode: 'mode', motion: 'motion', tint: 'tint', density: 'density',\n scroll: 'scroll', animate: 'animate', between: 'between',\n};\n\n/** True when `design` (worn with `moods`) is the look `when` describes — every axis it names must match. */\nexport function lookMatches(when: LookCondition, design: LookDesign, moods: ReadonlyArray<string>): boolean {\n for (const axis of LIST_AXES) {\n const values = when[axis] as ReadonlyArray<string> | undefined;\n if (values && !values.includes(String(design[DESIGN_KEY[axis]] ?? ''))) return false;\n }\n if (when.moods && !when.moods.some(m => moods.includes(m))) return false;\n return true;\n}\n\n/** A style preset as a rule sees it, in `mode` (default: the mode it opens in). */\nexport function presetLook(preset: StylePreset, mode: DesignMode = preset.modes[0]): LookDesign {\n return {\n flavorId: preset.flavorId, motion: preset.motion, density: preset.density, tint: preset.tint, mode,\n ...preset.moves,\n };\n}\n","import { BookingNeed, BUSINESS_TYPES, BusinessType, NeedId } from './business-types';\n\n/** Who asked for a need: the owner named it, or the kind of business needs it (\"we added\"). */\nexport enum NeedSource {\n You = 'you',\n Type = 'type',\n}\n\nexport interface SiteNeed {\n id: NeedId;\n from: `${NeedSource}`;\n /** The owner's own word for it (\"Friday workshops\"). */\n name?: string;\n}\n\n/** The needs that already let a visitor ask for a slot. */\nconst BOOKING_NEEDS: ReadonlyArray<NeedId> = ['booking-request', 'sign-up-form'];\nconst BOOKING_REQUEST: NeedId = 'booking-request';\n\n/**\n * What the site needs (AI plan rev 3 §3d, H3): what the owner named, then what this kind of business needs and\n * they did not name — its page set, in order, and a booking request for a business that must take bookings —\n * each marked `from: 'type'` (the Analysis step's \"we added\"). Pure; an unknown type adds nothing.\n */\nexport function inferNeeds(\n typeId: string | null | undefined,\n said: ReadonlyArray<Omit<SiteNeed, 'from'>> = [],\n types: ReadonlyArray<BusinessType> = BUSINESS_TYPES,\n): SiteNeed[] {\n const type = typeId ? types.find(t => t.id === typeId) : undefined;\n const out: SiteNeed[] = said.map(n => ({ ...n, from: NeedSource.You }));\n const have = new Set<NeedId>(said.map(n => n.id));\n for (const id of type?.needs ?? []) {\n if (have.has(id)) continue;\n have.add(id);\n out.push({ id, from: NeedSource.Type });\n }\n if (type?.booking === BookingNeed.Must && !BOOKING_NEEDS.some(id => have.has(id))) {\n out.push({ id: BOOKING_REQUEST, from: NeedSource.Type });\n }\n return out;\n}\n","import { MOOD_IDS, MoodId } from '@vectoriox/iox-ui/design-core';\nimport {\n describeShapeKey, FACT_KEYS, FactKey, isPlainObject, jsonListOf, jsonOneOf, JsonSchema, jsonShapedObject, jsonText,\n PathIssue, PathIssueCollector, pathAt, PlainObject, requiredShapeKeys, ShapeEntry, shapeKeys,\n} from '@vectoriox/iox-ui/generation-core';\n\nimport { BUSINESS_TYPE_IDS, NEED_IDS, USER_AVOID_IDS, UserAvoidId } from './business-types';\nimport { SPEC_ANALYSIS_SHAPE } from './harness-spec.generated';\nimport { NeedSource, SiteNeed } from './needs';\n\n/**\n * What the reading of a prompt returns (AI plan rev 3 §3d): one of the 30 kinds of business (and the two\n * nearest), who it is for, what the site needs, the facts the prompt STATES (each with the words it came from)\n * and those it does not, the owner's voice, moods, what they asked to avoid, a hero line, the language. A model\n * writes it; `validateSiteAnalysis` is the gate — it refuses with a path and never repairs (a model gets the\n * issues back and rewrites; the caller decides what to drop).\n */\n\nexport enum AnalysisLocale {\n He = 'he',\n En = 'en',\n}\nexport enum VoicePerson {\n We = 'we',\n I = 'I',\n}\nexport enum VoiceFormality {\n Casual = 'casual',\n Neutral = 'neutral',\n Formal = 'formal',\n}\n\nexport interface FactRead {\n value: string;\n /** The words of the prompt it came from — checked: every quote is in the prompt. */\n quote: string;\n}\n\nexport interface SiteAnalysis {\n businessType: string;\n alternatives: [string, string];\n business: { name: string; audience: string };\n needs: SiteNeed[];\n facts: Partial<Record<FactKey, FactRead>>;\n missingFacts: FactKey[];\n voice: { tone: string; person: `${VoicePerson}`; formality: `${VoiceFormality}`; avoidWords: string[] };\n moods: MoodId[];\n avoid: UserAvoidId[];\n hero: { headline: string; lead: string };\n locale: `${AnalysisLocale}`;\n}\n\nexport enum AnalysisIssueCode {\n Shape = 'shape',\n UnknownKey = 'unknown-key',\n Duplicate = 'duplicate',\n UnknownBusinessType = 'unknown-business-type',\n UnknownNeed = 'unknown-need',\n UnknownFact = 'unknown-fact',\n /** A fact's quote is not words of the prompt: it was not stated, so it may not be filled. */\n QuoteNotInPrompt = 'quote-not-in-prompt',\n /** A fact reported both found and missing. */\n FactFoundAndMissing = 'fact-found-and-missing',\n UnknownMood = 'unknown-mood',\n TooManyMoods = 'too-many-moods',\n UnknownAvoid = 'unknown-avoid',\n InvalidValue = 'invalid-value',\n}\n\nexport type AnalysisIssue = PathIssue<AnalysisIssueCode>;\n\nexport interface AnalysisValidation {\n valid: boolean;\n issues: AnalysisIssue[];\n}\n\nexport interface AnalysisContext {\n /** The owner's own words — every fact's quote must be found in them. */\n prompt: string;\n}\n\n/** At most this many moods (the closed list a preset carries too). */\nexport const MAX_ANALYSIS_MOODS = 3;\nconst ALTERNATIVES = 2;\n\nconst SHAPE: Readonly<Record<string, ShapeEntry>> = SPEC_ANALYSIS_SHAPE;\nconst KEYS = Object.fromEntries(Object.keys(SHAPE).map(k => [k, shapeKeys(SHAPE[k])])) as Record<string, string[]>;\nconst REQUIRED = Object.fromEntries(Object.keys(SHAPE).map(k => [k, requiredShapeKeys(SHAPE[k])])) as Record<string, string[]>;\n\nclass Collector extends PathIssueCollector<AnalysisIssueCode> {\n constructor() {\n super('analysis', { shape: AnalysisIssueCode.Shape, unknownKey: AnalysisIssueCode.UnknownKey, duplicate: AnalysisIssueCode.Duplicate });\n }\n /** An object of `shape` at `path`: no unknown key, every required key present. */\n object(value: unknown, shape: string, path: string): PlainObject | null {\n if (!isPlainObject(value)) { this.add(AnalysisIssueCode.Shape, path, 'must be an object'); return null; }\n this.keys(value, KEYS[shape], path);\n for (const key of REQUIRED[shape]) if (value[key] === undefined) this.add(AnalysisIssueCode.Shape, pathAt(path, key), 'is required');\n return value;\n }\n oneOf(obj: PlainObject, key: string, allowed: ReadonlyArray<string>, path: string, code = AnalysisIssueCode.InvalidValue): void {\n const v = obj[key];\n if (v !== undefined && (typeof v !== 'string' || !allowed.includes(v))) this.add(code, pathAt(path, key), `must be one of ${allowed.join(', ')}`);\n }\n strings(obj: PlainObject, key: string, path: string): string[] {\n const list = this.array(obj, key, path);\n list.forEach((v, i) => { if (typeof v !== 'string') this.add(AnalysisIssueCode.Shape, `${pathAt(path, key)}[${i}]`, 'must be a string'); });\n return list.filter((v): v is string => typeof v === 'string');\n }\n}\n\n/** Whitespace and case never decide whether words are the prompt's. */\nconst normalise = (s: string) => s.toLowerCase().replace(/\\s+/g, ' ').trim();\n\nexport function validateSiteAnalysis(value: unknown, ctx: AnalysisContext): AnalysisValidation {\n const c = new Collector();\n const a = c.object(value, 'analysis', '');\n if (!a) return { valid: false, issues: c.issues };\n\n c.oneOf(a, 'businessType', BUSINESS_TYPE_IDS, '', AnalysisIssueCode.UnknownBusinessType);\n const alternatives = c.strings(a, 'alternatives', '');\n if (Array.isArray(a['alternatives']) && a['alternatives'].length !== ALTERNATIVES) c.add(AnalysisIssueCode.Shape, 'alternatives', `must name ${ALTERNATIVES} business types`);\n alternatives.forEach((id, i) => {\n if (!BUSINESS_TYPE_IDS.includes(id)) c.add(AnalysisIssueCode.UnknownBusinessType, `alternatives[${i}]`, `\"${id}\" is not a business type`);\n else if (id === a['businessType']) c.add(AnalysisIssueCode.Duplicate, `alternatives[${i}]`, 'is the business type itself');\n });\n\n const business = c.object(a['business'], 'business', 'business');\n if (business) { c.string(business, 'name', 'business'); c.string(business, 'audience', 'business'); }\n\n const needs = c.array(a, 'needs', '');\n c.unique(needs.map(n => (isPlainObject(n) && typeof n['id'] === 'string' ? n['id'] : null)), i => `needs[${i}].id`, 'need');\n needs.forEach((raw, i) => {\n const path = `needs[${i}]`;\n const need = c.object(raw, 'need', path);\n if (!need) return;\n c.oneOf(need, 'id', NEED_IDS, path, AnalysisIssueCode.UnknownNeed);\n c.oneOf(need, 'from', Object.values(NeedSource), path);\n c.string(need, 'name', path, false);\n });\n\n const promptWords = normalise(ctx.prompt ?? '');\n const found = new Set<string>();\n if (!isPlainObject(a['facts'])) c.add(AnalysisIssueCode.Shape, 'facts', 'must be an object');\n else for (const [key, raw] of Object.entries(a['facts'])) {\n const path = `facts.${key}`;\n if (!(FACT_KEYS as ReadonlyArray<string>).includes(key)) { c.add(AnalysisIssueCode.UnknownFact, path, `\"${key}\" is not a fact (${FACT_KEYS.join(', ')})`); continue; }\n const fact = c.object(raw, 'factRead', path);\n if (!fact) continue;\n c.string(fact, 'value', path);\n const quote = c.string(fact, 'quote', path);\n if (quote && !promptWords.includes(normalise(quote))) c.add(AnalysisIssueCode.QuoteNotInPrompt, pathAt(path, 'quote'), 'is not words of the prompt — a fact the prompt does not state is missing, never filled');\n found.add(key);\n }\n c.strings(a, 'missingFacts', '').forEach((key, i) => {\n if (!(FACT_KEYS as ReadonlyArray<string>).includes(key)) c.add(AnalysisIssueCode.UnknownFact, `missingFacts[${i}]`, `\"${key}\" is not a fact`);\n else if (found.has(key)) c.add(AnalysisIssueCode.FactFoundAndMissing, `missingFacts[${i}]`, `\"${key}\" is also in facts`);\n });\n\n const voice = c.object(a['voice'], 'voice', 'voice');\n if (voice) {\n c.string(voice, 'tone', 'voice');\n c.oneOf(voice, 'person', Object.values(VoicePerson), 'voice');\n c.oneOf(voice, 'formality', Object.values(VoiceFormality), 'voice');\n c.strings(voice, 'avoidWords', 'voice');\n }\n\n const moods = c.strings(a, 'moods', '');\n if (moods.length > MAX_ANALYSIS_MOODS) c.add(AnalysisIssueCode.TooManyMoods, 'moods', `at most ${MAX_ANALYSIS_MOODS}`);\n moods.forEach((m, i) => { if (!(MOOD_IDS as ReadonlyArray<string>).includes(m)) c.add(AnalysisIssueCode.UnknownMood, `moods[${i}]`, `\"${m}\" is not a mood`); });\n c.strings(a, 'avoid', '').forEach((id, i) => {\n if (!(USER_AVOID_IDS as ReadonlyArray<string>).includes(id)) c.add(AnalysisIssueCode.UnknownAvoid, `avoid[${i}]`, `\"${id}\" is not something an owner may ask to avoid`);\n });\n\n const hero = c.object(a['hero'], 'hero', 'hero');\n if (hero) { c.string(hero, 'headline', 'hero'); c.string(hero, 'lead', 'hero'); }\n c.oneOf(a, 'locale', Object.values(AnalysisLocale), '');\n\n return { valid: c.issues.length === 0, issues: c.issues };\n}\n\n/**\n * The structured-output schema a model is given to write a `SiteAnalysis` (AI plan §3c/§3d, M0-5): built from the\n * SAME shape table `validateSiteAnalysis` reads (keys, which are required, each key's explanation as its\n * description) and the same closed lists (30 business types, needs, facts, moods, avoids) — so the shape the model\n * is told about is the shape the gate refuses. Written to the strictest common subset of JSON Schema the providers'\n * native strict modes accept (Anthropic `output_config.format`, OpenRouter `json_schema` + `strict`): every object\n * closes with `additionalProperties: false`; no length, count or number bounds (the gate checks those). The\n * schema is a hint the provider enforces; `validateSiteAnalysis` stays the gate.\n *\n * ONE difference from the document, the plan wire's rule \"maps as lists\" (vectoriox/iox-cms#47 — Claude refuses a\n * grammar compiled too large, and a map of the five facts, each `{ value, quote }`, was 15 of the reading's 47\n * properties): on the wire `facts` is a list `[{ fact, value, quote }]`, a stated fact once each. `analysisFromWire`\n * makes it the map `validateSiteAnalysis` judges; `analysisToWire` is its inverse (fakes and specs write it).\n */\n\nexport type { JsonSchema } from '@vectoriox/iox-ui/generation-core';\n\n/** The name a provider shows the format under (`json_schema.name`). */\nexport const SITE_ANALYSIS_SCHEMA_NAME = 'site_analysis';\n\nconst text = jsonText;\nconst oneOf = jsonOneOf;\nconst listOf = jsonListOf;\n\n/** An object of `shape`: exactly its keys, its required ones required, each described by the table. */\nconst shaped = (shape: string, properties: Record<string, JsonSchema>): JsonSchema => jsonShapedObject(SHAPE[shape], properties, shape);\n\n/** A stated fact on the wire: which fact, then the document's `factRead` keys in the table's own words. */\nconst FACT_LINE_SHAPE: ShapeEntry = {\n fact: `${FACT_KEYS.map(k => `'${k}'`).join(' | ')} — which fact (site.facts), each at most once`,\n ...SHAPE['factRead'],\n};\n\n/** The analysis as the wire carries it: `facts` a list of fact lines, described in the table's words. */\nconst ANALYSIS_WIRE_SHAPE: ShapeEntry = {\n ...SHAPE['analysis'],\n facts: `factLine[] — ${describeShapeKey(SHAPE['analysis'], 'facts').replace(/^\\{ \\[fact\\]: factRead \\} — /, '')}`,\n};\n\nexport function siteAnalysisJsonSchema(): JsonSchema {\n const factLine = jsonShapedObject(FACT_LINE_SHAPE, { fact: oneOf(FACT_KEYS), value: text(), quote: text() }, 'factLine');\n return jsonShapedObject(ANALYSIS_WIRE_SHAPE, {\n businessType: oneOf(BUSINESS_TYPE_IDS),\n alternatives: listOf(oneOf(BUSINESS_TYPE_IDS)),\n business: shaped('business', { name: text(), audience: text() }),\n needs: listOf(shaped('need', { id: oneOf(NEED_IDS), from: oneOf(Object.values(NeedSource)), name: text() })),\n facts: listOf(factLine),\n missingFacts: listOf(oneOf(FACT_KEYS)),\n voice: shaped('voice', {\n tone: text(),\n person: oneOf(Object.values(VoicePerson)),\n formality: oneOf(Object.values(VoiceFormality)),\n avoidWords: listOf(text()),\n }),\n moods: listOf(oneOf(MOOD_IDS)),\n avoid: listOf(oneOf(USER_AVOID_IDS)),\n hero: shaped('hero', { headline: text(), lead: text() }),\n locale: oneOf(Object.values(AnalysisLocale)),\n }, 'analysis');\n}\n\n/** A model's analysis (the wire) → the document, and the faults only the wire can have (a fact stated twice). Never repairs. */\nexport function analysisFromWire(wire: unknown): { analysis: unknown; issues: AnalysisIssue[] } {\n if (!isPlainObject(wire)) return { analysis: wire, issues: [] };\n if (!Array.isArray(wire['facts'])) return { analysis: wire, issues: [{ code: AnalysisIssueCode.Shape, path: 'facts', message: 'must be a list of { fact, value, quote }' }] };\n const facts: PlainObject = {};\n const issues: AnalysisIssue[] = [];\n (wire['facts'] as unknown[]).forEach((line, i) => {\n if (!isPlainObject(line) || typeof line['fact'] !== 'string') {\n issues.push({ code: AnalysisIssueCode.Shape, path: `facts[${i}]`, message: 'must be { fact, value, quote }' });\n return;\n }\n const { fact, ...read } = line;\n if (fact in facts) issues.push({ code: AnalysisIssueCode.Duplicate, path: `facts[${i}].fact`, message: `\"${fact}\" is stated twice` });\n else facts[fact as string] = read;\n });\n return { analysis: { ...wire, facts }, issues };\n}\n\n/** The document → the wire (what a model writes). */\nexport function analysisToWire(analysis: SiteAnalysis): PlainObject {\n return { ...analysis, facts: Object.entries(analysis.facts).map(([fact, read]) => ({ fact, ...read })) };\n}\n","import {\n DensityId, flavorPackById, MOOD_LABELS, MoodId, parseFontFamilies, ShapeId, SPEC_FLAVORS, STYLE_PRESETS, StylePreset, TintId,\n} from '@vectoriox/iox-ui/design-core';\nimport type { AnimateId } from '@vectoriox/iox-ui/design-core';\n\nimport { AvoidRule, BUSINESS_TYPES, BusinessType, isLookRule, LookRule, userAvoidRule } from './business-types';\nimport { lookMatches, presetLook } from './look';\nimport { AnalysisLocale } from './site-analysis';\n\n/**\n * Which styles suit a business, best first (AI plan rev 3 §3f, H3) — Design ▸ Look's order. Pure and\n * deterministic: the browser and the server give the same order, and the eval asserts it.\n */\n\n/** What the ranker reads of an analysis. */\nexport interface RankInput {\n businessType?: string | null;\n moods?: ReadonlyArray<string>;\n /** What the owner asked to avoid (`USER_AVOID_IDS`). */\n avoid?: ReadonlyArray<string>;\n}\n\nexport enum PresetFit {\n Good = 'good',\n Ok = 'ok',\n Poor = 'poor',\n}\n\n/** Why a style sits where it does — the line Design ▸ Look shows. */\nexport enum RankReason {\n /** The business type names it as a good fit (`reason` = the type's line). */\n GoodFit = 'good-fit',\n /** A type rule advises against its look (`reason` = the rule's line). */\n TypeAvoid = 'type-avoid',\n /** The owner asked to avoid its look (`reason` = the rule's line). */\n UserAvoid = 'user-avoid',\n /** It shares the analysis's moods (`sharedMoods`). */\n SharedMoods = 'shared-moods',\n None = 'none',\n}\n\nexport interface RankedPreset {\n id: string;\n fit: PresetFit;\n score: number;\n reasonKind: RankReason;\n /** In English, from the contract (the UI may localise `reasonKind` + `sharedMoods` instead). */\n reason: string;\n /** A good fit's reason in Hebrew (the contract has Hebrew for good fits; `presetReason` picks). */\n reasonHe?: string;\n sharedMoods: MoodId[];\n /** Catalogue position — ties keep it. */\n order: number;\n /** With references (`rankWithReferences`): the boost the reading gave it, and whether it is the nearest. */\n refBoost?: number;\n nearest?: boolean;\n}\n\n/** The ranking's weights: the type's own order, then moods, then motion character, minus what is advised against. */\nexport const RANK_WEIGHTS = {\n firstGoodFit: 100,\n goodFitStep: 10,\n sharedMood: 6,\n sharedMove: 2,\n typeAvoid: 60,\n userAvoid: 80,\n} as const;\n\nconst MOVE_KEYS = ['scroll', 'animate', 'between'] as const;\n\n/**\n * The rule among `rules` that `preset`'s look matches — in EVERY mode it offers (a preset that can switch to a\n * mode escaping a mode-only rule is judged in that mode: Night gallery offers light). The rule reported is the\n * one its default mode matches.\n */\nfunction ruleHit(preset: StylePreset, rules: ReadonlyArray<LookRule>): LookRule | null {\n for (const mode of preset.modes) {\n if (!rules.some(r => lookMatches(r.when, presetLook(preset, mode), preset.moods))) return null;\n }\n return rules.find(r => lookMatches(r.when, presetLook(preset), preset.moods)) ?? null;\n}\n\nconst lookRules = (rules: ReadonlyArray<AvoidRule>): LookRule[] => rules.filter(isLookRule);\n\nfunction moodsLine(moods: ReadonlyArray<MoodId>): string {\n return `${moods.map(m => MOOD_LABELS[m]).join(' and ')}, like your description.`;\n}\n\n/**\n * Every preset, best first: score = the type's own order (a good fit 100, 90, 80…) + 6 per mood shared with\n * the analysis + 2 per motion choice shared with the type, − 60 for a look the type advises against, − 80 for\n * one the owner said to avoid. Ties keep catalogue order. With no matching type, moods alone order them.\n */\nexport function rankStylePresets(\n input: RankInput,\n presets: ReadonlyArray<StylePreset> = STYLE_PRESETS,\n types: ReadonlyArray<BusinessType> = BUSINESS_TYPES,\n): RankedPreset[] {\n const type = input.businessType ? types.find(t => t.id === input.businessType) : undefined;\n const typeRules = type ? lookRules(type.avoid) : [];\n const userRules = (input.avoid ?? []).map(userAvoidRule).filter((r): r is LookRule => !!r);\n const moods = input.moods ?? [];\n return presets.map((preset, order) => {\n const goodAt = type ? type.good.findIndex(g => g.preset === preset.id) : -1;\n const sharedMoods = preset.moods.filter(m => moods.includes(m));\n let score = goodAt >= 0 ? RANK_WEIGHTS.firstGoodFit - RANK_WEIGHTS.goodFitStep * goodAt : 0;\n score += RANK_WEIGHTS.sharedMood * sharedMoods.length;\n if (type) score += RANK_WEIGHTS.sharedMove * MOVE_KEYS.filter(k => preset.moves[k] === type.moves[k]).length;\n const typeHit = ruleHit(preset, typeRules);\n const userHit = ruleHit(preset, userRules);\n if (typeHit) score -= RANK_WEIGHTS.typeAvoid;\n if (userHit) score -= RANK_WEIGHTS.userAvoid;\n const fit = typeHit || userHit ? PresetFit.Poor : goodAt >= 0 ? PresetFit.Good : PresetFit.Ok;\n const [reasonKind, reason] = userHit ? [RankReason.UserAvoid, userHit.say]\n : typeHit ? [RankReason.TypeAvoid, typeHit.say]\n : goodAt >= 0 && type ? [RankReason.GoodFit, type.good[goodAt].reason]\n : sharedMoods.length ? [RankReason.SharedMoods, moodsLine(sharedMoods)]\n : [RankReason.None, ''];\n const reasonHe = reasonKind === RankReason.GoodFit && type ? type.good[goodAt].reasonHe : undefined;\n return { id: preset.id, fit, score, reasonKind, reason, ...(reasonHe ? { reasonHe } : {}), sharedMoods, order };\n }).sort((a, b) => b.score - a.score || a.order - b.order);\n}\n\n/**\n * The line a style's card shows (its title): why it sits where it does, else what the style is — in the studio's\n * language where the contract has it. Decided 2026-10-25: good fits and descriptions have Hebrew (the name stays a\n * proper name); a type's or the owner's advice and the shared-moods line are English in the contract yet.\n */\nexport function presetReason(ranked: RankedPreset, preset: StylePreset | undefined, locale: string | null | undefined): string {\n const hebrew = locale === AnalysisLocale.He;\n if (hebrew && ranked.reasonKind === RankReason.GoodFit && ranked.reasonHe) return ranked.reasonHe;\n if (ranked.reason) return ranked.reason;\n return (hebrew ? preset?.blurbHe : preset?.blurb) ?? '';\n}\n\n/** One flavor's styles in Design ▸ Look: its presets in ranking order. */\nexport interface PresetFlavorGroup {\n flavorId: string;\n presets: RankedPreset[];\n}\n\n/**\n * Design ▸ Look's grid (decided 2026-10-28, Doron: \"All 24, grouped by flavor\" — reverses Q7 and the wizard's best 6):\n * every ranked style under its flavor, the flavors in catalogue order (Crisp · Linen · Midnight · Glass · Bloom · Pop),\n * each flavor's styles best-ranked first. A ranking with no basis (no business, no moods) is catalogue order, so the\n * groups are too. One rule for both hosts.\n */\nexport function presetsByFlavor(\n ranked: ReadonlyArray<RankedPreset>,\n presets: ReadonlyArray<StylePreset> = STYLE_PRESETS,\n flavors: ReadonlyArray<{ id: string }> = SPEC_FLAVORS,\n): PresetFlavorGroup[] {\n const flavorOf = new Map(presets.map(p => [p.id, p.flavorId]));\n return flavors\n .map(f => ({ flavorId: f.id, presets: ranked.filter(r => flavorOf.get(r.id) === f.id) }))\n .filter(g => g.presets.length > 0);\n}\n\n/** The style the ranking puts first — only when it had something to rank by (a positive score); else none is \"best\". */\nexport function bestRankedPreset(ranked: ReadonlyArray<RankedPreset>): string | null {\n const top = ranked[0];\n return top && top.score > 0 ? top.id : null;\n}\n\n// ── References: a reading of pictures or a site, as style (plan §3k, R4) ─────────────────────────────────\nexport enum StyleReadSourceKind {\n Image = 'image',\n Site = 'site',\n}\nexport enum StyleReadGround {\n Light = 'light',\n Dark = 'dark',\n Mixed = 'mixed',\n}\nexport enum StyleReadMotion {\n None = 'none',\n Some = 'some',\n Lots = 'lots',\n}\nexport enum StyleReadHeadings {\n Serif = 'serif',\n Sans = 'sans',\n Display = 'display',\n Mono = 'mono',\n}\n\n/** What a reader measured (palette) and saw (moods, shape…) — never their CSS, text or pictures. */\nexport interface StyleRead {\n sources: ReadonlyArray<{ kind: `${StyleReadSourceKind}`; ref: string }>;\n /** ≤ 6, MEASURED, never asked of a model. */\n palette: ReadonlyArray<{ hex: string; share: number }>;\n /** The most frequent saturated colour — a CANDIDATE seed: the AA audit decides. */\n brand?: string;\n ground: `${StyleReadGround}`;\n shape?: ShapeId;\n density?: DensityId;\n motion?: `${StyleReadMotion}`;\n headings?: `${StyleReadHeadings}`;\n moods: ReadonlyArray<MoodId>;\n}\n\n/** The boosts a reading gives each preset, and the defaults it suggests. */\nexport interface StyleHints {\n boost: Record<string, number>;\n seed: string | null;\n tint: TintId;\n shape?: ShapeId;\n density?: DensityId;\n animate: AnimateId | null;\n}\n\nexport const READ_WEIGHTS = {\n sharedMood: 8,\n ground: 10,\n shape: 6,\n density: 4,\n serifHeadings: 6,\n} as const;\n\n/** How much motion a reading saw → How animated. */\nexport const READ_ANIMATE: Readonly<Record<`${StyleReadMotion}`, AnimateId>> = {\n [StyleReadMotion.None]: 'still',\n [StyleReadMotion.Some]: 'subtle',\n [StyleReadMotion.Lots]: 'standard',\n};\n\nconst SERIF_GENERIC = 'serif';\n\n/** True when the preset's pairing sets headings in a serif (its display stack ends in the serif generic). */\nexport function presetHasSerifHeadings(preset: StylePreset): boolean {\n const pair = flavorPackById(preset.flavorId)?.pairs.find(p => p.id === preset.pairId);\n return parseFontFamilies(pair?.tokens['font-display'] ?? '').includes(SERIF_GENERIC);\n}\n\n/** A reading → a score boost per preset and the defaults it suggests (pure, deterministic). */\nexport function mapStyleRead(read: StyleRead, presets: ReadonlyArray<StylePreset> = STYLE_PRESETS): StyleHints {\n const boost: Record<string, number> = {};\n for (const p of presets) {\n let b = READ_WEIGHTS.sharedMood * p.moods.filter(m => read.moods.includes(m)).length;\n if (read.ground !== StyleReadGround.Mixed && p.modes[0] === read.ground) b += READ_WEIGHTS.ground;\n if (read.shape && p.shape === read.shape) b += READ_WEIGHTS.shape;\n if (read.density && p.density === read.density) b += READ_WEIGHTS.density;\n if (read.headings === StyleReadHeadings.Serif && presetHasSerifHeadings(p)) b += READ_WEIGHTS.serifHeadings;\n boost[p.id] = b;\n }\n return {\n boost,\n seed: read.brand ?? null,\n tint: read.palette.length && read.ground === StyleReadGround.Light ? 'subtle' : 'neutral',\n ...(read.shape ? { shape: read.shape } : {}),\n ...(read.density ? { density: read.density } : {}),\n animate: read.motion ? READ_ANIMATE[read.motion] : null,\n };\n}\n\n/** `rankStylePresets` + the reading's boost; `nearest` = the best-boosted style that is not a poor fit. */\nexport function rankWithReferences(\n input: RankInput,\n read: StyleRead | null | undefined,\n presets: ReadonlyArray<StylePreset> = STYLE_PRESETS,\n types: ReadonlyArray<BusinessType> = BUSINESS_TYPES,\n): RankedPreset[] {\n const ranked = rankStylePresets(input, presets, types);\n if (!read) return ranked;\n const { boost } = mapStyleRead(read, presets);\n const out = ranked.map(x => ({ ...x, score: x.score + (boost[x.id] ?? 0), refBoost: boost[x.id] ?? 0 }))\n .sort((a, b) => b.score - a.score || a.order - b.order);\n const nearest = out.filter(x => x.fit !== PresetFit.Poor)\n .reduce<RankedPreset | null>((a, b) => (!a || (b.refBoost ?? 0) > (a.refBoost ?? 0) ? b : a), null);\n return out.map(x => ({ ...x, nearest: !!nearest && x.id === nearest.id }));\n}\n","import { DesignMotion, SPEC_AXES, STYLE_PRESETS, StylePreset } from '@vectoriox/iox-ui/design-core';\n\nimport { BUSINESS_TYPES, BusinessType } from './business-types';\nimport { READ_ANIMATE, StyleRead } from './rank';\n\n/**\n * Where Design ▸ Motion starts (AI plan rev 3.1 §3p, MO-D3) — and what \"Build with these\" takes. Pure.\n * Scrolling and Between pages are the BUSINESS's (a spa scrolls softly whatever its look); How animated is the\n * CALMER of the business's (or what the references show) and the style's — so a quiet serif look never gets\n * bouncing cards. The owner's \"little movement\" caps all three. No matching type → the style's own.\n */\n\nexport interface MotionInput {\n businessType?: string | null;\n avoid?: ReadonlyArray<string>;\n}\n\n/** Where the start came from, structured (the screen words it in its own language). */\nexport interface MotionBasis {\n /** The kind of business it started from (null: no type matched, the style's own). */\n type: string | null;\n /** The style made How animated calmer than the business (or the references) wanted. */\n calmerStyle: boolean;\n /** The references set How animated. */\n references: boolean;\n /** The owner asked for little movement: all three were capped. */\n littleMovement: boolean;\n}\n\nexport interface MotionStart extends DesignMotion {\n /** Why, in English — one line per step the start took. */\n why: string[];\n basis: MotionBasis;\n}\n\n/** The owner asked for little movement (`USER_AVOID_IDS`). */\nexport const LITTLE_MOVEMENT_AVOID = 'lots-of-motion';\n/** What \"little movement\" caps each choice at. */\nexport const LITTLE_MOVEMENT_CAP: Readonly<DesignMotion> = { scroll: 'smooth', animate: 'subtle', between: 'fade' };\n\ntype Axis = keyof DesignMotion;\nconst TABLES = { scroll: SPEC_AXES.scrolls, animate: SPEC_AXES.animations, between: SPEC_AXES.betweens } as const;\nconst ORDER: Readonly<Record<Axis, ReadonlyArray<string>>> = {\n scroll: Object.keys(SPEC_AXES.scrolls), animate: Object.keys(SPEC_AXES.animations), between: Object.keys(SPEC_AXES.betweens),\n};\n\n/** The stiller of two choices on one axis (the axes are ordered stillest first). */\nexport function calmerChoice<A extends Axis>(axis: A, a: DesignMotion[A], b: DesignMotion[A]): DesignMotion[A] {\n return ORDER[axis].indexOf(a) <= ORDER[axis].indexOf(b) ? a : b;\n}\n\nconst label = (axis: Axis, id: string) => (TABLES[axis] as Readonly<Record<string, { label: string }>>)[id]?.label ?? id;\nconst triple = (m: DesignMotion) => `${label('scroll', m.scroll)} · ${label('animate', m.animate)} · ${label('between', m.between)}`;\n\nexport function motionFor(\n input: MotionInput,\n presetId: string,\n read: StyleRead | null = null,\n types: ReadonlyArray<BusinessType> = BUSINESS_TYPES,\n presets: ReadonlyArray<StylePreset> = STYLE_PRESETS,\n): MotionStart {\n const type = input.businessType ? types.find(t => t.id === input.businessType) : undefined;\n const preset = presets.find(p => p.id === presetId) ?? presets[0];\n const base = type ? type.moves : preset.moves;\n const ref = read?.motion ? READ_ANIMATE[read.motion] : null;\n const wanted = ref ?? base.animate;\n let out: DesignMotion = { scroll: base.scroll, animate: calmerChoice('animate', wanted, preset.moves.animate), between: base.between };\n const why = [type ? `${type.label}: ${triple(base)}` : `${preset.name}: the style's own`];\n const basis: MotionBasis = { type: type?.id ?? null, calmerStyle: out.animate !== wanted, references: !!(ref && type), littleMovement: false };\n if (basis.calmerStyle) why.push(`${preset.name} moves less (${label('animate', preset.moves.animate)})`);\n if (basis.references) why.push(`your references: ${label('animate', ref!)}`);\n if ((input.avoid ?? []).includes(LITTLE_MOVEMENT_AVOID)) {\n basis.littleMovement = true;\n out = {\n scroll: calmerChoice('scroll', out.scroll, LITTLE_MOVEMENT_CAP.scroll),\n animate: calmerChoice('animate', out.animate, LITTLE_MOVEMENT_CAP.animate),\n between: calmerChoice('between', out.between, LITTLE_MOVEMENT_CAP.between),\n };\n why.push('you asked for little movement');\n }\n return { ...out, why, basis };\n}\n","import { AnimateId, DesignChoices, DesignMotion, parseHexColor, rgbToOklab, SPEC_AXES } from '@vectoriox/iox-ui/design-core';\nimport type { FactKey } from '@vectoriox/iox-ui/generation-core';\n\nimport { AvoidCheck, BUSINESS_TYPES, BusinessType, COPY_LENGTH_ORDER, CopyLength, isLookRule } from './business-types';\nimport { lookMatches } from './look';\n\n/**\n * Design advice (AI plan rev 3 §3f, H5's core): the business type's avoid rules run against a built site's\n * look, home sections, facts and copy length. ADVICE only — Needs attention and the Publish dialog show it,\n * \"Keep it\" dismisses it, and nothing is ever refused on it (H-D9).\n */\n\nexport enum LintKind {\n Look = 'look',\n Content = 'content',\n Fact = 'fact',\n}\n\nexport interface LintFinding {\n kind: LintKind;\n say: string;\n fact?: FactKey;\n}\n\n/** What the lint reads of a site. */\nexport interface LintSite {\n design: Pick<DesignChoices, 'flavorId' | 'seed' | 'motion' | 'density' | 'mode'> & Partial<Pick<DesignChoices, 'tint'>> & Partial<DesignMotion>;\n moods?: ReadonlyArray<string>;\n /** The home page's section patterns. */\n homePatterns?: ReadonlyArray<string>;\n /** Every page's section patterns (defaults to the home page's). */\n allPatterns?: ReadonlyArray<string>;\n facts?: Partial<Record<FactKey, string>>;\n copyLength?: `${CopyLength}`;\n heroHasImage?: boolean;\n}\n\nconst DEGREES = 180 / Math.PI;\nconst FULL_TURN = 360;\n/** How far a site may move above what its kind of business usually wears before the lint says so. */\nexport const ANIMATE_ADVICE_STEPS = 2;\nconst ANIMATE_ORDER = Object.keys(SPEC_AXES.animations);\n\n/** A colour's OKLCH hue (degrees) and chroma, through design-core's one OKLab conversion. */\nexport function oklchHue(hex: string): { hue: number; chroma: number } | null {\n const rgb = parseHexColor(hex);\n if (!rgb) return null;\n const { a, b } = rgbToOklab(rgb);\n return { hue: (Math.atan2(b, a) * DEGREES + FULL_TURN) % FULL_TURN, chroma: Math.hypot(a, b) };\n}\n\nconst familyOf = (patternId: string) => patternId.split('.')[0];\n\nexport function lintDesign(site: LintSite, typeId: string, types: ReadonlyArray<BusinessType> = BUSINESS_TYPES): LintFinding[] {\n const type = types.find(t => t.id === typeId);\n if (!type) return [];\n const out: LintFinding[] = [];\n const home = site.homePatterns ?? [];\n const all = site.allPatterns ?? home;\n for (const rule of type.avoid) {\n if (isLookRule(rule)) {\n if (lookMatches(rule.when, site.design, site.moods ?? [])) out.push({ kind: LintKind.Look, say: rule.say });\n continue;\n }\n switch (rule.check) {\n case AvoidCheck.NeedsFamily:\n if (!home.some(id => familyOf(id) === rule.family)) out.push({ kind: LintKind.Content, say: rule.say });\n break;\n case AvoidCheck.NeedsFact:\n if (!site.facts?.[rule.fact]) out.push({ kind: LintKind.Fact, say: rule.say, fact: rule.fact });\n break;\n case AvoidCheck.ImageHero:\n if (!site.heroHasImage) out.push({ kind: LintKind.Content, say: rule.say });\n break;\n case AvoidCheck.NoPattern:\n if (all.includes(rule.pattern)) out.push({ kind: LintKind.Content, say: rule.say });\n break;\n case AvoidCheck.CopyLength:\n if (site.copyLength && COPY_LENGTH_ORDER.indexOf(site.copyLength) > COPY_LENGTH_ORDER.indexOf(rule.max)) out.push({ kind: LintKind.Content, say: rule.say });\n break;\n case AvoidCheck.BrandHue: {\n const hue = oklchHue(site.design.seed);\n if (hue && hue.chroma >= rule.minChroma && hue.hue >= rule.from && hue.hue <= rule.to) out.push({ kind: LintKind.Look, say: rule.say });\n break;\n }\n }\n }\n const advice = motionAdvice(type.id, site.design.animate, types);\n if (advice) {\n const usual = (SPEC_AXES.animations as Readonly<Record<string, { label: string }>>)[advice.usual].label;\n out.push({ kind: LintKind.Look, say: `${type.label} sites usually move less (${usual}); this much movement as people scroll can feel restless.` });\n }\n return out;\n}\n\n/**\n * Rev 3.1: two levels above what this kind of business usually wears (Subtle → Lively) is advice, never a block.\n * Structured, so Design ▸ Motion says it in the studio's language: `usual` = the level the type wears.\n */\nexport function motionAdvice(\n typeId: string | null | undefined, animate: AnimateId | string | null | undefined, types: ReadonlyArray<BusinessType> = BUSINESS_TYPES,\n): { usual: AnimateId } | null {\n const type = typeId ? types.find(t => t.id === typeId) : undefined;\n if (!type || !animate || !ANIMATE_ORDER.includes(animate)) return null;\n return ANIMATE_ORDER.indexOf(animate) >= ANIMATE_ORDER.indexOf(type.moves.animate) + ANIMATE_ADVICE_STEPS ? { usual: type.moves.animate } : null;\n}\n","import { DesignChoices, presetChoices } from '@vectoriox/iox-ui/design-core';\nimport { FactKey, patternById, SITE_FACT_LABELS, SPEC_SITE_LIBRARY } from '@vectoriox/iox-ui/generation-core';\n\nimport { BusinessType, businessTypeById, isLookRule } from './business-types';\nimport { SiteNeed } from './needs';\nimport { SiteAnalysis } from './site-analysis';\n\n/**\n * What the PLAN prompt is given (AI plan rev 3 §3f \"Retrieval, not the whole knowledge base\"): the one matched\n * business rule, the analysis the owner corrected, the style they picked, and the sections that rule's home\n * uses — never the 30 rules or the 24 presets. Design ▸ Look and the prompt read the same rule. Pure; the M1\n * caller serialises it.\n */\n\nexport interface PromptSection {\n id: string;\n family: string;\n /** The composed pattern's label; null while the library has not composed it yet (track L). */\n label: string | null;\n composed: boolean;\n}\n\nexport interface PromptContext {\n type: {\n id: string;\n label: string;\n tone: string;\n /** Words the copy must not use — the type's and the owner's. */\n avoidWords: string[];\n imagery: string;\n fonts: string;\n colourMood: string;\n structure: BusinessType['structure'];\n booking: BusinessType['booking'];\n /** What this kind of site should not look like — the look rules' lines. */\n lookAdvice: string[];\n } | null;\n business: SiteAnalysis['business'];\n voice: SiteAnalysis['voice'];\n needs: SiteNeed[];\n facts: Partial<Record<FactKey, string>>;\n /** The facts the prompt did not state — placeholders, never invented. */\n missingFacts: Array<{ key: FactKey; label: string }>;\n moods: SiteAnalysis['moods'];\n hero: SiteAnalysis['hero'];\n locale: SiteAnalysis['locale'];\n design: DesignChoices | null;\n sections: PromptSection[];\n}\n\nexport interface PromptContextOptions {\n /** The style the owner picked on Design ▸ Look. */\n presetId?: string | null;\n /** …or the exact choices (after Colour / Type / Shape / Motion edits) — wins over `presetId`. */\n design?: DesignChoices | null;\n}\n\nconst FAMILY_OF: ReadonlyMap<string, string> = new Map(SPEC_SITE_LIBRARY.map(e => [e.id, e.family]));\n\nexport function analysisPromptContext(analysis: SiteAnalysis, opts: PromptContextOptions = {}): PromptContext {\n const type = businessTypeById(analysis.businessType);\n const facts: Partial<Record<FactKey, string>> = {};\n for (const [key, read] of Object.entries(analysis.facts) as Array<[FactKey, { value: string }]>) facts[key] = read.value;\n return {\n type: type ? {\n id: type.id,\n label: type.label,\n tone: type.tone,\n avoidWords: [...new Set([...type.words, ...analysis.voice.avoidWords])],\n imagery: type.imagery,\n fonts: type.fonts,\n colourMood: type.colour.mood,\n structure: type.structure,\n booking: type.booking,\n lookAdvice: type.avoid.filter(isLookRule).map(r => r.say),\n } : null,\n business: analysis.business,\n voice: analysis.voice,\n needs: analysis.needs,\n facts,\n missingFacts: analysis.missingFacts.map(key => ({ key, label: SITE_FACT_LABELS[key] })),\n moods: analysis.moods,\n hero: analysis.hero,\n locale: analysis.locale,\n design: opts.design ?? (opts.presetId ? presetChoices(opts.presetId) : null),\n sections: (type?.home ?? []).map(id => {\n const pattern = patternById(id);\n return { id, family: pattern?.family ?? FAMILY_OF.get(id) ?? id.split('.')[0], label: pattern?.label ?? null, composed: !!pattern };\n }),\n };\n}\n","import { HEBREW_PREFIXES } from '@vectoriox/iox-ui/generation-core';\n\nimport { BUSINESS_TYPES, BusinessType } from './business-types';\n\n/**\n * What Start reads from the owner's words BEFORE any model runs (AI plan rev 3 §3d step 0, N-D3): the kind of\n * business by the contract's own keywords (`BusinessType.match` — \"the no-model fallback\"), and the addresses\n * typed into the box (each becomes a \"style only\" reference chip, R1). Pure; the template path uses it today and\n * the reading stage (M1-1) checks the model against the same match.\n */\n\nconst escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst KEYWORD_RES = new Map<string, RegExp>();\n\n/** A keyword matches at the START of a word (so a stem — \"סדנ\", \"consult\" — matches its forms). */\nfunction keywordRe(keyword: string): RegExp {\n let re = KEYWORD_RES.get(keyword);\n if (!re) {\n re = new RegExp(`(^|[^\\\\p{L}\\\\p{N}])${HEBREW_PREFIXES}${escapeRe(keyword.toLocaleLowerCase())}`, 'u');\n KEYWORD_RES.set(keyword, re);\n }\n return re;\n}\n\nexport interface BusinessTypeMatch {\n id: string;\n /** The keywords found, in the type's order. */\n keywords: string[];\n /** The letters matched — longer, more specific keywords weigh more (\"barber\" over \"bar\"). */\n score: number;\n}\n\n/** The kind of business the words name, best first; empty when none of the keywords appears. Ties keep the board's order. */\nexport function matchBusinessTypes(text: string, types: ReadonlyArray<BusinessType> = BUSINESS_TYPES): BusinessTypeMatch[] {\n const words = (text ?? '').toLocaleLowerCase();\n if (!words.trim()) return [];\n return types\n .map((type, order) => {\n const keywords = type.match.filter(k => keywordRe(k).test(words));\n return { id: type.id, keywords, score: keywords.reduce((n, k) => n + k.length, 0), order };\n })\n .filter(m => m.score > 0)\n .sort((a, b) => b.score - a.score || a.order - b.order)\n .map(({ order, ...m }) => m);\n}\n\n/** The single best kind of business the words name, or null. */\nexport function matchBusinessType(text: string, types: ReadonlyArray<BusinessType> = BUSINESS_TYPES): string | null {\n return matchBusinessTypes(text, types)[0]?.id ?? null;\n}\n\n// A port stays with its host (\"staging.example:8080\"): dropping it would read a DIFFERENT site.\nconst ADDRESS_RE = /(?:https?:\\/\\/)?(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z]{2,}(?::\\d{1,5})?(?:\\/[^\\s<>\"']*)?/gi;\nconst TRAILING = /[.,;:!?)\\]}'\"״׳]+$/;\n\n/** An address as a chip shows it: no scheme, no `www.`, no trailing punctuation or slash, lower-case host. */\nexport function normalizeAddress(raw: string): string {\n const bare = raw.replace(TRAILING, '').replace(/^https?:\\/\\//i, '').replace(/^www\\./i, '').replace(/\\/+$/, '');\n const slash = bare.indexOf('/');\n return slash < 0 ? bare.toLowerCase() : bare.slice(0, slash).toLowerCase() + bare.slice(slash);\n}\n\n/** Every website address typed or pasted in the words (an http(s) address or a bare domain), once each, in\n * order. An email address is not a website. */\nexport function addressesIn(text: string): string[] {\n const found: string[] = [];\n for (const m of (text ?? '').matchAll(ADDRESS_RE)) {\n const before = m.index ? text[m.index - 1] : '';\n if (before === '@' || /[\\p{L}\\p{N}_-]/u.test(before)) continue;\n const address = normalizeAddress(m[0]);\n if (address && !found.includes(address)) found.push(address);\n }\n return found;\n}\n\n/** The words without one address (removing its chip): every spelling of it, and the space it leaves. */\nexport function withoutAddress(text: string, address: string): string {\n const out = (text ?? '').replace(ADDRESS_RE, (m, offset: number, whole: string) => {\n const before = offset ? whole[offset - 1] : '';\n if (before === '@' || /[\\p{L}\\p{N}_-]/u.test(before)) return m;\n return normalizeAddress(m) === address ? '' : m;\n });\n return out.replace(/[ \\t]{2,}/g, ' ').replace(/ +([.,;:!?])/g, '$1').trim();\n}\n","import { SITE_TEMPLATES, SiteTemplate, STUDIO_TEMPLATE } from '@vectoriox/iox-ui/generation-core';\n\nimport { businessTypeById, STRUCTURES, StructureId } from './business-types';\n\n/** The structure a kind of business is built from, and the template the wizard can build TODAY. */\nexport interface StructureChoice {\n /** The business type's own structure (Studio · Practice · Place). */\n structure: StructureId;\n /** The template that will be built. */\n template: SiteTemplate;\n /** The type's structure has no template yet (L0-4), so the Studio template stands in. */\n fallback: boolean;\n}\n\n/**\n * Which template the template path (and the plan stage) builds a kind of business from (AI plan rev 3 §3d,\n * N-D3): its structure's template when that one has shipped, else Studio — said, never silent. No type → Studio.\n */\nexport function structureFor(typeId: string | null | undefined): StructureChoice {\n const structure = (businessTypeById(typeId)?.structure ?? 'studio') as StructureId;\n const own = STRUCTURES[structure]?.shipped ? SITE_TEMPLATES[structure] : undefined;\n return { structure, template: own ?? STUDIO_TEMPLATE, fallback: !own };\n}\n","import { parseHexColor, rgbToOklab, toHexColor } from '@vectoriox/iox-ui/design-core';\n\nimport { StyleReadGround } from './rank';\n\n/**\n * The palette MEASURE (AI plan §3k, R-D2: a colour is measured, never asked of a model) — ONE function for every\n * reader: the browser measures a picture at upload (canvas pixels → `pixelSamples`), the server measures a picture it\n * reads and a website's CSS (declared colours, weighted by where they paint). Weighted samples in, ≤ 6 colours out,\n * by a deterministic median cut: the same input gives the same hexes on every run, in every runtime. Pure.\n */\n\n/** One colour seen, and how much of the reference it covers (pixels, or a CSS colour's weight). */\nexport interface ColourSample {\n /** 0–255 each. */\n r: number;\n g: number;\n b: number;\n weight: number;\n}\n\nexport interface PaletteColour {\n hex: string;\n /** Its part of the whole, 0–1; the palette's shares add up to 1. */\n share: number;\n}\n\nexport interface PaletteReading {\n palette: PaletteColour[];\n ground: `${StyleReadGround}`;\n /** The most frequent saturated colour — a CANDIDATE seed (the AA audit decides, `referenceSeed`). */\n brand?: string;\n}\n\n/** At most this many colours (the StyleRead's palette). */\nexport const PALETTE_SIZE = 6;\n/** Channels are bucketed to this many bits before the cut, so noise never decides a colour. */\nconst BUCKET_BITS = 5;\nconst BUCKET_SHIFT = 8 - BUCKET_BITS;\n/** The sampling ceiling for a picture — every n-th pixel, so a 12 MP photo costs what a thumbnail does. */\nexport const MAX_PIXEL_SAMPLES = 20_000;\n/** A pixel under this alpha is not part of the picture. */\nconst MIN_ALPHA = 128;\n\n/** OKLab lightness / chroma thresholds the reading speaks in. */\nexport const PALETTE_THRESHOLDS = {\n /** Above: a light colour. */\n light: 0.72,\n /** Below: a dark colour. */\n dark: 0.38,\n /** At least this share of light (or dark) makes the ground light (or dark); otherwise mixed. */\n groundShare: 0.55,\n /** A brand candidate is at least this colourful… */\n brandChroma: 0.08,\n /** …and neither near-white nor near-black. */\n brandMinL: 0.25,\n brandMaxL: 0.92,\n /** Two palette colours closer than this (OKLab distance) are one colour. */\n mergeDistance: 0.035,\n} as const;\n\n/** Every n-th opaque pixel of an RGBA buffer (canvas `ImageData.data`, a decoder's pixels), weight 1 each. */\nexport function pixelSamples(rgba: ArrayLike<number>, width: number, height: number, max = MAX_PIXEL_SAMPLES): ColourSample[] {\n const pixels = Math.max(0, Math.floor(width) * Math.floor(height));\n const step = Math.max(1, Math.ceil(pixels / max));\n const out: ColourSample[] = [];\n for (let p = 0; p < pixels; p += step) {\n const i = p * 4;\n if (rgba[i + 3] < MIN_ALPHA) continue;\n out.push({ r: rgba[i], g: rgba[i + 1], b: rgba[i + 2], weight: 1 });\n }\n return out;\n}\n\n/** A palette (hex + share) back to samples — what merging two readings measures. */\nexport function paletteSamples(palette: ReadonlyArray<PaletteColour>, weight = 1): ColourSample[] {\n return palette.flatMap(c => {\n const rgb = parseHexColor(c.hex);\n return rgb ? [{ r: Math.round(rgb.r * 255), g: Math.round(rgb.g * 255), b: Math.round(rgb.b * 255), weight: c.share * weight }] : [];\n });\n}\n\ntype Channel = 'r' | 'g' | 'b';\nconst CHANNELS: ReadonlyArray<Channel> = ['r', 'g', 'b'];\n\ninterface Box { colours: ColourSample[]; weight: number; }\n\nconst boxOf = (colours: ColourSample[]): Box => ({ colours, weight: colours.reduce((s, c) => s + c.weight, 0) });\n\nfunction range(box: Box, ch: Channel): number {\n let lo = 255;\n let hi = 0;\n for (const c of box.colours) { lo = Math.min(lo, c[ch]); hi = Math.max(hi, c[ch]); }\n return hi - lo;\n}\n\n/** The channel a box is widest in (ties: r, then g, then b). */\nfunction widest(box: Box): { ch: Channel; span: number } {\n return CHANNELS.reduce<{ ch: Channel; span: number }>((best, ch) => {\n const span = range(box, ch);\n return span > best.span ? { ch, span } : best;\n }, { ch: 'r', span: -1 });\n}\n\n/** Split at the weighted median of its widest channel (a stable sort, so ties never depend on the runtime). */\nfunction split(box: Box): [Box, Box] | null {\n const { ch, span } = widest(box);\n if (span <= 0 || box.colours.length < 2) return null;\n const sorted = [...box.colours].sort((a, b) => a[ch] - b[ch] || a.r - b.r || a.g - b.g || a.b - b.b);\n let acc = 0;\n let cut = 1;\n for (let i = 0; i < sorted.length - 1; i++) {\n acc += sorted[i].weight;\n cut = i + 1;\n if (acc >= box.weight / 2) break;\n }\n return [boxOf(sorted.slice(0, cut)), boxOf(sorted.slice(cut))];\n}\n\n/** Samples bucketed (BUCKET_BITS per channel), each bucket's weighted mean colour kept. */\nfunction bucket(samples: ReadonlyArray<ColourSample>): ColourSample[] {\n const buckets = new Map<number, { r: number; g: number; b: number; weight: number }>();\n for (const s of samples) {\n if (!(s.weight > 0)) continue;\n const key = ((s.r >> BUCKET_SHIFT) << (2 * BUCKET_BITS)) | ((s.g >> BUCKET_SHIFT) << BUCKET_BITS) | (s.b >> BUCKET_SHIFT);\n const b = buckets.get(key) ?? { r: 0, g: 0, b: 0, weight: 0 };\n b.r += s.r * s.weight; b.g += s.g * s.weight; b.b += s.b * s.weight; b.weight += s.weight;\n buckets.set(key, b);\n }\n return [...buckets.entries()].sort(([a], [b]) => a - b).map(([, b]) => ({ r: b.r / b.weight, g: b.g / b.weight, b: b.b / b.weight, weight: b.weight }));\n}\n\nfunction meanHex(box: Box): string {\n const sum = box.colours.reduce((s, c) => ({ r: s.r + c.r * c.weight, g: s.g + c.g * c.weight, b: s.b + c.b * c.weight }), { r: 0, g: 0, b: 0 });\n return toHexColor({ r: sum.r / box.weight / 255, g: sum.g / box.weight / 255, b: sum.b / box.weight / 255 }).toUpperCase();\n}\n\nconst oklabOf = (hex: string) => rgbToOklab(parseHexColor(hex)!);\nconst distance = (a: string, b: string) => { const x = oklabOf(a); const y = oklabOf(b); return Math.hypot(x.L - y.L, x.a - y.a, x.b - y.b); };\nconst SHARE_PRECISION = 1e4;\n\n/** Weighted samples → ≤ 6 colours, largest share first (ties by hex), shares adding up to 1. */\nexport function measurePalette(samples: ReadonlyArray<ColourSample>, size = PALETTE_SIZE): PaletteColour[] {\n const colours = bucket(samples);\n if (!colours.length) return [];\n let boxes: Box[] = [boxOf(colours)];\n while (boxes.length < size) {\n // The box to cut: the most weight × span (ties: the earlier box).\n let best = -1;\n let bestScore = 0;\n boxes.forEach((box, i) => {\n const score = box.weight * widest(box).span;\n if (score > bestScore) { best = i; bestScore = score; }\n });\n const halves = best >= 0 ? split(boxes[best]) : null;\n if (!halves) break;\n boxes = [...boxes.slice(0, best), ...halves, ...boxes.slice(best + 1)];\n }\n const total = boxes.reduce((s, b) => s + b.weight, 0);\n const merged: Array<{ hex: string; weight: number }> = [];\n for (const box of [...boxes].sort((a, b) => b.weight - a.weight)) {\n const hex = meanHex(box);\n const near = merged.find(m => distance(m.hex, hex) < PALETTE_THRESHOLDS.mergeDistance);\n if (near) near.weight += box.weight;\n else merged.push({ hex, weight: box.weight });\n }\n return merged\n .map(m => ({ hex: m.hex, share: Math.round((m.weight / total) * SHARE_PRECISION) / SHARE_PRECISION }))\n .sort((a, b) => b.share - a.share || a.hex.localeCompare(b.hex));\n}\n\n/** Light, dark or mixed: the share of the palette that is light (or dark). */\nexport function paletteGround(palette: ReadonlyArray<PaletteColour>): `${StyleReadGround}` {\n let light = 0;\n let dark = 0;\n for (const c of palette) {\n const { L } = oklabOf(c.hex);\n if (L >= PALETTE_THRESHOLDS.light) light += c.share;\n else if (L <= PALETTE_THRESHOLDS.dark) dark += c.share;\n }\n if (light >= PALETTE_THRESHOLDS.groundShare) return StyleReadGround.Light;\n if (dark >= PALETTE_THRESHOLDS.groundShare) return StyleReadGround.Dark;\n return StyleReadGround.Mixed;\n}\n\n/** The most frequent saturated colour that is neither near-white nor near-black, or undefined. */\nexport function paletteBrand(palette: ReadonlyArray<PaletteColour>): string | undefined {\n return palette.find(c => {\n const { L, a, b } = oklabOf(c.hex);\n return Math.hypot(a, b) >= PALETTE_THRESHOLDS.brandChroma && L >= PALETTE_THRESHOLDS.brandMinL && L <= PALETTE_THRESHOLDS.brandMaxL;\n })?.hex;\n}\n\n/** The whole reading of a set of samples: the palette, its ground, its brand candidate. */\nexport function readPalette(samples: ReadonlyArray<ColourSample>): PaletteReading {\n const palette = measurePalette(samples);\n const brand = paletteBrand(palette);\n return { palette, ground: paletteGround(palette), ...(brand ? { brand } : {}) };\n}\n","import { auditDesignContrast, designTokenRows, parseHexColor, presetChoices, resolveTokenValues, stylePresetById, wcagContrastRatio } from '@vectoriox/iox-ui/design-core';\nimport type { DesignChoices } from '@vectoriox/iox-ui/design-core';\n\nimport { StyleRead } from './rank';\n\n/**\n * Which brand colour a style starts from when the owner gave references (AI plan §3k, R4 \"the AA gate decides the\n * colour\"): the reading's measured `brand` — ONLY when the preset, worn in EVERY mode it offers with that colour as its\n * seed, passes the same contrast audit the contract gates every preset with (`auditDesignContrast`: every element\n * style in every section scheme, form parts, focus rings). Otherwise the preset's own seed stays and the reference\n * colour is a swatch the Colour tab marks \"doesn't pass contrast here\". The model never sees, picks or changes a hex.\n * Pure; the wizard (Design ▸ Colour) and the server (\"Build with these\") ask the same question.\n */\n\nexport interface ReferenceSeed {\n /** The seed to start from: the reference's when it passed, else the preset's. */\n seed: string;\n /** The reference colour measured, or null when there is none (no reading, nothing saturated). */\n reference: string | null;\n /** True when `seed` is the reference colour. */\n used: boolean;\n /** The modes the reference colour failed in (empty when used, or when there is no reference). */\n failsIn: Array<'light' | 'dark'>;\n /** Information only: the RAW reference colour against the style's page ground (its first mode); null without one. */\n rawRatio: number | null;\n}\n\n/** The raw colour's ratio against the preset's own page ground, in its first mode — shown, never decisive. */\nfunction rawRatioOf(presetId: string, hex: string): number | null {\n const preset = stylePresetById(presetId);\n const choices = preset ? presetChoices(preset.id, preset.modes[0]) : null;\n if (!preset || !choices) return null;\n const ground = resolveTokenValues(designTokenRows(choices), preset.modes[0])['page-bg'];\n return ground && parseHexColor(ground) ? Math.round(wcagContrastRatio(hex, ground) * 100) / 100 : null;\n}\n\n/** Every mode `presetId` offers passes the audit with `seed`. */\nexport function seedPassesPreset(presetId: string, seed: string): { passes: boolean; failsIn: Array<'light' | 'dark'> } {\n const preset = stylePresetById(presetId);\n if (!preset || !parseHexColor(seed)) return { passes: false, failsIn: [] };\n const failsIn = preset.modes.filter(mode => {\n const choices = presetChoices(preset.id, mode) as DesignChoices;\n return auditDesignContrast(designTokenRows({ ...choices, seed }), mode).some(f => !f.pass);\n });\n return { passes: failsIn.length === 0, failsIn: [...failsIn] };\n}\n\n/** The seed a preset starts from, given a reading (or none). Unknown preset → null. */\nexport function referenceSeed(read: Pick<StyleRead, 'brand'> | null | undefined, presetId: string): ReferenceSeed | null {\n const preset = stylePresetById(presetId);\n if (!preset) return null;\n const reference = read?.brand && parseHexColor(read.brand) ? read.brand : null;\n if (!reference) return { seed: preset.seed, reference: null, used: false, failsIn: [], rawRatio: null };\n const { passes, failsIn } = seedPassesPreset(preset.id, reference);\n const rawRatio = rawRatioOf(preset.id, reference);\n return passes ? { seed: reference, reference, used: true, failsIn: [], rawRatio } : { seed: preset.seed, reference, used: false, failsIn, rawRatio };\n}\n","import { DensityId, MOOD_IDS, MoodId, ShapeId, SPEC_AXES } from '@vectoriox/iox-ui/design-core';\nimport {\n isPlainObject, jsonListOf, jsonOneOf, JsonSchema, jsonShapedObject, jsonInteger, PathIssue, PathIssueCollector, pathAt, PlainObject, ShapeEntry,\n shapeKeys, requiredShapeKeys,\n} from '@vectoriox/iox-ui/generation-core';\n\nimport { paletteSamples, readPalette } from './palette';\nimport { StyleRead, StyleReadGround, StyleReadHeadings, StyleReadSourceKind } from './rank';\nimport { AnalysisIssue, analysisFromWire, MAX_ANALYSIS_MOODS, SiteAnalysis, siteAnalysisJsonSchema, validateSiteAnalysis } from './site-analysis';\n\n/**\n * The READING call (AI plan §3d step 1, §3k R2, M1-1): ONE `text.fast` call reads the owner's words AND the pictures\n * they attached (image input) and answers with the SiteAnalysis and — when there are pictures — which ones are the\n * owner's own (Your photos) and which are pictures they like (references, style only), plus what the liked pictures\n * FEEL like: moods, the lettering, corners, spacing. Never a colour: the palette is MEASURED (`palette.ts`, R-D2).\n * The format is built from `READING_SHAPE` (keys + their explanations), the gate reads the same table. Pure.\n */\n\n/** Which group a picture belongs to (R-D3: from the words; own when the words don't say). */\nexport enum PictureRole {\n Own = 'own',\n Reference = 'reference',\n}\n\n/** At most this many pictures go to the reading call as image input (§3d: \"up to 6 pictures\"). */\nexport const MAX_READ_PICTURES = 6;\n\nexport const READING_SHAPE: Readonly<Record<string, ShapeEntry>> = {\n reading: {\n analysis: 'analysis — the reading of the words',\n pictures: 'pictures — the pictures attached, in order',\n },\n pictures: {\n files: 'fileRole[] — one per attached picture, in the order given',\n style: 'pictureStyle — what the pictures the owner LIKES (role reference) feel like; empty moods when there are none',\n },\n fileRole: {\n index: 'integer — the picture, 0-based, in the order given',\n role: \"'own' | 'reference' — own: the owner's work, place, products or people, for the site; reference: a picture they like, for style only (\\\"a site like these\\\"); own when the words don't say\",\n },\n pictureStyle: {\n moods: 'string[] — ≤ 3 moods the liked pictures feel like',\n 'headings?': \"'serif' | 'sans' | 'display' | 'mono' — the lettering they show, when they show some\",\n 'shape?': 'string — design axes.shapes: their corners',\n 'density?': 'string — design axes.densities: how much room things have',\n },\n};\n\nexport interface PictureStyle {\n moods: MoodId[];\n headings?: `${StyleReadHeadings}`;\n shape?: ShapeId;\n density?: DensityId;\n}\n\nexport interface SiteReading {\n analysis: SiteAnalysis;\n /** Present when pictures were attached. */\n pictures?: { files: Array<{ index: number; role: `${PictureRole}` }>; style: PictureStyle };\n}\n\nexport const SITE_READING_SCHEMA_NAME = 'site_reading';\n\n/** The reading's format: the analysis alone when no picture was attached, else the analysis + the pictures. */\nexport function siteReadingJsonSchema(pictureCount: number): JsonSchema {\n if (pictureCount <= 0) return siteAnalysisJsonSchema();\n const fileRole = jsonShapedObject(READING_SHAPE['fileRole'], { index: jsonInteger(), role: jsonOneOf(Object.values(PictureRole)) }, 'fileRole');\n const style = jsonShapedObject(READING_SHAPE['pictureStyle'], {\n moods: jsonListOf(jsonOneOf(MOOD_IDS)),\n headings: jsonOneOf(Object.values(StyleReadHeadings)),\n shape: jsonOneOf(Object.keys(SPEC_AXES.shapes)),\n density: jsonOneOf(Object.keys(SPEC_AXES.densities)),\n }, 'pictureStyle');\n const pictures = jsonShapedObject(READING_SHAPE['pictures'], { files: jsonListOf(fileRole), style }, 'pictures');\n return jsonShapedObject(READING_SHAPE['reading'], { analysis: siteAnalysisJsonSchema(), pictures }, 'reading');\n}\n\nexport enum ReadingIssueCode {\n Shape = 'shape',\n UnknownKey = 'unknown-key',\n Duplicate = 'duplicate',\n InvalidValue = 'invalid-value',\n /** A picture named twice, or one left out. */\n Pictures = 'pictures',\n}\n\nexport type ReadingIssue = PathIssue<ReadingIssueCode> | AnalysisIssue;\n\nclass Collector extends PathIssueCollector<ReadingIssueCode> {\n constructor() {\n super('reading', { shape: ReadingIssueCode.Shape, unknownKey: ReadingIssueCode.UnknownKey, duplicate: ReadingIssueCode.Duplicate });\n }\n object(value: unknown, shape: string, path: string): PlainObject | null {\n if (!isPlainObject(value)) { this.add(ReadingIssueCode.Shape, path, 'must be an object'); return null; }\n this.keys(value, shapeKeys(READING_SHAPE[shape]), path);\n for (const key of requiredShapeKeys(READING_SHAPE[shape])) if (value[key] === undefined) this.add(ReadingIssueCode.Shape, pathAt(path, key), 'is required');\n return value;\n }\n oneOf(obj: PlainObject, key: string, allowed: ReadonlyArray<string>, path: string): void {\n const v = obj[key];\n if (v !== undefined && (typeof v !== 'string' || !allowed.includes(v))) this.add(ReadingIssueCode.InvalidValue, pathAt(path, key), `must be one of ${allowed.join(', ')}`);\n }\n}\n\n/** The pictures' part: every picture named once, a role each, moods from the closed list. */\nfunction validatePictures(c: Collector, raw: unknown, count: number): void {\n const pictures = c.object(raw, 'pictures', 'pictures');\n if (!pictures) return;\n const files = c.array(pictures, 'files', 'pictures');\n const seen = new Set<number>();\n files.forEach((f, i) => {\n const path = `pictures.files[${i}]`;\n const file = c.object(f, 'fileRole', path);\n if (!file) return;\n c.oneOf(file, 'role', Object.values(PictureRole), path);\n const index = file['index'];\n if (!Number.isInteger(index) || (index as number) < 0 || (index as number) >= count) c.add(ReadingIssueCode.Pictures, `${path}.index`, `must be a picture 0–${count - 1}`);\n else if (seen.has(index as number)) c.add(ReadingIssueCode.Pictures, `${path}.index`, `picture ${index} is named twice`);\n else seen.add(index as number);\n });\n if (Array.isArray(pictures['files']) && seen.size !== count) c.add(ReadingIssueCode.Pictures, 'pictures.files', `name each of the ${count} pictures once`);\n const style = c.object(pictures['style'], 'pictureStyle', 'pictures.style');\n if (!style) return;\n const moods = c.array(style, 'moods', 'pictures.style');\n if (moods.length > MAX_ANALYSIS_MOODS) c.add(ReadingIssueCode.InvalidValue, 'pictures.style.moods', `at most ${MAX_ANALYSIS_MOODS}`);\n moods.forEach((m, i) => { if (!(MOOD_IDS as ReadonlyArray<unknown>).includes(m)) c.add(ReadingIssueCode.InvalidValue, `pictures.style.moods[${i}]`, `\"${String(m)}\" is not a mood`); });\n c.oneOf(style, 'headings', Object.values(StyleReadHeadings), 'pictures.style');\n c.oneOf(style, 'shape', Object.keys(SPEC_AXES.shapes), 'pictures.style');\n c.oneOf(style, 'density', Object.keys(SPEC_AXES.densities), 'pictures.style');\n}\n\n/** The analysis on the wire, judged as the document it becomes: the wire's own faults, then `validateSiteAnalysis`'s. */\nfunction analysisIssues(wire: unknown, prompt: string): AnalysisIssue[] {\n const read = analysisFromWire(wire);\n return [...read.issues, ...validateSiteAnalysis(read.analysis, { prompt }).issues];\n}\n\n/** The reading's gate: the analysis by `validateSiteAnalysis` (paths under `analysis.` when pictures came too), the pictures by `READING_SHAPE`. */\nexport function validateSiteReading(value: unknown, ctx: { prompt: string; pictureCount: number }): { valid: boolean; issues: ReadingIssue[] } {\n if (ctx.pictureCount <= 0) {\n const issues = analysisIssues(value, ctx.prompt);\n return { valid: issues.length === 0, issues };\n }\n const c = new Collector();\n const reading = c.object(value, 'reading', '');\n if (!reading) return { valid: false, issues: c.issues };\n const issues: ReadingIssue[] = analysisIssues(reading['analysis'], ctx.prompt).map(i => ({ ...i, path: pathAt('analysis', i.path) }));\n validatePictures(c, reading['pictures'], ctx.pictureCount);\n issues.push(...c.issues);\n return { valid: issues.length === 0, issues };\n}\n\n/** A valid reading's answer → `SiteReading` (the analysis alone answers `{ analysis }`; the facts made a map again). */\nexport function decodeSiteReading(value: unknown, pictureCount: number): SiteReading {\n if (pictureCount <= 0) return { analysis: analysisFromWire(value).analysis as SiteAnalysis };\n const reading = value as SiteReading;\n return { ...reading, analysis: analysisFromWire(reading.analysis).analysis as SiteAnalysis };\n}\n\n// ── Readings → ONE StyleRead ───────────────────────────────────────────────────────────────────────────\n\n/** A reference picture as the server read it: its measured palette (and where it is). */\nexport interface MeasuredPicture {\n ref: string;\n palette: StyleRead['palette'];\n}\n\n/** The liked pictures as a StyleRead: their palettes measured together, what the model saw of them. */\nexport function pictureStyleRead(pictures: ReadonlyArray<MeasuredPicture>, style: PictureStyle | null | undefined): StyleRead | null {\n if (!pictures.length) return null;\n const reading = readPalette(pictures.flatMap(p => paletteSamples(p.palette)));\n return {\n sources: pictures.map(p => ({ kind: StyleReadSourceKind.Image, ref: p.ref })),\n palette: reading.palette,\n ...(reading.brand ? { brand: reading.brand } : {}),\n ground: reading.ground,\n moods: [...(style?.moods ?? [])].slice(0, MAX_ANALYSIS_MOODS),\n ...(style?.headings ? { headings: style.headings } : {}),\n ...(style?.shape ? { shape: style.shape } : {}),\n ...(style?.density ? { density: style.density } : {}),\n };\n}\n\n/** The most frequent defined value (ties: the first reading's). */\nfunction mostCommon<T>(values: ReadonlyArray<T | undefined>): T | undefined {\n const counts = new Map<T, number>();\n for (const v of values) if (v !== undefined) counts.set(v, (counts.get(v) ?? 0) + 1);\n let best: T | undefined;\n let n = 0;\n for (const [v, k] of counts) if (k > n) { best = v; n = k; }\n return best;\n}\n\n/**\n * Every reading of one generation (the pictures', each site's) → ONE StyleRead: palettes measured together (each\n * reading weighs the same), the ground re-read from that palette, moods by how often they were seen (≤ 3), the rest the\n * most common answer. Null when nothing was read.\n */\nexport function mergeStyleReads(reads: ReadonlyArray<StyleRead | null | undefined>): StyleRead | null {\n const all = reads.filter((r): r is StyleRead => !!r);\n if (!all.length) return null;\n if (all.length === 1) return all[0];\n const reading = readPalette(all.flatMap(r => paletteSamples(r.palette)));\n const moodCount = new Map<MoodId, number>();\n all.forEach(r => r.moods.forEach(m => moodCount.set(m, (moodCount.get(m) ?? 0) + 1)));\n const moods = [...moodCount.entries()].sort((a, b) => b[1] - a[1]).map(([m]) => m).slice(0, MAX_ANALYSIS_MOODS);\n const pick = <K extends keyof StyleRead>(key: K) => mostCommon(all.map(r => r[key]));\n const headings = pick('headings');\n const shape = pick('shape');\n const density = pick('density');\n const motion = pick('motion');\n return {\n sources: all.flatMap(r => r.sources),\n palette: reading.palette,\n ...(reading.brand ? { brand: reading.brand } : {}),\n ground: reading.palette.length ? reading.ground : StyleReadGround.Mixed,\n moods,\n ...(headings ? { headings } : {}),\n ...(shape ? { shape } : {}),\n ...(density ? { density } : {}),\n ...(motion ? { motion } : {}),\n } as StyleRead;\n}\n","import type { DesignChoices } from '@vectoriox/iox-ui/design-core';\nimport type { AiGenerationStage, AiStep, PlanChange, PlanEdit, SitePlan } from '@vectoriox/iox-ui/generation-core';\n\nimport type { StyleRead } from './rank';\nimport type { SiteAnalysis } from './site-analysis';\nimport type { PictureRole } from './site-reading';\n\n/**\n * A generation as the screens read it (AI plan \"M1 pipeline — the screens contract\"): what iox-cms's\n * `GET …/ai/generations/:id` answers and the Thinking · Analysis · Design · Plan · Build screens render. ONE\n * definition: iox-cms builds it, cms-client types its client with it. Types and enums only — no transport.\n */\n\n/** Where one reader is (Thinking's three lines). */\nexport enum ReaderState {\n Wait = 'wait',\n Run = 'run',\n Done = 'done',\n /** Nothing to read (no pictures, no address). */\n Skipped = 'skipped',\n /** Refused on purpose (robots.txt, a private address…) — said in one plain line, never blocks the reading. */\n Refused = 'refused',\n Failed = 'failed',\n}\n\n/** Why a website address was not read (the screens' i18n `ai.siteRead.<reason>`). */\nexport enum SiteReadRefusal {\n /** robots.txt disallows our user agent (`IOX-Import`). */\n Robots = 'robots',\n InvalidAddress = 'invalid-address',\n PrivateAddress = 'private-address',\n Unreachable = 'unreachable',\n Timeout = 'timeout',\n TooLarge = 'too-large',\n NotHtml = 'not-html',\n HttpError = 'http-error',\n TooManyRedirects = 'redirects',\n}\n\n/** What a sentence in the Plan prompt box did. */\nexport enum PlanChangeOutcome {\n Applied = 'applied',\n /** The closed operations cannot say it — one line, the map unchanged (the call still cost). */\n Cannot = 'cannot',\n /** Its edits did not make a valid plan, twice — the map unchanged. */\n Invalid = 'invalid',\n}\n\nexport interface GenerationFileView {\n key: string;\n url: string;\n role: `${PictureRole}`;\n}\n\nexport interface SiteReaderView {\n address: string;\n state: `${ReaderState}`;\n reason?: `${SiteReadRefusal}`;\n}\n\nexport interface GenerationReadersView {\n words: { state: `${ReaderState}` };\n pictures: { state: `${ReaderState}`; count: number };\n site: { state: `${ReaderState}`; addresses: SiteReaderView[] };\n}\n\nexport interface PlanRevisionView {\n plan: SitePlan;\n at: string;\n sentence?: string;\n edits?: PlanEdit[];\n changed?: PlanChange[];\n}\n\nexport interface AiGenerationView {\n _id: string;\n organization: string;\n stage: `${AiGenerationStage}`;\n /** The model step the runner is working on; null = the owner's move. */\n task: `${AiStep}` | null;\n intake: { prompt: string; files: GenerationFileView[]; addresses: string[]; auto: boolean };\n readers: GenerationReadersView;\n reads: { analysis?: { value: SiteAnalysis; model: string; usageIds: string[] }; style?: StyleRead | null };\n /** What Design and Plan use: the owner's edit, else the reading. */\n analysis: SiteAnalysis | null;\n analysisRevision: number;\n design?: { presetId?: string; design: DesignChoices; auto?: boolean };\n plan?: {\n revisions: PlanRevisionView[];\n model: string;\n lastChange?: { sentence: string; outcome: `${PlanChangeOutcome}`; message?: string; at: string };\n };\n siteBuildId?: string;\n models: Partial<Record<`${AiStep}`, string>>;\n estimate: number;\n cap: number;\n /** Derived from the ledger — the running credit total. */\n spent: number;\n error?: { code: string; detail: string; providerMessage?: string; issues?: Array<{ code: string; path: string }> };\n}\n\n/** `POST …/ai/generations`. */\nexport interface GenerationStartRequest {\n prompt: string;\n files?: Array<{ key: string; role?: `${PictureRole}` }>;\n addresses?: string[];\n}\n\n/** The longest message, the most files and addresses a generation starts from (Start's limits). */\nexport const GENERATION_LIMITS = {\n promptChars: 4_000,\n files: 12,\n addresses: 3,\n sentenceChars: 500,\n} as const;\n","import { DesignChoices, presetChoices } from '@vectoriox/iox-ui/design-core';\n\nimport { motionFor, MotionInput } from './motion';\nimport { RankInput, rankWithReferences, StyleRead } from './rank';\nimport { referenceSeed } from './reference-colour';\n\n/**\n * The look a business STARTS from (AI plan §3d \"Build with these\", §3o, MO-D3) — ONE rule for the wizard's Design step\n * (a Look pick) and the server's \"Build with these\": the preset at its defaults, Scrolling · How animated · Between\n * pages started from the kind of business (and the references), the owner's own Motion choices kept, and — given\n * references — the best-ranked style with the reference colour as its seed when that colour passes AA in every mode\n * the style offers (`referenceSeed`). Pure.\n */\n\n/**\n * A preset for this business: its choices, Motion from the business (`motionFor`), the references' colour as its seed\n * when that colour passes AA in every mode the preset offers (`referenceSeed` — judged as used), and what the owner\n * already set kept. The ONE rule for a Look pick and for Build with these.\n */\nexport function presetDesign(\n presetId: string,\n input: MotionInput | string | null,\n kept: Partial<Pick<DesignChoices, 'scroll' | 'animate' | 'between' | 'motion'>> = {},\n read: StyleRead | null = null,\n): DesignChoices | null {\n const base = presetChoices(presetId);\n if (!base) return null;\n const motionInput: MotionInput = typeof input === 'object' && input !== null ? input : { businessType: input as string | null };\n const start = motionFor(motionInput, presetId, read);\n const seed = referenceSeed(read, presetId);\n return { ...base, ...(seed?.used ? { seed: seed.seed } : {}), scroll: start.scroll, animate: start.animate, between: start.between, ...kept };\n}\n\nexport interface StartingDesign {\n presetId: string;\n design: DesignChoices;\n /** The reference colour was used as the seed (it passed AA in every mode the style offers). */\n referenceColour: boolean;\n}\n\n/** The look a business starts from: its best-ranked style (with the references' boost), at its defaults. */\nexport function startingDesign(input: (RankInput & MotionInput) | string | null, read: StyleRead | null = null): StartingDesign | null {\n const rankInput: RankInput & MotionInput = typeof input === 'object' && input !== null ? input : { businessType: input as string | null };\n const top = rankWithReferences(rankInput, read)[0];\n const design = top ? presetDesign(top.id, rankInput, {}, read) : null;\n if (!top || !design) return null;\n return { presetId: top.id, design, referenceColour: !!referenceSeed(read, top.id)?.used };\n}\n","/**\n * @vectoriox/iox-ui/harness-core — the design HARNESS (AI plan rev 3 §3f, decision N18), FRAMEWORK-FREE: the 30\n * kinds of business and their rules (generated 1:1 from iox-ai-guidance `flavor-spec.v1.json` `harness`), the\n * `SiteAnalysis` gate, what a site needs, the style ranking (+ references), where Motion starts, the design\n * lint and what the plan prompt is given. Pure: no transport, no clock, no randomness. Consumed by iox-cms (the\n * AI pipeline), the wizard and the boards. Depends on design-core and generation-core; neither depends on it.\n * ⚠️ Consumers wire the usual trio — ng-package raw-ts assets, jest moduleNameMapper, tsconfig paths — or\n * `nest start` dies with ERR_REQUIRE_ESM while jest and build both pass.\n */\nexport * from './harness-spec.generated';\nexport * from './business-types';\nexport * from './look';\nexport * from './rank';\nexport * from './motion';\nexport * from './needs';\nexport * from './lint';\nexport * from './site-analysis';\nexport * from './prompt-context';\nexport * from './intake';\nexport * from './structure';\nexport * from './palette';\nexport * from './reference-colour';\nexport * from './site-reading';\nexport * from './generation-view';\nexport * from './starting-design';\nexport * from './site-audit-view';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Collector"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vectoriox-iox-ui-harness-core.mjs","sources":["../../../projects/iox-ui/src/harness-core/harness-spec.generated.ts","../../../projects/iox-ui/src/harness-core/business-types.ts","../../../projects/iox-ui/src/harness-core/look.ts","../../../projects/iox-ui/src/harness-core/needs.ts","../../../projects/iox-ui/src/harness-core/site-analysis.ts","../../../projects/iox-ui/src/harness-core/rank.ts","../../../projects/iox-ui/src/harness-core/motion.ts","../../../projects/iox-ui/src/harness-core/lint.ts","../../../projects/iox-ui/src/harness-core/prompt-context.ts","../../../projects/iox-ui/src/harness-core/intake.ts","../../../projects/iox-ui/src/harness-core/structure.ts","../../../projects/iox-ui/src/harness-core/palette.ts","../../../projects/iox-ui/src/harness-core/reference-colour.ts","../../../projects/iox-ui/src/harness-core/site-reading.ts","../../../projects/iox-ui/src/harness-core/generation-view.ts","../../../projects/iox-ui/src/harness-core/starting-design.ts","../../../projects/iox-ui/src/harness-core/public-api.ts","../../../projects/iox-ui/src/harness-core/vectoriox-iox-ui-harness-core.ts"],"sourcesContent":["// GENERATED from iox-ai-guidance flavor-spec.v1.json — do not edit; re-run scripts/gen-flavor-spec.mjs\n// (npm run gen:flavor-spec). The JSON is itself generated by iox-ai-guidance\n// architecture/builder/design-system/build-spec.mjs: change a value THERE, then regenerate both.\n/* eslint-disable */\nexport const SPEC_HARNESS_SOURCE = {\n \"repo\": \"nextlevelbuilder/ui-ux-pro-max-skill\",\n \"sha\": \"d14efff8ed1faa4187f004f79926f428c8074ec7\",\n \"date\": \"2026-10-23\",\n \"licence\": \"MIT — Copyright (c) 2024 Next Level Builder\",\n \"notice\": \"Business-type rules adapted from UI UX Pro Max (MIT, Copyright (c) 2024 Next Level Builder).\"\n} as const;\n\nexport const SPEC_NEEDS = {\n \"collection\": {\n \"label\": \"Your work or products\",\n \"archetype\": \"collection\"\n },\n \"detail\": {\n \"label\": \"A page for each item\",\n \"archetype\": \"detail\"\n },\n \"services\": {\n \"label\": \"Services\",\n \"archetype\": \"services\"\n },\n \"prices\": {\n \"label\": \"Prices\",\n \"archetype\": \"services\"\n },\n \"menu\": {\n \"label\": \"Menu\",\n \"archetype\": \"collection\"\n },\n \"visit\": {\n \"label\": \"Hours and how to find you\",\n \"archetype\": \"contact\"\n },\n \"team\": {\n \"label\": \"The team\",\n \"archetype\": \"about\"\n },\n \"about\": {\n \"label\": \"About you\",\n \"archetype\": \"about\"\n },\n \"faq\": {\n \"label\": \"Questions people ask\",\n \"archetype\": \"about\"\n },\n \"blog\": {\n \"label\": \"News or a journal\",\n \"archetype\": \"collection\"\n },\n \"gallery\": {\n \"label\": \"A gallery\",\n \"archetype\": \"collection\"\n },\n \"booking-request\": {\n \"label\": \"A booking request form\",\n \"archetype\": \"contact\"\n },\n \"sign-up-form\": {\n \"label\": \"A sign-up form\",\n \"archetype\": \"contact\"\n },\n \"contact\": {\n \"label\": \"Contact\",\n \"archetype\": \"contact\"\n }\n} as const;\n\nexport const SPEC_USER_AVOIDS = {\n \"dark-pages\": {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"You asked for no dark backgrounds.\"\n },\n \"loud-colour\": {\n \"when\": {\n \"moods\": [\n \"bold\",\n \"energetic\"\n ]\n },\n \"say\": \"You asked for nothing loud.\"\n },\n \"lots-of-motion\": {\n \"when\": {\n \"motion\": [\n \"snappy\",\n \"lively\"\n ]\n },\n \"say\": \"You asked for little movement.\"\n },\n \"too-cute\": {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"You asked for nothing cute or childish.\"\n },\n \"too-corporate\": {\n \"when\": {\n \"moods\": [\n \"trustworthy\",\n \"technical\"\n ]\n },\n \"say\": \"You asked for nothing corporate.\"\n }\n} as const;\n\nexport const SPEC_STRUCTURES = {\n \"studio\": {\n \"label\": \"Studio\",\n \"blurb\": \"Your work, what you do, and a way to reach you.\",\n \"pages\": [\n \"Home\",\n \"Work\",\n \"Project (one per project)\",\n \"About\",\n \"Contact\"\n ],\n \"shipped\": true\n },\n \"practice\": {\n \"label\": \"Practice\",\n \"blurb\": \"Services, prices and a clear way to book.\",\n \"pages\": [\n \"Home\",\n \"Services\",\n \"Prices\",\n \"About\",\n \"Contact\"\n ],\n \"shipped\": true\n },\n \"place\": {\n \"label\": \"Place\",\n \"blurb\": \"A menu, opening hours and how to find you.\",\n \"pages\": [\n \"Home\",\n \"Menu\",\n \"Visit (hours and address)\",\n \"About\",\n \"Contact\"\n ],\n \"shipped\": true\n }\n} as const;\n\nexport const SPEC_BUSINESS_TYPES = [\n {\n \"id\": \"photographer\",\n \"label\": \"Photographer\",\n \"he\": \"צלם/ת\",\n \"group\": \"Creative work\",\n \"uupm\": \"53 Photography Studio\",\n \"match\": [\n \"photographer\",\n \"photography\",\n \"photo studio\",\n \"צלם\",\n \"צילום\"\n ],\n \"good\": [\n {\n \"preset\": \"night-gallery\",\n \"reason\": \"Pictures sit on black, as in a darkened gallery.\",\n \"reasonHe\": \"התמונות יושבות על שחור, כמו בגלריה חשוכה.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"White space and a quiet serif keep every eye on the photos.\",\n \"reasonHe\": \"מרחב לבן וסריף שקט משאירים את כל תשומת הלב על התמונות.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Soft grey glass frames the pictures without competing.\",\n \"reasonHe\": \"זכוכית אפורה ורכה ממסגרת את התמונות בלי להתחרות בהן.\"\n },\n {\n \"preset\": \"swiss-grid\",\n \"reason\": \"A strict grid lines your photos up like contact sheets.\",\n \"reasonHe\": \"גריד קפדני מסדר את התמונות כמו גיליון קונטקט.\"\n }\n ],\n \"colour\": {\n \"mood\": \"black, white and one quiet accent\",\n \"swatches\": [\n \"#18181B\",\n \"#3F4A5A\",\n \"#8B9BB4\"\n ]\n },\n \"fonts\": \"elegant and minimal\",\n \"tone\": \"Few words. Let the pictures speak; one line per project.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"subtle\",\n \"between\": \"cinematic\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Your own photos only, large and uncropped; never stock.\",\n \"pages\": [\n \"home\",\n \"work (collection)\",\n \"project (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.masonry-gallery\",\n \"proof.testimonial-single\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Loud colour and bouncy shapes fight the photos for attention.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n },\n {\n \"check\": \"copy-length\",\n \"max\": \"standard\",\n \"say\": \"Heavy text buries the pictures.\"\n }\n ],\n \"words\": [\n \"capturing memories\",\n \"stunning\",\n \"passionate\"\n ],\n \"structure\": \"studio\",\n \"slice\": true,\n \"stock\": false,\n \"booking\": \"sometimes\"\n },\n {\n \"id\": \"interior-design\",\n \"label\": \"Interior designer\",\n \"he\": \"מעצב/ת פנים\",\n \"group\": \"Creative work\",\n \"uupm\": \"161 Home Decoration & Interior Design · 84 Architecture / Interior\",\n \"match\": [\n \"interior\",\n \"interiors\",\n \"עיצוב פנים\",\n \"decor\"\n ],\n \"good\": [\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Calm white rooms let the materials show.\",\n \"reasonHe\": \"חללים לבנים ורגועים נותנים לחומרים לבלוט.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Warm bronze says considered and high-end.\",\n \"reasonHe\": \"ברונזה חמה אומרת: מוקפד ויוקרתי.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Reads like a design magazine feature about your rooms.\",\n \"reasonHe\": \"נקרא כמו כתבה במגזין עיצוב על החללים שלכם.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Light, airy panels around big project photos.\",\n \"reasonHe\": \"משטחים בהירים ואווריריים סביב תמונות פרויקט גדולות.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm neutrals with one material accent\",\n \"swatches\": [\n \"#7A5B36\",\n \"#78716C\",\n \"#5E6B3A\"\n ]\n },\n \"fonts\": \"architectural and elegant\",\n \"tone\": \"Calm and specific: materials, light, the brief.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"subtle\",\n \"between\": \"cinematic\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Wide, bright room shots; details of materials.\",\n \"pages\": [\n \"home\",\n \"projects (collection)\",\n \"project (detail)\",\n \"services\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"services\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"feature.triad\",\n \"proof.testimonial-carousel\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful shapes cheapen a portfolio of finished rooms.\"\n },\n {\n \"when\": {\n \"density\": [\n \"compact\"\n ]\n },\n \"say\": \"A cramped page is the opposite of a well-designed room.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n }\n ],\n \"words\": [\n \"dream home\",\n \"luxurious\",\n \"stunning\"\n ],\n \"structure\": \"studio\",\n \"slice\": true,\n \"stock\": false,\n \"booking\": \"none\"\n },\n {\n \"id\": \"architecture\",\n \"label\": \"Architect\",\n \"he\": \"אדריכל/ית\",\n \"group\": \"Creative work\",\n \"uupm\": \"84 Architecture / Interior · 51 Construction/Architecture\",\n \"match\": [\n \"architect\",\n \"architecture\",\n \"אדריכל\"\n ],\n \"good\": [\n {\n \"preset\": \"swiss-grid\",\n \"reason\": \"A strict grid and clean type, like a drawing set.\",\n \"reasonHe\": \"גריד קפדני וטיפוגרפיה נקייה, כמו סט שרטוטים.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Big images and generous margins, like a monograph.\",\n \"reasonHe\": \"תמונות גדולות ושוליים נדיבים, כמו מונוגרפיה.\"\n },\n {\n \"preset\": \"night-gallery\",\n \"reason\": \"Buildings at dusk on a dark page.\",\n \"reasonHe\": \"בניינים בשעת דמדומים על דף כהה.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Soft glass over large project photos.\",\n \"reasonHe\": \"זכוכית רכה מעל תמונות פרויקט גדולות.\"\n }\n ],\n \"colour\": {\n \"mood\": \"monochrome and one accent\",\n \"swatches\": [\n \"#171717\",\n \"#3F4A5A\",\n \"#A16207\"\n ]\n },\n \"fonts\": \"architectural, precise\",\n \"tone\": \"Precise and brief: the project, the place, the year.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Large project photos and drawings.\",\n \"pages\": [\n \"home\",\n \"projects (collection)\",\n \"project (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.card-grid\",\n \"story.quote-break\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful shapes undercut the precision clients pay for.\"\n },\n {\n \"check\": \"brand-hue\",\n \"from\": 270,\n \"to\": 335,\n \"minChroma\": 0.12,\n \"say\": \"A purple-pink brand is the colour of AI tools right now; on this kind of site it can read as generic.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n }\n ],\n \"words\": [\n \"iconic\",\n \"world-class\",\n \"cutting-edge\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"none\"\n },\n {\n \"id\": \"creative-studio\",\n \"label\": \"Design or branding studio\",\n \"he\": \"סטודיו לעיצוב\",\n \"group\": \"Creative work\",\n \"uupm\": \"10 Creative Agency\",\n \"match\": [\n \"design studio\",\n \"branding\",\n \"agency\",\n \"graphic design\",\n \"סטודיו לעיצוב\",\n \"מיתוג\"\n ],\n \"good\": [\n {\n \"preset\": \"zine\",\n \"reason\": \"Shows you take risks with type and colour.\",\n \"reasonHe\": \"מראה שאתם לא מפחדים להעז בטיפוגרפיה ובצבע.\"\n },\n {\n \"preset\": \"tech-studio\",\n \"reason\": \"Dark and exact, for digital work.\",\n \"reasonHe\": \"כהה ומדויק, לעבודה דיגיטלית.\"\n },\n {\n \"preset\": \"bold-maker\",\n \"reason\": \"Loud outlines that clients remember.\",\n \"reasonHe\": \"קווי מתאר בולטים שלקוחות זוכרים.\"\n },\n {\n \"preset\": \"swiss-grid\",\n \"reason\": \"Confident, classic design-studio grid.\",\n \"reasonHe\": \"גריד בטוח וקלאסי של סטודיו לעיצוב.\"\n }\n ],\n \"colour\": {\n \"mood\": \"bold primaries, artistic freedom\",\n \"swatches\": [\n \"#3D5AFE\",\n \"#FF5C39\",\n \"#111827\"\n ]\n },\n \"fonts\": \"bold and expressive\",\n \"tone\": \"Confident, short, a little witty.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"expressive\",\n \"between\": \"slide\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Case-study images of your own work.\",\n \"pages\": [\n \"home\",\n \"work (collection)\",\n \"case study (detail)\",\n \"services\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"services\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.stacked-editorial\",\n \"collection.card-grid\",\n \"feature.triad\",\n \"proof.logo-strip\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"no-pattern\",\n \"pattern\": \"pricing.tiers\",\n \"say\": \"Studios that sell projects rarely list fixed prices; a price table can undersell you.\"\n }\n ],\n \"words\": [\n \"synergy\",\n \"cutting-edge\",\n \"solutions\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"none\"\n },\n {\n \"id\": \"artist\",\n \"label\": \"Artist or illustrator\",\n \"he\": \"אמן/ית\",\n \"group\": \"Creative work\",\n \"uupm\": \"11 Portfolio/Personal · Museum/Gallery\",\n \"match\": [\n \"artist\",\n \"painter\",\n \"illustrator\",\n \"אמנית\",\n \"אמן\",\n \"ציור\",\n \"איור\"\n ],\n \"good\": [\n {\n \"preset\": \"zine\",\n \"reason\": \"Hand-made energy that suits an illustrator.\",\n \"reasonHe\": \"אנרגיה של עבודת יד שמתאימה למאיירים.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"A white-cube gallery for your pieces.\",\n \"reasonHe\": \"גלריה לבנה ונקייה ליצירות שלכם.\"\n },\n {\n \"preset\": \"night-gallery\",\n \"reason\": \"Work glowing on a dark wall.\",\n \"reasonHe\": \"היצירות זוהרות על קיר כהה.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Like a catalogue from a small gallery.\",\n \"reasonHe\": \"כמו קטלוג של גלריה קטנה.\"\n }\n ],\n \"colour\": {\n \"mood\": \"your work's own palette; a neutral page\",\n \"swatches\": [\n \"#3D5AFE\",\n \"#3F4A5A\",\n \"#9A4F2B\"\n ]\n },\n \"fonts\": \"expressive\",\n \"tone\": \"Personal, first person, short.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Your pieces, photographed flat and true to colour.\",\n \"pages\": [\n \"home\",\n \"works (collection)\",\n \"work (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.masonry-gallery\",\n \"about.story\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"trustworthy\"\n ],\n \"flavor\": [\n \"crisp\"\n ]\n },\n \"say\": \"A corporate look makes an artist look like a firm.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"unique\",\n \"passionate\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"none\"\n },\n {\n \"id\": \"makers\",\n \"label\": \"Ceramics, crafts and makers\",\n \"he\": \"קרמיקה ויוצרים\",\n \"group\": \"Creative work\",\n \"uupm\": \"no row — nearest: Nature Distilled, Anti-Polish styles; Indie/Craft pairing\",\n \"match\": [\n \"ceramic\",\n \"ceramics\",\n \"pottery\",\n \"stoneware\",\n \"handmade\",\n \"crafts\",\n \"maker\",\n \"workshop\",\n \"קרמיקה\",\n \"כלי חרס\",\n \"עבודת יד\",\n \"סדנ\"\n ],\n \"good\": [\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Cream and terracotta echo clay; a serif with a hand-made feel.\",\n \"reasonHe\": \"שמנת וטרקוטה מהדהדים את החימר; סריף עם תחושה של עבודת יד.\"\n },\n {\n \"preset\": \"bold-maker\",\n \"reason\": \"Proud, chunky outlines for a maker with a voice.\",\n \"reasonHe\": \"קווי מתאר עבים וגאים ליוצרים עם קול משלהם.\"\n },\n {\n \"preset\": \"corner-cafe\",\n \"reason\": \"Friendly and round for workshops and classes.\",\n \"reasonHe\": \"ידידותי ועגול, לסדנאות ולחוגים.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Pieces shown like objects in a gallery.\",\n \"reasonHe\": \"העבודות מוצגות כמו חפצים בגלריה.\"\n }\n ],\n \"colour\": {\n \"mood\": \"earth, clay and glaze\",\n \"swatches\": [\n \"#9A4F2B\",\n \"#5E6B3A\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"warm, hand-made\",\n \"tone\": \"Warm and plain; how it is made, who makes it.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"expressive\",\n \"between\": \"slide\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Your pieces and hands at work; natural light.\",\n \"pages\": [\n \"home\",\n \"pieces (collection)\",\n \"piece (detail)\",\n \"workshops\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"feature.triad\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"A cold, technical look hides the hand that made the work.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"perfect\",\n \"premium quality\",\n \"mass-produced\"\n ],\n \"structure\": \"studio\",\n \"slice\": true,\n \"stock\": false,\n \"booking\": \"sometimes\"\n },\n {\n \"id\": \"jewellery\",\n \"label\": \"Jewellery\",\n \"he\": \"תכשיטים\",\n \"group\": \"Creative work\",\n \"uupm\": \"33 Luxury/Premium Brand · 4 E-commerce Luxury\",\n \"match\": [\n \"jewel\",\n \"jewellery\",\n \"jewelry\",\n \"rings\",\n \"תכשיט\"\n ],\n \"good\": [\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Bronze and serif: precious without shouting.\",\n \"reasonHe\": \"ברונזה וסריף: יקר ערך בלי לצעוק.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Each piece alone on white, like a vitrine.\",\n \"reasonHe\": \"כל תכשיט לבד על לבן, כמו בוויטרינה.\"\n },\n {\n \"preset\": \"night-gallery\",\n \"reason\": \"Metal and stones shine on black.\",\n \"reasonHe\": \"מתכת ואבנים מנצנצות על שחור.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Soft glass, clean and premium.\",\n \"reasonHe\": \"זכוכית רכה, נקי ויוקרתי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"black, gold, white\",\n \"swatches\": [\n \"#7A5B36\",\n \"#1C1917\",\n \"#3F4A5A\"\n ]\n },\n \"fonts\": \"elegant, refined\",\n \"tone\": \"Few, exact words: the metal, the stone, the making.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"subtle\",\n \"between\": \"cinematic\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Close-ups on a plain ground.\",\n \"pages\": [\n \"home\",\n \"collection\",\n \"piece (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"about.story\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful colours read as costume jewellery.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"snappy\",\n \"lively\"\n ]\n },\n \"say\": \"Fast animation feels cheap next to fine pieces.\"\n }\n ],\n \"words\": [\n \"cheap\",\n \"bargain\",\n \"bling\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"none\"\n },\n {\n \"id\": \"tattoo\",\n \"label\": \"Tattoo or barber studio\",\n \"he\": \"סטודיו קעקועים / ברבר\",\n \"group\": \"Creative work\",\n \"uupm\": \"no row\",\n \"match\": [\n \"tattoo\",\n \"barber\",\n \"piercing\",\n \"קעקוע\",\n \"ברבר\",\n \"מספרה לגברים\"\n ],\n \"good\": [\n {\n \"preset\": \"ink-studio\",\n \"reason\": \"Black, sharp and orange: a studio with attitude.\",\n \"reasonHe\": \"שחור, חד וכתום: סטודיו עם אופי.\"\n },\n {\n \"preset\": \"after-dark\",\n \"reason\": \"Dark and bold, open late.\",\n \"reasonHe\": \"כהה ונועז, פתוח עד מאוחר.\"\n },\n {\n \"preset\": \"zine\",\n \"reason\": \"Flash-sheet energy.\",\n \"reasonHe\": \"אנרגיה של דף פלאש.\"\n },\n {\n \"preset\": \"night-gallery\",\n \"reason\": \"Your work on black, like a portfolio book.\",\n \"reasonHe\": \"העבודות שלכם על שחור, כמו תיק עבודות מודפס.\"\n }\n ],\n \"colour\": {\n \"mood\": \"black and one hot accent\",\n \"swatches\": [\n \"#EA580C\",\n \"#DB2777\",\n \"#111827\"\n ]\n },\n \"fonts\": \"bold, condensed\",\n \"tone\": \"Direct, a bit of attitude.\",\n \"motion\": \"snappy\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"standard\",\n \"between\": \"slide\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Healed work, clean photos.\",\n \"pages\": [\n \"home\",\n \"work (collection)\",\n \"artists\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.masonry-gallery\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"romantic\"\n ]\n },\n \"say\": \"Soft pastels don't match the shop people expect.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"cheap\",\n \"walk-ins guaranteed\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"must\"\n },\n {\n \"id\": \"spa\",\n \"label\": \"Spa and massage\",\n \"he\": \"ספא ועיסוי\",\n \"group\": \"Wellness and beauty\",\n \"uupm\": \"32 Beauty/Spa/Wellness Service\",\n \"match\": [\n \"spa\",\n \"massage\",\n \"wellness\",\n \"ספא\",\n \"עיסוי\",\n \"טיפולי\"\n ],\n \"good\": [\n {\n \"preset\": \"soft-spa\",\n \"reason\": \"Rose cream, a fine serif and slow motion: calm before they arrive.\",\n \"reasonHe\": \"שמנת ורודה, סריף עדין ותנועה איטית: רוגע עוד לפני שמגיעים.\"\n },\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Fresh, frosted and light.\",\n \"reasonHe\": \"רענן, חלבי ובהיר.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"For a high-end spa: bronze and space.\",\n \"reasonHe\": \"לספא יוקרתי: ברונזה והרבה מרחב.\"\n },\n {\n \"preset\": \"garden-party\",\n \"reason\": \"Soft and warm, for a friendly day spa.\",\n \"reasonHe\": \"רך וחם, לספא יום ידידותי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"soft pastels — pink, sage, cream — with gold\",\n \"swatches\": [\n \"#7D4E5E\",\n \"#5E6B3A\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"elegant and calming\",\n \"tone\": \"Soft, unhurried, second person.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"standard\",\n \"imagery\": \"Rooms, textures, hands; no faces needed.\",\n \"pages\": [\n \"home\",\n \"treatments (services)\",\n \"prices\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"prices\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"proof.testimonial-carousel\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"Dark pages feel like a night club, not a place to rest.\"\n },\n {\n \"when\": {\n \"moods\": [\n \"bold\",\n \"energetic\"\n ]\n },\n \"say\": \"Loud, bright colour is the opposite of a quiet room.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"snappy\",\n \"lively\"\n ]\n },\n \"say\": \"Fast, bouncy motion works against the calm people come for.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n }\n ],\n \"words\": [\n \"deal\",\n \"hurry\",\n \"cheap\"\n ],\n \"structure\": \"practice\",\n \"slice\": true,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"salon\",\n \"label\": \"Hair and beauty salon\",\n \"he\": \"מספרה וסלון יופי\",\n \"group\": \"Wellness and beauty\",\n \"uupm\": \"32 Beauty/Spa/Wellness Service (salon keyword)\",\n \"match\": [\n \"salon\",\n \"hair\",\n \"nails\",\n \"beauty\",\n \"lashes\",\n \"מספרה\",\n \"סלון\",\n \"ציפורניים\",\n \"קוסמטיקה\"\n ],\n \"good\": [\n {\n \"preset\": \"soft-spa\",\n \"reason\": \"Elegant and soft for a beauty salon.\",\n \"reasonHe\": \"אלגנטי ורך לסלון יופי.\"\n },\n {\n \"preset\": \"coral-studio\",\n \"reason\": \"Bright and fun for a busy hair studio.\",\n \"reasonHe\": \"בהיר וכיפי למספרה עמוסה.\"\n },\n {\n \"preset\": \"garden-party\",\n \"reason\": \"Warm, friendly and a little romantic.\",\n \"reasonHe\": \"חם, ידידותי וקצת רומנטי.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Minimal and chic, lets the cuts speak.\",\n \"reasonHe\": \"מינימלי ושיקי, נותן לתספורות לדבר.\"\n }\n ],\n \"colour\": {\n \"mood\": \"soft pinks or warm coral\",\n \"swatches\": [\n \"#7D4E5E\",\n \"#E5484D\",\n \"#7D5260\"\n ]\n },\n \"fonts\": \"elegant or friendly\",\n \"tone\": \"Friendly, upbeat, short.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"lively\",\n \"imagery\": \"Your own before-and-after photos.\",\n \"pages\": [\n \"home\",\n \"services\",\n \"prices\",\n \"gallery\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"prices\",\n \"gallery\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"collection.masonry-gallery\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"A technical look feels clinical in a salon.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n }\n ],\n \"words\": [\n \"cheap\",\n \"flawless\"\n ],\n \"structure\": \"practice\",\n \"slice\": true,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"yoga\",\n \"label\": \"Yoga or pilates studio\",\n \"he\": \"סטודיו ליוגה / פילאטיס\",\n \"group\": \"Wellness and beauty\",\n \"uupm\": \"141 Yoga & Stretching Guide (app)\",\n \"match\": [\n \"yoga\",\n \"pilates\",\n \"meditation\",\n \"יוגה\",\n \"פילאטיס\",\n \"מדיטציה\"\n ],\n \"good\": [\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Fresh air and soft light, like a morning class.\",\n \"reasonHe\": \"אוויר צח ואור רך, כמו שיעור בוקר.\"\n },\n {\n \"preset\": \"soft-spa\",\n \"reason\": \"Calm and warm.\",\n \"reasonHe\": \"רגוע וחם.\"\n },\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Open and welcoming for a community studio.\",\n \"reasonHe\": \"פתוח ומזמין לסטודיו קהילתי.\"\n },\n {\n \"preset\": \"fresh-practice\",\n \"reason\": \"Light and gentle.\",\n \"reasonHe\": \"בהיר ועדין.\"\n }\n ],\n \"colour\": {\n \"mood\": \"sage, terracotta, cream\",\n \"swatches\": [\n \"#0E8A89\",\n \"#5E6B3A\",\n \"#9A4F2B\"\n ]\n },\n \"fonts\": \"warm, humanist\",\n \"tone\": \"Gentle and inviting; who it is for.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"lively\",\n \"imagery\": \"The room, real classes, daylight.\",\n \"pages\": [\n \"home\",\n \"classes\",\n \"schedule\",\n \"teachers\",\n \"prices\",\n \"contact\"\n ],\n \"needs\": [\n \"prices\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"pricing.tiers\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"bold\"\n ]\n },\n \"say\": \"Bold, loud design fights the calm a class promises.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"snappy\",\n \"lively\"\n ]\n },\n \"say\": \"Fast, bouncy motion works against the calm people come for.\"\n }\n ],\n \"words\": [\n \"burn fat\",\n \"no pain no gain\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"fitness\",\n \"label\": \"Trainer, gym or dance\",\n \"he\": \"מאמן/ת, חדר כושר, מחול\",\n \"group\": \"Wellness and beauty\",\n \"uupm\": \"35 Fitness/Gym App\",\n \"match\": [\n \"gym\",\n \"fitness\",\n \"trainer\",\n \"crossfit\",\n \"dance\",\n \"boxing\",\n \"כושר\",\n \"מאמן\",\n \"מחול\",\n \"ריקוד\"\n ],\n \"good\": [\n {\n \"preset\": \"coral-studio\",\n \"reason\": \"Warm, energetic and bouncy.\",\n \"reasonHe\": \"חם, אנרגטי וקופצני.\"\n },\n {\n \"preset\": \"fresh-market\",\n \"reason\": \"Bright green energy.\",\n \"reasonHe\": \"אנרגיה ירוקה ובהירה.\"\n },\n {\n \"preset\": \"after-dark\",\n \"reason\": \"Dark and intense for a serious gym.\",\n \"reasonHe\": \"כהה ואינטנסיבי לחדר כושר רציני.\"\n },\n {\n \"preset\": \"bold-maker\",\n \"reason\": \"Loud and direct.\",\n \"reasonHe\": \"רועש וישיר.\"\n },\n {\n \"preset\": \"festival\",\n \"reason\": \"Poster energy for a dance or boxing studio.\",\n \"reasonHe\": \"אנרגיה של פוסטר לסטודיו למחול או לאגרוף.\"\n }\n ],\n \"colour\": {\n \"mood\": \"energetic orange or green\",\n \"swatches\": [\n \"#E5484D\",\n \"#00B86B\",\n \"#EA580C\"\n ]\n },\n \"fonts\": \"bold, motivational\",\n \"tone\": \"Short, motivating, active verbs.\",\n \"motion\": \"lively\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"lively\",\n \"between\": \"slide\"\n },\n \"ceiling\": \"lively\",\n \"imagery\": \"Real people training; movement.\",\n \"pages\": [\n \"home\",\n \"classes\",\n \"prices\",\n \"coaches\",\n \"contact\"\n ],\n \"needs\": [\n \"prices\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"feature.triad\",\n \"pricing.tiers\",\n \"proof.testimonial-carousel\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"motion\": [\n \"off\",\n \"calm\"\n ]\n },\n \"say\": \"A still, slow site feels low-energy for training.\"\n },\n {\n \"when\": {\n \"moods\": [\n \"luxurious\"\n ]\n },\n \"say\": \"Hushed luxury can feel unwelcoming to beginners.\"\n }\n ],\n \"words\": [\n \"guaranteed results\",\n \"lose 10 kilos\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"therapist\",\n \"label\": \"Therapist or counsellor\",\n \"he\": \"מטפל/ת\",\n \"group\": \"Wellness and beauty\",\n \"uupm\": \"22 Mental Health App (nearest)\",\n \"match\": [\n \"therapist\",\n \"therapy\",\n \"psychologist\",\n \"counsellor\",\n \"counselor\",\n \"מטפל\",\n \"פסיכולוג\",\n \"טיפול רגשי\"\n ],\n \"good\": [\n {\n \"preset\": \"fresh-practice\",\n \"reason\": \"Soft and reassuring; nothing sharp.\",\n \"reasonHe\": \"רך ומרגיע; שום דבר חד.\"\n },\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Calm, light and open.\",\n \"reasonHe\": \"רגוע, בהיר ופתוח.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Clear and professional.\",\n \"reasonHe\": \"ברור ומקצועי.\"\n },\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Warm and human.\",\n \"reasonHe\": \"חם ואנושי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"calm pastels and trust colours\",\n \"swatches\": [\n \"#0284C7\",\n \"#0E8A89\",\n \"#3B6939\"\n ]\n },\n \"fonts\": \"calming, readable\",\n \"tone\": \"Gentle, plain, never salesy.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"subtle\",\n \"between\": \"none\"\n },\n \"ceiling\": \"subtle\",\n \"imagery\": \"A calm room, daylight; your portrait.\",\n \"pages\": [\n \"home\",\n \"how I work\",\n \"about\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"about\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"bold\",\n \"energetic\"\n ]\n },\n \"say\": \"Bright, loud design can feel overwhelming to someone looking for help.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"snappy\",\n \"lively\"\n ]\n },\n \"say\": \"Fast, bouncy motion works against the calm people come for.\"\n },\n {\n \"check\": \"no-pattern\",\n \"pattern\": \"proof.testimonial-carousel\",\n \"say\": \"Client quotes can reveal who saw you; ask before showing any.\"\n }\n ],\n \"words\": [\n \"fix\",\n \"cure\",\n \"guaranteed\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"clinic\",\n \"label\": \"Clinic or practice\",\n \"he\": \"מרפאה\",\n \"group\": \"Health\",\n \"uupm\": \"58 Medical Clinic\",\n \"match\": [\n \"clinic\",\n \"doctor\",\n \"physio\",\n \"physiotherapy\",\n \"medical\",\n \"מרפאה\",\n \"רופא\",\n \"פיזיותרפיה\"\n ],\n \"good\": [\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Clean and readable; trust first.\",\n \"reasonHe\": \"נקי וקריא; האמון קודם לכל.\"\n },\n {\n \"preset\": \"fresh-practice\",\n \"reason\": \"Friendly, light and calm.\",\n \"reasonHe\": \"ידידותי, בהיר ורגוע.\"\n },\n {\n \"preset\": \"trusted-advisor\",\n \"reason\": \"Firm and professional.\",\n \"reasonHe\": \"יציב ומקצועי.\"\n },\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Modern and calm.\",\n \"reasonHe\": \"עכשווי ורגוע.\"\n }\n ],\n \"colour\": {\n \"mood\": \"medical blue and white\",\n \"swatches\": [\n \"#0E7490\",\n \"#0284C7\",\n \"#1E3A8A\"\n ]\n },\n \"fonts\": \"professional, readable\",\n \"tone\": \"Clear and plain; what you treat, how to book.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"subtle\",\n \"imagery\": \"Your team and rooms; no stock doctors.\",\n \"pages\": [\n \"home\",\n \"treatments (services)\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful design can make patients doubt the care.\"\n },\n {\n \"check\": \"brand-hue\",\n \"from\": 270,\n \"to\": 335,\n \"minChroma\": 0.12,\n \"say\": \"A purple-pink brand is the colour of AI tools right now; on this kind of site it can read as generic.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"phone\",\n \"say\": \"A phone number is the first thing people need here.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n }\n ],\n \"words\": [\n \"cure\",\n \"guaranteed\",\n \"miracle\",\n \"best in town\"\n ],\n \"structure\": \"practice\",\n \"slice\": true,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"dental\",\n \"label\": \"Dental practice\",\n \"he\": \"מרפאת שיניים\",\n \"group\": \"Health\",\n \"uupm\": \"60 Dental Practice\",\n \"match\": [\n \"dental\",\n \"dentist\",\n \"orthodont\",\n \"שיניים\",\n \"רופא שיניים\"\n ],\n \"good\": [\n {\n \"preset\": \"fresh-practice\",\n \"reason\": \"Fresh blue and soft shapes: a friendly smile.\",\n \"reasonHe\": \"כחול רענן וצורות רכות: חיוך ידידותי.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Clean and trustworthy.\",\n \"reasonHe\": \"נקי ואמין.\"\n },\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Bright and modern.\",\n \"reasonHe\": \"בהיר ועכשווי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"fresh blue, white, a touch of yellow\",\n \"swatches\": [\n \"#0284C7\",\n \"#0E7490\",\n \"#0E8A89\"\n ]\n },\n \"fonts\": \"friendly, professional\",\n \"tone\": \"Reassuring, plain.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"subtle\",\n \"imagery\": \"Your clinic and team.\",\n \"pages\": [\n \"home\",\n \"treatments\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"proof.testimonial-carousel\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"Dark pages feel heavy for a dental practice.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"phone\",\n \"say\": \"A phone number is the first thing people need here.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n }\n ],\n \"words\": [\n \"painless\",\n \"guaranteed\",\n \"perfect smile\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"vet\",\n \"label\": \"Vet or pet care\",\n \"he\": \"וטרינר / טיפוח חיות\",\n \"group\": \"Health\",\n \"uupm\": \"61 Veterinary Clinic\",\n \"match\": [\n \"vet\",\n \"veterinary\",\n \"pet\",\n \"dog\",\n \"groom\",\n \"וטרינר\",\n \"כלבים\",\n \"חיות\"\n ],\n \"good\": [\n {\n \"preset\": \"little-ones\",\n \"reason\": \"Round, warm and playful.\",\n \"reasonHe\": \"עגול, חם ושובב.\"\n },\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Friendly and caring.\",\n \"reasonHe\": \"ידידותי ואכפתי.\"\n },\n {\n \"preset\": \"fresh-practice\",\n \"reason\": \"Clean and reassuring for a clinic.\",\n \"reasonHe\": \"נקי ומרגיע למרפאה.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Professional, for a medical practice.\",\n \"reasonHe\": \"מקצועי, כיאה למרפאה.\"\n }\n ],\n \"colour\": {\n \"mood\": \"caring blue or teal, warm accents\",\n \"swatches\": [\n \"#006A6A\",\n \"#3B6939\",\n \"#0284C7\"\n ]\n },\n \"fonts\": \"friendly, welcoming\",\n \"tone\": \"Warm, practical.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"standard\",\n \"imagery\": \"Real animals you treat (with permission).\",\n \"pages\": [\n \"home\",\n \"services\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"team\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"Dark pages feel unfriendly for pet owners.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"phone\",\n \"say\": \"A phone number is the first thing people need here.\"\n }\n ],\n \"words\": [\n \"guaranteed\",\n \"cure\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"restaurant\",\n \"label\": \"Restaurant\",\n \"he\": \"מסעדה\",\n \"group\": \"Food and drink\",\n \"uupm\": \"34 Restaurant/Food Service\",\n \"match\": [\n \"restaurant\",\n \"bistro\",\n \"kitchen\",\n \"chef\",\n \"מסעדה\",\n \"שף\",\n \"ביסטרו\"\n ],\n \"good\": [\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Warm paper and serif, like a printed menu.\",\n \"reasonHe\": \"נייר חם וסריף, כמו תפריט מודפס.\"\n },\n {\n \"preset\": \"corner-cafe\",\n \"reason\": \"Friendly and casual.\",\n \"reasonHe\": \"ידידותי וקליל.\"\n },\n {\n \"preset\": \"after-dark\",\n \"reason\": \"Dark and lively for an evening place.\",\n \"reasonHe\": \"כהה ותוסס למקום של ערב.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"For fine dining.\",\n \"reasonHe\": \"למסעדת שף.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm — orange, red, brown\",\n \"swatches\": [\n \"#9A4F2B\",\n \"#9C4146\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"appetising, clear\",\n \"tone\": \"Inviting, sensory, short.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Your own food and room photos.\",\n \"pages\": [\n \"home\",\n \"menu\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"menu\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"feature.triad\",\n \"proof.testimonial-carousel\",\n \"contact.split-map\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"A cold, technical look kills appetite.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"address\",\n \"say\": \"Visitors need the address to find you.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n }\n ],\n \"words\": [\n \"best food in town\",\n \"world-class\",\n \"mouth-watering\"\n ],\n \"structure\": \"place\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"tables\"\n },\n {\n \"id\": \"cafe-bakery\",\n \"label\": \"Café or bakery\",\n \"he\": \"בית קפה / מאפייה\",\n \"group\": \"Food and drink\",\n \"uupm\": \"63 Bakery/Cafe\",\n \"match\": [\n \"cafe\",\n \"café\",\n \"coffee\",\n \"bakery\",\n \"patisserie\",\n \"בית קפה\",\n \"קפה\",\n \"מאפייה\",\n \"קונדיטוריה\"\n ],\n \"good\": [\n {\n \"preset\": \"corner-cafe\",\n \"reason\": \"Warm, round and cheerful.\",\n \"reasonHe\": \"חם, עגול ועליז.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Cream and brown, like a paper bag.\",\n \"reasonHe\": \"שמנת וחום, כמו שקית נייר.\"\n },\n {\n \"preset\": \"fresh-market\",\n \"reason\": \"Bright and fresh for a juice or brunch spot.\",\n \"reasonHe\": \"בהיר ורענן למקום של מיצים או בראנץ'.\"\n },\n {\n \"preset\": \"garden-party\",\n \"reason\": \"Soft and sweet for a patisserie.\",\n \"reasonHe\": \"רך ומתוק לקונדיטוריה.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm brown, cream, appetising accents\",\n \"swatches\": [\n \"#9C4146\",\n \"#9A4F2B\",\n \"#7D5260\"\n ]\n },\n \"fonts\": \"warm, inviting\",\n \"tone\": \"Friendly, short, a little playful.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"slide\"\n },\n \"ceiling\": \"lively\",\n \"imagery\": \"Your bakes and drinks, close up.\",\n \"pages\": [\n \"home\",\n \"menu\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"menu\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"collection.masonry-gallery\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"A café is a daytime place; dark pages feel closed.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"address\",\n \"say\": \"Visitors need the address to find you.\"\n }\n ],\n \"words\": [\n \"best coffee in town\",\n \"to die for\"\n ],\n \"structure\": \"place\",\n \"slice\": true,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"bar-winery\",\n \"label\": \"Bar, winery or brewery\",\n \"he\": \"בר / יקב / מבשלה\",\n \"group\": \"Food and drink\",\n \"uupm\": \"64 Brewery/Winery\",\n \"match\": [\n \"bar\",\n \"wine\",\n \"winery\",\n \"brewery\",\n \"cocktail\",\n \"יקב\",\n \"בר\",\n \"יין\",\n \"בירה\"\n ],\n \"good\": [\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Bronze and serif, like a good label.\",\n \"reasonHe\": \"ברונזה וסריף, כמו תווית טובה.\"\n },\n {\n \"preset\": \"after-dark\",\n \"reason\": \"Dark and lively, open late.\",\n \"reasonHe\": \"כהה ותוסס, פתוח עד מאוחר.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Heritage and story.\",\n \"reasonHe\": \"מורשת וסיפור.\"\n },\n {\n \"preset\": \"ink-studio\",\n \"reason\": \"Craft-beer attitude.\",\n \"reasonHe\": \"האופי של מבשלת בוטיק.\"\n }\n ],\n \"colour\": {\n \"mood\": \"deep amber, burgundy, gold\",\n \"swatches\": [\n \"#7A5B36\",\n \"#9C4146\",\n \"#DB2777\"\n ]\n },\n \"fonts\": \"artisanal, heritage\",\n \"tone\": \"Story-led: the place, the people, the craft.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"subtle\",\n \"between\": \"cinematic\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"The cellar, the bar, the bottle.\",\n \"pages\": [\n \"home\",\n \"menu or wines\",\n \"our story\",\n \"visit\",\n \"contact\"\n ],\n \"needs\": [\n \"menu\",\n \"visit\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"about.story\",\n \"collection.card-grid\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"flavor\": [\n \"bloom\"\n ]\n },\n \"say\": \"Round, bouncy design reads as a kids' brand, not a cellar.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"hours\",\n \"say\": \"People look for your opening hours first; a site without them sends them elsewhere.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"address\",\n \"say\": \"Visitors need the address to find you.\"\n }\n ],\n \"words\": [\n \"best wine\",\n \"award-winning (unless you are)\"\n ],\n \"structure\": \"place\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"boutique\",\n \"label\": \"Fashion or lifestyle shop\",\n \"he\": \"בוטיק\",\n \"group\": \"Shops\",\n \"uupm\": \"3 E-commerce · 4 E-commerce Luxury\",\n \"match\": [\n \"boutique\",\n \"fashion\",\n \"clothing\",\n \"shop\",\n \"store\",\n \"בוטיק\",\n \"אופנה\",\n \"חנות\"\n ],\n \"good\": [\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Clean and chic; the products lead.\",\n \"reasonHe\": \"נקי ושיקי; המוצרים במרכז.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Premium and calm.\",\n \"reasonHe\": \"יוקרתי ורגוע.\"\n },\n {\n \"preset\": \"bold-maker\",\n \"reason\": \"A brand with a loud voice.\",\n \"reasonHe\": \"מותג עם קול חזק.\"\n },\n {\n \"preset\": \"zine\",\n \"reason\": \"Indie and edgy.\",\n \"reasonHe\": \"אינדי ונועז.\"\n }\n ],\n \"colour\": {\n \"mood\": \"your brand colour on a quiet page\",\n \"swatches\": [\n \"#3F4A5A\",\n \"#7A5B36\",\n \"#FF5C39\"\n ]\n },\n \"fonts\": \"refined or bold\",\n \"tone\": \"Short and confident.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"slide\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Product photos on plain grounds; real people wearing them.\",\n \"pages\": [\n \"home\",\n \"collection\",\n \"product (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"proof.logo-strip\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"check\": \"copy-length\",\n \"max\": \"standard\",\n \"say\": \"Text-heavy pages slow down shoppers.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"cheap\",\n \"must-have\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"florist\",\n \"label\": \"Florist or plant shop\",\n \"he\": \"חנות פרחים\",\n \"group\": \"Shops\",\n \"uupm\": \"62 Florist/Plant Shop\",\n \"match\": [\n \"florist\",\n \"flowers\",\n \"plants\",\n \"bouquet\",\n \"פרחים\",\n \"צמחים\",\n \"זרים\"\n ],\n \"good\": [\n {\n \"preset\": \"garden-party\",\n \"reason\": \"Soft, romantic and full of colour.\",\n \"reasonHe\": \"רך, רומנטי ומלא צבע.\"\n },\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Leaf green and friendly.\",\n \"reasonHe\": \"ירוק עלים וידידותי.\"\n },\n {\n \"preset\": \"fresh-market\",\n \"reason\": \"Bright, like a flower stall.\",\n \"reasonHe\": \"בהיר, כמו דוכן פרחים.\"\n },\n {\n \"preset\": \"soft-spa\",\n \"reason\": \"Elegant for a design florist.\",\n \"reasonHe\": \"אלגנטי לחנות פרחים מעוצבת.\"\n }\n ],\n \"colour\": {\n \"mood\": \"natural green with floral pinks\",\n \"swatches\": [\n \"#3B6939\",\n \"#7D5260\",\n \"#00B86B\"\n ]\n },\n \"fonts\": \"elegant, natural\",\n \"tone\": \"Seasonal, warm.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"lively\",\n \"imagery\": \"Your own arrangements in daylight.\",\n \"pages\": [\n \"home\",\n \"flowers (collection)\",\n \"weddings and events\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.masonry-gallery\",\n \"feature.triad\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"mode\": [\n \"dark\"\n ]\n },\n \"say\": \"Flowers lose their colour on a dark page.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"cheap\",\n \"best prices\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"home-goods\",\n \"label\": \"Furniture or home goods\",\n \"he\": \"רהיטים ועיצוב הבית\",\n \"group\": \"Shops\",\n \"uupm\": \"161 Home Decoration & Interior Design\",\n \"match\": [\n \"furniture\",\n \"home goods\",\n \"homeware\",\n \"decor shop\",\n \"רהיטים\",\n \"כלי בית\"\n ],\n \"good\": [\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Warm and tactile, like a catalogue.\",\n \"reasonHe\": \"חם ומוחשי, כמו קטלוג.\"\n },\n {\n \"preset\": \"gallery-minimal\",\n \"reason\": \"Clean and calm; each piece stands alone.\",\n \"reasonHe\": \"נקי ורגוע; כל פריט עומד בפני עצמו.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Premium pieces deserve it.\",\n \"reasonHe\": \"פריטים יוקרתיים ראויים לזה.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Soft glass and space.\",\n \"reasonHe\": \"זכוכית רכה והרבה מרחב.\"\n }\n ],\n \"colour\": {\n \"mood\": \"neutral interior palette, a material accent\",\n \"swatches\": [\n \"#78716C\",\n \"#9A4F2B\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"professional, clean\",\n \"tone\": \"Clear and specific: size, material, care.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Pieces in real rooms and on plain grounds.\",\n \"pages\": [\n \"home\",\n \"collection\",\n \"product (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"feature.alternating-rows\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Excessive decoration distracts from the pieces.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n }\n ],\n \"words\": [\n \"luxury\",\n \"cheap\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"consultant\",\n \"label\": \"Consultant\",\n \"he\": \"יועץ/ת\",\n \"group\": \"Professional services\",\n \"uupm\": \"5 B2B Service (consult keyword)\",\n \"match\": [\n \"consult\",\n \"consultant\",\n \"advisor\",\n \"strategy\",\n \"יועץ\",\n \"ייעוץ\"\n ],\n \"good\": [\n {\n \"preset\": \"trusted-advisor\",\n \"reason\": \"Navy and plain type: serious and clear.\",\n \"reasonHe\": \"כחול כהה ואותיות פשוטות: רציני וברור.\"\n },\n {\n \"preset\": \"swiss-grid\",\n \"reason\": \"Sharp and modern.\",\n \"reasonHe\": \"חד ועכשווי.\"\n },\n {\n \"preset\": \"tech-studio\",\n \"reason\": \"For tech and data consultants.\",\n \"reasonHe\": \"ליועצי טכנולוגיה ודאטה.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Light and approachable.\",\n \"reasonHe\": \"בהיר ונגיש.\"\n }\n ],\n \"colour\": {\n \"mood\": \"professional blue and neutral grey\",\n \"swatches\": [\n \"#1E3A8A\",\n \"#111827\",\n \"#0E7490\"\n ]\n },\n \"fonts\": \"formal, clear\",\n \"tone\": \"Plain and specific: problems you solve, results.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"subtle\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"standard\",\n \"imagery\": \"Your portrait; diagrams over stock.\",\n \"pages\": [\n \"home\",\n \"services\",\n \"case studies\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"proof.stat-row\",\n \"proof.testimonial-carousel\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful reads as unserious to a client buying advice.\"\n },\n {\n \"check\": \"brand-hue\",\n \"from\": 270,\n \"to\": 335,\n \"minChroma\": 0.12,\n \"say\": \"A purple-pink brand is the colour of AI tools right now; on this kind of site it can read as generic.\"\n }\n ],\n \"words\": [\n \"synergy\",\n \"guaranteed ROI\",\n \"world-class\"\n ],\n \"structure\": \"practice\",\n \"slice\": true,\n \"stock\": true,\n \"booking\": \"sometimes\"\n },\n {\n \"id\": \"coach\",\n \"label\": \"Life or business coach\",\n \"he\": \"מאמן/ת אישי/ת\",\n \"group\": \"Professional services\",\n \"uupm\": \"no row\",\n \"match\": [\n \"life coach\",\n \"business coach\",\n \"mentor\",\n \"coaching\",\n \"מאמנת\",\n \"אימון אישי\",\n \"קואצ'ינג\"\n ],\n \"good\": [\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Fresh and hopeful.\",\n \"reasonHe\": \"רענן ומלא תקווה.\"\n },\n {\n \"preset\": \"trusted-advisor\",\n \"reason\": \"Credible for business coaching.\",\n \"reasonHe\": \"אמין לאימון עסקי.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Warm and personal, story-led.\",\n \"reasonHe\": \"חם ואישי, סביב הסיפור שלכם.\"\n },\n {\n \"preset\": \"coral-studio\",\n \"reason\": \"Energetic and upbeat.\",\n \"reasonHe\": \"אנרגטי ואופטימי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm and hopeful\",\n \"swatches\": [\n \"#0E8A89\",\n \"#E5484D\",\n \"#1E3A8A\"\n ]\n },\n \"fonts\": \"warm, clear\",\n \"tone\": \"Personal, encouraging, first person.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"standard\",\n \"imagery\": \"Your portrait, working with people.\",\n \"pages\": [\n \"home\",\n \"how it works\",\n \"programmes\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"pricing.tiers\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"A cold, technical look is the opposite of personal.\"\n }\n ],\n \"words\": [\n \"life-changing\",\n \"guaranteed\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n },\n {\n \"id\": \"law-accounting\",\n \"label\": \"Law or accounting firm\",\n \"he\": \"משרד עורכי דין / רואי חשבון\",\n \"group\": \"Professional services\",\n \"uupm\": \"40 Legal Services\",\n \"match\": [\n \"law\",\n \"lawyer\",\n \"attorney\",\n \"legal\",\n \"accountant\",\n \"accounting\",\n \"עורך דין\",\n \"עורכת דין\",\n \"רואה חשבון\",\n \"משפט\"\n ],\n \"good\": [\n {\n \"preset\": \"trusted-advisor\",\n \"reason\": \"Navy and gold: authority without fuss.\",\n \"reasonHe\": \"כחול כהה וזהב: סמכותי בלי גינונים.\"\n },\n {\n \"preset\": \"swiss-grid\",\n \"reason\": \"Precise and modern.\",\n \"reasonHe\": \"מדויק ועכשווי.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Clear and approachable.\",\n \"reasonHe\": \"ברור ונגיש.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"For a boutique firm.\",\n \"reasonHe\": \"למשרד בוטיק.\"\n }\n ],\n \"colour\": {\n \"mood\": \"navy, gold, white\",\n \"swatches\": [\n \"#1E3A8A\",\n \"#111827\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"professional, authoritative\",\n \"tone\": \"Formal, exact, no promises you cannot keep.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"still\",\n \"between\": \"none\"\n },\n \"ceiling\": \"subtle\",\n \"imagery\": \"Your team; your office.\",\n \"pages\": [\n \"home\",\n \"practice areas (services)\",\n \"team\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"services\",\n \"team\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"proof.stat-row\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"flavor\": [\n \"pop\",\n \"bloom\"\n ]\n },\n \"say\": \"Playful design undermines the trust clients need.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"lively\"\n ]\n },\n \"say\": \"Bouncy motion feels out of place for legal or financial advice.\"\n },\n {\n \"check\": \"brand-hue\",\n \"from\": 270,\n \"to\": 335,\n \"minChroma\": 0.12,\n \"say\": \"A purple-pink brand is the colour of AI tools right now; on this kind of site it can read as generic.\"\n }\n ],\n \"words\": [\n \"guarantee\",\n \"win your case\",\n \"best lawyer\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"sometimes\"\n },\n {\n \"id\": \"real-estate\",\n \"label\": \"Real estate agent\",\n \"he\": \"נדל\\\"ן\",\n \"group\": \"Professional services\",\n \"uupm\": \"36 Real Estate/Property\",\n \"match\": [\n \"real estate\",\n \"realtor\",\n \"property\",\n \"apartments\",\n \"נדל\\\"ן\",\n \"נדלן\",\n \"דירות\"\n ],\n \"good\": [\n {\n \"preset\": \"holiday-light\",\n \"reason\": \"Bright glass and big photos.\",\n \"reasonHe\": \"זכוכית בהירה ותמונות גדולות.\"\n },\n {\n \"preset\": \"trusted-advisor\",\n \"reason\": \"Professional and trustworthy.\",\n \"reasonHe\": \"מקצועי ואמין.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"For luxury property.\",\n \"reasonHe\": \"לנדל\\\"ן יוקרה.\"\n },\n {\n \"preset\": \"frosted-portfolio\",\n \"reason\": \"Clean and modern.\",\n \"reasonHe\": \"נקי ועכשווי.\"\n }\n ],\n \"colour\": {\n \"mood\": \"trust blue, gold, white\",\n \"swatches\": [\n \"#0A66E8\",\n \"#1E3A8A\",\n \"#7A5B36\"\n ]\n },\n \"fonts\": \"professional, confident\",\n \"tone\": \"Clear and factual.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"smooth\",\n \"animate\": \"standard\",\n \"between\": \"slide\"\n },\n \"ceiling\": \"lively\",\n \"imagery\": \"Your own property photos; never stock.\",\n \"pages\": [\n \"home\",\n \"properties (collection)\",\n \"property (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.card-grid\",\n \"proof.testimonial-carousel\",\n \"contact.split-map\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"playful\"\n ]\n },\n \"say\": \"Playful design doesn't fit a large purchase.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"phone\",\n \"say\": \"A phone number is the first thing people need here.\"\n }\n ],\n \"words\": [\n \"dream home\",\n \"guaranteed\",\n \"once in a lifetime\"\n ],\n \"structure\": \"studio\",\n \"slice\": false,\n \"stock\": false,\n \"booking\": \"sometimes\"\n },\n {\n \"id\": \"nonprofit\",\n \"label\": \"Nonprofit or community\",\n \"he\": \"עמותה\",\n \"group\": \"Community and places\",\n \"uupm\": \"44 Non-profit/Charity\",\n \"match\": [\n \"nonprofit\",\n \"non-profit\",\n \"charity\",\n \"ngo\",\n \"volunteer\",\n \"community\",\n \"עמותה\",\n \"מתנדבים\",\n \"קהילה\"\n ],\n \"good\": [\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Warm, open and welcoming.\",\n \"reasonHe\": \"חם, פתוח ומזמין.\"\n },\n {\n \"preset\": \"clear-care\",\n \"reason\": \"Clear and credible.\",\n \"reasonHe\": \"ברור ואמין.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"For telling stories.\",\n \"reasonHe\": \"לספר סיפורים.\"\n },\n {\n \"preset\": \"little-ones\",\n \"reason\": \"For children's causes.\",\n \"reasonHe\": \"לעמותות למען ילדים.\"\n }\n ],\n \"colour\": {\n \"mood\": \"cause colours, trust, warmth\",\n \"swatches\": [\n \"#3B6939\",\n \"#0E7490\",\n \"#9A4F2B\"\n ]\n },\n \"fonts\": \"heartfelt, readable\",\n \"tone\": \"Honest, specific about impact.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"standard\",\n \"between\": \"fade\"\n },\n \"ceiling\": \"standard\",\n \"imagery\": \"Real people you help (with permission).\",\n \"pages\": [\n \"home\",\n \"what we do\",\n \"stories\",\n \"get involved\",\n \"contact\"\n ],\n \"needs\": [\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"proof.stat-row\",\n \"story.long-form\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"luxurious\"\n ]\n },\n \"say\": \"Looking expensive makes donors ask where the money goes.\"\n }\n ],\n \"words\": [\n \"donate now!!\",\n \"save the world\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"none\"\n },\n {\n \"id\": \"venue-events\",\n \"label\": \"Venue, weddings or events\",\n \"he\": \"אולם, חתונות ואירועים\",\n \"group\": \"Community and places\",\n \"uupm\": \"39 Wedding/Event Planning · 70 Event Management\",\n \"match\": [\n \"venue\",\n \"wedding\",\n \"events\",\n \"event\",\n \"hall\",\n \"festival\",\n \"אולם\",\n \"חתונות\",\n \"אירועים\",\n \"גן אירועים\"\n ],\n \"good\": [\n {\n \"preset\": \"garden-party\",\n \"reason\": \"Romantic and warm for weddings.\",\n \"reasonHe\": \"רומנטי וחם לחתונות.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"Elegant for a premium venue.\",\n \"reasonHe\": \"אלגנטי לאולם יוקרתי.\"\n },\n {\n \"preset\": \"after-dark\",\n \"reason\": \"Dark and lively for parties.\",\n \"reasonHe\": \"כהה ותוסס למסיבות.\"\n },\n {\n \"preset\": \"festival\",\n \"reason\": \"Poster energy for festivals.\",\n \"reasonHe\": \"אנרגיה של פוסטר לפסטיבלים.\"\n }\n ],\n \"colour\": {\n \"mood\": \"soft pink, gold, cream — or event colours\",\n \"swatches\": [\n \"#7D5260\",\n \"#7A5B36\",\n \"#FF4FA3\"\n ]\n },\n \"fonts\": \"elegant or bold\",\n \"tone\": \"Evocative; the day, the place, the people.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"standard\",\n \"between\": \"cinematic\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Real events at your venue.\",\n \"pages\": [\n \"home\",\n \"spaces\",\n \"gallery\",\n \"faq\",\n \"contact\"\n ],\n \"needs\": [\n \"gallery\",\n \"faq\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.masonry-gallery\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"A technical look takes the romance out of the day.\"\n },\n {\n \"check\": \"needs-family\",\n \"family\": \"collection\",\n \"say\": \"Show the work: a site like this needs a gallery or a grid of projects on the home page.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n }\n ],\n \"words\": [\n \"fairy tale\",\n \"once in a lifetime\"\n ],\n \"structure\": \"place\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"tables\"\n },\n {\n \"id\": \"hotel-bnb\",\n \"label\": \"Hotel, B&B or guesthouse\",\n \"he\": \"מלון / צימר\",\n \"group\": \"Community and places\",\n \"uupm\": \"38 Hotel/Hospitality\",\n \"match\": [\n \"hotel\",\n \"b&b\",\n \"guesthouse\",\n \"cabin\",\n \"zimmer\",\n \"מלון\",\n \"צימר\",\n \"אירוח\"\n ],\n \"good\": [\n {\n \"preset\": \"holiday-light\",\n \"reason\": \"Sea-blue glass: makes people want to go.\",\n \"reasonHe\": \"זכוכית בכחול של ים: מעורר חשק לבוא.\"\n },\n {\n \"preset\": \"quiet-luxury\",\n \"reason\": \"For a boutique hotel.\",\n \"reasonHe\": \"למלון בוטיק.\"\n },\n {\n \"preset\": \"warm-editorial\",\n \"reason\": \"Warm and personal for a B&B.\",\n \"reasonHe\": \"חם ואישי לצימר.\"\n },\n {\n \"preset\": \"morning-glass\",\n \"reason\": \"Fresh and calm.\",\n \"reasonHe\": \"רענן ורגוע.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm neutrals, gold — or sea blue\",\n \"swatches\": [\n \"#0A66E8\",\n \"#7A5B36\",\n \"#0E8A89\"\n ]\n },\n \"fonts\": \"elegant, welcoming\",\n \"tone\": \"Welcoming, sensory.\",\n \"motion\": \"calm\",\n \"moves\": {\n \"scroll\": \"extra\",\n \"animate\": \"subtle\",\n \"between\": \"cinematic\"\n },\n \"ceiling\": \"expressive\",\n \"imagery\": \"Rooms, views, breakfast; your own photos.\",\n \"pages\": [\n \"home\",\n \"rooms (collection)\",\n \"room (detail)\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"collection\",\n \"detail\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.full-bleed-media\",\n \"collection.card-grid\",\n \"proof.testimonial-carousel\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"technical\"\n ]\n },\n \"say\": \"Cold and technical is the opposite of a welcome.\"\n },\n {\n \"check\": \"image-hero\",\n \"say\": \"Lead with a picture: the first screen should show the place or the work, not only words.\"\n },\n {\n \"check\": \"needs-fact\",\n \"fact\": \"address\",\n \"say\": \"Visitors need the address to find you.\"\n }\n ],\n \"words\": [\n \"paradise\",\n \"luxury (unless rated)\"\n ],\n \"structure\": \"place\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"tables\"\n },\n {\n \"id\": \"classes\",\n \"label\": \"Teacher, tutor or classes\",\n \"he\": \"מורה, חוגים ושיעורים\",\n \"group\": \"Community and places\",\n \"uupm\": \"153 Music Instrument Learning · 56 Childcare/Daycare\",\n \"match\": [\n \"tutor\",\n \"lessons\",\n \"teacher\",\n \"classes\",\n \"school\",\n \"music lessons\",\n \"kids\",\n \"מורה\",\n \"שיעורים\",\n \"חוג\",\n \"חוגים\",\n \"ילדים\"\n ],\n \"good\": [\n {\n \"preset\": \"little-ones\",\n \"reason\": \"Playful and safe for children.\",\n \"reasonHe\": \"שובב ובטוח לילדים.\"\n },\n {\n \"preset\": \"kind-community\",\n \"reason\": \"Warm and open.\",\n \"reasonHe\": \"חם ופתוח.\"\n },\n {\n \"preset\": \"coral-studio\",\n \"reason\": \"Energetic for dance or music.\",\n \"reasonHe\": \"אנרגטי למחול או למוזיקה.\"\n },\n {\n \"preset\": \"fresh-market\",\n \"reason\": \"Bright and lively.\",\n \"reasonHe\": \"בהיר ותוסס.\"\n }\n ],\n \"colour\": {\n \"mood\": \"warm, energetic\",\n \"swatches\": [\n \"#006A6A\",\n \"#E5484D\",\n \"#3B6939\"\n ]\n },\n \"fonts\": \"friendly, large\",\n \"tone\": \"Encouraging, clear for parents.\",\n \"motion\": \"standard\",\n \"moves\": {\n \"scroll\": \"normal\",\n \"animate\": \"lively\",\n \"between\": \"slide\"\n },\n \"ceiling\": \"lively\",\n \"imagery\": \"Real classes (with permission).\",\n \"pages\": [\n \"home\",\n \"classes\",\n \"prices\",\n \"about\",\n \"contact\"\n ],\n \"needs\": [\n \"prices\",\n \"about\",\n \"contact\"\n ],\n \"home\": [\n \"hero.split\",\n \"feature.triad\",\n \"pricing.tiers\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"avoid\": [\n {\n \"when\": {\n \"moods\": [\n \"luxurious\"\n ]\n },\n \"say\": \"An expensive look puts off parents comparing classes.\"\n },\n {\n \"when\": {\n \"motion\": [\n \"off\"\n ]\n },\n \"say\": \"A still site feels low-energy for a class.\"\n }\n ],\n \"words\": [\n \"guaranteed\",\n \"genius\"\n ],\n \"structure\": \"practice\",\n \"slice\": false,\n \"stock\": true,\n \"booking\": \"must\"\n }\n] as const;\n\nexport const SPEC_ANALYSIS_SHAPE = {\n \"analysis\": {\n \"businessType\": \"string — a harness.businessTypes id\",\n \"alternatives\": \"[string, string] — the two nearest business types\",\n \"business\": \"business\",\n \"needs\": \"need[] — what the site needs: the owner's (from: you) and the type's (from: type)\",\n \"facts\": \"{ [fact]: factRead } — site.facts keys, only what the prompt states; every quote is words of the prompt\",\n \"missingFacts\": \"string[] — site.facts keys the prompt does not state\",\n \"voice\": \"voice\",\n \"moods\": \"string[] — ≤ 3 moods\",\n \"avoid\": \"string[] — harness.userAvoids ids the owner asked for\",\n \"hero\": \"hero\",\n \"locale\": \"'he' | 'en'\"\n },\n \"business\": {\n \"name\": \"string — the business as the owner names it\",\n \"audience\": \"string — who it is for, one short line\"\n },\n \"need\": {\n \"id\": \"string — a harness.needs id\",\n \"from\": \"'you' | 'type'\",\n \"name?\": \"string — the owner's own word for it\"\n },\n \"factRead\": {\n \"value\": \"string — the fact\",\n \"quote\": \"string — the words of the prompt it came from\"\n },\n \"voice\": {\n \"tone\": \"string — one line\",\n \"person\": \"'we' | 'I'\",\n \"formality\": \"'casual' | 'neutral' | 'formal'\",\n \"avoidWords\": \"string[]\"\n },\n \"hero\": {\n \"headline\": \"string — the hero headline\",\n \"lead\": \"string — the hero lead\"\n }\n} as const;\n\nexport const SPEC_HARNESS_EXAMPLES = [\n {\n \"id\": \"kadar\",\n \"locale\": \"he\",\n \"dir\": \"rtl\",\n \"prompt\": \"סטודיו קדר — כלי חרס בעבודת יד מסטודיו קטן ביפו. רוצה אתר שמציג את הכלים החדשים, מסביר על סדנאות יום שישי ומאפשר להשאיר פרטים להרשמה. בלי משהו קר או טכנולוגי.\",\n \"business\": {\n \"name\": \"סטודיו קדר\",\n \"latin\": \"Studio Kadar\",\n \"facts\": {\n \"email\": \"hello@studiokadar.co.il\"\n }\n },\n \"analysis\": {\n \"businessType\": \"makers\",\n \"alternatives\": [\n \"artist\",\n \"classes\"\n ],\n \"moods\": [\n \"warm\",\n \"crafted\",\n \"calm\"\n ],\n \"avoid\": [\n \"too-corporate\"\n ],\n \"copyLength\": \"standard\",\n \"sentences\": [\n [\n \"The business\",\n \"A small ceramics studio in Jaffa that makes stoneware by hand.\",\n \"כלי חרס בעבודת יד מסטודיו קטן ביפו\"\n ],\n [\n \"Who it is for\",\n \"People who buy hand-made tableware, and beginners who want to try the wheel.\",\n \"סדנאות יום שישי\"\n ],\n [\n \"What the site should do\",\n \"Show the new pieces and get people to sign up for a Friday workshop.\",\n \"ומאפשר להשאיר פרטים להרשמה\"\n ],\n [\n \"How it should feel\",\n \"Warm, hand-made and calm.\",\n \"בלי משהו קר או טכנולוגי\"\n ],\n [\n \"Put first\",\n \"New pieces from the kiln · Friday workshops · Made by hand in Jaffa\",\n \"הכלים החדשים\"\n ]\n ],\n \"hero\": {\n \"eyebrow\": \"כלי חרס · יפו\",\n \"headline\": \"סטודיו קדר\",\n \"lead\": \"כלי חרס בעבודת יד מסטודיו קטן ביפו.\"\n },\n \"missing\": [\n \"phone\",\n \"city\",\n \"address\",\n \"hours\"\n ],\n \"voice\": {\n \"tone\": \"Warm and plain, like the potter talking at the wheel. Short sentences.\",\n \"person\": \"we\",\n \"formality\": \"casual\",\n \"sample\": \"כל כלי יוצא מהתנור שלנו ביפו, ואין שניים זהים.\",\n \"avoid\": [\n \"מושלם\",\n \"יוקרתי\",\n \"ייצור המוני\"\n ]\n }\n },\n \"plan\": {\n \"homePatterns\": [\n \"hero.split\",\n \"collection.card-grid\",\n \"feature.triad\",\n \"cta.banner\"\n ],\n \"heroHasImage\": true,\n \"facts\": {\n \"email\": \"x\"\n }\n },\n \"said\": [\n {\n \"id\": \"collection\",\n \"name\": \"New pieces\"\n },\n {\n \"id\": \"services\",\n \"name\": \"Friday workshops\"\n },\n {\n \"id\": \"sign-up-form\",\n \"name\": \"Workshop sign-up\"\n }\n ],\n \"read\": {\n \"sources\": [\n {\n \"kind\": \"site\",\n \"ref\": \"harastudio.example\"\n }\n ],\n \"palette\": [\n {\n \"hex\": \"#EFE5D6\",\n \"share\": 0.46\n },\n {\n \"hex\": \"#3B2F2A\",\n \"share\": 0.22\n },\n {\n \"hex\": \"#8E4A2C\",\n \"share\": 0.18\n },\n {\n \"hex\": \"#7A8B6F\",\n \"share\": 0.08\n }\n ],\n \"brand\": \"#8E4A2C\",\n \"ground\": \"light\",\n \"shape\": \"soft\",\n \"density\": \"airy\",\n \"motion\": \"some\",\n \"headings\": \"serif\",\n \"moods\": [\n \"warm\",\n \"crafted\",\n \"calm\"\n ]\n }\n },\n {\n \"id\": \"spa\",\n \"locale\": \"en\",\n \"dir\": \"ltr\",\n \"prompt\": \"Tamar Spa is a small day spa in Haifa: massages, facials and a quiet garden. I want people to see the treatments and prices and book by phone. It should feel calm and natural, nothing flashy, and please no dark backgrounds.\",\n \"business\": {\n \"name\": \"Tamar Spa\",\n \"facts\": {\n \"city\": \"Haifa\"\n }\n },\n \"analysis\": {\n \"businessType\": \"spa\",\n \"alternatives\": [\n \"salon\",\n \"yoga\"\n ],\n \"moods\": [\n \"calm\",\n \"natural\",\n \"elegant\"\n ],\n \"avoid\": [\n \"dark-pages\",\n \"loud-colour\"\n ],\n \"copyLength\": \"standard\",\n \"sentences\": [\n [\n \"The business\",\n \"A small day spa in Haifa with massages, facials and a garden.\",\n \"a small day spa in Haifa\"\n ],\n [\n \"Who it is for\",\n \"Locals who want a quiet few hours; gift buyers.\",\n \"a quiet garden\"\n ],\n [\n \"What the site should do\",\n \"Show treatments and prices, and get people to call to book.\",\n \"book by phone\"\n ],\n [\n \"How it should feel\",\n \"Calm and natural; nothing flashy.\",\n \"calm and natural, nothing flashy\"\n ],\n [\n \"Put first\",\n \"Treatments · Prices · The garden · How to book\",\n \"treatments and prices\"\n ]\n ],\n \"hero\": {\n \"eyebrow\": \"Day spa · Haifa\",\n \"headline\": \"A quiet afternoon in Haifa\",\n \"lead\": \"Massages, facials and a garden to rest in.\"\n },\n \"missing\": [\n \"phone\",\n \"address\",\n \"hours\"\n ],\n \"voice\": {\n \"tone\": \"Soft and unhurried; speaks to the guest.\",\n \"person\": \"we\",\n \"formality\": \"neutral\",\n \"sample\": \"Leave the week at the gate. The garden is quiet until four.\",\n \"avoid\": [\n \"deal\",\n \"hurry\",\n \"cheap\"\n ]\n }\n },\n \"plan\": {\n \"homePatterns\": [\n \"hero.split\",\n \"feature.triad\",\n \"pricing.tiers\",\n \"proof.testimonial-carousel\",\n \"cta.banner\"\n ],\n \"heroHasImage\": true,\n \"facts\": {\n \"city\": \"Haifa\"\n }\n },\n \"said\": [\n {\n \"id\": \"services\",\n \"name\": \"Treatments\"\n },\n {\n \"id\": \"prices\",\n \"name\": \"Prices\"\n }\n ],\n \"read\": {\n \"sources\": [\n {\n \"kind\": \"image\",\n \"ref\": \"garden-terrace.jpg\"\n },\n {\n \"kind\": \"image\",\n \"ref\": \"linen-towels.jpg\"\n }\n ],\n \"palette\": [\n {\n \"hex\": \"#E9DFD3\",\n \"share\": 0.5\n },\n {\n \"hex\": \"#A3B18A\",\n \"share\": 0.2\n },\n {\n \"hex\": \"#4F5E46\",\n \"share\": 0.15\n },\n {\n \"hex\": \"#C9A27E\",\n \"share\": 0.1\n }\n ],\n \"brand\": \"#4F5E46\",\n \"ground\": \"light\",\n \"shape\": \"round\",\n \"density\": \"airy\",\n \"motion\": \"some\",\n \"headings\": \"serif\",\n \"moods\": [\n \"calm\",\n \"natural\",\n \"elegant\"\n ]\n }\n },\n {\n \"id\": \"physio\",\n \"locale\": \"en\",\n \"dir\": \"ltr\",\n \"prompt\": \"Levi Physio — sports and back physiotherapy in Tel Aviv, two therapists. I need a professional, modern site: what we treat, the team, and a way to book an appointment. Patients are mostly runners and office workers.\",\n \"business\": {\n \"name\": \"Levi Physio\",\n \"facts\": {\n \"email\": \"clinic@leviphysio.co.il\",\n \"city\": \"Tel Aviv\"\n }\n },\n \"analysis\": {\n \"businessType\": \"clinic\",\n \"alternatives\": [\n \"fitness\",\n \"therapist\"\n ],\n \"moods\": [\n \"professional\",\n \"trustworthy\",\n \"calm\"\n ],\n \"avoid\": [],\n \"copyLength\": \"standard\",\n \"sentences\": [\n [\n \"The business\",\n \"A physiotherapy clinic in Tel Aviv for sports injuries and back pain, with two therapists.\",\n \"sports and back physiotherapy in Tel Aviv\"\n ],\n [\n \"Who it is for\",\n \"Runners and office workers with pain.\",\n \"mostly runners and office workers\"\n ],\n [\n \"What the site should do\",\n \"Explain what you treat, introduce the team, and get people to book.\",\n \"a way to book an appointment\"\n ],\n [\n \"How it should feel\",\n \"Professional and modern.\",\n \"professional, modern\"\n ],\n [\n \"Put first\",\n \"What we treat · The team · Book an appointment\",\n \"what we treat, the team\"\n ]\n ],\n \"hero\": {\n \"eyebrow\": \"Physiotherapy · Tel Aviv\",\n \"headline\": \"Back to running, sooner\",\n \"lead\": \"Sports and back physiotherapy in Tel Aviv.\"\n },\n \"missing\": [\n \"phone\",\n \"address\",\n \"hours\"\n ],\n \"voice\": {\n \"tone\": \"Clear and confident; plain words a patient understands.\",\n \"person\": \"we\",\n \"formality\": \"neutral\",\n \"sample\": \"We find what is causing the pain, then build a plan to get you moving.\",\n \"avoid\": [\n \"cure\",\n \"guaranteed\",\n \"miracle\"\n ]\n }\n },\n \"plan\": {\n \"homePatterns\": [\n \"hero.split\",\n \"feature.triad\",\n \"faq.accordion\",\n \"cta.banner\"\n ],\n \"heroHasImage\": false,\n \"facts\": {\n \"email\": \"x\",\n \"city\": \"x\"\n }\n },\n \"said\": [\n {\n \"id\": \"services\",\n \"name\": \"What we treat\"\n },\n {\n \"id\": \"team\",\n \"name\": \"The team\"\n },\n {\n \"id\": \"booking-request\",\n \"name\": \"Book an appointment\"\n }\n ],\n \"read\": null\n }\n] as const;\n","import type { DensityId, DesignMotion, MoodId, MotionId, TintId } from '@vectoriox/iox-ui/design-core';\nimport type { FactKey } from '@vectoriox/iox-ui/generation-core';\n\nimport {\n SPEC_BUSINESS_TYPES, SPEC_HARNESS_SOURCE, SPEC_NEEDS, SPEC_STRUCTURES, SPEC_USER_AVOIDS,\n} from './harness-spec.generated';\n\n/**\n * The design harness's knowledge (AI plan rev 3 §3f, H2): the 30 kinds of business IOX serves, each with the\n * styles that suit it (best first, with the reason), its look rules and content rules (one closed grammar,\n * read by the ranker and the lint), its voice, its motion, the pages it needs and its home sections.\n * Generated 1:1 from the contract (`harness`, gated in build-spec.mjs). Seeded from UI UX Pro Max — the\n * attribution travels with the data (`HARNESS_SOURCE.notice`).\n */\nexport const HARNESS_SOURCE = SPEC_HARNESS_SOURCE;\n\n/** What a site may need — the closed list an analysis returns; each maps to the archetype a plan writes. */\nexport type NeedId = keyof typeof SPEC_NEEDS;\nexport const NEED_IDS = Object.keys(SPEC_NEEDS) as ReadonlyArray<NeedId>;\nexport interface NeedDef {\n readonly label: string;\n readonly archetype: string;\n}\nexport const NEEDS: Readonly<Record<NeedId, NeedDef>> = SPEC_NEEDS;\n\n/** What an owner may ask to avoid (\"no dark backgrounds\") — each one look rule. */\nexport type UserAvoidId = keyof typeof SPEC_USER_AVOIDS;\nexport const USER_AVOID_IDS = Object.keys(SPEC_USER_AVOIDS) as ReadonlyArray<UserAvoidId>;\n\n/** The structures a site is built from (Studio · Practice · Place). */\nexport type StructureId = keyof typeof SPEC_STRUCTURES;\nexport const STRUCTURES = SPEC_STRUCTURES;\n\n/** How much a kind of business needs \"book a slot\" — the next product bet (off this road). */\nexport enum BookingNeed {\n Must = 'must',\n Tables = 'tables',\n Sometimes = 'sometimes',\n None = 'none',\n}\n\n/** The content checks of the avoid grammar (a look rule is the other kind). */\nexport enum AvoidCheck {\n NeedsFamily = 'needs-family',\n NeedsFact = 'needs-fact',\n ImageHero = 'image-hero',\n NoPattern = 'no-pattern',\n BrandHue = 'brand-hue',\n CopyLength = 'copy-length',\n}\n\n/** How much text a site carries, shortest first. */\nexport enum CopyLength {\n Short = 'short',\n Standard = 'standard',\n Rich = 'rich',\n}\nexport const COPY_LENGTH_ORDER: ReadonlyArray<`${CopyLength}`> = [CopyLength.Short, CopyLength.Standard, CopyLength.Rich];\n\n/** A look a business should not wear: each named axis lists the values that match (all named axes must). */\nexport interface LookCondition {\n readonly flavor?: ReadonlyArray<string>;\n readonly mode?: ReadonlyArray<string>;\n readonly motion?: ReadonlyArray<MotionId>;\n readonly moods?: ReadonlyArray<MoodId>;\n readonly tint?: ReadonlyArray<TintId>;\n readonly density?: ReadonlyArray<DensityId>;\n readonly scroll?: ReadonlyArray<string>;\n readonly animate?: ReadonlyArray<string>;\n readonly between?: ReadonlyArray<string>;\n}\n\nexport interface LookRule {\n readonly when: LookCondition;\n readonly say: string;\n}\n\nexport type CheckRule =\n | { readonly check: `${AvoidCheck.NeedsFamily}`; readonly family: string; readonly say: string }\n | { readonly check: `${AvoidCheck.NeedsFact}`; readonly fact: FactKey; readonly say: string }\n | { readonly check: `${AvoidCheck.ImageHero}`; readonly say: string }\n | { readonly check: `${AvoidCheck.NoPattern}`; readonly pattern: string; readonly say: string }\n | { readonly check: `${AvoidCheck.BrandHue}`; readonly from: number; readonly to: number; readonly minChroma: number; readonly say: string }\n | { readonly check: `${AvoidCheck.CopyLength}`; readonly max: `${CopyLength}`; readonly say: string };\n\nexport type AvoidRule = LookRule | CheckRule;\n\nexport const isLookRule = (rule: AvoidRule): rule is LookRule => 'when' in rule;\n\nexport interface GoodFit {\n readonly preset: string;\n readonly reason: string;\n /** The reason in Hebrew (2026-10-25). */\n readonly reasonHe: string;\n}\n\nexport interface BusinessType {\n readonly id: string;\n readonly label: string;\n readonly he: string;\n readonly group: string;\n readonly uupm: string;\n /** Keywords (English + Hebrew): the eval's expected answer and the no-model fallback. */\n readonly match: ReadonlyArray<string>;\n /** The styles that suit it, best first, each with why. */\n readonly good: ReadonlyArray<GoodFit>;\n readonly colour: { readonly mood: string; readonly swatches: ReadonlyArray<string> };\n readonly fonts: string;\n readonly tone: string;\n /** The motion TIMING it suits (the design axis — hover lift, durations). */\n readonly motion: MotionId;\n /** How its site usually scrolls, how animated it is and what plays between pages (rev 3.1). */\n readonly moves: Readonly<DesignMotion>;\n /** SC6: the most How animated a GENERATED site of this type may start at (`motionFor`). A Scene needs Expressive,\n * so a type capped below it never gets one. Binds generated output only — the owner may choose any level. */\n readonly ceiling: DesignMotion['animate'];\n readonly imagery: string;\n readonly pages: ReadonlyArray<string>;\n /** The needs its page set implies, in page order (derived from `pages` at contract build). */\n readonly needs: ReadonlyArray<NeedId>;\n /** The home page's sections, library ids. */\n readonly home: ReadonlyArray<string>;\n readonly avoid: ReadonlyArray<AvoidRule>;\n /** Words its copy must not use. */\n readonly words: ReadonlyArray<string>;\n readonly structure: StructureId;\n /** In the M1-alpha slice. */\n readonly slice: boolean;\n /** Stock photos may fill its pictures (never the work itself). */\n readonly stock: boolean;\n readonly booking: `${BookingNeed}`;\n}\n\n/** The 30, in the board's order. Assignment here proves the generated data fits the type. */\nexport const BUSINESS_TYPES: ReadonlyArray<BusinessType> = SPEC_BUSINESS_TYPES;\n\nexport function businessTypeById(id: string | null | undefined): BusinessType | undefined {\n return id ? BUSINESS_TYPES.find(t => t.id === id) : undefined;\n}\n\nexport const BUSINESS_TYPE_IDS: ReadonlyArray<string> = BUSINESS_TYPES.map(t => t.id);\n\n/** The user-avoid rule for an id, or undefined. */\nexport function userAvoidRule(id: string): LookRule | undefined {\n return (SPEC_USER_AVOIDS as Readonly<Record<string, LookRule>>)[id];\n}\n","import type { DesignChoices, DesignMode, DesignMotion, StylePreset } from '@vectoriox/iox-ui/design-core';\n\nimport { LookCondition } from './business-types';\n\n/** The parts of a look a rule can name: the design's choices (motion included) in one colour mode. */\nexport type LookDesign = Pick<DesignChoices, 'flavorId' | 'motion' | 'density'> & Partial<Pick<DesignChoices, 'tint'>>\n & Partial<DesignMotion> & { mode: DesignMode };\n\nconst LIST_AXES = ['flavor', 'mode', 'motion', 'tint', 'density', 'scroll', 'animate', 'between'] as const;\ntype ListAxis = (typeof LIST_AXES)[number];\nconst DESIGN_KEY: Readonly<Record<ListAxis, keyof LookDesign>> = {\n flavor: 'flavorId', mode: 'mode', motion: 'motion', tint: 'tint', density: 'density',\n scroll: 'scroll', animate: 'animate', between: 'between',\n};\n\n/** True when `design` (worn with `moods`) is the look `when` describes — every axis it names must match. */\nexport function lookMatches(when: LookCondition, design: LookDesign, moods: ReadonlyArray<string>): boolean {\n for (const axis of LIST_AXES) {\n const values = when[axis] as ReadonlyArray<string> | undefined;\n if (values && !values.includes(String(design[DESIGN_KEY[axis]] ?? ''))) return false;\n }\n if (when.moods && !when.moods.some(m => moods.includes(m))) return false;\n return true;\n}\n\n/** A style preset as a rule sees it, in `mode` (default: the mode it opens in). */\nexport function presetLook(preset: StylePreset, mode: DesignMode = preset.modes[0]): LookDesign {\n return {\n flavorId: preset.flavorId, motion: preset.motion, density: preset.density, tint: preset.tint, mode,\n ...preset.moves,\n };\n}\n","import { BookingNeed, BUSINESS_TYPES, BusinessType, NeedId } from './business-types';\n\n/** Who asked for a need: the owner named it, or the kind of business needs it (\"we added\"). */\nexport enum NeedSource {\n You = 'you',\n Type = 'type',\n}\n\nexport interface SiteNeed {\n id: NeedId;\n from: `${NeedSource}`;\n /** The owner's own word for it (\"Friday workshops\"). */\n name?: string;\n}\n\n/** The needs that already let a visitor ask for a slot. */\nconst BOOKING_NEEDS: ReadonlyArray<NeedId> = ['booking-request', 'sign-up-form'];\nconst BOOKING_REQUEST: NeedId = 'booking-request';\n\n/**\n * What the site needs (AI plan rev 3 §3d, H3): what the owner named, then what this kind of business needs and\n * they did not name — its page set, in order, and a booking request for a business that must take bookings —\n * each marked `from: 'type'` (the Analysis step's \"we added\"). Pure; an unknown type adds nothing.\n */\nexport function inferNeeds(\n typeId: string | null | undefined,\n said: ReadonlyArray<Omit<SiteNeed, 'from'>> = [],\n types: ReadonlyArray<BusinessType> = BUSINESS_TYPES,\n): SiteNeed[] {\n const type = typeId ? types.find(t => t.id === typeId) : undefined;\n const out: SiteNeed[] = said.map(n => ({ ...n, from: NeedSource.You }));\n const have = new Set<NeedId>(said.map(n => n.id));\n for (const id of type?.needs ?? []) {\n if (have.has(id)) continue;\n have.add(id);\n out.push({ id, from: NeedSource.Type });\n }\n if (type?.booking === BookingNeed.Must && !BOOKING_NEEDS.some(id => have.has(id))) {\n out.push({ id: BOOKING_REQUEST, from: NeedSource.Type });\n }\n return out;\n}\n","import { MOOD_IDS, MoodId } from '@vectoriox/iox-ui/design-core';\nimport {\n describeShapeKey, FACT_KEYS, FactKey, isPlainObject, jsonListOf, jsonOneOf, JsonSchema, jsonShapedObject, jsonText,\n PathIssue, PathIssueCollector, pathAt, PlainObject, requiredShapeKeys, ShapeEntry, shapeKeys,\n} from '@vectoriox/iox-ui/generation-core';\n\nimport { BUSINESS_TYPE_IDS, NEED_IDS, USER_AVOID_IDS, UserAvoidId } from './business-types';\nimport { SPEC_ANALYSIS_SHAPE } from './harness-spec.generated';\nimport { NeedSource, SiteNeed } from './needs';\n\n/**\n * What the reading of a prompt returns (AI plan rev 3 §3d): one of the 30 kinds of business (and the two\n * nearest), who it is for, what the site needs, the facts the prompt STATES (each with the words it came from)\n * and those it does not, the owner's voice, moods, what they asked to avoid, a hero line, the language. A model\n * writes it; `validateSiteAnalysis` is the gate — it refuses with a path and never repairs (a model gets the\n * issues back and rewrites; the caller decides what to drop).\n */\n\nexport enum AnalysisLocale {\n He = 'he',\n En = 'en',\n}\nexport enum VoicePerson {\n We = 'we',\n I = 'I',\n}\nexport enum VoiceFormality {\n Casual = 'casual',\n Neutral = 'neutral',\n Formal = 'formal',\n}\n\nexport interface FactRead {\n value: string;\n /** The words of the prompt it came from — checked: every quote is in the prompt. */\n quote: string;\n}\n\nexport interface SiteAnalysis {\n businessType: string;\n alternatives: [string, string];\n business: { name: string; audience: string };\n needs: SiteNeed[];\n facts: Partial<Record<FactKey, FactRead>>;\n missingFacts: FactKey[];\n voice: { tone: string; person: `${VoicePerson}`; formality: `${VoiceFormality}`; avoidWords: string[] };\n moods: MoodId[];\n avoid: UserAvoidId[];\n hero: { headline: string; lead: string };\n locale: `${AnalysisLocale}`;\n}\n\nexport enum AnalysisIssueCode {\n Shape = 'shape',\n UnknownKey = 'unknown-key',\n Duplicate = 'duplicate',\n UnknownBusinessType = 'unknown-business-type',\n UnknownNeed = 'unknown-need',\n UnknownFact = 'unknown-fact',\n /** A fact's quote is not words of the prompt: it was not stated, so it may not be filled. */\n QuoteNotInPrompt = 'quote-not-in-prompt',\n /** A fact reported both found and missing. */\n FactFoundAndMissing = 'fact-found-and-missing',\n UnknownMood = 'unknown-mood',\n TooManyMoods = 'too-many-moods',\n UnknownAvoid = 'unknown-avoid',\n InvalidValue = 'invalid-value',\n}\n\nexport type AnalysisIssue = PathIssue<AnalysisIssueCode>;\n\nexport interface AnalysisValidation {\n valid: boolean;\n issues: AnalysisIssue[];\n}\n\nexport interface AnalysisContext {\n /** The owner's own words — every fact's quote must be found in them. */\n prompt: string;\n}\n\n/** At most this many moods (the closed list a preset carries too). */\nexport const MAX_ANALYSIS_MOODS = 3;\nconst ALTERNATIVES = 2;\n\nconst SHAPE: Readonly<Record<string, ShapeEntry>> = SPEC_ANALYSIS_SHAPE;\nconst KEYS = Object.fromEntries(Object.keys(SHAPE).map(k => [k, shapeKeys(SHAPE[k])])) as Record<string, string[]>;\nconst REQUIRED = Object.fromEntries(Object.keys(SHAPE).map(k => [k, requiredShapeKeys(SHAPE[k])])) as Record<string, string[]>;\n\nclass Collector extends PathIssueCollector<AnalysisIssueCode> {\n constructor() {\n super('analysis', { shape: AnalysisIssueCode.Shape, unknownKey: AnalysisIssueCode.UnknownKey, duplicate: AnalysisIssueCode.Duplicate });\n }\n /** An object of `shape` at `path`: no unknown key, every required key present. */\n object(value: unknown, shape: string, path: string): PlainObject | null {\n if (!isPlainObject(value)) { this.add(AnalysisIssueCode.Shape, path, 'must be an object'); return null; }\n this.keys(value, KEYS[shape], path);\n for (const key of REQUIRED[shape]) if (value[key] === undefined) this.add(AnalysisIssueCode.Shape, pathAt(path, key), 'is required');\n return value;\n }\n oneOf(obj: PlainObject, key: string, allowed: ReadonlyArray<string>, path: string, code = AnalysisIssueCode.InvalidValue): void {\n const v = obj[key];\n if (v !== undefined && (typeof v !== 'string' || !allowed.includes(v))) this.add(code, pathAt(path, key), `must be one of ${allowed.join(', ')}`);\n }\n strings(obj: PlainObject, key: string, path: string): string[] {\n const list = this.array(obj, key, path);\n list.forEach((v, i) => { if (typeof v !== 'string') this.add(AnalysisIssueCode.Shape, `${pathAt(path, key)}[${i}]`, 'must be a string'); });\n return list.filter((v): v is string => typeof v === 'string');\n }\n}\n\n/** Whitespace and case never decide whether words are the prompt's. */\nconst normalise = (s: string) => s.toLowerCase().replace(/\\s+/g, ' ').trim();\n\nexport function validateSiteAnalysis(value: unknown, ctx: AnalysisContext): AnalysisValidation {\n const c = new Collector();\n const a = c.object(value, 'analysis', '');\n if (!a) return { valid: false, issues: c.issues };\n\n c.oneOf(a, 'businessType', BUSINESS_TYPE_IDS, '', AnalysisIssueCode.UnknownBusinessType);\n const alternatives = c.strings(a, 'alternatives', '');\n if (Array.isArray(a['alternatives']) && a['alternatives'].length !== ALTERNATIVES) c.add(AnalysisIssueCode.Shape, 'alternatives', `must name ${ALTERNATIVES} business types`);\n alternatives.forEach((id, i) => {\n if (!BUSINESS_TYPE_IDS.includes(id)) c.add(AnalysisIssueCode.UnknownBusinessType, `alternatives[${i}]`, `\"${id}\" is not a business type`);\n else if (id === a['businessType']) c.add(AnalysisIssueCode.Duplicate, `alternatives[${i}]`, 'is the business type itself');\n });\n\n const business = c.object(a['business'], 'business', 'business');\n if (business) { c.string(business, 'name', 'business'); c.string(business, 'audience', 'business'); }\n\n const needs = c.array(a, 'needs', '');\n c.unique(needs.map(n => (isPlainObject(n) && typeof n['id'] === 'string' ? n['id'] : null)), i => `needs[${i}].id`, 'need');\n needs.forEach((raw, i) => {\n const path = `needs[${i}]`;\n const need = c.object(raw, 'need', path);\n if (!need) return;\n c.oneOf(need, 'id', NEED_IDS, path, AnalysisIssueCode.UnknownNeed);\n c.oneOf(need, 'from', Object.values(NeedSource), path);\n c.string(need, 'name', path, false);\n });\n\n const promptWords = normalise(ctx.prompt ?? '');\n const found = new Set<string>();\n if (!isPlainObject(a['facts'])) c.add(AnalysisIssueCode.Shape, 'facts', 'must be an object');\n else for (const [key, raw] of Object.entries(a['facts'])) {\n const path = `facts.${key}`;\n if (!(FACT_KEYS as ReadonlyArray<string>).includes(key)) { c.add(AnalysisIssueCode.UnknownFact, path, `\"${key}\" is not a fact (${FACT_KEYS.join(', ')})`); continue; }\n const fact = c.object(raw, 'factRead', path);\n if (!fact) continue;\n c.string(fact, 'value', path);\n const quote = c.string(fact, 'quote', path);\n if (quote && !promptWords.includes(normalise(quote))) c.add(AnalysisIssueCode.QuoteNotInPrompt, pathAt(path, 'quote'), 'is not words of the prompt — a fact the prompt does not state is missing, never filled');\n found.add(key);\n }\n c.strings(a, 'missingFacts', '').forEach((key, i) => {\n if (!(FACT_KEYS as ReadonlyArray<string>).includes(key)) c.add(AnalysisIssueCode.UnknownFact, `missingFacts[${i}]`, `\"${key}\" is not a fact`);\n else if (found.has(key)) c.add(AnalysisIssueCode.FactFoundAndMissing, `missingFacts[${i}]`, `\"${key}\" is also in facts`);\n });\n\n const voice = c.object(a['voice'], 'voice', 'voice');\n if (voice) {\n c.string(voice, 'tone', 'voice');\n c.oneOf(voice, 'person', Object.values(VoicePerson), 'voice');\n c.oneOf(voice, 'formality', Object.values(VoiceFormality), 'voice');\n c.strings(voice, 'avoidWords', 'voice');\n }\n\n const moods = c.strings(a, 'moods', '');\n if (moods.length > MAX_ANALYSIS_MOODS) c.add(AnalysisIssueCode.TooManyMoods, 'moods', `at most ${MAX_ANALYSIS_MOODS}`);\n moods.forEach((m, i) => { if (!(MOOD_IDS as ReadonlyArray<string>).includes(m)) c.add(AnalysisIssueCode.UnknownMood, `moods[${i}]`, `\"${m}\" is not a mood`); });\n c.strings(a, 'avoid', '').forEach((id, i) => {\n if (!(USER_AVOID_IDS as ReadonlyArray<string>).includes(id)) c.add(AnalysisIssueCode.UnknownAvoid, `avoid[${i}]`, `\"${id}\" is not something an owner may ask to avoid`);\n });\n\n const hero = c.object(a['hero'], 'hero', 'hero');\n if (hero) { c.string(hero, 'headline', 'hero'); c.string(hero, 'lead', 'hero'); }\n c.oneOf(a, 'locale', Object.values(AnalysisLocale), '');\n\n return { valid: c.issues.length === 0, issues: c.issues };\n}\n\n/**\n * The structured-output schema a model is given to write a `SiteAnalysis` (AI plan §3c/§3d, M0-5): built from the\n * SAME shape table `validateSiteAnalysis` reads (keys, which are required, each key's explanation as its\n * description) and the same closed lists (30 business types, needs, facts, moods, avoids) — so the shape the model\n * is told about is the shape the gate refuses. Written to the strictest common subset of JSON Schema the providers'\n * native strict modes accept (Anthropic `output_config.format`, OpenRouter `json_schema` + `strict`): every object\n * closes with `additionalProperties: false`; no length, count or number bounds (the gate checks those). The\n * schema is a hint the provider enforces; `validateSiteAnalysis` stays the gate.\n *\n * ONE difference from the document, the plan wire's rule \"maps as lists\" (vectoriox/iox-cms#47 — Claude refuses a\n * grammar compiled too large, and a map of the five facts, each `{ value, quote }`, was 15 of the reading's 47\n * properties): on the wire `facts` is a list `[{ fact, value, quote }]`, a stated fact once each. `analysisFromWire`\n * makes it the map `validateSiteAnalysis` judges; `analysisToWire` is its inverse (fakes and specs write it).\n */\n\nexport type { JsonSchema } from '@vectoriox/iox-ui/generation-core';\n\n/** The name a provider shows the format under (`json_schema.name`). */\nexport const SITE_ANALYSIS_SCHEMA_NAME = 'site_analysis';\n\nconst text = jsonText;\nconst oneOf = jsonOneOf;\nconst listOf = jsonListOf;\n\n/** An object of `shape`: exactly its keys, its required ones required, each described by the table. */\nconst shaped = (shape: string, properties: Record<string, JsonSchema>): JsonSchema => jsonShapedObject(SHAPE[shape], properties, shape);\n\n/** A stated fact on the wire: which fact, then the document's `factRead` keys in the table's own words. */\nconst FACT_LINE_SHAPE: ShapeEntry = {\n fact: `${FACT_KEYS.map(k => `'${k}'`).join(' | ')} — which fact (site.facts), each at most once`,\n ...SHAPE['factRead'],\n};\n\n/** The analysis as the wire carries it: `facts` a list of fact lines, described in the table's words. */\nconst ANALYSIS_WIRE_SHAPE: ShapeEntry = {\n ...SHAPE['analysis'],\n facts: `factLine[] — ${describeShapeKey(SHAPE['analysis'], 'facts').replace(/^\\{ \\[fact\\]: factRead \\} — /, '')}`,\n};\n\nexport function siteAnalysisJsonSchema(): JsonSchema {\n const factLine = jsonShapedObject(FACT_LINE_SHAPE, { fact: oneOf(FACT_KEYS), value: text(), quote: text() }, 'factLine');\n return jsonShapedObject(ANALYSIS_WIRE_SHAPE, {\n businessType: oneOf(BUSINESS_TYPE_IDS),\n alternatives: listOf(oneOf(BUSINESS_TYPE_IDS)),\n business: shaped('business', { name: text(), audience: text() }),\n needs: listOf(shaped('need', { id: oneOf(NEED_IDS), from: oneOf(Object.values(NeedSource)), name: text() })),\n facts: listOf(factLine),\n missingFacts: listOf(oneOf(FACT_KEYS)),\n voice: shaped('voice', {\n tone: text(),\n person: oneOf(Object.values(VoicePerson)),\n formality: oneOf(Object.values(VoiceFormality)),\n avoidWords: listOf(text()),\n }),\n moods: listOf(oneOf(MOOD_IDS)),\n avoid: listOf(oneOf(USER_AVOID_IDS)),\n hero: shaped('hero', { headline: text(), lead: text() }),\n locale: oneOf(Object.values(AnalysisLocale)),\n }, 'analysis');\n}\n\n/** A model's analysis (the wire) → the document, and the faults only the wire can have (a fact stated twice). Never repairs. */\nexport function analysisFromWire(wire: unknown): { analysis: unknown; issues: AnalysisIssue[] } {\n if (!isPlainObject(wire)) return { analysis: wire, issues: [] };\n if (!Array.isArray(wire['facts'])) return { analysis: wire, issues: [{ code: AnalysisIssueCode.Shape, path: 'facts', message: 'must be a list of { fact, value, quote }' }] };\n const facts: PlainObject = {};\n const issues: AnalysisIssue[] = [];\n (wire['facts'] as unknown[]).forEach((line, i) => {\n if (!isPlainObject(line) || typeof line['fact'] !== 'string') {\n issues.push({ code: AnalysisIssueCode.Shape, path: `facts[${i}]`, message: 'must be { fact, value, quote }' });\n return;\n }\n const { fact, ...read } = line;\n if (fact in facts) issues.push({ code: AnalysisIssueCode.Duplicate, path: `facts[${i}].fact`, message: `\"${fact}\" is stated twice` });\n else facts[fact as string] = read;\n });\n return { analysis: { ...wire, facts }, issues };\n}\n\n/** The document → the wire (what a model writes). */\nexport function analysisToWire(analysis: SiteAnalysis): PlainObject {\n return { ...analysis, facts: Object.entries(analysis.facts).map(([fact, read]) => ({ fact, ...read })) };\n}\n","import {\n DensityId, flavorPackById, MOOD_LABELS, MoodId, parseFontFamilies, ShapeId, SPEC_FLAVORS, STYLE_PRESETS, StylePreset, TintId,\n} from '@vectoriox/iox-ui/design-core';\nimport type { AnimateId } from '@vectoriox/iox-ui/design-core';\n\nimport { AvoidRule, BUSINESS_TYPES, BusinessType, isLookRule, LookRule, userAvoidRule } from './business-types';\nimport { lookMatches, presetLook } from './look';\nimport { AnalysisLocale } from './site-analysis';\n\n/**\n * Which styles suit a business, best first (AI plan rev 3 §3f, H3) — Design ▸ Look's order. Pure and\n * deterministic: the browser and the server give the same order, and the eval asserts it.\n */\n\n/** What the ranker reads of an analysis. */\nexport interface RankInput {\n businessType?: string | null;\n moods?: ReadonlyArray<string>;\n /** What the owner asked to avoid (`USER_AVOID_IDS`). */\n avoid?: ReadonlyArray<string>;\n}\n\nexport enum PresetFit {\n Good = 'good',\n Ok = 'ok',\n Poor = 'poor',\n}\n\n/** Why a style sits where it does — the line Design ▸ Look shows. */\nexport enum RankReason {\n /** The business type names it as a good fit (`reason` = the type's line). */\n GoodFit = 'good-fit',\n /** A type rule advises against its look (`reason` = the rule's line). */\n TypeAvoid = 'type-avoid',\n /** The owner asked to avoid its look (`reason` = the rule's line). */\n UserAvoid = 'user-avoid',\n /** It shares the analysis's moods (`sharedMoods`). */\n SharedMoods = 'shared-moods',\n None = 'none',\n}\n\nexport interface RankedPreset {\n id: string;\n fit: PresetFit;\n score: number;\n reasonKind: RankReason;\n /** In English, from the contract (the UI may localise `reasonKind` + `sharedMoods` instead). */\n reason: string;\n /** A good fit's reason in Hebrew (the contract has Hebrew for good fits; `presetReason` picks). */\n reasonHe?: string;\n sharedMoods: MoodId[];\n /** Catalogue position — ties keep it. */\n order: number;\n /** With references (`rankWithReferences`): the boost the reading gave it, and whether it is the nearest. */\n refBoost?: number;\n nearest?: boolean;\n}\n\n/** The ranking's weights: the type's own order, then moods, then motion character, minus what is advised against. */\nexport const RANK_WEIGHTS = {\n firstGoodFit: 100,\n goodFitStep: 10,\n sharedMood: 6,\n sharedMove: 2,\n typeAvoid: 60,\n userAvoid: 80,\n} as const;\n\nconst MOVE_KEYS = ['scroll', 'animate', 'between'] as const;\n\n/**\n * The rule among `rules` that `preset`'s look matches — in EVERY mode it offers (a preset that can switch to a\n * mode escaping a mode-only rule is judged in that mode: Night gallery offers light). The rule reported is the\n * one its default mode matches.\n */\nfunction ruleHit(preset: StylePreset, rules: ReadonlyArray<LookRule>): LookRule | null {\n for (const mode of preset.modes) {\n if (!rules.some(r => lookMatches(r.when, presetLook(preset, mode), preset.moods))) return null;\n }\n return rules.find(r => lookMatches(r.when, presetLook(preset), preset.moods)) ?? null;\n}\n\nconst lookRules = (rules: ReadonlyArray<AvoidRule>): LookRule[] => rules.filter(isLookRule);\n\nfunction moodsLine(moods: ReadonlyArray<MoodId>): string {\n return `${moods.map(m => MOOD_LABELS[m]).join(' and ')}, like your description.`;\n}\n\n/**\n * Every preset, best first: score = the type's own order (a good fit 100, 90, 80…) + 6 per mood shared with\n * the analysis + 2 per motion choice shared with the type, − 60 for a look the type advises against, − 80 for\n * one the owner said to avoid. Ties keep catalogue order. With no matching type, moods alone order them.\n */\nexport function rankStylePresets(\n input: RankInput,\n presets: ReadonlyArray<StylePreset> = STYLE_PRESETS,\n types: ReadonlyArray<BusinessType> = BUSINESS_TYPES,\n): RankedPreset[] {\n const type = input.businessType ? types.find(t => t.id === input.businessType) : undefined;\n const typeRules = type ? lookRules(type.avoid) : [];\n const userRules = (input.avoid ?? []).map(userAvoidRule).filter((r): r is LookRule => !!r);\n const moods = input.moods ?? [];\n return presets.map((preset, order) => {\n const goodAt = type ? type.good.findIndex(g => g.preset === preset.id) : -1;\n const sharedMoods = preset.moods.filter(m => moods.includes(m));\n let score = goodAt >= 0 ? RANK_WEIGHTS.firstGoodFit - RANK_WEIGHTS.goodFitStep * goodAt : 0;\n score += RANK_WEIGHTS.sharedMood * sharedMoods.length;\n if (type) score += RANK_WEIGHTS.sharedMove * MOVE_KEYS.filter(k => preset.moves[k] === type.moves[k]).length;\n const typeHit = ruleHit(preset, typeRules);\n const userHit = ruleHit(preset, userRules);\n if (typeHit) score -= RANK_WEIGHTS.typeAvoid;\n if (userHit) score -= RANK_WEIGHTS.userAvoid;\n const fit = typeHit || userHit ? PresetFit.Poor : goodAt >= 0 ? PresetFit.Good : PresetFit.Ok;\n const [reasonKind, reason] = userHit ? [RankReason.UserAvoid, userHit.say]\n : typeHit ? [RankReason.TypeAvoid, typeHit.say]\n : goodAt >= 0 && type ? [RankReason.GoodFit, type.good[goodAt].reason]\n : sharedMoods.length ? [RankReason.SharedMoods, moodsLine(sharedMoods)]\n : [RankReason.None, ''];\n const reasonHe = reasonKind === RankReason.GoodFit && type ? type.good[goodAt].reasonHe : undefined;\n return { id: preset.id, fit, score, reasonKind, reason, ...(reasonHe ? { reasonHe } : {}), sharedMoods, order };\n }).sort((a, b) => b.score - a.score || a.order - b.order);\n}\n\n/**\n * The line a style's card shows (its title): why it sits where it does, else what the style is — in the studio's\n * language where the contract has it. Decided 2026-10-25: good fits and descriptions have Hebrew (the name stays a\n * proper name); a type's or the owner's advice and the shared-moods line are English in the contract yet.\n */\nexport function presetReason(ranked: RankedPreset, preset: StylePreset | undefined, locale: string | null | undefined): string {\n const hebrew = locale === AnalysisLocale.He;\n if (hebrew && ranked.reasonKind === RankReason.GoodFit && ranked.reasonHe) return ranked.reasonHe;\n if (ranked.reason) return ranked.reason;\n return (hebrew ? preset?.blurbHe : preset?.blurb) ?? '';\n}\n\n/** One flavor's styles in Design ▸ Look: its presets in ranking order. */\nexport interface PresetFlavorGroup {\n flavorId: string;\n presets: RankedPreset[];\n}\n\n/**\n * Design ▸ Look's grid (decided 2026-10-28, Doron: \"All 24, grouped by flavor\" — reverses Q7 and the wizard's best 6):\n * every ranked style under its flavor, the flavors in catalogue order (Crisp · Linen · Midnight · Glass · Bloom · Pop),\n * each flavor's styles best-ranked first. A ranking with no basis (no business, no moods) is catalogue order, so the\n * groups are too. One rule for both hosts.\n */\nexport function presetsByFlavor(\n ranked: ReadonlyArray<RankedPreset>,\n presets: ReadonlyArray<StylePreset> = STYLE_PRESETS,\n flavors: ReadonlyArray<{ id: string }> = SPEC_FLAVORS,\n): PresetFlavorGroup[] {\n const flavorOf = new Map(presets.map(p => [p.id, p.flavorId]));\n return flavors\n .map(f => ({ flavorId: f.id, presets: ranked.filter(r => flavorOf.get(r.id) === f.id) }))\n .filter(g => g.presets.length > 0);\n}\n\n/** The style the ranking puts first — only when it had something to rank by (a positive score); else none is \"best\". */\nexport function bestRankedPreset(ranked: ReadonlyArray<RankedPreset>): string | null {\n const top = ranked[0];\n return top && top.score > 0 ? top.id : null;\n}\n\n// ── References: a reading of pictures or a site, as style (plan §3k, R4) ─────────────────────────────────\nexport enum StyleReadSourceKind {\n Image = 'image',\n Site = 'site',\n}\nexport enum StyleReadGround {\n Light = 'light',\n Dark = 'dark',\n Mixed = 'mixed',\n}\nexport enum StyleReadMotion {\n None = 'none',\n Some = 'some',\n Lots = 'lots',\n}\nexport enum StyleReadHeadings {\n Serif = 'serif',\n Sans = 'sans',\n Display = 'display',\n Mono = 'mono',\n}\n\n/** What a reader measured (palette) and saw (moods, shape…) — never their CSS, text or pictures. */\nexport interface StyleRead {\n sources: ReadonlyArray<{ kind: `${StyleReadSourceKind}`; ref: string }>;\n /** ≤ 6, MEASURED, never asked of a model. */\n palette: ReadonlyArray<{ hex: string; share: number }>;\n /** The most frequent saturated colour — a CANDIDATE seed: the AA audit decides. */\n brand?: string;\n ground: `${StyleReadGround}`;\n shape?: ShapeId;\n density?: DensityId;\n motion?: `${StyleReadMotion}`;\n headings?: `${StyleReadHeadings}`;\n moods: ReadonlyArray<MoodId>;\n}\n\n/** The boosts a reading gives each preset, and the defaults it suggests. */\nexport interface StyleHints {\n boost: Record<string, number>;\n seed: string | null;\n tint: TintId;\n shape?: ShapeId;\n density?: DensityId;\n animate: AnimateId | null;\n}\n\nexport const READ_WEIGHTS = {\n sharedMood: 8,\n ground: 10,\n shape: 6,\n density: 4,\n serifHeadings: 6,\n} as const;\n\n/** How much motion a reading saw → How animated. */\nexport const READ_ANIMATE: Readonly<Record<`${StyleReadMotion}`, AnimateId>> = {\n [StyleReadMotion.None]: 'still',\n [StyleReadMotion.Some]: 'subtle',\n [StyleReadMotion.Lots]: 'standard',\n};\n\nconst SERIF_GENERIC = 'serif';\n\n/** True when the preset's pairing sets headings in a serif (its display stack ends in the serif generic). */\nexport function presetHasSerifHeadings(preset: StylePreset): boolean {\n const pair = flavorPackById(preset.flavorId)?.pairs.find(p => p.id === preset.pairId);\n return parseFontFamilies(pair?.tokens['font-display'] ?? '').includes(SERIF_GENERIC);\n}\n\n/** A reading → a score boost per preset and the defaults it suggests (pure, deterministic). */\nexport function mapStyleRead(read: StyleRead, presets: ReadonlyArray<StylePreset> = STYLE_PRESETS): StyleHints {\n const boost: Record<string, number> = {};\n for (const p of presets) {\n let b = READ_WEIGHTS.sharedMood * p.moods.filter(m => read.moods.includes(m)).length;\n if (read.ground !== StyleReadGround.Mixed && p.modes[0] === read.ground) b += READ_WEIGHTS.ground;\n if (read.shape && p.shape === read.shape) b += READ_WEIGHTS.shape;\n if (read.density && p.density === read.density) b += READ_WEIGHTS.density;\n if (read.headings === StyleReadHeadings.Serif && presetHasSerifHeadings(p)) b += READ_WEIGHTS.serifHeadings;\n boost[p.id] = b;\n }\n return {\n boost,\n seed: read.brand ?? null,\n tint: read.palette.length && read.ground === StyleReadGround.Light ? 'subtle' : 'neutral',\n ...(read.shape ? { shape: read.shape } : {}),\n ...(read.density ? { density: read.density } : {}),\n animate: read.motion ? READ_ANIMATE[read.motion] : null,\n };\n}\n\n/** `rankStylePresets` + the reading's boost; `nearest` = the best-boosted style that is not a poor fit. */\nexport function rankWithReferences(\n input: RankInput,\n read: StyleRead | null | undefined,\n presets: ReadonlyArray<StylePreset> = STYLE_PRESETS,\n types: ReadonlyArray<BusinessType> = BUSINESS_TYPES,\n): RankedPreset[] {\n const ranked = rankStylePresets(input, presets, types);\n if (!read) return ranked;\n const { boost } = mapStyleRead(read, presets);\n const out = ranked.map(x => ({ ...x, score: x.score + (boost[x.id] ?? 0), refBoost: boost[x.id] ?? 0 }))\n .sort((a, b) => b.score - a.score || a.order - b.order);\n const nearest = out.filter(x => x.fit !== PresetFit.Poor)\n .reduce<RankedPreset | null>((a, b) => (!a || (b.refBoost ?? 0) > (a.refBoost ?? 0) ? b : a), null);\n return out.map(x => ({ ...x, nearest: !!nearest && x.id === nearest.id }));\n}\n","import { DesignMotion, SPEC_AXES, STYLE_PRESETS, StylePreset } from '@vectoriox/iox-ui/design-core';\n\nimport { BUSINESS_TYPES, BusinessType } from './business-types';\nimport { READ_ANIMATE, StyleRead } from './rank';\n\n/**\n * Where Design ▸ Motion starts (AI plan rev 3.1 §3p, MO-D3) — and what \"Build with these\" takes. Pure.\n * Scrolling and Between pages are the BUSINESS's (a spa scrolls softly whatever its look); How animated is the\n * CALMER of the business's (or what the references show) and the style's — so a quiet serif look never gets\n * bouncing cards. The owner's \"little movement\" caps all three. No matching type → the style's own.\n */\n\nexport interface MotionInput {\n businessType?: string | null;\n avoid?: ReadonlyArray<string>;\n}\n\n/** Where the start came from, structured (the screen words it in its own language). */\nexport interface MotionBasis {\n /** The kind of business it started from (null: no type matched, the style's own). */\n type: string | null;\n /** The style made How animated calmer than the business (or the references) wanted. */\n calmerStyle: boolean;\n /** The references set How animated. */\n references: boolean;\n /** The owner asked for little movement: all three were capped. */\n littleMovement: boolean;\n /** SC6: How animated was held at the type's ceiling (a law firm stays calm whatever the style or references). */\n ceiling: boolean;\n}\n\nexport interface MotionStart extends DesignMotion {\n /** Why, in English — one line per step the start took. */\n why: string[];\n basis: MotionBasis;\n}\n\n/** The owner asked for little movement (`USER_AVOID_IDS`). */\nexport const LITTLE_MOVEMENT_AVOID = 'lots-of-motion';\n/** What \"little movement\" caps each choice at. */\nexport const LITTLE_MOVEMENT_CAP: Readonly<DesignMotion> = { scroll: 'smooth', animate: 'subtle', between: 'fade' };\n\ntype Axis = keyof DesignMotion;\nconst TABLES = { scroll: SPEC_AXES.scrolls, animate: SPEC_AXES.animations, between: SPEC_AXES.betweens } as const;\nconst ORDER: Readonly<Record<Axis, ReadonlyArray<string>>> = {\n scroll: Object.keys(SPEC_AXES.scrolls), animate: Object.keys(SPEC_AXES.animations), between: Object.keys(SPEC_AXES.betweens),\n};\n\n/** The stiller of two choices on one axis (the axes are ordered stillest first). */\nexport function calmerChoice<A extends Axis>(axis: A, a: DesignMotion[A], b: DesignMotion[A]): DesignMotion[A] {\n return ORDER[axis].indexOf(a) <= ORDER[axis].indexOf(b) ? a : b;\n}\n\nconst label = (axis: Axis, id: string) => (TABLES[axis] as Readonly<Record<string, { label: string }>>)[id]?.label ?? id;\nconst triple = (m: DesignMotion) => `${label('scroll', m.scroll)} · ${label('animate', m.animate)} · ${label('between', m.between)}`;\n\nexport function motionFor(\n input: MotionInput,\n presetId: string,\n read: StyleRead | null = null,\n types: ReadonlyArray<BusinessType> = BUSINESS_TYPES,\n presets: ReadonlyArray<StylePreset> = STYLE_PRESETS,\n): MotionStart {\n const type = input.businessType ? types.find(t => t.id === input.businessType) : undefined;\n const preset = presets.find(p => p.id === presetId) ?? presets[0];\n const base = type ? type.moves : preset.moves;\n const ref = read?.motion ? READ_ANIMATE[read.motion] : null;\n const wanted = ref ?? base.animate;\n let out: DesignMotion = { scroll: base.scroll, animate: calmerChoice('animate', wanted, preset.moves.animate), between: base.between };\n const why = [type ? `${type.label}: ${triple(base)}` : `${preset.name}: the style's own`];\n const basis: MotionBasis = { type: type?.id ?? null, calmerStyle: out.animate !== wanted, references: !!(ref && type), littleMovement: false, ceiling: false };\n if (basis.calmerStyle) why.push(`${preset.name} moves less (${label('animate', preset.moves.animate)})`);\n if (basis.references) why.push(`your references: ${label('animate', ref!)}`);\n if (type && calmerChoice('animate', out.animate, type.ceiling) !== out.animate) {\n out = { ...out, animate: type.ceiling };\n basis.ceiling = true;\n why.push(`${type.label} goes no further than ${label('animate', type.ceiling)}`);\n }\n if ((input.avoid ?? []).includes(LITTLE_MOVEMENT_AVOID)) {\n basis.littleMovement = true;\n out = {\n scroll: calmerChoice('scroll', out.scroll, LITTLE_MOVEMENT_CAP.scroll),\n animate: calmerChoice('animate', out.animate, LITTLE_MOVEMENT_CAP.animate),\n between: calmerChoice('between', out.between, LITTLE_MOVEMENT_CAP.between),\n };\n why.push('you asked for little movement');\n }\n return { ...out, why, basis };\n}\n","import { AnimateId, DesignChoices, DesignMotion, parseHexColor, rgbToOklab, SPEC_AXES } from '@vectoriox/iox-ui/design-core';\nimport type { FactKey } from '@vectoriox/iox-ui/generation-core';\n\nimport { AvoidCheck, BUSINESS_TYPES, BusinessType, COPY_LENGTH_ORDER, CopyLength, isLookRule } from './business-types';\nimport { lookMatches } from './look';\n\n/**\n * Design advice (AI plan rev 3 §3f, H5's core): the business type's avoid rules run against a built site's\n * look, home sections, facts and copy length. ADVICE only — Needs attention and the Publish dialog show it,\n * \"Keep it\" dismisses it, and nothing is ever refused on it (H-D9).\n */\n\nexport enum LintKind {\n Look = 'look',\n Content = 'content',\n Fact = 'fact',\n}\n\nexport interface LintFinding {\n kind: LintKind;\n say: string;\n fact?: FactKey;\n}\n\n/** What the lint reads of a site. */\nexport interface LintSite {\n design: Pick<DesignChoices, 'flavorId' | 'seed' | 'motion' | 'density' | 'mode'> & Partial<Pick<DesignChoices, 'tint'>> & Partial<DesignMotion>;\n moods?: ReadonlyArray<string>;\n /** The home page's section patterns. */\n homePatterns?: ReadonlyArray<string>;\n /** Every page's section patterns (defaults to the home page's). */\n allPatterns?: ReadonlyArray<string>;\n facts?: Partial<Record<FactKey, string>>;\n copyLength?: `${CopyLength}`;\n heroHasImage?: boolean;\n}\n\nconst DEGREES = 180 / Math.PI;\nconst FULL_TURN = 360;\n/** How far a site may move above what its kind of business usually wears before the lint says so. */\nexport const ANIMATE_ADVICE_STEPS = 2;\nconst ANIMATE_ORDER = Object.keys(SPEC_AXES.animations);\n\n/** A colour's OKLCH hue (degrees) and chroma, through design-core's one OKLab conversion. */\nexport function oklchHue(hex: string): { hue: number; chroma: number } | null {\n const rgb = parseHexColor(hex);\n if (!rgb) return null;\n const { a, b } = rgbToOklab(rgb);\n return { hue: (Math.atan2(b, a) * DEGREES + FULL_TURN) % FULL_TURN, chroma: Math.hypot(a, b) };\n}\n\nconst familyOf = (patternId: string) => patternId.split('.')[0];\n\nexport function lintDesign(site: LintSite, typeId: string, types: ReadonlyArray<BusinessType> = BUSINESS_TYPES): LintFinding[] {\n const type = types.find(t => t.id === typeId);\n if (!type) return [];\n const out: LintFinding[] = [];\n const home = site.homePatterns ?? [];\n const all = site.allPatterns ?? home;\n for (const rule of type.avoid) {\n if (isLookRule(rule)) {\n if (lookMatches(rule.when, site.design, site.moods ?? [])) out.push({ kind: LintKind.Look, say: rule.say });\n continue;\n }\n switch (rule.check) {\n case AvoidCheck.NeedsFamily:\n if (!home.some(id => familyOf(id) === rule.family)) out.push({ kind: LintKind.Content, say: rule.say });\n break;\n case AvoidCheck.NeedsFact:\n if (!site.facts?.[rule.fact]) out.push({ kind: LintKind.Fact, say: rule.say, fact: rule.fact });\n break;\n case AvoidCheck.ImageHero:\n if (!site.heroHasImage) out.push({ kind: LintKind.Content, say: rule.say });\n break;\n case AvoidCheck.NoPattern:\n if (all.includes(rule.pattern)) out.push({ kind: LintKind.Content, say: rule.say });\n break;\n case AvoidCheck.CopyLength:\n if (site.copyLength && COPY_LENGTH_ORDER.indexOf(site.copyLength) > COPY_LENGTH_ORDER.indexOf(rule.max)) out.push({ kind: LintKind.Content, say: rule.say });\n break;\n case AvoidCheck.BrandHue: {\n const hue = oklchHue(site.design.seed);\n if (hue && hue.chroma >= rule.minChroma && hue.hue >= rule.from && hue.hue <= rule.to) out.push({ kind: LintKind.Look, say: rule.say });\n break;\n }\n }\n }\n const advice = motionAdvice(type.id, site.design.animate, types);\n if (advice) {\n const usual = (SPEC_AXES.animations as Readonly<Record<string, { label: string }>>)[advice.usual].label;\n out.push({ kind: LintKind.Look, say: `${type.label} sites usually move less (${usual}); this much movement as people scroll can feel restless.` });\n }\n return out;\n}\n\n/**\n * Rev 3.1: two levels above what this kind of business usually wears (Subtle → Lively) is advice, never a block.\n * Structured, so Design ▸ Motion says it in the studio's language: `usual` = the level the type wears.\n */\nexport function motionAdvice(\n typeId: string | null | undefined, animate: AnimateId | string | null | undefined, types: ReadonlyArray<BusinessType> = BUSINESS_TYPES,\n): { usual: AnimateId } | null {\n const type = typeId ? types.find(t => t.id === typeId) : undefined;\n if (!type || !animate || !ANIMATE_ORDER.includes(animate)) return null;\n return ANIMATE_ORDER.indexOf(animate) >= ANIMATE_ORDER.indexOf(type.moves.animate) + ANIMATE_ADVICE_STEPS ? { usual: type.moves.animate } : null;\n}\n","import { DesignChoices, presetChoices } from '@vectoriox/iox-ui/design-core';\nimport { FactKey, patternById, SITE_FACT_LABELS, SPEC_SITE_LIBRARY } from '@vectoriox/iox-ui/generation-core';\n\nimport { BusinessType, businessTypeById, isLookRule } from './business-types';\nimport { SiteNeed } from './needs';\nimport { SiteAnalysis } from './site-analysis';\n\n/**\n * What the PLAN prompt is given (AI plan rev 3 §3f \"Retrieval, not the whole knowledge base\"): the one matched\n * business rule, the analysis the owner corrected, the style they picked, and the sections that rule's home\n * uses — never the 30 rules or the 24 presets. Design ▸ Look and the prompt read the same rule. Pure; the M1\n * caller serialises it.\n */\n\nexport interface PromptSection {\n id: string;\n family: string;\n /** The composed pattern's label; null while the library has not composed it yet (track L). */\n label: string | null;\n composed: boolean;\n}\n\nexport interface PromptContext {\n type: {\n id: string;\n label: string;\n tone: string;\n /** Words the copy must not use — the type's and the owner's. */\n avoidWords: string[];\n imagery: string;\n fonts: string;\n colourMood: string;\n structure: BusinessType['structure'];\n booking: BusinessType['booking'];\n /** What this kind of site should not look like — the look rules' lines. */\n lookAdvice: string[];\n } | null;\n business: SiteAnalysis['business'];\n voice: SiteAnalysis['voice'];\n needs: SiteNeed[];\n facts: Partial<Record<FactKey, string>>;\n /** The facts the prompt did not state — placeholders, never invented. */\n missingFacts: Array<{ key: FactKey; label: string }>;\n moods: SiteAnalysis['moods'];\n hero: SiteAnalysis['hero'];\n locale: SiteAnalysis['locale'];\n design: DesignChoices | null;\n sections: PromptSection[];\n}\n\nexport interface PromptContextOptions {\n /** The style the owner picked on Design ▸ Look. */\n presetId?: string | null;\n /** …or the exact choices (after Colour / Type / Shape / Motion edits) — wins over `presetId`. */\n design?: DesignChoices | null;\n}\n\nconst FAMILY_OF: ReadonlyMap<string, string> = new Map(SPEC_SITE_LIBRARY.map(e => [e.id, e.family]));\n\nexport function analysisPromptContext(analysis: SiteAnalysis, opts: PromptContextOptions = {}): PromptContext {\n const type = businessTypeById(analysis.businessType);\n const facts: Partial<Record<FactKey, string>> = {};\n for (const [key, read] of Object.entries(analysis.facts) as Array<[FactKey, { value: string }]>) facts[key] = read.value;\n return {\n type: type ? {\n id: type.id,\n label: type.label,\n tone: type.tone,\n avoidWords: [...new Set([...type.words, ...analysis.voice.avoidWords])],\n imagery: type.imagery,\n fonts: type.fonts,\n colourMood: type.colour.mood,\n structure: type.structure,\n booking: type.booking,\n lookAdvice: type.avoid.filter(isLookRule).map(r => r.say),\n } : null,\n business: analysis.business,\n voice: analysis.voice,\n needs: analysis.needs,\n facts,\n missingFacts: analysis.missingFacts.map(key => ({ key, label: SITE_FACT_LABELS[key] })),\n moods: analysis.moods,\n hero: analysis.hero,\n locale: analysis.locale,\n design: opts.design ?? (opts.presetId ? presetChoices(opts.presetId) : null),\n sections: (type?.home ?? []).map(id => {\n const pattern = patternById(id);\n return { id, family: pattern?.family ?? FAMILY_OF.get(id) ?? id.split('.')[0], label: pattern?.label ?? null, composed: !!pattern };\n }),\n };\n}\n","import { HEBREW_PREFIXES } from '@vectoriox/iox-ui/generation-core';\n\nimport { BUSINESS_TYPES, BusinessType } from './business-types';\n\n/**\n * What Start reads from the owner's words BEFORE any model runs (AI plan rev 3 §3d step 0, N-D3): the kind of\n * business by the contract's own keywords (`BusinessType.match` — \"the no-model fallback\"), and the addresses\n * typed into the box (each becomes a \"style only\" reference chip, R1). Pure; the template path uses it today and\n * the reading stage (M1-1) checks the model against the same match.\n */\n\nconst escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst KEYWORD_RES = new Map<string, RegExp>();\n\n/** A keyword matches at the START of a word (so a stem — \"סדנ\", \"consult\" — matches its forms). */\nfunction keywordRe(keyword: string): RegExp {\n let re = KEYWORD_RES.get(keyword);\n if (!re) {\n re = new RegExp(`(^|[^\\\\p{L}\\\\p{N}])${HEBREW_PREFIXES}${escapeRe(keyword.toLocaleLowerCase())}`, 'u');\n KEYWORD_RES.set(keyword, re);\n }\n return re;\n}\n\nexport interface BusinessTypeMatch {\n id: string;\n /** The keywords found, in the type's order. */\n keywords: string[];\n /** The letters matched — longer, more specific keywords weigh more (\"barber\" over \"bar\"). */\n score: number;\n}\n\n/** The kind of business the words name, best first; empty when none of the keywords appears. Ties keep the board's order. */\nexport function matchBusinessTypes(text: string, types: ReadonlyArray<BusinessType> = BUSINESS_TYPES): BusinessTypeMatch[] {\n const words = (text ?? '').toLocaleLowerCase();\n if (!words.trim()) return [];\n return types\n .map((type, order) => {\n const keywords = type.match.filter(k => keywordRe(k).test(words));\n return { id: type.id, keywords, score: keywords.reduce((n, k) => n + k.length, 0), order };\n })\n .filter(m => m.score > 0)\n .sort((a, b) => b.score - a.score || a.order - b.order)\n .map(({ order, ...m }) => m);\n}\n\n/** The single best kind of business the words name, or null. */\nexport function matchBusinessType(text: string, types: ReadonlyArray<BusinessType> = BUSINESS_TYPES): string | null {\n return matchBusinessTypes(text, types)[0]?.id ?? null;\n}\n\n// A port stays with its host (\"staging.example:8080\"): dropping it would read a DIFFERENT site.\nconst ADDRESS_RE = /(?:https?:\\/\\/)?(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z]{2,}(?::\\d{1,5})?(?:\\/[^\\s<>\"']*)?/gi;\nconst TRAILING = /[.,;:!?)\\]}'\"״׳]+$/;\n\n/** An address as a chip shows it: no scheme, no `www.`, no trailing punctuation or slash, lower-case host. */\nexport function normalizeAddress(raw: string): string {\n const bare = raw.replace(TRAILING, '').replace(/^https?:\\/\\//i, '').replace(/^www\\./i, '').replace(/\\/+$/, '');\n const slash = bare.indexOf('/');\n return slash < 0 ? bare.toLowerCase() : bare.slice(0, slash).toLowerCase() + bare.slice(slash);\n}\n\n/** Every website address typed or pasted in the words (an http(s) address or a bare domain), once each, in\n * order. An email address is not a website. */\nexport function addressesIn(text: string): string[] {\n const found: string[] = [];\n for (const m of (text ?? '').matchAll(ADDRESS_RE)) {\n const before = m.index ? text[m.index - 1] : '';\n if (before === '@' || /[\\p{L}\\p{N}_-]/u.test(before)) continue;\n const address = normalizeAddress(m[0]);\n if (address && !found.includes(address)) found.push(address);\n }\n return found;\n}\n\n/** The words without one address (removing its chip): every spelling of it, and the space it leaves. */\nexport function withoutAddress(text: string, address: string): string {\n const out = (text ?? '').replace(ADDRESS_RE, (m, offset: number, whole: string) => {\n const before = offset ? whole[offset - 1] : '';\n if (before === '@' || /[\\p{L}\\p{N}_-]/u.test(before)) return m;\n return normalizeAddress(m) === address ? '' : m;\n });\n return out.replace(/[ \\t]{2,}/g, ' ').replace(/ +([.,;:!?])/g, '$1').trim();\n}\n","import { SITE_TEMPLATES, SiteTemplate, STUDIO_TEMPLATE } from '@vectoriox/iox-ui/generation-core';\n\nimport { businessTypeById, STRUCTURES, StructureId } from './business-types';\n\n/** The structure a kind of business is built from, and the template the wizard can build TODAY. */\nexport interface StructureChoice {\n /** The business type's own structure (Studio · Practice · Place). */\n structure: StructureId;\n /** The template that will be built. */\n template: SiteTemplate;\n /** The type's structure has no template yet (L0-4), so the Studio template stands in. */\n fallback: boolean;\n}\n\n/**\n * Which template the template path (and the plan stage) builds a kind of business from (AI plan rev 3 §3d,\n * N-D3): its structure's template when that one has shipped, else Studio — said, never silent. No type → Studio.\n */\nexport function structureFor(typeId: string | null | undefined): StructureChoice {\n const structure = (businessTypeById(typeId)?.structure ?? 'studio') as StructureId;\n const own = STRUCTURES[structure]?.shipped ? SITE_TEMPLATES[structure] : undefined;\n return { structure, template: own ?? STUDIO_TEMPLATE, fallback: !own };\n}\n","import { parseHexColor, rgbToOklab, toHexColor } from '@vectoriox/iox-ui/design-core';\n\nimport { StyleReadGround } from './rank';\n\n/**\n * The palette MEASURE (AI plan §3k, R-D2: a colour is measured, never asked of a model) — ONE function for every\n * reader: the browser measures a picture at upload (canvas pixels → `pixelSamples`), the server measures a picture it\n * reads and a website's CSS (declared colours, weighted by where they paint). Weighted samples in, ≤ 6 colours out,\n * by a deterministic median cut: the same input gives the same hexes on every run, in every runtime. Pure.\n */\n\n/** One colour seen, and how much of the reference it covers (pixels, or a CSS colour's weight). */\nexport interface ColourSample {\n /** 0–255 each. */\n r: number;\n g: number;\n b: number;\n weight: number;\n}\n\nexport interface PaletteColour {\n hex: string;\n /** Its part of the whole, 0–1; the palette's shares add up to 1. */\n share: number;\n}\n\nexport interface PaletteReading {\n palette: PaletteColour[];\n ground: `${StyleReadGround}`;\n /** The most frequent saturated colour — a CANDIDATE seed (the AA audit decides, `referenceSeed`). */\n brand?: string;\n}\n\n/** At most this many colours (the StyleRead's palette). */\nexport const PALETTE_SIZE = 6;\n/** Channels are bucketed to this many bits before the cut, so noise never decides a colour. */\nconst BUCKET_BITS = 5;\nconst BUCKET_SHIFT = 8 - BUCKET_BITS;\n/** The sampling ceiling for a picture — every n-th pixel, so a 12 MP photo costs what a thumbnail does. */\nexport const MAX_PIXEL_SAMPLES = 20_000;\n/** A pixel under this alpha is not part of the picture. */\nconst MIN_ALPHA = 128;\n\n/** OKLab lightness / chroma thresholds the reading speaks in. */\nexport const PALETTE_THRESHOLDS = {\n /** Above: a light colour. */\n light: 0.72,\n /** Below: a dark colour. */\n dark: 0.38,\n /** At least this share of light (or dark) makes the ground light (or dark); otherwise mixed. */\n groundShare: 0.55,\n /** A brand candidate is at least this colourful… */\n brandChroma: 0.08,\n /** …and neither near-white nor near-black. */\n brandMinL: 0.25,\n brandMaxL: 0.92,\n /** Two palette colours closer than this (OKLab distance) are one colour. */\n mergeDistance: 0.035,\n} as const;\n\n/** Every n-th opaque pixel of an RGBA buffer (canvas `ImageData.data`, a decoder's pixels), weight 1 each. */\nexport function pixelSamples(rgba: ArrayLike<number>, width: number, height: number, max = MAX_PIXEL_SAMPLES): ColourSample[] {\n const pixels = Math.max(0, Math.floor(width) * Math.floor(height));\n const step = Math.max(1, Math.ceil(pixels / max));\n const out: ColourSample[] = [];\n for (let p = 0; p < pixels; p += step) {\n const i = p * 4;\n if (rgba[i + 3] < MIN_ALPHA) continue;\n out.push({ r: rgba[i], g: rgba[i + 1], b: rgba[i + 2], weight: 1 });\n }\n return out;\n}\n\n/** A palette (hex + share) back to samples — what merging two readings measures. */\nexport function paletteSamples(palette: ReadonlyArray<PaletteColour>, weight = 1): ColourSample[] {\n return palette.flatMap(c => {\n const rgb = parseHexColor(c.hex);\n return rgb ? [{ r: Math.round(rgb.r * 255), g: Math.round(rgb.g * 255), b: Math.round(rgb.b * 255), weight: c.share * weight }] : [];\n });\n}\n\ntype Channel = 'r' | 'g' | 'b';\nconst CHANNELS: ReadonlyArray<Channel> = ['r', 'g', 'b'];\n\ninterface Box { colours: ColourSample[]; weight: number; }\n\nconst boxOf = (colours: ColourSample[]): Box => ({ colours, weight: colours.reduce((s, c) => s + c.weight, 0) });\n\nfunction range(box: Box, ch: Channel): number {\n let lo = 255;\n let hi = 0;\n for (const c of box.colours) { lo = Math.min(lo, c[ch]); hi = Math.max(hi, c[ch]); }\n return hi - lo;\n}\n\n/** The channel a box is widest in (ties: r, then g, then b). */\nfunction widest(box: Box): { ch: Channel; span: number } {\n return CHANNELS.reduce<{ ch: Channel; span: number }>((best, ch) => {\n const span = range(box, ch);\n return span > best.span ? { ch, span } : best;\n }, { ch: 'r', span: -1 });\n}\n\n/** Split at the weighted median of its widest channel (a stable sort, so ties never depend on the runtime). */\nfunction split(box: Box): [Box, Box] | null {\n const { ch, span } = widest(box);\n if (span <= 0 || box.colours.length < 2) return null;\n const sorted = [...box.colours].sort((a, b) => a[ch] - b[ch] || a.r - b.r || a.g - b.g || a.b - b.b);\n let acc = 0;\n let cut = 1;\n for (let i = 0; i < sorted.length - 1; i++) {\n acc += sorted[i].weight;\n cut = i + 1;\n if (acc >= box.weight / 2) break;\n }\n return [boxOf(sorted.slice(0, cut)), boxOf(sorted.slice(cut))];\n}\n\n/** Samples bucketed (BUCKET_BITS per channel), each bucket's weighted mean colour kept. */\nfunction bucket(samples: ReadonlyArray<ColourSample>): ColourSample[] {\n const buckets = new Map<number, { r: number; g: number; b: number; weight: number }>();\n for (const s of samples) {\n if (!(s.weight > 0)) continue;\n const key = ((s.r >> BUCKET_SHIFT) << (2 * BUCKET_BITS)) | ((s.g >> BUCKET_SHIFT) << BUCKET_BITS) | (s.b >> BUCKET_SHIFT);\n const b = buckets.get(key) ?? { r: 0, g: 0, b: 0, weight: 0 };\n b.r += s.r * s.weight; b.g += s.g * s.weight; b.b += s.b * s.weight; b.weight += s.weight;\n buckets.set(key, b);\n }\n return [...buckets.entries()].sort(([a], [b]) => a - b).map(([, b]) => ({ r: b.r / b.weight, g: b.g / b.weight, b: b.b / b.weight, weight: b.weight }));\n}\n\nfunction meanHex(box: Box): string {\n const sum = box.colours.reduce((s, c) => ({ r: s.r + c.r * c.weight, g: s.g + c.g * c.weight, b: s.b + c.b * c.weight }), { r: 0, g: 0, b: 0 });\n return toHexColor({ r: sum.r / box.weight / 255, g: sum.g / box.weight / 255, b: sum.b / box.weight / 255 }).toUpperCase();\n}\n\nconst oklabOf = (hex: string) => rgbToOklab(parseHexColor(hex)!);\nconst distance = (a: string, b: string) => { const x = oklabOf(a); const y = oklabOf(b); return Math.hypot(x.L - y.L, x.a - y.a, x.b - y.b); };\nconst SHARE_PRECISION = 1e4;\n\n/** Weighted samples → ≤ 6 colours, largest share first (ties by hex), shares adding up to 1. */\nexport function measurePalette(samples: ReadonlyArray<ColourSample>, size = PALETTE_SIZE): PaletteColour[] {\n const colours = bucket(samples);\n if (!colours.length) return [];\n let boxes: Box[] = [boxOf(colours)];\n while (boxes.length < size) {\n // The box to cut: the most weight × span (ties: the earlier box).\n let best = -1;\n let bestScore = 0;\n boxes.forEach((box, i) => {\n const score = box.weight * widest(box).span;\n if (score > bestScore) { best = i; bestScore = score; }\n });\n const halves = best >= 0 ? split(boxes[best]) : null;\n if (!halves) break;\n boxes = [...boxes.slice(0, best), ...halves, ...boxes.slice(best + 1)];\n }\n const total = boxes.reduce((s, b) => s + b.weight, 0);\n const merged: Array<{ hex: string; weight: number }> = [];\n for (const box of [...boxes].sort((a, b) => b.weight - a.weight)) {\n const hex = meanHex(box);\n const near = merged.find(m => distance(m.hex, hex) < PALETTE_THRESHOLDS.mergeDistance);\n if (near) near.weight += box.weight;\n else merged.push({ hex, weight: box.weight });\n }\n return merged\n .map(m => ({ hex: m.hex, share: Math.round((m.weight / total) * SHARE_PRECISION) / SHARE_PRECISION }))\n .sort((a, b) => b.share - a.share || a.hex.localeCompare(b.hex));\n}\n\n/** Light, dark or mixed: the share of the palette that is light (or dark). */\nexport function paletteGround(palette: ReadonlyArray<PaletteColour>): `${StyleReadGround}` {\n let light = 0;\n let dark = 0;\n for (const c of palette) {\n const { L } = oklabOf(c.hex);\n if (L >= PALETTE_THRESHOLDS.light) light += c.share;\n else if (L <= PALETTE_THRESHOLDS.dark) dark += c.share;\n }\n if (light >= PALETTE_THRESHOLDS.groundShare) return StyleReadGround.Light;\n if (dark >= PALETTE_THRESHOLDS.groundShare) return StyleReadGround.Dark;\n return StyleReadGround.Mixed;\n}\n\n/** The most frequent saturated colour that is neither near-white nor near-black, or undefined. */\nexport function paletteBrand(palette: ReadonlyArray<PaletteColour>): string | undefined {\n return palette.find(c => {\n const { L, a, b } = oklabOf(c.hex);\n return Math.hypot(a, b) >= PALETTE_THRESHOLDS.brandChroma && L >= PALETTE_THRESHOLDS.brandMinL && L <= PALETTE_THRESHOLDS.brandMaxL;\n })?.hex;\n}\n\n/** The whole reading of a set of samples: the palette, its ground, its brand candidate. */\nexport function readPalette(samples: ReadonlyArray<ColourSample>): PaletteReading {\n const palette = measurePalette(samples);\n const brand = paletteBrand(palette);\n return { palette, ground: paletteGround(palette), ...(brand ? { brand } : {}) };\n}\n","import { auditDesignContrast, designTokenRows, parseHexColor, presetChoices, resolveTokenValues, stylePresetById, wcagContrastRatio } from '@vectoriox/iox-ui/design-core';\nimport type { DesignChoices } from '@vectoriox/iox-ui/design-core';\n\nimport { StyleRead } from './rank';\n\n/**\n * Which brand colour a style starts from when the owner gave references (AI plan §3k, R4 \"the AA gate decides the\n * colour\"): the reading's measured `brand` — ONLY when the preset, worn in EVERY mode it offers with that colour as its\n * seed, passes the same contrast audit the contract gates every preset with (`auditDesignContrast`: every element\n * style in every section scheme, form parts, focus rings). Otherwise the preset's own seed stays and the reference\n * colour is a swatch the Colour tab marks \"doesn't pass contrast here\". The model never sees, picks or changes a hex.\n * Pure; the wizard (Design ▸ Colour) and the server (\"Build with these\") ask the same question.\n */\n\nexport interface ReferenceSeed {\n /** The seed to start from: the reference's when it passed, else the preset's. */\n seed: string;\n /** The reference colour measured, or null when there is none (no reading, nothing saturated). */\n reference: string | null;\n /** True when `seed` is the reference colour. */\n used: boolean;\n /** The modes the reference colour failed in (empty when used, or when there is no reference). */\n failsIn: Array<'light' | 'dark'>;\n /** Information only: the RAW reference colour against the style's page ground (its first mode); null without one. */\n rawRatio: number | null;\n}\n\n/** The raw colour's ratio against the preset's own page ground, in its first mode — shown, never decisive. */\nfunction rawRatioOf(presetId: string, hex: string): number | null {\n const preset = stylePresetById(presetId);\n const choices = preset ? presetChoices(preset.id, preset.modes[0]) : null;\n if (!preset || !choices) return null;\n const ground = resolveTokenValues(designTokenRows(choices), preset.modes[0])['page-bg'];\n return ground && parseHexColor(ground) ? Math.round(wcagContrastRatio(hex, ground) * 100) / 100 : null;\n}\n\n/** Every mode `presetId` offers passes the audit with `seed`. */\nexport function seedPassesPreset(presetId: string, seed: string): { passes: boolean; failsIn: Array<'light' | 'dark'> } {\n const preset = stylePresetById(presetId);\n if (!preset || !parseHexColor(seed)) return { passes: false, failsIn: [] };\n const failsIn = preset.modes.filter(mode => {\n const choices = presetChoices(preset.id, mode) as DesignChoices;\n return auditDesignContrast(designTokenRows({ ...choices, seed }), mode).some(f => !f.pass);\n });\n return { passes: failsIn.length === 0, failsIn: [...failsIn] };\n}\n\n/** The seed a preset starts from, given a reading (or none). Unknown preset → null. */\nexport function referenceSeed(read: Pick<StyleRead, 'brand'> | null | undefined, presetId: string): ReferenceSeed | null {\n const preset = stylePresetById(presetId);\n if (!preset) return null;\n const reference = read?.brand && parseHexColor(read.brand) ? read.brand : null;\n if (!reference) return { seed: preset.seed, reference: null, used: false, failsIn: [], rawRatio: null };\n const { passes, failsIn } = seedPassesPreset(preset.id, reference);\n const rawRatio = rawRatioOf(preset.id, reference);\n return passes ? { seed: reference, reference, used: true, failsIn: [], rawRatio } : { seed: preset.seed, reference, used: false, failsIn, rawRatio };\n}\n","import { DensityId, MOOD_IDS, MoodId, ShapeId, SPEC_AXES } from '@vectoriox/iox-ui/design-core';\nimport {\n isPlainObject, jsonListOf, jsonOneOf, JsonSchema, jsonShapedObject, jsonInteger, PathIssue, PathIssueCollector, pathAt, PlainObject, ShapeEntry,\n shapeKeys, requiredShapeKeys,\n} from '@vectoriox/iox-ui/generation-core';\n\nimport { paletteSamples, readPalette } from './palette';\nimport { StyleRead, StyleReadGround, StyleReadHeadings, StyleReadSourceKind } from './rank';\nimport { AnalysisIssue, analysisFromWire, MAX_ANALYSIS_MOODS, SiteAnalysis, siteAnalysisJsonSchema, validateSiteAnalysis } from './site-analysis';\n\n/**\n * The READING call (AI plan §3d step 1, §3k R2, M1-1): ONE `text.fast` call reads the owner's words AND the pictures\n * they attached (image input) and answers with the SiteAnalysis and — when there are pictures — which ones are the\n * owner's own (Your photos) and which are pictures they like (references, style only), plus what the liked pictures\n * FEEL like: moods, the lettering, corners, spacing. Never a colour: the palette is MEASURED (`palette.ts`, R-D2).\n * The format is built from `READING_SHAPE` (keys + their explanations), the gate reads the same table. Pure.\n */\n\n/** Which group a picture belongs to (R-D3: from the words; own when the words don't say). */\nexport enum PictureRole {\n Own = 'own',\n Reference = 'reference',\n}\n\n/** At most this many pictures go to the reading call as image input (§3d: \"up to 6 pictures\"). */\nexport const MAX_READ_PICTURES = 6;\n\nexport const READING_SHAPE: Readonly<Record<string, ShapeEntry>> = {\n reading: {\n analysis: 'analysis — the reading of the words',\n pictures: 'pictures — the pictures attached, in order',\n },\n pictures: {\n files: 'fileRole[] — one per attached picture, in the order given',\n style: 'pictureStyle — what the pictures the owner LIKES (role reference) feel like; empty moods when there are none',\n },\n fileRole: {\n index: 'integer — the picture, 0-based, in the order given',\n role: \"'own' | 'reference' — own: the owner's work, place, products or people, for the site; reference: a picture they like, for style only (\\\"a site like these\\\"); own when the words don't say\",\n },\n pictureStyle: {\n moods: 'string[] — ≤ 3 moods the liked pictures feel like',\n 'headings?': \"'serif' | 'sans' | 'display' | 'mono' — the lettering they show, when they show some\",\n 'shape?': 'string — design axes.shapes: their corners',\n 'density?': 'string — design axes.densities: how much room things have',\n },\n};\n\nexport interface PictureStyle {\n moods: MoodId[];\n headings?: `${StyleReadHeadings}`;\n shape?: ShapeId;\n density?: DensityId;\n}\n\nexport interface SiteReading {\n analysis: SiteAnalysis;\n /** Present when pictures were attached. */\n pictures?: { files: Array<{ index: number; role: `${PictureRole}` }>; style: PictureStyle };\n}\n\nexport const SITE_READING_SCHEMA_NAME = 'site_reading';\n\n/** The reading's format: the analysis alone when no picture was attached, else the analysis + the pictures. */\nexport function siteReadingJsonSchema(pictureCount: number): JsonSchema {\n if (pictureCount <= 0) return siteAnalysisJsonSchema();\n const fileRole = jsonShapedObject(READING_SHAPE['fileRole'], { index: jsonInteger(), role: jsonOneOf(Object.values(PictureRole)) }, 'fileRole');\n const style = jsonShapedObject(READING_SHAPE['pictureStyle'], {\n moods: jsonListOf(jsonOneOf(MOOD_IDS)),\n headings: jsonOneOf(Object.values(StyleReadHeadings)),\n shape: jsonOneOf(Object.keys(SPEC_AXES.shapes)),\n density: jsonOneOf(Object.keys(SPEC_AXES.densities)),\n }, 'pictureStyle');\n const pictures = jsonShapedObject(READING_SHAPE['pictures'], { files: jsonListOf(fileRole), style }, 'pictures');\n return jsonShapedObject(READING_SHAPE['reading'], { analysis: siteAnalysisJsonSchema(), pictures }, 'reading');\n}\n\nexport enum ReadingIssueCode {\n Shape = 'shape',\n UnknownKey = 'unknown-key',\n Duplicate = 'duplicate',\n InvalidValue = 'invalid-value',\n /** A picture named twice, or one left out. */\n Pictures = 'pictures',\n}\n\nexport type ReadingIssue = PathIssue<ReadingIssueCode> | AnalysisIssue;\n\nclass Collector extends PathIssueCollector<ReadingIssueCode> {\n constructor() {\n super('reading', { shape: ReadingIssueCode.Shape, unknownKey: ReadingIssueCode.UnknownKey, duplicate: ReadingIssueCode.Duplicate });\n }\n object(value: unknown, shape: string, path: string): PlainObject | null {\n if (!isPlainObject(value)) { this.add(ReadingIssueCode.Shape, path, 'must be an object'); return null; }\n this.keys(value, shapeKeys(READING_SHAPE[shape]), path);\n for (const key of requiredShapeKeys(READING_SHAPE[shape])) if (value[key] === undefined) this.add(ReadingIssueCode.Shape, pathAt(path, key), 'is required');\n return value;\n }\n oneOf(obj: PlainObject, key: string, allowed: ReadonlyArray<string>, path: string): void {\n const v = obj[key];\n if (v !== undefined && (typeof v !== 'string' || !allowed.includes(v))) this.add(ReadingIssueCode.InvalidValue, pathAt(path, key), `must be one of ${allowed.join(', ')}`);\n }\n}\n\n/** The pictures' part: every picture named once, a role each, moods from the closed list. */\nfunction validatePictures(c: Collector, raw: unknown, count: number): void {\n const pictures = c.object(raw, 'pictures', 'pictures');\n if (!pictures) return;\n const files = c.array(pictures, 'files', 'pictures');\n const seen = new Set<number>();\n files.forEach((f, i) => {\n const path = `pictures.files[${i}]`;\n const file = c.object(f, 'fileRole', path);\n if (!file) return;\n c.oneOf(file, 'role', Object.values(PictureRole), path);\n const index = file['index'];\n if (!Number.isInteger(index) || (index as number) < 0 || (index as number) >= count) c.add(ReadingIssueCode.Pictures, `${path}.index`, `must be a picture 0–${count - 1}`);\n else if (seen.has(index as number)) c.add(ReadingIssueCode.Pictures, `${path}.index`, `picture ${index} is named twice`);\n else seen.add(index as number);\n });\n if (Array.isArray(pictures['files']) && seen.size !== count) c.add(ReadingIssueCode.Pictures, 'pictures.files', `name each of the ${count} pictures once`);\n const style = c.object(pictures['style'], 'pictureStyle', 'pictures.style');\n if (!style) return;\n const moods = c.array(style, 'moods', 'pictures.style');\n if (moods.length > MAX_ANALYSIS_MOODS) c.add(ReadingIssueCode.InvalidValue, 'pictures.style.moods', `at most ${MAX_ANALYSIS_MOODS}`);\n moods.forEach((m, i) => { if (!(MOOD_IDS as ReadonlyArray<unknown>).includes(m)) c.add(ReadingIssueCode.InvalidValue, `pictures.style.moods[${i}]`, `\"${String(m)}\" is not a mood`); });\n c.oneOf(style, 'headings', Object.values(StyleReadHeadings), 'pictures.style');\n c.oneOf(style, 'shape', Object.keys(SPEC_AXES.shapes), 'pictures.style');\n c.oneOf(style, 'density', Object.keys(SPEC_AXES.densities), 'pictures.style');\n}\n\n/** The analysis on the wire, judged as the document it becomes: the wire's own faults, then `validateSiteAnalysis`'s. */\nfunction analysisIssues(wire: unknown, prompt: string): AnalysisIssue[] {\n const read = analysisFromWire(wire);\n return [...read.issues, ...validateSiteAnalysis(read.analysis, { prompt }).issues];\n}\n\n/** The reading's gate: the analysis by `validateSiteAnalysis` (paths under `analysis.` when pictures came too), the pictures by `READING_SHAPE`. */\nexport function validateSiteReading(value: unknown, ctx: { prompt: string; pictureCount: number }): { valid: boolean; issues: ReadingIssue[] } {\n if (ctx.pictureCount <= 0) {\n const issues = analysisIssues(value, ctx.prompt);\n return { valid: issues.length === 0, issues };\n }\n const c = new Collector();\n const reading = c.object(value, 'reading', '');\n if (!reading) return { valid: false, issues: c.issues };\n const issues: ReadingIssue[] = analysisIssues(reading['analysis'], ctx.prompt).map(i => ({ ...i, path: pathAt('analysis', i.path) }));\n validatePictures(c, reading['pictures'], ctx.pictureCount);\n issues.push(...c.issues);\n return { valid: issues.length === 0, issues };\n}\n\n/** A valid reading's answer → `SiteReading` (the analysis alone answers `{ analysis }`; the facts made a map again). */\nexport function decodeSiteReading(value: unknown, pictureCount: number): SiteReading {\n if (pictureCount <= 0) return { analysis: analysisFromWire(value).analysis as SiteAnalysis };\n const reading = value as SiteReading;\n return { ...reading, analysis: analysisFromWire(reading.analysis).analysis as SiteAnalysis };\n}\n\n// ── Readings → ONE StyleRead ───────────────────────────────────────────────────────────────────────────\n\n/** A reference picture as the server read it: its measured palette (and where it is). */\nexport interface MeasuredPicture {\n ref: string;\n palette: StyleRead['palette'];\n}\n\n/** The liked pictures as a StyleRead: their palettes measured together, what the model saw of them. */\nexport function pictureStyleRead(pictures: ReadonlyArray<MeasuredPicture>, style: PictureStyle | null | undefined): StyleRead | null {\n if (!pictures.length) return null;\n const reading = readPalette(pictures.flatMap(p => paletteSamples(p.palette)));\n return {\n sources: pictures.map(p => ({ kind: StyleReadSourceKind.Image, ref: p.ref })),\n palette: reading.palette,\n ...(reading.brand ? { brand: reading.brand } : {}),\n ground: reading.ground,\n moods: [...(style?.moods ?? [])].slice(0, MAX_ANALYSIS_MOODS),\n ...(style?.headings ? { headings: style.headings } : {}),\n ...(style?.shape ? { shape: style.shape } : {}),\n ...(style?.density ? { density: style.density } : {}),\n };\n}\n\n/** The most frequent defined value (ties: the first reading's). */\nfunction mostCommon<T>(values: ReadonlyArray<T | undefined>): T | undefined {\n const counts = new Map<T, number>();\n for (const v of values) if (v !== undefined) counts.set(v, (counts.get(v) ?? 0) + 1);\n let best: T | undefined;\n let n = 0;\n for (const [v, k] of counts) if (k > n) { best = v; n = k; }\n return best;\n}\n\n/**\n * Every reading of one generation (the pictures', each site's) → ONE StyleRead: palettes measured together (each\n * reading weighs the same), the ground re-read from that palette, moods by how often they were seen (≤ 3), the rest the\n * most common answer. Null when nothing was read.\n */\nexport function mergeStyleReads(reads: ReadonlyArray<StyleRead | null | undefined>): StyleRead | null {\n const all = reads.filter((r): r is StyleRead => !!r);\n if (!all.length) return null;\n if (all.length === 1) return all[0];\n const reading = readPalette(all.flatMap(r => paletteSamples(r.palette)));\n const moodCount = new Map<MoodId, number>();\n all.forEach(r => r.moods.forEach(m => moodCount.set(m, (moodCount.get(m) ?? 0) + 1)));\n const moods = [...moodCount.entries()].sort((a, b) => b[1] - a[1]).map(([m]) => m).slice(0, MAX_ANALYSIS_MOODS);\n const pick = <K extends keyof StyleRead>(key: K) => mostCommon(all.map(r => r[key]));\n const headings = pick('headings');\n const shape = pick('shape');\n const density = pick('density');\n const motion = pick('motion');\n return {\n sources: all.flatMap(r => r.sources),\n palette: reading.palette,\n ...(reading.brand ? { brand: reading.brand } : {}),\n ground: reading.palette.length ? reading.ground : StyleReadGround.Mixed,\n moods,\n ...(headings ? { headings } : {}),\n ...(shape ? { shape } : {}),\n ...(density ? { density } : {}),\n ...(motion ? { motion } : {}),\n } as StyleRead;\n}\n","import type { DesignChoices } from '@vectoriox/iox-ui/design-core';\nimport type { AiGenerationStage, AiStep, PlanChange, PlanEdit, SitePlan } from '@vectoriox/iox-ui/generation-core';\n\nimport type { StyleRead } from './rank';\nimport type { SiteAnalysis } from './site-analysis';\nimport type { PictureRole } from './site-reading';\n\n/**\n * A generation as the screens read it (AI plan \"M1 pipeline — the screens contract\"): what iox-cms's\n * `GET …/ai/generations/:id` answers and the Thinking · Analysis · Design · Plan · Build screens render. ONE\n * definition: iox-cms builds it, cms-client types its client with it. Types and enums only — no transport.\n */\n\n/** Where one reader is (Thinking's three lines). */\nexport enum ReaderState {\n Wait = 'wait',\n Run = 'run',\n Done = 'done',\n /** Nothing to read (no pictures, no address). */\n Skipped = 'skipped',\n /** Refused on purpose (robots.txt, a private address…) — said in one plain line, never blocks the reading. */\n Refused = 'refused',\n Failed = 'failed',\n}\n\n/** Why a website address was not read (the screens' i18n `ai.siteRead.<reason>`). */\nexport enum SiteReadRefusal {\n /** robots.txt disallows our user agent (`IOX-Import`). */\n Robots = 'robots',\n InvalidAddress = 'invalid-address',\n PrivateAddress = 'private-address',\n Unreachable = 'unreachable',\n Timeout = 'timeout',\n TooLarge = 'too-large',\n NotHtml = 'not-html',\n HttpError = 'http-error',\n TooManyRedirects = 'redirects',\n}\n\n/** What a sentence in the Plan prompt box did. */\nexport enum PlanChangeOutcome {\n Applied = 'applied',\n /** The closed operations cannot say it — one line, the map unchanged (the call still cost). */\n Cannot = 'cannot',\n /** Its edits did not make a valid plan, twice — the map unchanged. */\n Invalid = 'invalid',\n}\n\nexport interface GenerationFileView {\n key: string;\n url: string;\n role: `${PictureRole}`;\n}\n\nexport interface SiteReaderView {\n address: string;\n state: `${ReaderState}`;\n reason?: `${SiteReadRefusal}`;\n}\n\nexport interface GenerationReadersView {\n words: { state: `${ReaderState}` };\n pictures: { state: `${ReaderState}`; count: number };\n site: { state: `${ReaderState}`; addresses: SiteReaderView[] };\n}\n\nexport interface PlanRevisionView {\n plan: SitePlan;\n at: string;\n sentence?: string;\n edits?: PlanEdit[];\n changed?: PlanChange[];\n}\n\nexport interface AiGenerationView {\n _id: string;\n organization: string;\n stage: `${AiGenerationStage}`;\n /** The model step the runner is working on; null = the owner's move. */\n task: `${AiStep}` | null;\n intake: { prompt: string; files: GenerationFileView[]; addresses: string[]; auto: boolean };\n readers: GenerationReadersView;\n reads: { analysis?: { value: SiteAnalysis; model: string; usageIds: string[] }; style?: StyleRead | null };\n /** What Design and Plan use: the owner's edit, else the reading. */\n analysis: SiteAnalysis | null;\n analysisRevision: number;\n design?: { presetId?: string; design: DesignChoices; auto?: boolean };\n plan?: {\n revisions: PlanRevisionView[];\n model: string;\n lastChange?: { sentence: string; outcome: `${PlanChangeOutcome}`; message?: string; at: string };\n };\n siteBuildId?: string;\n models: Partial<Record<`${AiStep}`, string>>;\n estimate: number;\n cap: number;\n /** Derived from the ledger — the running credit total. */\n spent: number;\n error?: { code: string; detail: string; providerMessage?: string; issues?: Array<{ code: string; path: string }> };\n}\n\n/** `POST …/ai/generations`. */\nexport interface GenerationStartRequest {\n prompt: string;\n files?: Array<{ key: string; role?: `${PictureRole}` }>;\n addresses?: string[];\n}\n\n/** The longest message, the most files and addresses a generation starts from (Start's limits). */\nexport const GENERATION_LIMITS = {\n promptChars: 4_000,\n files: 12,\n addresses: 3,\n sentenceChars: 500,\n} as const;\n","import { DesignChoices, presetChoices } from '@vectoriox/iox-ui/design-core';\n\nimport { motionFor, MotionInput } from './motion';\nimport { RankInput, rankWithReferences, StyleRead } from './rank';\nimport { referenceSeed } from './reference-colour';\n\n/**\n * The look a business STARTS from (AI plan §3d \"Build with these\", §3o, MO-D3) — ONE rule for the wizard's Design step\n * (a Look pick) and the server's \"Build with these\": the preset at its defaults, Scrolling · How animated · Between\n * pages started from the kind of business (and the references), the owner's own Motion choices kept, and — given\n * references — the best-ranked style with the reference colour as its seed when that colour passes AA in every mode\n * the style offers (`referenceSeed`). Pure.\n */\n\n/**\n * A preset for this business: its choices, Motion from the business (`motionFor`), the references' colour as its seed\n * when that colour passes AA in every mode the preset offers (`referenceSeed` — judged as used), and what the owner\n * already set kept. The ONE rule for a Look pick and for Build with these.\n */\nexport function presetDesign(\n presetId: string,\n input: MotionInput | string | null,\n kept: Partial<Pick<DesignChoices, 'scroll' | 'animate' | 'between' | 'motion'>> = {},\n read: StyleRead | null = null,\n): DesignChoices | null {\n const base = presetChoices(presetId);\n if (!base) return null;\n const motionInput: MotionInput = typeof input === 'object' && input !== null ? input : { businessType: input as string | null };\n const start = motionFor(motionInput, presetId, read);\n const seed = referenceSeed(read, presetId);\n return { ...base, ...(seed?.used ? { seed: seed.seed } : {}), scroll: start.scroll, animate: start.animate, between: start.between, ...kept };\n}\n\nexport interface StartingDesign {\n presetId: string;\n design: DesignChoices;\n /** The reference colour was used as the seed (it passed AA in every mode the style offers). */\n referenceColour: boolean;\n}\n\n/** The look a business starts from: its best-ranked style (with the references' boost), at its defaults. */\nexport function startingDesign(input: (RankInput & MotionInput) | string | null, read: StyleRead | null = null): StartingDesign | null {\n const rankInput: RankInput & MotionInput = typeof input === 'object' && input !== null ? input : { businessType: input as string | null };\n const top = rankWithReferences(rankInput, read)[0];\n const design = top ? presetDesign(top.id, rankInput, {}, read) : null;\n if (!top || !design) return null;\n return { presetId: top.id, design, referenceColour: !!referenceSeed(read, top.id)?.used };\n}\n","/**\n * @vectoriox/iox-ui/harness-core — the design HARNESS (AI plan rev 3 §3f, decision N18), FRAMEWORK-FREE: the 30\n * kinds of business and their rules (generated 1:1 from iox-ai-guidance `flavor-spec.v1.json` `harness`), the\n * `SiteAnalysis` gate, what a site needs, the style ranking (+ references), where Motion starts, the design\n * lint and what the plan prompt is given. Pure: no transport, no clock, no randomness. Consumed by iox-cms (the\n * AI pipeline), the wizard and the boards. Depends on design-core and generation-core; neither depends on it.\n * ⚠️ Consumers wire the usual trio — ng-package raw-ts assets, jest moduleNameMapper, tsconfig paths — or\n * `nest start` dies with ERR_REQUIRE_ESM while jest and build both pass.\n */\nexport * from './harness-spec.generated';\nexport * from './business-types';\nexport * from './look';\nexport * from './rank';\nexport * from './motion';\nexport * from './needs';\nexport * from './lint';\nexport * from './site-analysis';\nexport * from './prompt-context';\nexport * from './intake';\nexport * from './structure';\nexport * from './palette';\nexport * from './reference-colour';\nexport * from './site-reading';\nexport * from './generation-view';\nexport * from './starting-design';\nexport * from './site-audit-view';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Collector"],"mappings":"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"}
|