Commit 783a14e6 authored by Mahmoud Aglan's avatar Mahmoud Aglan

content(proposal): de-AI the Arabic, add crest watermark, rescope to 4-6 weeks

Copy — the previous register read as marketing/AI boilerplate to a board
audience. Removed the tells and rewrote in institutional MSA:
- Drop staccato fragment headlines and their trailing periods
  ("ثلاثة محاور. لا أكثر." -> "نطاق المرحلة الأولى: ثلاثة محاور")
- Drop rhetorical punchlines ("الاحتكاك يقتل الاشتراك."،
  "ليست صورًا تخيلية."، "من ينسى، لا يدفع.") for descriptive prose
- Drop the «مصنع البيانات» metaphor and the pitch-deck eyebrow "لماذا الآن"
- Rewrite all 8 prototype screen annotations from slogans to labels
  ("البوابة تعرف من يدخل" -> "الدخول بكود QR")
- Reduce rhetorical em-dashes; keep structural ones only

Schedule — project is 4-6 weeks, not 12. Timeline recompressed from six
milestones over 12 weeks to five over 6, with the 4-week case stated as
conditional on data and accounts landing in week 1. Updated hero stat,
scope lede, price card, plan heading and footer badge to match.

Design — elegant crest watermark:
- Oversized club crest bleeding off the inline-start edge of the hero,
  gold-tinted, offset so it does not double with the hero logo
- Alternating-side crest ghosts on problem/scope/flow/price sections
- Crest in the price card and footer, plus a gold hairline on the footer
- Uses background-image + filter, not mask-image: masks give a cleaner
  silhouette but do not paint in headless Chrome, so this variant is the
  one that can actually be verified before shipping
- Logical properties throughout (inset-inline, margin-inline) so the
  watermark mirrors correctly in RTL
