File manager - Edit - /home/webapp69.cm.in.th/u69319090038/Shop/public/css/style.css
Back
/* ============================================================ style.css — Shopee-Inspired Premium UI Font: Inter + Plus Jakarta Sans (Google Fonts) ============================================================ */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap'); /* ─── Design Tokens ──────────────────────────────────────── */ :root { /* Brand */ --brand: #ee4d2d; --brand-dark: #c73a1d; --brand-light: #ff6b47; --brand-pale: #fff2ef; --brand-glow: rgba(238, 77, 45, 0.18); /* Neutrals */ --white: #ffffff; --bg: #f5f5f5; --bg-2: #eeeeee; --surface: #ffffff; --border: #e0e0e0; --border-focus: #ee4d2d; /* Text */ --text-primary: #212121; --text-secondary: #616161; --text-muted: #9e9e9e; --text-inverse: #ffffff; /* Status */ --success: #22c55e; --error: #ef4444; --warning: #f59e0b; --info: #3b82f6; /* Shadows */ --shadow-sm: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.06); --shadow-md: 0 4px 16px rgba(0,0,0,.10), 0 2px 4px rgba(0,0,0,.06); --shadow-lg: 0 10px 40px rgba(0,0,0,.12), 0 4px 8px rgba(0,0,0,.06); --shadow-xl: 0 20px 60px rgba(0,0,0,.15); --shadow-brand: 0 4px 20px rgba(238,77,45,.35); /* Radius */ --r-sm: 6px; --r-md: 10px; --r-lg: 16px; --r-xl: 24px; --r-full: 999px; /* Transitions */ --ease: cubic-bezier(.4,0,.2,1); --fast: 150ms; --mid: 250ms; --slow: 400ms; /* Layout */ --nav-h: 60px; --sidebar-w: 220px; } /* ─── Reset ──────────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; scroll-behavior: smooth; -webkit-font-smoothing: antialiased; } body { font-family: 'Inter', 'Plus Jakarta Sans', sans-serif; background: var(--bg); color: var(--text-primary); min-height: 100vh; line-height: 1.6; } a { color: var(--brand); text-decoration: none; transition: color var(--fast) var(--ease); } a:hover { color: var(--brand-dark); } img { max-width: 100%; height: auto; display: block; } button { font-family: inherit; cursor: pointer; border: none; } input, textarea, select { font-family: inherit; } /* ─── Scrollbar ──────────────────────────────────────────── */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: var(--bg); } ::-webkit-scrollbar-thumb { background: var(--border); border-radius: var(--r-full); } ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } /* ─── Utility ─────────────────────────────────────────────── */ .hidden { display: none !important; } .text-center { text-align: center; } .text-muted { color: var(--text-muted); font-size: .875rem; } .mt-1 { margin-top: .5rem; } .mt-2 { margin-top: 1rem; } .mt-3 { margin-top: 1.5rem; } .mb-1 { margin-bottom: .5rem; } .mb-2 { margin-bottom: 1rem; } .flex { display: flex; } .flex-center { display: flex; align-items: center; justify-content: center; } .gap-1 { gap: .5rem; } .gap-2 { gap: 1rem; } .w-full { width: 100%; } /* ─── Buttons ─────────────────────────────────────────────── */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: .5rem; padding: .75rem 1.5rem; border-radius: var(--r-md); font-size: .9375rem; font-weight: 600; line-height: 1; transition: all var(--mid) var(--ease); cursor: pointer; border: 2px solid transparent; white-space: nowrap; position: relative; overflow: hidden; } .btn::after { content: ''; position: absolute; inset: 0; background: rgba(255,255,255,.15); opacity: 0; transition: opacity var(--fast) var(--ease); } .btn:hover::after { opacity: 1; } .btn:active { transform: scale(.98); } .btn:disabled { opacity: .55; cursor: not-allowed; transform: none !important; } .btn-primary { background: linear-gradient(135deg, var(--brand), var(--brand-dark)); color: var(--white); box-shadow: var(--shadow-brand); } .btn-primary:hover { background: linear-gradient(135deg, var(--brand-light), var(--brand)); box-shadow: 0 6px 24px rgba(238,77,45,.45); } .btn-outline { background: transparent; color: var(--brand); border-color: var(--brand); } .btn-outline:hover { background: var(--brand-pale); } .btn-ghost { background: transparent; color: var(--text-secondary); } .btn-ghost:hover { background: var(--bg-2); color: var(--text-primary); } .btn-block { width: 100%; } .btn-sm { padding: .5rem 1rem; font-size: .875rem; border-radius: var(--r-sm); } .btn-lg { padding: 1rem 2rem; font-size: 1rem; border-radius: var(--r-md); } .btn-google { background: #fff; color: #3c4043; border: 1.5px solid var(--border); box-shadow: var(--shadow-sm); } .btn-google:hover { background: #f8f9fa; box-shadow: var(--shadow-md); } .btn-facebook{ background: #1877f2; color: #fff; } .btn-facebook:hover { background: #1464d8; } .btn-apple { background: #000; color: #fff; } .btn-apple:hover { background: #1a1a1a; } .btn-spinner { width: 16px; height: 16px; border: 2px solid rgba(255,255,255,.4); border-top-color: #fff; border-radius: 50%; animation: spin .7s linear infinite; display: inline-block; margin-right: .4rem; } /* ─── Forms ───────────────────────────────────────────────── */ .form-group { display: flex; flex-direction: column; gap: .375rem; } .form-label { font-size: .875rem; font-weight: 500; color: var(--text-secondary); } .form-label span.req { color: var(--brand); margin-left: 2px; } .input-wrap { position: relative; } .form-input { width: 100%; padding: .75rem 1rem; border: 1.5px solid var(--border); border-radius: var(--r-md); font-size: .9375rem; color: var(--text-primary); background: var(--white); transition: border-color var(--fast) var(--ease), box-shadow var(--fast) var(--ease); outline: none; } .form-input:focus { border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-glow); } .form-input.has-icon { padding-right: 2.75rem; } .form-input.is-error { border-color: var(--error); } .form-input.is-error:focus { box-shadow: 0 0 0 3px rgba(239,68,68,.15); } .form-input.is-success { border-color: var(--success); } .form-input::placeholder { color: var(--text-muted); } .input-icon { position: absolute; right: .875rem; top: 50%; transform: translateY(-50%); color: var(--text-muted); cursor: pointer; font-size: 1.1rem; display: flex; align-items: center; transition: color var(--fast) var(--ease); } .input-icon:hover { color: var(--text-secondary); } .input-left-icon { left: .875rem; right: auto; cursor: default; } .form-input.with-left-icon { padding-left: 2.75rem; } .form-error { font-size: .8rem; color: var(--error); display: flex; align-items: center; gap: .25rem; animation: fadeSlideIn var(--fast) var(--ease); } .form-hint { font-size: .8rem; color: var(--text-muted); } /* ─── Checkbox ────────────────────────────────────────────── */ .checkbox-wrap { display: flex; align-items: flex-start; gap: .625rem; cursor: pointer; user-select: none; } .checkbox-wrap input[type="checkbox"] { width: 18px; height: 18px; accent-color: var(--brand); cursor: pointer; margin-top: 1px; flex-shrink: 0; } .checkbox-label { font-size: .875rem; color: var(--text-secondary); line-height: 1.5; } .checkbox-label a { color: var(--brand); font-weight: 500; } .checkbox-label a:hover { text-decoration: underline; } /* ─── Password Strength ───────────────────────────────────── */ .strength-bar-wrap { height: 4px; background: var(--bg-2); border-radius: var(--r-full); overflow: hidden; margin-top: .375rem; } .strength-bar { height: 100%; border-radius: var(--r-full); transition: width var(--mid) var(--ease), background var(--mid) var(--ease); width: 0%; } .strength-label { font-size: .78rem; font-weight: 500; margin-top: .25rem; transition: color var(--mid); } /* ─── OTP Input ───────────────────────────────────────────── */ .otp-grid { display: flex; gap: .625rem; justify-content: center; margin: 1.25rem 0; } .otp-digit { width: 52px; height: 60px; border: 2px solid var(--border); border-radius: var(--r-md); text-align: center; font-size: 1.5rem; font-weight: 700; color: var(--text-primary); background: var(--white); outline: none; transition: all var(--fast) var(--ease); caret-color: var(--brand); } .otp-digit:focus { border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-glow); transform: scale(1.05); } .otp-digit.filled { border-color: var(--brand); background: var(--brand-pale); } .otp-countdown { display: flex; align-items: center; justify-content: center; gap: .5rem; font-size: .875rem; color: var(--text-muted); } .otp-timer { font-weight: 700; font-variant-numeric: tabular-nums; color: var(--brand); min-width: 40px; text-align: center; } /* ─── Divider ─────────────────────────────────────────────── */ .divider { display: flex; align-items: center; gap: 1rem; color: var(--text-muted); font-size: .8125rem; margin: 1.25rem 0; } .divider::before, .divider::after { content: ''; flex: 1; height: 1px; background: var(--border); } /* ─── Toast Notifications ────────────────────────────────── */ .toast-container { position: fixed; top: 1.25rem; right: 1.25rem; z-index: 9999; display: flex; flex-direction: column; gap: .625rem; pointer-events: none; } .toast { display: flex; align-items: center; gap: .75rem; padding: .875rem 1.125rem; background: var(--white); border-radius: var(--r-md); box-shadow: var(--shadow-lg); border-left: 4px solid var(--info); min-width: 280px; max-width: 380px; pointer-events: all; transform: translateX(120%); opacity: 0; transition: transform var(--mid) var(--ease), opacity var(--mid) var(--ease); font-size: .9rem; font-weight: 500; } .toast.show { transform: translateX(0); opacity: 1; } .toast.hide { transform: translateX(120%); opacity: 0; } .toast-success { border-left-color: var(--success); } .toast-error { border-left-color: var(--error); } .toast-warning { border-left-color: var(--warning); } .toast-info { border-left-color: var(--info); } .toast-icon { font-size: 1.1rem; flex-shrink: 0; } .toast-msg { flex: 1; color: var(--text-primary); line-height: 1.4; } .toast-close { background: none; border: none; cursor: pointer; color: var(--text-muted); font-size: 1.2rem; padding: 0; line-height: 1; flex-shrink: 0; transition: color var(--fast); } .toast-close:hover { color: var(--text-primary); } /* ─── Modal ───────────────────────────────────────────────── */ .modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,.55); backdrop-filter: blur(4px); z-index: 900; display: flex; align-items: center; justify-content: center; opacity: 0; visibility: hidden; transition: all var(--mid) var(--ease); } .modal-overlay.active { opacity: 1; visibility: visible; } .modal-card { background: var(--white); border-radius: var(--r-xl); padding: 2.5rem 2rem; max-width: 400px; width: 90%; position: relative; box-shadow: var(--shadow-xl); transform: scale(.9) translateY(20px); transition: transform var(--mid) var(--ease); text-align: center; } .modal-overlay.active .modal-card { transform: scale(1) translateY(0); } .modal-close { position: absolute; top: 1rem; right: 1rem; background: var(--bg-2); border: none; width: 32px; height: 32px; border-radius: 50%; font-size: 1.2rem; cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--text-secondary); transition: all var(--fast) var(--ease); } .modal-close:hover { background: var(--border); color: var(--text-primary); } .modal-logo { font-size: 3rem; margin-bottom: 1rem; } .modal-title { font-size: 1.2rem; font-weight: 700; color: var(--text-primary); margin-bottom: .5rem; } .modal-subtitle { font-size: .875rem; color: var(--text-secondary); margin-bottom: 1.5rem; } .modal-actions { display: flex; flex-direction: column; gap: .75rem; margin-bottom: 1.25rem; } .modal-footer-text { font-size: .78rem; color: var(--text-muted); } /* ─── Loading Overlay ─────────────────────────────────────── */ .loading-overlay { position: fixed; inset: 0; background: rgba(255,255,255,.85); backdrop-filter: blur(2px); z-index: 9000; display: flex; align-items: center; justify-content: center; opacity: 0; visibility: hidden; transition: all var(--fast); } .loading-overlay.active { opacity: 1; visibility: visible; } .spinner { width: 44px; height: 44px; border: 3px solid var(--border); border-top-color: var(--brand); border-radius: 50%; animation: spin .8s linear infinite; } /* ─── Navbar ──────────────────────────────────────────────── */ .navbar { height: var(--nav-h); background: var(--brand); background: linear-gradient(135deg, #ee4d2d 0%, #c73a1d 100%); display: flex; align-items: center; padding: 0 1.5rem; position: sticky; top: 0; z-index: 100; box-shadow: 0 2px 12px rgba(238,77,45,.35); gap: 1rem; } .nav-logo { display: flex; align-items: center; gap: .625rem; color: var(--white); font-size: 1.3rem; font-weight: 800; font-family: 'Plus Jakarta Sans', sans-serif; white-space: nowrap; flex-shrink: 0; } .nav-logo-icon { font-size: 1.5rem; } .nav-search { flex: 1; max-width: 560px; display: flex; background: var(--white); border-radius: var(--r-sm); overflow: hidden; box-shadow: var(--shadow-sm); } .nav-search input { flex: 1; padding: .6rem 1rem; border: none; outline: none; font-size: .9rem; color: var(--text-primary); } .nav-search-btn { padding: 0 1.25rem; background: var(--brand); color: var(--white); border: none; font-size: 1rem; cursor: pointer; transition: background var(--fast); } .nav-search-btn:hover { background: var(--brand-dark); } .nav-actions { display: flex; align-items: center; gap: .75rem; margin-left: auto; flex-shrink: 0; } .nav-icon-btn { display: flex; align-items: center; gap: .375rem; color: var(--white); font-size: .85rem; font-weight: 500; padding: .4rem .6rem; border-radius: var(--r-sm); transition: background var(--fast); position: relative; } .nav-icon-btn:hover { background: rgba(255,255,255,.2); color: var(--white); } .nav-icon-btn .icon { font-size: 1.2rem; } .nav-badge { position: absolute; top: -4px; right: -4px; background: #ffee33; color: var(--brand); font-size: .68rem; font-weight: 700; border-radius: var(--r-full); padding: 1px 5px; min-width: 18px; text-align: center; } .nav-avatar { width: 32px; height: 32px; border-radius: 50%; border: 2px solid rgba(255,255,255,.5); object-fit: cover; } .nav-user-dropdown { display: flex; align-items: center; gap: .5rem; cursor: pointer; padding: .375rem .75rem; border-radius: var(--r-sm); transition: background var(--fast); position: relative; } .nav-user-dropdown:hover { background: rgba(255,255,255,.2); } .nav-user-name { color: var(--white); font-size: .85rem; font-weight: 600; max-width: 100px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .role-badge { font-size: .68rem; font-weight: 700; padding: 2px 8px; border-radius: var(--r-full); text-transform: uppercase; letter-spacing: .04em; } .role-buyer { background: rgba(255,255,255,.25); color: var(--white); } .role-seller { background: #fbbf24; color: #78350f; } .role-admin { background: #7c3aed; color: var(--white); } /* ─── Sub-Navbar (category bar) ──────────────────────────── */ .subnav { background: linear-gradient(to right, #d73211, #ee4d2d); padding: .5rem 1.5rem; display: flex; gap: 1.5rem; overflow-x: auto; } .subnav a { color: rgba(255,255,255,.85); font-size: .85rem; white-space: nowrap; padding: .25rem 0; transition: color var(--fast); } .subnav a:hover { color: var(--white); } /* ─── Auth Page Layout ─────────────────────────────────────── */ .auth-page { min-height: 100vh; display: grid; grid-template-columns: 1fr 460px; background: var(--brand); } .auth-left { display: flex; flex-direction: column; align-items: flex-start; justify-content: center; padding: 4rem 3rem; background: linear-gradient(160deg, #ee4d2d 0%, #c0392b 50%, #922b21 100%); position: relative; overflow: hidden; } .auth-left::before { content: ''; position: absolute; width: 500px; height: 500px; border-radius: 50%; background: rgba(255,255,255,.06); top: -200px; right: -200px; } .auth-left::after { content: ''; position: absolute; width: 300px; height: 300px; border-radius: 50%; background: rgba(255,255,255,.04); bottom: -100px; left: -100px; } .auth-brand { position: relative; z-index: 1; } .auth-brand-logo { font-size: 2.5rem; font-weight: 800; color: var(--white); font-family: 'Plus Jakarta Sans', sans-serif; margin-bottom: .5rem; display: flex; align-items: center; gap: .5rem; } .auth-brand-tagline { font-size: 1.5rem; color: rgba(255,255,255,.9); font-weight: 400; line-height: 1.5; max-width: 380px; } .auth-brand-features { margin-top: 3rem; display: flex; flex-direction: column; gap: 1rem; } .auth-feature { display: flex; align-items: center; gap: .875rem; color: rgba(255,255,255,.85); font-size: .95rem; } .auth-feature-icon { width: 40px; height: 40px; background: rgba(255,255,255,.15); border-radius: var(--r-md); display: flex; align-items: center; justify-content: center; font-size: 1.2rem; flex-shrink: 0; backdrop-filter: blur(4px); } .auth-right { background: #f7f7f7; display: flex; align-items: center; justify-content: center; padding: 2.5rem 2rem; min-height: 100vh; } .auth-card { background: var(--white); border-radius: var(--r-xl); padding: 2.5rem 2rem; width: 100%; max-width: 400px; box-shadow: var(--shadow-xl); animation: fadeSlideIn var(--slow) var(--ease); } /* ─── Auth Tabs ───────────────────────────────────────────── */ .auth-tabs { display: flex; background: var(--bg); border-radius: var(--r-md); padding: 4px; margin-bottom: 2rem; gap: 4px; } .auth-tab { flex: 1; padding: .6rem; border-radius: calc(var(--r-md) - 2px); font-size: .9rem; font-weight: 600; text-align: center; cursor: pointer; border: none; background: transparent; color: var(--text-muted); transition: all var(--mid) var(--ease); } .auth-tab.active { background: var(--white); color: var(--brand); box-shadow: var(--shadow-sm); } /* ─── Auth form steps ─────────────────────────────────────── */ .auth-step { display: none; animation: fadeSlideIn var(--mid) var(--ease); } .auth-step.active { display: block; } .auth-title { font-size: 1.4rem; font-weight: 700; color: var(--text-primary); margin-bottom: .375rem; font-family: 'Plus Jakarta Sans', sans-serif; } .auth-subtitle { font-size: .875rem; color: var(--text-secondary); margin-bottom: 1.75rem; line-height: 1.6; } /* ─── Social Login Buttons ────────────────────────────────── */ .social-grid { display: flex; flex-direction: column; gap: .75rem; margin-top: 1.25rem; } .social-btn { display: flex; align-items: center; gap: .75rem; padding: .75rem 1rem; border: 1.5px solid var(--border); border-radius: var(--r-md); background: var(--white); cursor: pointer; font-size: .9rem; font-weight: 500; color: var(--text-primary); transition: all var(--fast) var(--ease); width: 100%; } .social-btn:hover { border-color: #c5c5c5; background: var(--bg); box-shadow: var(--shadow-sm); } .social-btn svg, .social-btn .social-icon { width: 20px; height: 20px; flex-shrink: 0; font-size: 1.2rem; } /* ─── OTP Verification Step ───────────────────────────────── */ .otp-header { text-align: center; padding-bottom: .5rem; } .otp-identifier { font-weight: 600; color: var(--brand); } .otp-resend-wrap { text-align: center; margin-top: .75rem; } /* ─── Hero Banner ─────────────────────────────────────────── */ .hero { background: linear-gradient(135deg, #ee4d2d 0%, #ff7043 50%, #ffa726 100%); padding: 2.5rem 1.5rem; text-align: center; position: relative; overflow: hidden; } .hero::before { content: ''; position: absolute; inset: 0; background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.04'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E") repeat; } .hero-content { position: relative; z-index: 1; } .hero-title { font-size: 2.25rem; font-weight: 800; color: var(--white); font-family: 'Plus Jakarta Sans', sans-serif; margin-bottom: .5rem; } .hero-sub { font-size: 1.1rem; color: rgba(255,255,255,.9); margin-bottom: 1.75rem; } .hero-search { display: flex; max-width: 560px; margin: 0 auto; border-radius: var(--r-full); overflow: hidden; box-shadow: var(--shadow-lg); } .hero-search input { flex: 1; padding: 1rem 1.5rem; border: none; font-size: 1rem; outline: none; } .hero-search button { padding: 1rem 1.75rem; background: var(--brand-dark); color: var(--white); border: none; font-weight: 600; font-size: 1rem; cursor: pointer; transition: background var(--fast); } .hero-search button:hover { background: #922b21; } /* ─── Product Grid ────────────────────────────────────────── */ .products-section { padding: 2rem 1.5rem; } .section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.25rem; } .section-title { font-size: 1.2rem; font-weight: 700; color: var(--text-primary); display: flex; align-items: center; gap: .5rem; } .section-title::before { content: ''; width: 4px; height: 1.4em; background: var(--brand); border-radius: var(--r-full); display: block; } .section-see-all { font-size: .875rem; color: var(--brand); font-weight: 500; } .section-see-all:hover { text-decoration: underline; } .product-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 1rem; } .product-card { background: var(--white); border-radius: var(--r-lg); overflow: hidden; box-shadow: var(--shadow-sm); transition: all var(--mid) var(--ease); cursor: pointer; position: relative; } .product-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); } .product-img-wrap { aspect-ratio: 1; background: var(--bg); overflow: hidden; position: relative; } .product-img-wrap img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--slow) var(--ease); } .product-card:hover .product-img-wrap img { transform: scale(1.06); } .product-badge { position: absolute; top: .5rem; left: .5rem; background: var(--brand); color: var(--white); font-size: .72rem; font-weight: 700; padding: 2px 8px; border-radius: var(--r-full); } .product-info { padding: .875rem .75rem; } .product-name { font-size: .875rem; font-weight: 500; color: var(--text-primary); line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; margin-bottom: .5rem; } .product-price { font-size: 1.05rem; font-weight: 700; color: var(--brand); } .product-price-old { font-size: .8rem; text-decoration: line-through; color: var(--text-muted); margin-left: .25rem; } .product-meta { display: flex; align-items: center; justify-content: space-between; margin-top: .5rem; } .product-sold { font-size: .78rem; color: var(--text-muted); } .product-rating { font-size: .78rem; color: #f59e0b; } .product-actions { display: flex; gap: .5rem; padding: 0 .75rem .875rem; } .product-actions .btn { flex: 1; padding: .5rem; font-size: .8rem; } /* ─── Page Layout for protected pages ────────────────────── */ .page-container { max-width: 1100px; margin: 2rem auto; padding: 0 1.5rem; } .page-header { margin-bottom: 2rem; } .page-title { font-size: 1.6rem; font-weight: 700; color: var(--text-primary); font-family: 'Plus Jakarta Sans', sans-serif; } .page-subtitle { color: var(--text-secondary); margin-top: .25rem; } .card { background: var(--white); border-radius: var(--r-lg); padding: 1.75rem; box-shadow: var(--shadow-sm); border: 1px solid var(--border); } /* ─── Account Page ─────────────────────────────────────────── */ .account-layout { display: grid; grid-template-columns: 240px 1fr; gap: 1.5rem; } .account-sidebar { display: flex; flex-direction: column; gap: .25rem; } .account-avatar-section { text-align: center; padding: 1.5rem 1rem; background: var(--white); border-radius: var(--r-lg); box-shadow: var(--shadow-sm); margin-bottom: .5rem; } .account-avatar { width: 80px; height: 80px; border-radius: 50%; border: 3px solid var(--brand); margin: 0 auto .75rem; object-fit: cover; } .account-username { font-weight: 700; font-size: 1rem; color: var(--text-primary); } .account-role { margin-top: .25rem; } .sidebar-link { display: flex; align-items: center; gap: .625rem; padding: .75rem 1rem; border-radius: var(--r-md); font-size: .9rem; color: var(--text-secondary); background: transparent; border: none; cursor: pointer; width: 100%; text-align: left; transition: all var(--fast) var(--ease); font-family: inherit; } .sidebar-link:hover { background: var(--brand-pale); color: var(--brand); } .sidebar-link.active { background: var(--brand-pale); color: var(--brand); font-weight: 600; } .sidebar-link .icon { font-size: 1.1rem; width: 20px; text-align: center; } /* ─── Upgrade to Seller ───────────────────────────────────── */ .upgrade-card { background: linear-gradient(135deg, var(--brand-pale), #fff); border: 2px solid var(--brand); border-radius: var(--r-lg); padding: 2rem; text-align: center; } .upgrade-icon { font-size: 3rem; margin-bottom: 1rem; } .upgrade-title { font-size: 1.3rem; font-weight: 700; color: var(--text-primary); margin-bottom: .5rem; } .upgrade-desc { font-size: .9rem; color: var(--text-secondary); margin-bottom: 1.5rem; line-height: 1.7; } .upgrade-perks { display: flex; flex-direction: column; gap: .625rem; margin-bottom: 1.75rem; text-align: left; } .upgrade-perk { display: flex; align-items: center; gap: .625rem; font-size: .9rem; color: var(--text-primary); background: var(--white); padding: .625rem 1rem; border-radius: var(--r-md); box-shadow: var(--shadow-sm); } .upgrade-perk-icon { color: var(--success); font-size: 1rem; flex-shrink: 0; } /* ─── Seller Center ────────────────────────────────────────── */ .seller-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-bottom: 1.5rem; } .stat-card { background: var(--white); border-radius: var(--r-lg); padding: 1.5rem; box-shadow: var(--shadow-sm); border: 1px solid var(--border); display: flex; align-items: center; gap: 1rem; } .stat-icon { width: 52px; height: 52px; border-radius: var(--r-md); display: flex; align-items: center; justify-content: center; font-size: 1.4rem; flex-shrink: 0; } .stat-icon.orange { background: var(--brand-pale); } .stat-icon.green { background: #dcfce7; } .stat-icon.blue { background: #dbeafe; } .stat-icon.purple { background: #f3e8ff; } .stat-value { font-size: 1.6rem; font-weight: 800; color: var(--text-primary); font-family: 'Plus Jakarta Sans', sans-serif; } .stat-label { font-size: .8rem; color: var(--text-muted); margin-top: .125rem; } /* ─── Cart Page ───────────────────────────────────────────── */ .cart-layout { display: grid; grid-template-columns: 1fr 320px; gap: 1.5rem; align-items: start; } .cart-item { display: flex; align-items: center; gap: 1rem; padding: 1rem; border-bottom: 1px solid var(--border); } .cart-item:last-child { border-bottom: none; } .cart-item-img { width: 80px; height: 80px; border-radius: var(--r-md); object-fit: cover; flex-shrink: 0; background: var(--bg); } .cart-item-name { font-weight: 500; color: var(--text-primary); flex: 1; } .cart-item-price { font-weight: 700; color: var(--brand); white-space: nowrap; } .order-summary { background: var(--white); border-radius: var(--r-lg); padding: 1.5rem; box-shadow: var(--shadow-sm); } .order-summary-title { font-size: 1.05rem; font-weight: 700; margin-bottom: 1rem; color: var(--text-primary); } .order-row { display: flex; justify-content: space-between; font-size: .9rem; padding: .375rem 0; } .order-row.total { font-weight: 700; font-size: 1.1rem; color: var(--brand); border-top: 1px solid var(--border); padding-top: .75rem; margin-top: .375rem; } /* ─── Checkout Page ───────────────────────────────────────── */ .checkout-layout { display: grid; grid-template-columns: 1fr 360px; gap: 1.5rem; align-items: start; } .checkout-section-title { font-size: 1rem; font-weight: 700; margin-bottom: 1.25rem; color: var(--text-primary); display: flex; align-items: center; gap: .5rem; } /* ─── Empty States ─────────────────────────────────────────── */ .empty-state { text-align: center; padding: 4rem 2rem; color: var(--text-muted); } .empty-icon { font-size: 4rem; margin-bottom: 1rem; opacity: .5; } .empty-title { font-size: 1.1rem; font-weight: 600; color: var(--text-secondary); margin-bottom: .5rem; } .empty-desc { font-size: .875rem; } /* ─── Access Denied ────────────────────────────────────────── */ .access-denied { min-height: 60vh; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 2rem; gap: 1rem; } .access-denied-icon { font-size: 5rem; opacity: .4; } .access-denied-title { font-size: 1.5rem; font-weight: 700; color: var(--text-primary); } .access-denied-desc { font-size: .95rem; color: var(--text-secondary); max-width: 400px; line-height: 1.7; } /* ─── Footer ──────────────────────────────────────────────── */ .footer { background: #111; color: rgba(255,255,255,.7); padding: 3rem 1.5rem 2rem; margin-top: 3rem; } .footer-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 2rem; max-width: 1100px; margin: 0 auto 2rem; } .footer-brand { font-size: 1.2rem; font-weight: 800; color: var(--white); font-family: 'Plus Jakarta Sans', sans-serif; margin-bottom: .75rem; } .footer-desc { font-size: .85rem; line-height: 1.7; } .footer-title { font-size: .9rem; font-weight: 700; color: var(--white); margin-bottom: 1rem; } .footer-links { display: flex; flex-direction: column; gap: .5rem; } .footer-links a { font-size: .85rem; color: rgba(255,255,255,.65); transition: color var(--fast); } .footer-links a:hover { color: var(--white); } .footer-bottom { border-top: 1px solid rgba(255,255,255,.1); padding-top: 1.5rem; text-align: center; font-size: .82rem; max-width: 1100px; margin: 0 auto; } /* ─── Animations ──────────────────────────────────────────── */ @keyframes spin { to { transform: rotate(360deg); } } @keyframes fadeSlideIn { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } .skeleton { background: linear-gradient(90deg, var(--bg) 25%, var(--border) 50%, var(--bg) 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: var(--r-sm); } /* ─── Responsive ──────────────────────────────────────────── */ @media (max-width: 900px) { .auth-page { grid-template-columns: 1fr; } .auth-left { display: none; } .auth-right { min-height: 100vh; padding: 1.5rem 1rem; background: var(--brand); } .auth-card { max-width: 100%; border-radius: var(--r-lg); } .account-layout { grid-template-columns: 1fr; } .cart-layout { grid-template-columns: 1fr; } .checkout-layout { grid-template-columns: 1fr; } } @media (max-width: 600px) { :root { --nav-h: 56px; } .nav-search { display: none; } .hero-title { font-size: 1.6rem; } .product-grid { grid-template-columns: repeat(2, 1fr); gap: .75rem; } .otp-digit { width: 44px; height: 52px; font-size: 1.3rem; } .seller-stats { grid-template-columns: repeat(2, 1fr); } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.24 |
proxy
|
phpinfo
|
Settings