Initial commit: Shelfless – alternative Audiobookshelf frontend
React + Vite + TypeScript SPA covering the full ABS feature set (library browsing, item detail, metadata/cover editing, podcasts, player with session sync, admin: users/libraries/scanner/server settings). Dev uses a dynamic CORS proxy; production is served by server/index.mjs (static + reverse proxy to ABS_URL). Includes systemd unit and installer under deploy/. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
53
tailwind.config.js
Normal file
53
tailwind.config.js
Normal file
@@ -0,0 +1,53 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
export default {
|
||||
content: ['./index.html', './src/**/*.{ts,tsx}'],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
bg: 'var(--bg)',
|
||||
surface: 'var(--surface)',
|
||||
'surface-2': 'var(--surface-2)',
|
||||
border: 'var(--border)',
|
||||
text: 'var(--text)',
|
||||
'text-muted': 'var(--text-muted)',
|
||||
accent: 'var(--accent)',
|
||||
'accent-soft': 'var(--accent-soft)',
|
||||
'on-accent': 'var(--on-accent)',
|
||||
destructive: 'var(--destructive)',
|
||||
success: 'var(--success)',
|
||||
},
|
||||
fontFamily: {
|
||||
heading: ['"Fraunces Variable"', 'Fraunces', 'ui-serif', 'Georgia', 'serif'],
|
||||
sans: ['"Hanken Grotesk Variable"', '"Hanken Grotesk"', 'ui-sans-serif', 'system-ui', 'sans-serif'],
|
||||
},
|
||||
borderRadius: {
|
||||
DEFAULT: 'var(--radius)',
|
||||
lg: 'calc(var(--radius) + 4px)',
|
||||
xl: 'calc(var(--radius) + 8px)',
|
||||
},
|
||||
boxShadow: {
|
||||
card: '0 1px 2px rgba(0,0,0,0.4), 0 8px 24px -12px rgba(0,0,0,0.6)',
|
||||
lift: '0 12px 32px -8px rgba(0,0,0,0.7)',
|
||||
bar: '0 -8px 24px -12px rgba(0,0,0,0.8)',
|
||||
},
|
||||
keyframes: {
|
||||
'slide-up': {
|
||||
from: { transform: 'translateY(100%)', opacity: '0' },
|
||||
to: { transform: 'translateY(0)', opacity: '1' },
|
||||
},
|
||||
'fade-in': {
|
||||
from: { opacity: '0' },
|
||||
to: { opacity: '1' },
|
||||
},
|
||||
shimmer: {
|
||||
'100%': { transform: 'translateX(100%)' },
|
||||
},
|
||||
},
|
||||
animation: {
|
||||
'slide-up': 'slide-up 280ms cubic-bezier(0.16, 1, 0.3, 1)',
|
||||
'fade-in': 'fade-in 200ms ease-out',
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [],
|
||||
}
|
||||
Reference in New Issue
Block a user