- Added a prefers-reduced-motion guard for the scroll reveal
Co-Authored-By: 's avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
parent a91250e3
......@@ -136,7 +136,7 @@ h2.title{ font-size:clamp(1.7rem,3.4vw,2.5rem); color:var(--navy); margin-bottom
color:#fff; text-align:center; padding:120px 24px 80px; overflow:hidden;
}
.hero::after{
content:''; position:absolute; inset:0; pointer-events:none; opacity:.16;
content:''; position:absolute; inset:0; pointer-events:none; opacity:.10;
background-image:linear-gradient(rgba(255,255,255,.06) 1px,transparent 1px),
linear-gradient(90deg,rgba(255,255,255,.06) 1px,transparent 1px);
background-size:64px 64px;
......@@ -567,3 +567,65 @@ footer small{ font-size:.72rem; color:#5C7A9C; }
.flow{ grid-template-columns:1fr; }
.tl{ padding-inline-start:22px; }
}
/* ================= WATERMARK ==================
Crest ghost behind the content. Uses background-image + filter rather than
mask-image: masks give a cleaner single-tone silhouette, but they fail to
paint in headless Chrome, so this variant is the one that can be verified.
Decorative only: pointer-events off, sits under .wrap at z-index 0.
Centering uses inset-inline + margin-inline (logical) so it holds in RTL. */
.wm{ overflow:hidden; }
.wm::before{
content:''; position:absolute; z-index:0; pointer-events:none;
width:min(44vw,500px); aspect-ratio:1240/1754;
top:50%; inset-inline-end:-11%; transform:translateY(-50%);
background:url(../assets/club-logo.png) center/contain no-repeat;
filter:grayscale(1); opacity:.06;
}
.wm > .wrap{ position:relative; z-index:1; }
.wm.alt::before{ opacity:.07; }
.dark.wm::before{ filter:grayscale(1) brightness(2.6); opacity:.075; }
.wm.wm-start::before{ inset-inline-end:auto; inset-inline-start:-11%; }
/* Hero: oversized crest seated behind the content like an embossed seal,
tinted to the brand gold instead of grey. */
.hero::before{
content:''; position:absolute; z-index:1; pointer-events:none;
width:min(58vw,540px); aspect-ratio:1240/1754;
top:50%; inset-inline-start:-9%; transform:translateY(-50%);
background:url(../assets/club-logo.png) center/contain no-repeat;
filter:grayscale(1) sepia(1) saturate(2.6) hue-rotate(354deg) brightness(1.15);
opacity:.10;
}
/* Price card: crest anchored low on the inline-start, opposite the gold flare. */
.price-hero::before{
content:''; position:absolute; z-index:0; pointer-events:none;
width:300px; aspect-ratio:1240/1754;
bottom:-34%; inset-inline-start:-3%;
background:url(../assets/club-logo.png) center/contain no-repeat;
filter:grayscale(1) sepia(1) saturate(2.4) brightness(1.2); opacity:.12;
}
footer{ position:relative; overflow:hidden; border-top:1px solid rgba(201,162,39,.28); }
footer::before{
content:''; position:absolute; z-index:0; pointer-events:none;
width:min(70vw,400px); aspect-ratio:1240/1754;
bottom:-46%; inset-inline:0; margin-inline:auto;
background:url(../assets/club-logo.png) center/contain no-repeat;
filter:grayscale(1) brightness(2.6); opacity:.08;
}
footer > *{ position:relative; z-index:1; }
/* Hairline gold rule closing each major light section. */
.rule-gold{ height:1px; border:0; margin:0;
background:linear-gradient(90deg,transparent,rgba(201,162,39,.42),transparent); }
@media (max-width:760px){
.wm::before{ width:74vw; inset-inline-end:-26%; opacity:.05; }
.hero::before{ width:86vw; inset-inline-start:-30%; opacity:.085; }
.price-hero::before{ width:200px; bottom:-40%; }
}
@media (prefers-reduced-motion:reduce){
.reveal{ opacity:1; transform:none; transition:none; }
}
This diff is collapsed.
......@@ -45,43 +45,43 @@
/* ---------- mobile screen switcher ---------- */
var NOTES = {
login: {
t: 'دخول بلا كلمة مرور',
p: 'العضو يدخل برقم موبايله المسجَّل في بيانات النادي فقط. لا حسابات تُنشأ ولا كلمات مرور تُنسى ولا موظف يفعّل الحساب يدويًا.',
t: 'الدخول برقم الموبايل',
p: 'يدخل العضو برقم موبايله المسجَّل في بيانات النادي، دون إنشاء حساب أو كلمة مرور، ودون تفعيل يدوي من أي موظف.',
b: ['التعرف الفوري على العضو من ملف الأعضاء المرفوع', 'كود تحقق OTP صالح لدقيقتين', 'جهاز واحد نشط لكل عضوية لمنع تداول الحساب بين أكثر من شخص']
},
home: {
t: 'كل ما يهم العضو في شاشة واحدة',
p: 'أول ما يراه العضو: هل عضويته سارية، وكم عليه، وكيف يسدّد فورًا. البطاقة الرقمية تغني عن الكارنيه الورقي.',
t: 'الشاشة الرئيسية',
p: 'تعرض الشاشة حالة العضوية وإجمالي المستحق وطريقة السداد في موضع واحد، وتغني البطاقة الرقمية عن الكارنيه الورقي.',
b: ['حالة العضوية وتاريخ سريانها', 'إجمالي المستحق مع تنبيه التأخير', 'اشتراكات الأبناء ورصيد الدعوات']
},
dues: {
t: 'شفافية كاملة في المستحقات',
p: 'كل بند مستحق بمفرده: عن أي شهر، ولماذا، ومتى يستحق. لا مبالغ مجمّعة غامضة تُشكِّك العضو وتؤخر السداد.',
t: 'بيان المستحقات',
p: 'يظهر كل بند مستحق على حدة: عن أي شهر هو، وسببه، وتاريخ استحقاقه، بدلًا من مبلغ إجمالي غير مفصَّل يدفع العضو إلى الاستفسار وتأجيل السداد.',
b: ['تجديدات وأقساط وغرامات وفواتير أنشطة', 'سداد بند واحد أو عدة بنود معًا', 'أرشيف كامل للمسدَّد مع إيصالاته']
},
pay: {
t: 'التحصيل حيث يوجد العضو',
p: 'بطاقة أو محفظة إلكترونية &mdash; أو كود سداد يُقدَّم لخزنة النادي لمن يفضّل الدفع نقدًا. كل الطرق تُسجَّل في نفس التقرير.',
t: 'وسائل السداد',
p: 'بطاقة بنكية أو محفظة إلكترونية، أو كود سداد يُقدَّم لخزنة النادي لمن يفضّل الدفع نقدًا. وتُسجَّل الوسائل الثلاث في التقرير نفسه.',
b: ['Visa و Mastercard و Meeza', 'فودافون كاش و إنستاباي', 'كود سداد للخزنة يربط الدفع النقدي بالنظام']
},
qr: {
t: 'البوابة تعرف من يدخل',
p: 'كود متجدد كل ٦٠ ثانية لا يمكن تصويره وإرساله لغير العضو. القارئ على البوابة يعرض فورًا حالة العضوية.',
t: 'الدخول بكود QR',
p: 'يتجدد الكود كل ستين ثانية، فلا يصلح تصويره وإرساله لغير العضو، ويعرض القارئ على البوابة حالة العضوية فور المسح.',
b: ['منع الدخول عند إيقاف العضوية أو تجاوز حد التأخير', 'سجل دخول لحظي لكل بوابة', 'يعمل حتى لو انقطع الإنترنت عن هاتف العضو']
},
invites: {
t: 'الدعوات: انضباط وإيراد',
p: 'رصيد شهري واضح حسب نوع العضوية، وبيع منظّم للدعوات الإضافية بدل التقدير الشخصي على البوابة.',
t: 'رصيد الدعوات وبيع الإضافي',
p: 'رصيد شهري محدد لكل نوع عضوية، وبيع منظَّم للدعوات الإضافية من التطبيق بدلًا من التقدير الشخصي عند البوابة.',
b: ['رصيد مجاني يتجدد شهريًا', 'شراء دعوات إضافية بحد أقصى', 'ربط اختياري بين الدعوة وانتظام السداد']
},
sports: {
t: 'السعر معلن، والاشتراك بضغطة',
p: 'أكبر ما يعطّل الاشتراك في الأنشطة أن ولي الأمر لا يعرف السعر ولا الأماكن المتاحة، والكتالوج المعلن يزيل هذا العائق.',
t: 'كتالوج الأنشطة والاشتراك',
p: 'يعطّل الاشتراكَ في الأنشطة أن ولي الأمر لا يعرف السعر ولا الأماكن المتاحة، ويعالج الكتالوج المعلن هذه النقطة.',
b: ['أسعار وفئات سنية وعدد حصص معلن', 'السعة المتاحة وقائمة انتظار عند اكتمال العدد', 'فاتورة شهرية تلقائية بعد الاشتراك']
},
schedule: {
t: 'الجدول من المدرب مباشرة',
p: 'يرفع المدرب جدول مجموعته من قالب موحّد، فيظهر لكل مشترك في تطبيقه &mdash; مع تنبيه فوري عند أي إلغاء أو تعويض.',
t: 'جداول التدريب',
p: 'يرفع المدرب جدول مجموعته من قالب موحَّد، فيظهر لكل مشترك في تطبيقه، ويصل تنبيه فوري عند أي إلغاء أو حصة تعويضية.',
b: ['جدول أسبوعي لكل لاعب على حدة', 'ملاحظات المدرب على الحصة', 'إشعار فوري بالتغييرات والحصص التعويضية']
}
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment