Download apps/admin-web/app/globals.css from ADI576/proflo: direct link, hf CLI and curl.
- Browser
- Download file 51 kB
-
https://huggingface.co/spaces/ADI576/proflo/resolve/main/apps/admin-web/app/globals.css
- Command line
-
hf download hf://spaces/ADI576/proflo/apps/admin-web/app/globals.css
-
curl -L -o globals.css https://huggingface.co/spaces/ADI576/proflo/resolve/main/apps/admin-web/app/globals.css
51 kB
| @import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;450;500;600;700&family=Plus+Jakarta+Sans:wght@500;600;700;800&display=swap"); | |
| @tailwind base; | |
| @tailwind components; | |
| @tailwind utilities; | |
| /* ========================================================================== | |
| ProFlo Admin — Professional Design System | |
| Inspired by Stripe / Vercel / Linear | |
| Palette: White · Blue · Dark Navy | |
| ========================================================================== */ | |
| :root { | |
| color-scheme: light; | |
| /* ── Brand Palette ── */ | |
| --brand: #0052FF; | |
| --brand-hover: #0040CC; | |
| --brand-pressed: #0035A8; | |
| --brand-soft: rgba(0, 82, 255, 0.08); | |
| --brand-border: rgba(0, 82, 255, 0.25); | |
| --navy: #0C1A3D; | |
| --navy-mid: #162554; | |
| --navy-hover: #1e3166; | |
| /* ── Semantic ── */ | |
| --success: #0EA56C; | |
| --success-soft: rgba(14, 165, 108, 0.10); | |
| --success-border:rgba(14, 165, 108, 0.30); | |
| --warning: #D97706; | |
| --warning-soft: rgba(217, 119, 6, 0.10); | |
| --warning-border:rgba(217, 119, 6, 0.30); | |
| --danger: #DC2626; | |
| --danger-soft: rgba(220, 38, 38, 0.08); | |
| --danger-border: rgba(220, 38, 38, 0.25); | |
| --danger-bg: #fef2f2; | |
| /* ── Neutrals ── */ | |
| --ink: #0F172A; | |
| --muted: #5A6882; | |
| --subtle: #94A3B8; | |
| --bg: #F8FAFD; | |
| --surface: #FFFFFF; | |
| --surface-2: #F1F5F9; | |
| --surface-3: #E8EEF5; | |
| --border: rgba(15, 23, 42, 0.10); | |
| --border-hover: rgba(15, 23, 42, 0.20); | |
| /* Legacy aliases — keep for TSX compatibility */ | |
| --text: var(--ink); | |
| --line: var(--border); | |
| --proflo-blue: var(--brand); | |
| --proflo-blue-dark: var(--brand-hover); | |
| --proflo-navy: var(--navy); | |
| --proflo-navy-mid:var(--navy-mid); | |
| --olive: var(--brand); | |
| --olive-dark: var(--navy); | |
| --olive-soft: var(--brand-soft); | |
| --orange: var(--warning); | |
| --orange-soft: var(--warning-soft); | |
| --accent: var(--brand); | |
| --ink: var(--ink); | |
| /* ── Shadows ── */ | |
| --shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.05), 0 1px 3px rgba(15, 23, 42, 0.08); | |
| --shadow: 0 1px 3px rgba(15, 23, 42, 0.05), 0 4px 16px rgba(15, 23, 42, 0.07); | |
| --shadow-lg: 0 4px 6px rgba(15, 23, 42, 0.04), 0 16px 40px rgba(15, 23, 42, 0.10); | |
| --shadow-modal: 0 24px 64px rgba(12, 26, 61, 0.20), 0 4px 12px rgba(12, 26, 61, 0.12); | |
| --shadow-brand: 0 4px 14px rgba(0, 82, 255, 0.30); | |
| /* ── Radii ── */ | |
| --radius-sm: 6px; | |
| --radius: 10px; | |
| --radius-lg: 14px; | |
| --radius-xl: 18px; | |
| /* ── Typography ── */ | |
| --font: "Inter", system-ui, sans-serif; | |
| --font-display: "Plus Jakarta Sans", system-ui, sans-serif; | |
| /* ── Motion ── */ | |
| --ease: cubic-bezier(0.4, 0, 0.2, 1); | |
| --duration: 150ms; | |
| --transition: var(--duration) var(--ease); | |
| } | |
| /* ========================================================================== | |
| Reset & Base | |
| ========================================================================== */ | |
| *, *::before, *::after { box-sizing: border-box; } | |
| body { | |
| margin: 0; | |
| font-family: var(--font); | |
| font-size: 14px; | |
| line-height: 1.5; | |
| color: var(--ink); | |
| background: var(--bg); | |
| min-height: 100dvh; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| } | |
| a { | |
| color: var(--brand); | |
| text-decoration: none; | |
| font-weight: 500; | |
| } | |
| a:hover { text-decoration: underline; } | |
| /* ========================================================================== | |
| Admin Shell — Sidebar Layout | |
| ========================================================================== */ | |
| .adminShell { | |
| min-height: 100vh; | |
| background: var(--bg); | |
| color: var(--ink); | |
| overflow-x: hidden; | |
| } | |
| .adminContainer { | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| /* Sidebar */ | |
| .adminSidebar { | |
| width: 100%; | |
| padding: 20px 16px; | |
| background: #FFFFFF; | |
| color: #0F172A; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| border-bottom: 1px solid #E2E8F0; | |
| } | |
| /* Brand within sidebar */ | |
| .adminSidebar__brand { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| padding: 8px 0 16px; | |
| border-bottom: 1px solid #F1F5F9; | |
| margin-bottom: 8px; | |
| color: #0F172A; | |
| } | |
| .adminSidebar__brand .brandZipp { | |
| font-family: var(--font-display); | |
| font-size: 18px; | |
| font-weight: 800; | |
| color: #0F172A; | |
| letter-spacing: -0.02em; | |
| } | |
| .adminSidebar__brand .brandMart { | |
| color: #0052FF; | |
| } | |
| /* Meta section (role pill + store select) */ | |
| .adminSidebar__meta { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 10px; | |
| padding: 14px; | |
| background: #F8FAFC; | |
| border: 1px solid #E2E8F0; | |
| border-radius: var(--radius-lg); | |
| margin-top: 8px; | |
| } | |
| .adminRolePill { | |
| display: inline-flex; | |
| align-items: center; | |
| padding: 3px 10px; | |
| border-radius: 999px; | |
| font-size: 10px; | |
| font-weight: 700; | |
| text-transform: uppercase; | |
| letter-spacing: 0.08em; | |
| background: rgba(0, 82, 255, 0.08); | |
| border: 1px solid rgba(0, 82, 255, 0.15); | |
| color: #0052FF; | |
| width: fit-content; | |
| } | |
| .adminSidebar__label { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| font-size: 10px; | |
| font-weight: 700; | |
| color: #64748B; | |
| text-transform: uppercase; | |
| letter-spacing: 0.06em; | |
| } | |
| .adminSidebar__footer { | |
| margin-top: auto; | |
| padding-top: 16px; | |
| border-top: 1px solid #F1F5F9; | |
| } | |
| /* Sidebar select */ | |
| select.adminSelect.adminSelect--store, | |
| .adminSelect--store { | |
| width: 100% ; | |
| min-width: 0 ; | |
| flex: none ; | |
| height: 38px ; | |
| padding: 0 12px; | |
| font-size: 13px; | |
| font-weight: 600; | |
| font-family: var(--font); | |
| background: #FFFFFF ; | |
| color: #0F172A ; | |
| border: 1px solid #DDE3EA ; | |
| border-radius: var(--radius-sm); | |
| cursor: pointer; | |
| outline: none; | |
| } | |
| select.adminSelect.adminSelect--store:focus, | |
| .adminSelect--store:focus { | |
| border-color: #0052FF ; | |
| background: #FFFFFF ; | |
| box-shadow: 0 0 0 2px rgba(0, 82, 255, 0.12) ; | |
| } | |
| .adminSelect--store option { | |
| background: #FFFFFF ; | |
| color: #0F172A ; | |
| } | |
| /* Mobile header */ | |
| .adminMobileHeader { | |
| display: none; | |
| } | |
| /* Desktop sidebar layout */ | |
| @media (min-width: 1025px) { | |
| .adminContainer { | |
| flex-direction: row; | |
| min-height: 100vh; | |
| } | |
| .adminSidebar { | |
| width: 256px; | |
| flex-shrink: 0; | |
| height: 100vh; | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| bottom: 0; | |
| overflow-y: auto; | |
| padding: 28px 20px; | |
| gap: 4px; | |
| background: #FFFFFF; | |
| border-right: 1px solid #E2E8F0; | |
| border-bottom: none; | |
| z-index: 100; | |
| } | |
| .adminMain { | |
| flex: 1; | |
| min-width: 0; | |
| padding: 40px 48px 64px; | |
| margin-left: 256px; | |
| } | |
| } | |
| @media (max-width: 1024px) { | |
| .adminMobileHeader { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| padding: 12px 16px; | |
| background: #FFFFFF; | |
| border-bottom: 1px solid #E2E8F0; | |
| position: sticky; | |
| top: 0; | |
| z-index: 100; | |
| color: #0F172A; | |
| } | |
| .adminMobileHeader__toggle { | |
| background: #F8FAFC; | |
| border: 1px solid #E2E8F0; | |
| color: #334155; | |
| padding: 6px 14px; | |
| border-radius: var(--radius-sm); | |
| font-size: 13px; | |
| font-weight: 600; | |
| font-family: var(--font); | |
| cursor: pointer; | |
| transition: background var(--transition); | |
| } | |
| .adminMobileHeader__toggle:hover { | |
| background: #F1F5F9; | |
| } | |
| .adminSidebar { | |
| display: none; | |
| border-bottom: 1px solid #E2E8F0; | |
| } | |
| .adminSidebar.adminSidebar--open { | |
| display: flex ; | |
| flex-direction: column; | |
| gap: 6px; | |
| padding: 16px; | |
| background: #FFFFFF ; | |
| border-bottom: 1px solid #E2E8F0 ; | |
| } | |
| } | |
| /* Main content area */ | |
| .adminMain { | |
| width: 100%; | |
| max-width: 100%; | |
| padding: 24px 20px 56px; | |
| } | |
| /* ========================================================================== | |
| Navigation Items | |
| ========================================================================== */ | |
| .adminNav { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); | |
| gap: 8px; | |
| margin-bottom: 0; | |
| } | |
| .adminNav__item { | |
| min-height: 52px; | |
| padding: 10px 12px; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: flex-start; | |
| justify-content: center; | |
| gap: 2px; | |
| background: #F8FAFC; | |
| border: 1px solid #E2E8F0; | |
| border-radius: var(--radius); | |
| cursor: pointer; | |
| transition: background var(--transition), border-color var(--transition); | |
| width: 100%; | |
| font-family: var(--font); | |
| } | |
| .adminNav__item:hover { | |
| background: #F1F5F9; | |
| border-color: #CBD5E1; | |
| } | |
| .adminNav__item--active { | |
| background: rgba(0, 82, 255, 0.08) ; | |
| border-color: rgba(0, 82, 255, 0.25) ; | |
| } | |
| .adminNav__item--active .adminNav__label { | |
| color: #0052FF ; | |
| } | |
| .adminNav__item--active .adminNav__hint { | |
| color: rgba(0, 82, 255, 0.70) ; | |
| } | |
| .adminNav__label { | |
| font-size: 13px; | |
| font-weight: 700; | |
| color: #334155; | |
| line-height: 1.2; | |
| } | |
| .adminNav__hint { | |
| font-size: 10px; | |
| color: #64748B; | |
| line-height: 1.3; | |
| } | |
| /* Desktop nav — vertical list */ | |
| @media (min-width: 1025px) { | |
| .adminNav { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 2px; | |
| } | |
| .adminNav__item { | |
| min-height: 40px; | |
| padding: 8px 12px; | |
| border-radius: var(--radius-sm); | |
| border: 1px solid transparent; | |
| background: transparent; | |
| flex-direction: row; | |
| align-items: center; | |
| justify-content: flex-start; | |
| gap: 10px; | |
| } | |
| .adminNav__item:hover { | |
| background: #F1F5F9; | |
| border-color: #E2E8F0; | |
| } | |
| .adminNav__item--active { | |
| background: rgba(0, 82, 255, 0.06) ; | |
| border-color: rgba(0, 82, 255, 0.15) ; | |
| } | |
| .adminNav__item--active::before { | |
| content: ""; | |
| display: block; | |
| width: 3px; | |
| height: 14px; | |
| background: #0052FF; | |
| border-radius: 99px; | |
| flex-shrink: 0; | |
| margin-right: 4px; | |
| } | |
| .adminNav__hint { | |
| display: none; | |
| } | |
| .adminNav__label { | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: #475569; | |
| } | |
| .adminNav__item--active .adminNav__label { | |
| color: #0052FF ; | |
| font-weight: 700; | |
| } | |
| } | |
| /* ========================================================================== | |
| Page Header | |
| ========================================================================== */ | |
| .adminHeader { | |
| display: flex; | |
| flex-wrap: wrap; | |
| justify-content: space-between; | |
| gap: 16px; | |
| margin-bottom: 32px; | |
| padding-bottom: 24px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .adminHeader__eyebrow { | |
| margin: 0; | |
| font-size: 11px; | |
| font-weight: 700; | |
| letter-spacing: 0.10em; | |
| text-transform: uppercase; | |
| color: var(--brand); | |
| } | |
| .adminHeader__title { | |
| margin: 6px 0 0; | |
| font-family: var(--font-display); | |
| font-size: clamp(1.5rem, 3vw, 1.875rem); | |
| font-weight: 700; | |
| color: var(--navy); | |
| letter-spacing: -0.02em; | |
| line-height: 1.2; | |
| } | |
| .adminHeader__sub { | |
| margin: 8px 0 0; | |
| max-width: 56ch; | |
| color: var(--muted); | |
| font-size: 14px; | |
| line-height: 1.55; | |
| } | |
| .adminHeader__actions { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| justify-content: flex-end; | |
| gap: 8px; | |
| width: 100%; | |
| } | |
| @media (min-width: 1025px) { | |
| .adminHeader { align-items: flex-end; } | |
| .adminHeader__actions { | |
| width: auto; | |
| flex: 0 0 auto; | |
| flex-wrap: nowrap; | |
| } | |
| } | |
| @media (max-width: 767px) { | |
| .adminHeader__actions { | |
| display: grid; | |
| grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| gap: 8px; | |
| } | |
| .adminSelect--store { grid-column: 1 / -1; width: 100%; } | |
| .adminHeader__actions .adminBtn { | |
| width: 100%; | |
| min-width: 0; | |
| padding: 10px 12px; | |
| font-size: 13px; | |
| white-space: normal; | |
| text-align: center; | |
| } | |
| } | |
| /* ========================================================================== | |
| Buttons | |
| ========================================================================== */ | |
| button { | |
| border: none; | |
| border-radius: var(--radius); | |
| padding: 0 18px; | |
| height: 40px; | |
| background: var(--brand); | |
| color: #fff; | |
| font-weight: 600; | |
| font-family: var(--font); | |
| font-size: 14px; | |
| cursor: pointer; | |
| transition: background var(--transition), transform var(--transition); | |
| } | |
| button:active { transform: scale(0.98); } | |
| button:disabled { opacity: 0.45; cursor: not-allowed; } | |
| button.secondary { | |
| background: var(--surface); | |
| color: var(--navy); | |
| border: 1px solid var(--border); | |
| box-shadow: none; | |
| } | |
| button.secondary:hover { background: var(--surface-2); } | |
| .adminBtn { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 6px; | |
| min-height: 38px; | |
| height: auto; | |
| padding: 9px 18px; | |
| border-radius: var(--radius); | |
| border: none; | |
| font-family: var(--font); | |
| font-weight: 600; | |
| font-size: 13.5px; | |
| line-height: 1.25; | |
| white-space: nowrap; | |
| cursor: pointer; | |
| background: var(--brand); | |
| color: #fff; | |
| box-shadow: var(--shadow-brand); | |
| transition: background var(--transition), box-shadow var(--transition), transform var(--transition); | |
| } | |
| .adminBtn:hover:not(:disabled) { | |
| background: var(--brand-hover); | |
| box-shadow: 0 6px 20px rgba(0, 82, 255, 0.35); | |
| } | |
| .adminBtn:active:not(:disabled) { | |
| transform: scale(0.98); | |
| background: var(--brand-pressed); | |
| } | |
| .adminBtn:disabled { opacity: 0.45; cursor: not-allowed; box-shadow: none; } | |
| .adminBtn--ghost { | |
| background: #FFFFFF; | |
| color: #334155; | |
| border: 1px solid #E2E8F0; | |
| box-shadow: var(--shadow-sm); | |
| } | |
| .adminBtn--ghost:hover:not(:disabled) { | |
| background: #F8FAFC; | |
| border-color: #CBD5E1; | |
| box-shadow: var(--shadow-sm); | |
| } | |
| .adminBtn--danger { | |
| background: var(--danger-soft); | |
| color: var(--danger); | |
| border: 1px solid var(--danger-border); | |
| box-shadow: none; | |
| } | |
| .adminBtn--danger:hover:not(:disabled) { | |
| background: rgba(220, 38, 38, 0.14); | |
| } | |
| .adminBtn--small { | |
| min-height: 30px; | |
| padding: 6px 12px; | |
| font-size: 12px; | |
| border-radius: var(--radius-sm); | |
| } | |
| .adminBtn--full { width: 100%; } | |
| .adminBtn--logout { | |
| background: transparent; | |
| color: #64748B; | |
| border: 1px solid #E2E8F0; | |
| box-shadow: none; | |
| font-size: 13px; | |
| } | |
| .adminBtn--logout:hover:not(:disabled) { | |
| background: rgba(239, 68, 68, 0.05); | |
| color: #EF4444; | |
| border-color: rgba(239, 68, 68, 0.15); | |
| } | |
| .adminBtn--on { | |
| background: var(--brand); | |
| color: #fff; | |
| border-color: var(--brand); | |
| } | |
| /* ========================================================================== | |
| Inputs & Form Controls | |
| ========================================================================== */ | |
| input { | |
| width: 100%; | |
| height: 40px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius); | |
| padding: 0 14px; | |
| font-family: var(--font); | |
| font-size: 14px; | |
| background: var(--surface); | |
| color: var(--ink); | |
| outline: none; | |
| transition: border-color var(--transition), box-shadow var(--transition); | |
| } | |
| input::placeholder { color: var(--subtle); } | |
| input:hover { border-color: var(--border-hover); } | |
| input:focus { | |
| border-color: var(--brand); | |
| box-shadow: 0 0 0 3px var(--brand-soft); | |
| } | |
| .adminInput { | |
| width: 100%; | |
| height: 40px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius); | |
| padding: 0 14px; | |
| font: inherit; | |
| font-size: 14px; | |
| background: var(--surface); | |
| color: var(--ink); | |
| outline: none; | |
| transition: border-color var(--transition), box-shadow var(--transition); | |
| } | |
| .adminInput:focus { | |
| border-color: var(--brand); | |
| box-shadow: 0 0 0 3px var(--brand-soft); | |
| } | |
| .adminSelect { | |
| flex: 1 1 220px; | |
| min-width: 180px; | |
| height: 40px; | |
| border-radius: var(--radius); | |
| border: 1px solid var(--border); | |
| padding: 0 12px; | |
| font-family: var(--font); | |
| font-size: 14px; | |
| background: var(--surface); | |
| color: var(--ink); | |
| outline: none; | |
| cursor: pointer; | |
| } | |
| .adminSelect:focus { | |
| border-color: var(--brand); | |
| box-shadow: 0 0 0 3px var(--brand-soft); | |
| } | |
| .adminSelect--compact { | |
| min-width: 140px; | |
| height: 38px; | |
| border-radius: var(--radius); | |
| border: 1px solid var(--border); | |
| font: inherit; | |
| font-size: 13px; | |
| padding: 0 10px; | |
| background: var(--surface); | |
| color: var(--ink); | |
| outline: none; | |
| } | |
| .adminPct { | |
| width: 72px; | |
| height: 40px; | |
| border-radius: var(--radius); | |
| border: 1px solid var(--border); | |
| text-align: center; | |
| font-weight: 700; | |
| font-family: var(--font); | |
| font-size: 14px; | |
| background: var(--surface); | |
| color: var(--ink); | |
| outline: none; | |
| } | |
| .adminPct:focus { | |
| border-color: var(--brand); | |
| box-shadow: 0 0 0 3px var(--brand-soft); | |
| } | |
| .pctSuffix { font-weight: 700; color: var(--muted); } | |
| /* ========================================================================== | |
| Cards & Panels | |
| ========================================================================== */ | |
| .panel { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-lg); | |
| padding: 20px; | |
| box-shadow: var(--shadow); | |
| } | |
| .panel h3 { | |
| margin: 0 0 16px; | |
| font-family: var(--font-display); | |
| font-size: 15px; | |
| font-weight: 700; | |
| color: var(--navy); | |
| } | |
| .panel--wide { grid-column: 1 / -1; } | |
| .adminPanel { margin-bottom: 0; } | |
| .adminPanel__title { | |
| margin: 0 0 6px; | |
| font-family: var(--font-display); | |
| font-size: 16px; | |
| font-weight: 700; | |
| color: var(--navy); | |
| letter-spacing: -0.01em; | |
| } | |
| .adminPanel__lede { | |
| margin: 0 0 20px; | |
| font-size: 13px; | |
| color: var(--muted); | |
| line-height: 1.55; | |
| } | |
| .adminPanel--orders { margin-bottom: 24px; } | |
| /* ========================================================================== | |
| Metric Cards (KPI Dashboard) | |
| ========================================================================== */ | |
| .metricsGrid { | |
| display: grid; | |
| grid-template-columns: repeat(4, minmax(0, 1fr)); | |
| gap: 16px; | |
| margin-bottom: 32px; | |
| } | |
| @media (max-width: 1100px) { | |
| .metricsGrid { grid-template-columns: repeat(2, minmax(0, 1fr)); } | |
| } | |
| @media (max-width: 520px) { | |
| .metricsGrid { grid-template-columns: minmax(0, 1fr) ; } | |
| } | |
| .metricCard { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-lg); | |
| padding: 20px; | |
| box-shadow: var(--shadow-sm); | |
| transition: box-shadow var(--transition); | |
| } | |
| .metricCard:hover { box-shadow: var(--shadow); } | |
| .metricCard--accent { | |
| border-top: 3px solid var(--brand); | |
| } | |
| .metricCard__label { | |
| margin: 0; | |
| font-size: 11px; | |
| font-weight: 700; | |
| text-transform: uppercase; | |
| letter-spacing: 0.07em; | |
| color: var(--muted); | |
| } | |
| .metricCard__value { | |
| margin: 10px 0 0; | |
| font-family: var(--font-display); | |
| font-size: 1.75rem; | |
| font-weight: 800; | |
| color: var(--navy); | |
| letter-spacing: -0.02em; | |
| line-height: 1; | |
| } | |
| .metricCard__hint { | |
| margin: 8px 0 0; | |
| font-size: 12px; | |
| color: var(--muted); | |
| line-height: 1.4; | |
| } | |
| /* ========================================================================== | |
| Analysis / Overview Grid | |
| ========================================================================== */ | |
| .analysisGrid { | |
| display: grid; | |
| grid-template-columns: repeat(3, minmax(0, 1fr)); | |
| gap: 18px; | |
| margin-bottom: 32px; | |
| } | |
| @media (max-width: 1100px) { | |
| .analysisGrid { grid-template-columns: minmax(0, 1fr); } | |
| } | |
| @media (max-width: 520px) { | |
| .analysisGrid { grid-template-columns: minmax(0, 1fr) ; } | |
| } | |
| .analysisCard--wide { grid-column: 1 / -1; } | |
| .analysisBar { | |
| height: 8px; | |
| border-radius: 999px; | |
| background: var(--surface-2); | |
| overflow: hidden; | |
| margin-bottom: 14px; | |
| } | |
| .analysisBar__paid { | |
| display: block; | |
| height: 100%; | |
| min-width: 4px; | |
| background: linear-gradient(90deg, var(--brand) 0%, #5B9BFF 100%); | |
| border-radius: 999px; | |
| } | |
| .analysisLegend { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 12px 20px; | |
| font-size: 12px; | |
| color: var(--muted); | |
| } | |
| .analysisDot { | |
| display: inline-block; | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| margin-right: 5px; | |
| vertical-align: middle; | |
| } | |
| .analysisDot--paid { background: var(--brand); } | |
| .analysisDot--pending { background: var(--surface-3); border: 1px solid var(--border); } | |
| .analysisFoot { | |
| margin: 14px 0 0; | |
| font-size: 13px; | |
| color: var(--muted); | |
| } | |
| .analysisList { | |
| list-style: none; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| .analysisList li { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| gap: 12px; | |
| padding: 11px 0; | |
| border-bottom: 1px solid var(--border); | |
| font-size: 13.5px; | |
| } | |
| .analysisList li:last-child { border-bottom: none; } | |
| /* ========================================================================== | |
| Tables | |
| ========================================================================== */ | |
| .tableWrap { | |
| overflow-x: auto; | |
| border-radius: var(--radius-lg); | |
| border: 1px solid var(--border); | |
| background: var(--surface); | |
| } | |
| .adminTable { | |
| width: 100%; | |
| border-collapse: collapse; | |
| font-size: 13.5px; | |
| background: var(--surface); | |
| } | |
| .adminTable th { | |
| padding: 11px 16px; | |
| text-align: left; | |
| font-size: 11px; | |
| font-weight: 700; | |
| text-transform: uppercase; | |
| letter-spacing: 0.07em; | |
| color: var(--muted); | |
| background: var(--surface-2); | |
| border-bottom: 1px solid var(--border); | |
| white-space: nowrap; | |
| } | |
| .adminTable td { | |
| padding: 13px 16px; | |
| text-align: left; | |
| border-bottom: 1px solid var(--border); | |
| vertical-align: middle; | |
| color: var(--ink); | |
| } | |
| .adminTable tr:last-child td { border-bottom: none; } | |
| .adminTable tbody tr:hover { background: rgba(248, 250, 253, 0.8); } | |
| .adminTable__row--hot { background: rgba(217, 119, 6, 0.04) ; } | |
| .adminTable--compact th, | |
| .adminTable--compact td { | |
| padding: 9px 12px; | |
| font-size: 12.5px; | |
| } | |
| /* ========================================================================== | |
| Badges & Pills | |
| ========================================================================== */ | |
| .badge { | |
| display: inline-flex; | |
| align-items: center; | |
| padding: 4px 10px; | |
| border-radius: 999px; | |
| font-size: 11px; | |
| font-weight: 700; | |
| border: 1px solid var(--border); | |
| background: var(--surface-2); | |
| color: var(--muted); | |
| } | |
| .pillOk { | |
| display: inline-flex; | |
| align-items: center; | |
| padding: 3px 9px; | |
| border-radius: 999px; | |
| font-size: 11px; | |
| font-weight: 700; | |
| background: var(--success-soft); | |
| color: var(--success); | |
| border: 1px solid var(--success-border); | |
| } | |
| .pillWarn { | |
| display: inline-flex; | |
| align-items: center; | |
| padding: 3px 9px; | |
| border-radius: 999px; | |
| font-size: 11px; | |
| font-weight: 700; | |
| background: var(--warning-soft); | |
| color: var(--warning); | |
| border: 1px solid var(--warning-border); | |
| } | |
| .pillHot { | |
| display: inline-flex; | |
| align-items: center; | |
| padding: 3px 9px; | |
| border-radius: 999px; | |
| font-size: 11px; | |
| font-weight: 700; | |
| background: var(--danger-soft); | |
| color: var(--danger); | |
| border: 1px solid var(--danger-border); | |
| } | |
| /* ========================================================================== | |
| Forms | |
| ========================================================================== */ | |
| .grid { | |
| display: grid; | |
| grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| gap: 18px; | |
| } | |
| @media (max-width: 920px) { | |
| .grid { grid-template-columns: minmax(0, 1fr); } | |
| } | |
| .formGrid { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 16px; | |
| margin-bottom: 4px; | |
| } | |
| .formGrid--paired .field--pair { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 16px; | |
| grid-column: 1 / -1; | |
| } | |
| @media (max-width: 520px) { | |
| .formGrid { grid-template-columns: 1fr; } | |
| .formGrid--paired .field--pair { grid-template-columns: 1fr; } | |
| } | |
| .field--full { grid-column: 1 / -1; } | |
| .field { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| font-size: 12px; | |
| font-weight: 600; | |
| color: var(--navy); | |
| letter-spacing: 0.01em; | |
| } | |
| .field input, | |
| .field select { | |
| height: 40px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius); | |
| padding: 0 14px; | |
| font: inherit; | |
| font-size: 14px; | |
| background: var(--surface); | |
| color: var(--ink); | |
| outline: none; | |
| transition: border-color var(--transition), box-shadow var(--transition); | |
| } | |
| .field select { | |
| width: 100%; | |
| cursor: pointer; | |
| } | |
| .field input:hover, | |
| .field select:hover { border-color: var(--border-hover); } | |
| .field input:focus, | |
| .field select:focus { | |
| border-color: var(--brand); | |
| box-shadow: 0 0 0 3px var(--brand-soft); | |
| } | |
| .field--invalid input, | |
| .field--invalid select { | |
| border-color: var(--danger); | |
| box-shadow: 0 0 0 3px var(--danger-soft); | |
| } | |
| .fieldError { | |
| margin: 0; | |
| font-size: 12px; | |
| font-weight: 600; | |
| color: var(--danger); | |
| } | |
| .formActions { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 10px; | |
| margin-top: 20px; | |
| padding-top: 20px; | |
| border-top: 1px solid var(--border); | |
| } | |
| .formActions .adminBtn { width: 100%; min-height: 44px; } | |
| .formNote { | |
| margin: 0; | |
| font-size: 12px; | |
| color: var(--muted); | |
| line-height: 1.5; | |
| } | |
| .formAlert { | |
| margin: 0 0 16px; | |
| padding: 10px 14px; | |
| border-radius: var(--radius); | |
| font-size: 13px; | |
| line-height: 1.5; | |
| } | |
| .formAlert--warn { | |
| background: var(--warning-soft); | |
| border: 1px solid var(--warning-border); | |
| color: #92400E; | |
| } | |
| .formAlert--err { | |
| background: var(--danger-soft); | |
| border: 1px solid var(--danger-border); | |
| color: var(--danger); | |
| } | |
| .row { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 10px; | |
| align-items: center; | |
| } | |
| .row input { flex: 1 1 140px; min-width: 0; } | |
| .promoRow { | |
| display: grid; | |
| grid-template-columns: 1fr auto auto auto; | |
| gap: 10px; | |
| align-items: center; | |
| margin-bottom: 16px; | |
| } | |
| @media (max-width: 600px) { | |
| .promoRow { grid-template-columns: 1fr 1fr; } | |
| .promoRow .adminBtn { grid-column: 1 / -1; width: 100%; } | |
| } | |
| .barcodeRow { | |
| display: flex; | |
| gap: 8px; | |
| align-items: stretch; | |
| } | |
| .barcodeRow input { flex: 1 1 auto; min-width: 0; } | |
| .barcodeRow .adminBtn { flex: 0 0 auto; white-space: nowrap; } | |
| /* ========================================================================== | |
| Workspace Layouts | |
| ========================================================================== */ | |
| .adminWorkspace { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 24px; | |
| align-items: start; | |
| } | |
| .adminWorkspace__right { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 24px; | |
| min-width: 0; | |
| } | |
| @media (min-width: 1025px) { | |
| .adminWorkspace { | |
| grid-template-columns: minmax(0, 420px) minmax(0, 1fr); | |
| } | |
| .adminWorkspace__left .formGrid { | |
| grid-template-columns: 1fr; | |
| } | |
| } | |
| .adminWorkspace__inventory { min-width: 0; } | |
| /* ========================================================================== | |
| Inventory Product Cells | |
| ========================================================================== */ | |
| .invToolbar { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 10px; | |
| align-items: center; | |
| margin-bottom: 16px; | |
| } | |
| .invSearch { flex: 1 1 220px; min-width: 0; } | |
| .invSearch input { | |
| width: 100%; | |
| height: 38px; | |
| padding: 0 14px; | |
| border-radius: var(--radius); | |
| border: 1px solid var(--border); | |
| font: inherit; | |
| font-size: 13.5px; | |
| background: var(--surface); | |
| outline: none; | |
| } | |
| .invSearch input:focus { | |
| border-color: var(--brand); | |
| box-shadow: 0 0 0 3px var(--brand-soft); | |
| } | |
| .invProductCell { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| min-width: 0; | |
| } | |
| .invProductCell__thumb { | |
| flex: 0 0 38px; | |
| width: 38px; | |
| height: 38px; | |
| border-radius: var(--radius-sm); | |
| object-fit: cover; | |
| border: 1px solid var(--border); | |
| background: var(--surface-2); | |
| } | |
| .invProductCell__thumb--empty { | |
| display: block; | |
| background: var(--surface-2); | |
| } | |
| .invRowActions { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 5px; | |
| align-items: stretch; | |
| } | |
| .stockCell { font-weight: 700; } | |
| .stockCell--low { color: var(--warning); } | |
| .stockCell--out { color: var(--danger); font-weight: 800; } | |
| /* ========================================================================== | |
| Image Field | |
| ========================================================================== */ | |
| .imageField__row { | |
| display: flex; | |
| gap: 12px; | |
| align-items: flex-start; | |
| } | |
| .imageField__preview { | |
| flex: 0 0 68px; | |
| width: 68px; | |
| height: 68px; | |
| border-radius: var(--radius); | |
| border: 1px solid var(--border); | |
| background: var(--surface-2); | |
| overflow: hidden; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .imageField__img { | |
| width: 100%; | |
| height: 100%; | |
| object-fit: cover; | |
| } | |
| .imageField__placeholder { | |
| font-size: 10px; | |
| font-weight: 700; | |
| color: var(--subtle); | |
| text-align: center; | |
| padding: 6px; | |
| } | |
| .imageField__controls { | |
| flex: 1; | |
| min-width: 0; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| } | |
| /* ========================================================================== | |
| Discount List | |
| ========================================================================== */ | |
| .discountList { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| } | |
| .discountRow { | |
| display: flex; | |
| justify-content: space-between; | |
| gap: 12px; | |
| align-items: center; | |
| padding: 12px 16px; | |
| border-radius: var(--radius); | |
| border: 1px solid var(--border); | |
| background: var(--surface); | |
| font-size: 13.5px; | |
| } | |
| .discountRow .adminBtn { flex-shrink: 0; } | |
| /* ========================================================================== | |
| Scanner Camera | |
| ========================================================================== */ | |
| .scanCamera { | |
| margin-top: 12px; | |
| padding: 16px; | |
| border-radius: var(--radius-lg); | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| box-shadow: var(--shadow); | |
| } | |
| .scanCamera__toolbar { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| gap: 10px; | |
| margin-bottom: 12px; | |
| } | |
| .scanCamera__label { | |
| font-size: 13px; | |
| font-weight: 700; | |
| color: var(--navy); | |
| } | |
| .scanCamera__close { | |
| font-size: 12px; | |
| font-weight: 600; | |
| padding: 6px 12px; | |
| border-radius: var(--radius-sm); | |
| border: 1px solid var(--border); | |
| background: var(--surface-2); | |
| color: var(--muted); | |
| cursor: pointer; | |
| font-family: var(--font); | |
| transition: background var(--transition); | |
| } | |
| .scanCamera__close:hover { background: var(--surface-3); color: var(--ink); } | |
| .scanCamera__viewport { | |
| border-radius: var(--radius); | |
| overflow: hidden; | |
| min-height: 200px; | |
| background: #0a0a12; | |
| } | |
| .scanCamera__viewport video { | |
| width: 100% ; | |
| display: block; | |
| border-radius: var(--radius); | |
| } | |
| .scanCamera__hint { margin: 10px 0 0; font-size: 13px; color: var(--muted); } | |
| .scanCamera__err { margin: 10px 0 0; font-size: 13px; color: var(--danger); } | |
| /* ========================================================================== | |
| Modal | |
| ========================================================================== */ | |
| .adminModalBackdrop { | |
| position: fixed; | |
| inset: 0; | |
| z-index: 1000; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 20px; | |
| background: rgba(12, 26, 61, 0.50); | |
| backdrop-filter: blur(4px); | |
| } | |
| .adminModal { | |
| width: min(100%, 440px); | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-xl); | |
| box-shadow: var(--shadow-modal); | |
| overflow: hidden; | |
| } | |
| .adminModal--receipt { max-width: 460px; } | |
| .adminModal__header { | |
| display: flex; | |
| align-items: flex-start; | |
| justify-content: space-between; | |
| gap: 12px; | |
| padding: 22px 22px 0; | |
| } | |
| .adminModal__eyebrow { | |
| margin: 0; | |
| font-size: 10px; | |
| font-weight: 700; | |
| letter-spacing: 0.10em; | |
| text-transform: uppercase; | |
| color: var(--brand); | |
| } | |
| .adminModal__title { | |
| margin: 6px 0 0; | |
| font-family: var(--font-display); | |
| font-size: 1.15rem; | |
| font-weight: 700; | |
| color: var(--navy); | |
| line-height: 1.3; | |
| } | |
| .adminModal__meta { | |
| margin: 5px 0 0; | |
| font-size: 12px; | |
| color: var(--muted); | |
| } | |
| .adminModal__close { | |
| flex: 0 0 auto; | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 34px; | |
| min-width: 34px; | |
| height: 34px; | |
| min-height: 34px; | |
| padding: 0; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-sm); | |
| background: var(--surface-2); | |
| color: var(--muted); | |
| font-size: 1.2rem; | |
| line-height: 1; | |
| box-shadow: none; | |
| cursor: pointer; | |
| transition: background var(--transition), color var(--transition); | |
| } | |
| .adminModal__close:hover { | |
| background: var(--surface-3); | |
| color: var(--navy); | |
| } | |
| .adminModal__close span { display: block; line-height: 1; } | |
| .adminModal__body { padding: 18px 22px 8px; } | |
| .adminModal__current { | |
| margin: 0 0 14px; | |
| font-size: 14px; | |
| color: var(--muted); | |
| } | |
| .adminModal__field { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| margin-bottom: 14px; | |
| } | |
| .adminModal__field span { | |
| font-size: 12px; | |
| font-weight: 600; | |
| color: var(--navy); | |
| } | |
| .adminModal__input { | |
| height: 52px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius); | |
| padding: 12px 14px; | |
| font: inherit; | |
| font-size: 1.25rem; | |
| font-weight: 700; | |
| line-height: 1.4; | |
| text-align: center; | |
| background: var(--surface-2); | |
| color: var(--navy); | |
| outline: none; | |
| transition: border-color var(--transition), box-shadow var(--transition); | |
| } | |
| .adminModal__input:focus { | |
| border-color: var(--brand); | |
| box-shadow: 0 0 0 3px var(--brand-soft); | |
| } | |
| .adminModal__quick { | |
| display: grid; | |
| grid-template-columns: repeat(4, minmax(0, 1fr)); | |
| gap: 8px; | |
| } | |
| .adminModal__delta { margin: 14px 0 0; font-size: 13px; font-weight: 600; color: var(--muted); } | |
| .adminModal__delta--up { color: var(--success); } | |
| .adminModal__delta--down { color: var(--danger); } | |
| .adminModal__footer { | |
| display: flex; | |
| align-items: center; | |
| justify-content: flex-end; | |
| gap: 10px; | |
| padding: 16px 22px 20px; | |
| border-top: 1px solid var(--border); | |
| background: var(--surface-2); | |
| } | |
| .adminModal__footer .adminBtn { min-height: 42px; padding: 10px 20px; } | |
| /* Receipt Modal */ | |
| .receiptModal__meta { margin: 0 0 14px; font-size: 13px; color: var(--muted); } | |
| .receiptModal__lines { | |
| list-style: none; | |
| margin: 0 0 16px; | |
| padding: 0; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius); | |
| overflow: hidden; | |
| } | |
| .receiptModal__lines li { | |
| display: flex; | |
| justify-content: space-between; | |
| gap: 12px; | |
| padding: 10px 14px; | |
| font-size: 13.5px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .receiptModal__lines li:last-child { border-bottom: none; } | |
| .receiptModal__totals { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| font-size: 13.5px; | |
| } | |
| .receiptModal__totals > div { | |
| display: flex; | |
| justify-content: space-between; | |
| gap: 12px; | |
| } | |
| .receiptModal__grand { | |
| margin-top: 8px; | |
| padding-top: 10px; | |
| border-top: 2px solid var(--navy); | |
| font-weight: 700; | |
| font-size: 15px; | |
| color: var(--navy); | |
| } | |
| .receiptModal__email { margin: 12px 0 0; font-size: 13px; } | |
| /* ========================================================================== | |
| Order Actions & Misc | |
| ========================================================================== */ | |
| .orderActions { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 6px; | |
| } | |
| .topbar { | |
| display: flex; | |
| flex-wrap: wrap; | |
| justify-content: space-between; | |
| align-items: flex-start; | |
| gap: 16px; | |
| margin-bottom: 28px; | |
| padding-bottom: 20px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .topbarActions { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: 10px; | |
| } | |
| .title { | |
| margin: 0; | |
| font-family: var(--font-display); | |
| font-size: clamp(1.4rem, 4vw, 1.875rem); | |
| font-weight: 700; | |
| color: var(--navy); | |
| letter-spacing: -0.02em; | |
| } | |
| .subtitle { | |
| margin: 8px 0 0; | |
| color: var(--muted); | |
| font-size: 14px; | |
| line-height: 1.55; | |
| max-width: 52ch; | |
| } | |
| .container { | |
| max-width: 1200px; | |
| margin: 0 auto; | |
| padding: 24px 20px 56px; | |
| } | |
| .itemActions { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| .itemActions button { | |
| height: 36px; | |
| padding: 0 14px; | |
| font-size: 12.5px; | |
| } | |
| /* ========================================================================== | |
| Item List (legacy) | |
| ========================================================================== */ | |
| .list { display: grid; gap: 10px; } | |
| .item { | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-lg); | |
| padding: 14px 18px; | |
| display: flex; | |
| flex-wrap: wrap; | |
| justify-content: space-between; | |
| align-items: center; | |
| gap: 12px; | |
| background: var(--surface); | |
| transition: box-shadow var(--transition); | |
| } | |
| .item:hover { box-shadow: var(--shadow-sm); } | |
| .item strong { font-size: 14.5px; color: var(--ink); } | |
| .muted { color: var(--muted); font-size: 13px; } | |
| .status { | |
| margin-top: 18px; | |
| padding: 14px 16px; | |
| border-radius: var(--radius); | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| font-size: 13.5px; | |
| color: var(--ink); | |
| box-shadow: var(--shadow-sm); | |
| } | |
| /* ========================================================================== | |
| Utilities & Misc | |
| ========================================================================== */ | |
| .mono { | |
| font-family: ui-monospace, "SF Mono", Consolas, monospace; | |
| font-size: 12px; | |
| } | |
| .textWarn { color: var(--warning); } | |
| .textDanger { color: var(--danger); } | |
| .emptyHint { | |
| margin: 0; | |
| color: var(--muted); | |
| font-size: 14px; | |
| } | |
| .adminEmptyHint { | |
| margin: 0 0 24px; | |
| padding: 24px; | |
| border: 1.5px dashed var(--border); | |
| border-radius: var(--radius-lg); | |
| text-align: center; | |
| color: var(--muted); | |
| font-size: 14px; | |
| } | |
| .profitHint { | |
| margin: 12px 0 0; | |
| font-size: 14px; | |
| color: var(--muted); | |
| } | |
| .srOnly { | |
| position: absolute; | |
| width: 1px; | |
| height: 1px; | |
| padding: 0; | |
| margin: -1px; | |
| overflow: hidden; | |
| clip: rect(0, 0, 0, 0); | |
| white-space: nowrap; | |
| border: 0; | |
| } | |
| /* ========================================================================== | |
| Alert Banner | |
| ========================================================================== */ | |
| .alertBanner { | |
| margin: 0 0 22px; | |
| padding: 14px 18px; | |
| border-radius: var(--radius-lg); | |
| background: var(--warning-soft); | |
| border: 1px solid var(--warning-border); | |
| font-size: 13.5px; | |
| line-height: 1.5; | |
| color: #92400E; | |
| } | |
| /* ========================================================================== | |
| Toast | |
| ========================================================================== */ | |
| .adminToast { | |
| position: fixed; | |
| bottom: 24px; | |
| right: 24px; | |
| max-width: 360px; | |
| padding: 14px 18px; | |
| border-radius: var(--radius-lg); | |
| background: var(--navy); | |
| border: 1px solid rgba(255, 255, 255, 0.10); | |
| box-shadow: var(--shadow-lg); | |
| font-size: 13.5px; | |
| color: rgba(255, 255, 255, 0.90); | |
| z-index: 9000; | |
| } | |
| /* ========================================================================== | |
| Login Page | |
| ========================================================================== */ | |
| .loginPage { | |
| min-height: 100dvh; | |
| display: grid; | |
| place-items: center; | |
| padding: 24px; | |
| background: linear-gradient(165deg, var(--navy) 0%, var(--navy-mid) 60%, #1e3a8a 100%); | |
| } | |
| .loginCard { | |
| width: 100%; | |
| max-width: 420px; | |
| background: var(--surface); | |
| border-radius: var(--radius-xl); | |
| padding: 36px 32px 32px; | |
| box-shadow: var(--shadow-modal); | |
| border: 1px solid rgba(255, 255, 255, 0.06); | |
| } | |
| .loginTitle { | |
| margin: 0; | |
| font-family: var(--font-display); | |
| font-size: 1.625rem; | |
| font-weight: 800; | |
| color: var(--navy); | |
| letter-spacing: -0.02em; | |
| } | |
| .loginHint { | |
| margin: 8px 0 24px; | |
| color: var(--muted); | |
| font-size: 14px; | |
| line-height: 1.5; | |
| } | |
| .loginForm { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 16px; | |
| } | |
| .loginLabel { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 7px; | |
| font-size: 12px; | |
| font-weight: 600; | |
| color: var(--navy); | |
| letter-spacing: 0.01em; | |
| } | |
| .loginInput { | |
| width: 100%; | |
| height: 44px; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius); | |
| padding: 0 14px; | |
| font-family: var(--font); | |
| font-size: 14px; | |
| background: var(--surface-2); | |
| color: var(--ink); | |
| outline: none; | |
| transition: border-color var(--transition), box-shadow var(--transition); | |
| } | |
| .loginInput:focus { | |
| border-color: var(--brand); | |
| box-shadow: 0 0 0 3px var(--brand-soft); | |
| background: var(--surface); | |
| } | |
| .loginError { | |
| margin: 0; | |
| color: var(--danger); | |
| font-size: 13px; | |
| font-weight: 500; | |
| } | |
| .loginSubmit { | |
| height: 48px; | |
| font-family: var(--font-display); | |
| font-size: 15px; | |
| font-weight: 700; | |
| margin-top: 4px; | |
| background: var(--brand); | |
| color: #fff; | |
| border: none; | |
| border-radius: var(--radius); | |
| cursor: pointer; | |
| box-shadow: var(--shadow-brand); | |
| transition: background var(--transition), box-shadow var(--transition); | |
| } | |
| .loginSubmit:hover:not(:disabled) { | |
| background: var(--brand-hover); | |
| box-shadow: 0 6px 20px rgba(0, 82, 255, 0.40); | |
| } | |
| .loginDevHint { | |
| margin: 20px 0 0; | |
| font-size: 12px; | |
| color: var(--subtle); | |
| line-height: 1.5; | |
| } | |
| /* ========================================================================== | |
| Admin Home (marketing/root page) | |
| ========================================================================== */ | |
| .adminHome { | |
| min-height: 100dvh; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 40px 24px; | |
| text-align: center; | |
| background: var(--bg); | |
| } | |
| .adminHome__tagline { | |
| margin: 20px 0 0; | |
| font-size: 11px; | |
| font-weight: 700; | |
| letter-spacing: 0.10em; | |
| text-transform: uppercase; | |
| color: var(--brand); | |
| } | |
| .adminHome__title { | |
| margin: 12px 0 0; | |
| font-family: var(--font-display); | |
| font-size: 2.25rem; | |
| font-weight: 800; | |
| color: var(--navy); | |
| letter-spacing: -0.03em; | |
| line-height: 1.15; | |
| } | |
| .adminHome__text { | |
| margin: 14px 0 28px; | |
| color: var(--muted); | |
| max-width: 380px; | |
| line-height: 1.6; | |
| font-size: 15px; | |
| } | |
| .adminHome__link { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| min-height: 48px; | |
| padding: 0 32px; | |
| border-radius: var(--radius); | |
| background: var(--brand); | |
| color: #fff ; | |
| text-decoration: none; | |
| font-weight: 700; | |
| font-family: var(--font-display); | |
| font-size: 15px; | |
| box-shadow: var(--shadow-brand); | |
| transition: background var(--transition), box-shadow var(--transition); | |
| } | |
| .adminHome__link:hover { | |
| background: var(--brand-hover); | |
| box-shadow: 0 6px 20px rgba(0, 82, 255, 0.40); | |
| text-decoration: none; | |
| } | |
| /* ========================================================================== | |
| Responsive Mobile Cards (for inventory on small screens) | |
| ========================================================================== */ | |
| .adminDesktopTable { display: block; } | |
| .adminMobileCards { display: none; } | |
| @media (max-width: 900px) { | |
| .adminDesktopTable { display: none; } | |
| .adminMobileCards { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 14px; | |
| margin-bottom: 24px; | |
| } | |
| .adminInvCard { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-lg); | |
| padding: 18px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 14px; | |
| box-shadow: var(--shadow-sm); | |
| } | |
| .adminInvCard--hot { border-color: var(--danger-border); } | |
| .adminInvCard__header { | |
| display: flex; | |
| gap: 12px; | |
| align-items: center; | |
| } | |
| .adminInvCard__thumb { | |
| width: 48px; | |
| height: 48px; | |
| border-radius: var(--radius-sm); | |
| object-fit: cover; | |
| border: 1px solid var(--border); | |
| background: var(--surface-2); | |
| flex-shrink: 0; | |
| } | |
| .adminInvCard__thumb--empty { | |
| display: block; | |
| background: var(--surface-2); | |
| } | |
| .adminInvCard__titleSection { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 2px; | |
| } | |
| .adminInvCard__name { | |
| margin: 0; | |
| font-size: 14.5px; | |
| font-weight: 700; | |
| color: var(--ink); | |
| } | |
| .adminInvCard__sub { font-size: 12px; color: var(--muted); } | |
| .adminInvCard__brand { font-size: 11px; font-weight: 600; color: var(--brand); } | |
| .adminInvCard__details { | |
| display: grid; | |
| grid-template-columns: repeat(2, 1fr); | |
| gap: 8px 12px; | |
| padding: 12px; | |
| background: var(--surface-2); | |
| border-radius: var(--radius); | |
| font-size: 13px; | |
| } | |
| .adminInvCard__row { | |
| display: flex; | |
| justify-content: space-between; | |
| gap: 6px; | |
| } | |
| .adminInvCard__stock { | |
| display: grid; | |
| grid-template-columns: repeat(3, 1fr); | |
| gap: 10px; | |
| text-align: center; | |
| border-top: 1px solid var(--border); | |
| padding-top: 14px; | |
| } | |
| .adminInvCard__stockItem { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 4px; | |
| } | |
| .adminInvCard__stockLabel { | |
| font-size: 10px; | |
| font-weight: 700; | |
| text-transform: uppercase; | |
| color: var(--muted); | |
| letter-spacing: 0.05em; | |
| } | |
| .adminInvCard__stockValue { | |
| font-size: 16px; | |
| font-weight: 800; | |
| color: var(--navy); | |
| } | |
| .adminInvCard__actions { | |
| display: grid; | |
| grid-template-columns: repeat(3, 1fr); | |
| gap: 8px; | |
| border-top: 1px solid var(--border); | |
| padding-top: 14px; | |
| } | |
| .adminInvCard__actions .adminBtn { | |
| width: 100%; | |
| padding: 8px 6px; | |
| font-size: 11px; | |
| min-height: 32px; | |
| } | |
| } | |
| /* ========================================================================== | |
| ========================================================================== */ | |
| @media print { | |
| body * { visibility: hidden; } | |
| #barcode-print-area, #barcode-print-area * { visibility: visible; } | |
| #barcode-print-area { | |
| position: fixed; | |
| left: 0; | |
| top: 0; | |
| width: 100%; | |
| max-width: 100%; | |
| margin: 0; | |
| border: none ; | |
| padding: 0 ; | |
| display: flex ; | |
| flex-direction: column ; | |
| align-items: center ; | |
| justify-content: center ; | |
| height: auto ; | |
| background: white ; | |
| color: black ; | |
| } | |
| @page { size: auto; margin: 0; } | |
| } | |
| /* ========================================================================== | |
| OPERATIONS HQ LANDING PAGE (REFERENCE DESIGN MATCH) | |
| ========================================================================== */ | |
| .opsHqPage { | |
| min-height: 100vh; | |
| display: flex; | |
| background: #FFFFFF; | |
| color: #0F172A; | |
| font-family: var(--font); | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .opsHqPage__hexBg { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| pointer-events: none; | |
| opacity: 0.75; | |
| } | |
| .opsHqPage__brandPane { | |
| flex: 1.25; | |
| background: linear-gradient(135deg, #F5F8FF 0%, #E8EFFF 100%); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| position: relative; | |
| padding: 48px; | |
| border-right: 1px solid rgba(0, 82, 255, 0.08); | |
| } | |
| .opsHqPage__brandContent { | |
| max-width: 440px; | |
| position: relative; | |
| z-index: 2; | |
| text-align: left; | |
| } | |
| .opsHqPage__brandTagline { | |
| font-family: var(--font-display); | |
| font-size: 11px; | |
| font-weight: 800; | |
| letter-spacing: 0.15em; | |
| color: #0052FF; | |
| text-transform: uppercase; | |
| margin-top: 12px; | |
| display: inline-block; | |
| } | |
| .opsHqPage__brandTitle { | |
| font-family: var(--font-display); | |
| font-size: clamp(2.4rem, 4.5vw, 3.4rem); | |
| font-weight: 800; | |
| color: #0A1931; | |
| letter-spacing: -0.02em; | |
| margin: 16px 0 8px; | |
| } | |
| .opsHqPage__brandSub { | |
| font-size: 15px; | |
| color: #475569; | |
| line-height: 1.6; | |
| margin-bottom: 32px; | |
| } | |
| .opsHqPage__artWrapper { | |
| margin-top: 40px; | |
| background: rgba(255, 255, 255, 0.6); | |
| border: 1px solid rgba(0, 82, 255, 0.06); | |
| border-radius: 20px; | |
| padding: 24px; | |
| box-shadow: 0 10px 30px rgba(0, 82, 255, 0.03); | |
| } | |
| .opsHqPage__formPane { | |
| flex: 1; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 48px; | |
| background: #FFFFFF; | |
| position: relative; | |
| z-index: 5; | |
| } | |
| .opsHqPage__formWrapper { | |
| width: 100%; | |
| max-width: 380px; | |
| } | |
| .opsHqPage__formHeader { | |
| margin-bottom: 32px; | |
| text-align: left; | |
| } | |
| .opsHqPage__formTitle { | |
| font-family: var(--font-display); | |
| font-size: 1.85rem; | |
| font-weight: 800; | |
| color: #0A1931; | |
| margin-bottom: 6px; | |
| } | |
| .opsHqPage__formSub { | |
| font-size: 14px; | |
| color: #64748B; | |
| } | |
| .opsHqForm { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 20px; | |
| } | |
| .opsHqForm__grid { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 16px; | |
| } | |
| .opsHqField { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| text-align: left; | |
| } | |
| .opsHqField label { | |
| font-size: 11px; | |
| font-weight: 700; | |
| color: #475569; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .opsHqInput { | |
| width: 100%; | |
| height: 46px; | |
| padding: 0 14px; | |
| border-radius: 10px; | |
| border: 1px solid #E2E8F0; | |
| font-size: 14.5px; | |
| font-family: var(--font); | |
| background: #FAFCFF; | |
| color: #0F172A; | |
| outline: none; | |
| transition: all 150ms ease; | |
| } | |
| .opsHqInput:focus { | |
| border-color: #0052FF; | |
| background: #FFFFFF; | |
| box-shadow: 0 0 0 3px rgba(0, 82, 255, 0.12); | |
| } | |
| .opsHqError { | |
| font-size: 12.5px; | |
| color: #EF4444; | |
| margin: 0; | |
| font-weight: 600; | |
| } | |
| .opsHqSubmitBtn { | |
| height: 46px; | |
| background: #0052FF; | |
| color: #FFFFFF; | |
| border: 1px solid #0052FF; | |
| border-radius: 12px; | |
| font-family: var(--font); | |
| font-weight: 800; | |
| font-size: 14.5px; | |
| cursor: pointer; | |
| box-shadow: 0 8px 24px rgba(0, 82, 255, 0.35); | |
| transition: all 180ms ease; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .opsHqSubmitBtn:hover:not(:disabled) { | |
| background: #0040CC; | |
| transform: translateY(-2px); | |
| box-shadow: 0 12px 28px rgba(0, 82, 255, 0.45); | |
| } | |
| .opsHqSubmitBtn:disabled { | |
| opacity: 0.6; | |
| cursor: not-allowed; | |
| } | |
| /* Glassmorphic 3D Showcase */ | |
| .opsHqShowcase { | |
| max-width: 860px; | |
| margin: 20px auto 0; | |
| } | |
| .opsHqShowcase__card { | |
| background: rgba(255, 255, 255, 0.7); | |
| backdrop-filter: blur(20px); | |
| border: 1px solid rgba(255, 255, 255, 0.8); | |
| border-radius: 24px; | |
| box-shadow: 0 25px 60px -10px rgba(15, 23, 42, 0.12); | |
| overflow: hidden; | |
| } | |
| .opsHqShowcase__bar { | |
| background: rgba(248, 250, 252, 0.8); | |
| padding: 10px 16px; | |
| border-bottom: 1px solid rgba(15, 23, 42, 0.06); | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| } | |
| .opsHqShowcase__body { | |
| padding: 20px; | |
| } | |
| @media (max-width: 900px) { | |
| .opsHqPage { | |
| flex-direction: column; | |
| min-height: 100dvh; | |
| height: auto; | |
| overflow-y: auto; | |
| background: linear-gradient(135deg, #F8FAFC 0%, #EFF6FF 50%, #F1F5F9 100%); | |
| justify-content: center; | |
| align-items: center; | |
| padding: 24px 16px; | |
| } | |
| .opsHqPage__hexBg { display: none; } | |
| .opsHqPage__brandPane { | |
| display: none; | |
| } | |
| .opsHqPage__formPane { | |
| flex: none; | |
| width: 100%; | |
| max-width: 420px; | |
| background: rgba(255, 255, 255, 0.95); | |
| backdrop-filter: blur(20px); | |
| border: 1px solid rgba(226, 232, 240, 0.9); | |
| border-radius: 24px; | |
| padding: 32px 24px; | |
| box-shadow: 0 20px 50px -10px rgba(0, 82, 255, 0.12), 0 10px 20px -5px rgba(15, 23, 42, 0.04); | |
| } | |
| .opsHqPage__formWrapper { | |
| max-width: 100%; | |
| width: 100%; | |
| } | |
| .opsHqPage__formHeader { | |
| text-align: center; | |
| margin-bottom: 24px; | |
| } | |
| .opsHqPage__formTitle { | |
| font-size: 1.75rem; | |
| color: #0F172A; | |
| font-weight: 800; | |
| } | |
| .opsHqPage__formSub { | |
| color: #64748B; | |
| font-size: 14px; | |
| } | |
| .opsHqForm__grid { | |
| width: 100%; | |
| } | |
| .opsHqField label { | |
| color: #334155; | |
| font-weight: 600; | |
| font-size: 13.5px; | |
| } | |
| .opsHqInput { | |
| height: 48px; | |
| font-size: 15px; | |
| background: #FFFFFF; | |
| border: 1.5px solid #CBD5E1; | |
| color: #0F172A; | |
| border-radius: 12px; | |
| } | |
| .opsHqInput::placeholder { | |
| color: #94A3B8; | |
| } | |
| .opsHqInput:focus { | |
| background: #FFFFFF; | |
| border-color: #0052FF; | |
| box-shadow: 0 0 0 3px rgba(0, 82, 255, 0.15); | |
| } | |
| .opsHqSubmitBtn { | |
| height: 48px; | |
| font-size: 15px; | |
| width: 100%; | |
| background: linear-gradient(135deg, #0052FF 0%, #0040D8 100%); | |
| color: #FFFFFF; | |
| border: none; | |
| border-radius: 12px; | |
| font-weight: 700; | |
| box-shadow: 0 8px 20px -4px rgba(0, 82, 255, 0.35); | |
| } | |
| } | |
| .adminStorePick { | |
| display: flex; | |
| align-items: center; | |
| } | |