# MAJORISO theme kit v6
If the user gave you a product, a look and this link, in any language, that is a complete order. Do not ask questions; choose sensible defaults from this page; build the theme and deliver one downloadable ZIP file. Reply in the user's language.
**Complete-read check:** the actual final line of this page must be `END OF MAJORISO THEME KIT v6`. Seeing the marker quoted in this paragraph does not count. If you cannot see that final line, you have read an incomplete page: ask the user to attach the complete page before building. Do not guess the missing instructions.
The deliverable is one downloadable ZIP, not a website, code listing or screenshot. The seller uploads the ZIP in the theme panel, previews it, then publishes it. This page does not upload or publish anything for the seller.
Compatibility: **dspack-policy-2** source-package authoring profile. Use the fields below even if you know newer framework features.
## Start here
The seller only needs a product, the desired features/look and this link. Either short request below is complete; replace the brackets with the brief:
Turkish:
> Bana [ürün] için [özellikler ve görünüm] bir MAJORISO teması yap. Senin için Rehber linki: https://www.majoriso.com/theme-guide.md
English:
> Make me a MAJORISO theme for [product] with [features and look]. Guide link for you: https://www.majoriso.com/theme-guide.md
No extra request to create, check or deliver a ZIP is needed. Reading the guide, choosing defaults, writing files, checking them and attaching the ZIP are the AI's responsibilities, not instructions the seller must add. Do not ask design clarification questions. Use the supplied brief and sensible defaults, without copying another brand's assets or inventing product claims. The only setup blockers are an incomplete/unreadable guide or unavailable file tools, handled below.
### Instructions to the AI
1. Read this whole page, including the file blocks and delivery checklist, through the actual final marker line. The complete starter below needs no other document and no access to a MAJORISO repository.
2. Use your own file-generation/code-execution tool to write UTF-8 files and create the ZIP. Do not ask the seller to install software, run a command, find a developer or concatenate code blocks.
3. If you cannot read the complete page, ask for it as an attachment. If you cannot create downloadable files, say so before promising a ZIP and ask the user to enable a file-capable tool. A code listing is not a completed delivery.
4. Never invent a token, field, node type, binding or enum. Copy this starter, change only the documented choices, and keep the data connections intact. An unsupported request is a limitation to explain, not a key to guess.
5. This public kit is self-contained. Advanced reference sections are not published at this URL yet. References such as R1.6 or R7.9 identify sections in the versioned technical reference, not extra requirements for this starter. Stay within the complete starter below unless the user supplies that reference; never invent a missing rule or claim to have read an unavailable page.
6. Write all authored theme copy in the user's language unless the brief explicitly requests another language; then use that requested language. Translate the starter's visible sample text, navigation, buttons and descriptive labels consistently. Manifest descriptions must still contain real English, Turkish and Spanish translations (`en`, `tr`, `es`). Do not translate JSON keys, enum values, ids, bindings or link targets. Leave bound text/media empty: the platform supplies real store/product data and its own interface language.
Before building, state five short design lines in the user's language: direction, palette, typography/spacing, section order, and images. Then create the ZIP without waiting for design approval. Report only checks you actually ran.
## Q1. Ten steps to a theme
1. Choose a short name, a `pk-` key such as `pk-linen-house`, and version `1.0.0`. The key is 6-32 lowercase letters/digits/hyphens including `pk-`. Keep the same key for later versions; increment the version on a replacement upload. Avoid reserved names and the words `stripe`, `payment`, `paypal`, `iyzi`, `iframe`, `powered`.
2. Choose your visual language. Starter palette: surface `#fbf8f2`, ink `#2b2620`, accent `#9a6420`. For another palette, keep every surface RGB channel at least 225, every ink channel at most 48, and use one accent below. Replace the starter's literal ink/surface colors throughout the JSON templates too, including footer, purchase button and hero overlay. A dark concept uses your own dark bands with a light global palette; platform controls must stay readable. See reference R7.3.
3. Choose heading and body fonts independently from the catalog. Examples: `playfair-display`, `inter`, `cormorant-garamond`, `work-sans`, `space-grotesk`, `bebas-neue`, `archivo`, `eb-garamond`, `source-sans-3`, `outfit`, `figtree`, `libre-baskerville`, `karla`, `dm-serif-display`, `albert-sans`. JSON `fontFamily` uses the bare id; token/CSS `font-family` uses the whole value `catalog:` without a fallback list. Do not bundle font files. Choose corners and widths within Q2 ranges.
4. Write `manifest.json` from the complete block below. Replace the sample identity and write real English, Turkish and Spanish descriptions, each 1-160 characters. Keep all 11 token names and, for now, the shown color expressions with the light global palette above. Choose font ids and radius independently. Do not add `format`, `pages`, `skin`, `assets` or `preview` fields.
5. Write `chrome/header.json` and `chrome/footer.json`. Announcement is optional: if omitted, remove `chrome/announcement.json`, its manifest reference and owned CSS. Shared chrome must work on every page, including checkout/order results. Keep the menu, working links and empty logo/name slot for the merchant's real brand. No hero, product content or repeated page chrome.
6. Choose Home sections and their order for the brief. Keep one h1, real editable title/text content outside chrome, dynamic data connections and responsive styles. The starter sequence is an example. Do not invent product facts.
7. Write Product and Cart from their blocks. Product contains the six selling parts plus an optional description band. Keep all bindings and empty bound text/media. The product template serves every product, not just the example in the brief. Other platform-body documents are intentionally omitted and supplied by the platform. Checkout and order-result bodies belong to the platform: do not create documents for them, design their content or write CSS targeting those bodies. Shared chrome still appears around them.
8. Write the CSS block. It styles only the starter's own node ids. Prefer node style fields for layout and type. If you remove a node, remove its CSS selectors too. Do not style platform internals or add scripts.
9. Add images only when you can ship them and explain their rights. Use your generated assets or user-supplied files with confirmed permission. Put PNG/JPG/WebP files directly in `images/`, refer to each as `@images/name.webp`, and list it in `licenses/images.txt`. SVG is an advanced path: read reference R1.6 and T3 first, never assume arbitrary SVG text/styles are supported. No downloads at render time. With no images, keep `media: []` and describe the desired image in its label; empty slots are permitted, not proof of a finished photographic design. The starter needs no image files or paid fonts.
10. Run your self-check, create the ZIP with your own tool, reopen it, and give the actual downloadable file to the seller. Explain any missing photos or unavailable requested feature in one short note. Do not claim platform or visual acceptance unless it was actually measured.
Verified accent choices (reference R7.3): red `#b42318`, orange `#c2410c`, gold `#9a6420`, green `#2e6b3a`, teal `#0f766e`, navy `#1f3a68`, blue `#1d4ed8`, violet `#8a4fbf`, plum `#6b2e5f`, rose `#b4466a`, taupe `#6e625c`. Use white text on accent-filled panels/buttons. Keep small eyebrow text in ink on light backgrounds; accent belongs on a decorative mark, not low-contrast lettering. On a dark band use surface text. Do not use FRAME's `#f5f3ea/#202b22/#dfee9a` combination.
Reserved keys (reference R1.4): `pk-admin`, `pk-agora`, `pk-antares`, `pk-apex`, `pk-atlas`, `pk-carina`, `pk-comet`, `pk-default`, `pk-frame`, `pk-hair`, `pk-halo`, `pk-iris`, `pk-kinetic-tee`, `pk-lumen`, `pk-lyra`, `pk-majoris`, `pk-majoriso`, `pk-mira`, `pk-music-plaque`, `pk-nova`, `pk-official`, `pk-orion`, `pk-studio`, `pk-sylva`, `pk-system`, `pk-vesper`. Choose a different key, not just one that sounds distinctive.
## Q2. Supported choices
The starter's arrows, thumbnail counts, card style, font pair, spacing and section order are examples. Choose supported values; use presetLook for the defaults of later sections.
| Field | Supported choice |
|---|---|
| `purchaseMode` / `preselect` | `cart`, `buy`, `both` / `first`, `none` |
| `--t-radius` | Integer `0px` to `64px` |
| Node/presetLook `radius` | 0 to 100 |
| Option group/summary `radius` | 0 to 40 |
| `width` / `maxWidth` | 40 to 2400; `widthPercent` is 5 to 100; check responsive fit |
| `overlayOpacity` | 0 to 90; check actual text contrast |
Current profile limits: secondary purchase-button colors, gallery stage background and shared options base are not supported here. Nor are `buttonTextCase`, `buttonLetterSpacing`, `thumbSize`, `thumbRadius`, `thumbsSingle`, `zoomButton`, `headingSize`, `headingWeight` or `check`. Do not add them, even if another theme uses them. Leave native purchase arrows, thumbnail shape and option headings at their supported defaults. Wait for a newly verified guide profile, not a release date. See reference compatibility profile and R4.2.11.
## Q3. Boundaries
- Source form only, strict JSON, no comments/trailing commas, no executable code in the package. The Python example later is an authoring tool, never a packaged file.
- Node ids must be unique per page including chrome. Short ids are simplest; the platform prefixes them. Never use another package's prefix. The source reader fills omitted labels and text/style defaults; keep authored content and responsive styles explicit where needed.
- A page document contains `nodes`; optional `chrome` and `library` fields also exist. Do not guess their shapes or disable protected-page chrome. A chrome file is one root section node, not a `nodes` wrapper.
- Node colors are six-digit hex strings, not `var()`, `color-mix()`, `rgb()`, named colors or shorthand hex. CSS may read `--ink`, `--surface`, `--accent`; it never assigns those or `--t-*`. Custom CSS variables, if needed, start `--@`.
- Set fonts only with `font-family` (`catalog:`, or `var(--t-heading-font)` / `var(--t-body-font)`). Never use the `font` shorthand; write `font-size`, `font-weight` and `line-height` separately. These are CSS property names; JSON styles keep the documented `fontFamily`, `fontSize`, `fontWeight` and `lineHeight` fields.
- CSS stays under `[data-ds-theme]` and your explicit `[data-node="short-id"]`. No broad `.node`, universal selectors, fixed positioning, platform/payment selectors, `@import`, `@font-face`, hidden credits or scripts. Use `@container` for widths and reduced-motion handling for motion. `!important` produces a warning; infinite animations are permitted. Keep editable node typography in JSON styles.
- Never manufacture prices, reviews, ratings, stock, contact information, certifications, product claims, shipping/return guarantees or newsletter features. No payment badges or fake signup. Generic product/chrome text must suit every product. Theme copy follows the user's language, or the language explicitly requested in the brief; manifest descriptions still use en/tr/es.
- Keep the platform's credit enabled; do not draw another credit, logo or store name. Never theme checkout/payment internals or the order-result body. Chrome styling is limited to your own chrome nodes, never those protected bodies.
- Adjacent Studio grid panels are top-aligned; `height` can become a minimum height, not equal panel height. The story CSS stretches the owned outer grid items with `align-self: stretch`. This does not resize an inner image stage automatically. Check photo fill and long text visually; do not invent an image-height key to compensate.
- Make keyboard focus visible and touch targets at least 44 by 44 pixels. Never remove outlines. Readability, keyboard use, empty stores, long names and small screens need review even when a package is structurally valid.
## Complete starter files
Write each labelled block to its exact relative path, without ellipses or a wrapper folder. This complete example includes optional announcement chrome:
```text
manifest.json
chrome/announcement.json
chrome/header.json
chrome/footer.json
documents/home.json
documents/product.json
documents/cart.json
skin/theme.css
licenses/images.txt
```
The manifest block contains the **entire 11-token list**. The examples below are concrete instances of the reference rules. Customize the documented values, not the contract. Additional image files are optional.
### `manifest.json`
```json
{
"dspackSource": 1,
"key": "pk-kit-starter",
"version": "1.0.0",
"name": "Quiet Studio",
"description": {
"en": "Warm light surfaces, editorial headings and a calm product layout.",
"tr": "Sıcak açık zeminler, editoryal başlıklar ve sakin bir ürün düzeni.",
"es": "Fondos claros y cálidos, títulos editoriales y un diseño de producto sereno."
},
"tokens": {
"--t-bg": "$surface",
"--t-bg-alt": "$surface",
"--t-text": "$ink",
"--t-text-muted": "color-mix(in srgb, $ink 75%, $surface)",
"--t-primary": "$ink",
"--t-primary-hover": "color-mix(in srgb, $ink 85%, $surface)",
"--t-secondary": "$accent",
"--t-border": "color-mix(in srgb, $ink 18%, $surface)",
"--t-heading-font": "catalog:playfair-display",
"--t-body-font": "catalog:inter",
"--t-radius": "8px"
},
"palette": {"surface":"#fbf8f2","ink":"#2b2620","accent":"#9a6420"},
"chrome": {
"announcement": {"id":"announcement"},
"header": {"id":"header"},
"footer": {"id":"footer"},
"brand": {"id":"brand"},
"menu": {"id":"menu"},
"cart": {"id":"cart"},
"credit": true
},
"presetLook": {
"section": {
"base": {"paddingTop":96,"paddingBottom":96,"paddingLeft":40,"paddingRight":40},
"tablet": {"paddingTop":72,"paddingBottom":72,"paddingLeft":32,"paddingRight":32},
"mobile": {"paddingTop":56,"paddingBottom":56,"paddingLeft":20,"paddingRight":20}
},
"heading": {
"base": {"fontFamily":"playfair-display","fontSize":44,"fontWeight":500,"lineHeight":1.1,"letterSpacing":-0.5},
"tablet": {"fontSize":36},
"mobile": {"fontSize":30}
},
"cardHeading": {
"base": {"fontFamily":"playfair-display","fontSize":24,"fontWeight":500,"lineHeight":1.25,"letterSpacing":0},
"mobile": {"fontSize":20}
},
"eyebrow": {
"base": {"fontFamily":"inter","fontSize":12,"fontWeight":600,"lineHeight":1.4,"letterSpacing":2}
},
"body": {
"base": {"fontFamily":"inter","fontSize":17,"fontWeight":400,"lineHeight":1.6,"letterSpacing":0},
"mobile": {"fontSize":16}
},
"button": {
"base": {"fontFamily":"inter","fontSize":15,"fontWeight":600,"lineHeight":1.2,"letterSpacing":0.5,"paddingTop":16,"paddingBottom":16,"paddingLeft":24,"paddingRight":24,"radius":8}
},
"card": {"base":{"radius":8,"surfaceTone":"paper"}},
"image": {"base":{"radius":8,"fit":"cover"}},
"media": {"base":{"radius":8}}
}
}
```
### `chrome/announcement.json`
```json
{"id":"announcement","type":"section","label":"Announcement bar","text":"","style":{"base":{"surfaceTone":"ink","paddingTop":12,"paddingBottom":12,"paddingLeft":24,"paddingRight":24,"gap":0},"tablet":{},"mobile":{"paddingTop":8,"paddingBottom":8,"paddingLeft":16,"paddingRight":16}},"children":[
{"id":"announcement-text","type":"text","label":"Announcement text","text":"Welcome to our store. Take your time and look around.","style":{"base":{"fontFamily":"inter","fontSize":13,"fontWeight":500,"lineHeight":1.4,"letterSpacing":0.5,"align":"center"},"tablet":{"fontSize":13},"mobile":{"fontSize":12}}}
]}
```
### `chrome/header.json`
```json
{"id":"header","type":"section","label":"Header","text":"","style":{"base":{"paddingTop":12,"paddingBottom":12,"paddingLeft":40,"paddingRight":40,"gap":0,"borderEdges":"bottom","borderWidth":1},"tablet":{"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":8,"paddingBottom":8,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"header-row","type":"group","label":"Header row","text":"","style":{"base":{"display":"row","distribute":"between","crossAlign":"center","gap":24,"maxWidth":1240,"selfAlign":"center","widthBoundary":"parent"},"tablet":{"gap":20},"mobile":{"gap":12}},"children":[
{"id":"brand","type":"text","label":"Store name or logo","text":"","style":{"base":{"sizing":"fit","fontFamily":"playfair-display","fontSize":26,"fontWeight":600,"lineHeight":1.1,"letterSpacing":0},"tablet":{"fontSize":24},"mobile":{"fontSize":21}}},
{"id":"menu","type":"group","label":"Main menu","text":"","style":{"base":{"display":"row","crossAlign":"center","gap":8,"sizing":"fit","fontFamily":"inter","fontSize":15},"tablet":{"gap":4},"mobile":{"display":"stack","crossAlign":"end","gap":0}},"children":[
{"id":"menu-home","type":"button","label":"Menu link: home","text":"Home","link":{"kind":"page","page":"home"},"style":{"base":{"buttonVariant":"text","buttonArrow":"hide","sizing":"fit","align":"center","paddingTop":12,"paddingBottom":12,"paddingLeft":16,"paddingRight":16,"radius":8,"fontFamily":"inter","fontSize":15,"fontWeight":500,"lineHeight":1.2,"letterSpacing":0.3},"tablet":{"fontSize":15},"mobile":{"fontSize":15}}},
{"id":"menu-shop","type":"button","label":"Menu link: all products","text":"Shop all","link":{"kind":"page","page":"products"},"style":{"base":{"buttonVariant":"text","buttonArrow":"hide","sizing":"fit","align":"center","paddingTop":12,"paddingBottom":12,"paddingLeft":16,"paddingRight":16,"radius":8,"fontFamily":"inter","fontSize":15,"fontWeight":500,"lineHeight":1.2,"letterSpacing":0.3},"tablet":{"fontSize":15},"mobile":{"fontSize":15}}}
]},
{"id":"cart","type":"text","label":"Cart link","text":"Cart","style":{"base":{"sizing":"fit","fontFamily":"inter","fontSize":15,"fontWeight":500,"lineHeight":1.2,"letterSpacing":0.3},"tablet":{"fontSize":15},"mobile":{"fontSize":15}}}
]}
]}
```
### `chrome/footer.json`
```json
{"id":"footer","type":"section","label":"Footer","text":"","style":{"base":{"background":"#2b2620","color":"#fbf8f2","paddingTop":64,"paddingBottom":48,"paddingLeft":40,"paddingRight":40,"gap":0},"tablet":{"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":48,"paddingBottom":40,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"footer-row","type":"group","label":"Footer columns","text":"","style":{"base":{"display":"row","distribute":"between","crossAlign":"start","layoutWrap":"wrap","gap":40,"maxWidth":1240,"selfAlign":"center","widthBoundary":"parent"},"tablet":{"gap":32},"mobile":{"display":"stack","gap":32}},"children":[
{"id":"footer-about","type":"group","label":"Footer about column","text":"","style":{"base":{"sizing":"fit","maxWidth":420,"widthBoundary":"parent","gap":12},"tablet":{},"mobile":{"sizing":"fill"}},"children":[
{"id":"footer-title","type":"text","label":"Footer heading","text":"Thank you for visiting.","style":{"base":{"fontFamily":"playfair-display","fontSize":26,"fontWeight":500,"lineHeight":1.2,"letterSpacing":0},"tablet":{"fontSize":24},"mobile":{"fontSize":22}}},
{"id":"footer-text","type":"text","label":"Footer text","text":"We hope you find something you love.","style":{"base":{"fontFamily":"inter","fontSize":15,"fontWeight":400,"lineHeight":1.6,"letterSpacing":0},"tablet":{"fontSize":15},"mobile":{"fontSize":15}}}
]},
{"id":"footer-links","type":"group","label":"Footer links","text":"","style":{"base":{"display":"row","layoutWrap":"wrap","crossAlign":"center","gap":8,"sizing":"fit"},"tablet":{},"mobile":{"sizing":"fill","gap":4}},"children":[
{"id":"footer-shop","type":"button","label":"Footer link: all products","text":"Shop all","link":{"kind":"page","page":"products"},"style":{"base":{"buttonVariant":"text","buttonArrow":"hide","sizing":"fit","align":"center","color":"#fbf8f2","paddingTop":12,"paddingBottom":12,"paddingLeft":16,"paddingRight":16,"radius":8,"fontFamily":"inter","fontSize":15,"fontWeight":500,"lineHeight":1.2,"letterSpacing":0.3},"tablet":{"fontSize":15},"mobile":{"fontSize":15}}},
{"id":"footer-cart","type":"button","label":"Footer link: cart","text":"Cart","link":{"kind":"page","page":"cart"},"style":{"base":{"buttonVariant":"text","buttonArrow":"hide","sizing":"fit","align":"center","color":"#fbf8f2","paddingTop":12,"paddingBottom":12,"paddingLeft":16,"paddingRight":16,"radius":8,"fontFamily":"inter","fontSize":15,"fontWeight":500,"lineHeight":1.2,"letterSpacing":0.3},"tablet":{"fontSize":15},"mobile":{"fontSize":15}}},
{"id":"footer-home","type":"button","label":"Footer link: home","text":"Home","link":{"kind":"page","page":"home"},"style":{"base":{"buttonVariant":"text","buttonArrow":"hide","sizing":"fit","align":"center","color":"#fbf8f2","paddingTop":12,"paddingBottom":12,"paddingLeft":16,"paddingRight":16,"radius":8,"fontFamily":"inter","fontSize":15,"fontWeight":500,"lineHeight":1.2,"letterSpacing":0.3},"tablet":{"fontSize":15},"mobile":{"fontSize":15}}}
]}
]}
]}
```
### `documents/home.json`
```json
{"nodes":[
{"id":"hero","type":"section","label":"Hero","text":"","style":{"base":{"paddingTop":24,"paddingBottom":0,"paddingLeft":40,"paddingRight":40},"tablet":{"paddingTop":20,"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":16,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"hero-card","type":"group","label":"Hero picture card","text":"","style":{"base":{"display":"overlay","overlayPosition":"bottom-left","overlayColor":"#2b2620","overlayOpacity":45,"surfaceTone":"ink","height":640,"paddingTop":72,"paddingBottom":72,"paddingLeft":64,"paddingRight":64,"radius":8,"maxWidth":1240,"selfAlign":"center","widthBoundary":"parent"},"tablet":{"height":560,"paddingTop":56,"paddingBottom":56,"paddingLeft":48,"paddingRight":48},"mobile":{"height":520,"paddingTop":40,"paddingBottom":40,"paddingLeft":24,"paddingRight":24,"overlayOpacity":55}},"children":[
{"id":"hero-image","type":"image","label":"Hero photo: your best product in soft daylight","text":"","media":[],"style":{"base":{"fit":"cover"},"tablet":{},"mobile":{}}},
{"id":"hero-content","type":"group","label":"Hero text","text":"","style":{"base":{"maxWidth":600,"widthBoundary":"parent","gap":20},"tablet":{"maxWidth":520},"mobile":{"gap":16}},"children":[
{"id":"hero-eyebrow","type":"text","label":"Small line above the hero headline","text":"WELCOME","style":{"base":{"fontFamily":"inter","fontSize":12,"fontWeight":600,"lineHeight":1.4,"letterSpacing":2},"tablet":{"fontSize":12},"mobile":{"fontSize":12}}},
{"id":"hero-title","type":"title","label":"Hero headline","text":"Your headline in a few strong words.","headingLevel":"h1","fluid":true,"style":{"base":{"fontFamily":"playfair-display","fontSize":72,"fontWeight":500,"lineHeight":1.05,"letterSpacing":-1},"tablet":{"fontSize":56},"mobile":{"fontSize":40,"letterSpacing":-0.5}}},
{"id":"hero-text","type":"text","label":"Hero text","text":"One or two sentences that tell shoppers what you sell and why it is worth a look.","style":{"base":{"fontFamily":"inter","fontSize":20,"fontWeight":400,"lineHeight":1.55,"letterSpacing":0},"tablet":{"fontSize":19},"mobile":{"fontSize":18}}},
{"id":"hero-button","type":"button","label":"Hero button","text":"Shop now","link":{"kind":"page","page":"products"},"style":{"base":{"buttonVariant":"solid","buttonArrow":"hide","sizing":"fit","align":"center","background":"#fbf8f2","color":"#2b2620","radius":8,"paddingTop":16,"paddingBottom":16,"paddingLeft":32,"paddingRight":32,"fontFamily":"inter","fontSize":15,"fontWeight":600,"lineHeight":1.2,"letterSpacing":0.5},"tablet":{"fontSize":15},"mobile":{"sizing":"fill","fontSize":15}}}
]}
]}
]},
{"id":"intro","type":"section","label":"Introduction","text":"","style":{"base":{"paddingTop":96,"paddingBottom":96,"paddingLeft":40,"paddingRight":40},"tablet":{"paddingTop":72,"paddingBottom":72,"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":56,"paddingBottom":56,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"intro-column","type":"group","label":"Introduction column","text":"","style":{"base":{"maxWidth":760,"selfAlign":"center","widthBoundary":"parent","gap":20},"tablet":{"gap":16},"mobile":{"gap":16}},"children":[
{"id":"intro-kicker","type":"text","label":"Small line above the introduction heading","text":"ABOUT US","style":{"base":{"fontFamily":"inter","fontSize":12,"fontWeight":600,"lineHeight":1.4,"letterSpacing":2,"align":"center"},"tablet":{"fontSize":12},"mobile":{"fontSize":12}}},
{"id":"intro-title","type":"title","label":"Introduction heading","text":"A short sentence about what your store stands for.","headingLevel":"h2","style":{"base":{"fontFamily":"playfair-display","fontSize":44,"fontWeight":500,"lineHeight":1.1,"letterSpacing":-0.5,"align":"center"},"tablet":{"fontSize":36},"mobile":{"fontSize":30}}},
{"id":"intro-text","type":"text","label":"Introduction text","text":"Tell shoppers who you are and what they will find here. Two or three sentences are enough.","style":{"base":{"fontFamily":"inter","fontSize":20,"fontWeight":400,"lineHeight":1.55,"letterSpacing":0,"align":"center"},"tablet":{"fontSize":19},"mobile":{"fontSize":18}}}
]}
]},
{"id":"new-arrivals","type":"section","label":"New arrivals","text":"","style":{"base":{"paddingTop":96,"paddingBottom":96,"paddingLeft":40,"paddingRight":40},"tablet":{"paddingTop":72,"paddingBottom":72,"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":56,"paddingBottom":56,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"new-arrivals-inner","type":"group","label":"New arrivals column","text":"","style":{"base":{"gap":32,"maxWidth":1240,"selfAlign":"center","widthBoundary":"parent"},"tablet":{"gap":24},"mobile":{"gap":20}},"children":[
{"id":"new-arrivals-head","type":"group","label":"New arrivals heading row","text":"","style":{"base":{"display":"row","distribute":"between","crossAlign":"end","layoutWrap":"wrap","gap":24},"tablet":{"gap":20},"mobile":{"display":"stack","crossAlign":"start","gap":8}},"children":[
{"id":"new-arrivals-title","type":"title","label":"New arrivals heading","text":"New arrivals","headingLevel":"h2","style":{"base":{"sizing":"fit","fontFamily":"playfair-display","fontSize":44,"fontWeight":500,"lineHeight":1.1,"letterSpacing":-0.5},"tablet":{"fontSize":36},"mobile":{"fontSize":30}}},
{"id":"new-arrivals-link","type":"button","label":"New arrivals link","text":"Shop all","link":{"kind":"page","page":"products"},"style":{"base":{"buttonVariant":"text","buttonArrow":"hide","sizing":"fit","align":"center","radius":8,"paddingTop":12,"paddingBottom":12,"paddingLeft":16,"paddingRight":16,"fontFamily":"inter","fontSize":15,"fontWeight":600,"lineHeight":1.2,"letterSpacing":0.5},"tablet":{"fontSize":15},"mobile":{"fontSize":15}}}
]},
{"id":"new-arrivals-rail","type":"product-rail","label":"Newest products","text":"","style":{"base":{"railLayout":"carousel","railCardVariant":"editorial","gridColumns":"4","gap":24,"tileRatio":"portrait","fit":"cover","radius":8,"fontFamily":"inter","fontSize":18,"fontWeight":500,"lineHeight":1.3,"letterSpacing":0},"tablet":{"gridColumns":"3","gap":20,"fontSize":17},"mobile":{"gridColumns":"2","gap":16,"fontSize":16}},"rail":{"source":"latest","ids":[],"category":"","limit":8,"showPrice":true,"cardFields":{"category":false,"title":true,"price":true}}}
]}
]},
{"id":"features","type":"section","label":"Three points","text":"","style":{"base":{"surfaceTone":"soft","paddingTop":96,"paddingBottom":96,"paddingLeft":40,"paddingRight":40},"tablet":{"paddingTop":72,"paddingBottom":72,"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":56,"paddingBottom":56,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"features-inner","type":"group","label":"Three points column","text":"","style":{"base":{"gap":40,"maxWidth":1240,"selfAlign":"center","widthBoundary":"parent"},"tablet":{"gap":32},"mobile":{"gap":24}},"children":[
{"id":"features-title","type":"title","label":"Points heading","text":"Why shop with us","headingLevel":"h2","style":{"base":{"fontFamily":"playfair-display","fontSize":44,"fontWeight":500,"lineHeight":1.1,"letterSpacing":-0.5},"tablet":{"fontSize":36},"mobile":{"fontSize":30}}},
{"id":"features-grid","type":"group","label":"Point cards","text":"","style":{"base":{"display":"tiles","gridColumns":"3","gap":24},"tablet":{"gap":20},"mobile":{"gridColumns":"1","gap":16}},"children":[
{"id":"feature-one","type":"group","label":"Point card 1","text":"","style":{"base":{"surfaceTone":"paper","padding":32,"gap":12,"radius":8},"tablet":{"padding":24},"mobile":{"padding":24}},"children":[
{"id":"feature-one-title","type":"title","label":"Point 1 heading","text":"What we make","headingLevel":"h3","style":{"base":{"fontFamily":"playfair-display","fontSize":24,"fontWeight":500,"lineHeight":1.25,"letterSpacing":0},"tablet":{"fontSize":22},"mobile":{"fontSize":20}}},
{"id":"feature-one-text","type":"text","label":"Point 1 text","text":"Describe your products in one sentence.","style":{"base":{"fontFamily":"inter","fontSize":17,"fontWeight":400,"lineHeight":1.6,"letterSpacing":0},"tablet":{"fontSize":17},"mobile":{"fontSize":16}}}
]},
{"id":"feature-two","type":"group","label":"Point card 2","text":"","style":{"base":{"surfaceTone":"paper","padding":32,"gap":12,"radius":8},"tablet":{"padding":24},"mobile":{"padding":24}},"children":[
{"id":"feature-two-title","type":"title","label":"Point 2 heading","text":"How we work","headingLevel":"h3","style":{"base":{"fontFamily":"playfair-display","fontSize":24,"fontWeight":500,"lineHeight":1.25,"letterSpacing":0},"tablet":{"fontSize":22},"mobile":{"fontSize":20}}},
{"id":"feature-two-text","type":"text","label":"Point 2 text","text":"Describe how you choose or make what you sell.","style":{"base":{"fontFamily":"inter","fontSize":17,"fontWeight":400,"lineHeight":1.6,"letterSpacing":0},"tablet":{"fontSize":17},"mobile":{"fontSize":16}}}
]},
{"id":"feature-three","type":"group","label":"Point card 3","text":"","style":{"base":{"surfaceTone":"paper","padding":32,"gap":12,"radius":8},"tablet":{"padding":24},"mobile":{"padding":24}},"children":[
{"id":"feature-three-title","type":"title","label":"Point 3 heading","text":"Questions","headingLevel":"h3","style":{"base":{"fontFamily":"playfair-display","fontSize":24,"fontWeight":500,"lineHeight":1.25,"letterSpacing":0},"tablet":{"fontSize":22},"mobile":{"fontSize":20}}},
{"id":"feature-three-text","type":"text","label":"Point 3 text","text":"Tell shoppers how to reach you.","style":{"base":{"fontFamily":"inter","fontSize":17,"fontWeight":400,"lineHeight":1.6,"letterSpacing":0},"tablet":{"fontSize":17},"mobile":{"fontSize":16}}}
]}
]}
]}
]},
{"id":"story","type":"section","label":"Story","text":"","style":{"base":{"paddingTop":96,"paddingBottom":96,"paddingLeft":40,"paddingRight":40},"tablet":{"paddingTop":72,"paddingBottom":72,"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":56,"paddingBottom":56,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"story-inner","type":"group","label":"Story layout","text":"","style":{"base":{"display":"grid","columns":50,"gap":64,"maxWidth":1240,"selfAlign":"center","widthBoundary":"parent"},"tablet":{"gap":40},"mobile":{"display":"stack","gap":32}},"children":[
{"id":"story-image","type":"image","label":"Story photo: hands at work, or the product in a real room","text":"","media":[],"style":{"base":{"height":560,"fit":"cover","radius":8},"tablet":{"height":440},"mobile":{"height":340}}},
{"id":"story-content","type":"group","label":"Story text","text":"","style":{"base":{"gap":20,"paddingTop":64},"tablet":{"gap":16,"paddingTop":0},"mobile":{"gap":16,"paddingTop":0}},"children":[
{"id":"story-kicker","type":"text","label":"Small line above the story heading","text":"OUR STORY","style":{"base":{"fontFamily":"inter","fontSize":12,"fontWeight":600,"lineHeight":1.4,"letterSpacing":2},"tablet":{"fontSize":12},"mobile":{"fontSize":12}}},
{"id":"story-title","type":"title","label":"Story heading","text":"How it all started.","headingLevel":"h2","style":{"base":{"fontFamily":"playfair-display","fontSize":44,"fontWeight":500,"lineHeight":1.1,"letterSpacing":-0.5},"tablet":{"fontSize":36},"mobile":{"fontSize":30}}},
{"id":"story-text","type":"text","label":"Story text","text":"Tell the story behind your store in a few sentences: who you are and what you care about.","style":{"base":{"fontFamily":"inter","fontSize":17,"fontWeight":400,"lineHeight":1.6,"letterSpacing":0},"tablet":{"fontSize":17},"mobile":{"fontSize":16}}},
{"id":"story-button","type":"button","label":"Story button","text":"Browse the shop","link":{"kind":"page","page":"products"},"style":{"base":{"buttonVariant":"outline","buttonArrow":"hide","sizing":"fit","align":"center","radius":8,"paddingTop":16,"paddingBottom":16,"paddingLeft":32,"paddingRight":32,"marginTop":8,"fontFamily":"inter","fontSize":15,"fontWeight":600,"lineHeight":1.2,"letterSpacing":0.5},"tablet":{"fontSize":15},"mobile":{"fontSize":15}}}
]}
]}
]},
{"id":"reviews-section","type":"section","label":"Customer reviews","text":"","style":{"base":{"surfaceTone":"soft","paddingTop":96,"paddingBottom":96,"paddingLeft":40,"paddingRight":40},"tablet":{"paddingTop":72,"paddingBottom":72,"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":56,"paddingBottom":56,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"reviews-inner","type":"group","label":"Customer reviews column","text":"","style":{"base":{"gap":32,"maxWidth":1240,"selfAlign":"center","widthBoundary":"parent"},"tablet":{"gap":24},"mobile":{"gap":20}},"children":[
{"id":"reviews-heading","type":"title","label":"Reviews heading","text":"What customers say","headingLevel":"h2","style":{"base":{"fontFamily":"playfair-display","fontSize":44,"fontWeight":500,"lineHeight":1.1,"letterSpacing":-0.5},"tablet":{"fontSize":36},"mobile":{"fontSize":30}}},
{"id":"reviews","type":"group","label":"Customer review cards","text":"","style":{"base":{"display":"review-carousel","gridColumns":"3","reviewRows":"1","reviewMotion":"manual","gap":24},"tablet":{"gridColumns":"2","gap":20},"mobile":{"gridColumns":"1","gap":16}},"reviews":{"source":"store","limit":12,"summary":"show"},"children":[
{"id":"review-card","type":"group","label":"Review card","text":"","style":{"base":{"surfaceTone":"paper","padding":32,"gap":12,"radius":8},"tablet":{"padding":24},"mobile":{"padding":24}},"children":[
{"id":"review-rating","type":"text","label":"Review rating","text":"Review rating","style":{"base":{"fontFamily":"inter","fontSize":18,"fontWeight":400,"lineHeight":1.2,"letterSpacing":2},"tablet":{"fontSize":18},"mobile":{"fontSize":18}}},
{"id":"review-quote","type":"text","label":"Customer quote","text":"Customer quote","style":{"base":{"fontFamily":"inter","fontSize":17,"fontWeight":400,"lineHeight":1.6,"letterSpacing":0},"tablet":{"fontSize":17},"mobile":{"fontSize":16}}},
{"id":"review-name","type":"text","label":"Customer name","text":"Customer name","style":{"base":{"fontFamily":"inter","fontSize":14,"fontWeight":600,"lineHeight":1.4,"letterSpacing":0.3},"tablet":{"fontSize":14},"mobile":{"fontSize":14}}},
{"id":"review-date","type":"text","label":"Review date","text":"Review date","style":{"base":{"fontFamily":"inter","fontSize":12,"fontWeight":400,"lineHeight":1.4,"letterSpacing":0},"tablet":{"fontSize":12},"mobile":{"fontSize":12}}},
{"id":"review-context","type":"text","label":"Review context","text":"Review context","style":{"base":{"fontFamily":"inter","fontSize":12,"fontWeight":400,"lineHeight":1.4,"letterSpacing":0},"tablet":{"fontSize":12},"mobile":{"fontSize":12}}}
]}
]}
]}
]},
{"id":"closing","type":"section","label":"Closing call to action","text":"","style":{"base":{"surfaceTone":"tint","paddingTop":120,"paddingBottom":120,"paddingLeft":40,"paddingRight":40},"tablet":{"paddingTop":96,"paddingBottom":96,"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":64,"paddingBottom":64,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"closing-column","type":"group","label":"Closing text","text":"","style":{"base":{"maxWidth":680,"selfAlign":"center","widthBoundary":"parent","crossAlign":"center","gap":20},"tablet":{"gap":16},"mobile":{"gap":16}},"children":[
{"id":"closing-title","type":"title","label":"Closing heading","text":"Ready to find yours?","headingLevel":"h2","style":{"base":{"fontFamily":"playfair-display","fontSize":44,"fontWeight":500,"lineHeight":1.1,"letterSpacing":-0.5,"align":"center"},"tablet":{"fontSize":36},"mobile":{"fontSize":30}}},
{"id":"closing-button","type":"button","label":"Closing button","text":"Shop all products","link":{"kind":"page","page":"products"},"style":{"base":{"buttonVariant":"solid","buttonArrow":"hide","sizing":"fit","align":"center","radius":8,"paddingTop":16,"paddingBottom":16,"paddingLeft":32,"paddingRight":32,"marginTop":8,"fontFamily":"inter","fontSize":15,"fontWeight":600,"lineHeight":1.2,"letterSpacing":0.5},"tablet":{"fontSize":15},"mobile":{"fontSize":15}}}
]}
]}
]}
```
### `documents/product.json`
```json
{"nodes":[
{"id":"product","type":"section","label":"Product","text":"","style":{"base":{"paddingTop":40,"paddingBottom":96,"paddingLeft":40,"paddingRight":40},"tablet":{"paddingTop":32,"paddingBottom":72,"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":16,"paddingBottom":56,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"product-layout","type":"group","label":"Product layout","text":"","style":{"base":{"display":"grid","columns":56,"gap":56,"maxWidth":1240,"selfAlign":"center","widthBoundary":"parent"},"tablet":{"columns":52,"gap":32},"mobile":{"display":"stack","gap":24}},"children":[
{"id":"gallery","type":"gallery","label":"Product photos","text":"","binding":{"source":"product","field":"gallery"},"media":[],"style":{"base":{"height":740,"fit":"contain","radius":8,"galleryColumns":"6","galleryVisible":"6"},"tablet":{"height":600},"mobile":{"height":480,"galleryColumns":"4","galleryVisible":"4"}}},
{"id":"info","type":"group","label":"Product information","text":"","style":{"base":{"gap":20,"paddingTop":8},"tablet":{"gap":16,"paddingTop":0},"mobile":{"gap":16,"paddingTop":0}},"children":[
{"id":"category","type":"text","label":"Product category","text":"","binding":{"source":"product","field":"category"},"style":{"base":{"fontFamily":"inter","fontSize":12,"fontWeight":600,"lineHeight":1.4,"letterSpacing":2,"textCase":"uppercase"},"tablet":{"fontSize":12},"mobile":{"fontSize":12}}},
{"id":"name","type":"title","label":"Product name","text":"","headingLevel":"h1","binding":{"source":"product","field":"title"},"style":{"base":{"fontFamily":"playfair-display","fontSize":40,"fontWeight":500,"lineHeight":1.15,"letterSpacing":-0.5},"tablet":{"fontSize":34},"mobile":{"fontSize":28}}},
{"id":"price","type":"price","label":"Price","text":"","style":{"base":{"fontFamily":"inter","fontSize":22,"fontWeight":500,"lineHeight":1.2,"letterSpacing":0},"tablet":{"fontSize":22},"mobile":{"fontSize":20}}},
{"id":"options","type":"options","label":"Product options","text":"","preselect":"first","style":{"base":{"fontFamily":"inter","fontWeight":500,"marginTop":4},"tablet":{},"mobile":{}},"optionDesign":{"groups":[{"key":"size","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"beden","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"boyut","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"ebat","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"ölçü","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"talla","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"tamaño","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"color","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"colour","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"renk","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"material","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"malzeme","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"style","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"estilo","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"finish","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"model","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"modelo","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"variant","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}},{"key":"seçenek","style":{"base":{"format":"pills","layout":"wrap","radius":8,"paddingX":20,"paddingY":12,"gap":8,"fontSize":15,"borderWidth":1,"selectedEffect":"fill","depth":"none","hover":"lift"},"mobile":{"fontSize":14,"paddingX":16,"paddingY":10}}}]}},
{"id":"buy","type":"actions","label":"Purchase buttons","text":"","purchaseMode":"cart","style":{"base":{"background":"#2b2620","color":"#fbf8f2","radius":8,"fontFamily":"inter","fontSize":16,"fontWeight":600,"lineHeight":1.2,"marginTop":8},"tablet":{"fontSize":16},"mobile":{"fontSize":16}}},
{"id":"summary","type":"text","label":"Short description","text":"","binding":{"source":"product","field":"shortDescription"},"style":{"base":{"fontFamily":"inter","fontSize":16,"fontWeight":400,"lineHeight":1.7,"letterSpacing":0,"maxWidth":560,"widthBoundary":"parent"},"tablet":{"fontSize":16},"mobile":{"fontSize":15}}}
]}
]}
]},
{"id":"details","type":"section","label":"Product details","text":"","visibilityRule":"description","style":{"base":{"paddingTop":96,"paddingBottom":96,"paddingLeft":40,"paddingRight":40,"borderEdges":"top","borderWidth":1},"tablet":{"paddingTop":72,"paddingBottom":72,"paddingLeft":32,"paddingRight":32},"mobile":{"paddingTop":56,"paddingBottom":56,"paddingLeft":20,"paddingRight":20}},"children":[
{"id":"details-column","type":"group","label":"Details column","text":"","style":{"base":{"maxWidth":760,"selfAlign":"center","widthBoundary":"parent","gap":16},"tablet":{"gap":16},"mobile":{"gap":12}},"children":[
{"id":"details-title","type":"title","label":"Details heading","text":"Details","headingLevel":"h2","style":{"base":{"fontFamily":"playfair-display","fontSize":36,"fontWeight":500,"lineHeight":1.15,"letterSpacing":-0.5},"tablet":{"fontSize":30},"mobile":{"fontSize":26}}},
{"id":"details-text","type":"text","label":"Long description","text":"","binding":{"source":"product","field":"longDescription"},"style":{"base":{"fontFamily":"inter","fontSize":17,"fontWeight":400,"lineHeight":1.7,"letterSpacing":0},"tablet":{"fontSize":17},"mobile":{"fontSize":16}}}
]}
]}
]}
```
### `documents/cart.json`
```json
{"nodes":[
{"id":"studio-page-body","type":"section","label":"Page content","text":"","style":{"base":{},"tablet":{},"mobile":{"paddingLeft":20,"paddingRight":20}},"children":[]}
]}
```
### `skin/theme.css`
```css
/* Owned nodes only. Node typography stays in JSON. */
[data-ds-theme] { font-family: catalog:inter; }
[data-ds-theme] [data-node="brand"] img { display: block; width: auto; height: 40px; max-width: 200px; object-fit: contain; }
@container (max-width: 767px) {
[data-ds-theme] [data-node="brand"] img { height: 32px; max-width: 150px; }
}
[data-ds-theme] [data-node="brand"] a,
[data-ds-theme] [data-node="cart"] a { display: inline-flex; align-items: center; min-height: 44px; min-width: 44px; }
[data-ds-theme] [data-node="brand"] a:focus-visible,
[data-ds-theme] [data-node="cart"] a:focus-visible { outline: 2px solid var(--ink); outline-offset: 4px; }
[data-ds-theme] [data-node="cart"] [data-cart-count] { display: inline-block; min-width: 22px; margin-left: 4px; padding: 2px 6px; border-radius: 999px; background: var(--ink); color: var(--surface); font-size: 12px; line-height: 18px; text-align: center; }
/* Equal grid panels need stretch, not matching minimum heights. */
[data-ds-theme] [data-node="story-image"],
[data-ds-theme] [data-node="story-content"] { align-self: stretch; }
/* Keep eyebrow text readable; accent is reserved for decorative marks. */
[data-ds-theme] [data-node="intro-kicker"],
[data-ds-theme] [data-node="story-kicker"],
[data-ds-theme] [data-node="category"] { color: var(--ink); }
[data-ds-theme] [data-node="hero-eyebrow"] { color: var(--surface); }
[data-ds-theme] [data-node="buy"] button:hover:not(:disabled) { opacity: 0.88; }
[data-ds-theme] [data-node="buy"] button:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
[data-ds-theme] [data-node="buy"] button:disabled { opacity: 0.45; cursor: not-allowed; }
[data-ds-theme] [data-node="summary"] p,
[data-ds-theme] [data-node="details-text"] p { margin: 0 0 0.9em; }
```
### `licenses/images.txt`
```text
Catalog card: made by the MAJORISO platform from the theme palette.
```
### Image file plan
Before generating images, list filename, use, dimensions, byte budget and rights source. Use PNG/JPG/WebP; at most 8 MiB and 50 million pixels per image. Aim for a longest side at most 2400px to avoid resizing; quality 85 is a starting point, not a requirement. JSON uses `@images/name.webp`; CSS uses `url("images/name.webp")`. Avoid duplicate filename stems. Keep product-gallery media bound to real products. List shipped images in `licenses/images.txt`; an unused source image raises a warning.
## Q5. Check before delivering
Use your own execution tool for the mechanical checks. This is a bounded author self-check, not a replacement for the platform validator or a visual test. Do not tell the user to run it.
- Parse every JSON file strictly. Text files are UTF-8 without BOM or NUL bytes. Reject JSON keys `__proto__`, `constructor` and `prototype` at every depth. For this starter, keep the listed paths (announcement optional) plus licensed images directly in `images/`. No hidden files, symlinks, nested archives, `node_modules`, test scripts or OS metadata. Paths use lowercase ASCII letters/digits plus `- _ . /`, at most 160 bytes and 6 levels; no `..` or empty segments.
- Manifest: source marker 1, exactly the 11 token names, allowed fonts, three valid colors, credit true; names 1-40 characters, descriptions 1-160, key 6-32. Version is at least 1.0.0 with three integer parts, each at most 9999. No unresolved template placeholders.
- Recurse through every node. Count chrome too: target at most 150 nodes per page, hard maximum 200, at most 40 top-level nodes, nesting at most 6. Ids must be unique. Every referenced chrome id, CSS node id, image and internal link must exist.
- Include header/footer and their manifest references; reference announcement only when present. Check brand/menu/links across all pages. Keep hero/product content out of chrome and authored documents/CSS out of checkout/order-result bodies.
- Home has exactly one h1, real title/text content and an h2 before a rail whose card titles are h3. Product has the six required selling parts, bound title h1, no fixed product values, and no `studio-page-body`. Cart has only its provided body slot. Gallery/price/options/actions may not be fabricated on Home.
- Product data remains dynamic. Bound title/gallery/shortDescription objects, blank text/media, price without binding, one actions node and a supported options preselect value remain intact. A product with no options must still work. Do not label zero validator errors as proof that these selling parts exist.
- Rails use store data (`latest` or `featured`), no fixed product/category ids. Reviews use the provided live-source nodes, not invented testimonials. Empty data sections must not leave fabricated counts or claims.
- Use documented JSON fields and choices; the starter is not an exhaustive enum list. Verify other fields in the supplied reference before using them. Color expressions belong in manifest tokens or CSS, not JSON colors. In optionDesign, do not insert `fontWeight`, `fontFamily` or `lineHeight` into a group/summary style.
- Inspect every CSS declaration: use `font-family` and separate `font-size`, `font-weight` and `line-height`; never the `font` shorthand. Keep font selection in the platform catalog and do not add font files.
- Check English/Turkish/Spanish metadata and authored copy in the user's language (or the brief's explicit language), including navigation and buttons. Check generic reusable-page copy, contrast (4.5:1 normal text, 3:1 large text), focus, 44px targets, responsive stacking and word wrapping. Preview Home/Product at 390px and tablet/desktop when available; check long names, empty data and image crops. Do not substitute a screenshot of standalone HTML for a platform rendering.
- Recheck the image file plan, shipped files, references and rights. No external image URLs or forged licenses. Remove unused assets when practical.
- Budget: ZIP at most 25 MiB, unpacked at most 60 MiB, at most 300 entries, manifest at most 64 KiB, each document at most 512 KiB, CSS at most 256 KiB/4000 rules, license at most 64 KiB. Keep far below limits because the platform adds chrome and normalizes the source. Source directory success is not final ZIP acceptance.
### Create and reopen the ZIP with your own tool
The AI runs this Python example in its own execution environment after writing the files. It uses stored entries to avoid excessive-compression rejections. A shell-equipped AI can instead zip from INSIDE the package folder: `zip -r -X ../pk-kit-starter-1.0.0.zip . -x '.*' '*/.*'`, then inspect every archive entry and the compression limits in reference R13.1. These are AI tool instructions, not work for the seller.
```python
from pathlib import Path
import json, re, zipfile
root = Path("theme-work") # Starter folder; announcement is optional.
m = json.loads((root / "manifest.json").read_text(encoding="utf-8"))
if not re.fullmatch(r"pk-[a-z0-9]+(?:-[a-z0-9]+)*", m["key"]):
raise ValueError("Invalid package key")
if not 6 <= len(m["key"]) <= 32:
raise ValueError("Invalid key length")
if not re.fullmatch(r"(0|[1-9][0-9]{0,3})\.(0|[1-9][0-9]{0,3})\.(0|[1-9][0-9]{0,3})", m["version"]):
raise ValueError("Invalid version")
parts = m["version"].split(".")
if tuple(map(int, parts)) < (1, 0, 0):
raise ValueError("Version must be at least 1.0.0")
required = {"manifest.json", "chrome/header.json", "chrome/footer.json",
"documents/home.json", "documents/product.json",
"documents/cart.json", "skin/theme.css", "licenses/images.txt"}
if m.get("chrome", {}).get("announcement") is not None:
required.add("chrome/announcement.json")
allowed = required | {"chrome/announcement.json"}
files = []
for p in sorted(root.rglob("*")):
if p.is_symlink():
raise ValueError("Symlink is not allowed")
if p.is_dir():
continue
name = p.relative_to(root).as_posix()
if not re.fullmatch(r"[a-z0-9._/-]+", name) or any(x.startswith(".") for x in name.split("/")):
raise ValueError("Unsafe path: " + name)
if len(name.encode()) > 160 or len(name.split("/")) > 6:
raise ValueError("Path exceeds limits")
if name not in allowed and not re.fullmatch(r"images/[a-z0-9_-]+\.(png|jpe?g|webp|svg)", name):
raise ValueError("Unexpected file: " + name)
if p.stat().st_size > 8 * 1024 * 1024:
raise ValueError("File too large: " + name)
if p.suffix == ".json":
json.loads(p.read_text(encoding="utf-8"))
files.append((p, name))
if not required.issubset({name for _, name in files}):
raise ValueError("A starter file is missing")
if len(files) > 300 or sum(p.stat().st_size for p, _ in files) > 60 * 1024 * 1024:
raise ValueError("Archive budget exceeded")
out = root.parent / (m["key"] + "-" + m["version"] + ".zip")
with zipfile.ZipFile(out, "w", compression=zipfile.ZIP_STORED) as z:
for p, name in files:
z.write(p, name)
if out.stat().st_size > 25 * 1024 * 1024:
raise ValueError("ZIP exceeds 25 MiB")
with zipfile.ZipFile(out) as z:
if z.testzip() is not None or set(z.namelist()) != {name for _, name in files}:
raise ValueError("ZIP integrity or file list failed")
packaged = json.loads(z.read("manifest.json"))
if packaged != m:
raise ValueError("Wrong manifest in ZIP")
print(str(out), out.stat().st_size, "bytes")
```
Attach that actual ZIP. State the theme name/version, summarize the visual idea in one sentence and disclose any empty photo slots. Never say "validated", "published" or "first upload guaranteed" based only on this self-check.
### If the panel rejects the ZIP
Ask the user to paste the full error code, path and message, without credentials. Match it to the table below or the supplied technical reference. Change the implicated file, check the whole package again, increment the version if replacing an existing upload, and deliver one corrected ZIP. Source validation may stop at the first error, so a second message can expose another problem. Do not tell the user to disable checks or edit JSON. If the error needs an unsupported platform capability, explain the limit and use the supported design, not a guessed key.
| Error code | Repair |
|---|---|
| `too_large` | Reduce the ZIP below 25 MiB. |
| `source_duplicate_id` | Make ids unique, including chrome. |
| `source_chrome_missing` | Restore the referenced chrome file/id. |
| `source_image_ref_unknown` | Ship the referenced image or fix its path. |
| `source_image_name_conflict` | Give images distinct stems. |
| `file_undeclared` (image) | An undeclared output image is an error, unlike an unused source image. Rebuild from source; report it if it persists. |
| `source_font_catalog_unknown` | Use a supported catalog id. |
| `document_text_missing` | Add the required editable text. |
| `document_elements_too_many` | Reduce nodes, counting chrome. |
Warnings are not rejection codes: `image_downscaled` means resizing; `source_image_unreferenced` means an unused asset; `css_important_count` flags `!important`. Inspect the report and result before delivery.
## Q6. Who draws what?
| Your theme | Platform responsibility |
|---|---|
| Header/footer and optional announcement across all pages, including checkout/order results | Merchant's real logo/name, real navigation/cart count and mandatory credit |
| Home sections and their authored copy | Store data used by dynamic sections |
| Product layout, supported type/colors/options styling | Real product data, price, inventory, options and purchase behavior |
| Live rails and real-review containers | Products and approved reviews, including empty states |
| Palette/tokens and the cart body slot | Category/search/cart forms; checkout and order-result bodies (no authored design or CSS targeting them) |
| Your licensed images and owned-node CSS | Cart drawer, cookie banner, account/errors, payment fields, store settings |
Do not imitate platform features with decorative buttons. Final publication requires the panel's checks and the seller's preview. This kit supplies an authoring contract; it does not promise a publication time.
END OF MAJORISO THEME KIT v6