@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap"); @import "tailwindcss"; /* ═══════════════════════════════════════════════ ArchStore — Premium Design System Dark & Light theme with CSS custom properties ═══════════════════════════════════════════════ */ :root { /* Default: Dark Theme */ --bg-base: #080c14; --bg-primary: #0e1420; --bg-secondary: #151d30; --bg-tertiary: #1b263f; --bg-card: #0e1420; --bg-card-hover: #151d30; --bg-elevated: #1b263f; --bg-input: #080c14; --bg-sidebar: rgba(14, 20, 32, 0.9); --bg-overlay: rgba(0, 0, 0, 0.7); --topbar-bg: rgba(14, 20, 32, 0.85); --border-primary: #1b263f; --border-secondary: #2c3b5e; --text-primary: #f8fafc; --text-secondary: #cbd5e1; --text-tertiary: #94a3b8; --text-inverse: #0f172a; --accent-h: 199; --accent-s: 89%; --accent-l: 48%; --accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); --accent-hover: hsl(var(--accent-h), var(--accent-s), 56%); --accent-muted: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 0.12); --accent-glow: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 0.25); --green: #10b981; --green-muted: rgba(16, 185, 129, 0.15); --amber: #f59e0b; --amber-muted: rgba(245, 158, 11, 0.15); --red: #ef4444; --red-muted: rgba(239, 68, 68, 0.15); --blue: #3b82f6; --blue-muted: rgba(59, 130, 246, 0.15); --violet: #8b5cf6; --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 20px -4px rgba(0, 0, 0, 0.4); --shadow-lg: 0 12px 40px -8px rgba(0, 0, 0, 0.5); --shadow-glow: 0 0 30px -5px var(--accent-glow); --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px; --radius-xl: 24px; --radius-full: 9999px; --font-sans: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, monospace; --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-normal: 250ms cubic-bezier(0.4, 0, 0.2, 1); --transition-spring: 350ms cubic-bezier(0.16, 1, 0.3, 1); } .light { /* Light Theme */ --bg-base: #f8fafc; --bg-primary: #f1f5f9; --bg-secondary: #ffffff; --bg-tertiary: #f8fafc; --bg-card: #ffffff; --bg-card-hover: #f8fafc; --bg-elevated: #ffffff; --bg-input: #f1f5f9; --bg-sidebar: rgba(255, 255, 255, 0.9); --bg-overlay: rgba(15, 23, 42, 0.3); --topbar-bg: rgba(255, 255, 255, 0.85); --border-primary: #e2e8f0; --border-secondary: #cbd5e1; --text-primary: #0f172a; --text-secondary: #334155; --text-tertiary: #64748b; --text-inverse: #f8fafc; --accent: hsl(var(--accent-h), var(--accent-s), 42%); --accent-hover: hsl(var(--accent-h), var(--accent-s), 35%); --accent-muted: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 0.08); --accent-glow: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 0.15); --green-muted: rgba(16, 185, 129, 0.08); --amber-muted: rgba(245, 158, 11, 0.08); --red-muted: rgba(239, 68, 68, 0.06); --blue-muted: rgba(59, 130, 246, 0.08); --shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.05); --shadow-md: 0 4px 20px -4px rgba(15, 23, 42, 0.08); --shadow-lg: 0 12px 40px -8px rgba(15, 23, 42, 0.1); --shadow-glow: 0 0 30px -5px var(--accent-glow); } @theme { --color-bg-base: var(--bg-base); --color-bg-primary: var(--bg-primary); --color-bg-secondary: var(--bg-secondary); --color-bg-tertiary: var(--bg-tertiary); --color-bg-card: var(--bg-card); --color-bg-card-hover: var(--bg-card-hover); --color-bg-elevated: var(--bg-elevated); --color-bg-input: var(--bg-input); --color-bg-sidebar: var(--bg-sidebar); --color-bg-overlay: var(--bg-overlay); --color-border-primary: var(--border-primary); --color-border-secondary: var(--border-secondary); --color-text-primary: var(--text-primary); --color-text-secondary: var(--text-secondary); --color-text-tertiary: var(--text-tertiary); --color-text-inverse: var(--text-inverse); --color-accent: var(--accent); --color-accent-hover: var(--accent-hover); --color-accent-muted: var(--accent-muted); --color-accent-glow: var(--accent-glow); --color-green: var(--green); --color-green-muted: var(--green-muted); --color-amber: var(--amber); --color-amber-muted: var(--amber-muted); --color-red: var(--red); --color-red-muted: var(--red-muted); --color-blue: var(--blue); --color-blue-muted: var(--blue-muted); --color-violet: var(--violet); --font-sans: var(--font-sans); --font-mono: var(--font-mono); } /* ═══════════════════════════════════════════════ Base Resets ═══════════════════════════════════════════════ */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--font-sans); background-color: var(--bg-base); color: var(--text-primary); line-height: 1.6; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transition: background-color var(--transition-normal), color var(--transition-normal); } /* Custom Scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--border-primary); border-radius: var(--radius-full); } ::-webkit-scrollbar-thumb:hover { background: var(--border-secondary); } /* ═══════════════════════════════════════════════ App Structure ═══════════════════════════════════════════════ */ .app-layout { display: flex; min-height: 100vh; } .sidebar { position: fixed; left: 0; top: 0; bottom: 0; width: 280px; z-index: 50; display: flex; flex-direction: column; padding: 32px 24px; background: var(--bg-sidebar); border-right: 1px solid var(--border-primary); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); transition: transform var(--transition-spring), background var(--transition-normal); } .main-content { margin-left: 280px; flex: 1; min-height: 100vh; padding: 40px 48px; background-color: var(--bg-base); transition: margin-left var(--transition-spring); } @media (max-width: 1024px) { .sidebar { transform: translateX(-100%); } .sidebar.open { transform: translateX(0); } .main-content { margin-left: 0; padding: 24px 20px; } } /* ═══════════════════════════════════════════════ Sidebar Items ═══════════════════════════════════════════════ */ .nav-link { display: flex; align-items: center; gap: 12px; padding: 10px 16px; border-radius: var(--radius-md); color: var(--text-secondary); text-decoration: none; font-size: 0.92rem; font-weight: 500; transition: all var(--transition-fast); } .nav-link:hover { background: var(--accent-muted); color: var(--text-primary); } .nav-link.active { background: var(--accent-muted); color: var(--accent); font-weight: 600; } /* ═══════════════════════════════════════════════ Cards & Elements ═══════════════════════════════════════════════ */ .card { background: var(--bg-card); border: 1px solid var(--border-primary); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); transition: transform var(--transition-spring), box-shadow var(--transition-spring), background var(--transition-normal), border-color var(--transition-fast); } .card-interactive { cursor: pointer; } .card-interactive:hover { transform: translateY(-2px); background: var(--bg-card-hover); border-color: var(--border-secondary); box-shadow: var(--shadow-md); } .badge { display: inline-flex; align-items: center; padding: 3px 10px; border-radius: var(--radius-full); font-size: 0.7rem; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; } .badge-pacman { background: var(--accent-muted); color: var(--accent); border: 1px solid rgba(2, 132, 199, 0.25); } .badge-aur { background: var(--amber-muted); color: var(--amber); border: 1px solid rgba(245, 158, 11, 0.25); } .badge-installed { background: var(--green-muted); color: var(--green); border: 1px solid rgba(16, 185, 129, 0.25); } /* Buttons */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 20px; border-radius: var(--radius-md); font-size: 0.88rem; font-weight: 600; cursor: pointer; border: none; transition: all var(--transition-fast); } .btn:disabled { opacity: 0.6; cursor: not-allowed; } .btn-primary { background: var(--accent); color: #ffffff; } .btn-primary:hover:not(:disabled) { background: var(--accent-hover); } .btn-secondary { background: var(--bg-secondary); color: var(--text-primary); border: 1px solid var(--border-primary); } .btn-secondary:hover:not(:disabled) { background: var(--bg-tertiary); border-color: var(--border-secondary); } .btn-danger { background: var(--red-muted); color: var(--red); border: 1px solid rgba(239, 68, 68, 0.3); } .btn-danger:hover:not(:disabled) { background: rgba(239, 68, 68, 0.25); } .btn-ghost { background: transparent; color: var(--text-secondary); } .btn-ghost:hover:not(:disabled) { background: var(--bg-secondary); color: var(--text-primary); } /* Inputs */ .input { width: 100%; padding: 10px 16px; background: var(--bg-input); border: 1px solid var(--border-primary); border-radius: var(--radius-md); color: var(--text-primary); font-family: var(--font-sans); font-size: 0.9rem; outline: none; transition: all var(--transition-fast); } .input::placeholder { color: var(--text-tertiary); } .input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-glow); } /* Typography Helpers */ .page-title { font-size: 1.8rem; font-weight: 800; letter-spacing: -0.02em; color: var(--text-primary); } .page-subtitle { font-size: 0.95rem; color: var(--text-tertiary); } /* Layout Grids */ .pkg-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; } @media (max-width: 640px) { .pkg-grid { grid-template-columns: 1fr; } } .cat-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px; } /* Shimmer Loader */ .shimmer { background: linear-gradient(90deg, var(--bg-secondary) 25%, var(--bg-tertiary) 50%, var(--bg-secondary) 75%); background-size: 200% 100%; animation: shimmer-anim 1.5s infinite; border-radius: var(--radius-md); } @keyframes shimmer-anim { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } .spinner { width: 28px; height: 28px; border: 3px solid var(--border-primary); border-top-color: var(--accent); border-radius: 50%; animation: spin-anim 0.8s linear infinite; } @keyframes spin-anim { to { transform: rotate(360deg); } } /* Theme Toggle Button */ .theme-toggle { width: 40px; height: 40px; border-radius: var(--radius-md); background: var(--bg-secondary); border: 1px solid var(--border-primary); cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--text-secondary); transition: all var(--transition-fast); } .theme-toggle:hover { border-color: var(--border-secondary); color: var(--text-primary); background: var(--bg-tertiary); }