/* Tailwind CSS directives - required for framework */ @tailwind base; @tailwind components; @tailwind utilities; @layer base { :root { --bg-primary: #1a1b26; --bg-secondary: #16161e; --text-primary: #a9b1d6; --text-secondary: #565f89; --accent: #7aa2f7; --border: #414868; } .theme-tokyo-night { --bg-primary: #1a1b26; --bg-secondary: #16161e; --text-primary: #c0caf5; --text-secondary: #c0caf5; --accent: #7aa2f7; --border: #414868; } .theme-dracula { --bg-primary: #282a36; --bg-secondary: #21222c; --text-primary: #f8f8f2; --text-secondary: #6272a4; --accent: #bd93f9; --border: #44475a; } .theme-nord { --bg-primary: #2e3440; --bg-secondary: #3b4252; --text-primary: #eceff4; --text-secondary: #5e81ac; --accent: #88c0d0; --border: #4c566a; } .theme-solarized-dark { --bg-primary: #002b36; --bg-secondary: #073642; --text-primary: #93a1a1; --text-secondary: #586e75; --accent: #2aa198; --border: #586e75; } .theme-monokai { --bg-primary: #272822; --bg-secondary: #3e3d32; --text-primary: #f8f8f2; --text-secondary: #75715e; --accent: #a6e22e; --border: #49483e; } .theme-one-dark-pro { --bg-primary: #282c34; --bg-secondary: #21252b; --text-primary: #abb2bf; --text-secondary: #5c6370; --accent: #61dafb; --border: #3e4451; } .theme-material-dark { --bg-primary: #263238; --bg-secondary: #37474f; --text-primary: #eeffff; --text-secondary: #546e7a; --accent: #80cbc4; --border: #455a64; } .theme-catppuccin-mocha { --bg-primary: #1e1e2e; --bg-secondary: #181825; --text-primary: #cdd6f4; --text-secondary: #bac2de; --accent: #f38ba8; --border: #313244; } .theme-catppuccin-macchiato { --bg-primary: #24273a; --bg-secondary: #1e2030; --text-primary: #cad3f5; --text-secondary: #b8c0e0; --accent: #f0c6c6; --border: #363a4f; } .theme-catppuccin-frappe { --bg-primary: #303446; --bg-secondary: #292c3c; --text-primary: #c6d0f5; --text-secondary: #b5bfe2; --accent: #f2d5cf; --border: #414559; } .theme-catppuccin-latte { --bg-primary: #eff1f5; --bg-secondary: #e6e9ef; --text-primary: #4c4f69; --text-secondary: #5c5f77; --accent: #d20f39; --border: #bcc0cc; } body { background-color: var(--bg-primary); color: var(--text-primary); } /* Header component styles */ .header-nav { position: sticky; top: 0; } /* Make header sticky only on docs pages */ body:not(.page-docs) .header-nav { position: static; } /* Add class to body on docs pages */ .page-docs .header-nav { position: sticky; top: 0; z-index: 50; } .card { background-color: var(--bg-secondary); border-color: var(--border); } .btn-primary { background-color: var(--accent); color: var(--bg-primary); } .btn-primary:hover { opacity: 0.8; } .btn-secondary { background-color: transparent; color: var(--accent); border: 1px solid var(--accent); } .btn-secondary:hover { background-color: color-mix(in srgb, var(--accent) 10%, transparent); } } @layer components { /* TriState Button for has_cover filter */ /* Base input button style */ .tristate-btn { background-color: var(--bg-primary); border-width: 1px; /* Ensure 1px border like other inputs */ border-style: solid; } .tristate-btn.state-null { border-color: var(--border); color: var(--text-secondary); } .tristate-btn.state-true { border-color: var(--border); background-color: color-mix(in srgb, var(--accent) 15%, var(--bg-primary)); color: var(--accent); } .tristate-btn.state-false { border-color: var(--border); background-color: color-mix( in srgb, var(--text-secondary) 10%, var(--bg-primary) ); color: var(--text-secondary); } .tristate-btn:hover { opacity: 0.8; } .loading-spinner { display: inline-block; width: 40px; height: 40px; border: 4px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .status-pending { background-color: #f59e0b; color: white; } .status-processing { background-color: #3b82f6; color: white; } .status-completed { background-color: #10b981; color: white; } .status-failed { background-color: #ef4444; color: white; } .priority-1 { background-color: #ef4444; color: white; } .priority-2 { background-color: #f97316; color: white; } .priority-3 { background-color: #f59e0b; color: white; } .priority-5 { background-color: #10b981; color: white; } .priority-7 { background-color: #6b7280; color: white; } .priority-10 { background-color: #9ca3af; color: white; } /* Override highlight.js hardcoded colors for code blocks */ .prose pre code.hljs { background-color: transparent !important; } .prose code.hljs { background-color: #1a1b26 !important; padding: 0.2em 0.4em; } .prose pre { background-color: #16161e !important; } .prose .hljs { background-color: transparent !important; color: #c0caf5 !important; } /* Active/inactive states for theme and wood paneling buttons */ .bg-theme-active, .bg-wood-active { background-color: var(--bg-primary) !important; } /* Wood background positioning for seamless alignment */ .bg-wood-dark, .bg-wood-light, .bg-wood-mahogany { background-attachment: fixed; background-position: center; background-size: cover; } /* Ensure body and container align perfectly */ body.bg-wood-dark, body.bg-wood-light, body.bg-wood-mahogany, #collections-container.bg-wood-dark, #collections-container.bg-wood-light, #collections-container.bg-wood-mahogany { background-attachment: fixed; background-position: center; background-size: cover; } .bg-theme-inactive, .bg-wood-inactive { background-color: var(--bg-secondary) !important; } /* Smart text colors for wood paneling backgrounds */ /* Wood Light - needs dark text for contrast */ #collections-container[data-wood="wood-light"] { --wood-text-primary: #1a1a1a; --wood-text-secondary: #4a4a4a; --wood-border: #8b5a2b; } /* Wood Dark - needs light text */ #collections-container[data-wood="wood-dark"] { --wood-text-primary: #f5f5f5; --wood-text-secondary: #c0c0c0; --wood-border: #7a5228; } /* Wood Mahogany - needs light text (darkest background) */ #collections-container[data-wood="wood-mahogany"] { --wood-text-primary: #f5f5f5; --wood-text-secondary: #c0c0c0; --wood-border: #8b3a3a; } /* Apply wood-specific text colors to all text within collections container */ #collections-container[data-wood] h1, #collections-container[data-wood] h2, #collections-container[data-wood] h3, #collections-container[data-wood] p, #collections-container[data-wood] span, #collections-container[data-wood] a, #collections-container[data-wood] button { color: var(--wood-text-primary) !important; } #collections-container[data-wood] .text-secondary { color: var(--wood-text-secondary) !important; } /* Links on wood-light need darker color for visibility */ #collections-container[data-wood="wood-light"] a { color: #0066cc !important; } /* Links on dark woods use lighter color */ #collections-container[data-wood="wood-dark"] a, #collections-container[data-wood="wood-mahogany"] a { color: #66ccff !important; } /* Wood Light - use darker gradient */ #collections-container[data-wood="wood-light"] .carousel-nav-left { background: linear-gradient(to right, rgba(0, 0, 0, 0.6), transparent); } #collections-container[data-wood="wood-light"] .carousel-nav-right { background: linear-gradient(to left, rgba(0, 0, 0, 0.6), transparent); } /* Wood Dark/Mahogany - use subtle white/transparent gradient */ #collections-container[data-wood="wood-dark"] .carousel-nav-left, #collections-container[data-wood="wood-mahogany"] .carousel-nav-left { background: linear-gradient(to right, rgba(0, 0, 0, 0.3), transparent); } #collections-container[data-wood="wood-dark"] .carousel-nav-right, #collections-container[data-wood="wood-mahogany"] .carousel-nav-right { background: linear-gradient(to left, rgba(0, 0, 0, 0.3), transparent); } /* Add subtle borders to book cards on wood backgrounds */ #collections-container[data-wood] .book-card { border: 1px solid var(--wood-border); } .reader-icon { display: block; fill: none; stroke: currentColor; stroke-width: 2px; stroke-linecap: round; stroke-linejoin: round; } .dockable-panel { background-color: var(--bg-secondary); border-bottom: 1px solid var(--border); transition: max-height 0.2s ease-out; overflow: hidden; } .dockable-panel.panel-collapsed .panel-content { display: none; } .panel-header { user-select: none; } .panel-header:hover { background-color: color-mix(in srgb, var(--bg-secondary) 90%, white); } .panel-container { background-color: var(--bg-secondary); border-right: 1px solid var(--border); width: 320px; max-height: calc(100vh - 8rem); overflow-y: auto; } .panel-container[data-side="right"] { border-right: none; border-left: 1px solid var(--border); } .stacked-covers { position: relative; width: 100%; aspect-ratio: 2 / 3; overflow: hidden; } .stacked-covers .cover-img { position: absolute; width: 70%; height: 90%; object-fit: cover; border-radius: 4px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4); } .stacked-covers.cover-count-1 .cover-0 { top: 5%; left: 15%; } .stacked-covers.cover-count-2 .cover-0 { top: 8%; left: 5%; transform: rotate(-6deg); z-index: 1; } .stacked-covers.cover-count-2 .cover-1 { top: 2%; left: 25%; transform: rotate(3deg); z-index: 2; } .stacked-covers.cover-count-3 .cover-0 { top: 12%; left: 2%; transform: rotate(-8deg); z-index: 1; } .stacked-covers.cover-count-3 .cover-1 { top: 6%; left: 15%; transform: rotate(-2deg); z-index: 2; } .stacked-covers.cover-count-3 .cover-2 { top: 0; left: 30%; transform: rotate(4deg); z-index: 3; } .stacked-covers.cover-count-4 .cover-0 { top: 14%; left: 0; width: 65%; height: 85%; transform: rotate(-10deg); z-index: 1; } .stacked-covers.cover-count-4 .cover-1 { top: 10%; left: 12%; width: 65%; height: 85%; transform: rotate(-4deg); z-index: 2; } .stacked-covers.cover-count-4 .cover-2 { top: 5%; left: 22%; width: 65%; height: 85%; transform: rotate(2deg); z-index: 3; } .stacked-covers.cover-count-4 .cover-3 { top: 0; left: 32%; width: 65%; height: 85%; transform: rotate(6deg); z-index: 4; } .stacked-covers.cover-count-5 .cover-0, .stacked-covers.cover-count-6 .cover-0, .stacked-covers.cover-count-7 .cover-0 { top: 16%; left: -2%; width: 62%; height: 82%; transform: rotate(-12deg); z-index: 1; } .stacked-covers.cover-count-5 .cover-1, .stacked-covers.cover-count-6 .cover-1, .stacked-covers.cover-count-7 .cover-1 { top: 12%; left: 8%; width: 62%; height: 82%; transform: rotate(-6deg); z-index: 2; } .stacked-covers.cover-count-5 .cover-2, .stacked-covers.cover-count-6 .cover-2, .stacked-covers.cover-count-7 .cover-2 { top: 8%; left: 17%; width: 62%; height: 82%; transform: rotate(-1deg); z-index: 3; } .stacked-covers.cover-count-5 .cover-3, .stacked-covers.cover-count-6 .cover-3, .stacked-covers.cover-count-7 .cover-3 { top: 4%; left: 26%; width: 62%; height: 82%; transform: rotate(4deg); z-index: 4; } .stacked-covers.cover-count-5 .cover-4, .stacked-covers.cover-count-6 .cover-4, .stacked-covers.cover-count-7 .cover-4 { top: 0; left: 35%; width: 62%; height: 82%; transform: rotate(9deg); z-index: 5; } .stacked-covers.cover-count-6 .cover-5, .stacked-covers.cover-count-7 .cover-5 { top: -2%; left: 30%; width: 60%; height: 80%; transform: rotate(13deg); z-index: 6; } .stacked-covers.cover-count-7 .cover-6 { top: -4%; left: 25%; width: 58%; height: 78%; transform: rotate(16deg); z-index: 7; } .series-card { transition: transform 0.2s ease, box-shadow 0.2s ease; } .series-card:hover { transform: translateY(-4px); } }