Unzip it, open index.html in your browser. Everything you change is in config.js.
B. Let your AI tool build it, exactly the same
This prompt describes every section, every word, every colour and every behaviour of this template. Paste it into an AI coding tool and it builds the same website.
About 4319 words
You are a senior front-end engineer. Recreate the website "Petal & Stem" EXACTLY, so that it looks and behaves the same as the original. Use only what is written below. Do not invent sections, colours, words or features, and do not leave anything out.
## Rules
1. Plain HTML, CSS and vanilla JavaScript. No framework, no build step, no CDN, no web fonts, no analytics, no outside requests of any kind. The site must work by opening index.html from the folder.
2. Create exactly these files: index.html, styles.css, app.js, art.js, config.js.
3. Every visible word comes from config.js (window.SITE_CONFIG). Nothing is hard-coded in the page except structure. Each text has an English and an Arabic version: { en, ar }.
4. English and Arabic with real right-to-left layout. One button switches the language without reloading: set the lang and dir attributes on <html>, re-draw all texts, and remember the choice in localStorage (inside try/catch). Use logical CSS properties (margin-inline-start, padding-inline-end, inset-inline-start, text-align:start) so Arabic mirrors correctly. No letter-spacing and no uppercase on Arabic. Arabic line height about 1.9.
5. Phone first at 390 px wide, then wide screens up to 1440 px. No sideways scrolling at any width. Every button and field is at least 44 px high. Visible keyboard focus. Text contrast at least 4.5:1. Respect prefers-reduced-motion (no animation when set). Images have alt text; decorative pictures are hidden from screen readers.
6. Pictures: every picture is a framed inline-SVG drawing made by code (flat shapes in the palette colours) until the owner sets a real photo path in config.js. A photo, when given, fills its frame like object-fit: cover.
7. Page weight under 150 KB in total.
## Design tokens (put these in styles.css :root exactly; the colours are overwritten from config.js at start-up)
```css
:root {
--cream: #FBF6EE; --paper: #FFFDF9; --sand: #F2E8DA; --leaf: #1F4A38; --leaf-soft: #2F6B52;
--accent: #A94A2B; --peach: #F2C4A8; --ink: #1E2A24; --muted: #5A6359; --line: #E4D8C6;
--field: color-mix(in srgb, var(--ink) 48%, var(--cream));
--serif: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;
--sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--ease: cubic-bezier(.2, .7, .2, 1);
--shadow: 0 18px 40px -22px rgba(31, 74, 56, .45);
}
```
## Page structure, in this order
1. Header: logo wordmark, navigation links using the nav.* texts of config.js (shop, weekly flowers, reviews, delivery), language button, cart button with a count badge.
2. Hero on cream: serif headline, short paragraph, two buttons, and a large blob-shaped frame holding a drawn bouquet. Then a free-delivery note.
3. Categories (#categories): tiles for each category in config.categories (bouquets, plants, gifts, weddings, subscriptions and so on), each with a drawn picture; a tile opens the shop filtered to it.
4. Shop (#shop, sand background): filter chips (All plus each category and occasion), a sort select (featured, price low to high, price high to low, name A to Z), a result grid of product cards (drawn picture, name, price 'from', badge) and an empty state with a 'clear filters' button.
5. Weekly flowers (#weekly): a banner with a drawn picture promoting the subscription products, with a button that opens that product.
6. Reviews (#reviews): cards with stars. Delivery (#delivery, sand): a table of areas with fees, delivery windows, the free-delivery threshold, the same-day cut-off and payment note. Footer: contact, hours, address, Instagram.
7. Three dialogs (native <dialog>): product, cart (a side drawer), checkout. A toast area for short messages.
## Behaviour
1. Product dialog: big picture, description, size choice (config.sizes change the price), add-ons with prices (vase, chocolates, card), a message-card field, quantity, and an 'Add to basket' button that shows the live line price. Subscription products show their recurring text after the price.
2. Cart drawer: lines with their options, quantity steppers, remove, subtotal, delivery fee, free-delivery progress ('add X more'), total. Saved in localStorage so it survives reload.
3. Checkout: name, phone, area (the fee is added), delivery date (earliest is today, or tomorrow after the 16:00 cut-off) and a delivery window, recipient name and address, card message, payment note. Validation messages under each field.
4. Placing the order creates a code 'PS-' plus four digits and letters, clears the basket, shows a summary with the code, and opens wa.me/<whatsapp> with a prefilled message listing the items, the totals, the area, the date and window.
5. Currency KWD with three decimals (د.ك in Arabic). Dates and numbers use Latin digits in both languages.
6. Scroll reveal on sections (skipped with reduced motion). art.js draws each picture from { kind, palette, seed } as inline SVG: kinds bouquet, plant, vase, gift and so on, palettes blush, sun, coral, sage; the seed moves petals and leaves so each product differs.
## config.js: create it with EXACTLY this content (all the copy, prices, colours and settings, in both languages)
```js
/* ==========================================================================
Petal & Stem - config.js
Everything a rebrander changes lives in this one file.
Every text has an English (en) and an Arabic (ar) version.
========================================================================== */
window.SITE = {
/* ---- 1. Brand ---- */
brand: { en: "Petal & Stem", ar: "بتلة وساق" },
tagline: { en: "Seasonal flowers, hand-tied every morning", ar: "زهور موسمية تُربط يدويًا كل صباح" },
description: {
en: "An online florist for bouquets, plants, gifts, weddings and weekly flowers, delivered across the city.",
ar: "متجر زهور إلكتروني للباقات والنباتات والهدايا والأعراس والاشتراكات الأسبوعية، مع توصيل إلى جميع المناطق."
},
defaultLang: "en", // "en" or "ar"
storageKey: "petalstem:", // change it if you run two shops on one domain
orderPrefix: "PS", // start of every order code, for example PS-1020-K7QD
/* ---- 2. Colours (the whole look changes from here) ---- */
colors: {
cream: "#FBF6EE", // page background
paper: "#FFFDF9", // cards and panels
sand: "#F2E8DA", // soft sections
leaf: "#1F4A38", // deep green: headings, dark sections
leafSoft: "#2F6B52", // lighter green
accent: "#A94A2B", // terracotta: buttons and highlights
peach: "#F2C4A8", // soft peach touches
ink: "#1E2A24", // body text
muted: "#5A6359", // secondary text
line: "#E4D8C6" // thin borders
},
/* ---- 3. Contact and orders ---- */
whatsapp: "96500000000", // digits only, with country code, no plus sign
contact: { phone: "+965 0000 0000", email: "hello@petalandstem.example", instagram: "@petalandstem" },
hours: { en: "Every day, 8 am to 9 pm", ar: "كل يوم، من ٨ صباحًا إلى ٩ مساءً" },
address: { en: "Studio and shop: Salhiya, Kuwait City", ar: "الاستوديو والمتجر: الصالحية، مدينة الكويت" },
/* ---- 4. Currency ---- */
currency: { code: "KWD", symbol: { en: "KWD", ar: "د.ك" }, decimals: 3 },
/* ---- 5. Payment (NOT real: no card is charged on this site) ----
mode: "both" = pay on delivery or by payment link sent on WhatsApp
"cod" = pay on delivery only
"link" = payment link sent on WhatsApp only */
payment: {
mode: "both",
texts: {
both: { en: "Pay on delivery or by payment link sent on WhatsApp. No card is charged on this site.",
ar: "الدفع عند الاستلام أو عبر رابط دفع يصلك على واتساب. لا يتم سحب أي مبلغ من هذا الموقع." },
cod: { en: "Pay on delivery. No card is charged on this site.",
ar: "الدفع عند الاستلام. لا يتم سحب أي مبلغ من هذا الموقع." },
link: { en: "You will get a payment link on WhatsApp. No card is charged on this site.",
ar: "سيصلك رابط الدفع على واتساب. لا يتم سحب أي مبلغ من هذا الموقع." }
}
},
/* ---- 6. Delivery ---- */
delivery: {
freeOver: 35, // free delivery when the basket is this much or more (0 = never)
sameDayCutoffHour: 16, // orders after 4 pm start from tomorrow
windows: [
{ id: "w1", en: "9 am - 12 pm", ar: "٩ ص - ١٢ ظ" },
{ id: "w2", en: "12 pm - 3 pm", ar: "١٢ ظ - ٣ م" },
{ id: "w3", en: "3 pm - 6 pm", ar: "٣ م - ٦ م" },
{ id: "w4", en: "6 pm - 9 pm", ar: "٦ م - ٩ م" }
],
areas: [
{ id: "kuwait-city", en: "Kuwait City", ar: "مدينة الكويت", fee: 1.5 },
{ id: "salmiya", en: "Salmiya", ar: "السالمية", fee: 2 },
{ id: "hawally", en: "Hawally", ar: "حولي", fee: 2 },
{ id: "jabriya", en: "Jabriya", ar: "الجابرية", fee: 2 },
{ id: "rumaithiya", en: "Rumaithiya", ar: "الرميثية", fee: 2 },
{ id: "mishref", en: "Mishref", ar: "مشرف", fee: 2.5 },
{ id: "khaitan", en: "Khaitan", ar: "خيطان", fee: 3 },
{ id: "fahaheel", en: "Fahaheel", ar: "الفحيحيل", fee: 3.5 },
{ id: "jahra", en: "Jahra", ar: "الجهراء", fee: 4 },
{ id: "sabah-salem", en: "Sabah Al Salem", ar: "صباح السالم", fee: 3 }
]
},
/* ---- 7. Sizes and add-ons (prices are added to the product price) ---- */
sizes: [
{ id: "small", extra: 0, en: "Small", ar: "صغير", note: { en: "Compact and sweet", ar: "صغير ولطيف" } },
{ id: "medium", extra: 6, en: "Medium", ar: "وسط", note: { en: "Our classic size", ar: "حجمنا الكلاسيكي" } },
{ id: "large", extra: 13, en: "Large", ar: "كبير", note: { en: "A real statement", ar: "حضور لا يُنسى" } }
],
addons: [
{ id: "vase", price: 6, en: "Glass vase", ar: "مزهرية زجاجية" },
{ id: "chocolate", price: 4.5, en: "Box of chocolate", ar: "علبة شوكولاتة" },
{ id: "card", price: 1, en: "Card with your message", ar: "بطاقة برسالتك", message: true }
],
/* ---- 8. Categories (art = drawing used until you add a photo; image = photo path) ---- */
categories: [
{ id: "bouquets", en: "Bouquets", ar: "الباقات", art: { kind: "bouquet", palette: "blush", seed: 4 }, image: "" },
{ id: "plants", en: "Plants", ar: "النباتات", art: { kind: "plant", variant: "leafy", palette: "sage", seed: 2 }, image: "" },
{ id: "gifts", en: "Gifts", ar: "الهدايا", art: { kind: "gift", palette: "coral", seed: 5 }, image: "" },
{ id: "wedding", en: "Weddings and events", ar: "الأعراس والمناسبات", art: { kind: "wedding", palette: "ivory", seed: 3 }, image: "" },
{ id: "subscriptions", en: "Subscriptions", ar: "الاشتراكات", art: { kind: "vase", palette: "sun", seed: 6 }, image: "" }
],
occasions: [
{ id: "birthday", en: "Birthday", ar: "عيد ميلاد" },
{ id: "romance", en: "Romance", ar: "رومانسية" },
{ id: "thanks", en: "Thank you", ar: "شكرًا" },
{ id: "newhome", en: "New home", ar: "منزل جديد" },
{ id: "newbaby", en: "New baby", ar: "مولود جديد" },
{ id: "wedding", en: "Wedding", ar: "زفاف" }
],
/* ---- 8b. Hero picture (image: "images/hero.jpg" replaces the drawing) ---- */
hero: { image: "", art: { kind: "bouquet", palette: "blush", seed: 4 } },
/* ---- 9. Products ----
image: "images/my-photo.jpg" -> shows your photo
image: "" -> shows the drawn placeholder from "art"
art kinds: bouquet, plant (variant: leafy | succulent), gift, wedding, vase
palettes: blush, coral, sun, ivory, berry, sage
options: sizes true/false, addons list of add-on ids
recurring: text shown after the price (for subscriptions) */
products: [
{ id: "p1", category: "bouquets", price: 14.5, image: "", art: { kind: "bouquet", palette: "blush", seed: 11 },
name: { en: "Soft Blush Peonies", ar: "فاوانيا وردية ناعمة" },
desc: { en: "Full, cloud-like blooms in powder pink, tied with garden greens and wrapped in cream paper.",
ar: "أزهار ممتلئة بلون وردي هادئ، تُربط مع أوراق خضراء طازجة وتُلف بورق كريمي." },
occasions: ["birthday", "thanks", "newbaby"], badge: { en: "Bestseller", ar: "الأكثر طلبًا" }, sizes: true, addons: ["vase", "chocolate", "card"] },
{ id: "p2", category: "bouquets", price: 18, image: "", art: { kind: "bouquet", palette: "berry", seed: 21 },
name: { en: "Midnight Garden Roses", ar: "ورود الحديقة الداكنة" },
desc: { en: "Deep berry roses with a heady scent, hand-tied and finished with a satin ribbon.",
ar: "ورود بلون التوت العميق وعطر فواح، تُربط يدويًا وتُزيَّن بشريط ساتان." },
occasions: ["romance"], sizes: true, addons: ["vase", "chocolate", "card"] },
{ id: "p3", category: "bouquets", price: 12, image: "", art: { kind: "bouquet", palette: "sun", seed: 31 },
name: { en: "Sunday Market", ar: "سوق الأحد" },
desc: { en: "Sunny daisies and golden blooms, the cheerful bunch you bring to a friend's lunch.",
ar: "أقحوان مشرق وأزهار ذهبية، باقة مبهجة تحملها إلى غداء الأصدقاء." },
occasions: ["birthday", "thanks", "newhome"], sizes: true, addons: ["vase", "card"] },
{ id: "p4", category: "bouquets", price: 16.5, image: "", art: { kind: "bouquet", palette: "ivory", seed: 41 },
name: { en: "White Cloud", ar: "سحابة بيضاء" },
desc: { en: "Ivory peonies and white daisies with soft green foliage. Calm, clean and always welcome.",
ar: "فاوانيا عاجية وأقحوان أبيض مع أوراق خضراء ناعمة. هادئة وأنيقة ومرحّب بها دائمًا." },
occasions: ["newbaby", "newhome", "thanks"], badge: { en: "New", ar: "جديد" }, sizes: true, addons: ["vase", "chocolate", "card"] },
{ id: "p5", category: "bouquets", price: 15, image: "", art: { kind: "bouquet", palette: "coral", seed: 51 },
name: { en: "Terracotta Dusk", ar: "غروب التيراكوتا" },
desc: { en: "Warm coral and apricot blooms that glow like late afternoon light.",
ar: "أزهار بلون المرجان والمشمش تتوهج مثل ضوء العصر." },
occasions: ["birthday", "romance"], sizes: true, addons: ["vase", "chocolate", "card"] },
{ id: "p6", category: "plants", price: 22, image: "", art: { kind: "plant", variant: "leafy", palette: "sage", seed: 61 },
name: { en: "Leafy Floor Plant", ar: "نبتة أرضية ورقية" },
desc: { en: "A tall, glossy-leaved plant in a hand-finished clay pot. Loves bright, indirect light.",
ar: "نبتة طويلة بأوراق لامعة في إصيص طيني. تحب الضوء الساطع غير المباشر." },
occasions: ["newhome", "thanks"], sizes: true, addons: ["card"] },
{ id: "p7", category: "plants", price: 7.5, image: "", art: { kind: "plant", variant: "succulent", palette: "sage", seed: 71 },
name: { en: "Little Succulent", ar: "صبّار صغير" },
desc: { en: "A tidy rosette in a terracotta pot. Easy to love, very hard to kill.",
ar: "وردة صبّار مرتبة في إصيص تيراكوتا. سهلة العناية وتعيش طويلًا." },
occasions: ["thanks", "newhome", "birthday"], sizes: true, addons: ["card"] },
{ id: "p8", category: "plants", price: 11, image: "", art: { kind: "plant", variant: "leafy", palette: "ivory", seed: 81 },
name: { en: "Peace Lily", ar: "زنبق السلام" },
desc: { en: "White spoon-shaped flowers over dark green leaves. A calm gift for any room.",
ar: "أزهار بيضاء على شكل ملعقة فوق أوراق خضراء داكنة. هدية هادئة لكل غرفة." },
occasions: ["newhome", "newbaby"], sizes: true, addons: ["card"] },
{ id: "p9", category: "gifts", price: 19, image: "", art: { kind: "gift", palette: "blush", seed: 91 },
name: { en: "Bloom and Cocoa Box", ar: "صندوق الزهور والكاكاو" },
desc: { en: "A keepsake box of fresh blooms and handmade chocolate, tied with a bow.",
ar: "صندوق تذكاري من الزهور الطازجة وشوكولاتة مصنوعة يدويًا، مربوط بشريط." },
occasions: ["birthday", "romance", "thanks"], badge: { en: "Gift favourite", ar: "مفضّل للهدايا" }, sizes: true, addons: ["card"] },
{ id: "p10", category: "gifts", price: 15, image: "", art: { kind: "gift", palette: "sun", seed: 101 },
name: { en: "Stems and Candle", ar: "أزهار وشمعة" },
desc: { en: "A small hand-poured candle with a mini bouquet. Soft light and a little luxury.",
ar: "شمعة صغيرة مصبوبة يدويًا مع باقة مصغّرة. ضوء ناعم ولمسة فخامة." },
occasions: ["thanks", "newhome"], sizes: false, addons: ["card"] },
{ id: "p11", category: "wedding", price: 45, image: "", art: { kind: "bouquet", palette: "ivory", seed: 111 },
name: { en: "Bridal Bouquet", ar: "باقة العروس" },
desc: { en: "Designed with you for your dress and your day. Price shown is the starting point; we confirm the final design on WhatsApp.",
ar: "تُصمَّم معك لتناسب فستانك ويومك. السعر المعروض هو نقطة البداية، ونؤكد التصميم النهائي عبر واتساب." },
occasions: ["wedding"], badge: { en: "By design call", ar: "بالتصميم" }, sizes: false, addons: ["card"] },
{ id: "p12", category: "wedding", price: 38, image: "", art: { kind: "wedding", palette: "blush", seed: 121 },
name: { en: "Table Wreath Set", ar: "طقم أكاليل الطاولة" },
desc: { en: "Three low floral wreaths for your tables, with candles. Perfect for dinners and receptions.",
ar: "ثلاثة أكاليل زهور منخفضة لطاولاتك مع شموع. مناسبة للعشاء والاستقبالات." },
occasions: ["wedding"], sizes: false, addons: ["card"] },
{ id: "p13", category: "subscriptions", price: 11, image: "", art: { kind: "vase", palette: "coral", seed: 131 },
recurring: { en: "per week", ar: "في الأسبوع" },
name: { en: "Weekly Fresh Flowers", ar: "زهور طازجة أسبوعيًا" },
desc: { en: "A new seasonal bunch at your door every week. Pause or cancel any time; we confirm your plan on WhatsApp.",
ar: "باقة موسمية جديدة عند بابك كل أسبوع. أوقف الاشتراك أو ألغِه في أي وقت، ونؤكد خطتك عبر واتساب." },
occasions: ["thanks", "newhome"], badge: { en: "Weekly", ar: "أسبوعي" }, sizes: true, addons: ["vase"] },
{ id: "p14", category: "subscriptions", price: 28, image: "", art: { kind: "vase", palette: "sage", seed: 141 },
recurring: { en: "per month", ar: "في الشهر" },
name: { en: "Monthly Seasonal Box", ar: "صندوق الموسم الشهري" },
desc: { en: "One generous seasonal arrangement a month, chosen by our florists.",
ar: "تنسيق موسمي سخي كل شهر، يختاره مصممو الزهور لدينا." },
occasions: ["thanks"], sizes: true, addons: ["card"] }
],
/* ---- 10. Reviews ---- */
reviews: [
{ name: "Noor A.", stars: 5, en: "The peonies arrived fresh and exactly on time. My mother cried happy tears. We now order every month.",
ar: "وصلت الفاوانيا طازجة وفي الموعد تمامًا. أمي بكت من الفرح. صرنا نطلب كل شهر." },
{ name: "Faisal M.", stars: 5, en: "Easy to order and the message card was beautifully written. The bouquet looked even better than the picture.",
ar: "الطلب سهل وبطاقة الرسالة كانت مكتوبة بجمال. الباقة أجمل من الصورة." },
{ name: "Dana K.", stars: 5, en: "They did our whole wedding table. Calm, kind and so creative. Guests are still talking about it.",
ar: "نسّقوا طاولات زفافنا كاملة. هادئون ولطيفون ومبدعون. الضيوف ما زالوا يتحدثون عنها." }
],
/* ---- 11. Page texts ---- */
text: {
en: {
"skip": "Skip to content",
"nav.menu": "Menu", "nav.shop": "Shop", "nav.weekly": "Weekly flowers", "nav.reviews": "Reviews", "nav.delivery": "Delivery",
"nav.lang": "العربية", "nav.langLabel": "Switch to Arabic", "nav.cart": "Open cart", "nav.home": "Home",
"hero.season": "The autumn edit",
"hero.title": "Flowers that feel like <em>a good morning</em>",
"hero.text": "Seasonal bouquets, hand-tied by our florists and delivered fresh to your door. Order by 4 pm for same-day delivery.",
"hero.cta": "Shop flowers", "hero.cta2": "Weekly flowers",
"hero.p1": "Hand-tied daily", "hero.p2": "Fresh for seven days, or we replace them", "hero.p3": "Free delivery over {amount}",
"hero.card.title": "Same-day delivery", "hero.card.text": "Order before 4 pm",
"hero.art": "A hand-tied bouquet of blush peonies in cream paper",
"cats.eyebrow": "Browse", "cats.title": "Find the right bunch", "cats.text": "Five ways to say it with flowers.", "cats.items": "{n} pieces",
"shop.eyebrow": "The shop", "shop.title": "Fresh from the studio",
"shop.all": "All", "shop.categories": "Categories", "shop.occasion": "Occasion", "shop.occasionAll": "Any occasion",
"shop.sort": "Sort by", "sort.featured": "Featured", "sort.low": "Price: low to high", "sort.high": "Price: high to low", "sort.name": "Name",
"shop.count": "{n} products", "shop.empty": "Nothing matches these filters yet.", "shop.reset": "Clear filters", "shop.from": "From",
"product.size": "Choose a size", "product.addons": "Make it extra special", "product.cardMessage": "Your card message",
"product.cardPh": "Write a few kind words (up to 120 characters)", "product.area": "Delivery area", "product.areaPh": "Choose your area",
"product.date": "Delivery date", "product.dateHelp": "You can change this at checkout.", "product.add": "Add to cart",
"product.total": "Item total", "product.close": "Close", "product.delivery": "Delivery to {area}: {fee}",
"cart.title": "Your cart", "cart.empty": "Your cart is empty.", "cart.emptyCta": "Browse flowers", "cart.subtotal": "Subtotal",
"cart.delivery": "Delivery", "cart.pick": "Choose an area", "cart.free": "Free", "cart.total": "Total", "cart.checkout": "Checkout",
"cart.remove": "Remove", "cart.less": "Fewer", "cart.more": "More", "cart.qty": "Quantity", "cart.close": "Close cart",
"cart.area": "Delivery area", "cart.freeHint": "Add {amount} more for free delivery.", "cart.added": "Added to your cart", "cart.count": "{n} items in cart",
"co.title": "Checkout", "co.intro": "Tell us where and when. You send the order on WhatsApp in the next step.",
"co.name": "Full name", "co.phone": "Phone number", "co.address": "Address (block, street, house)", "co.area": "Delivery area",
"co.date": "Delivery date", "co.window": "Time window", "co.windowPh": "Choose a time", "co.gift": "Gift message (printed on the card)",
"co.note": "Note for the florist or driver", "co.optional": "optional", "co.place": "Review my order", "co.back": "Back to cart", "co.close": "Close",
"co.errRequired": "Please fill this in.", "co.errPhone": "Enter a valid phone number.", "co.errDate": "Pick a date from today onward.",
"co.errEmpty": "Your cart is empty.",
"sum.title": "Your order is ready", "sum.text": "One last step: send it to us on WhatsApp and we will confirm within minutes.",
"sum.code": "Order code", "sum.items": "Your items", "sum.details": "Delivery details", "sum.send": "Send order on WhatsApp",
"sum.done": "Done", "sum.edit": "Edit order", "sum.name": "Name", "sum.phone": "Phone", "sum.address": "Address", "sum.when": "When",
"sum.gift": "Gift message", "sum.note": "Note",
"wa.hello": "Hello, I would like to place an order.", "wa.order": "Order", "wa.items": "Items", "wa.sub": "Subtotal", "wa.delivery": "Delivery",
"wa.total": "Total", "wa.payment": "Payment", "wa.name": "Name", "wa.phone": "Phone", "wa.address": "Address", "wa.area": "Area", "wa.when": "Delivery date",
"wa.gift": "Gift message", "wa.note": "Note",
"sub.eyebrow": "Subscribe", "sub.title": "Subscribe to weekly flowers",
"sub.text": "A fresh seasonal bunch at your door every week, from the same florists who hand-tie our bouquets. Pause or cancel any time.",
"sub.p1": "A different seasonal mix every week", "sub.p2": "Skip a week with one message", "sub.p3": "Gift it to a friend or keep it for yourself",
"sub.choose": "Choose this plan", "sub.art": "A glass vase with fresh tulips and daisies",
"rev.eyebrow": "Kind words", "rev.title": "Loved at kitchen tables across the city", "rev.stars": "{n} out of 5 stars",
"del.eyebrow": "Delivery", "del.title": "Delivery information",
"del.text": "We deliver every day, 9 am to 9 pm. Pick your area and time window at checkout. Orders placed before 4 pm can arrive the same day.",
"del.areas": "Areas and fees", "del.windows": "Time windows", "del.free": "Free delivery on baskets of {amount} or more.",
"del.payTitle": "How to pay", "del.fee": "Fee",
"foot.text": "Seasonal flowers, plants and gifts, hand-tied in our studio every morning.", "foot.visit": "Visit and contact",
"foot.shop": "Shop", "foot.rights": "All rights reserved.", "foot.demo": "Demo shop. Orders are sent as a WhatsApp message; no payment is taken on this site.",
"lang.announce": "Language: English"
},
ar: {
"skip": "انتقل إلى المحتوى",
"nav.menu": "القائمة", "nav.shop": "المتجر", "nav.weekly": "زهور أسبوعية", "nav.reviews": "آراء العملاء", "nav.delivery": "التوصيل",
"nav.lang": "English", "nav.langLabel": "التبديل إلى الإنجليزية", "nav.cart": "فتح السلة", "nav.home": "الرئيسية",
"hero.season": "مجموعة الخريف",
"hero.title": "زهور تشبه <em>صباحًا جميلًا</em>",
"hero.text": "باقات موسمية يربطها مصممو الزهور لدينا يدويًا وتصلك طازجة إلى بابك. اطلب قبل الساعة ٤ عصرًا للتوصيل في اليوم نفسه.",
"hero.cta": "تسوّق الزهور", "hero.cta2": "الزهور الأسبوعية",
"hero.p1": "تُربط يدويًا كل يوم", "hero.p2": "طازجة لسبعة أيام أو نستبدلها", "hero.p3": "توصيل مجاني فوق {amount}",
"hero.card.title": "توصيل في اليوم نفسه", "hero.card.text": "اطلب قبل الساعة ٤ عصرًا",
"hero.art": "باقة فاوانيا وردية مربوطة يدويًا في ورق كريمي",
"cats.eyebrow": "تصفّح", "cats.title": "اعثر على الباقة المناسبة", "cats.text": "خمس طرق للتعبير بالزهور.", "cats.items": "{n} منتجات",
"shop.eyebrow": "المتجر", "shop.title": "طازجة من الاستوديو",
"shop.all": "الكل", "shop.categories": "التصنيفات", "shop.occasion": "المناسبة", "shop.occasionAll": "أي مناسبة",
"shop.sort": "ترتيب حسب", "sort.featured": "المميّز", "sort.low": "السعر: من الأقل إلى الأعلى", "sort.high": "السعر: من الأعلى إلى الأقل", "sort.name": "الاسم",
"shop.count": "{n} منتجات", "shop.empty": "لا توجد نتائج تطابق هذه الخيارات حاليًا.", "shop.reset": "مسح التصفية", "shop.from": "ابتداءً من",
"product.size": "اختر الحجم", "product.addons": "اجعلها أجمل", "product.cardMessage": "رسالة البطاقة",
"product.cardPh": "اكتب بضع كلمات لطيفة (حتى ١٢٠ حرفًا)", "product.area": "منطقة التوصيل", "product.areaPh": "اختر منطقتك",
"product.date": "تاريخ التوصيل", "product.dateHelp": "يمكنك تغييره عند إتمام الطلب.", "product.add": "أضف إلى السلة",
"product.total": "إجمالي المنتج", "product.close": "إغلاق", "product.delivery": "التوصيل إلى {area}: {fee}",
"cart.title": "سلتك", "cart.empty": "سلتك فارغة.", "cart.emptyCta": "تصفّح الزهور", "cart.subtotal": "المجموع الفرعي",
"cart.delivery": "التوصيل", "cart.pick": "اختر المنطقة", "cart.free": "مجاني", "cart.total": "الإجمالي", "cart.checkout": "إتمام الطلب",
"cart.remove": "إزالة", "cart.less": "أقل", "cart.more": "أكثر", "cart.qty": "الكمية", "cart.close": "إغلاق السلة",
"cart.area": "منطقة التوصيل", "cart.freeHint": "أضف {amount} للحصول على توصيل مجاني.", "cart.added": "تمت الإضافة إلى سلتك", "cart.count": "{n} عناصر في السلة",
"co.title": "إتمام الطلب", "co.intro": "أخبرنا أين ومتى. سترسل الطلب عبر واتساب في الخطوة التالية.",
"co.name": "الاسم الكامل", "co.phone": "رقم الهاتف", "co.address": "العنوان (القطعة، الشارع، المنزل)", "co.area": "منطقة التوصيل",
"co.date": "تاريخ التوصيل", "co.window": "وقت التوصيل", "co.windowPh": "اختر الوقت", "co.gift": "رسالة الهدية (تُطبع على البطاقة)",
"co.note": "ملاحظة لمصمم الزهور أو السائق", "co.optional": "اختياري", "co.place": "مراجعة طلبي", "co.back": "العودة إلى السلة", "co.close": "إغلاق",
"co.errRequired": "يرجى تعبئة هذا الحقل.", "co.errPhone": "أدخل رقم هاتف صحيحًا.", "co.errDate": "اختر تاريخًا من اليوم فصاعدًا.",
"co.errEmpty": "سلتك فارغة.",
"sum.title": "طلبك جاهز", "sum.text": "خطوة أخيرة: أرسله إلينا عبر واتساب وسنؤكده خلال دقائق.",
"sum.code": "رمز الطلب", "sum.items": "منتجاتك", "sum.details": "تفاصيل التوصيل", "sum.send": "أرسل الطلب عبر واتساب",
"sum.done": "تم", "sum.edit": "تعديل الطلب", "sum.name": "الاسم", "sum.phone": "الهاتف", "sum.address": "العنوان", "sum.when": "الموعد",
"sum.gift": "رسالة الهدية", "sum.note": "ملاحظة",
"wa.hello": "مرحبًا، أرغب في تقديم طلب.", "wa.order": "الطلب", "wa.items": "المنتجات", "wa.sub": "المجموع الفرعي", "wa.delivery": "التوصيل",
"wa.total": "الإجمالي", "wa.payment": "الدفع", "wa.name": "الاسم", "wa.phone": "الهاتف", "wa.address": "العنوان", "wa.area": "المنطقة", "wa.when": "موعد التوصيل",
"wa.gift": "رسالة الهدية", "wa.note": "ملاحظة",
"sub.eyebrow": "اشترك", "sub.title": "اشترك في الزهور الأسبوعية",
"sub.text": "باقة موسمية طازجة عند بابك كل أسبوع، من مصممي الزهور أنفسهم الذين يربطون باقاتنا يدويًا. أوقف الاشتراك أو ألغِه في أي وقت.",
"sub.p1": "تشكيلة موسمية مختلفة كل أسبوع", "sub.p2": "تخطَّ أسبوعًا برسالة واحدة", "sub.p3": "أهدِها لصديق أو احتفظ بها لنفسك",
"sub.choose": "اختر هذه الخطة", "sub.art": "مزهرية زجاجية فيها توليب وأقحوان طازج",
"rev.eyebrow": "كلمات طيبة", "rev.title": "محبوبة على موائد البيوت في كل المدينة", "rev.stars": "{n} من 5 نجوم",
"del.eyebrow": "التوصيل", "del.title": "معلومات التوصيل",
"del.text": "نوصّل كل يوم من ٩ صباحًا إلى ٩ مساءً. اختر منطقتك ووقتك عند إتمام الطلب. الطلبات قبل الساعة ٤ عصرًا قد تصل في اليوم نفسه.",
"del.areas": "المناطق والرسوم", "del.windows": "أوقات التوصيل", "del.free": "توصيل مجاني للسلات بقيمة {amount} أو أكثر.",
"del.payTitle": "طريقة الدفع", "del.fee": "الرسوم",
"foot.text": "زهور ونباتات وهدايا موسمية تُربط يدويًا في الاستوديو كل صباح.", "foot.visit": "الزيارة والتواصل",
"foot.shop": "المتجر", "foot.rights": "جميع الحقوق محفوظة.", "foot.demo": "متجر تجريبي. تُرسل الطلبات كرسالة واتساب، ولا يتم أي دفع على هذا الموقع.",
"lang.announce": "اللغة: العربية"
}
}
};
```
## When you have finished, check
- Adding a product with a size and an add-on gives the right line price and total.
- Free delivery applies at 35 KWD or more; area fees match config.
- The WhatsApp message and code are produced; both languages and RTL are correct; no sideways scroll at 390 px.
Where to paste it
ClaudePaste it in a new chat. For files, use Claude Code and run it in an empty folder.
ChatGPTPaste it in a new chat and ask for every file in separate code blocks.
GeminiPaste it in a new chat and ask for every file in separate code blocks.
CursorOpen an empty folder, paste it in the agent chat and let it create the files.
What to do after the AI answers
Save every file it gives you in one folder, with the same names.
Open index.html in your browser and compare it with the preview here.
If something is different, tell the AI exactly what, in one short sentence.