Files
immich-folio/app/tokens.css
ralksta a0ee0ff433 chore: production readiness audit
- Move plans/ to dev-docs/, delete unused scaffold SVGs
- Create .dockerignore, rename container to immich-folio
- Extract BackLink component and toPhotoItems() helper in page.tsx
- Add keyboard accessibility (role=button, tabIndex, onKeyDown) to PhotoGrid
- Add aria-label to Lightbox EXIF toggle
- Fix React lint: replace setState-in-effect with useState initializer
- Add rate limiting to /api/auth (brute-force protection, 10 RPM)
- Add HSTS and X-DNS-Prefetch-Control security headers
- Add Secure flag to auth cookie in production
- New unit tests: rate-limit.test.ts (5), auth.test.ts (12)
- All 47 tests pass, 0 lint errors, build clean
2026-02-15 11:23:51 +01:00

87 lines
2.0 KiB
CSS

@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600&family=Playfair+Display:wght@400;500;600&family=EB+Garamond:ital,wght@0,400;1,400&display=swap');
/* ── Design Tokens (Studio Dark — Default) ───────── */
:root {
--bg-primary: #1a1a1a;
--bg-secondary: #141414;
--bg-card: #1e1e1e;
--bg-card-hover: #242424;
--bg-overlay: rgba(0, 0, 0, 0.98);
--text-primary: #f5f5f0;
--text-secondary: #a0a09a;
--text-muted: #706f6a;
--border-subtle: #2a2a28;
--border-hover: #3a3a38;
--accent: #e60012;
--accent-dim: rgba(230, 0, 18, 0.12);
--font-sans: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-serif: 'Playfair Display', Georgia, 'Times New Roman', serif;
--font-caption: 'EB Garamond', Georgia, serif;
--radius-sm: 0px;
--radius-md: 0px;
--radius-lg: 0px;
--transition-fast: 200ms ease;
--transition-normal: 400ms ease;
--transition-slow: 600ms ease;
--max-width: 1400px;
--header-height: 64px;
}
/* ── Light Theme (Studio Light) ──────────────────── */
[data-theme='light'] {
--bg-primary: #f5f5f0;
--bg-secondary: #eaeae5;
--bg-card: #ffffff;
--bg-card-hover: #f0f0eb;
--bg-overlay: rgba(245, 245, 240, 0.96);
--text-primary: #1a1a18;
--text-secondary: #5a5a55;
--text-muted: #8a8a85;
--border-subtle: #ddddd8;
--border-hover: #c5c5c0;
--accent: #c8000f;
--accent-dim: rgba(200, 0, 15, 0.08);
}
/* ── Reset ────────────────────────────────────────── */
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
font-family: var(--font-sans);
background: var(--bg-primary);
color: var(--text-primary);
min-height: 100vh;
line-height: 1.6;
}
a {
color: inherit;
text-decoration: none;
}
img {
display: block;
max-width: 100%;
}