feat: scaffold Antonym fashion store

Anonymous Bitcoin-only fashion e-commerce with:
- Vue 3 + Tailwind 4 frontend with glassmorphism dark/light design system
- Express 5 + SQLite backend with BTCPay Server integration
- Nostr identity (NIP-07/keypair) for anonymous purchase tracking
- ChaCha20-Poly1305 encrypted shipping addresses
- Admin panel with order/product/stock management
- SVG logo splash animation with clip-path reveal
- 5 seeded products across 4 categories

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-17 00:23:21 +00:00
commit 54500a68e6
64 changed files with 6983 additions and 0 deletions

179
src/style.css Normal file
View File

@@ -0,0 +1,179 @@
@import "tailwindcss";
@theme {
--font-sans: "Inter", system-ui, -apple-system, sans-serif;
--font-display: "Inter", system-ui, -apple-system, sans-serif;
}
:root {
--bg-primary: #0A0A0A;
--bg-secondary: #1A1A1A;
--bg-tertiary: #141414;
--accent: #F7931A;
--accent-hover: #e8841a;
--text-primary: rgba(255, 255, 255, 0.9);
--text-secondary: rgba(255, 255, 255, 0.7);
--text-muted: rgba(255, 255, 255, 0.6);
--text-placeholder: rgba(255, 255, 255, 0.25);
--text-interactive: rgba(255, 255, 255, 0.7);
--success: #4ade80;
--error: #ef4444;
--warning: #f59e0b;
--info: #3b82f6;
--glass-bg: rgba(0, 0, 0, 0.5);
--glass-bg-strong: rgba(0, 0, 0, 0.75);
--glass-bg-darker: rgba(0, 0, 0, 0.6);
--glass-border: rgba(255, 255, 255, 0.18);
--glass-highlight: rgba(255, 255, 255, 0.22);
--glass-blur: 18px;
--glass-blur-strong: 24px;
--radius-sm: 8px;
--radius-md: 12px;
--radius-lg: 16px;
--radius-xl: 24px;
--transition-fast: 150ms ease;
--transition-normal: 250ms ease;
--transition-slow: 400ms ease;
}
[data-theme="light"] {
--bg-primary: #FAFAFA;
--bg-secondary: #F0F0F0;
--bg-tertiary: #F5F5F5;
--text-primary: #0A0A0A;
--text-secondary: rgba(0, 0, 0, 0.7);
--text-muted: rgba(0, 0, 0, 0.5);
--text-placeholder: rgba(0, 0, 0, 0.25);
--text-interactive: rgba(0, 0, 0, 0.7);
--glass-bg: rgba(255, 255, 255, 0.5);
--glass-bg-strong: rgba(255, 255, 255, 0.65);
--glass-bg-darker: rgba(255, 255, 255, 0.55);
--glass-border: rgba(0, 0, 0, 0.12);
--glass-highlight: rgba(0, 0, 0, 0.08);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background-color: var(--bg-primary);
color: var(--text-primary);
font-family: var(--font-sans);
line-height: 1.6;
min-height: 100vh;
transition: background-color var(--transition-normal), color var(--transition-normal);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.glass {
background: var(--glass-bg);
backdrop-filter: blur(var(--glass-blur));
-webkit-backdrop-filter: blur(var(--glass-blur));
border: 1px solid var(--glass-border);
border-radius: var(--radius-md);
}
.glass-strong {
background: var(--glass-bg-strong);
backdrop-filter: blur(var(--glass-blur-strong));
-webkit-backdrop-filter: blur(var(--glass-blur-strong));
border: 1px solid var(--glass-border);
border-radius: var(--radius-md);
}
.glass-card {
background: var(--glass-bg);
backdrop-filter: blur(var(--glass-blur));
-webkit-backdrop-filter: blur(var(--glass-blur));
border: 1px solid var(--glass-border);
border-radius: var(--radius-lg);
padding: 1.5rem;
transition: border-color var(--transition-fast), transform var(--transition-fast);
}
.glass-card:hover {
border-color: var(--glass-highlight);
}
.glass-input {
background: var(--glass-bg-darker);
backdrop-filter: blur(var(--glass-blur));
-webkit-backdrop-filter: blur(var(--glass-blur));
border: 1px solid var(--glass-border);
border-radius: var(--radius-sm);
padding: 0.625rem 0.875rem;
color: var(--text-primary);
font-size: 0.875rem;
transition: border-color var(--transition-fast);
outline: none;
width: 100%;
}
.glass-input::placeholder {
color: var(--text-placeholder);
}
.glass-input:focus {
border-color: var(--accent);
}
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
padding: 0.625rem 1.25rem;
border-radius: var(--radius-sm);
font-size: 0.875rem;
font-weight: 500;
cursor: pointer;
border: none;
transition: all var(--transition-fast);
text-decoration: none;
}
.btn-accent {
background: var(--accent);
color: #000;
}
.btn-accent:hover {
background: var(--accent-hover);
}
.btn-ghost {
background: transparent;
color: var(--text-secondary);
border: 1px solid var(--glass-border);
}
.btn-ghost:hover {
background: var(--glass-bg);
color: var(--text-primary);
}
.btn-danger {
background: var(--error);
color: #fff;
}
.btn-danger:hover {
opacity: 0.9;
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}