This commit is contained in:
Hamed
2026-08-02 13:05:28 +04:00
parent 574a18712d
commit 34f96d3830
24 changed files with 1169 additions and 1013 deletions
+32 -2
View File
@@ -4,8 +4,21 @@
<list default="true" id="bb7b50a5-be9c-4cd7-a05b-979f0e91b173" name="Changes" comment="update">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/globals.css" beforeDir="false" afterPath="$PROJECT_DIR$/app/globals.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/components/Header.jsx" beforeDir="false" afterPath="$PROJECT_DIR$/components/Header.jsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/components/HeroSection.jsx" beforeDir="false" afterPath="$PROJECT_DIR$/components/HeroSection.jsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/data/content.js" beforeDir="false" afterPath="$PROJECT_DIR$/data/content.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/public/video/showcase-placeholder.mp4" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/jsconfig.json" beforeDir="false" afterPath="$PROJECT_DIR$/jsconfig.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/logo.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/machine-35-base.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/machine-35-white.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/machine-48-base.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/machine-48-white.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/machine-60-base.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/machine-60-white.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/snacks/chips-1.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/snacks/chips-2.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/snacks/soda-1.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/public/images/snacks/soda-2.svg" beforeDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -86,6 +99,7 @@
<workItem from="1785583486761" duration="9000" />
<workItem from="1785583517424" duration="145000" />
<workItem from="1785645096071" duration="26000" />
<workItem from="1785646314677" duration="10534000" />
</task>
<task id="LOCAL-00001" summary="update">
<option name="closed" value="true" />
@@ -111,7 +125,23 @@
<option name="project" value="LOCAL" />
<updated>1785582935941</updated>
</task>
<option name="localTasksCounter" value="4" />
<task id="LOCAL-00004" summary="update">
<option name="closed" value="true" />
<created>1785646368102</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1785646368102</updated>
</task>
<task id="LOCAL-00005" summary="update">
<option name="closed" value="true" />
<created>1785646373594</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1785646373594</updated>
</task>
<option name="localTasksCounter" value="6" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
+64 -19
View File
@@ -56,9 +56,11 @@ html[dir='rtl'] body {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--color-scrollbar-track);
}
::-webkit-scrollbar-thumb {
background: var(--color-scrollbar-thumb);
border-radius: 999px;
@@ -66,21 +68,55 @@ html[dir='rtl'] body {
/* Semantic surface/text utilities — read the theme variables above so every
component that uses them automatically supports dark + light mode. */
.bg-page { background-color: var(--color-bg-page); }
.bg-elevated { background-color: var(--color-bg-elevated); }
.bg-surface { background-color: var(--color-bg-surface); }
.bg-surface-strong { background-color: var(--color-bg-surface-strong); }
.border-subtle { border-color: var(--color-border); }
.text-primary { color: var(--color-text-primary); }
.text-secondary { color: var(--color-text-secondary); }
.bg-page {
background-color: var(--color-bg-page);
}
.bg-elevated {
background-color: var(--color-bg-elevated);
}
.bg-surface {
background-color: var(--color-bg-surface);
}
.bg-surface-strong {
background-color: var(--color-bg-surface-strong);
}
.border-subtle {
border-color: var(--color-border);
}
.text-primary {
color: var(--color-text-primary);
}
.text-secondary {
color: var(--color-text-secondary);
}
/* Opacity variants of the tokens above (Tailwind's /NN modifier only works on
Tailwind-generated utilities, not these hand-written classes). */
.bg-page-60 { background-color: color-mix(in srgb, var(--color-bg-page) 60%, transparent); }
.bg-page-70 { background-color: color-mix(in srgb, var(--color-bg-page) 70%, transparent); }
.bg-page-85 { background-color: color-mix(in srgb, var(--color-bg-page) 85%, transparent); }
.bg-elevated-95 { background-color: color-mix(in srgb, var(--color-bg-elevated) 95%, transparent); }
.text-primary-90 { color: color-mix(in srgb, var(--color-text-primary) 90%, transparent); }
.bg-page-60 {
background-color: color-mix(in srgb, var(--color-bg-page) 60%, transparent);
}
.bg-page-70 {
background-color: color-mix(in srgb, var(--color-bg-page) 70%, transparent);
}
.bg-page-85 {
background-color: color-mix(in srgb, var(--color-bg-page) 85%, transparent);
}
.bg-elevated-95 {
background-color: color-mix(in srgb, var(--color-bg-elevated) 95%, transparent);
}
.text-primary-90 {
color: color-mix(in srgb, var(--color-text-primary) 90%, transparent);
}
/* ------------------------------------------------------------------ */
/* Horizontal scroll showcase (pinned via GSAP ScrollTrigger) */
@@ -88,7 +124,7 @@ html[dir='rtl'] body {
.horizontal-track {
display: flex;
height: 100vh;
width: max-content;
width: 100vw;
will-change: transform;
}
@@ -133,8 +169,7 @@ html[dir='rtl'] body {
height: 190px;
border-radius: 999px;
border: 2px solid rgba(0, 166, 147, 0.9);
box-shadow:
0 0 0 4px rgba(0, 166, 147, 0.15),
box-shadow: 0 0 0 4px rgba(0, 166, 147, 0.15),
0 0 40px 6px rgba(0, 166, 147, 0.45);
pointer-events: none;
transform: translate(-50%, -50%);
@@ -151,6 +186,7 @@ html[dir='rtl'] body {
.no-scrollbar::-webkit-scrollbar {
display: none;
}
.no-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
@@ -176,16 +212,25 @@ html[dir='rtl'] body {
}
@keyframes caretBlink {
0%, 49% { opacity: 1; }
50%, 100% { opacity: 0; }
0%, 49% {
opacity: 1;
}
50%, 100% {
opacity: 0;
}
}
/* ------------------------------------------------------------------ */
/* نوار لوگوی بی‌پایان (trusted-by marquee) */
/* ------------------------------------------------------------------ */
@keyframes marqueeScroll {
from { transform: translateX(0); }
to { transform: translateX(-50%); } /* دقیقاً نصف عرض، چون لیست دو برابر شده */
from {
transform: translateX(0);
}
to {
transform: translateX(-50%);
}
/* دقیقاً نصف عرض، چون لیست دو برابر شده */
}
.animate-marquee {
+6 -5
View File
@@ -44,7 +44,7 @@ export default function Header() {
>
<div className="mx-auto max-w-7xl px-5 md:px-8 h-20 flex items-center justify-between gap-4">
<a href="#hero" className="flex items-center gap-2 shrink-0">
<Image src="/images/logo.svg" alt="روبات مارکت" width={150} height={42} priority />
<Image src="/images/logo.png" alt="روبات مارکت" width={150} height={42} priority/>
</a>
<nav className="hidden xl:flex items-center gap-5 2xl:gap-7">
@@ -68,9 +68,9 @@ export default function Header() {
<Button
className="hidden sm:inline-flex"
icon={<UserOutlined/>}
onClick={() => {
/* TODO: point this at the real customer panel login route */
}}
href="https://panel.my-rm.com"
target="_blank"
rel="noopener noreferrer"
>
{t.nav.login}
</Button>
@@ -96,7 +96,8 @@ export default function Header() {
</div>
{mobileOpen && (
<nav className="xl:hidden bg-elevated-95 backdrop-blur-md border-t border-subtle px-5 py-4 flex flex-col gap-4 max-h-[calc(100vh-5rem)] overflow-y-auto">
<nav
className="xl:hidden bg-elevated-95 backdrop-blur-md border-t border-subtle px-5 py-4 flex flex-col gap-4 max-h-[calc(100vh-5rem)] overflow-y-auto">
{navLinks.map((link) => (
<a
key={link.href}
+5 -5
View File
@@ -59,7 +59,6 @@ export default function HeroSection() {
<div
className="absolute inset-y-0 w-1/3 hidden md:block"
style={{
[dir === 'rtl' ? 'left' : 'right']: '-6%',
background: 'linear-gradient(135deg, #00a693 0%, #017065 60%, #0b3d38 100%)',
clipPath:
dir === 'rtl'
@@ -101,19 +100,20 @@ export default function HeroSection() {
{/* ------------------------------------------------------------------ */}
{/* متن روی اسلاید: کیکر کوچک + عنوان بزرگ دو خطی + توضیح + دکمه CTA */}
{/* ------------------------------------------------------------------ */}
<div className="relative z-10 h-full flex flex-col justify-end md:justify-center px-6 md:px-16 pb-28 md:pb-0">
<div
className="relative z-10 h-full flex flex-col justify-end md:justify-center px-6 md:px-16 pb-28 md:pb-0">
<div className="max-w-2xl">
<span className="text-brand-400 font-semibold tracking-widest text-sm uppercase">
{slide.kicker}
</span>
<h1 className="mt-3 text-3xl sm:text-4xl md:text-6xl font-extrabold leading-tight text-primary">
<h1 className="mt-3 text-3xl sm:text-4xl md:text-6xl font-extrabold leading-tight text-white drop-shadow-[0_4px_12px_rgba(0,0,0,0.9)]">
{slide.titleLines.map((line, i) => (
<span key={i} className="block">
{line}
</span>
))}
</h1>
<p className="mt-5 text-secondary text-base md:text-lg max-w-xl">{slide.sub}</p>
<p className="mt-5 text-white/90 text-base md:text-lg max-w-xl drop-shadow-lg">{slide.sub}</p>
<a
href="#showcase"
className="mt-8 inline-flex items-center gap-2 bg-brand hover:bg-brand-400 text-ink-950 font-bold px-8 py-3.5 rounded-full transition-colors shadow-brandGlow"
@@ -124,7 +124,7 @@ export default function HeroSection() {
</div>
{/* ------------------------------------------------------------------ */}
{/* فلش‌های ناوبری دستی (قبلی / بعدی) — شبیه سایت Sielaff، وسط دو طرف */}
{/* فلش‌های ناوبری دستی (قبلی / بعدی) — وسط دو طرف */}
{/* ------------------------------------------------------------------ */}
<button
onClick={() => handleManualNav('prev')}
+56
View File
@@ -0,0 +1,56 @@
'use client';
/**
* سکشن «مشتریانی که به ما اعتماد کرده‌اند» — یک نوار لوگوی بی‌پایان (marquee)
* که به‌آرامی و پیوسته حرکت می‌کند. برای ساخت افکت حلقه‌ی بی‌پایان، لیست
* لوگوها را دو بار پشت‌سرهم رندر می‌کنیم و با انیمیشن CSS آن را جابه‌جا می‌کنیم.
*
* نکته فنی: مسیر (track) همیشه جهت LTR دارد، چون منطق «حرکت به چپ» انیمیشن
* فرض بر همین جهت است — دقیقاً همان مشکلی که در اسکرول افقی محصولات داشتیم و
* حلش کردیم. این‌جا هم برای جلوگیری از همان باگ، جهت را ثابت نگه داشتیم.
*/
import { useLanguage } from '@/app/context/LanguageContext';
export default function TrustedBySection() {
const { t } = useLanguage();
const clients = t.trustedBy.clients;
// لیست لوگوها را دو برابر می‌کنیم تا وقتی نیمه اول با انیمیشن رد شد،
// نیمه دوم دقیقاً از همان‌جا ادامه بدهد و چشم متوجه پرش/شکاف نشود.
const doubledClients = [...clients, ...clients];
return (
<section className="relative px-6 md:px-16 py-16 md:py-20 bg-page border-t border-subtle overflow-hidden">
<div className="max-w-6xl mx-auto">
<div className="text-center mb-10">
<span className="text-brand-400 text-sm font-semibold tracking-wide">{t.trustedBy.eyebrow}</span>
<h2 className="text-xl md:text-2xl font-extrabold text-primary mt-2">{t.trustedBy.title}</h2>
</div>
</div>
{/* یک محو تدریجی (fade mask) دو طرف نوار، تا لبه‌های لوگوها بریده به‌نظر نرسد */}
<div
className="relative"
style={{
maskImage: 'linear-gradient(90deg, transparent 0%, black 8%, black 92%, transparent 100%)',
WebkitMaskImage: 'linear-gradient(90deg, transparent 0%, black 8%, black 92%, transparent 100%)',
}}
>
<div className="flex w-max animate-marquee gap-10" dir="ltr">
{doubledClients.map((client, i) => (
<div
key={`${client.id}-${i}`}
className="w-40 md:w-48 shrink-0 flex items-center justify-center bg-surface border border-subtle rounded-xl p-4 opacity-80 hover:opacity-100 transition-opacity"
>
<img
src={`/images/clients/client-${((i % clients.length) + 1)}.svg`}
alt={client.name}
className="w-full h-auto"
/>
</div>
))}
</div>
</div>
</section>
);
}
+240 -59
View File
@@ -13,8 +13,8 @@ const machinesFa = [
priceNumeric: 3860000000,
description: 'یخچالدار، ۳۵ کانال اختصاصی، سیستم خنک‌کننده قدرتمند، تحویل نرم، مدیریت آنلاین ۲۴ ساعته.',
highlights: ['یخچالدار', '۳۵ کانال اختصاصی', 'تحویل نرم', 'مدیریت آنلاین ۲۴ ساعته'],
image: '/images/machine-35-base.svg',
imageAlt: '/images/machine-35-white.svg',
image: '/images/machine-35-base.png',
imageAlt: '/images/machine-35-white.png',
gif: '/gifs/machine-35.gif',
},
{
@@ -25,8 +25,8 @@ const machinesFa = [
priceNumeric: 4480000000,
description: 'یخچالدار، ۴۸ کانال اختصاصی، قابلیت‌های پیشرفته مدیریت آنلاین و تحویل کالا.',
highlights: ['یخچالدار', '۴۸ کانال اختصاصی', 'مدیریت آنلاین پیشرفته', 'تحویل هوشمند کالا'],
image: '/images/machine-48-base.svg',
imageAlt: '/images/machine-48-white.svg',
image: '/images/machine-48-base.png',
imageAlt: '/images/machine-48-white.png',
gif: '/gifs/machine-48.gif',
},
{
@@ -37,8 +37,8 @@ const machinesFa = [
priceNumeric: 4980000000,
description: 'یخچالدار، ۶۰ کانال اختصاصی برای کسب‌وکارهای پرتردد.',
highlights: ['یخچالدار', '۶۰ کانال اختصاصی', 'مناسب اماکن پرتردد', 'ظرفیت بالا'],
image: '/images/machine-60-base.svg',
imageAlt: '/images/machine-60-white.svg',
image: '/images/machine-60-base.png',
imageAlt: '/images/machine-60-white.png',
gif: '/gifs/machine-60.gif',
},
];
@@ -52,8 +52,8 @@ const machinesEn = [
priceNumeric: 3860000000,
description: 'Refrigerated, 35 dedicated channels, powerful cooling system, soft delivery, 24/7 online management.',
highlights: ['Refrigerated', '35 dedicated channels', 'Soft delivery', '24/7 online management'],
image: '/images/machine-35-base.svg',
imageAlt: '/images/machine-35-white.svg',
image: '/images/machine-35-base.png',
imageAlt: '/images/machine-35-white.png',
gif: '/gifs/machine-35.gif',
},
{
@@ -64,8 +64,8 @@ const machinesEn = [
priceNumeric: 4480000000,
description: 'Refrigerated, 48 dedicated channels, advanced online management and delivery capabilities.',
highlights: ['Refrigerated', '48 dedicated channels', 'Advanced online management', 'Smart delivery'],
image: '/images/machine-48-base.svg',
imageAlt: '/images/machine-48-white.svg',
image: '/images/machine-48-base.png',
imageAlt: '/images/machine-48-white.png',
gif: '/gifs/machine-48.gif',
},
{
@@ -76,8 +76,8 @@ const machinesEn = [
priceNumeric: 4980000000,
description: 'Refrigerated, 60 dedicated channels for high-traffic businesses.',
highlights: ['Refrigerated', '60 dedicated channels', 'Ideal for high-traffic venues', 'High capacity'],
image: '/images/machine-60-base.svg',
imageAlt: '/images/machine-60-white.svg',
image: '/images/machine-60-base.png',
imageAlt: '/images/machine-60-white.png',
gif: '/gifs/machine-60.gif',
},
];
@@ -106,29 +106,27 @@ export const content = {
hero: {
loading: 'در حال بارگذاری روبات مارکت…',
cta: 'مشاهده دستگاه‌ها',
// هر اسلاید یک تصویر دستگاه + یک عنوان دو خطی بزرگ (شبیه سایت Sielaff) دارد.
// برای افزودن اسلاید جدید، فقط یک آیتم دیگر به این آرایه اضافه کنید.
slides: [
{
id: 'slide-1',
kicker: 'روبات مارکت',
titleLines: ['فروش خودکار،', 'هوشمند و بی‌وقفه'],
sub: 'تجربه‌ای نوین از خرید آسان و سریع با دستگاه‌های وندینگ روبات مارکت.',
image: '/images/machine-35-base.svg',
image: '/images/machine-slide-0.png',
},
{
id: 'slide-2',
kicker: 'یخچالدار',
titleLines: ['خنک‌کننده قدرتمند،', 'کیفیت تضمینی'],
sub: 'نگهداری اصولی تنقلات و نوشیدنی سرد، ۲۴ ساعته و بدون نیاز به نیروی انسانی.',
image: '/images/machine-48-base.svg',
image: '/images/machine-slide-1.png',
},
{
id: 'slide-3',
kicker: 'مدیریت آنلاین',
titleLines: ['کنترل کامل کسب‌وکار', 'از راه دور'],
sub: 'مدیریت موجودی، فروش و گزارش‌گیری آنلاین، هر ساعت از شبانه‌روز.',
image: '/images/machine-60-base.svg',
image: '/images/machine-slide-2.png',
},
],
},
@@ -153,7 +151,6 @@ export const content = {
trustedBy: {
eyebrow: 'اعتماد شما، افتخار ماست',
title: 'کسب‌وکارهایی که به روبات مارکت اعتماد کرده‌اند',
// اسم‌های نمونه/فرضی هستند — با نام مشتریان واقعی جایگزین کنید.
clients: [
{id: 'c1', name: 'هتل پارسیان'},
{id: 'c2', name: 'دانشگاه فردوسی'},
@@ -164,10 +161,30 @@ export const content = {
],
},
features: [
{ id: 'warranty', icon: 'safety', title: 'ضمانت کالا', description: 'کلیه محصولات شرکت دارای یک سال خدمات پس از فروش می‌باشند.' },
{ id: 'consulting', icon: 'consulting', title: 'مشاوره تخصصی و رایگان', description: 'خدمات مشاوره رایگان در مورد نوع دستگاه و چیدمان محصولات.' },
{ id: 'installment', icon: 'installment', title: 'امکان خرید اقساطی', description: 'امکان خرید اقساط با شرایط آسان و مناسب جهت کلیه مشاغل.' },
{ id: 'packaging', icon: 'packaging', title: 'بسته‌بندی ایمن', description: 'با درخواست شما، محصولات با بسته‌بندی باکس پالت با هزینه‌ای اندک ارسال می‌شود.' },
{
id: 'warranty',
icon: 'safety',
title: 'ضمانت کالا',
description: 'کلیه محصولات شرکت دارای یک سال خدمات پس از فروش می‌باشند.'
},
{
id: 'consulting',
icon: 'consulting',
title: 'مشاوره تخصصی و رایگان',
description: 'خدمات مشاوره رایگان در مورد نوع دستگاه و چیدمان محصولات.'
},
{
id: 'installment',
icon: 'installment',
title: 'امکان خرید اقساطی',
description: 'امکان خرید اقساط با شرایط آسان و مناسب جهت کلیه مشاغل.'
},
{
id: 'packaging',
icon: 'packaging',
title: 'بسته‌بندی ایمن',
description: 'با درخواست شما، محصولات با بسته‌بندی باکس پالت با هزینه‌ای اندک ارسال می‌شود.'
},
],
about: {
eyebrow: 'معرفی شرکت',
@@ -188,12 +205,42 @@ export const content = {
locations: {
title: 'مکان مناسب برای نصب روبات مارکت',
items: [
{ id: 'hotels', icon: 'hotel', title: 'هتل‌ها و مراکز اقامتی', description: 'هر جایی که جمعیت زیادی در صف انتظار قرار دارند، به‌جز درآمد، روبات مارکت جزو امکانات رفاهی آن مکان محسوب شده و میزان رضایت مراجعان را نیز افزایش می‌دهد.' },
{ id: 'schools', icon: 'school', title: 'مراکز آموزشی و مدارس', description: 'در صورتی که هر یک از دانش‌آموزان و دانشجویان برای خرید مایحتاج خود به خارج از مجموعه مراجعه کنند و خدای‌ناکرده اتفاقی بیفتد، مسئولیت آن مستقیماً به عهده مدیر آموزشگاه است. در نتیجه وجود یک روبات مارکت در هر آموزشگاه ضروری است.' },
{ id: 'pharmacies', icon: 'pharmacy', title: 'داروخانه‌ها و سوپرمارکت‌ها', description: 'برای فروش محصولات جنسی و پیشگیری، ویژه مشتریانی که برای خرید آن معذوریت دارند.' },
{ id: 'hospitals', icon: 'hospital', title: 'بیمارستان‌ها و مراکز درمانی', description: 'برای فروش محصولات جنسی و پیشگیری، ویژه مشتریانی که برای خرید آن معذوریت دارند.' },
{ id: 'night-shift', icon: 'night', title: 'کشیک شیفت شب', description: 'امکان تعبیه روبات مارکت پشت شیشه سکوریت مغازه‌ها نیز وجود دارد تا در زمان تعطیلی فروشگاه و حتی نیمه‌شب‌ها، روبات زحمتکش در حال خدمت‌دهی به مشتریان عزیز شما باشد.' },
{ id: 'specialty', icon: 'specialty', title: 'محصولات تخصصی', description: 'اگر تولیدکننده هستید یا نماینده تولیدکننده محصولی خاص هستید، یک روبات مارکت می‌تواند مسئولیت معرفی و عرضه محصولات تخصصی شما را نیز بر عهده بگیرد.' },
{
id: 'hotels',
icon: 'hotel',
title: 'هتل‌ها و مراکز اقامتی',
description: 'هر جایی که جمعیت زیادی در صف انتظار قرار دارند، به‌جز درآمد، روبات مارکت جزو امکانات رفاهی آن مکان محسوب شده و میزان رضایت مراجعان را نیز افزایش می‌دهد.'
},
{
id: 'schools',
icon: 'school',
title: 'مراکز آموزشی و مدارس',
description: 'در صورتی که هر یک از دانش‌آموزان و دانشجویان برای خرید مایحتاج خود به خارج از مجموعه مراجعه کنند و خدای‌ناکرده اتفاقی بیفتد، مسئولیت آن مستقیماً به عهده مدیر آموزشگاه است. در نتیجه وجود یک روبات مارکت در هر آموزشگاه ضروری است.'
},
{
id: 'pharmacies',
icon: 'pharmacy',
title: 'داروخانه‌ها و سوپرمارکت‌ها',
description: 'برای فروش محصولات جنسی و پیشگیری، ویژه مشتریانی که برای خرید آن معذوریت دارند.'
},
{
id: 'hospitals',
icon: 'hospital',
title: 'بیمارستان‌ها و مراکز درمانی',
description: 'برای فروش محصولات جنسی و پیشگیری، ویژه مشتریانی که برای خرید آن معذوریت دارند.'
},
{
id: 'night-shift',
icon: 'night',
title: 'کشیک شیفت شب',
description: 'امکان تعبیه روبات مارکت پشت شیشه سکوریت مغازه‌ها نیز وجود دارد تا در زمان تعطیلی فروشگاه و حتی نیمه‌شب‌ها، روبات زحمتکش در حال خدمت‌دهی به مشتریان عزیز شما باشد.'
},
{
id: 'specialty',
icon: 'specialty',
title: 'محصولات تخصصی',
description: 'اگر تولیدکننده هستید یا نماینده تولیدکننده محصولی خاص هستید، یک روبات مارکت می‌تواند مسئولیت معرفی و عرضه محصولات تخصصی شما را نیز بر عهده بگیرد.'
},
],
},
catalog: {
@@ -206,12 +253,54 @@ export const content = {
machinePriceLabel: 'قیمت ویژه مشتریان روبات مارکت',
addToast: (name) => `${name} به لیست سفارش اضافه شد`,
items: [
{ id: 'saffron', name: 'زعفران ممتاز درجه‌یک', category: 'زعفران', image: '/images/catalog/saffron.svg', originalPriceNumeric: 12000000, priceNumeric: 8900000 },
{ id: 'chips', name: 'چیپس و پفک (بسته عمده)', category: 'تنقلات', image: '/images/snacks/chips-1.svg', originalPriceNumeric: 450000, priceNumeric: 320000 },
{ id: 'soda', name: 'نوشابه و نوشیدنی گازدار', category: 'نوشیدنی', image: '/images/snacks/soda-1.svg', originalPriceNumeric: 250000, priceNumeric: 180000 },
{ id: 'water', name: 'آب معدنی', category: 'نوشیدنی', image: '/images/catalog/water.svg', originalPriceNumeric: 120000, priceNumeric: 80000 },
{ id: 'coffee', name: 'قهوه فوری', category: 'گرم', image: '/images/catalog/coffee.svg', originalPriceNumeric: 650000, priceNumeric: 470000 },
{ id: 'tea', name: 'چای کیسه‌ای', category: 'گرم', image: '/images/catalog/tea.svg', originalPriceNumeric: 380000, priceNumeric: 270000 },
{
id: 'saffron',
name: 'زعفران ممتاز درجه‌یک',
category: 'زعفران',
image: '/images/catalog/saffron.svg',
originalPriceNumeric: 12000000,
priceNumeric: 8900000
},
{
id: 'chips',
name: 'چیپس و پفک (بسته عمده)',
category: 'تنقلات',
image: '/images/snacks/chips-1.svg',
originalPriceNumeric: 450000,
priceNumeric: 320000
},
{
id: 'soda',
name: 'نوشابه و نوشیدنی گازدار',
category: 'نوشیدنی',
image: '/images/snacks/soda-1.svg',
originalPriceNumeric: 250000,
priceNumeric: 180000
},
{
id: 'water',
name: 'آب معدنی',
category: 'نوشیدنی',
image: '/images/catalog/water.svg',
originalPriceNumeric: 120000,
priceNumeric: 80000
},
{
id: 'coffee',
name: 'قهوه فوری',
category: 'گرم',
image: '/images/catalog/coffee.svg',
originalPriceNumeric: 650000,
priceNumeric: 470000
},
{
id: 'tea',
name: 'چای کیسه‌ای',
category: 'گرم',
image: '/images/catalog/tea.svg',
originalPriceNumeric: 380000,
priceNumeric: 270000
},
],
},
introVideo: {
@@ -313,21 +402,21 @@ export const content = {
kicker: 'Robot Market',
titleLines: ['Automated selling,', 'smart & non-stop'],
sub: 'A new experience of fast, easy shopping with Robot Market vending machines.',
image: '/images/machine-35-base.svg',
image: '/images/machine-slide-0.png',
},
{
id: 'slide-2',
kicker: 'Refrigerated',
titleLines: ['Powerful cooling,', 'guaranteed quality'],
sub: 'Proper storage for snacks and cold drinks, 24/7, with no staff required.',
image: '/images/machine-48-base.svg',
image: '/images/machine-slide-1.png',
},
{
id: 'slide-3',
kicker: 'Online Management',
titleLines: ['Full control of your', 'business, remotely'],
sub: 'Manage inventory, sales, and reports online, any hour of the day.',
image: '/images/machine-60-base.svg',
image: '/images/machine-slide-2.png',
},
],
},
@@ -363,10 +452,30 @@ export const content = {
],
},
features: [
{ id: 'warranty', icon: 'safety', title: 'Product Warranty', description: 'All our products come with one year of after-sales service.' },
{ id: 'consulting', icon: 'consulting', title: 'Free Expert Consulting', description: 'Free consulting on the right machine type and product layout.' },
{ id: 'installment', icon: 'installment', title: 'Installment Purchase', description: 'Flexible, easy installment plans suitable for any business.' },
{ id: 'packaging', icon: 'packaging', title: 'Secure Packaging', description: 'On request, products ship in pallet-box packaging for a small fee.' },
{
id: 'warranty',
icon: 'safety',
title: 'Product Warranty',
description: 'All our products come with one year of after-sales service.'
},
{
id: 'consulting',
icon: 'consulting',
title: 'Free Expert Consulting',
description: 'Free consulting on the right machine type and product layout.'
},
{
id: 'installment',
icon: 'installment',
title: 'Installment Purchase',
description: 'Flexible, easy installment plans suitable for any business.'
},
{
id: 'packaging',
icon: 'packaging',
title: 'Secure Packaging',
description: 'On request, products ship in pallet-box packaging for a small fee.'
},
],
about: {
eyebrow: 'Company Profile',
@@ -387,12 +496,42 @@ export const content = {
locations: {
title: 'Ideal Locations for a Robot Market Machine',
items: [
{ id: 'hotels', icon: 'hotel', title: 'Hotels & Accommodations', description: 'Anywhere large crowds wait in line — beyond the revenue, Robot Market becomes an amenity that increases guest satisfaction.' },
{ id: 'schools', icon: 'school', title: 'Schools & Educational Centers', description: 'If a student has to leave campus to buy something and, God forbid, an incident occurs, responsibility falls directly on the school administrator. A Robot Market on-site is essential.' },
{ id: 'pharmacies', icon: 'pharmacy', title: 'Pharmacies & Supermarkets', description: 'For selling personal/health products discreetly, for customers who prefer not to purchase them in person.' },
{ id: 'hospitals', icon: 'hospital', title: 'Hospitals & Medical Centers', description: 'For selling personal/health products discreetly, for customers who prefer not to purchase them in person.' },
{ id: 'night-shift', icon: 'night', title: 'Night-Shift Coverage', description: 'Robot Market can be installed behind a shop\'s security glass, serving customers even after closing time and in the middle of the night.' },
{ id: 'specialty', icon: 'specialty', title: 'Specialty Products', description: 'If you manufacture or represent a specific product line, a Robot Market machine can take on introducing and offering your specialty products too.' },
{
id: 'hotels',
icon: 'hotel',
title: 'Hotels & Accommodations',
description: 'Anywhere large crowds wait in line — beyond the revenue, Robot Market becomes an amenity that increases guest satisfaction.'
},
{
id: 'schools',
icon: 'school',
title: 'Schools & Educational Centers',
description: 'If a student has to leave campus to buy something and, God forbid, an incident occurs, responsibility falls directly on the school administrator. A Robot Market on-site is essential.'
},
{
id: 'pharmacies',
icon: 'pharmacy',
title: 'Pharmacies & Supermarkets',
description: 'For selling personal/health products discreetly, for customers who prefer not to purchase them in person.'
},
{
id: 'hospitals',
icon: 'hospital',
title: 'Hospitals & Medical Centers',
description: 'For selling personal/health products discreetly, for customers who prefer not to purchase them in person.'
},
{
id: 'night-shift',
icon: 'night',
title: 'Night-Shift Coverage',
description: 'Robot Market can be installed behind a shop\'s security glass, serving customers even after closing time and in the middle of the night.'
},
{
id: 'specialty',
icon: 'specialty',
title: 'Specialty Products',
description: 'If you manufacture or represent a specific product line, a Robot Market machine can take on introducing and offering your specialty products too.'
},
],
},
catalog: {
@@ -405,12 +544,54 @@ export const content = {
machinePriceLabel: 'Robot Market customer price',
addToast: (name) => `${name} added to your order`,
items: [
{ id: 'saffron', name: 'Premium Grade-1 Saffron', category: 'Saffron', image: '/images/catalog/saffron.svg', originalPriceNumeric: 12000000, priceNumeric: 8900000 },
{ id: 'chips', name: 'Chips & Crisps (bulk pack)', category: 'Snacks', image: '/images/snacks/chips-1.svg', originalPriceNumeric: 450000, priceNumeric: 320000 },
{ id: 'soda', name: 'Soda & Carbonated Drinks', category: 'Drinks', image: '/images/snacks/soda-1.svg', originalPriceNumeric: 250000, priceNumeric: 180000 },
{ id: 'water', name: 'Mineral Water', category: 'Drinks', image: '/images/catalog/water.svg', originalPriceNumeric: 120000, priceNumeric: 80000 },
{ id: 'coffee', name: 'Instant Coffee', category: 'Hot Drinks', image: '/images/catalog/coffee.svg', originalPriceNumeric: 650000, priceNumeric: 470000 },
{ id: 'tea', name: 'Tea Bags', category: 'Hot Drinks', image: '/images/catalog/tea.svg', originalPriceNumeric: 380000, priceNumeric: 270000 },
{
id: 'saffron',
name: 'Premium Grade-1 Saffron',
category: 'Saffron',
image: '/images/catalog/saffron.svg',
originalPriceNumeric: 12000000,
priceNumeric: 8900000
},
{
id: 'chips',
name: 'Chips & Crisps (bulk pack)',
category: 'Snacks',
image: '/images/snacks/chips-1.svg',
originalPriceNumeric: 450000,
priceNumeric: 320000
},
{
id: 'soda',
name: 'Soda & Carbonated Drinks',
category: 'Drinks',
image: '/images/snacks/soda-1.svg',
originalPriceNumeric: 250000,
priceNumeric: 180000
},
{
id: 'water',
name: 'Mineral Water',
category: 'Drinks',
image: '/images/catalog/water.svg',
originalPriceNumeric: 120000,
priceNumeric: 80000
},
{
id: 'coffee',
name: 'Instant Coffee',
category: 'Hot Drinks',
image: '/images/catalog/coffee.svg',
originalPriceNumeric: 650000,
priceNumeric: 470000
},
{
id: 'tea',
name: 'Tea Bags',
category: 'Hot Drinks',
image: '/images/catalog/tea.svg',
originalPriceNumeric: 380000,
priceNumeric: 270000
},
],
},
introVideo: {
@@ -486,12 +667,12 @@ export const content = {
// Locale-independent asset config (positions/paths only — same in both languages).
export const floatingSnacks = [
{ id: 'chips-1', image: '/images/snacks/chips-1.svg', size: 76, top: '18%', left: '8%', duration: 5.5, delay: 0 },
{ id: 'soda-1', image: '/images/snacks/soda-1.svg', size: 64, top: '68%', left: '12%', duration: 6.2, delay: 0.6 },
{ id: 'chips-2', image: '/images/snacks/chips-2.svg', size: 58, top: '22%', left: '85%', duration: 4.8, delay: 0.3 },
{ id: 'soda-2', image: '/images/snacks/soda-2.svg', size: 70, top: '72%', left: '88%', duration: 5.9, delay: 0.9 },
{ id: 'chips-3', image: '/images/snacks/chips-1.svg', size: 48, top: '42%', left: '90%', duration: 6.6, delay: 1.2 },
{ id: 'soda-3', image: '/images/snacks/soda-1.svg', size: 52, top: '46%', left: '4%', duration: 5.1, delay: 1.5 },
{id: 'chips-1', image: '/images/snacks/item-1.png', size: 76, top: '18%', left: '8%', duration: 5.5, delay: 0},
{id: 'soda-1', image: '/images/snacks/item-2.png', size: 64, top: '68%', left: '12%', duration: 6.2, delay: 0.6},
{id: 'chips-2', image: '/images/snacks/item-3.png', size: 58, top: '22%', left: '85%', duration: 4.8, delay: 0.3},
{id: 'soda-2', image: '/images/snacks/item-4.png', size: 70, top: '72%', left: '88%', duration: 5.9, delay: 0.9},
{id: 'chips-3', image: '/images/snacks/item-5.png', size: 48, top: '42%', left: '90%', duration: 6.6, delay: 1.2},
{id: 'soda-3', image: '/images/snacks/item-6.png', size: 52, top: '46%', left: '4%', duration: 5.1, delay: 1.5},
];
export const showcaseVideoSrc = '/video/showcase-placeholder.mp4';
+2 -1
View File
@@ -3,6 +3,7 @@
"baseUrl": ".",
"paths": {
"@/*": ["./*"]
}
},
"jsx": "react"
}
}
+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 80" width="200" height="80">
<rect x="2" y="2" width="196" height="76" rx="12" fill="none" stroke="#00a693" stroke-opacity="0.3" stroke-width="2"/>
<circle cx="40" cy="40" r="20" fill="#00a693"/>
<text x="40" y="47" font-family="Tahoma, sans-serif" font-size="20" font-weight="bold" fill="#ffffff" text-anchor="middle">پ</text>
<rect x="72" y="32" width="100" height="8" rx="4" fill="#00a693" fill-opacity="0.35"/>
<rect x="72" y="46" width="70" height="6" rx="3" fill="#00a693" fill-opacity="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 575 B

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 80" width="200" height="80">
<rect x="2" y="2" width="196" height="76" rx="12" fill="none" stroke="#00a693" stroke-opacity="0.3" stroke-width="2"/>
<circle cx="40" cy="40" r="20" fill="#017065"/>
<text x="40" y="47" font-family="Tahoma, sans-serif" font-size="20" font-weight="bold" fill="#ffffff" text-anchor="middle">ف</text>
<rect x="72" y="32" width="100" height="8" rx="4" fill="#00a693" fill-opacity="0.35"/>
<rect x="72" y="46" width="70" height="6" rx="3" fill="#00a693" fill-opacity="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 575 B

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 80" width="200" height="80">
<rect x="2" y="2" width="196" height="76" rx="12" fill="none" stroke="#00a693" stroke-opacity="0.3" stroke-width="2"/>
<circle cx="40" cy="40" r="20" fill="#00a693"/>
<text x="40" y="47" font-family="Tahoma, sans-serif" font-size="20" font-weight="bold" fill="#ffffff" text-anchor="middle">ر</text>
<rect x="72" y="32" width="100" height="8" rx="4" fill="#00a693" fill-opacity="0.35"/>
<rect x="72" y="46" width="70" height="6" rx="3" fill="#00a693" fill-opacity="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 575 B

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 80" width="200" height="80">
<rect x="2" y="2" width="196" height="76" rx="12" fill="none" stroke="#00a693" stroke-opacity="0.3" stroke-width="2"/>
<circle cx="40" cy="40" r="20" fill="#0b3d38"/>
<text x="40" y="47" font-family="Tahoma, sans-serif" font-size="20" font-weight="bold" fill="#ffffff" text-anchor="middle">ر</text>
<rect x="72" y="32" width="100" height="8" rx="4" fill="#00a693" fill-opacity="0.35"/>
<rect x="72" y="46" width="70" height="6" rx="3" fill="#00a693" fill-opacity="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 575 B

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 80" width="200" height="80">
<rect x="2" y="2" width="196" height="76" rx="12" fill="none" stroke="#00a693" stroke-opacity="0.3" stroke-width="2"/>
<circle cx="40" cy="40" r="20" fill="#00a693"/>
<text x="40" y="47" font-family="Tahoma, sans-serif" font-size="20" font-weight="bold" fill="#ffffff" text-anchor="middle">آ</text>
<rect x="72" y="32" width="100" height="8" rx="4" fill="#00a693" fill-opacity="0.35"/>
<rect x="72" y="46" width="70" height="6" rx="3" fill="#00a693" fill-opacity="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 575 B

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 80" width="200" height="80">
<rect x="2" y="2" width="196" height="76" rx="12" fill="none" stroke="#00a693" stroke-opacity="0.3" stroke-width="2"/>
<circle cx="40" cy="40" r="20" fill="#017065"/>
<text x="40" y="47" font-family="Tahoma, sans-serif" font-size="20" font-weight="bold" fill="#ffffff" text-anchor="middle">ت</text>
<rect x="72" y="32" width="100" height="8" rx="4" fill="#00a693" fill-opacity="0.35"/>
<rect x="72" y="46" width="70" height="6" rx="3" fill="#00a693" fill-opacity="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 575 B

-8
View File
@@ -1,8 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 220 60" width="220" height="60">
<rect x="2" y="2" width="56" height="56" rx="14" fill="#00a693"/>
<rect x="16" y="14" width="28" height="32" rx="4" fill="#04120f"/>
<rect x="20" y="18" width="8" height="10" rx="1" fill="#00a693"/>
<rect x="32" y="18" width="8" height="10" rx="1" fill="#00a693"/>
<text x="70" y="27" font-family="Tahoma, sans-serif" font-size="20" font-weight="bold" fill="#e6f7f4">روبات مارکت</text>
<text x="70" y="46" font-family="Tahoma, sans-serif" font-size="12" fill="#8fdccc">Robot Market</text>
</svg>

Before

Width:  |  Height:  |  Size: 604 B

-28
View File
@@ -1,28 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 700" width="400" height="700">
<defs>
<linearGradient id="body" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#00a693" stop-opacity="0.95"/>
<stop offset="1" stop-color="#08554e"/>
</linearGradient>
</defs>
<rect x="40" y="30" width="320" height="620" rx="26" fill="url(#body)" stroke="#012e28" stroke-width="6"/>
<rect x="70" y="70" width="260" height="360" rx="10" fill="#04120f" opacity="0.55"/>
<g fill="#0b3d38" opacity="0.9">
<rect x="85" y="85" width="55" height="80" rx="4"/>
<rect x="150" y="85" width="55" height="80" rx="4"/>
<rect x="215" y="85" width="55" height="80" rx="4"/>
<rect x="280" y="85" width="35" height="80" rx="4"/>
<rect x="85" y="175" width="55" height="80" rx="4"/>
<rect x="150" y="175" width="55" height="80" rx="4"/>
<rect x="215" y="175" width="55" height="80" rx="4"/>
<rect x="280" y="175" width="35" height="80" rx="4"/>
<rect x="85" y="265" width="55" height="80" rx="4"/>
<rect x="150" y="265" width="55" height="80" rx="4"/>
<rect x="215" y="265" width="55" height="80" rx="4"/>
<rect x="280" y="265" width="35" height="80" rx="4"/>
</g>
<rect x="70" y="450" width="260" height="150" rx="10" fill="#04120f" opacity="0.4"/>
<circle cx="200" cy="525" r="34" fill="none" stroke="#e6f7f4" stroke-width="4"/>
<rect x="185" y="595" width="30" height="40" rx="4" fill="#04120f"/>
<text x="200" y="670" font-family="Tahoma, sans-serif" font-size="26" fill="#e6f7f4" text-anchor="middle">RM-35</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

-28
View File
@@ -1,28 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 700" width="400" height="700">
<defs>
<linearGradient id="body" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#ffffff"/>
<stop offset="1" stop-color="#dff3ef"/>
</linearGradient>
</defs>
<rect x="40" y="30" width="320" height="620" rx="26" fill="url(#body)" stroke="#00a693" stroke-width="6"/>
<rect x="70" y="70" width="260" height="360" rx="10" fill="#ffffff" opacity="0.9" stroke="#8fdccc" stroke-width="2"/>
<g fill="#c0ebe3" stroke="#00a693" stroke-width="1.5">
<rect x="85" y="85" width="55" height="80" rx="4"/>
<rect x="150" y="85" width="55" height="80" rx="4"/>
<rect x="215" y="85" width="55" height="80" rx="4"/>
<rect x="280" y="85" width="35" height="80" rx="4"/>
<rect x="85" y="175" width="55" height="80" rx="4"/>
<rect x="150" y="175" width="55" height="80" rx="4"/>
<rect x="215" y="175" width="55" height="80" rx="4"/>
<rect x="280" y="175" width="35" height="80" rx="4"/>
<rect x="85" y="265" width="55" height="80" rx="4"/>
<rect x="150" y="265" width="55" height="80" rx="4"/>
<rect x="215" y="265" width="55" height="80" rx="4"/>
<rect x="280" y="265" width="35" height="80" rx="4"/>
</g>
<rect x="70" y="450" width="260" height="150" rx="10" fill="#ffffff" opacity="0.9" stroke="#8fdccc" stroke-width="2"/>
<circle cx="200" cy="525" r="34" fill="none" stroke="#00a693" stroke-width="4"/>
<rect x="185" y="595" width="30" height="40" rx="4" fill="#00a693"/>
<text x="200" y="670" font-family="Tahoma, sans-serif" font-size="26" fill="#00a693" text-anchor="middle">RM-35 · White</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

-28
View File
@@ -1,28 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 700" width="400" height="700">
<defs>
<linearGradient id="body" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#00a693" stop-opacity="0.95"/>
<stop offset="1" stop-color="#08554e"/>
</linearGradient>
</defs>
<rect x="40" y="30" width="320" height="620" rx="26" fill="url(#body)" stroke="#012e28" stroke-width="6"/>
<rect x="70" y="70" width="260" height="360" rx="10" fill="#04120f" opacity="0.55"/>
<g fill="#0b3d38" opacity="0.9">
<rect x="85" y="85" width="55" height="80" rx="4"/>
<rect x="150" y="85" width="55" height="80" rx="4"/>
<rect x="215" y="85" width="55" height="80" rx="4"/>
<rect x="280" y="85" width="35" height="80" rx="4"/>
<rect x="85" y="175" width="55" height="80" rx="4"/>
<rect x="150" y="175" width="55" height="80" rx="4"/>
<rect x="215" y="175" width="55" height="80" rx="4"/>
<rect x="280" y="175" width="35" height="80" rx="4"/>
<rect x="85" y="265" width="55" height="80" rx="4"/>
<rect x="150" y="265" width="55" height="80" rx="4"/>
<rect x="215" y="265" width="55" height="80" rx="4"/>
<rect x="280" y="265" width="35" height="80" rx="4"/>
</g>
<rect x="70" y="450" width="260" height="150" rx="10" fill="#04120f" opacity="0.4"/>
<circle cx="200" cy="525" r="34" fill="none" stroke="#e6f7f4" stroke-width="4"/>
<rect x="185" y="595" width="30" height="40" rx="4" fill="#04120f"/>
<text x="200" y="670" font-family="Tahoma, sans-serif" font-size="26" fill="#e6f7f4" text-anchor="middle">RM-48</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

-28
View File
@@ -1,28 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 700" width="400" height="700">
<defs>
<linearGradient id="body" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#ffffff"/>
<stop offset="1" stop-color="#dff3ef"/>
</linearGradient>
</defs>
<rect x="40" y="30" width="320" height="620" rx="26" fill="url(#body)" stroke="#00a693" stroke-width="6"/>
<rect x="70" y="70" width="260" height="360" rx="10" fill="#ffffff" opacity="0.9" stroke="#8fdccc" stroke-width="2"/>
<g fill="#c0ebe3" stroke="#00a693" stroke-width="1.5">
<rect x="85" y="85" width="55" height="80" rx="4"/>
<rect x="150" y="85" width="55" height="80" rx="4"/>
<rect x="215" y="85" width="55" height="80" rx="4"/>
<rect x="280" y="85" width="35" height="80" rx="4"/>
<rect x="85" y="175" width="55" height="80" rx="4"/>
<rect x="150" y="175" width="55" height="80" rx="4"/>
<rect x="215" y="175" width="55" height="80" rx="4"/>
<rect x="280" y="175" width="35" height="80" rx="4"/>
<rect x="85" y="265" width="55" height="80" rx="4"/>
<rect x="150" y="265" width="55" height="80" rx="4"/>
<rect x="215" y="265" width="55" height="80" rx="4"/>
<rect x="280" y="265" width="35" height="80" rx="4"/>
</g>
<rect x="70" y="450" width="260" height="150" rx="10" fill="#ffffff" opacity="0.9" stroke="#8fdccc" stroke-width="2"/>
<circle cx="200" cy="525" r="34" fill="none" stroke="#00a693" stroke-width="4"/>
<rect x="185" y="595" width="30" height="40" rx="4" fill="#00a693"/>
<text x="200" y="670" font-family="Tahoma, sans-serif" font-size="26" fill="#00a693" text-anchor="middle">RM-48 · White</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

-28
View File
@@ -1,28 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 700" width="400" height="700">
<defs>
<linearGradient id="body" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#00a693" stop-opacity="0.95"/>
<stop offset="1" stop-color="#08554e"/>
</linearGradient>
</defs>
<rect x="40" y="30" width="320" height="620" rx="26" fill="url(#body)" stroke="#012e28" stroke-width="6"/>
<rect x="70" y="70" width="260" height="360" rx="10" fill="#04120f" opacity="0.55"/>
<g fill="#0b3d38" opacity="0.9">
<rect x="85" y="85" width="55" height="80" rx="4"/>
<rect x="150" y="85" width="55" height="80" rx="4"/>
<rect x="215" y="85" width="55" height="80" rx="4"/>
<rect x="280" y="85" width="35" height="80" rx="4"/>
<rect x="85" y="175" width="55" height="80" rx="4"/>
<rect x="150" y="175" width="55" height="80" rx="4"/>
<rect x="215" y="175" width="55" height="80" rx="4"/>
<rect x="280" y="175" width="35" height="80" rx="4"/>
<rect x="85" y="265" width="55" height="80" rx="4"/>
<rect x="150" y="265" width="55" height="80" rx="4"/>
<rect x="215" y="265" width="55" height="80" rx="4"/>
<rect x="280" y="265" width="35" height="80" rx="4"/>
</g>
<rect x="70" y="450" width="260" height="150" rx="10" fill="#04120f" opacity="0.4"/>
<circle cx="200" cy="525" r="34" fill="none" stroke="#e6f7f4" stroke-width="4"/>
<rect x="185" y="595" width="30" height="40" rx="4" fill="#04120f"/>
<text x="200" y="670" font-family="Tahoma, sans-serif" font-size="26" fill="#e6f7f4" text-anchor="middle">RM-60</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

-28
View File
@@ -1,28 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 700" width="400" height="700">
<defs>
<linearGradient id="body" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#ffffff"/>
<stop offset="1" stop-color="#dff3ef"/>
</linearGradient>
</defs>
<rect x="40" y="30" width="320" height="620" rx="26" fill="url(#body)" stroke="#00a693" stroke-width="6"/>
<rect x="70" y="70" width="260" height="360" rx="10" fill="#ffffff" opacity="0.9" stroke="#8fdccc" stroke-width="2"/>
<g fill="#c0ebe3" stroke="#00a693" stroke-width="1.5">
<rect x="85" y="85" width="55" height="80" rx="4"/>
<rect x="150" y="85" width="55" height="80" rx="4"/>
<rect x="215" y="85" width="55" height="80" rx="4"/>
<rect x="280" y="85" width="35" height="80" rx="4"/>
<rect x="85" y="175" width="55" height="80" rx="4"/>
<rect x="150" y="175" width="55" height="80" rx="4"/>
<rect x="215" y="175" width="55" height="80" rx="4"/>
<rect x="280" y="175" width="35" height="80" rx="4"/>
<rect x="85" y="265" width="55" height="80" rx="4"/>
<rect x="150" y="265" width="55" height="80" rx="4"/>
<rect x="215" y="265" width="55" height="80" rx="4"/>
<rect x="280" y="265" width="35" height="80" rx="4"/>
</g>
<rect x="70" y="450" width="260" height="150" rx="10" fill="#ffffff" opacity="0.9" stroke="#8fdccc" stroke-width="2"/>
<circle cx="200" cy="525" r="34" fill="none" stroke="#00a693" stroke-width="4"/>
<rect x="185" y="595" width="30" height="40" rx="4" fill="#00a693"/>
<text x="200" y="670" font-family="Tahoma, sans-serif" font-size="26" fill="#00a693" text-anchor="middle">RM-60 · White</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

-6
View File
@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 160" width="120" height="160">
<path d="M20 10 L100 10 L92 150 L28 150 Z" fill="#ffb020" stroke="#7a4a00" stroke-width="3"/>
<path d="M20 10 L100 10 L96 45 L24 45 Z" fill="#00a693"/>
<circle cx="60" cy="90" r="26" fill="#fff4d6" opacity="0.85"/>
<text x="60" y="30" font-family="Tahoma, sans-serif" font-size="14" fill="#ffffff" text-anchor="middle">چیپس</text>
</svg>

Before

Width:  |  Height:  |  Size: 438 B

-6
View File
@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 160" width="120" height="160">
<path d="M20 10 L100 10 L92 150 L28 150 Z" fill="#e6533c" stroke="#6b1f10" stroke-width="3"/>
<path d="M20 10 L100 10 L96 45 L24 45 Z" fill="#00a693"/>
<circle cx="60" cy="90" r="26" fill="#ffe3d6" opacity="0.85"/>
<text x="60" y="30" font-family="Tahoma, sans-serif" font-size="14" fill="#ffffff" text-anchor="middle">چیپس</text>
</svg>

Before

Width:  |  Height:  |  Size: 438 B

-6
View File
@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 180" width="100" height="180">
<rect x="20" y="10" width="60" height="160" rx="14" fill="#00a693" stroke="#012e28" stroke-width="3"/>
<rect x="20" y="60" width="60" height="45" fill="#e6f7f4" opacity="0.9"/>
<text x="50" y="88" font-family="Tahoma, sans-serif" font-size="13" fill="#00594f" text-anchor="middle">نوشابه</text>
<rect x="38" y="0" width="24" height="14" rx="3" fill="#8fdccc"/>
</svg>

Before

Width:  |  Height:  |  Size: 470 B

-6
View File
@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 180" width="100" height="180">
<rect x="20" y="10" width="60" height="160" rx="14" fill="#ffb020" stroke="#012e28" stroke-width="3"/>
<rect x="20" y="60" width="60" height="45" fill="#fff4d6" opacity="0.9"/>
<text x="50" y="88" font-family="Tahoma, sans-serif" font-size="13" fill="#7a4a00" text-anchor="middle">نوشابه</text>
<rect x="38" y="0" width="24" height="14" rx="3" fill="#ffe0a3"/>
</svg>

Before

Width:  |  Height:  |  Size: 470 B