/* ======================================================== غمبولة بيوتي — App Styles Premium Beauty Brand: Burgundy/Plum + Dusty Rose + Ivory + Gold ======================================================== */ :root { --burgundy: #4A162E; --burgundy-dark: #34101F; --burgundy-light: #6E2647; --dusty-rose: #D9A3B3; --dusty-rose-soft: #F3DCE3; --ivory: #FBF7F1; --ivory-2: #F5EDE4; --gold: #C6A15B; --gold-soft: #E8D6AE; --whatsapp: #25D366; --whatsapp-dark: #1DA851; --text-main: #2E1620; --text-muted: #8A6B76; --text-faint: #B79AA3; --danger: #B0453F; --success: #4CAF7D; --radius-sm: 10px; --radius-md: 16px; --radius-lg: 22px; --shadow-soft: 0 4px 16px rgba(74, 22, 46, 0.08); --shadow-card: 0 2px 10px rgba(74, 22, 46, 0.06); --shadow-float: 0 8px 24px rgba(74, 22, 46, 0.18); --header-h: 60px; --navbar-h: 66px; --safe-top: env(safe-area-inset-top, 0px); --safe-bottom: env(safe-area-inset-bottom, 0px); color-scheme: light; } * { box-sizing: border-box; } html, body { margin: 0; padding: 0; overflow-x: hidden; width: 100%; max-width: 100vw; } body { font-family: 'Segoe UI', Tahoma, 'Cairo', Arial, sans-serif; background: var(--ivory); color: var(--text-main); direction: rtl; -webkit-tap-highlight-color: transparent; } button, input, select, textarea { font-family: inherit; } /* ---------- App Shell ---------- */ #app { min-height: 100vh; min-height: 100dvh; display: flex; flex-direction: column; max-width: 100vw; } .app-header { position: sticky; top: 0; z-index: 40; height: calc(var(--header-h) + var(--safe-top)); padding-top: var(--safe-top); background: linear-gradient(135deg, var(--burgundy) 0%, var(--burgundy-light) 100%); color: var(--ivory); display: flex; align-items: center; justify-content: space-between; padding-inline: 16px; box-shadow: var(--shadow-soft); } .app-header .brand { display: flex; align-items: center; gap: 10px; } .app-header .brand .logo-dot { width: 30px; height: 30px; border-radius: 50%; background: radial-gradient(circle at 35% 30%, var(--gold-soft), var(--gold) 70%); box-shadow: 0 0 0 2px rgba(251,247,241,0.25); flex-shrink: 0; } .app-header .brand-text { display: flex; flex-direction: column; line-height: 1.1; } .app-header .brand-text .title { font-size: 15px; font-weight: 700; letter-spacing: .3px; } .app-header .brand-text .subtitle { font-size: 10.5px; color: var(--gold-soft); font-weight: 400; } .install-btn { background: rgba(251,247,241,0.14); border: 1px solid rgba(251,247,241,0.35); color: var(--ivory); font-size: 12px; padding: 7px 12px; border-radius: 20px; cursor: pointer; display: none; align-items: center; gap: 5px; transition: transform .15s ease, background .15s ease; } .install-btn.show { display: inline-flex; } .install-btn:active { transform: scale(0.95); background: rgba(251,247,241,0.24); } /* ---------- iOS install hint ---------- */ .ios-hint { position: fixed; bottom: calc(var(--navbar-h) + var(--safe-bottom) + 10px); left: 12px; right: 12px; z-index: 50; background: var(--burgundy-dark); color: var(--ivory); border-radius: var(--radius-md); padding: 12px 14px; font-size: 12.5px; display: flex; align-items: center; gap: 10px; box-shadow: var(--shadow-float); animation: slideUp .35s ease; } .ios-hint .close-hint { background: none; border: none; color: var(--gold-soft); font-size: 16px; cursor: pointer; padding: 4px; } /* ---------- Main content ---------- */ .app-main { flex: 1; padding: 14px 14px calc(var(--navbar-h) + var(--safe-bottom) + 24px); max-width: 720px; width: 100%; margin: 0 auto; } .screen { display: none; animation: fadeIn .28s ease; } .screen.active { display: block; } @keyframes fadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } @keyframes pop { 0% { transform: scale(1); } 40% { transform: scale(1.06); } 100% { transform: scale(1); } } .screen-title { font-size: 18px; font-weight: 700; color: var(--burgundy); margin: 4px 0 4px; } .screen-sub { font-size: 12.5px; color: var(--text-muted); margin-bottom: 14px; } /* ---------- Cards ---------- */ .card { background: #fff; border-radius: var(--radius-md); box-shadow: var(--shadow-card); padding: 16px; margin-bottom: 14px; border: 1px solid rgba(217,163,179,0.25); } .card h3 { font-size: 14.5px; margin: 0 0 10px; color: var(--burgundy); font-weight: 700; } /* ---------- Dashboard ---------- */ .stat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 14px; } .stat-card { background: linear-gradient(160deg, #fff, var(--ivory-2)); border-radius: var(--radius-md); padding: 14px 12px; box-shadow: var(--shadow-card); border: 1px solid rgba(198,161,91,0.25); position: relative; overflow: hidden; } .stat-card .stat-icon { font-size: 20px; margin-bottom: 6px; display: block; } .stat-card .stat-value { font-size: 20px; font-weight: 800; color: var(--burgundy); } .stat-card .stat-label { font-size: 11.5px; color: var(--text-muted); margin-top: 2px; } .stat-card.accent { background: linear-gradient(160deg, var(--burgundy), var(--burgundy-light)); } .stat-card.accent .stat-value, .stat-card.accent .stat-label { color: var(--ivory); } .stat-card.accent .stat-label { color: var(--dusty-rose-soft); } .cta-btn { width: 100%; padding: 16px; font-size: 15.5px; font-weight: 700; border: none; border-radius: var(--radius-md); background: linear-gradient(135deg, var(--burgundy), var(--burgundy-light)); color: var(--ivory); box-shadow: var(--shadow-soft); cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 8px; transition: transform .12s ease; min-height: 54px; } .cta-btn:active { transform: scale(0.97); } .cta-btn.gold { background: linear-gradient(135deg, var(--gold), #b68d47); color: var(--burgundy-dark); } .cta-btn.outline { background: #fff; color: var(--burgundy); border: 1.5px solid var(--dusty-rose); box-shadow: none; } .cta-btn.wa { background: linear-gradient(135deg, var(--whatsapp), var(--whatsapp-dark)); color: #fff; } .cta-btn.danger-outline { background: #fff; color: var(--danger); border: 1.5px solid rgba(176,69,63,0.4); box-shadow:none; } .cta-btn:disabled { opacity: .45; cursor: not-allowed; } .quick-row { display: flex; gap: 10px; margin-top: 10px; } .quick-row .cta-btn { flex: 1; font-size: 13px; min-height: 46px; padding: 10px; } /* ---------- Bottom Nav ---------- */ .bottom-nav { position: fixed; bottom: 0; left: 0; right: 0; height: calc(var(--navbar-h) + var(--safe-bottom)); padding-bottom: var(--safe-bottom); background: #fff; border-top: 1px solid rgba(217,163,179,0.3); display: flex; z-index: 45; box-shadow: 0 -4px 16px rgba(74,22,46,0.08); } .nav-btn { flex: 1; border: none; background: none; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; color: var(--text-faint); font-size: 10.5px; cursor: pointer; min-height: 48px; position: relative; transition: color .15s ease; } .nav-btn .nav-icon { font-size: 19px; transition: transform .18s ease; } .nav-btn.active { color: var(--burgundy); font-weight: 700; } .nav-btn.active .nav-icon { transform: translateY(-2px) scale(1.08); } .nav-btn.active::after { content: ''; position: absolute; top: 2px; width: 5px; height: 5px; border-radius: 50%; background: var(--gold); } .nav-badge { position: absolute; top: 2px; left: calc(50% + 6px); background: var(--danger); color: #fff; font-size: 9px; font-weight: 700; min-width: 15px; height: 15px; border-radius: 8px; display: flex; align-items: center; justify-content: center; padding: 0 3px; } /* ---------- Sticky order bar ---------- */ .sticky-order-bar { position: fixed; left: 12px; right: 12px; bottom: calc(var(--navbar-h) + var(--safe-bottom) + 10px); z-index: 44; background: linear-gradient(135deg, var(--burgundy), var(--burgundy-light)); color: var(--ivory); border-radius: var(--radius-md); padding: 10px 12px 10px 8px; display: none; align-items: center; justify-content: space-between; box-shadow: var(--shadow-float); animation: slideUp .25s ease; } .sticky-order-bar.show { display: flex; } .sticky-order-bar .info { font-size: 12.5px; } .sticky-order-bar .info b { font-size: 14.5px; display: block; } .sticky-order-bar button { background: var(--gold); color: var(--burgundy-dark); border: none; border-radius: var(--radius-sm); padding: 9px 14px; font-size: 12.5px; font-weight: 700; cursor: pointer; } /* ---------- Accordion / Categories ---------- */ .accordion { margin-bottom: 12px; } .cat { background: #fff; border-radius: var(--radius-md); overflow: hidden; margin-bottom: 10px; box-shadow: var(--shadow-card); border: 1px solid rgba(217,163,179,0.25); } .cat-header { display: flex; align-items: center; justify-content: space-between; padding: 13px 14px; cursor: pointer; background: linear-gradient(90deg, var(--dusty-rose-soft), #fff); min-height: 48px; } .cat-header .cat-title { font-size: 13.5px; font-weight: 700; color: var(--burgundy); display: flex; align-items: center; gap: 8px; } .cat-header .cat-count { background: var(--gold-soft); color: var(--burgundy-dark); font-size: 10.5px; font-weight: 700; border-radius: 10px; padding: 2px 8px; } .cat-chevron { transition: transform .22s ease; color: var(--burgundy); font-size: 13px; } .cat.open .cat-chevron { transform: rotate(180deg); } .cat-body { max-height: 0; overflow: hidden; transition: max-height .28s ease; } .cat.open .cat-body { max-height: 3000px; } .cat-body-inner { padding: 4px 10px 10px; } /* ---------- Product row ---------- */ .prod-card { display: flex; flex-direction: column; gap: 8px; padding: 12px 8px; border-bottom: 1px solid #f3e6ea; transition: background .15s ease; border-radius: var(--radius-sm); } .prod-card:last-child { border-bottom: none; } .prod-card.selected { background: linear-gradient(90deg, rgba(198,161,91,0.10), rgba(217,163,179,0.10)); box-shadow: inset 0 0 0 1.5px var(--gold); } .prod-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; } .prod-name { font-size: 13.5px; font-weight: 600; color: var(--text-main); flex: 1; } .prod-name .selected-tick { color: var(--success); margin-inline-start: 4px; display: none; } .prod-card.selected .selected-tick { display: inline; } .size-select { border: 1.5px solid var(--dusty-rose); border-radius: var(--radius-sm); padding: 8px 10px; font-size: 12.5px; background: #fff; color: var(--text-main); min-height: 38px; } .prod-controls { display: flex; align-items: center; justify-content: space-between; gap: 8px; } .qty-stepper { display: flex; align-items: center; background: var(--ivory-2); border-radius: var(--radius-sm); overflow: hidden; border: 1px solid rgba(198,161,91,0.3); } .qty-stepper button { width: 38px; height: 38px; border: none; background: transparent; font-size: 17px; font-weight: 700; color: var(--burgundy); cursor: pointer; display: flex; align-items: center; justify-content: center; } .qty-stepper button:active { background: var(--dusty-rose-soft); } .qty-stepper .qty-value { width: 34px; text-align: center; font-size: 14px; font-weight: 700; color: var(--text-main); } .prod-line-total { font-size: 13.5px; font-weight: 800; color: var(--burgundy); min-width: 66px; text-align: left; } /* ---------- Custom product ---------- */ .custom-card { display: flex; flex-direction: column; gap: 8px; } .custom-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; } .custom-item { background: var(--ivory-2); border-radius: var(--radius-sm); padding: 10px; display: flex; flex-direction: column; gap: 6px; margin-bottom: 8px; position: relative; } .custom-item .rm-x { position: absolute; top: 6px; left: 6px; background: var(--danger); color: #fff; border: none; border-radius: 50%; width: 22px; height: 22px; font-size: 12px; cursor: pointer; } /* ---------- Inputs ---------- */ .field { margin-bottom: 12px; } .field label { display: block; font-size: 12px; font-weight: 600; color: var(--text-muted); margin-bottom: 5px; } .field input, .field textarea { width: 100%; padding: 13px 14px; border: 1.5px solid var(--dusty-rose); border-radius: var(--radius-sm); font-size: 14.5px; background: #fff; color: var(--text-main); min-height: 48px; } .field textarea { min-height: 72px; resize: vertical; } .field input:focus, .field textarea:focus, .size-select:focus { outline: none; border-color: var(--burgundy); box-shadow: 0 0 0 3px rgba(74,22,46,0.08); } .field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; } /* ---------- Order summary ---------- */ .summary-row { display: flex; justify-content: space-between; align-items: center; padding: 9px 0; border-bottom: 1px dashed rgba(217,163,179,0.5); font-size: 13.5px; } .summary-row:last-child { border-bottom: none; } .summary-row .sr-name { color: var(--text-main); } .summary-row .sr-meta { font-size: 11px; color: var(--text-muted); } .summary-row .sr-price { font-weight: 700; color: var(--burgundy); } .totals-block { margin-top: 8px; padding-top: 10px; border-top: 1.5px solid var(--dusty-rose-soft); } .total-line { display: flex; justify-content: space-between; font-size: 13.5px; padding: 5px 0; color: var(--text-muted); } .total-line.grand { font-size: 20px; font-weight: 800; color: var(--burgundy); padding-top: 10px; margin-top: 4px; border-top: 1.5px dashed var(--gold); } .empty-state { text-align: center; padding: 30px 10px; color: var(--text-faint); } .empty-state .empty-icon { font-size: 34px; display: block; margin-bottom: 8px; } .empty-state .empty-text { font-size: 13px; } /* ---------- Preview box ---------- */ .preview-box { width: 100%; min-height: 220px; font-size: 13.5px; line-height: 1.8; padding: 14px; border: 1.5px dashed var(--gold); border-radius: var(--radius-md); background: var(--ivory-2); resize: vertical; color: var(--text-main); direction: rtl; } .toast { position: fixed; bottom: calc(var(--navbar-h) + var(--safe-bottom) + 14px); left: 50%; transform: translateX(-50%) translateY(20px); background: var(--burgundy-dark); color: var(--ivory); padding: 11px 20px; border-radius: 30px; font-size: 13px; font-weight: 600; box-shadow: var(--shadow-float); opacity: 0; pointer-events: none; transition: opacity .25s ease, transform .25s ease; z-index: 60; white-space: nowrap; } .toast.show { opacity: 1; transform: translateX(-50%) translateY(0); } /* ---------- Timeline (earnings log) ---------- */ .timeline { position: relative; padding-inline-start: 18px; } .timeline::before { content: ''; position: absolute; right: 5px; top: 4px; bottom: 4px; width: 2px; background: var(--dusty-rose-soft); } .tl-item { position: relative; padding: 0 18px 16px 0; } .tl-item::before { content: ''; position: absolute; right: 0px; top: 4px; width: 11px; height: 11px; border-radius: 50%; background: var(--gold); border: 2px solid #fff; box-shadow: 0 0 0 1.5px var(--gold); } .tl-item .tl-title { font-size: 13px; font-weight: 700; color: var(--text-main); } .tl-item .tl-meta { font-size: 11px; color: var(--text-muted); margin-top: 2px; } .tl-item .tl-price { font-size: 12.5px; font-weight: 700; color: var(--burgundy); float: left; } /* ---------- Utilities ---------- */ .hidden { display: none !important; } .badge-note { font-size: 11px; color: var(--text-muted); background: var(--ivory-2); border-radius: var(--radius-sm); padding: 8px 10px; margin-bottom: 10px; line-height: 1.6; } .badge-note.warn { background: #fff4e5; color: #8a6b3a; } /* ---------- Responsive ---------- */ @media (min-width: 640px) { .app-main { padding-left: 20px; padding-right: 20px; } .stat-grid { grid-template-columns: repeat(4, 1fr); } } @media (min-width: 900px) { #app { flex-direction: row; } .app-header { position: fixed; top: 0; right: 0; width: 240px; height: 100vh; flex-direction: column; align-items: flex-start; justify-content: flex-start; padding: 24px 18px; gap: 20px; } .bottom-nav { position: fixed; top: 0; right: 0; width: 240px; height: 100vh; flex-direction: column; padding-top: 150px; border-top: none; border-inline-start: 1px solid rgba(217,163,179,0.3); } .nav-btn { flex-direction: row; justify-content: flex-start; gap: 10px; padding-inline: 22px; font-size: 13px; min-height: 50px; } .nav-btn.active::after { display: none; } .nav-btn.active { background: var(--dusty-rose-soft); border-radius: var(--radius-sm); margin-inline: 10px; } .app-main { margin-inline-end: 240px; max-width: 640px; padding-top: 24px; } .sticky-order-bar, .toast { left: 260px; right: 20px; transform: none; } .toast { left: 50%; margin-inline-end: 240px; transform: translateX(-50%); } }