diff --git a/AGENTS.md b/AGENTS.md index eb37412..e07e1d8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -34,6 +34,9 @@ The Nginx configurations on the web server can be found at `/etc/nginx/nginx.con ## AI Workflow +### Theme Work +Blackprint is the built-in default implemented by `/style.css`, `/template.html`, and `/template_mobile.html`; Classic is the retained packaged theme under `/themes`. Before creating or reworking themes, read `/themes/AGENTS.md` and treat the current five-section cascade in `/style.css` as the canonical component, responsive, accessibility, and cross-theme contract. + ### Updating the Wiki Whenever you make a change, you should always check if the change is worth mentioning in the wiki by looking through the pages and checking whether or not the topic of your change is mentioned. diff --git a/api/settings/index.php b/api/settings/index.php index b0b7568..ad821e4 100644 --- a/api/settings/index.php +++ b/api/settings/index.php @@ -243,7 +243,6 @@ function is_truthy_setting($value) { $colorFields = ['bg', 'fg', 'border', 'subtle', 'links']; $themeColorFields = [ 'classic' => $colorFields, - 'ambercrt' => ['links'], ]; $errors = []; diff --git a/js/settings.js b/js/settings.js index 6c3a0fe..f46319f 100644 --- a/js/settings.js +++ b/js/settings.js @@ -11,7 +11,6 @@ const COLOR_PREFS_KEY = 'colorPrefs'; const COLOR_FIELDS = ['bg', 'fg', 'border', 'subtle', 'links']; const THEME_COLOR_FIELDS = { classic: COLOR_FIELDS, - ambercrt: ['links'], }; const COLOR_DEFAULTS = { bg: '#000000', @@ -22,9 +21,6 @@ const COLOR_DEFAULTS = { }; const THEME_COLOR_DEFAULTS = { classic: COLOR_DEFAULTS, - ambercrt: { - links: '#FFB84D', - }, }; const MOBILE_VIEW_COOKIE = 'mobile_friendly_view'; const MOBILE_VIEW_DOMAIN = '.fridge.dev'; @@ -455,10 +451,7 @@ function normalizeTheme(theme) { const normalized = theme.trim().toLowerCase(); if (normalized === '' || normalized === 'default') return 'default'; if (normalized === 'blackprint') return 'default'; - if (normalized === 'crt') return 'ambercrt'; - if (normalized === 'liminal') return 'default'; if (normalized === 'custom') return 'classic'; - if (normalized === 'newsprint') return 'whiteprint'; if (/^[a-z0-9_-]+$/.test(normalized)) return normalized; return 'default'; } @@ -1531,16 +1524,14 @@ function initSettingsPage() { colorSection.style.display = fields.length ? '' : 'none'; const heading = colorSection.querySelector('h3'); if (heading) { - heading.textContent = normalizedTheme === 'ambercrt' ? 'CRT phosphor' : 'color scheme'; + heading.textContent = 'color scheme'; } const allowed = new Set(fields); colorInputs.forEach(inp => { const row = inp.closest('.color-row'); if (row) row.style.display = allowed.has(inp.dataset.colorKey) ? '' : 'none'; const label = row ? row.querySelector('span') : null; - if (label && normalizedTheme === 'ambercrt' && inp.dataset.colorKey === 'links') { - label.textContent = 'main'; - } else if (label && inp.dataset.colorKey === 'links') { + if (label && inp.dataset.colorKey === 'links') { label.textContent = 'links'; } }); @@ -2059,6 +2050,9 @@ function initSettingsPage() { saveLocalThemePref(currentTheme); setThemeCookie(currentTheme); applyThemeSelection(currentTheme); + if (currentTheme === 'classic') { + resetColorsToDefault(); + } }); } diff --git a/lib/render.php b/lib/render.php index bda5811..fcc5384 100644 --- a/lib/render.php +++ b/lib/render.php @@ -263,21 +263,9 @@ function fridg3_normalize_theme_id($theme) { if ($theme === 'blackprint') { return 'default'; } - if ($theme === 'crt') { - return 'ambercrt'; - } - if ($theme === 'liminal') { - return 'default'; - } - if ($theme === 'syswave') { - return 'default'; - } if ($theme === 'custom') { return 'classic'; } - if ($theme === 'newsprint') { - return 'whiteprint'; - } if (preg_match('/^[a-z0-9_-]+$/', $theme)) { return $theme; } @@ -343,6 +331,10 @@ function fridg3_list_themes($startDir) { $name = trim((string)($meta['name'] ?? '')); $description = trim((string)($meta['description'] ?? '')); + $base = strtolower(trim((string)($meta['base'] ?? ''))); + if ($base !== '' && $base !== 'blackprint') { + continue; + } $html = fridg3_normalize_theme_asset_path($meta['html'] ?? ''); $css = fridg3_normalize_theme_asset_path($meta['css'] ?? ''); $thumbnail = fridg3_normalize_theme_asset_path($meta['thumbnail'] ?? ''); @@ -373,6 +365,7 @@ function fridg3_list_themes($startDir) { 'id' => $id, 'name' => $name, 'description' => $description, + 'base' => $base, 'thumbnail' => $thumbnail, 'html' => $html, 'css' => $css, @@ -385,6 +378,8 @@ function fridg3_list_themes($startDir) { } uasort($themes, function($a, $b) { + // Blackprint is prepended by the themes API; packaged themes follow + // it with Whiteprint and Classic pinned ahead of future themes. $priority = ['whiteprint' => 0, 'classic' => 1]; $aPriority = $priority[$a['id']] ?? 10; $bPriority = $priority[$b['id']] ?? 10; @@ -736,6 +731,11 @@ function apply_preferred_theme_stylesheet($template, $startDir) { ); } + $template = fridg3_apply_body_theme_class($template, $theme['id'] . '-theme'); + if (($theme['base'] ?? '') === 'blackprint') { + $template = fridg3_apply_body_theme_class($template, 'blackprint-theme'); + } + $href = htmlspecialchars($theme['cssHref'], ENT_QUOTES, 'UTF-8'); if (strpos($template, 'href="' . $href . '"') !== false || strpos($template, "href='" . $href . "'") !== false) { return fridg3_replace_logged_in_discord_footer_button( diff --git a/main.js b/main.js index fd3a62a..50aba58 100644 --- a/main.js +++ b/main.js @@ -3372,7 +3372,6 @@ function setupSpaForms() { document.querySelectorAll('form').forEach(form => { if (form.dataset.searchWaitBound === '1') return; const isSearchForm = form.id === 'search' - || form.id === 'littlehelps-search' || form.getAttribute('role') === 'search' || !!form.querySelector('input[type="search"], input[name="q"]'); if (!isSearchForm) return; diff --git a/style.css b/style.css index 1c95955..8db5df7 100644 --- a/style.css +++ b/style.css @@ -517,6 +517,8 @@ body { display: flex; flex-direction: column; overflow-y: auto; /* allow sidebar content to scroll if taller than viewport */ + user-select: none; + -webkit-user-select: none; opacity: 1; transform: translateX(0); transition: @@ -529,6 +531,11 @@ body { box-shadow 0.16s ease; } +#sidebar img, +#sidebar a { + -webkit-user-drag: none; +} + body.sidebar-is-hidden #sidebar { width: 0 !important; min-width: 0 !important; @@ -6295,33 +6302,6 @@ html.access-high-contrast body { color: var(--fg) !important; } -html.access-high-contrast body.whiteprint-theme, -html.access-high-contrast body.bubblegum-theme, -html.access-high-contrast body.cottagecore-theme, -html.access-high-contrast body.littlehelps-theme { - --bg: #ffffff !important; - --fg: #000000 !important; - --border: #000000 !important; - --subtle: #333333 !important; - --links: #003cff !important; - color: var(--fg) !important; -} - -html.access-high-contrast body.whiteprint-theme, -html.access-high-contrast body.bubblegum-theme, -html.access-high-contrast body.cottagecore-theme, -html.access-high-contrast body.littlehelps-theme, -html.access-high-contrast body.whiteprint-theme #sidebar, -html.access-high-contrast body.bubblegum-theme #sidebar, -html.access-high-contrast body.cottagecore-theme #sidebar, -html.access-high-contrast body.littlehelps-theme #sidebar, -html.access-high-contrast body.whiteprint-theme #content-layout, -html.access-high-contrast body.bubblegum-theme #content-layout, -html.access-high-contrast body.cottagecore-theme #content-layout, -html.access-high-contrast body.littlehelps-theme #content-layout { - background: #ffffff !important; -} - html.access-high-contrast a, html.access-high-contrast button, html.access-high-contrast input, @@ -8208,6 +8188,7 @@ pre code.hljs { .theme-picker-description, .theme-picker-option-description { + font-family: "MainRegular", var(--emoji-font), monospace; font-size: 12px; line-height: 1.25; color: var(--subtle); diff --git a/template.html b/template.html index 83ab936..3637113 100644 --- a/template.html +++ b/template.html @@ -9,7 +9,7 @@ - + diff --git a/template_mobile.html b/template_mobile.html index 4cdfa63..57a3cfb 100644 --- a/template_mobile.html +++ b/template_mobile.html @@ -9,7 +9,7 @@ - + diff --git a/themes/AGENTS.md b/themes/AGENTS.md index 2e2f3e6..8252c73 100644 --- a/themes/AGENTS.md +++ b/themes/AGENTS.md @@ -1,288 +1,191 @@ -# Theme Creation Instructions +# Theme Development Instructions -this directory contains selectable website themes for fridge.dev. +This directory contains selectable themes for fridge.dev. Blackprint is the built-in default and is implemented by `/template.html`, `/template_mobile.html`, and the Blackprint layer near the end of `/style.css`. It is not a JSON theme package. Classic is the retained selectable reference theme in `/themes/classic.json` and `/themes/lib/classic/`. -if a user says something like "using this AGENTS.md, create an x based theme", you should be able to make the whole theme from this file plus the existing examples. do the work directly unless the request is dangerously unclear. +Treat `/style.css` as the source of truth. Read it before creating or substantially changing a theme. It contains the complete shared component system, accessibility behavior, responsive rules, Blackprint implementation, and final cross-theme invariants. Do not copy deleted themes or assume an older selector inventory is still accurate. -## Mental Model +## Theme Package Contract -a theme has two parts: +A selectable theme has: -- metadata json in `/themes` -- assets in `/themes/lib` +- `/themes/{theme-id}.json` +- `/themes/lib/{theme-id}/{template}.html` +- `/themes/lib/{theme-id}/{stylesheet}.css` +- `/themes/thumbnails/{theme-id}.svg` (normally a 4:3 preview) -the metadata file is what makes the theme appear in `/settings`. the filename, minus `.json`, becomes the saved theme id. +Theme IDs use lowercase `a-z`, `0-9`, `_`, and `-`. The JSON filename without `.json` is the saved theme ID. -example: +Required metadata: ```json { - "name": "Frutiger Aero", - "html": "frutiger-aero-template.html", - "css": "frutiger-aero.css" + "name": "Theme Name", + "description": "short picker description", + "thumbnail": "thumbnails/theme-id.svg", + "html": "theme-id/theme-id.html", + "css": "theme-id/theme-id.css" } ``` -this means: +An optional `"base": "blackprint"` field makes the renderer add both the package's `{theme-id}-theme` body class and `blackprint-theme`. Use it for a deliberate Blackprint derivative so the package inherits the current Blackprint layout and component coverage instead of copying that layer. `blackprint` is currently the only supported base value. -- settings label: `Frutiger Aero` -- saved id: `example_theme` if the file is `/themes/example_theme.json` -- desktop template: `/themes/lib/frutiger-aero/frutiger-aero-template.html` -- theme stylesheet: `/themes/lib/frutiger-aero/frutiger-aero.css` +`thumbnail` is relative to `/themes`; `html` and `css` are relative to `/themes/lib`. Asset paths may contain only letters, numbers, `.`, `_`, `-`, and `/`. Never use absolute paths, `..`, empty segments, query strings, or shell-like filenames. -## Files To Create +The renderer discovers valid JSON files dynamically. Blackprint is exposed as `default`; packaged themes receive a `{theme-id}-theme` body class. Missing, malformed, unsupported-base, or unsafe packages are ignored. Desktop may use the package HTML; mobile always uses `/template_mobile.html` and only appends the selected theme CSS. -for a new theme, create: +## Base Stylesheet Map -- `/themes/{theme-id}.json` -- `/themes/lib/{theme-id}/{theme-id-or-theme-name}.html` -- `/themes/lib/{theme-id}/{theme-id-or-theme-name}.css` +`/style.css` is intentionally ordered into five cascade sections: -keep ids lowercase with `a-z`, `0-9`, `_`, and `-`. avoid spaces in filenames. +1. Foundations: design variables, selection, loading UI, local fonts, emoji fallback, ASCII/resource typography, global text and element behavior. +2. Site shell: page wrapper, sidebar, title and title animations, navigation, content layout, notifications, mini-player, footer, sliders, and scrollbars. +3. Shared controls: checkboxes, settings panels, theme/title/Fruity Dance pickers, forms, popups, prompts, media corruption effects, tables, Markdown/BBCode surfaces, pagination, toolbars, and common responsive rules. +4. Page features: route-specific feed, journal, account, chat, gallery, upload, admin, notification, music, and tool interfaces. +5. Theme layers: the full Blackprint skin, Blackprint mobile coverage, application-specific cleanup, and final rules that intentionally apply across every theme. -## Required JSON Rules +Rules remain in cascade order because later responsive, theme, and coverage rules intentionally override earlier component defaults. A theme stylesheet is appended after the shared stylesheet, but inline mobile rules can still require scoped `!important` overrides. -theme json must be valid JSON and must include: +## Design Variables -- `name`: human-readable label shown in `/settings` -- `description`: short supporting text shown in the on-site theme picker -- `thumbnail`: 4:3 preview image path relative to `/themes`, usually `thumbnails/{theme-id}.svg` -- `html`: relative path inside `/themes/lib` -- `css`: relative path inside `/themes/lib` +Set the core variables at the start of a theme stylesheet: -do not put paths like `/themes/lib/foo.css` in the json. use paths relative to `/themes/lib`, such as `aero/aero.css`. -do not put paths like `/themes/thumbnails/foo.svg` in the json. use paths relative to `/themes`, such as `thumbnails/aero.svg`. +```css +:root { + --bg: #000000; + --fg: #eeeeee; + --border: #3c7895; + --subtle: #917daa; + --links: #415fad; + --chat-own-fg: #ffffff; +} +``` -allowed asset path characters are letters, numbers, `.`, `_`, `-`, and `/`. never use `..`, absolute paths, empty path segments, or weird shell-ish filenames. +The shared stylesheet also derives or consumes: -## Template Requirements +- `--hero-ascii-muted` and `--hero-ascii-1` through `--hero-ascii-7` +- `--hero-ascii-opacity` +- `--resource-ascii`, `--resource-label`, `--time-ascii`, `--time-label` +- `--emoji-font` +- `--selection-bg`, `--selection-fg` +- `--scrollbar-track`, `--scrollbar-thumb`, `--scrollbar-thumb-hover`, `--scrollbar-thumb-border` +- `--chat-own-bg` in the shared chat layer -start from `/template.html` unless the user asks for a radical layout. copy it into `/themes/lib/{theme-id}`, then adapt it. +Prefer overriding variables over duplicating component rules. Add direct component overrides where the theme changes shape, spacing, typography, imagery, or layout. Classic alone currently exposes account-synced custom values for `bg`, `fg`, `border`, `subtle`, and `links`; adding color controls for another theme requires coordinated changes in `/js/settings.js` and `/api/settings/index.php`. -the template must preserve these placeholders: +Available shared fonts are `MainRegular`, `MainBold`, `MainItalic`, `MainBoldItalic`, `IBM_VGA`, `Title`, and the `var(--emoji-font)` fallback stack. Preserve the emoji fallback in custom font families. -- `{title}` -- `{description}` -- `{content}` -- `{user_greeting}` - -the template should preserve these scripts/styles unless there is a very good reason: - -- Font Awesome CDN link -- Highlight.js CDN CSS and JS -- `/main.js` -- favicon and manifest links +## Templates And Runtime Contracts -the template should include a stylesheet link to `/style.css`; the renderer appends the selected theme CSS later, so the theme CSS can override base styling. +Start desktop work from `/template.html` unless the requested design needs a different layout. Preserve: -## Layout Freedom +- `{title}`, `{description}`, `{content}`, and `{user_greeting}` +- the content mount IDs `#container`, `#content`, `#content-layout`, and `#content-main` +- sidebar/navigation access, including home, account, and settings +- title markup with `#title` and per-character `.title-letter` spans +- mini-player IDs and the persistent `#mini-player-audio` element +- sidebar/footer/notification hooks used by `/js/sidebar-player.js` +- Font Awesome, Highlight.js, favicon, manifest, `/style.css`, and shared script includes -themes are allowed to change the website layout. this is not just a color-skin system. +The site uses SPA content replacement while leaving the shell and audio element mounted. Do not duplicate IDs, replace the shared audio element during navigation, or remove runtime hooks without updating and verifying the JavaScript. -you may: +Themes may radically rearrange the desktop shell, but content and navigation must remain usable. Avoid adding padding directly to `#content-main` when a decorative wrapper or `#content-layout::before` can add breathing room without reducing the page's usable width. -- move the menu -- redesign the sidebar -- make the layout top-nav, bottom-nav, split-panel, dashboard-like, etc. -- add decorative wrappers or background elements -- change spacing, borders, visual density, typography, and component shape +## Components To Cover -but you must keep: +At minimum, inspect the current declarations in `/style.css` for every component the theme visibly changes: -- a visible content display area containing `{content}` -- a usable menu/navigation of some sort -- account/settings/home navigation available somewhere -- the mini-player markup unless the theme intentionally restyles it -- IDs/classes that `main.js` depends on, unless you also verify and update the JS safely +- shell: `body`, `.paper-grain`, `#page-wrapper`, `#sidebar`, `#header`, `#title`, `.title-letter`, `#tab`, `#container`, `#content`, `#content-layout`, `#content-main` +- navigation/status: active tabs, sidebar notifications, active chat, maintenance/developer indicators, tooltips, notification toasts +- footer: `#sidebar-footer`, `#footer-text`, `#footer-buttons`, `#footer-button` +- player: `#mini-player`, `#mini-player-main`, art wrapper/image/download, metadata/title/artist, play/mute/close controls, seek/volume sliders, track list, `.mini-track` hover/active states, live-stream states +- forms: text inputs, textareas, selects/dropdowns, buttons, radios, checkboxes, color inputs, file controls, field help, disabled/error/success states +- pickers/popups: theme picker, title-animation picker, Fruity Dance controls, site popup/prompt/dialog surfaces +- content: headings, links, lists, blockquotes, code/pre, Markdown/BBCode, spoilers, tables, embedded media, pager controls, posts/cards +- route features: feed/journal editors and cards, accounts/settings/admin, chat and reply UI, gallery/upload, notifications, music albums, tools, logs, wiki/formatting pages +- ASCII/resource displays: homepage hero, server time/resources, labels, scaling containers -translation: go wild aesthetically, but do not strand users on a pretty page with no content or nav. that would be deeply goofy. +Use the stylesheet's actual selectors rather than inventing parallel markup. Search for a route or component name before adding overrides. -## Mobile Behavior +## Title And Motion -mobile view uses `/template_mobile.html`, not the theme HTML file. this is easy to forget and then the theme looks half-baked on `m.fridge.dev`, so treat mobile CSS as required theme work, not a nice extra. +The shared title uses clipped per-letter backgrounds and runtime-selectable wobble, bounce, rubberhose, bubble, slot-machine, moonwalk, and heartbeat animations. Mobile Safari requires gradients on the individual `.title-letter` elements. Keep transform-safe overflow and padding intact unless the replacement is verified with every animation. -when mobile-friendly view is active: +Do not override the shared title's `font-family` in packaged theme styles. Themes may change the title's colour, gradient, decoration, and surrounding panel, but `#title`, `.title-letter`, `.mobile-collapsed-title`, and its letters must retain the shared title typeface. Classic is the existing legacy exception because its original title treatment is part of that preserved theme. -- only the theme CSS is applied -- the theme HTML is ignored -- write mobile overrides under `body.mobile-template` +Respect both `@media (prefers-reduced-motion: reduce)` and `html.access-reduced-motion`. Theme animation is decorative and must be suppressible. The global reduced-motion rule forces animation and transition durations down to 1ms; do not defeat it with later theme rules. -this means every theme CSS must include mobile-specific polish if the theme changes core layout, backgrounds, nav buttons, content spacing, cards, forms, the mini-player, or footer controls. almost every real theme changes at least one of these, so most themes should have a substantial `body.mobile-template` section. +## Mobile Requirements -important: `/template_mobile.html` contains inline styles with strong defaults. these include black backgrounds for nav buttons, player/footer blocks, and `#content-main`. if you do not override these with `body.mobile-template ... !important`, light themes will get random black panels and dark themes may get default-looking controls. +Mobile uses `/template_mobile.html`, ignores theme HTML, and appends theme CSS. Scope mobile work under `body.mobile-template`. The template contains strong inline layout defaults, so targeted `!important` is sometimes necessary. -important mobile selectors that often need theme overrides: +Verify at least: -- `body.mobile-template` -- `body.mobile-template #sidebar` -- `body.mobile-template .mobile-collapsed-header` -- `body.mobile-template .mobile-collapsed-brand` -- `body.mobile-template .mobile-collapsed-subtitle` -- `body.mobile-template .mobile-collapsed-title` -- `body.mobile-template #show-sidebar` -- `body.mobile-template .mobile-nav-grid` -- `body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button` -- `body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover` -- `body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active` -- `body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover` -- `body.mobile-template #footer-buttons` -- `body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button` -- `body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover` -- `body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active` -- `body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover` -- `body.mobile-template #content` -- `body.mobile-template #content-layout` -- `body.mobile-template #content-main` -- `body.mobile-template #mini-player` -- `body.mobile-template #mini-player-tracks` -- `body.mobile-template #mini-player-art-wrapper` -- `body.mobile-template #mini-player-art` -- `body.mobile-template #mini-player-download` -- `body.mobile-template #mini-player-play` -- `body.mobile-template #mini-player-controls span` -- `body.mobile-template #mini-player-seek` -- `body.mobile-template #mini-player-volume` -- `body.mobile-template .mini-track` -- `body.mobile-template .mini-track:hover` -- `body.mobile-template .mini-track.active` -- `body.mobile-template #sidebar-footer` -- `body.mobile-template input` -- `body.mobile-template textarea` -- `body.mobile-template .dropdown` -- `body.mobile-template .text-input` -- `body.mobile-template .bbcode-dropdown` -- `body.mobile-template .bbcode-btn` +- page background, collapsed header, brand/title, menu button, unread badge, backdrop, and expanded menu panel +- `body.mobile-template #sidebar` preserves the shared safe gutter (`width: calc(100% - 16px)`), uses `min-width: 0`, `max-width: none`, border-box sizing, and never overflows the viewport +- nav and footer buttons in normal, hover, active, and active-hover states with explicit readable foregrounds +- content/layout/main backgrounds and spacing; light themes must replace default dark panels +- complete mini-player and track-list styling +- inputs, textareas, dropdowns, BBCode controls, radios, checkboxes, and color/file controls +- narrow content, long words, code blocks, tables, ASCII art, and media without horizontal page overflow -mobile CSS may need `!important` because `template_mobile.html` has inline mobile-specific styles. use it where necessary, not everywhere like a maniac. +Do not reintroduce a separate collapsed branded header: the current mobile template uses the fixed menu control and expanded sidebar title. Preserve the shared open/close transforms, backdrop behavior, document scroll locking, and reduced-motion overrides. -minimum mobile checklist for every theme: - -- theme the page background -- theme the collapsed header and menu button -- theme the expanded menu panel, and force `body.mobile-template #sidebar` back to `width: 100% !important; min-width: 0 !important; max-width: none !important;` so desktop sidebar widths do not make the opened mobile menu skinny -- theme mobile nav buttons, including hover, active, and active-hover states; every state must explicitly set readable text/icon colors -- theme footer buttons, including hover, active, and active-hover states; every state must explicitly set readable text/icon colors -- theme the mini-player, track list, album art, download overlay, play/mute controls, title text, sliders, track rows, hover states, and active track states -- theme `#content-layout` and `#content-main`; especially remove the mobile template's default black `#content-main` background when making a light theme -- theme inputs, dropdowns, textareas, BBCode controls, radios, checkboxes, and color inputs if the theme is light or uses non-default colors -- keep spacing tight enough for small screens without horizontal scrolling - -## CSS Strategy - -theme CSS is appended after the base stylesheet. normally do not `@import url('/style.css')` in theme CSS, because that can reload base styles after mobile styles and break mobile theming. - -set the core color variables early: +## Accessibility And Shared Invariants -```css -:root { - --bg: #000000; - --fg: #eeeeee; - --border: #3c7895; - --subtle: #917daa; - --links: #415fad; -} -``` +Themes must maintain readable contrast, distinct links, visible focus/hover/active states, usable target sizes, and unclipped content. Decorative backgrounds need opaque-enough content surfaces. -then override components directly. - -common components: - -- `body` -- `#page-wrapper` -- `#sidebar` -- `#header` -- `#title` -- `#tab` -- `#container` -- `#content` -- `#content-layout` -- `#content-main` -- `#post` -- `#search` -- `#search-box` -- `#search-button` -- `#footer-buttons` -- `#footer-button` -- `#mini-player` -- `#mini-player-tracks` -- `#mini-player-art-wrapper` -- `#mini-player-art` -- `#mini-player-download` -- `#mini-player-play` -- `#mini-player-controls span` -- `#mini-player-seek` -- `#mini-player-volume` -- `.mini-track`, `.mini-track:hover`, `.mini-track.active` -- form inputs, buttons, `.dropdown`, `.radio`, `.checkbox` - -when styling menus, do not only set the background on hover/active states. set the foreground color too. this includes `#tab:hover`, `#tab.active`, `#footer-button:hover`, `#footer-button.active`, mobile nav buttons, mobile footer buttons, and pseudo-elements like `#tab::before` if the theme uses them. invisible active menu text is a tiny little css jump scare and it is your job to prevent it. - -## Content Spacing - -be careful with padding on `#content-main`: it reduces usable width for page content. if the user asks for more breathing room without shrinking content, prefer outer margins, pseudo-elements, or background wrappers. - -good pattern: +The shared accessibility layer supplies high contrast through the core variables. If a future light theme needs a light high-contrast mode, add an explicit theme-scoped override rather than a generic name list. -```css -#content-layout { - position: relative; - isolation: isolate; -} +The final rules in `/style.css` are intentional cross-theme contracts: -#content-layout::before { - content: ""; - position: absolute; - inset: -20px; - z-index: -1; - pointer-events: none; -} -``` +- sidebar mini-player, track list, and footer remain shadow-free +- mini-player close controls retain their compact pinned geometry +- mobile title letters retain independent gradient painting and transform-safe spacing +- mobile Always Playing title setting stays hidden +- the mobile menu toggle remains square +- chat controls and quoted replies remain flat and readable +- the sidebar suppresses text selection and native image/link dragging while controls remain interactive -this makes the visual panel larger without stealing content width. +Do not casually override these rules in a theme. -## Accessibility And Usability +## CSS Practices -keep themes readable: - -- preserve strong text/background contrast -- make links visually distinct -- make focus/hover states visible -- keep buttons and controls large enough to click -- avoid hiding overflow in ways that cut off content -- check long words, ASCII art, forms, and post cards - -if a theme uses very decorative backgrounds, make content panels opaque enough to read. +- Do not `@import /style.css`; the renderer already loads it. +- Scope theme-specific rules to the theme body class added by the renderer. +- Set both foreground and background for hover/active states, including pseudo-elements. +- Reuse shared variables and component markup. +- Use `!important` only to beat known inline/mobile or final shared declarations. +- Keep asset URLs rooted under the theme package when practical. +- Avoid broad selectors that leak into editor previews, popups, or mobile unintentionally. +- Preserve reduced motion, high contrast, keyboard focus, and touch behavior. ## Validation -after creating or changing a theme: +After creating or changing a theme: -1. validate json: +1. Validate metadata: ```bash -php -r 'json_decode(file_get_contents("themes/{theme-id}.json"), true); echo json_last_error_msg(), "\n";' +php -r '$v=json_decode(file_get_contents("themes/{theme-id}.json"), true); echo json_last_error_msg(), "\n";' ``` -2. check the theme loader sees it: +2. Verify discovery: ```bash -php -r 'require "lib/render.php"; echo json_encode(array_values(array_map(fn($t)=>["id"=>$t["id"],"name"=>$t["name"]], fridg3_list_themes(__DIR__))), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES), "\n";' +php -r 'require "lib/render.php"; echo json_encode(array_values(array_map(fn($t) => ["id" => $t["id"], "name" => $t["name"]], fridg3_list_themes(__DIR__))), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES), "\n";' ``` -3. check whitespace: - -```bash -git diff --check -- themes/{theme-id}.json themes/lib/{theme-id}/{theme}.html themes/lib/{theme-id}/{theme}.css -``` - -4. if PHP render helper changed, run: +3. Lint and check whitespace: ```bash php -l lib/render.php +git diff --check -- themes/{theme-id}.json themes/lib/{theme-id} themes/thumbnails/{theme-id}.svg ``` -do not start a dev server for this repo. assume one is already running if preview is needed. +4. Test desktop and mobile, normal and reduced motion, keyboard focus, long content, forms, mini-player states, and the routes whose components the theme overrides. + +Do not start a development server; assume one is already running if preview is needed. ## Documentation -if you change how themes work, update the wiki. if you only add a normal theme, wiki changes usually are not needed. +Update `/wiki/Frontend-and-Templates.md`, `/wiki/Routing-and-Rendering.md`, `/wiki/Data-Contracts.md`, and `/wiki/API-Reference.md` when the package contract, renderer, settings behavior, color support, or shared theme architecture changes. A normal new theme usually needs only a concise catalog mention if its behavior is noteworthy. diff --git a/themes/aero.json b/themes/aero.json index 3e7eb9b..f11d018 100644 --- a/themes/aero.json +++ b/themes/aero.json @@ -1,7 +1,8 @@ { "name": "aero", - "description": "blackprint structure under polished blue Aero glass", + "description": "a bright Frutiger Aero world of glass, blue skies, and green hills", "thumbnail": "thumbnails/aero.svg", "html": "aero/aero.html", - "css": "aero/aero.css" + "css": "aero/aero.css", + "base": "blackprint" } diff --git a/themes/ambercrt.json b/themes/ambercrt.json deleted file mode 100644 index 1a8a4fc..0000000 --- a/themes/ambercrt.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "CRT", - "description": "dark scanline terminal with one adjustable phosphor colour", - "thumbnail": "thumbnails/crt.svg", - "html": "ambercrt/ambercrt.html", - "css": "ambercrt/ambercrt.css" -} diff --git a/themes/arcade.json b/themes/arcade.json deleted file mode 100644 index cf8ddf9..0000000 --- a/themes/arcade.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "arcade", - "description": "neon cabinet colours with teal, blue, violet, and magenta", - "thumbnail": "thumbnails/arcade.svg", - "html": "arcade/arcade.html", - "css": "arcade/arcade.css" -} diff --git a/themes/base16.json b/themes/base16.json new file mode 100644 index 0000000..6ebce2b --- /dev/null +++ b/themes/base16.json @@ -0,0 +1,8 @@ +{ + "name": "base16", + "description": "Base16 Default Dark with strictly flat, textureless components", + "thumbnail": "thumbnails/base16.svg", + "html": "whiteprint/whiteprint.html", + "css": "base16/base16.css", + "base": "blackprint" +} diff --git a/themes/bubblegum.json b/themes/bubblegum.json deleted file mode 100644 index 1830d20..0000000 --- a/themes/bubblegum.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "bubblegum", - "description": "soft pastel whiteprint with candy pink and mint accents", - "thumbnail": "thumbnails/bubblegum.svg", - "html": "bubblegum/bubblegum.html", - "css": "bubblegum/bubblegum.css" -} diff --git a/themes/catpuccin.json b/themes/catpuccin.json new file mode 100644 index 0000000..3f45a77 --- /dev/null +++ b/themes/catpuccin.json @@ -0,0 +1 @@ +{"name":"catpuccin","description":"soft Catppuccin-inspired lavender, mauve, and mocha","thumbnail":"thumbnails/catpuccin.svg","html":"whiteprint/whiteprint.html","css":"catpuccin/catpuccin.css","base":"blackprint"} diff --git a/themes/cottagecore.json b/themes/cottagecore.json deleted file mode 100644 index d17ea9b..0000000 --- a/themes/cottagecore.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "cottagecore", - "description": "warm garden paper, stitched controls, and rose tones", - "thumbnail": "thumbnails/cottagecore.svg", - "html": "cottagecore/cottagecore.html", - "css": "cottagecore/cottagecore.css" -} diff --git a/themes/gothic.json b/themes/gothic.json deleted file mode 100644 index 6f3fa98..0000000 --- a/themes/gothic.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "gothic", - "description": "dark stone panels, iron buttons, and antique gold glow", - "thumbnail": "thumbnails/gothic.svg", - "html": "gothic/gothic.html", - "css": "gothic/gothic.css" -} diff --git a/themes/lib/aero/aero.css b/themes/lib/aero/aero.css index 7c6e6aa..607fccc 100644 --- a/themes/lib/aero/aero.css +++ b/themes/lib/aero/aero.css @@ -1,524 +1,913 @@ @font-face { - font-family: "AeroTahoma"; - src: url("/themes/lib/aero/tahoma.ttf") format("truetype"); - font-weight: 400; + font-family: "Aero Tahoma"; + src: url('/themes/lib/aero/tahoma.ttf') format('truetype'); font-style: normal; + font-weight: normal; font-display: swap; } -:root { - --bg: #07141f; - --fg: #edfaff; - --border: #58c8e2; - --subtle: #9dccd8; - --links: #82f0d8; - --chat-own-fg: #052b35; - --hero-ascii-muted: #7faab7; - --hero-ascii-1: #776490; - --hero-ascii-2: #7c7ba3; - --hero-ascii-3: #7795b4; - --hero-ascii-4: #70adbf; - --hero-ascii-5: #69c7c5; - --hero-ascii-6: #73dfca; - --hero-ascii-7: #82f0d8; - --hero-ascii-opacity: 0.96; - --aero-glass: rgba(10, 30, 42, 0.66); - --aero-glass-strong: rgba(8, 24, 34, 0.82); - --aero-shine: rgba(237, 250, 255, 0.24); - --aero-blue: #58c8e2; - --aero-teal: #82f0d8; - --aero-purple: #776490; -} - -body { - background: - radial-gradient(ellipse at 22% 4%, rgba(150, 236, 255, 0.34), transparent 34%), - radial-gradient(ellipse at 86% 84%, rgba(130, 240, 216, 0.2), transparent 32%), - linear-gradient(135deg, rgba(119, 100, 144, 0.18), rgba(88, 200, 226, 0.1)), - linear-gradient(180deg, #081524 0%, #0b2f43 46%, #082b36 68%, #06151d 100%); - background-attachment: fixed; - color: var(--fg); - font-family: "AeroTahoma", Tahoma, "MainRegular", var(--emoji-font), sans-serif; +:root, +body.aero-theme { + --bg: #dff4ff; + --fg: #18354a; + --border: #4d91c7; + --subtle: #52758a; + --links: #0876be; + --chat-own-bg: #1688d0; + --chat-own-fg: #ffffff; + --hero-ascii-muted: #78afd2; + --hero-ascii-1: #126fc0; + --hero-ascii-2: #0789cf; + --hero-ascii-3: #00a8dc; + --hero-ascii-4: #29baba; + --hero-ascii-5: #58bd7c; + --hero-ascii-6: #78bd48; + --hero-ascii-7: #a3ce42; + --selection-bg: #168bd1; + --selection-fg: #ffffff; + --scrollbar-track: #d6effb; + --scrollbar-thumb: #65acd5; + --scrollbar-thumb-hover: #2c8dc8; + --scrollbar-thumb-border: #eefaff; +} + +body.aero-theme, +body.aero-theme :is( + #subtitle, + #tab, + #footer-text, + #footer-button, + #user-greeting, + #content-main, + #content-footer, + h1, h2, h3, h4, h5, h6, + p, li, label, summary, legend, + input, textarea, select, button, + .text-input, + .dropdown, + .bbcode-dropdown, + .bbcode-btn, + .grid-caption, + .grid-subcaption, + .mini-track, + .tooltip, + .site-notification-toast, + .site-popup-dialog +) { + font-family: "Aero Tahoma", Tahoma, Verdana, var(--emoji-font), sans-serif !important; +} + +body.aero-theme :is(#ascii, #ascii-time, .usage-ascii, .ascii-scale-inner) { + font-family: "IBM_VGA", var(--emoji-font), monospace !important; +} + +body.aero-theme :is(pre, code, pre *, code *) { + font-family: "MainRegular", var(--emoji-font), monospace !important; +} + +body.aero-theme, +body.aero-theme.mobile-template { + background: #78bde0 !important; + color: var(--fg) !important; + isolation: isolate; } -body::before { - content: ""; - position: fixed; - inset: 0; - z-index: -3; - pointer-events: none; - background: - linear-gradient(110deg, transparent 0 17%, rgba(255, 255, 255, 0.16) 17% 19%, transparent 19% 100%), - linear-gradient(152deg, transparent 0 68%, rgba(130, 240, 216, 0.12) 68% 70%, transparent 70% 100%), - repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.035) 0 1px, transparent 1px 28px); +body.aero-theme .paper-grain { + opacity: 1; + inset: -12px; + z-index: -1; + background: url('/themes/lib/aero/background.jpg') center / cover no-repeat fixed; + filter: blur(6px) saturate(1.08); + transform: scale(1.02); } -.aero-sky, -.aero-waterline { - position: fixed; - left: 0; - right: 0; - pointer-events: none; -} +body.aero-theme #page-wrapper, +body.aero-theme #container { background: transparent !important; } -.aero-sky { - top: 0; - height: 44vh; - z-index: -2; - background: - linear-gradient(180deg, rgba(186, 246, 255, 0.24), transparent 62%), - radial-gradient(ellipse at 42% 0%, rgba(255, 255, 255, 0.22), transparent 46%); +body.aero-theme #sidebar, +body.aero-theme.mobile-template #sidebar { + background: linear-gradient(180deg, rgba(238,250,255,.9), rgba(177,224,244,.82)) !important; + border: 1px solid rgba(255,255,255,.9) !important; + border-right-color: #438cb9 !important; + box-shadow: inset -1px 0 rgba(255,255,255,.65), 6px 0 20px rgba(17,74,112,.25) !important; + backdrop-filter: blur(14px) saturate(1.25); } -.aero-waterline { - bottom: 0; - height: 36vh; - z-index: -1; - background: - linear-gradient(180deg, transparent 0%, rgba(130, 240, 216, 0.16) 28%, rgba(10, 56, 58, 0.26) 100%), - repeating-radial-gradient(ellipse at 50% 100%, rgba(160, 255, 242, 0.16) 0 2px, transparent 3px 18px); - opacity: 0.88; +body.aero-theme #header { + margin: 10px !important; + padding: 13px 10px !important; + border: 1px solid #4c98c9 !important; + border-radius: 12px !important; + background: linear-gradient(180deg, rgba(255,255,255,.9), rgba(120,202,240,.58)) !important; + box-shadow: inset 0 1px #fff, 0 2px 5px rgba(30,91,126,.18) !important; } -#page-wrapper, -#container { - background: transparent; +body.aero-theme #title, +body.aero-theme #title .title-letter, +body.aero-theme .mobile-collapsed-title, +body.aero-theme .mobile-collapsed-title .title-letter { + background-image: linear-gradient(0deg, #0879c4, #21a6dc 44%, #74c546 48%, #1483cc 55%, #0879c4) !important; + filter: drop-shadow(0 1px rgba(255,255,255,.9)); } -#sidebar { - width: 282px; - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 22%), - linear-gradient(180deg, rgba(18, 68, 89, 0.7), rgba(4, 22, 31, 0.82)), - var(--aero-glass); - border-right: 1px solid rgba(163, 239, 255, 0.48); - box-shadow: - inset -1px 0 0 rgba(255, 255, 255, 0.18), - 12px 0 36px rgba(0, 8, 18, 0.34); - backdrop-filter: blur(18px) saturate(1.35); +body.aero-theme #sidebar > a { margin-left: 10px; margin-right: 10px; } + +body.aero-theme :is(#tab, #footer-button, .mobile-nav-button, .mobile-footer-button, #show-sidebar) { + background: linear-gradient(180deg, #ffffff 0%, #dff4fd 47%, #acd8ee 50%, #d9f1fb 100%) !important; + color: #174967 !important; + border: 1px solid #4a94c2 !important; + border-radius: 7px !important; + box-shadow: inset 0 1px #fff, 0 1px 2px rgba(24,77,108,.2) !important; + text-shadow: 0 1px #fff; } -#header { - position: relative; - margin: 12px; - padding: 14px 12px 16px; - text-align: center; - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.22), transparent 42%), - linear-gradient(135deg, rgba(119, 100, 144, 0.32), rgba(88, 200, 226, 0.26)), - rgba(8, 34, 48, 0.72); - border: 1px solid rgba(178, 244, 255, 0.46); - border-radius: 8px; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.26), - 0 10px 24px rgba(0, 8, 18, 0.24); -} - -#title, -.mobile-collapsed-title { - background-image: linear-gradient(0deg, #dffbff, #82f0d8 48%, #776490); - background-clip: text; - -webkit-background-clip: text; - color: transparent; - -webkit-text-fill-color: transparent; - font-family: "MainBold", "AeroTahoma", Tahoma, var(--emoji-font), sans-serif; - text-shadow: none; -} - -#subtitle, -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -.usage-label { - color: var(--subtle); -} - -a, -#hide-sidebar, -#show-sidebar { - color: var(--links); -} - -#sidebar > a { - display: block; - margin: 0 12px 8px; -} - -#tab, -#footer-button, -.theme-picker-button, -.theme-picker-option { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 42%), - linear-gradient(90deg, rgba(119, 100, 144, 0.22), rgba(88, 200, 226, 0.18)), - rgba(7, 36, 51, 0.66) !important; - border: 1px solid rgba(163, 239, 255, 0.48) !important; - border-radius: 8px !important; - color: var(--fg) !important; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.24), - 0 5px 14px rgba(0, 8, 18, 0.2) !important; +body.aero-theme #tab { + text-transform: lowercase !important; } -#tab::before { - content: ">> "; - color: var(--links); +body.aero-theme :is(#tab, #footer-button, .mobile-nav-button, .mobile-footer-button, #show-sidebar):hover, +body.aero-theme :is(#tab, #footer-button, .mobile-nav-button, .mobile-footer-button).active { + background: linear-gradient(180deg, #fbfff2, #cbed9e 48%, #79c641 51%, #b9e687) !important; + color: #174d20 !important; + border-color: #4d9c35 !important; + box-shadow: inset 0 1px #fff, 0 0 7px rgba(96,190,57,.55) !important; } -#tab:hover, -#tab.active, -#footer-button:hover, -#footer-button.active, -.theme-picker-option:hover, -.theme-picker-option.selected { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.42), rgba(255, 255, 255, 0.08) 44%), - linear-gradient(90deg, #776490, #58c8e2 54%, #82f0d8) !important; - border-color: rgba(224, 255, 255, 0.82) !important; - color: #031923 !important; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.48), - 0 8px 18px rgba(88, 200, 226, 0.26) !important; - transform: translateY(-1px); +body.aero-theme #tab::before { + content: none !important; } -#tab:hover::before, -#tab.active::before { - color: #031923; +body.aero-theme #footer-button::before { color: #1d8dcc !important; } + +body.aero-theme #content-layout, +body.aero-theme.mobile-template #content-layout, +body.aero-theme.mobile-template #content-main { + background: linear-gradient(135deg, rgba(255,255,255,.94), rgba(226,246,255,.9)) !important; + color: var(--fg) !important; + border: 1px solid rgba(255,255,255,.95) !important; + border-radius: 16px !important; + outline: 1px solid #4b98c9; + box-shadow: inset 0 1px rgba(255,255,255,.95), 0 10px 30px rgba(17,70,105,.28) !important; + backdrop-filter: blur(12px) saturate(1.15); } -#content { - padding: 34px; +body.aero-theme :is(#post, .feed-post, .journal-post, .form-card, .grid-item, .notification-item, .music-album, .gallery-item, .chat-admin-card, .account-admin-card, .site-popup-dialog, .image-modal-content, .feed-reply-notice, .bbcode-editor, #bbcode-preview, table, details, .settings-section) { + background: linear-gradient(180deg, rgba(255,255,255,.94), rgba(211,239,250,.86)) !important; + background-image: linear-gradient(180deg, rgba(255,255,255,.94), rgba(211,239,250,.86)) !important; + color: var(--fg) !important; + border: 1px solid #69a9ce !important; + border-radius: 10px !important; + box-shadow: inset 0 1px #fff, 0 3px 8px rgba(27,86,119,.14) !important; } -#content-layout { - max-width: 940px; - min-height: calc(100% - 2px); - padding: 24px 30px; - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 28%), - linear-gradient(145deg, rgba(119, 100, 144, 0.13), rgba(88, 200, 226, 0.1)), - rgba(6, 27, 39, 0.7); - border: 1px solid rgba(163, 239, 255, 0.48); - border-radius: 10px; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.24), - 0 18px 46px rgba(0, 8, 18, 0.34); - backdrop-filter: blur(18px) saturate(1.32); -} - -#content-main > *:first-child { - margin-top: 0; -} - -#post, -.account-admin-card, -.usage-card, -.form-card, -.grid-item, -pre code.hljs, -#mini-player, -#mini-player-tracks, -#sidebar-footer, -.site-popup-dialog, -#bbcode-preview { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.14), transparent 34%), - rgba(8, 31, 44, 0.72); - color: var(--fg); - border: 1px solid rgba(163, 239, 255, 0.42); - border-radius: 8px; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.18), - 0 10px 24px rgba(0, 8, 18, 0.24); - backdrop-filter: blur(12px) saturate(1.2); +body.aero-theme :is(#post, .feed-post, .journal-post, .grid-item, .music-album, .gallery-item, .account-admin-card):hover { + background: linear-gradient(180deg, #fff, #d8f3ff) !important; + border-color: #268ac4 !important; } -#post { - padding: 14px 16px; +body.aero-theme :is(input, textarea, select, .text-input, .dropdown, .bbcode-dropdown, #bbcode-textbox, #search-box) { + background: linear-gradient(180deg, #fff, #effaff) !important; + color: #17384c !important; + border: 1px solid #5d9fc7 !important; + border-radius: 6px !important; + box-shadow: inset 0 1px 3px rgba(30,84,116,.14) !important; } -#post:hover, -.account-admin-card:hover, -.usage-card:hover { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 34%), - rgba(12, 44, 60, 0.78); -} - -#post-content, -#post-title, -.form-card, -.form-card p, -.form-field label, -.checkbox-label span, -.radio-label span, -.color-row, -.color-row span, -.feed-reply-body, -.feed-reply-meta, -.guestbook-post-actions, -#content-main, -#content-main h1, -#content-main h2, -#content-main h3, -#content-main h4, -#content-main p, -#content-main li { - color: var(--fg); -} - -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -.color-input { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.11), rgba(0, 0, 0, 0.08)), - rgba(3, 20, 30, 0.8); - color: var(--fg); - border: 1px solid rgba(163, 239, 255, 0.44); - border-radius: 7px; -} - -input:hover, -input:focus, -textarea:hover, -textarea:focus, -.dropdown:hover, -.dropdown:focus, -.text-input:hover, -.text-input:focus, -.bbcode-dropdown:hover, -.bbcode-dropdown:focus, -.bbcode-btn:hover, -.bbcode-btn:focus, -#bbcode-textbox:focus { - border-color: rgba(130, 240, 216, 0.88); - box-shadow: 0 0 0 2px rgba(130, 240, 216, 0.16); +body.aero-theme :is(input, textarea, select, .text-input, .dropdown, .bbcode-dropdown, #bbcode-textbox, #search-box):focus { + background: #fff !important; + border-color: #158ed1 !important; + box-shadow: 0 0 0 3px rgba(22,142,209,.22), inset 0 1px 2px rgba(30,84,116,.1) !important; outline: none; } -button, -#search-button, -#form-button, -#lastfm-link-button, -#settings-save, -#color-reset, -.danger-button, -.site-popup-button { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.24), rgba(255, 255, 255, 0.04) 45%), - linear-gradient(90deg, #776490, #58c8e2 58%, #82f0d8); - color: #031923; - border: 1px solid rgba(224, 255, 255, 0.74); - border-radius: 8px; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.46), - 0 8px 18px rgba(0, 8, 18, 0.24); -} - -button:hover, -#search-button:hover, -#form-button:hover, -#lastfm-link-button:hover, -#settings-save:hover, -#color-reset:hover, -.site-popup-button:hover { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.08) 44%), - linear-gradient(90deg, #8b73a8, #6fd8ef 58%, #a1ffe9); - color: #031923; -} +body.aero-theme :is(select, .dropdown, .bbcode-dropdown) option { background: #effaff; color: var(--fg); } -.danger-button { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0.04)), - #8c2d3d; - color: #fff7f7; +body.aero-theme :is(button, #search-button, #form-button, #two-buttons, .bbcode-btn, input[type="submit"], input[type="button"], #settings-save, #color-reset) { + background: linear-gradient(180deg, #fbfff7, #d9f2bb 48%, #79c445 51%, #a9db77) !important; + color: #174c21 !important; + border: 1px solid #4c9538 !important; + border-radius: 7px !important; + box-shadow: inset 0 1px #fff, 0 1px 3px rgba(38,100,33,.22) !important; + text-shadow: 0 1px rgba(255,255,255,.8); } -.checkbox, -.radio { - background: rgba(3, 20, 30, 0.82); - border: 1px solid rgba(163, 239, 255, 0.44); +body.aero-theme :is(button, #search-button, #form-button, #two-buttons, .bbcode-btn, input[type="submit"], input[type="button"], #settings-save, #color-reset):hover { + background: linear-gradient(180deg, #fff, #eaffd3 48%, #8ed458 51%, #c5ed9d) !important; + color: #103d18 !important; } -.checkbox:checked { - background-color: var(--links); +body.aero-theme :is(.danger-button, .grid-delete-button, #admin-account-delete-form button) { + background: linear-gradient(180deg, #ffeded, #f09595 48%, #d84e4e 51%, #ed7777) !important; + color: #641313 !important; + border-color: #ba4141 !important; } -.radio { - border-radius: 50%; +body.aero-theme #search { + padding: 7px; + border: 1px solid #79b5d5; + border-radius: 10px; + background: rgba(189,229,247,.62) !important; } -.radio:checked { - background: radial-gradient(circle, var(--links) 0 42%, rgba(3, 20, 30, 0.82) 46%); +body.aero-theme :is(#mini-player, #mini-player-tracks, #sidebar-footer), +body.aero-theme.mobile-template :is(#mini-player, #mini-player-tracks, #sidebar-footer) { + background: linear-gradient(180deg, rgba(255,255,255,.88), rgba(175,221,241,.88)) !important; + color: var(--fg) !important; + border: 1px solid #5599c1 !important; + border-radius: 10px !important; + box-shadow: inset 0 1px #fff !important; +} + +body.aero-theme #mini-player-art-wrapper, +body.aero-theme .grid-image { border-radius: 7px; overflow: hidden; } +body.aero-theme :is(#mini-player-title-inner, .mini-track.active) { color: #0876be !important; } +body.aero-theme .mini-track { background: rgba(255,255,255,.4) !important; border-radius: 5px !important; } +body.aero-theme .mini-track:hover, +body.aero-theme .mini-track.active { background: rgba(188,235,166,.75) !important; color: #20582b !important; } +body.aero-theme #mini-player-close { background: transparent !important; border: 0 !important; box-shadow: none !important; color: #28698f !important; } +body.aero-theme :is(#mini-player-seek, #mini-player-volume) { accent-color: #68bb3f; } + +body.aero-theme :is(pre, code, blockquote) { background: rgba(212,239,250,.7) !important; color: #17384c; border-color: #79afd0 !important; } +body.aero-theme :is(#homepage-hero-ascii, #homepage-hero-ascii pre, #ascii, #ascii-time, #usage-grid, #usage-grid .usage-card, .usage-ascii, .usage-label) { background: transparent !important; border: 0 !important; box-shadow: none !important; } +body.aero-theme a { color: var(--links); } +body.aero-theme .tooltip, +body.aero-theme :is(.site-notification-toast, .chat-context-menu) { background: linear-gradient(180deg, #fff, #dff3fc) !important; color: var(--fg) !important; border-color: #4e98c4 !important; border-radius: 7px !important; } +body.aero-theme :is(.site-popup-overlay, .image-modal, .mobile-menu-backdrop) { background: rgba(22,68,94,.5) !important; backdrop-filter: blur(4px); } +body.aero-theme :is(.chat-message:not(.chat-message-own), .chat-reply-reference, .chat-reply-compose) { background: #e5f6fc !important; color: var(--fg) !important; border-color: #7eb5d2 !important; border-radius: 10px !important; } +body.aero-theme .chat-message-own { background: linear-gradient(180deg, #30a3df, #1179bb) !important; color: #fff !important; } + +/* Aero editor: compact Windows 7 toolbar chrome above a clean writing pane. */ +body.aero-theme .bbcode-editor, +body.aero-theme .feed-thread-page .bbcode-editor, +body.aero-theme .feed-markdown-editor { + overflow: hidden; + background: rgba(226, 245, 253, .92) !important; + background-image: none !important; + border: 1px solid #438fbd !important; + border-radius: 11px !important; + box-shadow: inset 0 1px #fff, 0 4px 12px rgba(23, 79, 112, .18) !important; +} + +body.aero-theme .bbcode-toolbar, +body.aero-theme .feed-thread-page .bbcode-toolbar, +body.aero-theme .feed-markdown-toolbar { + min-width: 0; + padding: 7px !important; + gap: 5px !important; + overflow: visible; + background: linear-gradient(180deg, rgba(255,255,255,.98), rgba(180,224,244,.94)) !important; + background-image: linear-gradient(180deg, rgba(255,255,255,.98), rgba(180,224,244,.94)) !important; + border: 0 !important; + border-bottom: 1px solid #438fbd !important; + border-radius: 10px 10px 0 0 !important; + box-shadow: inset 0 1px #fff !important; +} + +body.aero-theme .feed-markdown-formatting { + gap: 3px; + padding: 1px 2px 4px 1px; + scrollbar-color: #4f9dca transparent; +} + +body.aero-theme .feed-markdown-actions { + gap: 3px; + margin-left: 2px; + padding-left: 7px; + border-left-color: rgba(55, 132, 176, .45); +} + +body.aero-theme .bbcode-btn, +body.aero-theme .feed-thread-page .bbcode-btn, +body.aero-theme .feed-markdown-editor .bbcode-btn, +body.aero-theme .journal-markdown-editor .bbcode-btn { + display: inline-flex; + width: 34px; + min-width: 34px; + height: 32px; + padding: 0 !important; + align-items: center; + justify-content: center; + background: linear-gradient(180deg, #fff 0%, #dff4fd 47%, #acd8ee 50%, #d9f1fb 100%) !important; + background-image: linear-gradient(180deg, #fff 0%, #dff4fd 47%, #acd8ee 50%, #d9f1fb 100%) !important; + color: #15597e !important; + border: 1px solid #4b94bf !important; + border-radius: 6px !important; + box-shadow: inset 0 1px #fff, 0 1px 2px rgba(24, 77, 108, .16) !important; + text-shadow: 0 1px #fff; +} + +body.aero-theme .bbcode-btn:hover, +body.aero-theme .bbcode-btn:focus-visible { + background: linear-gradient(180deg, #fff, #e7f8ff 47%, #8dcae8 50%, #c9ecfa) !important; + color: #064f78 !important; + border-color: #147db7 !important; + box-shadow: 0 0 0 2px rgba(22, 142, 209, .18), inset 0 1px #fff !important; + outline: none; } -input[type="range"] { - accent-color: var(--links); +body.aero-theme .bbcode-btn:active, +body.aero-theme .bbcode-btn[aria-pressed="true"] { + background: linear-gradient(180deg, #83bddb, #d9f1fb) !important; + box-shadow: inset 0 2px 3px rgba(28, 84, 116, .24) !important; + transform: none; +} + +body.aero-theme .bbcode-btn:disabled, +body.aero-theme .bbcode-btn.disabled { + opacity: .48; + filter: grayscale(.35); +} + +body.aero-theme .bbcode-dropdown, +body.aero-theme .feed-thread-page .bbcode-dropdown { + width: auto; + min-width: 72px; + height: 32px; + padding: 4px 24px 4px 8px !important; + background: linear-gradient(180deg, #fff, #d9eff9) !important; + color: #174967 !important; + border: 1px solid #4b94bf !important; + border-radius: 6px !important; + box-shadow: inset 0 1px #fff !important; +} + +body.aero-theme #bbcode-textbox, +body.aero-theme .feed-thread-page #bbcode-textbox, +body.aero-theme .feed-markdown-editor #bbcode-textbox, +body.aero-theme .markdown-highlight-layer, +body.aero-theme #bbcode-preview, +body.aero-theme .feed-markdown-preview { + margin: 0 !important; + background: rgba(250, 254, 255, .96) !important; + background-image: none !important; + color: #18384b !important; + border: 0 !important; + border-radius: 0 0 10px 10px !important; + box-shadow: inset 0 2px 4px rgba(32, 93, 127, .1) !important; + caret-color: #0876be; +} + +body.aero-theme #bbcode-textbox::placeholder, +body.aero-theme .markdown-highlight-input::placeholder { + color: #718d9d !important; + opacity: 1; +} + +body.aero-theme #bbcode-textbox:focus { + background: #fff !important; + box-shadow: inset 0 0 0 2px rgba(22, 142, 209, .16) !important; + outline: none; } -#mini-player, -#mini-player-tracks { - color: var(--fg); +body.aero-theme .markdown-highlight-input { + background: transparent !important; + border: 0 !important; + border-radius: 0 0 10px 10px !important; + box-shadow: none !important; } -#mini-player-art-wrapper, -#mini-player-art { - border-radius: 6px; - background: rgba(3, 20, 30, 0.88); - border-color: rgba(163, 239, 255, 0.36); +body.aero-theme .markdown-highlight-input:focus { + background: transparent !important; + outline: none; } -#mini-player-download, -#mini-player-play, -#mini-player-controls span { - color: var(--links); +body.aero-theme :is(.bbcode-voice-recorder, .chat-voice-recorder) { + background: linear-gradient(180deg, #f8fdff, #d8eff9) !important; + color: var(--fg) !important; + border: 0 !important; + border-top: 1px solid #6ca8c9 !important; } -#mini-player-download:hover, -#mini-player-play:hover, -#mini-player-controls span:hover, -.mini-track:hover, -.mini-track.active { - background: rgba(130, 240, 216, 0.18); - color: var(--fg); +/* Compact Winamp-inspired player skin inside the bright Aero shell. */ +body.aero-theme #mini-player, +body.aero-theme.mobile-template #mini-player { + position: relative; + padding: 22px 7px 7px !important; + background: + linear-gradient(90deg, rgba(255,255,255,.08) 1px, transparent 1px) 0 0 / 3px 3px, + linear-gradient(180deg, #3c4656, #1a202a) !important; + color: #d9e2e8 !important; + border: 2px solid !important; + border-color: #eef3f7 #111720 #111720 #eef3f7 !important; + border-radius: 2px !important; + box-shadow: inset 1px 1px #778393, inset -1px -1px #080b10 !important; + font-family: "Aero Tahoma", Tahoma, sans-serif !important; +} + +body.aero-theme #mini-player::before { + content: "FRIDGEAMP"; + position: absolute; + top: 4px; + left: 7px; + color: #f1f4f6; + font-family: "Aero Tahoma", Tahoma, sans-serif; + font-size: 9px; + font-weight: bold; + line-height: 12px; + letter-spacing: 1.3px; + text-shadow: 1px 1px #06090d; +} + +body.aero-theme #mini-player::after { + content: ""; + position: absolute; + top: 7px; + right: 27px; + left: 78px; + height: 3px; + border-top: 1px solid #8996a6; + border-bottom: 1px solid #10151d; +} + +body.aero-theme #mini-player-main { gap: 6px !important; } + +body.aero-theme #mini-player-art-wrapper { + width: 42px !important; + height: 42px !important; + flex: 0 0 42px !important; + margin: 0 !important; + background: #050806 !important; + border: 2px solid !important; + border-color: #080b10 #778393 #778393 #080b10 !important; + border-radius: 0 !important; + box-shadow: none !important; +} + +body.aero-theme #mini-player-art { border-radius: 0 !important; } + +body.aero-theme #mini-player-download { + background: rgba(5, 8, 6, .78) !important; + color: #8eff54 !important; + border-radius: 0 !important; +} + +body.aero-theme #mini-player-meta { + gap: 3px !important; + min-width: 0; +} + +body.aero-theme #mini-player-title, +body.aero-theme #mini-player-artist { + min-width: 0; + padding: 2px 5px !important; + box-sizing: border-box; + overflow: hidden; + background: #07100a !important; + border: 1px solid !important; + border-color: #050806 #5b6875 #5b6875 #050806 !important; + border-radius: 0 !important; + color: #8eff54 !important; + font-family: "Aero Tahoma", Tahoma, sans-serif !important; + font-size: 10px !important; + line-height: 13px !important; + text-shadow: 0 0 4px rgba(106,255,66,.5) !important; +} + +body.aero-theme #mini-player-title-inner, +body.aero-theme #mini-player-title-inner.scrolling, +body.aero-theme #mini-player-artist { + color: #8eff54 !important; + font-family: inherit !important; +} + +body.aero-theme #mini-player-artist { color: #5fcf42 !important; } +body.aero-theme #mini-player-row { gap: 4px !important; align-items: center !important; } + +body.aero-theme :is(#mini-player-play, #mini-player-mute) { + display: inline-flex; + width: 20px !important; + min-width: 20px !important; + height: 18px !important; + align-items: center; + justify-content: center; + box-sizing: border-box; + background: linear-gradient(180deg, #d8dde1, #788493) !important; + color: #10161e !important; + border: 1px solid !important; + border-color: #f5f7f8 #303945 #303945 #f5f7f8 !important; + border-radius: 0 !important; + box-shadow: inset 1px 1px rgba(255,255,255,.45) !important; + font-size: 9px !important; + text-shadow: none !important; +} + +body.aero-theme :is(#mini-player-play, #mini-player-mute):hover { + background: linear-gradient(180deg, #f0f3f5, #91a0b0) !important; + color: #005ba0 !important; +} + +body.aero-theme :is(#mini-player-play, #mini-player-mute):active { + border-color: #303945 #f5f7f8 #f5f7f8 #303945 !important; + background: #768291 !important; +} + +body.aero-theme #mini-player-volume-wrapper { gap: 3px !important; } + +body.aero-theme :is(#mini-player-seek, #mini-player-volume) { + height: 10px !important; + padding: 0 !important; + background: #080d13 !important; + border: 1px solid !important; + border-color: #05070a #66717d #66717d #05070a !important; + border-radius: 0 !important; + box-shadow: none !important; + accent-color: #168ed1; +} + +body.aero-theme :is(#mini-player-seek, #mini-player-volume)::-webkit-slider-runnable-track { + height: 4px; + background: linear-gradient(90deg, #0879c4, #61d8ff) !important; + border: 0 !important; + border-radius: 0 !important; +} + +body.aero-theme :is(#mini-player-seek, #mini-player-volume)::-webkit-slider-thumb { + width: 7px !important; + height: 10px !important; + margin-top: -3px !important; + background: linear-gradient(90deg, #e2e6e9, #788492) !important; + border: 1px solid #222b35 !important; + border-radius: 0 !important; + box-shadow: none !important; +} + +body.aero-theme :is(#mini-player-seek, #mini-player-volume)::-moz-range-track { + height: 4px; + background: linear-gradient(90deg, #0879c4, #61d8ff) !important; + border: 0 !important; + border-radius: 0 !important; +} + +body.aero-theme :is(#mini-player-seek, #mini-player-volume)::-moz-range-thumb { + width: 7px !important; + height: 10px !important; + background: linear-gradient(90deg, #e2e6e9, #788492) !important; + border: 1px solid #222b35 !important; + border-radius: 0 !important; + box-shadow: none !important; +} + +body.aero-theme #mini-player-close { + top: 3px !important; + right: 5px !important; + width: 15px !important; + height: 14px !important; + min-width: 15px !important; + background: linear-gradient(180deg, #d8dde1, #788493) !important; + color: #751414 !important; + border: 1px solid !important; + border-color: #f5f7f8 #303945 #303945 #f5f7f8 !important; + border-radius: 0 !important; + box-shadow: none !important; + font-size: 9px !important; +} + +body.aero-theme #mini-player-tracks, +body.aero-theme.mobile-template #mini-player-tracks { + padding: 3px !important; + background: #080d13 !important; + background-image: none !important; + color: #8eff54 !important; + border: 2px solid !important; + border-color: #080b10 #75808e #75808e #080b10 !important; + border-radius: 0 !important; + box-shadow: none !important; + font-family: "Aero Tahoma", Tahoma, sans-serif !important; +} + +body.aero-theme .mini-track { + padding: 4px 5px !important; + background: #080d13 !important; + color: #76df4e !important; + border: 0 !important; + border-radius: 0 !important; + font-family: inherit !important; + font-size: 10px !important; +} + +body.aero-theme .mini-track:hover, +body.aero-theme .mini-track.active { + background: #1d4f78 !important; + color: #fff !important; +} + +body.aero-theme.mobile-template :is(.mobile-collapsed-header, #show-sidebar) { + background: linear-gradient(180deg, rgba(255,255,255,.95), rgba(158,216,242,.92)) !important; + color: #155779 !important; + border-color: #408dbb !important; +} +body.aero-theme.mobile-template #sidebar { + width: calc(100% - 16px) !important; + max-width: none !important; + min-width: 0 !important; + box-sizing: border-box !important; } +body.aero-theme.mobile-template #content { background: transparent !important; color: var(--fg) !important; } -#mini-player-title-inner, -.mini-track { - color: var(--fg); +@media (max-width: 600px) { + body.aero-theme .bbcode-toolbar, + body.aero-theme .feed-markdown-toolbar { padding: 6px !important; gap: 3px !important; } + body.aero-theme .bbcode-btn, + body.aero-theme .feed-markdown-editor .bbcode-btn { width: 31px; min-width: 31px; height: 30px; } + body.aero-theme .feed-markdown-actions { padding-left: 5px; } + body.aero-theme.mobile-template #mini-player { padding-top: 22px !important; } + body.aero-theme.mobile-template #mini-player-art-wrapper { width: 38px !important; height: 38px !important; flex-basis: 38px !important; } } -.tooltip { - background: rgba(4, 25, 36, 0.94); - color: var(--fg); - border-color: rgba(163, 239, 255, 0.48); - box-shadow: 0 10px 24px rgba(0, 8, 18, 0.38); +/* Calm Aero palette: misty blue glass and soft sage instead of saturated cyan + and lime, while retaining enough separation for controls and content. */ +body.aero-theme { + --bg: #dce9ee; + --fg: #29434e; + --border: #7899a7; + --subtle: #667d86; + --links: #3f7892; + --chat-own-bg: #5d8799; + --hero-ascii-muted: #8ba8b4; + --hero-ascii-1: #537f98; + --hero-ascii-2: #598ba1; + --hero-ascii-3: #6096a5; + --hero-ascii-4: #6c9f9d; + --hero-ascii-5: #78a58d; + --hero-ascii-6: #86aa7d; + --hero-ascii-7: #94ae75; + --selection-bg: #648da0; + --scrollbar-track: #d9e6eb; + --scrollbar-thumb: #8aa7b3; + --scrollbar-thumb-hover: #668c9d; } -.theme-picker-menu { - background: rgba(5, 24, 35, 0.95); - border-color: rgba(163, 239, 255, 0.48); -} +body.aero-theme, +body.aero-theme.mobile-template { background-color: #91b9c8 !important; } -.theme-picker-description, -.theme-picker-option-description { - color: var(--subtle); +body.aero-theme #sidebar, +body.aero-theme.mobile-template #sidebar { + background: linear-gradient(180deg, rgba(239,247,249,.9), rgba(200,221,228,.86)) !important; + border-right-color: #7699a8 !important; + box-shadow: inset -1px 0 rgba(255,255,255,.7), 6px 0 18px rgba(42,72,84,.18) !important; } -.theme-picker-option:hover .theme-picker-option-title, -.theme-picker-option:hover .theme-picker-option-description, -.theme-picker-option.selected .theme-picker-option-title, -.theme-picker-option.selected .theme-picker-option-description { - color: #031923 !important; +body.aero-theme #header { + background: linear-gradient(180deg, rgba(255,255,255,.88), rgba(193,220,230,.68)) !important; + border-color: #7d9faa !important; } -.chat-view { - --chat-bg: rgba(7, 28, 40, 0.72); - --chat-fg: #edfaff; - --chat-border: rgba(163, 239, 255, 0.42); - --chat-muted: #9dccd8; - --chat-own-bg: #82f0d8; - --chat-own-fg: #052b35; - --chat-other-bg: rgba(28, 65, 80, 0.84); - --chat-other-fg: #edfaff; +body.aero-theme #title, +body.aero-theme #title .title-letter, +body.aero-theme .mobile-collapsed-title, +body.aero-theme .mobile-collapsed-title .title-letter { + background-image: linear-gradient(0deg, #547f97, #6997a8 44%, #87a979 49%, #6991a0 56%, #547f97) !important; } - -body.mobile-template { - background: - radial-gradient(ellipse at 22% 4%, rgba(150, 236, 255, 0.32), transparent 34%), - radial-gradient(ellipse at 86% 84%, rgba(130, 240, 216, 0.18), transparent 32%), - linear-gradient(180deg, #081524 0%, #0b2f43 46%, #082b36 68%, #06151d 100%) !important; - color: var(--fg) !important; +body.aero-theme :is(#tab, #footer-button, .mobile-nav-button, .mobile-footer-button, #show-sidebar) { + background: linear-gradient(180deg, #f8fbfc, #d9e8ed 52%, #c2d8e0) !important; + color: #355868 !important; + border-color: #7899a7 !important; } -body.mobile-template #sidebar { - width: 100% !important; - min-width: 0 !important; - max-width: none !important; - height: auto !important; - min-height: 0 !important; - box-sizing: border-box !important; +body.aero-theme :is(#tab, #footer-button, .mobile-nav-button, .mobile-footer-button, #show-sidebar):hover, +body.aero-theme :is(#tab, #footer-button, .mobile-nav-button, .mobile-footer-button).active { + background: linear-gradient(180deg, #f7faf3, #dce8d4 52%, #c1d4b8) !important; + color: #3f6045 !important; + border-color: #7f9e79 !important; + box-shadow: inset 0 1px #fff, 0 0 5px rgba(105,143,98,.24) !important; } -body.mobile-template #sidebar, -body.mobile-template .mobile-collapsed-header, -body.mobile-template #content-layout, -body.mobile-template #content-main, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks, -body.mobile-template #sidebar-footer { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.16), transparent 28%), - rgba(6, 27, 39, 0.82) !important; - color: var(--fg) !important; - border-color: rgba(163, 239, 255, 0.48) !important; - border-radius: 10px !important; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.2), - 0 12px 26px rgba(0, 8, 18, 0.28) !important; +body.aero-theme #content-layout, +body.aero-theme.mobile-template #content-layout, +body.aero-theme.mobile-template #content-main { + background: linear-gradient(135deg, rgba(249,251,250,.94), rgba(223,235,239,.92)) !important; + outline-color: #7899a7; + box-shadow: inset 0 1px rgba(255,255,255,.94), 0 9px 24px rgba(42,72,84,.2) !important; } -body.mobile-template #content { - padding: 12px 10px 16px !important; +body.aero-theme :is(#post, .feed-post, .journal-post, .form-card, .grid-item, .notification-item, .music-album, .gallery-item, .chat-admin-card, .account-admin-card, .site-popup-dialog, .image-modal-content, .feed-reply-notice, .bbcode-editor, #bbcode-preview, table, details, .settings-section) { + background: linear-gradient(180deg, rgba(250,252,251,.94), rgba(218,232,236,.9)) !important; + border-color: #8aa5af !important; } -body.mobile-template #content-layout { - padding: 16px !important; +body.aero-theme :is(#post, .feed-post, .journal-post, .grid-item, .music-album, .gallery-item, .account-admin-card):hover { + background: linear-gradient(180deg, #fbfcfb, #e1edf0) !important; + border-color: #6e929f !important; } -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button, -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 42%), - linear-gradient(90deg, rgba(119, 100, 144, 0.22), rgba(88, 200, 226, 0.18)), - rgba(7, 36, 51, 0.76) !important; +body.aero-theme :is(input, textarea, select, .text-input, .dropdown, .bbcode-dropdown, #bbcode-textbox, #search-box) { + background: linear-gradient(180deg, #fafcfb, #edf3f4) !important; + color: var(--fg) !important; + border-color: #819faa !important; +} + +body.aero-theme :is(input, textarea, select, .text-input, .dropdown, .bbcode-dropdown, #bbcode-textbox, #search-box):focus { + border-color: #648da0 !important; + box-shadow: 0 0 0 3px rgba(100,141,160,.16), inset 0 1px 2px rgba(48,75,86,.08) !important; +} + +body.aero-theme :is(button:not(#mini-player-close):not(.bbcode-btn):not(.danger-button):not(.grid-delete-button), #search-button, #form-button, #two-buttons, input[type="submit"], input[type="button"], #settings-save, #color-reset) { + background: linear-gradient(180deg, #f8faf6, #dce8d5 52%, #bfd2b7) !important; + color: #3c5c42 !important; + border-color: #7d9c77 !important; + box-shadow: inset 0 1px #fff, 0 1px 2px rgba(57,87,53,.14) !important; +} + +body.aero-theme :is(button:not(#mini-player-close):not(.bbcode-btn):not(.danger-button):not(.grid-delete-button), #search-button, #form-button, #two-buttons, input[type="submit"], input[type="button"], #settings-save, #color-reset):hover { + background: linear-gradient(180deg, #fff, #e6efe1 52%, #cbdcc4) !important; + color: #34533a !important; +} + +body.aero-theme .bbcode-toolbar, +body.aero-theme .feed-markdown-toolbar { + background: linear-gradient(180deg, rgba(250,252,252,.98), rgba(202,222,229,.96)) !important; + border-bottom-color: #7899a7 !important; +} + +body.aero-theme .bbcode-btn, +body.aero-theme .feed-thread-page .bbcode-btn, +body.aero-theme .feed-markdown-editor .bbcode-btn, +body.aero-theme .journal-markdown-editor .bbcode-btn { + background: linear-gradient(180deg, #fafcfc, #dce9ed 52%, #c4d9e0) !important; + color: #416779 !important; + border-color: #7b9ba8 !important; +} + +body.aero-theme .bbcode-btn:hover, +body.aero-theme .bbcode-btn:focus-visible { + background: linear-gradient(180deg, #fff, #e5eff2 52%, #d0e1e6) !important; + color: #345f73 !important; + border-color: #648da0 !important; +} + +body.aero-theme :is(.checkbox, .radio), +body.aero-theme.mobile-template :is(.checkbox, .radio) { + width: 16px; + height: 16px; + padding: 0 !important; + appearance: none; + -webkit-appearance: none; + background: linear-gradient(180deg, #fbfcfb, #dfe9ec) !important; + border: 1px solid #718f9b !important; + box-shadow: inset 0 1px #fff, 0 1px 2px rgba(48,75,86,.12) !important; +} + +body.aero-theme .checkbox, +body.aero-theme.mobile-template .checkbox { border-radius: 3px !important; } + +body.aero-theme .checkbox:checked, +body.aero-theme.mobile-template .checkbox:checked { + background-color: #789d75 !important; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.2 8.1 6.5 11l6.3-7' fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important; + background-position: center !important; + background-size: 14px 14px !important; + background-repeat: no-repeat !important; + border-color: #668861 !important; + box-shadow: inset 0 1px rgba(255,255,255,.3), 0 1px 2px rgba(48,75,52,.16) !important; +} + +body.aero-theme .radio, +body.aero-theme.mobile-template .radio { border-radius: 50% !important; } + +body.aero-theme .radio:checked, +body.aero-theme.mobile-template .radio:checked { + background: radial-gradient(circle, #6f966c 0 38%, #f7faf8 42% 58%, #dfe9ec 62%) !important; + border-color: #668861 !important; + box-shadow: inset 0 1px #fff, 0 1px 2px rgba(48,75,52,.16) !important; +} + +/* Keep the retro player dark, but replace its neon display and electric-blue + accents with softer phosphor and slate tones. */ +body.aero-theme #mini-player-title, +body.aero-theme #mini-player-artist, +body.aero-theme #mini-player-title-inner, +body.aero-theme #mini-player-title-inner.scrolling { + color: #b4cea4 !important; + text-shadow: 0 0 3px rgba(180,206,164,.3) !important; +} +body.aero-theme #mini-player-artist { color: #91ad84 !important; } +body.aero-theme #mini-player-download, +body.aero-theme #mini-player-tracks, +body.aero-theme .mini-track { color: #abc99a !important; } +body.aero-theme :is(#mini-player-seek, #mini-player-volume)::-webkit-slider-runnable-track { background: linear-gradient(90deg, #527e94, #8ab2c1) !important; } +body.aero-theme :is(#mini-player-seek, #mini-player-volume)::-moz-range-track { background: linear-gradient(90deg, #527e94, #8ab2c1) !important; } +body.aero-theme .mini-track:hover, +body.aero-theme .mini-track.active { background: #3e6074 !important; color: #f4f7f5 !important; } + +/* Complete mobile shell coverage, including the high-specificity player rules + embedded by the shared mobile template. */ +body.aero-theme.mobile-template #sidebar { + width: calc(100% - 16px) !important; + min-width: 0 !important; + max-width: none !important; + padding-bottom: 10px !important; + box-sizing: border-box !important; + border: 1px solid rgba(255,255,255,.82) !important; + border-right-color: #7899a7 !important; + border-radius: 13px !important; +} +body.aero-theme.mobile-template .mobile-nav-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)) !important; + gap: 7px !important; + padding: 8px 10px 0 !important; +} +body.aero-theme.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button { + min-width: 0 !important; + min-height: 40px !important; + background: linear-gradient(180deg, #f8fbfc, #d9e8ed 52%, #c2d8e0) !important; + color: #355868 !important; + border: 1px solid #7899a7 !important; + border-radius: 7px !important; +} +body.aero-theme.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, +body.aero-theme.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active { + background: linear-gradient(180deg, #f7faf3, #dce8d4 52%, #c1d4b8) !important; + color: #3f6045 !important; + border-color: #7f9e79 !important; +} +body.aero-theme.mobile-template #content { padding: 10px !important; } +body.aero-theme.mobile-template #content-layout { + padding: 0 !important; + background: transparent !important; + border: 0 !important; + outline: 0 !important; + box-shadow: none !important; +} +body.aero-theme.mobile-template #content-main { + min-width: 0 !important; + padding: 16px 14px !important; + background: linear-gradient(135deg, rgba(249,251,250,.96), rgba(223,235,239,.94)) !important; + border: 1px solid rgba(255,255,255,.9) !important; + border-radius: 12px !important; + outline: 1px solid #7899a7 !important; + box-shadow: 0 7px 20px rgba(42,72,84,.16) !important; + overflow-x: hidden !important; +} +body.aero-theme.mobile-template #sidebar #mini-player { + margin: 8px 10px 0 !important; + padding: 22px 7px 7px !important; + width: auto !important; + background: linear-gradient(180deg, #3c4656, #1a202a) !important; + border: 2px solid !important; + border-color: #eef3f7 #111720 #111720 #eef3f7 !important; + border-radius: 2px !important; +} +body.aero-theme.mobile-template #sidebar #mini-player-main { + grid-template-columns: 46px minmax(0, 1fr) !important; + gap: 7px !important; +} +body.aero-theme.mobile-template #sidebar #mini-player-art-wrapper { width: 46px !important; height: 46px !important; } +body.aero-theme.mobile-template #sidebar #mini-player-title-inner { color: #b4cea4 !important; font-family: "Aero Tahoma", Tahoma, sans-serif !important; } +body.aero-theme.mobile-template #sidebar #mini-player-artist { color: #91ad84 !important; } +body.aero-theme.mobile-template #sidebar #mini-player-play { background: linear-gradient(180deg, #d8dde1, #788493) !important; color: #10161e !important; border: 1px solid #303945 !important; } +body.aero-theme.mobile-template #sidebar #mini-player-close { background: linear-gradient(180deg, #d8dde1, #788493) !important; color: #751414 !important; border: 1px solid #303945 !important; } +body.aero-theme.mobile-template #sidebar #mini-player-tracks { + margin: 8px 10px 0 !important; + background: #080d13 !important; + color: #abc99a !important; + border: 2px solid #65717d !important; + border-radius: 0 !important; +} +body.aero-theme.mobile-template #sidebar #sidebar-footer { + margin: 8px 10px 0 !important; + background: rgba(239,247,249,.9) !important; color: var(--fg) !important; - border-color: rgba(163, 239, 255, 0.48) !important; + border: 1px solid #7899a7 !important; border-radius: 8px !important; } - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover, -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-collapsed-header #show-sidebar:hover { - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.42), rgba(255, 255, 255, 0.08) 44%), - linear-gradient(90deg, #776490, #58c8e2 54%, #82f0d8) !important; - color: #031923 !important; - border-color: rgba(224, 255, 255, 0.82) !important; -} - -body.mobile-template input, -body.mobile-template textarea, -body.mobile-template .dropdown, -body.mobile-template .text-input, -body.mobile-template .bbcode-dropdown, -body.mobile-template .bbcode-btn, -body.mobile-template #bbcode-textbox, -body.mobile-template #bbcode-preview, -body.mobile-template .checkbox, -body.mobile-template .radio, -body.mobile-template .color-input { - background: rgba(3, 20, 30, 0.86) !important; +body.aero-theme.mobile-template :is(#post, .feed-post, .journal-post, .notification-item, .music-album, .gallery-item, .form-card, .grid-item, .chat-admin-card, .account-admin-card, .settings-section, details, table) { + background: linear-gradient(180deg, rgba(250,252,251,.96), rgba(218,232,236,.94)) !important; color: var(--fg) !important; - border-color: rgba(163, 239, 255, 0.44) !important; + border: 1px solid #8aa5af !important; + border-radius: 9px !important; + box-shadow: inset 0 1px #fff, 0 2px 6px rgba(42,72,84,.12) !important; +} +body.aero-theme.mobile-template :is(#post, .feed-post, .journal-post, .grid-item, .music-album, .gallery-item, .account-admin-card):hover { + background: linear-gradient(180deg, #fbfcfb, #e1edf0) !important; + border-color: #6e929f !important; +} +body.aero-theme.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { + background: linear-gradient(180deg, #f8fbfc, #d9e8ed 52%, #c2d8e0) !important; + color: #355868 !important; + border: 1px solid #7899a7 !important; + border-radius: 7px !important; +} +body.aero-theme.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, +body.aero-theme.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { + background: linear-gradient(180deg, #f7faf3, #dce8d4 52%, #c1d4b8) !important; + color: #3f6045 !important; + border-color: #7f9e79 !important; +} +body.aero-theme.mobile-template :is(#post-content, #post-title, #post-header, .grid-caption, .form-card, .settings-section) { color: var(--fg) !important; } +body.aero-theme.mobile-template :is(#post-description, #post-date, #post-date-feed, #post-username, .grid-subcaption) { color: var(--subtle) !important; } +body.aero-theme.mobile-template :is(input, textarea, select, .text-input, .dropdown, .bbcode-dropdown, #bbcode-textbox) { max-width: 100% !important; box-sizing: border-box !important; } +body.aero-theme.mobile-template :is(table, pre, code, img, video, iframe) { max-width: 100% !important; } +body.aero-theme.mobile-template :is(pre, table) { overflow-x: auto !important; } + +html.access-high-contrast body.aero-theme { + --bg: #ffffff !important; + --fg: #000000 !important; + --border: #003f68 !important; + --subtle: #243842 !important; + --links: #004f88 !important; +} + +@media (prefers-reduced-motion: reduce) { + body.aero-theme .paper-grain { background-attachment: scroll; } } -body.aero-theme .content-pagination .guestbook-page-btn { border-radius: 7px; } diff --git a/themes/lib/aero/aero.html b/themes/lib/aero/aero.html index 59116af..8101cc3 100644 --- a/themes/lib/aero/aero.html +++ b/themes/lib/aero/aero.html @@ -5,112 +5,28 @@ {title} | fridge.dev + + - + + - - - - - - - - + + + + + - - - - + - -
- - - -
-
-
- -
-{content} -
- -
- - -
-
-
- - +
{content}
+ + diff --git a/themes/lib/aero/background.jpg b/themes/lib/aero/background.jpg new file mode 100644 index 0000000..3108bfb Binary files /dev/null and b/themes/lib/aero/background.jpg differ diff --git a/themes/lib/ambercrt/ambercrt.css b/themes/lib/ambercrt/ambercrt.css deleted file mode 100644 index 0ddae31..0000000 --- a/themes/lib/ambercrt/ambercrt.css +++ /dev/null @@ -1,886 +0,0 @@ -:root { - --bg: #080502; - --fg: #ffb84d; - --border: #b96c19; - --subtle: #b9803d; - --links: #ffd27a; - --chat-own-fg: #120802; - --hero-ascii-muted: #8f5c28; - --hero-ascii-1: #b96c19; - --hero-ascii-2: #c87922; - --hero-ascii-3: #d8892d; - --hero-ascii-4: #e79a3d; - --hero-ascii-5: #f2ad55; - --hero-ascii-6: #ffc16a; - --hero-ascii-7: #ffd27a; - --hero-ascii-opacity: 0.95; -} - -body.ambercrt-theme, -body.ambercrt-theme *:not(#title):not(#title *):not(.mobile-collapsed-title):not(.mobile-collapsed-title *):not(.fa):not(.fa-solid):not(.fa-regular):not(.fa-brands):not([class^="fa-"]):not([class*=" fa-"]) { - font-family: 'IBM_VGA', var(--emoji-font), monospace !important; -} - -body { - background: - radial-gradient(ellipse at 50% 45%, rgba(255, 137, 20, 0.12), transparent 62%), - linear-gradient(180deg, #130902 0%, #060301 100%); - color: var(--fg); - text-shadow: 0 0 7px rgba(255, 168, 68, 0.36); -} - -.crt-glass { - position: fixed; - inset: 0; - z-index: 50; - pointer-events: none; - background: - repeating-linear-gradient(0deg, rgba(255, 183, 76, 0.08) 0 1px, transparent 1px 4px), - radial-gradient(ellipse at center, transparent 0 62%, rgba(0, 0, 0, 0.38) 100%); - mix-blend-mode: screen; -} - -#page-wrapper, -#container { - background: transparent; -} - -#sidebar { - background: rgba(10, 5, 1, 0.94); - border-right: 1px solid var(--border); - box-shadow: inset -12px 0 26px rgba(255, 137, 20, 0.08); -} - -#header { - padding: 14px; - border-bottom: 1px solid rgba(255, 184, 77, 0.34); -} - -#title, -.mobile-collapsed-title { - color: var(--fg); - text-shadow: - 0 0 8px rgba(255, 184, 77, 0.72), - 0 0 22px rgba(255, 111, 0, 0.42); -} - -#subtitle, -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -.usage-label { - color: var(--subtle); -} - -#sidebar > a { - display: block; - margin: 0 12px 6px 12px; -} - -#tab { - border: 1px solid transparent; - border-radius: 0; - background: transparent; - color: var(--fg); - text-align: left; -} - -#tab::before { - content: "run "; - color: var(--subtle); -} - -#tab:hover, -#tab.active { - color: #100701; - background: var(--fg); - border-color: var(--links); - text-shadow: none; - box-shadow: 0 0 18px rgba(255, 184, 77, 0.46); -} - -#content { - padding: 28px; -} - -#content-layout { - min-height: calc(100% - 2px); - padding: 20px; - background: rgba(6, 3, 1, 0.82); - border: 1px solid var(--border); - box-shadow: - inset 0 0 60px rgba(255, 112, 0, 0.08), - 0 0 42px rgba(255, 112, 0, 0.12); -} - -#content-layout::before { - content: "fridg3 terminal"; - display: block; - margin: 0 0 18px 0; - padding-bottom: 8px; - color: var(--subtle); - border-bottom: 1px dashed rgba(255, 184, 77, 0.32); -} - -#content-main > *:first-child { - margin-top: 0; -} - -a { - color: var(--links); -} - -#post, -.account-admin-card, -.usage-card, -pre code.hljs { - background: rgba(16, 8, 2, 0.86); - border: 1px solid rgba(255, 184, 77, 0.36); - border-radius: 0; - box-shadow: inset 0 0 22px rgba(255, 112, 0, 0.05); -} - -#post { - padding: 14px; -} - -#search-box, -input, -textarea, -.dropdown { - background: #080502; - color: var(--fg); - border: 1px solid var(--border); - border-radius: 0; - text-shadow: 0 0 5px rgba(255, 184, 77, 0.32); -} - -#search-button, -#form-button, -#lastfm-link-button, -#settings-save, -#color-reset, -.danger-button, -button, -#footer-button { - background: transparent; - color: var(--fg); - border: 1px solid var(--border); - border-radius: 0; -} - -#search-button:hover, -#form-button:hover, -#settings-save:hover, -#color-reset:hover, -button:hover, -#footer-button:hover { - background: var(--fg); - color: #100701; - text-shadow: none; -} - -#mini-player, -#mini-player-tracks, -#sidebar-footer { - margin: 10px 12px; - width: calc(100% - 24px); - box-sizing: border-box; - background: rgba(6, 3, 1, 0.86); - border: 1px solid rgba(255, 184, 77, 0.38); - border-radius: 0; - box-shadow: - inset 0 0 18px rgba(255, 112, 0, 0.08), - 0 0 16px rgba(255, 112, 0, 0.08); -} - -#mini-player { - padding: 10px; - overflow-x: hidden; -} - -#mini-player-main { - gap: 7px; - align-items: center; -} - -#mini-player-art-wrapper { - width: 30px; - height: 30px; - margin-top: 0; -} - -#mini-player-art { - border-color: rgba(255, 184, 77, 0.48); - box-shadow: 0 0 10px rgba(255, 112, 0, 0.16); -} - -#mini-player-meta { - min-width: 0; - gap: 5px; -} - -#mini-player-title { - line-height: 1; -} - -#mini-player-title-inner { - display: block; - max-width: 100%; - overflow: hidden; - color: var(--links); - font-size: 11px; - text-overflow: ellipsis; - white-space: nowrap; -} - -#mini-player-row { - gap: 6px; -} - -#mini-player-play, -#mini-player-controls span { - color: var(--fg); - text-shadow: 0 0 7px rgba(255, 168, 68, 0.44); -} - -#mini-player-play:hover, -#mini-player-controls span:hover { - color: var(--links); -} - -#mini-player-seek, -#mini-player-volume { - height: 5px; - background: #050200; - border: 1px solid rgba(255, 184, 77, 0.42); - border-radius: 0; - box-shadow: - inset 0 0 6px rgba(0, 0, 0, 0.8), - 0 0 8px rgba(255, 112, 0, 0.12); - accent-color: var(--fg); -} - -#mini-player-seek::-webkit-slider-thumb, -#mini-player-volume::-webkit-slider-thumb { - width: 10px; - height: 12px; - border-radius: 0; - background: var(--fg); - border: 1px solid var(--links); - box-shadow: 0 0 8px rgba(255, 184, 77, 0.5); -} - -#mini-player-seek::-moz-range-track, -#mini-player-volume::-moz-range-track { - height: 5px; - background: #050200; - border: 1px solid rgba(255, 184, 77, 0.42); - border-radius: 0; -} - -#mini-player-seek::-moz-range-thumb, -#mini-player-volume::-moz-range-thumb { - width: 10px; - height: 12px; - border-radius: 0; - background: var(--fg); - border: 1px solid var(--links); -} - -#sidebar-footer { - padding: 14px 8px 10px 8px; -} - -#footer-text { - display: block; - margin-bottom: 10px; - text-align: center; -} - -#footer-buttons { - gap: 4px; -} - -#footer-button { - display: flex; - min-height: 24px; - align-items: center; - justify-content: center; - padding: 4px 6px; - background: rgba(16, 8, 2, 0.78); - color: var(--fg); - border-color: rgba(255, 184, 77, 0.56); - box-shadow: inset 0 0 10px rgba(255, 112, 0, 0.08); -} - -#footer-button:hover, -#footer-button.active { - background: var(--fg); - color: #100701; - text-shadow: none; - box-shadow: 0 0 14px rgba(255, 184, 77, 0.42); -} - -#mini-player-title-inner, -.mini-track { - color: var(--links); -} - -.tooltip { - background: rgba(16, 8, 2, 0.98); - color: var(--links); - border: 1px solid var(--border); - border-radius: 0; - box-shadow: - inset 0 0 12px rgba(255, 112, 0, 0.12), - 0 0 18px rgba(255, 112, 0, 0.24); - text-shadow: 0 0 6px rgba(255, 184, 77, 0.5); -} - -body.mobile-template { - background: - radial-gradient(ellipse at 50% 45%, rgba(255, 137, 20, 0.12), transparent 62%), - linear-gradient(180deg, #130902 0%, #060301 100%) !important; - color: var(--fg) !important; -} - -body.mobile-template::after { - content: ""; - position: fixed; - inset: 0; - pointer-events: none; - background: repeating-linear-gradient(0deg, rgba(255, 183, 76, 0.08) 0 1px, transparent 1px 4px); - z-index: 20; -} - -body.mobile-template .mobile-collapsed-header, -body.mobile-template #sidebar, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks, -body.mobile-template #sidebar-footer, -body.mobile-template #content-layout, -body.mobile-template #post, -body.mobile-template .usage-card { - background: rgba(6, 3, 1, 0.9) !important; - border-color: var(--border) !important; - border-radius: 0 !important; - color: var(--fg) !important; -} - -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - background: transparent !important; - color: var(--fg) !important; - border-color: var(--border) !important; -} - -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-collapsed-header #show-sidebar:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - background: var(--fg) !important; - color: #100701 !important; - border-color: var(--links) !important; - text-shadow: none !important; -} - -body.mobile-template #content { - padding: 12px !important; -} - -body.mobile-template #content-layout { - padding: 14px !important; - background: rgba(6, 3, 1, 0.9) !important; - border-color: var(--border) !important; - box-shadow: - inset 0 0 42px rgba(255, 112, 0, 0.08), - 0 0 28px rgba(255, 112, 0, 0.12) !important; -} - -body.mobile-template #content-layout::before { - margin-bottom: 14px; -} - -body.mobile-template #content-main { - padding: 0 !important; - background: transparent !important; - color: var(--fg) !important; -} - -body.mobile-template input, -body.mobile-template textarea, -body.mobile-template .dropdown, -body.mobile-template .text-input, -body.mobile-template .bbcode-dropdown, -body.mobile-template .bbcode-btn, -body.mobile-template #bbcode-textbox, -body.mobile-template #bbcode-preview, -body.mobile-template .checkbox, -body.mobile-template .radio, -body.mobile-template .color-input { - background: #080502 !important; - color: var(--fg) !important; - border-color: var(--border) !important; -} - -body.mobile-template .checkbox:checked { - background-color: var(--fg) !important; -} - -body.mobile-template .radio:checked { - background: radial-gradient(circle, var(--fg) 30%, #080502 34%) !important; -} - -body.mobile-template #sidebar { - width: 100% !important; - min-width: 0 !important; - max-width: none !important; - height: auto !important; - min-height: 0 !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid, -body.mobile-template #footer-buttons { - width: auto !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - min-height: 34px !important; - box-sizing: border-box !important; -} - -#mini-player, -#mini-player-tracks, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks { - background: rgba(6, 3, 1, 0.92) !important; - color: var(--fg) !important; - border-color: var(--border) !important; -} - -#mini-player-main, -#mini-player-meta, -#mini-player-title, -#mini-player-row, -#mini-player-controls, -#mini-player-volume-wrapper { - color: var(--fg); -} - -#mini-player-art-wrapper, -#mini-player-art { - background: #080502 !important; - border-color: var(--border) !important; -} - -#mini-player-download, -#mini-player-play, -#mini-player-controls span { - color: var(--fg) !important; -} - -#mini-player-download:hover, -#mini-player-play:hover, -#mini-player-controls span:hover { - color: #100701 !important; - background: var(--fg) !important; - text-shadow: none !important; -} - -#mini-player-title-inner, -.mini-track { - color: var(--fg) !important; -} - -.mini-track { - background: transparent !important; - border-color: transparent !important; -} - -.mini-track:hover, -.mini-track.active { - background: var(--fg) !important; - color: #100701 !important; - border-color: var(--links) !important; - text-shadow: none !important; -} - -#mini-player-seek, -#mini-player-volume { - accent-color: var(--fg) !important; - background: #080502 !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-webkit-slider-thumb, -#mini-player-volume::-webkit-slider-thumb { - background: var(--fg) !important; - border-color: var(--links) !important; -} - -#mini-player-seek::-moz-range-track, -#mini-player-volume::-moz-range-track { - background: #080502 !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-moz-range-thumb, -#mini-player-volume::-moz-range-thumb { - background: var(--fg) !important; - border-color: var(--links) !important; -} - -#tab:hover, -#tab.active, -#footer-button:hover, -#footer-button.active, -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-collapsed-header #show-sidebar:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - color: #100701 !important; - text-shadow: none !important; -} - -.chat-view { - --chat-bg: rgba(12, 6, 2, 0.9); - --chat-fg: #ffd891; - --chat-border: rgba(255, 178, 76, 0.42); - --chat-muted: #c68d4d; - --chat-own-bg: #f2a43f; - --chat-own-fg: #160902; - --chat-other-bg: rgba(74, 42, 13, 0.88); - --chat-other-fg: #ffd891; -} - -.chat-messages { - border-color: rgba(255, 176, 74, 0.34); - background: - linear-gradient(180deg, rgba(18, 9, 2, 0.92), rgba(7, 3, 1, 0.96)), - rgba(7, 3, 1, 0.94); - box-shadow: - inset 0 0 34px rgba(255, 112, 0, 0.08), - 0 0 22px rgba(255, 112, 0, 0.1); -} - -.chat-message { - border-radius: 14px; - box-shadow: 0 0 14px rgba(255, 112, 0, 0.08); -} - -.chat-message-own { - background: - linear-gradient(180deg, #ffd27a, #e58b25); - border-color: rgba(255, 215, 134, 0.52); - text-shadow: none; -} - -.chat-message-other { - border-color: rgba(255, 178, 76, 0.14); -} - -.chat-message-meta, -.chat-date-divider { - color: #c68d4d; -} - -.chat-date-divider::before, -.chat-date-divider::after { - background: rgba(255, 178, 76, 0.36); -} - -.chat-presence, -.chat-typing-indicator, -.chat-reply-compose, -.chat-attach-button, -.chat-send-form textarea, -.chat-emoji-button, -.chat-send-button, -.chat-context-menu, -.chat-emoji-picker { - border-color: rgba(255, 178, 76, 0.36); - background: rgba(15, 7, 2, 0.94); - color: #ffd891; -} - -.chat-view .chat-attach-button:hover, -.chat-emoji-button:hover, -.chat-send-button:hover, -.chat-context-menu button:hover { - background: #ffd27a; - color: #160902; - border-color: #ffd27a; - text-shadow: none; -} - -.chat-message-deleted { - background: rgba(28, 13, 4, 0.88); - border-color: rgba(184, 108, 25, 0.24); -} - -#post-edit-feed, -.guestbook-edit-btn, -.guestbook-delete-btn, -#post-edit-feed:hover, -.guestbook-edit-btn:hover, -.guestbook-delete-btn:hover, -#post-edit-feed:active, -.guestbook-edit-btn:active, -.guestbook-delete-btn:active { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; - padding: 0 !important; - color: var(--subtle) !important; -} - -.guestbook-edit-btn, -.guestbook-delete-btn { - width: 16px !important; - height: 16px !important; -} - -#mini-player-title { - overflow: hidden !important; - width: 100% !important; - min-width: 0 !important; -} - -#mini-player-title-inner.scrolling { - display: inline-block !important; - max-width: none !important; - width: max-content !important; - overflow: visible !important; - text-overflow: clip !important; -} - - -/* theme ascii/resource cleanup */ -#usage-grid .usage-card, -body.mobile-template #usage-grid .usage-card { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - outline: 0 !important; - border-radius: 0 !important; - padding: 4px 0 !important; - transform: none !important; -} - -#usage-grid .usage-card:hover, -body.mobile-template #usage-grid .usage-card:hover { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; -} - -.usage-ascii { - color: var(--resource-ascii) !important; - text-shadow: none !important; - filter: none !important; -} - -.usage-label { - color: var(--resource-label) !important; - text-shadow: none !important; -} - -#ascii-time { - color: var(--time-ascii) !important; - text-shadow: none !important; -} - -#ascii-time-label { - color: var(--time-label) !important; -} - -/* CRT blackprint-derived layer. --links is the user-configurable main phosphor color. */ -:root { - --bg: #090b0d; - --links: #ffb84d; - --crt-accent: var(--links); - --fg: color-mix(in srgb, var(--crt-accent) 56%, #f6efe7 44%); - --border: color-mix(in srgb, var(--crt-accent) 70%, #776490 30%); - --subtle: color-mix(in srgb, var(--crt-accent) 52%, #776490 48%); - --chat-own-fg: #090b0d; - --hero-ascii-muted: color-mix(in srgb, var(--crt-accent) 42%, #5f5968 58%); - --hero-ascii-1: color-mix(in srgb, var(--crt-accent) 48%, #776490 52%); - --hero-ascii-2: color-mix(in srgb, var(--crt-accent) 54%, #776490 46%); - --hero-ascii-3: color-mix(in srgb, var(--crt-accent) 60%, #776490 40%); - --hero-ascii-4: color-mix(in srgb, var(--crt-accent) 66%, #6caaa7 34%); - --hero-ascii-5: color-mix(in srgb, var(--crt-accent) 72%, #6caaa7 28%); - --hero-ascii-6: color-mix(in srgb, var(--crt-accent) 78%, #6caaa7 22%); - --hero-ascii-7: var(--crt-accent); - --resource-ascii: var(--crt-accent); - --resource-label: var(--subtle); - --time-ascii: var(--crt-accent); - --time-label: var(--subtle); -} - -body { - background: - radial-gradient(ellipse at 50% 45%, color-mix(in srgb, var(--crt-accent) 18%, transparent), transparent 62%), - linear-gradient(135deg, rgba(119, 100, 144, 0.12), color-mix(in srgb, var(--crt-accent) 8%, transparent)), - linear-gradient(90deg, color-mix(in srgb, var(--border) 16%, transparent) 1px, transparent 1px), - linear-gradient(0deg, color-mix(in srgb, var(--crt-accent) 10%, transparent) 1px, transparent 1px), - #090b0d !important; - background-size: auto, auto, 18px 18px, 18px 18px, auto; - color: var(--fg); - text-shadow: 0 0 7px color-mix(in srgb, var(--crt-accent) 42%, transparent); -} - -.crt-glass { - background: - repeating-linear-gradient(0deg, color-mix(in srgb, var(--crt-accent) 12%, transparent) 0 1px, transparent 1px 4px), - radial-gradient(ellipse at center, transparent 0 62%, rgba(0, 0, 0, 0.4) 100%); -} - -#sidebar, -#content-layout, -#post, -.account-admin-card, -.usage-card, -pre code.hljs, -#mini-player, -#mini-player-tracks, -#sidebar-footer, -.form-card, -.grid-item { - background: - linear-gradient(145deg, color-mix(in srgb, var(--border) 12%, transparent), color-mix(in srgb, var(--crt-accent) 6%, transparent)), - rgba(9, 11, 13, 0.9) !important; - border: 1px solid color-mix(in srgb, var(--border) 72%, transparent) !important; - border-radius: 0 !important; - box-shadow: - inset 0 0 30px color-mix(in srgb, var(--crt-accent) 8%, transparent), - 4px 4px 0 rgba(0, 0, 0, 0.34) !important; -} - -#sidebar { - border-right: 2px solid var(--border) !important; - box-shadow: 10px 0 0 rgba(0, 0, 0, 0.24) !important; -} - -#header { - margin: 10px; - border-top: 4px double var(--border); - border-bottom: 4px double var(--border); -} - -#title, -.mobile-collapsed-title { - background-image: linear-gradient(0deg, color-mix(in srgb, var(--crt-accent) 52%, #776490 48%), var(--crt-accent)); - background-clip: text; - -webkit-background-clip: text; - color: transparent !important; - -webkit-text-fill-color: transparent; - text-shadow: 0 0 14px color-mix(in srgb, var(--crt-accent) 46%, transparent) !important; -} - -#content-layout::before { - content: "crt terminal"; - border-bottom-color: color-mix(in srgb, var(--border) 48%, transparent); - color: var(--subtle); -} - -#tab, -#footer-button, -button, -#form-button, -#search-button, -#settings-save, -#color-reset, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - background: - linear-gradient(90deg, color-mix(in srgb, var(--border) 18%, transparent), color-mix(in srgb, var(--crt-accent) 9%, transparent)), - rgba(10, 12, 14, 0.94) !important; - color: var(--fg) !important; - border: 1px solid var(--border) !important; - border-radius: 0 !important; - box-shadow: - inset 0 0 12px color-mix(in srgb, var(--crt-accent) 8%, transparent), - 3px 3px 0 rgba(0, 0, 0, 0.3) !important; - text-shadow: 0 0 6px color-mix(in srgb, var(--crt-accent) 38%, transparent); -} - -#tab::before { - content: ">> "; - color: var(--subtle); -} - -#tab:hover, -#tab.active, -#footer-button:hover, -#footer-button.active, -button:hover, -#form-button:hover, -#search-button:hover, -#settings-save:hover, -#color-reset:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: var(--crt-accent) !important; - color: #090b0d !important; - border-color: var(--fg) !important; - text-shadow: none !important; -} - -#search-box, -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -#bbcode-preview, -body.mobile-template input, -body.mobile-template textarea, -body.mobile-template .dropdown, -body.mobile-template .text-input, -body.mobile-template .bbcode-dropdown, -body.mobile-template .bbcode-btn, -body.mobile-template #bbcode-textbox, -body.mobile-template #bbcode-preview, -body.mobile-template .checkbox, -body.mobile-template .radio, -body.mobile-template .color-input { - background: #090b0d !important; - color: var(--fg) !important; - border-color: var(--border) !important; -} - -.chat-view { - --chat-bg: rgba(9, 11, 13, 0.94); - --chat-fg: var(--fg); - --chat-border: color-mix(in srgb, var(--border) 58%, transparent); - --chat-muted: var(--subtle); - --chat-own-bg: var(--crt-accent); - --chat-own-fg: #090b0d; - --chat-other-bg: color-mix(in srgb, var(--bg) 82%, var(--border) 18%); - --chat-other-fg: var(--fg); -} -body.ambercrt-theme .content-pagination .guestbook-page-btn { border-radius: 0; } diff --git a/themes/lib/ambercrt/ambercrt.html b/themes/lib/ambercrt/ambercrt.html deleted file mode 100644 index f0f9530..0000000 --- a/themes/lib/ambercrt/ambercrt.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - {title} | fridge.dev - - - - - - - - - - - - - - -
- -
- -
{content}
- -
-
- - diff --git a/themes/lib/arcade/arcade.css b/themes/lib/arcade/arcade.css deleted file mode 100644 index 6e8a63f..0000000 --- a/themes/lib/arcade/arcade.css +++ /dev/null @@ -1,762 +0,0 @@ -:root { - --bg: #07001a; - --fg: #f8f4ff; - --border: #36f7ff; - --subtle: #a89cff; - --links: #ff4fd8; - --chat-own-fg: #ffffff; - --hero-ascii-muted: #a89cff; - --hero-ascii-1: #ff4fd8; - --hero-ascii-2: #e85eff; - --hero-ascii-3: #c76dff; - --hero-ascii-4: #9a83ff; - --hero-ascii-5: #6ca0ff; - --hero-ascii-6: #48c9ff; - --hero-ascii-7: #36f7ff; - --hero-ascii-opacity: 0.98; -} - -body { - background: - radial-gradient(circle at 20% 18%, rgba(255, 79, 216, 0.28), transparent 24%), - radial-gradient(circle at 82% 80%, rgba(54, 247, 255, 0.22), transparent 28%), - linear-gradient(90deg, rgba(54, 247, 255, 0.08) 1px, transparent 1px), - linear-gradient(0deg, rgba(255, 79, 216, 0.08) 1px, transparent 1px), - #07001a; - background-size: auto, auto, 38px 38px, 38px 38px, auto; - color: var(--fg); -} - -#page-wrapper, -#container { - background: transparent; -} - -#sidebar, -#content-layout, -#post, -.account-admin-card, -.usage-card, -pre code.hljs, -#mini-player, -#mini-player-tracks, -#sidebar-footer, -.form-card, -.grid-item { - background: rgba(7, 0, 26, 0.9); - color: var(--fg); - border: 2px solid var(--border); - border-radius: 0; - box-shadow: - 0 0 0 2px rgba(255, 79, 216, 0.28), - 0 0 24px rgba(54, 247, 255, 0.16); -} - -#sidebar { - width: 270px; - border-right: 3px solid var(--links); -} - -#header { - margin: 10px 12px 12px; - padding: 9px 10px; - border: 2px solid var(--border); - background: - linear-gradient(135deg, rgba(255, 79, 216, 0.22), rgba(54, 247, 255, 0.12)); -} - -#title, -.mobile-collapsed-title { - color: #ffffff; - font-family: "MainBold", var(--emoji-font), monospace; - text-shadow: - 2px 2px 0 #ff4fd8, - -2px -2px 0 #36f7ff; -} - -#subtitle, -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -.usage-label { - color: var(--subtle); -} - -a, -#hide-sidebar, -#show-sidebar { - color: var(--links); -} - -#sidebar > a { - display: block; - margin: 0 12px 6px; -} - -#tab { - min-height: 26px; - padding: 5px 10px; - color: var(--fg); - background: - linear-gradient(90deg, rgba(255, 79, 216, 0.22), rgba(54, 247, 255, 0.12)); - border: 2px solid var(--border); - box-shadow: 4px 4px 0 #ff4fd8; - display: flex; - align-items: center; - box-sizing: border-box; - line-height: 1.1; -} - -#tab:hover, -#tab.active { - background: #36f7ff; - color: #07001a; - border-color: #ffffff; - box-shadow: 4px 4px 0 #ff4fd8; - transform: translate(2px, 2px); -} - -#content { - padding: 32px; -} - -#content-layout { - max-width: 900px; - min-height: calc(100% - 2px); - padding: 22px; -} - -#post, -.account-admin-card, -.usage-card, -pre code.hljs { - padding: 15px; -} - -#post:hover { - background: rgba(255, 79, 216, 0.14); -} - -#post-content, -#post-title, -#content-main, -#content-main h1, -#content-main h2, -#content-main h3, -#content-main h4, -#content-main p, -#content-main li, -.checkbox-label span, -.radio-label span, -.color-row { - color: var(--fg); -} - -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -#bbcode-preview { - background: #07001a; - color: var(--fg); - border: 2px solid var(--border); - border-radius: 0; -} - -.dropdown option, -.bbcode-dropdown option { - background: #07001a; - color: var(--fg); -} - -input:focus, -textarea:focus, -.dropdown:focus, -.text-input:focus, -.bbcode-dropdown:focus, -.bbcode-btn:focus { - border-color: var(--links); - box-shadow: 0 0 0 3px rgba(255, 79, 216, 0.24); - outline: none; -} - -.checkbox, -.radio, -.color-input { - background: #07001a; - border: 2px solid var(--border); -} - -.checkbox:checked { - background-color: var(--links); -} - -.radio:checked { - background: radial-gradient(circle, var(--links) 30%, #07001a 34%); -} - -button, -#form-button, -#lastfm-link-button, -#search-button, -#settings-save, -#color-reset, -.danger-button, -#footer-button { - background: #17003e; - color: var(--fg); - border: 2px solid var(--border); - border-radius: 0; - box-shadow: 3px 3px 0 #ff4fd8; -} - -button:hover, -#form-button:hover, -#search-button:hover, -#settings-save:hover, -#color-reset:hover, -#footer-button:hover { - background: var(--links); - color: #07001a; -} - -#settings-save { - background: var(--links) !important; - color: #07001a !important; -} - -#mini-player, -#mini-player-tracks, -#sidebar-footer { - margin: 10px 12px; - width: calc(100% - 24px); - box-sizing: border-box; -} - -#mini-player { - padding: 8px; - overflow-x: hidden; -} - -#mini-player-title-inner, -.mini-track { - color: #36f7ff; -} - -#mini-player-seek, -#mini-player-volume { - accent-color: var(--links); -} - -#sidebar-footer { - padding: 12px 8px 10px; -} - -#footer-text { - display: block; - margin-bottom: 8px; - text-align: center; -} - -#footer-button { - display: flex; - align-items: center; - justify-content: center; -} - -#footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: #36f7ff !important; - color: #07001a !important; -} - -.tooltip { - background: #07001a; - color: var(--fg); - border: 2px solid var(--links); - border-radius: 0; - box-shadow: 4px 4px 0 #36f7ff; -} - -#ascii, -#ascii-time, -#ascii-time-label, -.usage-ascii { - text-shadow: - 2px 2px 0 #ff4fd8, - -2px -2px 0 #36f7ff; -} - -body.mobile-template { - background: - linear-gradient(90deg, rgba(54, 247, 255, 0.08) 1px, transparent 1px), - linear-gradient(0deg, rgba(255, 79, 216, 0.08) 1px, transparent 1px), - #07001a !important; - color: var(--fg) !important; -} - -body.mobile-template .mobile-collapsed-header, -body.mobile-template #sidebar, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks, -body.mobile-template #sidebar-footer, -body.mobile-template #content-layout, -body.mobile-template #post, -body.mobile-template .usage-card { - background: rgba(7, 0, 26, 0.94) !important; - color: var(--fg) !important; - border: 2px solid var(--border) !important; - border-radius: 0 !important; -} - -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - background: #17003e !important; - color: var(--fg) !important; - border: 2px solid var(--border) !important; - border-radius: 0 !important; -} - -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-collapsed-header #show-sidebar:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - background: #36f7ff !important; - color: #07001a !important; -} - -body.mobile-template #content, -body.mobile-template #content-layout { - padding: 14px !important; -} - -body.mobile-template #content-main { - padding: 0 !important; - background: transparent !important; - color: var(--fg) !important; -} - -body.mobile-template input, -body.mobile-template textarea, -body.mobile-template .dropdown, -body.mobile-template .text-input, -body.mobile-template .bbcode-dropdown, -body.mobile-template .bbcode-btn, -body.mobile-template #bbcode-textbox, -body.mobile-template #bbcode-preview, -body.mobile-template .checkbox, -body.mobile-template .radio, -body.mobile-template .color-input { - background: #07001a !important; - color: var(--fg) !important; - border-color: var(--border) !important; -} - -body.mobile-template .checkbox:checked { - background-color: #36f7ff !important; -} - -body.mobile-template .radio:checked { - background: radial-gradient(circle, #36f7ff 30%, #07001a 34%) !important; -} - -body.mobile-template #sidebar { - width: 100% !important; - min-width: 0 !important; - max-width: none !important; - height: auto !important; - min-height: 0 !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid, -body.mobile-template #footer-buttons { - width: auto !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - min-height: 34px !important; - box-sizing: border-box !important; -} - -#mini-player, -#mini-player-tracks, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks { - background: rgba(7, 0, 26, 0.96) !important; - color: var(--fg) !important; - border: 2px solid var(--border) !important; -} - -#mini-player-main, -#mini-player-meta, -#mini-player-title, -#mini-player-row, -#mini-player-controls, -#mini-player-volume-wrapper { - color: var(--fg); -} - -#mini-player-art-wrapper, -#mini-player-art { - background: #17003e !important; - border-color: var(--border) !important; -} - -#mini-player-download, -#mini-player-play, -#mini-player-controls span { - color: #36f7ff !important; -} - -#mini-player-download:hover, -#mini-player-play:hover, -#mini-player-controls span:hover { - color: #07001a !important; - background: #36f7ff !important; -} - -#mini-player-title-inner, -.mini-track { - color: #36f7ff !important; -} - -.mini-track { - background: transparent !important; - border-color: transparent !important; -} - -.mini-track:hover, -.mini-track.active { - background: #36f7ff !important; - color: #07001a !important; - border-color: #ffffff !important; -} - -#mini-player-seek, -#mini-player-volume { - accent-color: #36f7ff !important; - background: #07001a !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-webkit-slider-thumb, -#mini-player-volume::-webkit-slider-thumb { - background: #36f7ff !important; - border-color: #ffffff !important; -} - -#mini-player-seek::-moz-range-track, -#mini-player-volume::-moz-range-track { - background: #07001a !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-moz-range-thumb, -#mini-player-volume::-moz-range-thumb { - background: #36f7ff !important; - border-color: #ffffff !important; -} - -#tab:hover, -#tab.active, -#footer-button:hover, -#footer-button.active, -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-collapsed-header #show-sidebar:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - color: #07001a !important; - text-shadow: none !important; -} - -.chat-view { - --chat-bg: rgba(9, 1, 31, 0.94); - --chat-fg: #f8f4ff; - --chat-border: rgba(54, 247, 255, 0.58); - --chat-muted: #b8adff; - --chat-own-bg: #d83ed0; - --chat-own-fg: #ffffff; - --chat-other-bg: rgba(52, 38, 76, 0.94); - --chat-other-fg: #f8f4ff; -} - -.chat-messages { - border: 2px solid rgba(54, 247, 255, 0.68); - border-radius: 0; - background: - linear-gradient(180deg, rgba(10, 2, 38, 0.94), rgba(5, 0, 18, 0.98)), - #07001a; - box-shadow: - 0 0 0 2px rgba(255, 79, 216, 0.18), - 0 0 22px rgba(54, 247, 255, 0.12); -} - -.chat-message { - border: 2px solid rgba(54, 247, 255, 0.16); - border-radius: 12px; - box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.24); -} - -.chat-message-own { - background: - linear-gradient(135deg, #ff4fd8, #8f4dff); - border-color: rgba(255, 255, 255, 0.42); -} - -.chat-message-other { - background: rgba(52, 38, 76, 0.94); - border-color: rgba(54, 247, 255, 0.16); -} - -.chat-message-meta, -.chat-date-divider { - color: #b8adff; -} - -.chat-date-divider::before, -.chat-date-divider::after { - background: rgba(54, 247, 255, 0.44); -} - -.chat-presence, -.chat-typing-indicator, -.chat-reply-compose, -.chat-attach-button, -.chat-send-form textarea, -.chat-emoji-button, -.chat-send-button, -.chat-context-menu, -.chat-emoji-picker { - border: 2px solid rgba(54, 247, 255, 0.56); - background: rgba(11, 2, 38, 0.96); - color: #f8f4ff; -} - -.chat-view .chat-attach-button:hover, -.chat-emoji-button:hover, -.chat-send-button:hover, -.chat-context-menu button:hover { - background: #36f7ff; - color: #07001a; - border-color: #ffffff; -} - -.chat-message-deleted { - background: rgba(24, 13, 48, 0.94); - border-color: rgba(168, 156, 255, 0.24); - box-shadow: none; -} - -#post-edit-feed, -.guestbook-edit-btn, -.guestbook-delete-btn, -#post-edit-feed:hover, -.guestbook-edit-btn:hover, -.guestbook-delete-btn:hover, -#post-edit-feed:active, -.guestbook-edit-btn:active, -.guestbook-delete-btn:active { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; - padding: 0 !important; - color: var(--subtle) !important; -} - -.guestbook-edit-btn, -.guestbook-delete-btn { - width: 16px !important; - height: 16px !important; -} - -#mini-player-title { - overflow: hidden !important; - width: 100% !important; - min-width: 0 !important; -} - -#mini-player-title-inner.scrolling { - display: inline-block !important; - max-width: none !important; - width: max-content !important; - overflow: visible !important; - text-overflow: clip !important; -} - - -/* theme ascii/resource cleanup */ -#usage-grid .usage-card, -body.mobile-template #usage-grid .usage-card { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - outline: 0 !important; - border-radius: 0 !important; - padding: 4px 0 !important; - transform: none !important; -} - -#usage-grid .usage-card:hover, -body.mobile-template #usage-grid .usage-card:hover { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; -} - -.usage-ascii { - color: var(--resource-ascii) !important; - text-shadow: none !important; - filter: none !important; -} - -.usage-label { - color: var(--resource-label) !important; - text-shadow: none !important; -} - -#ascii-time { - color: var(--time-ascii) !important; - text-shadow: none !important; -} - -#ascii-time-label { - color: var(--time-label) !important; -} - -/* arcade-cabinet neon palette pass */ -:root { - --bg: #0b0d22; - --fg: #f7f2ff; - --border: #6b82df; - --subtle: #61a1e6; - --links: #31d7c2; - --arcade-teal: #31d7c2; - --arcade-periwinkle: #6b82df; - --arcade-sky: #61a1e6; - --arcade-blue: #3495e8; - --arcade-violet: #6e26e1; - --arcade-magenta: #ce29c6; - --hero-ascii-muted: #594f8f; - --hero-ascii-1: #31d7c2; - --hero-ascii-2: #6b82df; - --hero-ascii-3: #61a1e6; - --hero-ascii-4: #3495e8; - --hero-ascii-5: #6e26e1; - --hero-ascii-6: #a728d2; - --hero-ascii-7: #ce29c6; - --resource-ascii: #31d7c2; - --resource-label: #61a1e6; - --time-ascii: #ce29c6; - --time-label: #6b82df; -} - -body { - background: - radial-gradient(circle at 12% 14%, rgba(206, 41, 198, 0.32), transparent 28%), - radial-gradient(circle at 86% 18%, rgba(49, 215, 194, 0.22), transparent 26%), - linear-gradient(135deg, rgba(110, 38, 225, 0.18), rgba(52, 149, 232, 0.12), rgba(49, 215, 194, 0.08)), - linear-gradient(90deg, rgba(107, 130, 223, 0.08) 1px, transparent 1px), - linear-gradient(0deg, rgba(206, 41, 198, 0.07) 1px, transparent 1px), - #0b0d22; - background-size: auto, auto, auto, 18px 18px, 18px 18px, auto; - color: var(--fg); -} - -#sidebar, -#content-layout, -#post, -.account-admin-card, -.usage-card, -pre code.hljs, -#mini-player, -#mini-player-tracks, -#sidebar-footer, -.form-card, -.grid-item { - background: - linear-gradient(145deg, rgba(107, 130, 223, 0.14), rgba(49, 215, 194, 0.08)), - rgba(11, 13, 34, 0.9) !important; - border-color: color-mix(in srgb, var(--border) 70%, var(--links) 30%) !important; - box-shadow: - 4px 4px 0 rgba(0, 0, 0, 0.28), - 0 0 22px rgba(52, 149, 232, 0.12) !important; -} - -#sidebar { - border-right: 2px solid var(--border) !important; - box-shadow: 10px 0 0 rgba(0, 0, 0, 0.22) !important; -} - -#title, -.mobile-collapsed-title { - background-image: linear-gradient(0deg, var(--arcade-teal), var(--arcade-blue), var(--arcade-violet), var(--arcade-magenta)); - background-clip: text; - -webkit-background-clip: text; - color: transparent !important; - -webkit-text-fill-color: transparent; - text-shadow: none !important; -} - -#tab, -#footer-button, -button, -#form-button, -#search-button, -#settings-save, -#color-reset { - background: - linear-gradient(90deg, rgba(107, 130, 223, 0.24), rgba(52, 149, 232, 0.18), rgba(49, 215, 194, 0.12)), - rgba(11, 13, 34, 0.92) !important; - border: 1px solid var(--border) !important; - color: var(--fg) !important; - border-radius: 0 !important; - box-shadow: 3px 3px 0 rgba(0, 0, 0, 0.3) !important; - text-shadow: none !important; -} - -#tab::before { - content: ">> "; - color: var(--arcade-magenta); -} - -#tab:hover, -#tab.active, -#footer-button:hover, -#footer-button.active, -button:hover, -#form-button:hover, -#search-button:hover, -#settings-save:hover, -#color-reset:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: linear-gradient(90deg, var(--arcade-teal), var(--arcade-blue), var(--arcade-violet), var(--arcade-magenta)) !important; - color: #07091f !important; - border-color: var(--links) !important; - text-shadow: none !important; -} -.content-pagination .guestbook-page-btn { border-radius: 3px; } diff --git a/themes/lib/arcade/arcade.html b/themes/lib/arcade/arcade.html deleted file mode 100644 index b21749f..0000000 --- a/themes/lib/arcade/arcade.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - {title} | fridge.dev - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- -
-{content} -
- -
- - -
-
-
- - diff --git a/themes/lib/base16/base16.css b/themes/lib/base16/base16.css new file mode 100644 index 0000000..726eee1 --- /dev/null +++ b/themes/lib/base16/base16.css @@ -0,0 +1,47 @@ +:root, body.base16-theme { + --base00:#1d1f21;--base01:#282a2e;--base02:#373b41;--base03:#969896; + --base04:#b4b7b4;--base05:#c5c8c6;--base06:#e0e0e0;--base07:#fff; + --base08:#cc6666;--base09:#de935f;--base0A:#f0c674;--base0B:#b5bd68; + --base0C:#8abeb7;--base0D:#81a2be;--base0E:#b294bb;--base0F:#a3685a; + --bg:var(--base00);--fg:var(--base05);--border:var(--base02);--subtle:var(--base03);--links:var(--base0D); + --chat-own-bg:var(--base02);--chat-own-fg:var(--base07);--selection-bg:var(--base0D);--selection-fg:var(--base00); + --hero-ascii-muted:var(--base02);--hero-ascii-1:var(--base08);--hero-ascii-2:var(--base09);--hero-ascii-3:var(--base0A);--hero-ascii-4:var(--base0B);--hero-ascii-5:var(--base0C);--hero-ascii-6:var(--base0D);--hero-ascii-7:var(--base0E); + --scrollbar-track:var(--base01);--scrollbar-thumb:var(--base03);--scrollbar-thumb-hover:var(--base04);--scrollbar-thumb-border:var(--base01); +} +body.base16-theme,body.base16-theme.mobile-template{background:var(--base00)!important;color:var(--base05)!important} +body.base16-theme *:not(.theme-picker-thumb):not(.fruity-dance-sprite),body.base16-theme *::before,body.base16-theme *::after{background-image:none!important;box-shadow:none!important;text-shadow:none!important;filter:none!important;backdrop-filter:none!important} +body.base16-theme .paper-grain{display:none!important} +body.base16-theme :is(#page-wrapper,#container){background:transparent!important} +body.base16-theme #sidebar,body.base16-theme.mobile-template #sidebar{background:var(--base01)!important;color:var(--base05)!important;border:0!important;border-right:1px solid var(--base02)!important} +body.base16-theme #header{margin:10px!important;padding:12px 8px!important;background:var(--base00)!important;border:1px solid var(--base02)!important;text-align:left} +body.base16-theme :is(#title,#title .title-letter,.mobile-collapsed-title,.mobile-collapsed-title .title-letter){background:none!important;color:var(--base0A)!important;-webkit-text-fill-color:var(--base0A)!important} +body.base16-theme #sidebar>a{margin:0 10px 4px!important}body.base16-theme #tab::before{content:none!important} +body.base16-theme :is(#tab,#footer-button,.mobile-nav-button,.mobile-footer-button,#show-sidebar){background:var(--base02)!important;color:var(--base05)!important;border:0!important;border-left:3px solid var(--base0D)!important;border-radius:0!important;transform:none!important} +body.base16-theme :is(#tab,#footer-button,.mobile-nav-button,.mobile-footer-button,#show-sidebar):hover,body.base16-theme :is(#tab,#footer-button,.mobile-nav-button,.mobile-footer-button).active{background:var(--base0D)!important;color:var(--base00)!important} +body.base16-theme #content-layout,body.base16-theme.mobile-template :is(#content-layout,#content-main){background:var(--base00)!important;color:var(--base05)!important;border:1px solid var(--base02)!important;border-radius:0!important} +body.base16-theme :is(#post,.feed-post,.journal-post,.form-card,.grid-item,.notification-item,.music-album,.gallery-item,.chat-admin-card,.account-admin-card,.site-popup-dialog,.image-modal-content,.feed-reply-notice,.bbcode-editor,#bbcode-preview,table,details,.settings-section){background:var(--base01)!important;color:var(--base05)!important;border:1px solid var(--base02)!important;border-radius:0!important} +body.base16-theme :is(#post,.grid-item,.account-admin-card):nth-child(4n+2){border-left:3px solid var(--base0B)!important}body.base16-theme :is(#post,.grid-item,.account-admin-card):nth-child(4n+3){border-left:3px solid var(--base09)!important}body.base16-theme :is(#post,.grid-item,.account-admin-card):nth-child(4n){border-left:3px solid var(--base0E)!important} +body.base16-theme :is(#post,.feed-post,.journal-post,.grid-item,.account-admin-card):hover{background:var(--base02)!important} +body.base16-theme :is(input,textarea,select,.text-input,.dropdown,.bbcode-dropdown,#bbcode-textbox,#search-box){background:var(--base00)!important;color:var(--base05)!important;border:1px solid var(--base03)!important;border-radius:0!important} +body.base16-theme :is(input,textarea,select,.text-input,.dropdown,.bbcode-dropdown,#bbcode-textbox,#search-box):focus{border-color:var(--base0D)!important;outline:1px solid var(--base0D)!important;outline-offset:1px} +body.base16-theme :is(select,.dropdown,.bbcode-dropdown) option{background:var(--base00);color:var(--base05)} +body.base16-theme :is(button,#search-button,#form-button,#two-buttons,input[type=submit],input[type=button],#settings-save,#color-reset){background:var(--base02)!important;color:var(--base05)!important;border:1px solid var(--base03)!important;border-radius:0!important} +body.base16-theme :is(button,#search-button,#form-button,#two-buttons,input[type=submit],input[type=button],#settings-save,#color-reset):hover{background:var(--base0D)!important;color:var(--base00)!important;border-color:var(--base0D)!important} +body.base16-theme :is(.danger-button,.grid-delete-button,#admin-account-delete-form button){background:var(--base08)!important;color:var(--base00)!important;border-color:var(--base08)!important} +body.base16-theme #search{padding:5px;background:var(--base01)!important;border:1px solid var(--base02)} +body.base16-theme :is(.bbcode-toolbar,.feed-markdown-toolbar){background:var(--base02)!important;border:0!important;border-bottom:1px solid var(--base03)!important;padding:6px!important} +body.base16-theme .bbcode-btn{width:34px;min-width:34px;height:32px;padding:0!important;background:var(--base01)!important;color:var(--base05)!important;border:1px solid var(--base03)!important}body.base16-theme .bbcode-btn:hover{background:var(--base0D)!important;color:var(--base00)!important} +body.base16-theme :is(#bbcode-textbox,#bbcode-preview,.markdown-highlight-layer){background:var(--base00)!important;border:0!important}body.base16-theme .markdown-highlight-input{background:transparent!important} +body.base16-theme :is(.checkbox,.radio){appearance:auto!important;-webkit-appearance:auto!important;accent-color:var(--base0D)!important;background:initial!important;border:initial!important} +body.base16-theme :is(#mini-player,#mini-player-tracks,#sidebar-footer),body.base16-theme.mobile-template :is(#mini-player,#mini-player-tracks,#sidebar-footer){background:var(--base00)!important;color:var(--base05)!important;border:1px solid var(--base02)!important;border-radius:0!important} +body.base16-theme :is(#mini-player-title-inner,#mini-player-artist,.mini-track){color:var(--base05)!important}body.base16-theme :is(#mini-player-play,#mini-player-mute){color:var(--base0D)!important}body.base16-theme #mini-player-close{background:transparent!important;color:var(--base03)!important;border:0!important}body.base16-theme :is(#mini-player-seek,#mini-player-volume){accent-color:var(--base0D);background:var(--base02)!important;border:0!important} +body.base16-theme .mini-track{background:transparent!important;border:0!important}body.base16-theme :is(.mini-track:hover,.mini-track.active){background:var(--base02)!important;color:var(--base0B)!important} +body.base16-theme :is(pre,code,blockquote){background:var(--base01)!important;color:var(--base05);border-color:var(--base02)!important}body.base16-theme :is(#homepage-hero-ascii,#homepage-hero-ascii pre,#ascii,#ascii-time,#usage-grid,#usage-grid .usage-card,.usage-ascii,.usage-label){background:transparent!important;border:0!important} +body.base16-theme a{color:var(--base0D)}body.base16-theme :is(.site-popup-overlay,.image-modal,.mobile-menu-backdrop){background:rgba(29,31,33,.88)!important}body.base16-theme :is(.tooltip,.site-notification-toast,.chat-context-menu){background:var(--base01)!important;color:var(--base05)!important;border:1px solid var(--base0D)!important;border-radius:0!important} +body.base16-theme.mobile-template #sidebar{width:calc(100% - 16px)!important;min-width:0!important;max-width:none!important;box-sizing:border-box!important}body.base16-theme.mobile-template :is(.mobile-collapsed-header,#show-sidebar){background:var(--base01)!important;color:var(--base05)!important;border-color:var(--base03)!important} +body.base16-theme.mobile-template .mobile-nav-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:5px!important;padding:8px 10px 0!important}body.base16-theme.mobile-template .mobile-nav-grid a.mobile-nav-link>#tab.mobile-nav-button{min-width:0!important;min-height:39px!important;background:var(--base02)!important;color:var(--base05)!important;border:0!important;border-left:3px solid var(--base0D)!important;border-radius:0!important}body.base16-theme.mobile-template .mobile-nav-grid a.mobile-nav-link>#tab.mobile-nav-button.active{background:var(--base0D)!important;color:var(--base00)!important} +body.base16-theme.mobile-template #content{padding:10px!important;background:transparent!important;color:var(--base05)!important}body.base16-theme.mobile-template #content-layout{padding:0!important;background:transparent!important;border:0!important}body.base16-theme.mobile-template #content-main{min-width:0!important;padding:14px!important;background:var(--base00)!important;border:1px solid var(--base02)!important;overflow-x:hidden!important} +body.base16-theme.mobile-template :is(#post,.feed-post,.journal-post,.grid-item,.account-admin-card,.form-card,.settings-section){background:var(--base01)!important;color:var(--base05)!important;border-color:var(--base02)!important}body.base16-theme.mobile-template #footer-buttons>a.mobile-footer-link>#footer-button.mobile-footer-button{background:var(--base02)!important;color:var(--base05)!important;border:0!important} +body.base16-theme.mobile-template #sidebar :is(#mini-player,#mini-player-tracks,#sidebar-footer){margin:8px 10px 0!important;width:auto!important;background:var(--base00)!important;color:var(--base05)!important;border:1px solid var(--base02)!important}body.base16-theme.mobile-template #sidebar #mini-player-title-inner{color:var(--base05)!important}body.base16-theme.mobile-template #sidebar #mini-player-artist{color:var(--base03)!important}body.base16-theme.mobile-template #sidebar #mini-player-close{background:var(--base01)!important;color:var(--base03)!important;border-color:var(--base02)!important} +body.base16-theme.mobile-template :is(input,textarea,select,.text-input,.dropdown,.bbcode-dropdown,#bbcode-textbox){max-width:100%!important;box-sizing:border-box!important}body.base16-theme.mobile-template :is(table,pre,code,img,video,iframe){max-width:100%!important}body.base16-theme.mobile-template :is(pre,table){overflow-x:auto!important} +html.access-high-contrast body.base16-theme{--bg:#000!important;--fg:#fff!important;--border:#fff!important;--subtle:#ddd!important;--links:#8ab4ff!important} diff --git a/themes/lib/bubblegum/bubblegum.css b/themes/lib/bubblegum/bubblegum.css deleted file mode 100644 index 7093a49..0000000 --- a/themes/lib/bubblegum/bubblegum.css +++ /dev/null @@ -1,1006 +0,0 @@ -:root { - --bg: #fff0fb; - --fg: #241433; - --border: #241433; - --subtle: #765088; - --links: #005dff; - --chat-own-fg: #ffffff; - --hero-ascii-muted: #7a3c91; - --hero-ascii-1: #ff178f; - --hero-ascii-2: #e036d1; - --hero-ascii-3: #a94cff; - --hero-ascii-4: #5b65ff; - --hero-ascii-5: #147dff; - --hero-ascii-6: #009fe8; - --hero-ascii-7: #008e9d; - --hero-ascii-opacity: 1; - --resource-ascii: #6f31ff; - --resource-label: #7a3c91; - --time-ascii: #8f4fd4; - --time-label: #7a3c91; -} - -body { - background: - radial-gradient(circle at 12% 18%, #ffe85c 0 72px, transparent 73px), - radial-gradient(circle at 88% 20%, #00e1ff 0 94px, transparent 95px), - radial-gradient(circle at 78% 82%, #ff4fb8 0 118px, transparent 119px), - linear-gradient(135deg, #fff0fb 0%, #c9fff7 48%, #ffe1f5 100%); - color: var(--fg); -} - -.bubble-pop { - position: fixed; - inset: 0; - z-index: -2; - pointer-events: none; - background: - linear-gradient(45deg, rgba(36, 20, 51, 0.06) 25%, transparent 25% 75%, rgba(36, 20, 51, 0.06) 75%), - linear-gradient(45deg, rgba(36, 20, 51, 0.06) 25%, transparent 25% 75%, rgba(36, 20, 51, 0.06) 75%); - background-position: 0 0, 18px 18px; - background-size: 36px 36px; -} - -#page-wrapper, -#container { - background: transparent; -} - -#sidebar { - width: 270px; - overflow-y: hidden; - background: #ff8fd6; - border-right: 4px solid var(--border); - box-shadow: 10px 10px 0 rgba(36, 20, 51, 0.24); -} - -#header { - margin: 10px; - padding: 9px 10px; - background: #fff0fb; - border: 2px solid var(--border); - border-radius: 16px; - box-shadow: 4px 4px 0 var(--border); -} - -#title, -.mobile-collapsed-title { - color: #ff2fa8; - font-family: "MainBold", var(--emoji-font), monospace; - font-size: 23px; - text-shadow: 2px 2px 0 #ffe85c; -} - -#subtitle, -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -.usage-label { - color: var(--subtle); -} - -#hide-sidebar, -#show-sidebar { - color: var(--subtle); -} - -#hide-sidebar:hover, -#show-sidebar:hover { - color: #ff2fa8; -} - -#sidebar > a { - display: block; - margin: 0 10px 6px 10px; -} - -#tab { - min-height: 28px; - padding: 5px 10px; - background: #00e1ff; - color: var(--fg); - border: 2px solid var(--border); - border-radius: 13px; - box-shadow: 3px 3px 0 var(--border); - display: flex; - align-items: center; - font-family: "MainBold", var(--emoji-font), monospace; - line-height: 1.1; -} - -#sidebar > a:nth-of-type(2n) #tab { - background: #ffe85c; -} - -#sidebar > a:nth-of-type(3n) #tab { - background: #9aff6f; -} - -#tab:hover, -#tab.active { - transform: translate(2px, 2px); - box-shadow: 1px 1px 0 var(--border); - background: #fff0fb; -} - -#content { - padding: 30px; -} - -#content-layout { - min-height: calc(100% - 2px); - padding: 24px; - background: rgba(255, 240, 251, 0.92); - border: 4px solid var(--border); - border-radius: 22px; - box-shadow: 12px 12px 0 rgba(36, 20, 51, 0.24); -} - -#content-main > *:first-child { - margin-top: 0; -} - -a { - color: var(--links); -} - -#post, -.account-admin-card, -.usage-card, -pre code.hljs { - background: #ffffff; - border: 3px solid var(--border); - border-radius: 18px; - box-shadow: 6px 6px 0 rgba(36, 20, 51, 0.2); -} - -#post { - padding: 16px; -} - -#post:hover, -.account-admin-card:hover, -.usage-card:hover { - background: #fff8fd; - box-shadow: 4px 4px 0 rgba(36, 20, 51, 0.22); -} - -#post-content, -#post-title, -.form-card, -.form-card p, -.form-field label, -.checkbox-label span, -.radio-label span, -.color-row, -.color-row span, -.feed-reply-body, -.feed-reply-meta, -.guestbook-post-actions, -#content-main, -#content-main h1, -#content-main h2, -#content-main h3, -#content-main h4, -#content-main p, -#content-main li { - color: var(--fg); -} - -#post-description, -#post-date, -#post-date-feed, -#post-username, -#post-bookmark, -#post-bookmark-feed, -#post-edit-feed, -.form-card p, -.form-field label, -.color-row span, -.feed-reply-meta { - color: var(--subtle); -} - -#search-box, -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -#bbcode-preview, -#create-account-form input[type="text"], -#admin-account-form input[type="text"], -#admin-account-form textarea { - background: #ffffff; - color: var(--fg); - border: 2px solid var(--border); - border-radius: 14px; -} - -.dropdown option, -.bbcode-dropdown option { - background: #ffffff; - color: var(--fg); -} - -#search-box:hover, -#search-box:focus, -input:hover, -input:focus, -textarea:hover, -textarea:focus, -.dropdown:hover, -.dropdown:focus, -.text-input:hover, -.text-input:focus, -.bbcode-dropdown:hover, -.bbcode-dropdown:focus, -.bbcode-btn:hover, -.bbcode-btn:focus, -#bbcode-textbox:focus { - background: #fff8fd; - color: var(--fg); - border-color: #ff2fa8; - box-shadow: 3px 3px 0 var(--border); - outline: none; -} - -.bbcode-editor, -.bbcode-toolbar, -.form-card, -.grid-item, -#bbcode-preview { - background: rgba(255, 255, 255, 0.76); - color: var(--fg); - border-color: var(--border); -} - -.checkbox, -.radio { - background: #ffffff; - border: 2px solid var(--border); -} - -.checkbox:checked, -.radio:checked { - background-color: #ff2fa8; - border-color: var(--border); -} - -.radio:checked { - background: radial-gradient(circle, #ff2fa8 34%, #ffffff 38%); -} - -.color-input { - background: #ffffff; - border: 2px solid var(--border); - box-shadow: 3px 3px 0 rgba(36, 20, 51, 0.2); -} - -.color-input:hover, -.color-input:focus { - border-color: #ff2fa8; - box-shadow: 4px 4px 0 var(--border); -} - -#search-button, -#form-button, -#lastfm-link-button, -#settings-save, -#color-reset, -.danger-button, -button, -#footer-button { - background: #ffe85c; - color: var(--fg); - border: 2px solid var(--border); - border-radius: 14px; - box-shadow: 3px 3px 0 var(--border); -} - -#settings-save { - background: #9aff6f !important; - color: var(--fg) !important; -} - -.danger-button, -.grid-delete-button, -.form-button-disabled, -#admin-account-delete-form button { - background: #ff6f8f; - color: var(--fg); -} - -.form-button-disabled { - background: #e8d6e6; - color: var(--subtle); -} - -#search-button:hover, -#form-button:hover, -#settings-save:hover, -#color-reset:hover, -button:hover, -#footer-button:hover { - background: #9aff6f; - transform: translate(2px, 2px); - box-shadow: 1px 1px 0 var(--border); -} - -#search-button:active, -#form-button:active, -#settings-save:active, -#color-reset:active, -button:active, -#footer-button:active, -.bbcode-btn:active { - background: #ff2fa8; - color: #ffffff; - transform: translate(3px, 3px); - box-shadow: 0 0 0 var(--border); -} - -.form-button-disabled:hover, -.form-button-disabled:active, -.bbcode-btn.disabled:hover, -.bbcode-dropdown.disabled:hover { - background: #e8d6e6; - color: var(--subtle); - box-shadow: none; - transform: none; - cursor: not-allowed; -} - -#mini-player, -#mini-player-tracks, -#sidebar-footer { - margin: 9px 10px; - width: calc(100% - 20px); - box-sizing: border-box; - background: #fff0fb; - border: 2px solid var(--border); - border-radius: 14px; - box-shadow: 3px 3px 0 var(--border); -} - -#mini-player { - padding: 8px; - gap: 4px; - max-height: 86px; - overflow-x: hidden; -} - -#mini-player-main { - gap: 6px; -} - -#mini-player-art-wrapper { - width: 26px; - height: 26px; - margin-top: 0; -} - -#mini-player-title-inner { - font-size: 10px; -} - -#mini-player-row { - gap: 5px; -} - -#mini-player-play { - width: 14px; - height: 14px; - color: var(--fg); -} - -#mini-player-controls span { - color: var(--subtle); -} - -#mini-player-controls span:hover, -#mini-player-play:hover { - color: #ff2fa8; -} - -#mini-player-seek, -#mini-player-volume { - height: 5px; - background: #ffffff; - border: 1px solid var(--border); - border-radius: 0; -} - -#mini-player-seek::-webkit-slider-thumb, -#mini-player-volume::-webkit-slider-thumb { - background: #ff2fa8; - border: 1px solid var(--border); - border-radius: 4px; -} - -#mini-player-seek::-moz-range-track, -#mini-player-volume::-moz-range-track { - background: #ffffff; - border: 1px solid var(--border); - border-radius: 0; -} - -#mini-player-seek::-moz-range-thumb, -#mini-player-volume::-moz-range-thumb { - background: #ff2fa8; - border: 1px solid var(--border); - border-radius: 4px; -} - -#sidebar-footer { - padding: 9px 7px 8px 7px; -} - -#footer-text { - display: block; - margin-bottom: 7px; - text-align: center; -} - -#footer-buttons { - gap: 4px; -} - -#footer-button { - min-height: 22px; - padding: 3px 6px; - display: flex; - align-items: center; - justify-content: center; -} - -#footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: #ff2fa8 !important; - color: #ffffff !important; - border-color: var(--border) !important; -} - -#footer-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover { - background: #ff2fa8 !important; - color: #ffffff !important; - border-color: var(--border) !important; -} - -#mini-player-title-inner, -.mini-track { - color: #ff2fa8; -} - -#mini-player-seek, -#mini-player-volume { - accent-color: #ff2fa8; -} - -.tooltip { - background: #241433; - color: #fff0fb; - border: 2px solid #ff2fa8; - border-radius: 12px; - box-shadow: - 3px 3px 0 #ffe85c, - 0 8px 18px rgba(36, 20, 51, 0.25); -} - -#error { - color: #b00042; -} - -#spa-loading { - background: #fff0fb; - color: var(--fg); - border: 2px solid var(--border); - box-shadow: 4px 4px 0 var(--border); -} - -body.mobile-template { - background: - radial-gradient(circle at 12% 18%, #ffe85c 0 72px, transparent 73px), - radial-gradient(circle at 88% 20%, #00e1ff 0 94px, transparent 95px), - linear-gradient(135deg, #fff0fb 0%, #c9fff7 48%, #ffe1f5 100%) !important; - color: var(--fg) !important; -} - -body.mobile-template .mobile-collapsed-header, -body.mobile-template #sidebar, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks, -body.mobile-template #sidebar-footer, -body.mobile-template #content-layout, -body.mobile-template #post, -body.mobile-template .usage-card { - background: rgba(255, 240, 251, 0.94) !important; - border: 3px solid var(--border) !important; - border-radius: 18px !important; - box-shadow: 5px 5px 0 rgba(36, 20, 51, 0.22) !important; -} - -body.mobile-template #sidebar { - overflow-y: auto; -} - -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - background: #ffe85c !important; - color: var(--fg) !important; - border: 3px solid var(--border) !important; - border-radius: 14px !important; -} - -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-collapsed-header #show-sidebar:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover { - background: #9aff6f !important; - color: var(--fg) !important; - border-color: var(--border) !important; -} - -body.mobile-template #content { - padding: 12px !important; -} - -body.mobile-template #content-layout { - padding: 14px !important; - background: rgba(255, 240, 251, 0.94) !important; - border-color: var(--border) !important; -} - -body.mobile-template #content-main { - padding: 0 !important; - background: transparent !important; - color: var(--fg) !important; -} - -body.mobile-template input, -body.mobile-template textarea, -body.mobile-template .dropdown, -body.mobile-template .text-input, -body.mobile-template .bbcode-dropdown, -body.mobile-template .bbcode-btn, -body.mobile-template #bbcode-textbox, -body.mobile-template #bbcode-preview, -body.mobile-template .checkbox, -body.mobile-template .radio, -body.mobile-template .color-input { - background: #ffffff !important; - color: var(--fg) !important; - border-color: var(--border) !important; -} - -body.mobile-template .checkbox:checked { - background-color: #ff2fa8 !important; -} - -body.mobile-template .radio:checked { - background: radial-gradient(circle, #ff2fa8 30%, #ffffff 34%) !important; -} - -body.mobile-template #sidebar { - width: 100% !important; - min-width: 0 !important; - max-width: none !important; - height: auto !important; - min-height: 0 !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid, -body.mobile-template #footer-buttons { - width: auto !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - min-height: 34px !important; - box-sizing: border-box !important; -} - -#mini-player, -#mini-player-tracks, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks { - background: rgba(255, 240, 251, 0.96) !important; - color: var(--fg) !important; - border: 3px solid var(--border) !important; - box-shadow: 5px 5px 0 rgba(36, 20, 51, 0.22) !important; -} - -#mini-player-main, -#mini-player-meta, -#mini-player-title, -#mini-player-row, -#mini-player-controls, -#mini-player-volume-wrapper { - color: var(--fg); -} - -#mini-player-art-wrapper, -#mini-player-art { - background: #ffffff !important; - border-color: var(--border) !important; -} - -#mini-player-download, -#mini-player-play, -#mini-player-controls span { - color: #ff2fa8 !important; -} - -#mini-player-download:hover, -#mini-player-play:hover, -#mini-player-controls span:hover { - color: #ffffff !important; - background: #ff2fa8 !important; -} - -#mini-player-title-inner, -.mini-track { - color: #ff2fa8 !important; -} - -.mini-track { - background: transparent !important; - border-color: transparent !important; -} - -.mini-track:hover, -.mini-track.active { - background: #ff2fa8 !important; - color: #ffffff !important; - border-color: var(--border) !important; -} - -#mini-player-seek, -#mini-player-volume { - accent-color: #ff2fa8 !important; - background: #ffffff !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-webkit-slider-thumb, -#mini-player-volume::-webkit-slider-thumb { - background: #ff2fa8 !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-moz-range-track, -#mini-player-volume::-moz-range-track { - background: #ffffff !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-moz-range-thumb, -#mini-player-volume::-moz-range-thumb { - background: #ff2fa8 !important; - border-color: var(--border) !important; -} - -#tab:hover, -#tab.active, -#footer-button:hover, -#footer-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover { - color: var(--fg) !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - background: #ff2fa8 !important; - color: #ffffff !important; - border-color: var(--border) !important; -} - -.chat-view { - --chat-bg: rgba(255, 250, 254, 0.96); - --chat-fg: #241433; - --chat-border: rgba(36, 20, 51, 0.42); - --chat-muted: #765088; - --chat-own-bg: #1d63ff; - --chat-own-fg: #ffffff; - --chat-other-bg: #e2d2e4; - --chat-other-fg: #241433; -} - -.chat-messages { - border: 3px solid rgba(36, 20, 51, 0.82); - border-radius: 18px; - background: - linear-gradient(180deg, rgba(255, 250, 254, 0.94), rgba(255, 240, 251, 0.96)), - #fff0fb; - box-shadow: 7px 7px 0 rgba(36, 20, 51, 0.16); -} - -.chat-message { - border: 2px solid rgba(36, 20, 51, 0.16); - border-radius: 16px; - box-shadow: 3px 3px 0 rgba(36, 20, 51, 0.1); -} - -.chat-message-own { - background: - linear-gradient(180deg, #2f79ff, #005dff); - border-color: #004cd1; -} - -.chat-message-other { - background: #e2d2e4; - border-color: rgba(36, 20, 51, 0.12); -} - -.chat-message-meta, -.chat-date-divider { - color: #765088; -} - -.chat-date-divider::before, -.chat-date-divider::after { - background: rgba(36, 20, 51, 0.28); -} - -.chat-presence, -.chat-typing-indicator, -.chat-reply-compose, -.chat-attach-button, -.chat-send-form textarea, -.chat-emoji-button, -.chat-send-button, -.chat-context-menu, -.chat-emoji-picker { - border: 2px solid rgba(36, 20, 51, 0.72); - background: #fffafd; - color: #241433; - box-shadow: 3px 3px 0 rgba(36, 20, 51, 0.12); -} - -.chat-view .chat-attach-button:hover, -.chat-emoji-button:hover, -.chat-send-button:hover, -.chat-context-menu button:hover { - background: #ff2fa8; - color: #ffffff; - border-color: #241433; -} - -.chat-message-deleted { - background: #eee2ef; - border-color: rgba(36, 20, 51, 0.18); - box-shadow: none; -} - -#post-edit-feed, -.guestbook-edit-btn, -.guestbook-delete-btn, -#post-edit-feed:hover, -.guestbook-edit-btn:hover, -.guestbook-delete-btn:hover, -#post-edit-feed:active, -.guestbook-edit-btn:active, -.guestbook-delete-btn:active { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; - padding: 0 !important; - color: var(--subtle) !important; -} - -.guestbook-edit-btn, -.guestbook-delete-btn { - width: 16px !important; - height: 16px !important; -} - -#mini-player-title { - overflow: hidden !important; - width: 100% !important; - min-width: 0 !important; -} - -#mini-player-title-inner.scrolling { - display: inline-block !important; - max-width: none !important; - width: max-content !important; - overflow: visible !important; - text-overflow: clip !important; -} - - -/* theme ascii/resource cleanup */ -#usage-grid .usage-card, -body.mobile-template #usage-grid .usage-card { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - outline: 0 !important; - border-radius: 0 !important; - padding: 4px 0 !important; - transform: none !important; -} - -#usage-grid .usage-card:hover, -body.mobile-template #usage-grid .usage-card:hover { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; -} - -.usage-ascii { - color: var(--resource-ascii) !important; - text-shadow: none !important; - filter: none !important; -} - -.usage-label { - color: var(--resource-label) !important; - text-shadow: none !important; -} - -#ascii-time { - color: var(--time-ascii) !important; - text-shadow: none !important; -} - -#ascii-time-label { - color: var(--time-label) !important; -} - -/* pastel whiteprint-derived bubblegum pass */ -:root { - --bg: #fbf4fb; - --fg: #30233d; - --border: #b99fd0; - --subtle: #8d759d; - --links: #70aaa8; - --hero-ascii-muted: #a693b6; - --hero-ascii-1: #b99fd0; - --hero-ascii-2: #b4a5d0; - --hero-ascii-3: #aeacd1; - --hero-ascii-4: #a6b3cf; - --hero-ascii-5: #9abacb; - --hero-ascii-6: #86c1c4; - --hero-ascii-7: #70aaa8; - --resource-ascii: #70aaa8; - --resource-label: #9c7faf; - --time-ascii: #70aaa8; - --time-label: #8d759d; -} - -body { - background: - linear-gradient(135deg, rgba(185, 159, 208, 0.22), rgba(112, 170, 168, 0.18)), - linear-gradient(90deg, rgba(185, 159, 208, 0.1) 1px, transparent 1px), - linear-gradient(0deg, rgba(112, 170, 168, 0.08) 1px, transparent 1px), - #fbf4fb; - background-size: auto, 18px 18px, 18px 18px, auto; - color: var(--fg); -} - -.bubble-pop { - opacity: 0.34; - background: - radial-gradient(circle at 14% 18%, rgba(238, 194, 222, 0.5) 0 82px, transparent 83px), - radial-gradient(circle at 84% 24%, rgba(188, 229, 225, 0.55) 0 96px, transparent 97px), - linear-gradient(45deg, rgba(48, 35, 61, 0.035) 25%, transparent 25% 75%, rgba(48, 35, 61, 0.035) 75%); -} - -#sidebar, -#content-layout, -#post, -.account-admin-card, -.usage-card, -pre code.hljs, -#mini-player, -#mini-player-tracks, -#sidebar-footer, -.form-card, -.grid-item { - background: - linear-gradient(145deg, rgba(255, 255, 255, 0.62), rgba(224, 247, 244, 0.34)), - rgba(255, 250, 255, 0.82) !important; - border-color: var(--border) !important; - border-radius: 0 !important; - box-shadow: 4px 4px 0 rgba(112, 82, 134, 0.16) !important; -} - -#sidebar { - border-right: 2px solid var(--border) !important; - box-shadow: 10px 0 0 rgba(112, 82, 134, 0.09) !important; -} - -#title, -.mobile-collapsed-title { - background-image: linear-gradient(0deg, #b99fd0, #a6b3cf, #70aaa8); - background-clip: text; - -webkit-background-clip: text; - color: transparent !important; - -webkit-text-fill-color: transparent; - text-shadow: none !important; -} - -#tab, -#footer-button, -button, -#form-button, -#search-button, -#settings-save, -#color-reset { - background: - linear-gradient(90deg, rgba(185, 159, 208, 0.24), rgba(112, 170, 168, 0.18)), - rgba(255, 250, 255, 0.9) !important; - border: 1px solid var(--border) !important; - color: var(--fg) !important; - border-radius: 0 !important; - box-shadow: 3px 3px 0 rgba(112, 82, 134, 0.16) !important; - text-shadow: none !important; -} - -#tab::before { - content: ">> "; - color: var(--links); -} - -#tab:hover, -#tab.active, -#footer-button:hover, -#footer-button.active, -button:hover, -#form-button:hover, -#search-button:hover, -#settings-save:hover, -#color-reset:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: linear-gradient(90deg, #b99fd0, #70aaa8) !important; - color: #fffaff !important; - border-color: var(--links) !important; - text-shadow: none !important; -} - -/* bubblegum ascii sticker treatment */ -#homepage-hero-ascii > pre, -#ascii-time, -.usage-ascii { - text-shadow: - -1px -1px 0 rgba(255, 252, 255, 0.92), - 1px -1px 0 rgba(255, 252, 255, 0.92), - -1px 1px 0 rgba(255, 252, 255, 0.92), - 1px 1px 0 rgba(255, 252, 255, 0.92), - 0 2px 0 rgba(36, 20, 51, 0.26), - 2px 4px 10px rgba(36, 20, 51, 0.18) !important; -} - -#homepage-hero-ascii > pre:nth-of-type(1), -#homepage-hero-ascii > pre:nth-of-type(9), -#ascii-time-label, -.usage-label { - text-shadow: - 1px 1px 0 rgba(255, 252, 255, 0.78), - 0 2px 6px rgba(36, 20, 51, 0.16) !important; -} -body.bubblegum-theme .content-pagination .guestbook-page-btn { border-radius: 50%; } diff --git a/themes/lib/bubblegum/bubblegum.html b/themes/lib/bubblegum/bubblegum.html deleted file mode 100644 index 4653d60..0000000 --- a/themes/lib/bubblegum/bubblegum.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - {title} | fridge.dev - - - - - - - - - - - - - - -
- -
- -
{content}
- -
-
- - diff --git a/themes/lib/catpuccin/catpuccin.css b/themes/lib/catpuccin/catpuccin.css new file mode 100644 index 0000000..a5ea1a7 --- /dev/null +++ b/themes/lib/catpuccin/catpuccin.css @@ -0,0 +1,11 @@ +:root,body.catpuccin-theme{--bg:#1e1e2e;--fg:#cdd6f4;--border:#585b70;--subtle:#a6adc8;--links:#89b4fa;--chat-own-bg:#585b70;--chat-own-fg:#f5e0dc;--hero-ascii-muted:#45475a;--hero-ascii-1:#f38ba8;--hero-ascii-2:#fab387;--hero-ascii-3:#f9e2af;--hero-ascii-4:#a6e3a1;--hero-ascii-5:#94e2d5;--hero-ascii-6:#89b4fa;--hero-ascii-7:#cba6f7;--selection-bg:#cba6f7;--selection-fg:#1e1e2e;--scrollbar-track:#181825;--scrollbar-thumb:#585b70;--scrollbar-thumb-hover:#7f849c;--scrollbar-thumb-border:#1e1e2e} +body.catpuccin-theme,body.catpuccin-theme.mobile-template{background:#11111b!important;color:var(--fg)!important}body.catpuccin-theme .paper-grain{opacity:.1;background:radial-gradient(circle at 25% 25%,rgba(203,166,247,.11) 0 1px,transparent 1.5px);background-size:27px 27px}body.catpuccin-theme :is(#page-wrapper,#container){background:transparent!important} +body.catpuccin-theme #sidebar,body.catpuccin-theme.mobile-template #sidebar{background:#181825!important;color:#cdd6f4!important;border-color:#45475a!important;box-shadow:none!important}body.catpuccin-theme #header{background:#1e1e2e!important;border-color:#cba6f7!important}body.catpuccin-theme :is(#title,#title .title-letter,.mobile-collapsed-title,.mobile-collapsed-title .title-letter){background-image:linear-gradient(0deg,#f38ba8,#fab387,#f9e2af,#a6e3a1,#89b4fa,#cba6f7)!important} +body.catpuccin-theme #tab::before{color:#cba6f7!important}body.catpuccin-theme :is(#tab,#footer-button,.mobile-nav-button,.mobile-footer-button,#show-sidebar){background:#313244!important;color:#cdd6f4!important;border:1px solid #585b70!important;border-radius:6px!important;box-shadow:none!important}body.catpuccin-theme :is(#tab,#footer-button,.mobile-nav-button,.mobile-footer-button,#show-sidebar):hover,body.catpuccin-theme :is(#tab,#footer-button,.mobile-nav-button,.mobile-footer-button).active{background:#cba6f7!important;color:#1e1e2e!important;border-color:#cba6f7!important;box-shadow:none!important} +body.catpuccin-theme #content-layout,body.catpuccin-theme.mobile-template :is(#content-layout,#content-main){background:#1e1e2e!important;color:#cdd6f4!important;border:1px solid #45475a!important;box-shadow:none!important}body.catpuccin-theme :is(#post,.feed-post,.journal-post,.form-card,.grid-item,.notification-item,.music-album,.gallery-item,.chat-admin-card,.account-admin-card,.site-popup-dialog,.image-modal-content,.feed-reply-notice,.bbcode-editor,#bbcode-preview,table,details,.settings-section){background:#313244!important;color:#cdd6f4!important;border-color:#585b70!important;box-shadow:none!important}body.catpuccin-theme :is(#post,.grid-item,.account-admin-card):hover{background:#45475a!important} +body.catpuccin-theme :is(input,textarea,select,.text-input,.dropdown,.bbcode-dropdown,#bbcode-textbox,#search-box){background:#181825!important;color:#cdd6f4!important;border:1px solid #585b70!important;box-shadow:none!important}body.catpuccin-theme :is(input,textarea,select,.text-input,.dropdown,.bbcode-dropdown,#bbcode-textbox,#search-box):focus{border-color:#cba6f7!important;outline:1px solid #cba6f7!important;box-shadow:none!important}body.catpuccin-theme :is(select,.dropdown,.bbcode-dropdown) option{background:#181825;color:#cdd6f4} +body.catpuccin-theme :is(button,#search-button,#form-button,#two-buttons,.bbcode-btn,input[type=submit],input[type=button],#settings-save,#color-reset,.danger-button,.grid-delete-button,.guestbook-delete-btn,.feed-reply-action-button,.chat-delete-button,#admin-account-delete-form button){background:#45475a!important;color:#cdd6f4!important;border:1px solid #6c7086!important;border-radius:6px!important;box-shadow:none!important}body.catpuccin-theme :is(button,#search-button,#form-button,#two-buttons,.bbcode-btn,input[type=submit],input[type=button],#settings-save,#color-reset,.danger-button,.grid-delete-button,.guestbook-delete-btn,.feed-reply-action-button,.chat-delete-button,#admin-account-delete-form button):hover{background:#cba6f7!important;color:#1e1e2e!important;border-color:#cba6f7!important;box-shadow:none!important} +body.catpuccin-theme #search{padding:6px;background:#313244!important;border:1px solid #585b70}body.catpuccin-theme :is(.bbcode-toolbar,.feed-markdown-toolbar){background:#45475a!important;border-color:#585b70!important}body.catpuccin-theme :is(#bbcode-textbox,#bbcode-preview,.markdown-highlight-layer){background:#181825!important}body.catpuccin-theme .markdown-highlight-input{background:transparent!important}body.catpuccin-theme :is(.checkbox,.radio){appearance:auto!important;-webkit-appearance:auto!important;accent-color:#cba6f7!important;background:initial!important;border:initial!important} +body.catpuccin-theme :is(#mini-player,#mini-player-tracks,#sidebar-footer),body.catpuccin-theme.mobile-template :is(#mini-player,#mini-player-tracks,#sidebar-footer){background:#1e1e2e!important;color:#cdd6f4!important;border-color:#585b70!important;box-shadow:none!important}body.catpuccin-theme :is(#mini-player-title-inner,#mini-player-artist,.mini-track){color:#cdd6f4!important}body.catpuccin-theme :is(#mini-player-play,#mini-player-mute){color:#89b4fa!important}body.catpuccin-theme #mini-player-close{background:transparent!important;color:#a6adc8!important;border:0!important}body.catpuccin-theme :is(#mini-player-seek,#mini-player-volume){accent-color:#cba6f7;background:#45475a!important}body.catpuccin-theme .mini-track.active{background:#45475a!important;color:#a6e3a1!important} +body.catpuccin-theme :is(pre,code,blockquote){background:#181825!important;color:#cdd6f4;border-color:#585b70!important}body.catpuccin-theme :is(#homepage-hero-ascii,#homepage-hero-ascii pre,#ascii,#ascii-time,#usage-grid,#usage-grid .usage-card,.usage-ascii,.usage-label){background:transparent!important;border:0!important;box-shadow:none!important}body.catpuccin-theme a{color:#89b4fa}body.catpuccin-theme :is(.tooltip,.site-notification-toast,.chat-context-menu){background:#181825!important;color:#cdd6f4!important;border-color:#cba6f7!important} +body.catpuccin-theme.mobile-template #sidebar{width:calc(100% - 16px)!important;min-width:0!important;max-width:none!important;box-sizing:border-box!important}body.catpuccin-theme.mobile-template .mobile-nav-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}body.catpuccin-theme.mobile-template .mobile-nav-grid a.mobile-nav-link>#tab.mobile-nav-button{background:#313244!important;color:#cdd6f4!important;border-color:#585b70!important}body.catpuccin-theme.mobile-template .mobile-nav-grid a.mobile-nav-link>#tab.mobile-nav-button.active{background:#cba6f7!important;color:#1e1e2e!important}body.catpuccin-theme.mobile-template #content{padding:10px!important;background:transparent!important}body.catpuccin-theme.mobile-template #content-layout{padding:0!important;background:transparent!important;border:0!important}body.catpuccin-theme.mobile-template #content-main{padding:14px!important;background:#1e1e2e!important;border:1px solid #45475a!important;overflow-x:hidden!important}body.catpuccin-theme.mobile-template #footer-buttons>a.mobile-footer-link>#footer-button.mobile-footer-button{background:#313244!important;color:#cdd6f4!important;border-color:#585b70!important}body.catpuccin-theme.mobile-template #sidebar :is(#mini-player,#mini-player-tracks,#sidebar-footer){margin:8px 10px 0!important;width:auto!important;background:#1e1e2e!important;color:#cdd6f4!important;border-color:#585b70!important}body.catpuccin-theme.mobile-template :is(input,textarea,select,table,pre,img,video,iframe){max-width:100%!important;box-sizing:border-box!important} diff --git a/themes/lib/classic/classic.css b/themes/lib/classic/classic.css index 45d3127..e2042c1 100644 --- a/themes/lib/classic/classic.css +++ b/themes/lib/classic/classic.css @@ -3214,14 +3214,51 @@ body.mobile-template #container { } body.mobile-template #sidebar { - width: 100% !important; + left: 8px !important; + right: 8px !important; + width: auto !important; min-width: 0 !important; - max-width: none !important; + max-width: calc(100vw - 16px) !important; height: auto !important; min-height: 0 !important; - border-right: 0 !important; - border-bottom: 1px solid var(--border) !important; - overflow: visible !important; + max-height: calc(100dvh - 20px) !important; + box-sizing: border-box !important; + border: 1px solid var(--border) !important; + overflow-x: hidden !important; + overflow-y: auto !important; + padding-bottom: 10px !important; + transform: translateY(-50%) !important; + box-shadow: inset -1px 0 0 var(--border) !important; + contain: inline-size; +} + +body.mobile-template.sidebar-is-hidden #sidebar { + transform: translateY(-50%) scale(0.96) !important; +} + +body.mobile-template #header { + margin: 0 !important; + padding: 12px 14px 10px !important; + box-sizing: border-box !important; +} + +body.mobile-template .mobile-nav-grid { + width: auto !important; + grid-template-columns: repeat(2, minmax(0, 1fr)) !important; + gap: 6px !important; + padding: 10px 12px 0 !important; + box-sizing: border-box !important; +} + +body.mobile-template .mobile-nav-grid a.mobile-nav-link { + min-width: 0 !important; +} + +body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button { + width: 100% !important; + min-width: 0 !important; + min-height: 38px !important; + margin: 0 !important; } body.mobile-template #content { @@ -3272,11 +3309,103 @@ body.mobile-template #mini-player, body.mobile-template #mini-player-tracks, body.mobile-template #sidebar-footer { width: auto !important; - margin: 10px 14px 0 14px !important; + margin: 10px 12px 0 !important; + box-sizing: border-box !important; background: var(--bg) !important; border-color: var(--border) !important; } +/* Current shared player structure: metadata occupies the centre, volume stays + on the playback row, and only close is pinned in the top-right corner. */ +#mini-player { + position: relative; +} + +#mini-player-title { + padding-right: 16px; + box-sizing: border-box; +} + +#mini-player-artist { + display: block; + min-width: 0; + overflow: hidden; + color: var(--subtle); + font-family: "MainRegular", var(--emoji-font), monospace; + font-size: 10px; + line-height: 1.15; + text-overflow: ellipsis; + white-space: nowrap; +} + +#mini-player-row { + width: 100%; + min-width: 0; +} + +#mini-player-seek { + min-width: 0; + flex: 1 1 auto; +} + +#mini-player-volume-wrapper { + position: relative; + display: flex; + align-items: center; + justify-content: center; + width: 16px; + min-width: 16px; + height: 16px; + flex: 0 0 16px; + gap: 0; +} + +#mini-player-mute { + display: inline-flex; + align-items: center; + justify-content: center; + width: 16px; + min-width: 16px; + height: 16px; + color: var(--links) !important; + font-size: 13px; + line-height: 1; +} + +#mini-player-volume { + position: absolute; + right: 16px; + bottom: 5px; +} + +#mini-player-row.mini-player-volume-expanded #mini-player-volume-wrapper { + flex: 1 1 auto; + width: auto; + gap: 6px; +} + +#mini-player-row.mini-player-volume-expanded #mini-player-volume { + position: static; + order: -1; + flex: 1 1 auto; + width: 100%; + min-width: 0; + opacity: 1; +} + +#mini-player-controls { + position: absolute; + top: 4px; + right: 4px; + width: 14px; + min-width: 14px; + padding: 0; +} + +#mini-player-close { + color: var(--subtle) !important; +} + body.mobile-template #footer-buttons { display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)) !important; @@ -3295,6 +3424,10 @@ body.mobile-template #footer-buttons { body.mobile-template #footer-buttons { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; } + + body.mobile-template .mobile-nav-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)) !important; + } } /* keep the custom settings theme picker crisp inside classic */ diff --git a/themes/lib/classic/classic.html b/themes/lib/classic/classic.html index bc6c8ad..f77a3f9 100644 --- a/themes/lib/classic/classic.html +++ b/themes/lib/classic/classic.html @@ -6,7 +6,7 @@ {title} | fridge.dev - + @@ -50,23 +50,13 @@
-
- - -
+
-
now playing: nothing
-
- - -
-
-
- - - - +
nothing selected
+
 
+
+
diff --git a/themes/lib/cottagecore/cottagecore.css b/themes/lib/cottagecore/cottagecore.css deleted file mode 100644 index 426506f..0000000 --- a/themes/lib/cottagecore/cottagecore.css +++ /dev/null @@ -1,894 +0,0 @@ -:root { - --bg: #f4ead3; - --fg: #2e2118; - --border: #5d3b29; - --subtle: #7b6550; - --links: #8d342f; - --chat-own-fg: #ffffff; - --hero-ascii-muted: #7b6550; - --hero-ascii-1: #8d342f; - --hero-ascii-2: #9d463b; - --hero-ascii-3: #a75d45; - --hero-ascii-4: #9b7446; - --hero-ascii-5: #7f7f45; - --hero-ascii-6: #6f8f4e; - --hero-ascii-7: #55783f; - --hero-ascii-opacity: 0.98; -} - -body { - background: - radial-gradient(circle at 14% 16%, rgba(141, 52, 47, 0.18) 0 52px, transparent 53px), - radial-gradient(circle at 84% 14%, rgba(92, 115, 61, 0.18) 0 68px, transparent 69px), - linear-gradient(90deg, rgba(93, 59, 41, 0.05) 1px, transparent 1px), - linear-gradient(0deg, rgba(93, 59, 41, 0.04) 1px, transparent 1px), - linear-gradient(180deg, #f8efd9 0%, #ead8b9 52%, #d6c29d 100%); - background-size: auto, auto, 34px 34px, 34px 34px, auto; - color: var(--fg); -} - -.cottage-wall { - position: fixed; - inset: 0; - z-index: -3; - pointer-events: none; - background: - linear-gradient(90deg, transparent 0 48%, rgba(255, 255, 255, 0.26) 48% 49%, transparent 49% 100%), - radial-gradient(ellipse at 50% 0%, rgba(255, 248, 224, 0.42), transparent 52%); - opacity: 0.6; -} - -.rose-bramble { - position: fixed; - top: 0; - bottom: 0; - width: 120px; - z-index: -2; - pointer-events: none; - opacity: 0.78; - background: - radial-gradient(circle at 40px 70px, #b84d58 0 9px, transparent 10px), - radial-gradient(circle at 72px 145px, #8d342f 0 7px, transparent 8px), - radial-gradient(circle at 34px 230px, #d4868f 0 8px, transparent 9px), - linear-gradient(106deg, transparent 0 44%, rgba(55, 89, 48, 0.66) 44% 46%, transparent 46% 100%), - linear-gradient(74deg, transparent 0 54%, rgba(55, 89, 48, 0.48) 54% 56%, transparent 56% 100%); - background-size: 120px 280px; -} - -.rose-bramble-left { - left: 0; -} - -.rose-bramble-right { - right: 0; - transform: scaleX(-1); -} - -#page-wrapper, -#container { - background: transparent; -} - -#sidebar { - width: 282px; - padding-top: 8px; - background: - linear-gradient(180deg, rgba(245, 231, 199, 0.92), rgba(216, 194, 156, 0.9)), - var(--bg); - border-right: 3px solid var(--border); - box-shadow: - inset -10px 0 0 rgba(93, 59, 41, 0.08), - 10px 0 22px rgba(70, 43, 28, 0.14); -} - -#header { - position: relative; - margin: 10px 12px 12px 12px; - padding: 14px 12px 16px 12px; - background: - linear-gradient(180deg, rgba(255, 248, 224, 0.92), rgba(238, 219, 184, 0.92)); - border: 2px solid var(--border); - border-radius: 8px 8px 4px 4px; - box-shadow: - inset 0 0 0 3px rgba(141, 52, 47, 0.08), - 4px 4px 0 rgba(93, 59, 41, 0.18); -} - -#header::before { - content: ""; - position: absolute; - left: 10px; - right: 10px; - bottom: 5px; - height: 2px; - background: - linear-gradient(90deg, transparent 0 8%, #6f8f4e 8% 16%, transparent 16% 22%, #8d342f 22% 30%, transparent 30% 36%, #6f8f4e 36% 44%, transparent 44% 100%); - opacity: 0.85; -} - -#title, -.mobile-collapsed-title { - color: #6f261f; - font-family: "MainBold", var(--emoji-font), monospace; - font-size: 22px; - text-shadow: 1px 1px 0 #f8efd9; -} - -#subtitle, -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -.usage-label { - color: var(--subtle); -} - -#hide-sidebar, -#show-sidebar { - color: var(--subtle); -} - -#hide-sidebar:hover, -#show-sidebar:hover { - color: var(--links); -} - -#sidebar > a { - display: block; - margin: 0 12px 7px 12px; -} - -#tab { - position: relative; - min-height: 33px; - padding: 7px 12px 7px 24px; - display: flex; - align-items: center; - background: - linear-gradient(180deg, rgba(255, 248, 224, 0.82), rgba(229, 207, 169, 0.82)); - color: var(--fg); - border: 1px solid var(--border); - border-radius: 999px 12px 12px 999px; - box-shadow: - 3px 3px 0 rgba(93, 59, 41, 0.16), - inset 0 0 0 2px rgba(111, 143, 78, 0.1); -} - -#tab::before { - content: ""; - position: absolute; - left: 9px; - width: 8px; - height: 8px; - border-radius: 50%; - background: #8d342f; - box-shadow: - 5px -3px 0 -2px #d4868f, - 8px 3px 0 -3px #6f8f4e; -} - -#tab:hover, -#tab.active { - transform: translate(2px, 1px); - background: - linear-gradient(180deg, #6f8f4e, #476639); - color: #fff8e0; - border-color: #2f4b2c; - box-shadow: 1px 1px 0 rgba(93, 59, 41, 0.2); -} - -#content { - padding: 34px; -} - -#content-layout { - position: relative; - isolation: isolate; - max-width: 900px; - min-height: calc(100% - 2px); - padding: 24px; - background: - linear-gradient(180deg, rgba(255, 248, 224, 0.94), rgba(242, 225, 194, 0.94)); - border: 2px solid var(--border); - border-radius: 12px 12px 5px 5px; - box-shadow: - 0 0 0 8px rgba(111, 143, 78, 0.12), - 12px 14px 0 rgba(93, 59, 41, 0.14); -} - -#content-layout::before { - content: ""; - position: absolute; - inset: -15px; - z-index: -1; - pointer-events: none; - border: 1px solid rgba(93, 59, 41, 0.28); - border-radius: 16px 16px 7px 7px; - background: - radial-gradient(circle at 18px 18px, rgba(141, 52, 47, 0.22) 0 5px, transparent 6px), - linear-gradient(116deg, transparent 0 49%, rgba(55, 89, 48, 0.24) 49% 50%, transparent 50% 100%); -} - -#content-main > *:first-child { - margin-top: 0; -} - -a { - color: var(--links); -} - -a:hover { - color: #476639; -} - -#post, -.account-admin-card, -.usage-card, -pre code.hljs, -.form-card, -.grid-item { - background: rgba(255, 248, 224, 0.82); - color: var(--fg); - border: 1px solid rgba(93, 59, 41, 0.75); - border-radius: 8px 8px 3px 3px; - box-shadow: - 4px 5px 0 rgba(93, 59, 41, 0.12), - inset 0 0 0 2px rgba(111, 143, 78, 0.06); -} - -#post { - padding: 15px 16px; -} - -#post:hover, -.account-admin-card:hover, -.usage-card:hover { - background: rgba(255, 252, 235, 0.94); -} - -#post-content, -#post-title, -.form-card, -.form-card p, -.form-field label, -.checkbox-label span, -.radio-label span, -.color-row, -.color-row span, -.feed-reply-body, -.feed-reply-meta, -.guestbook-post-actions, -#content-main, -#content-main h1, -#content-main h2, -#content-main h3, -#content-main h4, -#content-main p, -#content-main li { - color: var(--fg); -} - -#post-description, -#post-date, -#post-date-feed, -#post-username, -#post-bookmark, -#post-bookmark-feed, -#post-edit-feed, -.form-card p, -.form-field label, -.color-row span, -.feed-reply-meta { - color: var(--subtle); -} - -#search { - gap: 9px; -} - -#search-box, -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -#bbcode-preview, -#create-account-form input[type="text"], -#admin-account-form input[type="text"], -#admin-account-form textarea { - background: #fff8e0; - color: var(--fg); - border: 1px solid var(--border); - border-radius: 8px; -} - -.dropdown option, -.bbcode-dropdown option { - background: #fff8e0; - color: var(--fg); -} - -#search-box:hover, -#search-box:focus, -input:hover, -input:focus, -textarea:hover, -textarea:focus, -.dropdown:hover, -.dropdown:focus, -.text-input:hover, -.text-input:focus, -.bbcode-dropdown:hover, -.bbcode-dropdown:focus, -.bbcode-btn:hover, -.bbcode-btn:focus, -#bbcode-textbox:focus { - background: #fffdf0; - color: var(--fg); - border-color: var(--links); - box-shadow: 0 0 0 3px rgba(141, 52, 47, 0.12); - outline: none; -} - -.bbcode-editor, -.bbcode-toolbar, -#bbcode-preview { - background: rgba(255, 248, 224, 0.72); - color: var(--fg); - border-color: var(--border); -} - -.checkbox, -.radio { - background: #fff8e0; - border: 1px solid var(--border); -} - -.checkbox:checked { - background-color: #6f8f4e; -} - -.radio:checked { - background: radial-gradient(circle, #8d342f 30%, #fff8e0 34%); -} - -.color-input { - background: #fff8e0; - border: 1px solid var(--border); - border-radius: 8px; -} - -.color-input:hover, -.color-input:focus { - border-color: var(--links); - box-shadow: 0 0 0 3px rgba(141, 52, 47, 0.12); -} - -#search-button, -#form-button, -#lastfm-link-button, -#settings-save, -#color-reset, -.danger-button, -button, -#footer-button { - background: - linear-gradient(180deg, #6f8f4e, #476639); - color: #fff8e0; - border: 1px solid #2f4b2c; - border-radius: 8px; - box-shadow: 3px 3px 0 rgba(93, 59, 41, 0.18); -} - -#search-button:hover, -#form-button:hover, -#settings-save:hover, -#color-reset:hover, -button:hover, -#footer-button:hover { - background: - linear-gradient(180deg, #a94f58, #7b2e31); - color: #fff8e0; -} - -#search-button:active, -#form-button:active, -#settings-save:active, -#color-reset:active, -button:active, -#footer-button:active, -.bbcode-btn:active { - transform: translate(1px, 1px); - box-shadow: 1px 1px 0 rgba(93, 59, 41, 0.16); -} - -#settings-save { - background: #6f8f4e !important; - color: #fff8e0 !important; -} - -.danger-button, -.grid-delete-button, -#admin-account-delete-form button { - background: #8d342f; - color: #fff8e0; -} - -.form-button-disabled, -.form-button-disabled:hover, -.form-button-disabled:active, -.bbcode-btn.disabled:hover, -.bbcode-dropdown.disabled:hover { - background: #d8c7a8; - color: var(--subtle); - box-shadow: none; - transform: none; - cursor: not-allowed; -} - -#mini-player, -#mini-player-tracks, -#sidebar-footer { - margin: 10px 12px; - width: calc(100% - 24px); - box-sizing: border-box; - background: rgba(255, 248, 224, 0.82); - border: 1px solid var(--border); - border-radius: 8px 8px 3px 3px; - box-shadow: 3px 3px 0 rgba(93, 59, 41, 0.14); -} - -#mini-player { - padding: 8px; - gap: 5px; - overflow-x: hidden; -} - -#mini-player-main { - gap: 7px; -} - -#mini-player-art-wrapper { - width: 30px; - height: 30px; - margin-top: 0; -} - -#mini-player-art { - border-color: var(--border); - border-radius: 4px; -} - -#mini-player-meta { - min-width: 0; -} - -#mini-player-title-inner, -.mini-track { - color: var(--links); -} - -#mini-player-title-inner { - display: block; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -#mini-player-play, -#mini-player-controls span { - color: var(--fg); -} - -#mini-player-controls span:hover, -#mini-player-play:hover { - color: var(--links); -} - -#mini-player-seek, -#mini-player-volume { - background: #fff8e0; - border: 1px solid var(--border); - accent-color: #8d342f; -} - -#sidebar-footer { - padding: 14px 8px 10px 8px; -} - -#footer-text { - display: block; - margin-bottom: 10px; - text-align: center; -} - -#footer-buttons { - gap: 4px; -} - -#footer-button { - display: flex; - min-height: 24px; - align-items: center; - justify-content: center; - padding: 4px 6px; -} - -#footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: var(--links) !important; - color: #fff8e0 !important; - border-color: var(--border) !important; -} - -.tooltip { - background: #fff8e0; - color: var(--fg); - border: 1px solid var(--border); - border-radius: 8px 8px 3px 3px; - box-shadow: - 4px 4px 0 rgba(93, 59, 41, 0.18), - inset 0 0 0 2px rgba(111, 143, 78, 0.08); -} - -#ascii, -#ascii-time, -#ascii-time-label, -.usage-ascii { - color: #6f4a35; - text-shadow: 1px 1px 0 rgba(255, 248, 224, 0.72); -} - -#error { - color: #8d342f; -} - -#spa-loading { - background: #fff8e0; - color: var(--fg); - border: 1px solid var(--border); - border-radius: 8px; - box-shadow: 4px 4px 0 rgba(93, 59, 41, 0.16); -} - -body.mobile-template { - background: - radial-gradient(circle at 14% 16%, rgba(141, 52, 47, 0.18) 0 52px, transparent 53px), - radial-gradient(circle at 84% 14%, rgba(92, 115, 61, 0.18) 0 68px, transparent 69px), - linear-gradient(180deg, #f8efd9 0%, #ead8b9 52%, #d6c29d 100%) !important; - color: var(--fg) !important; -} - -body.mobile-template .mobile-collapsed-header, -body.mobile-template #sidebar, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks, -body.mobile-template #sidebar-footer, -body.mobile-template #content-layout, -body.mobile-template #post, -body.mobile-template .usage-card { - background: rgba(255, 248, 224, 0.9) !important; - border-color: var(--border) !important; - border-radius: 8px !important; - box-shadow: 4px 4px 0 rgba(93, 59, 41, 0.14) !important; - color: var(--fg) !important; -} - -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - background: #6f8f4e !important; - color: #fff8e0 !important; - border-color: #2f4b2c !important; - border-radius: 8px !important; -} - -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-collapsed-header #show-sidebar:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - background: var(--links) !important; - color: #fff8e0 !important; - border-color: var(--border) !important; -} - -body.mobile-template input, -body.mobile-template textarea, -body.mobile-template .dropdown, -body.mobile-template .text-input, -body.mobile-template .bbcode-dropdown, -body.mobile-template .bbcode-btn, -body.mobile-template #bbcode-textbox, -body.mobile-template #bbcode-preview, -body.mobile-template .checkbox, -body.mobile-template .radio, -body.mobile-template .color-input { - background: #fff8e0 !important; - color: var(--fg) !important; - border-color: var(--border) !important; -} - -body.mobile-template .checkbox:checked { - background-color: var(--links) !important; -} - -body.mobile-template .radio:checked { - background: radial-gradient(circle, var(--links) 30%, #fff8e0 34%) !important; -} - -body.mobile-template #content { - padding: 12px !important; -} - -body.mobile-template #content-layout { - padding: 14px !important; - background: rgba(255, 248, 224, 0.9) !important; - border-color: var(--border) !important; -} - -body.mobile-template #content-layout::before { - display: none; -} - -body.mobile-template #content-main { - padding: 0 !important; - background: transparent !important; - color: var(--fg) !important; -} - -body.mobile-template #sidebar { - width: 100% !important; - min-width: 0 !important; - max-width: none !important; - height: auto !important; - min-height: 0 !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid, -body.mobile-template #footer-buttons { - width: auto !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - min-height: 34px !important; - box-sizing: border-box !important; -} - -#mini-player, -#mini-player-tracks, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks { - background: rgba(255, 248, 224, 0.94) !important; - color: var(--fg) !important; - border-color: var(--border) !important; - box-shadow: 4px 4px 0 rgba(93, 59, 41, 0.14) !important; -} - -#mini-player-main, -#mini-player-meta, -#mini-player-title, -#mini-player-row, -#mini-player-controls, -#mini-player-volume-wrapper { - color: var(--fg); -} - -#mini-player-art-wrapper, -#mini-player-art { - background: #fff8e0 !important; - border-color: var(--border) !important; -} - -#mini-player-download, -#mini-player-play, -#mini-player-controls span { - color: var(--links) !important; -} - -#mini-player-download:hover, -#mini-player-play:hover, -#mini-player-controls span:hover { - color: #fff8e0 !important; - background: var(--links) !important; -} - -#mini-player-title-inner, -.mini-track { - color: var(--links) !important; -} - -.mini-track { - background: transparent !important; - border-color: transparent !important; -} - -.mini-track:hover, -.mini-track.active { - background: var(--links) !important; - color: #fff8e0 !important; - border-color: var(--border) !important; -} - -#mini-player-seek, -#mini-player-volume { - accent-color: var(--links) !important; - background: #fff8e0 !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-webkit-slider-thumb, -#mini-player-volume::-webkit-slider-thumb { - background: var(--links) !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-moz-range-track, -#mini-player-volume::-moz-range-track { - background: #fff8e0 !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-moz-range-thumb, -#mini-player-volume::-moz-range-thumb { - background: var(--links) !important; - border-color: var(--border) !important; -} - -#tab:hover, -#tab.active, -#tab:hover::before, -#tab.active::before, -#footer-button:hover, -#footer-button.active, -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - color: #fff8e0 !important; -} - -#post-edit-feed, -.guestbook-edit-btn, -.guestbook-delete-btn, -#post-edit-feed:hover, -.guestbook-edit-btn:hover, -.guestbook-delete-btn:hover, -#post-edit-feed:active, -.guestbook-edit-btn:active, -.guestbook-delete-btn:active { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; - padding: 0 !important; - color: var(--subtle) !important; -} - -.guestbook-edit-btn, -.guestbook-delete-btn { - width: 16px !important; - height: 16px !important; -} - -#mini-player-title { - overflow: hidden !important; - width: 100% !important; - min-width: 0 !important; -} - -#mini-player-title-inner.scrolling { - display: inline-block !important; - max-width: none !important; - width: max-content !important; - overflow: visible !important; - text-overflow: clip !important; -} - - -/* theme ascii/resource cleanup */ -#usage-grid .usage-card, -body.mobile-template #usage-grid .usage-card { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - outline: 0 !important; - border-radius: 0 !important; - padding: 4px 0 !important; - transform: none !important; -} - -#usage-grid .usage-card:hover, -body.mobile-template #usage-grid .usage-card:hover { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; -} - -.usage-ascii { - color: var(--resource-ascii) !important; - text-shadow: none !important; - filter: none !important; -} - -.usage-label { - color: var(--resource-label) !important; - text-shadow: none !important; -} - -#ascii-time { - color: var(--time-ascii) !important; - text-shadow: none !important; -} - -#ascii-time-label { - color: var(--time-label) !important; -} - -/* distinct cottage controls: stitched soft cloth buttons */ -#tab, -#footer-button, -button, -#form-button, -#search-button, -#settings-save, -#color-reset, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - border: 2px dashed color-mix(in srgb, var(--border) 76%, #f4e5c7 24%) !important; - border-radius: 10px 3px 10px 3px !important; - background: - linear-gradient(180deg, rgba(255, 248, 230, 0.82), rgba(218, 193, 148, 0.38)), - color-mix(in srgb, var(--bg) 76%, #fff7df 24%) !important; - color: var(--fg) !important; - box-shadow: - inset 0 0 0 1px rgba(255, 255, 240, 0.42), - 3px 4px 0 rgba(96, 74, 44, 0.2) !important; -} - -#tab::before { - content: "✿ "; - color: var(--links); -} - -#tab:hover, -#tab.active, -#footer-button:hover, -#footer-button.active, -button:hover, -#form-button:hover, -#search-button:hover, -#settings-save:hover, -#color-reset:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: - linear-gradient(180deg, rgba(250, 234, 197, 0.9), rgba(135, 84, 74, 0.22)), - color-mix(in srgb, var(--links) 18%, #fff6dd 82%) !important; - color: var(--fg) !important; - border-style: solid !important; - transform: translate(-1px, -1px) !important; -} -body.cottagecore-theme .content-pagination .guestbook-page-btn { border-radius: 5px; } diff --git a/themes/lib/cottagecore/cottagecore.html b/themes/lib/cottagecore/cottagecore.html deleted file mode 100644 index a097b86..0000000 --- a/themes/lib/cottagecore/cottagecore.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - {title} | fridge.dev - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- -
-{content} -
- -
- - -
-
-
- - diff --git a/themes/lib/gothic/gothic.css b/themes/lib/gothic/gothic.css deleted file mode 100644 index 594ad51..0000000 --- a/themes/lib/gothic/gothic.css +++ /dev/null @@ -1,967 +0,0 @@ -:root { - --bg: #09070d; - --fg: #efe7f2; - --border: #6f263b; - --subtle: #aa8eaa; - --links: #d94f72; - --chat-own-fg: #ffffff; - --hero-ascii-muted: #8d778f; - --hero-ascii-1: #d94f72; - --hero-ascii-2: #c45b81; - --hero-ascii-3: #ad678e; - --hero-ascii-4: #987299; - --hero-ascii-5: #aa8eaa; - --hero-ascii-6: #c2a8bf; - --hero-ascii-7: #efe7f2; - --hero-ascii-opacity: 0.9; -} - -body { - background: - radial-gradient(circle at 50% 22%, transparent 0 92px, rgba(217, 79, 114, 0.12) 93px 94px, transparent 95px 138px, rgba(239, 231, 242, 0.06) 139px 140px, transparent 141px), - linear-gradient(135deg, rgba(217, 79, 114, 0.12) 0 1px, transparent 1px 22px), - linear-gradient(45deg, rgba(239, 231, 242, 0.035) 0 1px, transparent 1px 18px), - radial-gradient(ellipse at 50% 0%, rgba(111, 38, 59, 0.38), transparent 48%), - radial-gradient(circle at 82% 82%, rgba(217, 79, 114, 0.16), transparent 30%), - linear-gradient(180deg, #050308 0%, #100814 42%, #060409 100%); - color: var(--fg); -} - -.gothic-vault, -.gothic-candles, -.gothic-rose-window, -.gothic-spires { - position: fixed; - inset: 0; - z-index: -2; - pointer-events: none; -} - -.gothic-vault { - opacity: 0.72; - background: - repeating-linear-gradient(90deg, transparent 0 22px, rgba(239, 231, 242, 0.035) 22px 23px), - repeating-linear-gradient(0deg, transparent 0 17px, rgba(239, 231, 242, 0.026) 17px 18px), - linear-gradient(118deg, transparent 0 48%, rgba(217, 79, 114, 0.13) 48% 49%, transparent 49% 100%), - linear-gradient(62deg, transparent 0 50%, rgba(217, 79, 114, 0.1) 50% 51%, transparent 51% 100%); - mix-blend-mode: screen; -} - -.gothic-candles { - background: - radial-gradient(ellipse at 12% 92%, rgba(214, 179, 106, 0.28), transparent 16%), - radial-gradient(ellipse at 88% 88%, rgba(214, 179, 106, 0.2), transparent 18%); - filter: blur(4px); -} - -.gothic-rose-window { - z-index: -1; - inset: 28px 0 auto 282px; - height: 250px; - opacity: 0.42; - background: - radial-gradient(circle at 50% 50%, rgba(239, 231, 242, 0.08) 0 12px, transparent 13px), - repeating-conic-gradient(from 0deg at 50% 50%, rgba(217, 79, 114, 0.28) 0 5deg, transparent 5deg 15deg), - radial-gradient(circle at 50% 50%, transparent 0 70px, rgba(170, 142, 170, 0.28) 71px 73px, transparent 74px 116px, rgba(111, 38, 59, 0.42) 117px 119px, transparent 120px); - mask-image: radial-gradient(circle at 50% 50%, #000 0 122px, transparent 124px); -} - -.gothic-rose-window::before, -.gothic-rose-window::after { - content: ""; - position: absolute; - left: 50%; - top: 26px; - width: 2px; - height: 198px; - background: rgba(239, 231, 242, 0.12); - transform-origin: 50% 99px; -} - -.gothic-rose-window::after { - transform: rotate(90deg); -} - -.gothic-spires { - z-index: -1; - opacity: 0.36; - background: - linear-gradient(116deg, transparent 0 46%, rgba(239, 231, 242, 0.08) 46% 47%, transparent 47%), - linear-gradient(64deg, transparent 0 53%, rgba(239, 231, 242, 0.06) 53% 54%, transparent 54%), - repeating-linear-gradient(90deg, transparent 0 86px, rgba(217, 79, 114, 0.13) 86px 88px, transparent 88px 172px); - clip-path: polygon(0 0, 100% 0, 100% 100%, 88% 100%, 88% 28%, 82% 16%, 76% 28%, 76% 100%, 64% 100%, 64% 34%, 58% 20%, 52% 34%, 52% 100%, 40% 100%, 40% 30%, 34% 17%, 28% 30%, 28% 100%, 16% 100%, 16% 36%, 10% 24%, 4% 36%, 4% 100%, 0 100%); -} - -#page-wrapper, -#container { - background: transparent; -} - -#sidebar { - width: 282px; - background: - repeating-linear-gradient(180deg, transparent 0 48px, rgba(217, 79, 114, 0.08) 48px 49px, transparent 49px 96px), - linear-gradient(180deg, rgba(17, 10, 22, 0.96), rgba(6, 4, 9, 0.96)), - #09070d; - border-right: 2px solid #2e1826; - box-shadow: - inset -1px 0 0 rgba(217, 79, 114, 0.32), - 12px 0 32px rgba(0, 0, 0, 0.4); -} - -#header { - position: relative; - margin: 12px; - padding: 12px 12px 14px 12px; - background: - linear-gradient(135deg, transparent 0 12%, rgba(217, 79, 114, 0.18) 12% 15%, transparent 15% 100%), - linear-gradient(180deg, rgba(39, 22, 45, 0.9), rgba(8, 5, 12, 0.94)); - border: 2px solid var(--border); - border-radius: 0; - box-shadow: - inset 0 0 0 1px rgba(239, 231, 242, 0.08), - 5px 5px 0 #000, - 0 10px 24px rgba(0, 0, 0, 0.28); - text-align: left; -} - -#header::before { - content: "†"; - position: absolute; - left: 12px; - top: -18px; - color: #d6b36a; - font-family: Georgia, "Times New Roman", serif; - font-size: 30px; - line-height: 1; - text-shadow: - 0 0 14px rgba(214, 179, 106, 0.38), - 2px 2px 0 #000; -} - -#header::after { - content: "memento"; - position: absolute; - right: 10px; - bottom: 7px; - color: var(--links); - font-family: "MainBold", var(--emoji-font), monospace; - font-size: 11px; - text-shadow: 0 0 8px rgba(217, 79, 114, 0.62); -} - -#title, -.mobile-collapsed-title { - color: #f8edf5; - font-family: "MainBold", var(--emoji-font), monospace; - font-size: 22px; - text-transform: uppercase; - text-shadow: - 0 0 10px rgba(217, 79, 114, 0.58), - 2px 2px 0 #000; -} - -#subtitle, -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -.usage-label { - color: var(--subtle); -} - -#hide-sidebar, -#show-sidebar { - color: var(--subtle); -} - -#hide-sidebar:hover, -#show-sidebar:hover { - color: var(--links); -} - -#sidebar > a { - display: block; - margin: 0 12px 7px 12px; -} - -#tab { - min-height: 34px; - padding: 8px 12px 8px 22px; - position: relative; - display: flex; - align-items: center; - color: var(--fg); - background: - radial-gradient(ellipse at 100% 50%, rgba(239, 231, 242, 0.08), transparent 36%), - linear-gradient(90deg, rgba(217, 79, 114, 0.16), rgba(19, 10, 24, 0.92)); - border: 1px solid rgba(170, 142, 170, 0.24); - border-left: 4px solid var(--border); - border-radius: 0; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.05), - 3px 3px 0 rgba(0, 0, 0, 0.42); - text-transform: lowercase; -} - -#tab::before { - content: "†"; - position: absolute; - left: 8px; - width: auto; - height: auto; - transform: none; - background: transparent; - color: var(--links); - font-family: Georgia, "Times New Roman", serif; - font-size: 15px; - line-height: 1; - text-shadow: 0 0 8px rgba(217, 79, 114, 0.58); -} - -#tab:hover, -#tab.active { - background: - linear-gradient(90deg, #f2a7ba, #d94f72 100%); - color: #fff7fb; - border-color: #d94f72; - transform: translate(3px, -1px); - box-shadow: - 1px 5px 0 #000, - 0 0 16px rgba(217, 79, 114, 0.28); -} - -#content { - padding: 34px; -} - -#content-layout { - position: relative; - isolation: isolate; - max-width: 920px; - min-height: calc(100% - 2px); - padding: 24px; - background: - radial-gradient(ellipse at 50% -10%, rgba(239, 231, 242, 0.05), transparent 38%), - linear-gradient(135deg, rgba(217, 79, 114, 0.08) 0 10%, transparent 10% 100%), - linear-gradient(180deg, rgba(18, 10, 23, 0.94), rgba(8, 5, 12, 0.96)); - border: 2px solid var(--border); - border-radius: 0; - box-shadow: - inset 0 0 0 1px rgba(239, 231, 242, 0.06), - 7px 7px 0 #000, - 0 18px 50px rgba(0, 0, 0, 0.38), - 0 0 34px rgba(111, 38, 59, 0.18); -} - -#content-layout::before { - content: ""; - position: absolute; - inset: -15px; - z-index: -1; - pointer-events: none; - border: 1px solid rgba(170, 142, 170, 0.18); - border-radius: 0; - background: - radial-gradient(ellipse at 50% 0, transparent 0 44px, rgba(217, 79, 114, 0.18) 45px 46px, transparent 47px 88px), - repeating-linear-gradient(135deg, transparent 0 14px, rgba(217, 79, 114, 0.11) 14px 15px, transparent 15px 28px); -} - -#content-layout::after { - content: "†"; - position: absolute; - right: 18px; - top: 12px; - color: rgba(214, 179, 106, 0.52); - font-family: Georgia, "Times New Roman", serif; - font-size: 28px; - text-shadow: 0 0 14px rgba(214, 179, 106, 0.24); -} - -#content-main > *:first-child { - margin-top: 0; -} - -a { - color: var(--links); -} - -a:hover { - color: #f2a7ba; -} - -#post, -.account-admin-card, -.usage-card, -pre code.hljs, -.form-card, -.grid-item { - background: rgba(16, 9, 22, 0.88); - color: var(--fg); - border: 1px solid rgba(111, 38, 59, 0.78); - border-radius: 0; - box-shadow: - inset 0 0 0 1px rgba(239, 231, 242, 0.04), - 4px 4px 0 rgba(0, 0, 0, 0.48), - 0 8px 20px rgba(0, 0, 0, 0.26); -} - -#post { - padding: 15px 16px; -} - -#post:hover, -.account-admin-card:hover, -.usage-card:hover { - background: rgba(28, 14, 34, 0.9); -} - -#post-content, -#post-title, -.form-card, -.form-card p, -.form-field label, -.checkbox-label span, -.radio-label span, -.color-row, -.color-row span, -.feed-reply-body, -.feed-reply-meta, -.guestbook-post-actions, -#content-main, -#content-main h1, -#content-main h2, -#content-main h3, -#content-main h4, -#content-main p, -#content-main li { - color: var(--fg); -} - -#post-description, -#post-date, -#post-date-feed, -#post-username, -#post-bookmark, -#post-bookmark-feed, -#post-edit-feed, -.form-card p, -.form-field label, -.color-row span, -.feed-reply-meta { - color: var(--subtle); -} - -#search-box, -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -#bbcode-preview, -#create-account-form input[type="text"], -#admin-account-form input[type="text"], -#admin-account-form textarea { - background: #0b0710; - color: var(--fg); - border: 1px solid rgba(170, 142, 170, 0.42); - border-radius: 8px; -} - -.dropdown option, -.bbcode-dropdown option { - background: #0b0710; - color: var(--fg); -} - -#search-box:hover, -#search-box:focus, -input:hover, -input:focus, -textarea:hover, -textarea:focus, -.dropdown:hover, -.dropdown:focus, -.text-input:hover, -.text-input:focus, -.bbcode-dropdown:hover, -.bbcode-dropdown:focus, -.bbcode-btn:hover, -.bbcode-btn:focus, -#bbcode-textbox:focus { - background: #140b1a; - border-color: var(--links); - box-shadow: 0 0 0 3px rgba(217, 79, 114, 0.14); - outline: none; -} - -.bbcode-editor, -.bbcode-toolbar, -#bbcode-preview { - background: rgba(12, 7, 17, 0.82); - color: var(--fg); - border-color: rgba(170, 142, 170, 0.34); -} - -.checkbox, -.radio, -.color-input { - background: #0b0710; - border: 1px solid rgba(170, 142, 170, 0.48); -} - -.checkbox:checked { - background-color: var(--links); -} - -.radio:checked { - background: radial-gradient(circle, var(--links) 30%, #0b0710 34%); -} - -#search-button, -#form-button, -#lastfm-link-button, -#settings-save, -#color-reset, -.danger-button, -button, -#footer-button { - background: - linear-gradient(180deg, #3a1727, #160b18); - color: var(--fg); - border: 1px solid var(--border); - border-radius: 0; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.05), - 3px 3px 0 rgba(0, 0, 0, 0.48); -} - -#search-button:hover, -#form-button:hover, -#settings-save:hover, -#color-reset:hover, -button:hover, -#footer-button:hover { - background: - linear-gradient(180deg, #d94f72, #4f192c); - color: #fff7fb; -} - -#search-button:active, -#form-button:active, -#settings-save:active, -#color-reset:active, -button:active, -#footer-button:active, -.bbcode-btn:active { - transform: translateY(1px); -} - -#settings-save { - background: #4f192c !important; - color: #fff7fb !important; -} - -.danger-button, -.grid-delete-button, -#admin-account-delete-form button { - background: #6f263b; - color: #fff7fb; -} - -.form-button-disabled, -.form-button-disabled:hover, -.form-button-disabled:active, -.bbcode-btn.disabled:hover, -.bbcode-dropdown.disabled:hover { - background: #211526; - color: #776377; - box-shadow: none; - transform: none; - cursor: not-allowed; -} - -#mini-player, -#mini-player-tracks, -#sidebar-footer { - margin: 10px 12px; - width: calc(100% - 24px); - box-sizing: border-box; - background: rgba(13, 7, 18, 0.9); - border: 1px solid rgba(111, 38, 59, 0.8); - border-radius: 0; - box-shadow: - inset 0 0 0 1px rgba(239, 231, 242, 0.04), - 3px 3px 0 rgba(0, 0, 0, 0.46); -} - -#mini-player { - padding: 8px; - gap: 5px; - overflow-x: hidden; -} - -#mini-player-main { - gap: 7px; -} - -#mini-player-art-wrapper { - width: 30px; - height: 30px; - margin-top: 0; -} - -#mini-player-art { - border-color: var(--border); - border-radius: 4px; -} - -#mini-player-meta { - min-width: 0; -} - -#mini-player-title-inner, -.mini-track { - color: #f2a7ba; -} - -#mini-player-title-inner { - display: block; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -#mini-player-play, -#mini-player-controls span { - color: var(--fg); -} - -#mini-player-controls span:hover, -#mini-player-play:hover { - color: var(--links); -} - -#mini-player-seek, -#mini-player-volume { - background: #050308; - border: 1px solid rgba(170, 142, 170, 0.42); - accent-color: var(--links); -} - -#sidebar-footer { - padding: 14px 8px 10px 8px; -} - -#footer-text { - display: block; - margin-bottom: 10px; - text-align: center; -} - -#footer-buttons { - gap: 4px; -} - -#footer-button { - display: flex; - min-height: 24px; - align-items: center; - justify-content: center; - padding: 4px 6px; -} - -#footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: var(--links) !important; - color: #fff7fb !important; - border-color: #f2a7ba !important; -} - -.tooltip { - background: #100814; - color: var(--fg); - border: 1px solid var(--links); - border-radius: 0; - box-shadow: - 4px 4px 0 #000, - 0 0 18px rgba(217, 79, 114, 0.28), - inset 0 0 0 1px rgba(239, 231, 242, 0.06); -} - -#ascii, -#ascii-time, -#ascii-time-label, -.usage-ascii { - color: #d6c7d8; - text-shadow: - 0 0 9px rgba(217, 79, 114, 0.32), - 2px 2px 0 #000; -} - -#error { - color: #ff8ca7; -} - -#spa-loading { - background: #100814; - color: var(--fg); - border: 1px solid var(--links); - border-radius: 8px; - box-shadow: 0 0 18px rgba(217, 79, 114, 0.28); -} - -body.mobile-template { - background: - radial-gradient(ellipse at 50% 0%, rgba(111, 38, 59, 0.38), transparent 48%), - linear-gradient(180deg, #050308 0%, #100814 42%, #060409 100%) !important; - color: var(--fg) !important; -} - -body.mobile-template::before { - background: - repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.025) 0 1px, transparent 1px 16px), - radial-gradient(ellipse at 50% 0%, rgba(217, 79, 114, 0.14), transparent 54%) !important; -} - -body.mobile-template .mobile-collapsed-header, -body.mobile-template #sidebar, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks, -body.mobile-template #sidebar-footer, -body.mobile-template #content-layout, -body.mobile-template #post, -body.mobile-template .usage-card { - background: rgba(13, 7, 18, 0.92) !important; - border-color: var(--border) !important; - border-radius: 0 !important; - box-shadow: - inset 0 0 0 1px rgba(239, 231, 242, 0.04), - 4px 4px 0 rgba(0, 0, 0, 0.42), - 0 8px 20px rgba(0, 0, 0, 0.28) !important; - color: var(--fg) !important; -} - -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - background: - linear-gradient(180deg, #3a1727, #160b18) !important; - color: var(--fg) !important; - border-color: var(--border) !important; - border-radius: 0 !important; -} - -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-collapsed-header #show-sidebar:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - background: var(--links) !important; - color: #fff7fb !important; - border-color: #f2a7ba !important; -} - -body.mobile-template #content { - padding: 12px !important; -} - -body.mobile-template #content-layout { - padding: 14px !important; - background: rgba(13, 7, 18, 0.92) !important; - border-color: var(--border) !important; -} - -body.mobile-template #content-layout::before { - display: none; -} - -body.mobile-template #content-main { - padding: 0 !important; - background: transparent !important; - color: var(--fg) !important; -} - -body.mobile-template input, -body.mobile-template textarea, -body.mobile-template .dropdown, -body.mobile-template .text-input, -body.mobile-template .bbcode-dropdown, -body.mobile-template .bbcode-btn, -body.mobile-template #bbcode-textbox, -body.mobile-template #bbcode-preview, -body.mobile-template .checkbox, -body.mobile-template .radio, -body.mobile-template .color-input { - background: #0b0710 !important; - color: var(--fg) !important; - border-color: rgba(170, 142, 170, 0.42) !important; -} - -body.mobile-template .checkbox:checked { - background-color: var(--links) !important; -} - -body.mobile-template .radio:checked { - background: radial-gradient(circle, var(--links) 30%, #0b0710 34%) !important; -} - -body.mobile-template #sidebar { - width: 100% !important; - min-width: 0 !important; - max-width: none !important; - height: auto !important; - min-height: 0 !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid, -body.mobile-template #footer-buttons { - width: auto !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - min-height: 34px !important; - box-sizing: border-box !important; -} - -#mini-player, -#mini-player-tracks, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks { - background: rgba(13, 7, 18, 0.94) !important; - color: var(--fg) !important; - border-color: var(--border) !important; - box-shadow: - inset 0 0 0 1px rgba(239, 231, 242, 0.04), - 4px 4px 0 rgba(0, 0, 0, 0.42) !important; -} - -#mini-player-main, -#mini-player-meta, -#mini-player-title, -#mini-player-row, -#mini-player-controls, -#mini-player-volume-wrapper { - color: var(--fg); -} - -#mini-player-art-wrapper, -#mini-player-art { - background: #0b0710 !important; - border-color: var(--border) !important; -} - -#mini-player-download, -#mini-player-play, -#mini-player-controls span { - color: var(--links) !important; -} - -#mini-player-download:hover, -#mini-player-play:hover, -#mini-player-controls span:hover { - color: #fff7fb !important; - background: var(--links) !important; -} - -#mini-player-title-inner, -.mini-track { - color: #f2a7ba !important; -} - -.mini-track { - background: transparent !important; - border-color: transparent !important; -} - -.mini-track:hover, -.mini-track.active { - background: var(--links) !important; - color: #fff7fb !important; - border-color: #f2a7ba !important; -} - -#mini-player-seek, -#mini-player-volume { - accent-color: var(--links) !important; - background: #0b0710 !important; - border-color: rgba(170, 142, 170, 0.42) !important; -} - -#mini-player-seek::-webkit-slider-thumb, -#mini-player-volume::-webkit-slider-thumb { - background: var(--links) !important; - border-color: #f2a7ba !important; -} - -#mini-player-seek::-moz-range-track, -#mini-player-volume::-moz-range-track { - background: #0b0710 !important; - border-color: rgba(170, 142, 170, 0.42) !important; -} - -#mini-player-seek::-moz-range-thumb, -#mini-player-volume::-moz-range-thumb { - background: var(--links) !important; - border-color: #f2a7ba !important; -} - -#tab:hover, -#tab.active, -#tab:hover::before, -#tab.active::before, -#footer-button:hover, -#footer-button.active, -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - color: #fff7fb !important; -} - -#post-edit-feed, -.guestbook-edit-btn, -.guestbook-delete-btn, -#post-edit-feed:hover, -.guestbook-edit-btn:hover, -.guestbook-delete-btn:hover, -#post-edit-feed:active, -.guestbook-edit-btn:active, -.guestbook-delete-btn:active { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; - padding: 0 !important; - color: var(--subtle) !important; -} - -.guestbook-edit-btn, -.guestbook-delete-btn { - width: 16px !important; - height: 16px !important; -} - -#mini-player-title { - overflow: hidden !important; - width: 100% !important; - min-width: 0 !important; -} - -#mini-player-title-inner.scrolling { - display: inline-block !important; - max-width: none !important; - width: max-content !important; - overflow: visible !important; - text-overflow: clip !important; -} - - -/* theme ascii/resource cleanup */ -#usage-grid .usage-card, -body.mobile-template #usage-grid .usage-card { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - outline: 0 !important; - border-radius: 0 !important; - padding: 4px 0 !important; - transform: none !important; -} - -#usage-grid .usage-card:hover, -body.mobile-template #usage-grid .usage-card:hover { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; -} - -.usage-ascii { - color: var(--resource-ascii) !important; - text-shadow: none !important; - filter: none !important; -} - -.usage-label { - color: var(--resource-label) !important; - text-shadow: none !important; -} - -#ascii-time { - color: var(--time-ascii) !important; - text-shadow: none !important; -} - -#ascii-time-label { - color: var(--time-label) !important; -} - -/* distinct gothic controls: iron plaques with a gold strike */ -#tab, -#footer-button, -button, -#form-button, -#search-button, -#settings-save, -#color-reset, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - border: 1px solid color-mix(in srgb, var(--border) 82%, #d6b36a 18%) !important; - border-left-width: 5px !important; - border-radius: 0 !important; - background: - linear-gradient(90deg, rgba(214, 179, 106, 0.18), transparent 34%), - linear-gradient(180deg, rgba(22, 18, 26, 0.96), rgba(8, 7, 10, 0.98)) !important; - color: var(--fg) !important; - box-shadow: - inset 0 1px 0 rgba(214, 179, 106, 0.2), - 0 5px 0 rgba(0, 0, 0, 0.36) !important; - text-transform: uppercase; -} - -#tab::before { - content: "† "; - color: #d6b36a; -} - -#tab:hover, -#tab.active, -#footer-button:hover, -#footer-button.active, -button:hover, -#form-button:hover, -#search-button:hover, -#settings-save:hover, -#color-reset:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: - linear-gradient(90deg, rgba(214, 179, 106, 0.44), rgba(214, 179, 106, 0.14)), - #111016 !important; - color: #f4e4bb !important; - border-left-color: #d6b36a !important; - transform: translateY(-1px) !important; -} -body.gothic-theme .content-pagination .guestbook-page-btn { border-radius: 0; } diff --git a/themes/lib/gothic/gothic.html b/themes/lib/gothic/gothic.html deleted file mode 100644 index 23db805..0000000 --- a/themes/lib/gothic/gothic.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - {title} | fridge.dev - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- -
-{content} -
- -
- - -
-
-
- - diff --git a/themes/lib/littlehelps/itcnewtext.otf b/themes/lib/littlehelps/itcnewtext.otf deleted file mode 100644 index 312055f..0000000 Binary files a/themes/lib/littlehelps/itcnewtext.otf and /dev/null differ diff --git a/themes/lib/littlehelps/littlehelps.css b/themes/lib/littlehelps/littlehelps.css deleted file mode 100644 index eb859e1..0000000 --- a/themes/lib/littlehelps/littlehelps.css +++ /dev/null @@ -1,1599 +0,0 @@ -@font-face { - font-family: "TescoModern"; - src: url("/themes/lib/littlehelps/tescomodern.ttf") format("truetype"); - font-weight: 400; - font-style: normal; - font-display: swap; -} - -@font-face { - font-family: "TescoModern"; - src: url("/themes/lib/littlehelps/tescomodern-bold.ttf") format("truetype"); - font-weight: 700; - font-style: normal; - font-display: swap; -} - -@font-face { - font-family: "ITCNewText"; - src: url("/themes/lib/littlehelps/itcnewtext.otf") format("opentype"); - font-weight: 700; - font-style: normal; - font-display: swap; -} - -:root { - --bg: #ffffff; - --fg: #1f1f1f; - --border: #d7d7d7; - --subtle: #5e6670; - --links: #00539f; - --chat-own-fg: #ffffff; - --hero-ascii-muted: #8b969f; - --hero-ascii-1: #00539f; - --hero-ascii-2: #0b62ad; - --hero-ascii-3: #2675bc; - --hero-ascii-4: #ee1c2e; - --hero-ascii-5: #f04d5c; - --hero-ascii-6: #00539f; - --hero-ascii-7: #ee1c2e; - --hero-ascii-opacity: 0.96; - --resource-ascii: #00539f; - --resource-label: #5e6670; - --time-ascii: #ee1c2e; - --time-label: #00539f; - --littlehelps-blue: #00539f; - --littlehelps-red: #ee1c2e; - --littlehelps-grey: #f5f5f5; - --littlehelps-rule: #d7d7d7; - --littlehelps-ink: #1f1f1f; -} - -body { - background: - linear-gradient(180deg, #ffffff 0 156px, #f7f7f7 156px 100%); - color: var(--fg); - font-family: "TescoModern", Arial, Helvetica, var(--emoji-font), sans-serif; -} - -body *:not(#title):not(.mobile-collapsed-title):not(#ascii):not(#ascii *):not(#ascii-gradient):not(#ascii-gradient *):not(#ascii-time):not(#ascii-time *):not(#homepage-hero-ascii):not(#homepage-hero-ascii *):not(.usage-ascii):not(.usage-ascii *):not(.fa):not(.fa-solid):not(.fa-regular):not(.fa-brands):not([class^="fa-"]):not([class*=" fa-"]) { - font-family: "TescoModern", Arial, Helvetica, var(--emoji-font), sans-serif !important; - letter-spacing: 0; -} - -#ascii, -#ascii-gradient, -#ascii-time, -#homepage-hero-ascii, -#homepage-hero-ascii pre, -.usage-ascii, -.usage-label { - font-family: "IBM_VGA", var(--emoji-font), monospace !important; -} - -.fa, -.fa-solid, -.fa-regular { - font-family: "Font Awesome 6 Free" !important; -} - -.fa-brands { - font-family: "Font Awesome 6 Brands" !important; -} - -.littlehelps-topbar { - content: ""; - position: fixed; - top: 0; - left: 0; - right: 0; - height: 28px; - z-index: 20; - pointer-events: none; - background: var(--littlehelps-blue); - box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.24); -} - -.littlehelps-utility-links { - height: 100%; - display: flex; - justify-content: flex-end; - align-items: stretch; - margin-left: auto; - padding-right: 0; - pointer-events: auto; -} - -.littlehelps-utility-links a { - display: inline-flex; - align-items: center; - padding: 0 24px; - color: #ffffff; - border-left: 1px solid rgba(255, 255, 255, 0.22); - text-decoration: none; - font-size: 14px; - font-weight: 700; -} - -.littlehelps-utility-links a:last-child { - border-right: 1px solid rgba(255, 255, 255, 0.22); -} - -.littlehelps-utility-links a:hover { - background: rgba(255, 255, 255, 0.13); - color: #ffffff; -} - -body::after { - content: none; - position: fixed; - left: 0; - right: 0; - top: 28px; - height: 2px; - z-index: 20; - pointer-events: none; - background: var(--littlehelps-red); -} - -#page-wrapper, -#container { - background: transparent; -} - -body:not(.mobile-template) #page-wrapper { - box-sizing: border-box; - flex-direction: column; - padding-top: 30px; -} - -#sidebar { - width: 100%; - min-width: 0; - max-width: none; - height: auto; - display: flex; - flex-flow: row wrap; - align-items: center; - gap: 0; - background: #ffffff; - border-right: 0; - border-bottom: 1px solid var(--littlehelps-rule); - box-shadow: 0 4px 14px rgba(31, 31, 31, 0.08); - overflow: visible; -} - -#header { - position: relative; - margin: 0; - width: auto; - padding: 15px 24px 25px max(16px, calc((100vw - 1360px) / 2)); - background: #ffffff; - border-bottom: 0; - text-align: left; - flex: 0 0 214px; - order: 1; -} - -#header::before { - content: none; -} - -#title, -.mobile-collapsed-title { - position: relative; - display: inline-block; - font-family: "ITCNewText", "TescoModern", Arial, Helvetica, var(--emoji-font), sans-serif !important; - color: var(--littlehelps-red); - font-weight: 700; - font-size: 31px; - line-height: 1; - text-transform: uppercase; - -webkit-text-stroke: 0.45px var(--littlehelps-red); - text-shadow: - 0.35px 0 0 var(--littlehelps-red), - -0.2px 0 0 var(--littlehelps-red); - letter-spacing: 0; -} - -#title::after, -.mobile-collapsed-title::after { - content: ""; - position: absolute; - left: 2px; - right: 2px; - bottom: -11px; - height: 7px; - background-image: linear-gradient(135deg, transparent 0 20%, var(--littlehelps-blue) 20% 80%, transparent 80% 100%); - background-size: 27px 7px; - background-repeat: repeat-x; -} - -#subtitle, -#dev-mode-banner, -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -.usage-label { - color: var(--subtle); -} - -body.littlehelps-theme #dev-mode-banner { - display: none !important; -} - -body.littlehelps-theme #subtitle, -body.littlehelps-theme #hide-sidebar { - display: none !important; -} - -a, -#hide-sidebar, -#show-sidebar { - color: var(--littlehelps-blue); -} - -#hide-sidebar, -#show-sidebar { - font-size: 14px; -} - -#hide-sidebar:hover, -#show-sidebar:hover { - color: var(--littlehelps-red); -} - -#sidebar > a { - display: inline-flex; - margin: 0; - min-width: 0; - align-self: stretch; - order: 4; -} - -#sidebar > a:first-of-type { - margin-top: 0; -} - -body:not(.mobile-template) #sidebar-spacer { - display: none; -} - -body:not(.mobile-template) #user-greeting { - display: none; -} - -#littlehelps-search { - display: flex; - align-items: stretch; - flex: 1 1 420px; - max-width: 720px; - height: 43px; - margin: 0 14px 0 18px; - order: 2; -} - -#littlehelps-search-box { - flex: 1 1 auto; - min-width: 0; - height: 100%; - padding: 0 16px; - background: #ffffff; - color: var(--fg); - border: 1px solid #777777; - border-right: 1px solid #777777; - border-radius: 0; - box-shadow: none; - font-size: 16px; - font-style: italic; -} - -#littlehelps-search-box::placeholder { - color: #555555; - opacity: 1; -} - -#littlehelps-search-box:focus { - border-color: var(--littlehelps-blue); - outline: 3px solid rgba(0, 83, 159, 0.18); - outline-offset: 1px; -} - -#littlehelps-search-button { - width: 46px; - min-width: 46px; - height: 43px; - padding: 0; - display: inline-flex; - align-items: center; - justify-content: center; - background: var(--littlehelps-blue); - color: #ffffff; - border: 1px solid var(--littlehelps-blue); - border-radius: 50%; - box-shadow: none; - margin-left: 10px; - transform: none; -} - -#littlehelps-search-button:hover { - background: #003f78; - border-color: #003f78; - color: #ffffff; -} - -#tab { - min-height: 40px; - display: flex; - align-items: center; - padding: 0 15px; - background: #ffffff; - border: 0; - border-bottom: 4px solid transparent; - border-radius: 0; - color: var(--littlehelps-blue); - font-weight: 700; - text-align: center; - font-size: 16px; - box-shadow: none; -} - -body:not(.mobile-template) #sidebar > a:not(#sidebar-active-chat):not(#sidebar-notifications) { - align-self: stretch; -} - -body:not(.mobile-template) #sidebar > a[href="/feed"], -body:not(.mobile-template) #sidebar > a[href="/journal"], -body:not(.mobile-template) #sidebar > a[href="/contact"], -body:not(.mobile-template) #sidebar > a[href="/guestbook"], -body:not(.mobile-template) #sidebar > a[href="/music"], -body:not(.mobile-template) #sidebar > a[href="/gallery"], -body:not(.mobile-template) #sidebar > a[href="/merch"], -body:not(.mobile-template) #sidebar > a[href="/bookmarks"], -body:not(.mobile-template) #sidebar > a[href="/tools"], -body:not(.mobile-template) #sidebar > a[href="/others"] { - flex: 0 0 auto; -} - -body:not(.mobile-template) #sidebar > a[href="/feed"] { - margin-left: max(16px, calc((100vw - 1360px) / 2)); -} - -body:not(.mobile-template) #sidebar > a[href="/others"] { - margin-right: max(16px, calc((100vw - 1360px) / 2)); -} - -#tab:hover, -#tab.active { - background: #ffffff; - border-bottom-color: #008dc8; - color: var(--littlehelps-blue); -} - -body:not(.mobile-template) #sidebar::after { - content: ""; - order: 3; - flex: 0 0 100%; - height: 0; - border-top: 0; -} - -#content { - max-width: none; - height: auto; - padding: 32px 36px 46px; -} - -#container { - height: auto; - flex: 1 1 auto; - background: #f7f7f7; -} - -#content-layout { - position: relative; - width: 100%; - max-width: 920px; - min-height: calc(100% - 2px); - margin: 0 auto; - padding: 26px 30px; - background: #ffffff; - border: 0; - border-radius: 0; - color: var(--fg); - box-shadow: none; -} - -#content-layout::before { - content: ""; - position: absolute; - left: 0; - right: 0; - top: 0; - height: 0; - border-radius: 0; - background: transparent; -} - -#content-main > *:first-child { - margin-top: 0; -} - -#content-main h1, -#content-main h2, -#content-main h3, -#content-main h4, -#post-title, -.theme-picker-title, -.theme-picker-option-title { - color: var(--littlehelps-ink); - font-weight: 700; -} - -#post, -.account-admin-card, -.usage-card, -.form-card, -.grid-item, -pre code.hljs, -#mini-player, -#mini-player-tracks, -#sidebar-footer, -.site-popup-dialog, -#bbcode-preview { - background: #ffffff; - color: var(--fg); - border: 1px solid var(--littlehelps-rule); - border-radius: 0; - box-shadow: none; -} - -#post { - padding: 16px; - border-width: 1px; -} - -#post:hover, -.account-admin-card:hover, -.usage-card:hover, -.grid-item:hover { - border-color: rgba(0, 83, 159, 0.34); - box-shadow: none; -} - -.grid-item, -.account-admin-card, -.usage-card, -.form-card { - padding: 14px; -} - -.formatting-lab { - gap: 30px; -} - -.formatting-section { - border-color: #e4e4e4 !important; -} - -.formatting-sample, -.formatting-swatch, -.bbcode-editor, -.chat-admin-card, -.contact-admin-card { - background: #ffffff; - border: 1px solid #d7d7d7; - border-radius: 0; - box-shadow: none; -} - -.formatting-sample { - padding: 16px; -} - -.formatting-swatch { - min-height: 70px; -} - -.formatting-swatch span { - border-radius: 0 !important; -} - -.formatting-mini-tabs { - border-color: #d7d7d7 !important; -} - -.formatting-mini-tabs #tab { - min-height: 32px; - font-size: 14px; - border-right-color: #d7d7d7 !important; -} - -.formatting-button-pair { - align-items: stretch; -} - -.formatting-button-pair > * { - flex: 1 1 0; -} - -.formatting-inline-result { - border: 1px solid #e4e4e4; - background: #f7f7f7; - padding: 8px 10px; -} - -#result { - color: #176b2c; - background: #edf8ef; - border: 1px solid #bfe2c5; - padding: 8px 10px; - font-weight: 700; -} - -#error { - color: var(--littlehelps-red); - background: #fff2f3; - border: 1px solid #f3b5bd; - padding: 8px 10px; - font-weight: 700; -} - -.grid-item { - border-color: #e4e4e4; -} - -.grid-item:hover { - transform: none; - background: #ffffff; -} - -#post-content, -#post-title, -.form-card, -.form-card p, -.form-field label, -.checkbox-label span, -.radio-label span, -.color-row, -.color-row span, -.feed-reply-body, -.guestbook-post-actions, -#content-main, -#content-main p, -#content-main li { - color: var(--fg); -} - -#post-description, -#post-date, -#post-date-feed, -#post-username, -#post-bookmark, -#post-bookmark-feed, -#post-edit-feed, -.form-card p, -.form-field label, -.color-row span, -.feed-reply-meta, -.theme-picker-description, -.theme-picker-option-description { - color: var(--subtle); -} - -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -#bbcode-preview, -#create-account-form input[type="text"], -#admin-account-form input[type="text"], -#admin-account-form textarea { - background: #ffffff; - color: var(--fg); - border: 1px solid #7a7a7a; - border-radius: 0; - box-shadow: none; - min-height: 36px; -} - -textarea, -textarea.text-input, -#bbcode-textbox, -#bbcode-preview { - line-height: 1.45; -} - -.color-row { - display: grid; - grid-template-columns: minmax(90px, 1fr) auto; - align-items: center; - gap: 12px; - width: min(100%, 260px); -} - -.color-input, -input.color-input, -input[type="color"] { - width: 52px; - height: 36px; - min-width: 52px; - min-height: 36px; - padding: 3px; - border: 1px solid #d7d7d7; -} - -form#search { - display: flex; - align-items: center; - gap: 8px; -} - -#search-box { - flex: 1 1 auto; - min-width: 0; -} - -input:focus, -textarea:focus, -.dropdown:focus, -.text-input:focus, -#bbcode-textbox:focus { - border-color: var(--littlehelps-blue); - outline: 3px solid rgba(0, 83, 159, 0.16); - outline-offset: 1px; -} - -.checkbox-group, -.radio-group { - gap: 10px; -} - -.checkbox-label, -.radio-label { - align-items: center; - gap: 11px; -} - -.checkbox, -.radio, -input.checkbox, -input.radio { - width: 18px; - height: 18px; - min-width: 18px; - min-height: 18px; - padding: 0; - margin: 0; - border: 1px solid #b9b9b9; - background: #ffffff; - box-shadow: none; - flex: 0 0 18px; -} - -.checkbox, -input.checkbox { - border-radius: 0; -} - -.checkbox:checked, -input.checkbox:checked { - background: - linear-gradient(45deg, transparent 0 43%, #ffffff 43% 58%, transparent 58%) 3px 8px / 6px 6px no-repeat, - linear-gradient(-45deg, transparent 0 43%, #ffffff 43% 58%, transparent 58%) 7px 7px / 8px 7px no-repeat, - var(--littlehelps-blue); - border-color: var(--littlehelps-blue); -} - -.radio, -input.radio { - border-radius: 50%; - border-width: 2px; -} - -.radio:checked, -input.radio:checked { - background: - radial-gradient(circle, var(--littlehelps-blue) 0 4px, transparent 5px), - #ffffff; - border-color: #b9b9b9; -} - -.checkbox:focus-visible, -.radio:focus-visible, -input.checkbox:focus-visible, -input.radio:focus-visible { - outline: 3px solid rgba(0, 83, 159, 0.18); - outline-offset: 2px; -} - -.bbcode-editor { - padding: 12px; -} - -.bbcode-toolbar { - gap: 6px; -} - -.bbcode-btn { - min-width: 34px; - min-height: 34px; - padding: 0; -} - -.bbcode-dropdown { - min-height: 34px; -} - -.chat-admin-card { - border-color: #d7d7d7; -} - -.chat-copy-link { - background: #f7f7f7; - border-radius: 0; -} - -.contact-admin-message { - background: #f3f3f3; - border-color: #d7d7d7; -} - -.contact-admin-alert { - background: #fff2f3; - border-color: #f3b5bd; - color: var(--littlehelps-red); -} - -.checkbox-label span, -.radio-label span { - color: var(--fg); - font-size: 16px; - line-height: 1.25; -} - -.checkbox-label:hover span, -.radio-label:hover span { - color: var(--littlehelps-blue); -} - -button, -#search-button, -#form-button, -#settings-save, -#color-reset, -#footer-button, -.danger-button, -.theme-picker-button, -.theme-picker-option { - background: #ffffff; - color: var(--littlehelps-blue); - border: 2px solid var(--littlehelps-blue); - border-radius: 999px; - font-weight: 700; - box-shadow: none; - min-height: 34px; - padding: 7px 18px; -} - -button:hover, -#search-button:hover, -#form-button:hover, -#settings-save:hover, -#color-reset:hover, -#footer-button:hover, -.theme-picker-button:hover, -.theme-picker-option:hover, -.theme-picker-option.selected { - background: var(--littlehelps-blue); - color: #ffffff; - border-color: var(--littlehelps-blue); -} - -#littlehelps-search-box { - height: 43px; - min-height: 43px; - border: 1px solid #777777; - border-right: 1px solid #777777; - box-shadow: none; -} - -#littlehelps-search-button { - width: 46px; - min-width: 46px; - height: 43px; - min-height: 43px; - padding: 0; - background: var(--littlehelps-blue); - color: #ffffff; - border: 1px solid var(--littlehelps-blue); - border-radius: 50%; - margin-left: 10px; - transform: none; -} - -#littlehelps-search-button:hover { - background: #003f78; - border-color: #003f78; - color: #ffffff; -} - -.danger-button { - color: var(--littlehelps-red); - border-color: var(--littlehelps-red); -} - -.danger-button:hover { - background: var(--littlehelps-red); - color: #ffffff; - border-color: var(--littlehelps-red); -} - -.theme-picker-button, -.theme-picker-option { - border-radius: 0 !important; - background: #ffffff !important; - border-color: var(--littlehelps-rule) !important; - color: var(--fg) !important; -} - -.theme-picker-option:hover, -.theme-picker-option.selected { - background: #eef6ff !important; - border-color: var(--littlehelps-blue) !important; - color: var(--fg) !important; -} - -.theme-picker-button:hover { - border-color: var(--littlehelps-blue) !important; -} - -.theme-picker-thumb { - border-radius: 0; -} - -#sidebar-footer { - width: auto; - margin: 0 16px 0 auto; - padding: 0; - background: #ffffff; - border: 0; - border-radius: 0; - box-shadow: none; - flex: 0 0 auto; - order: 2; -} - -#footer-buttons { - display: flex; - gap: 12px; - align-items: center; -} - -#footer-button { - min-width: 86px; - min-height: 34px; - display: inline-flex; - align-items: center; - justify-content: center; - padding: 0 18px; - border-radius: 999px; - background: var(--littlehelps-blue); - color: #ffffff; - border-color: var(--littlehelps-blue); - font-weight: 700; - font-size: 16px; -} - -#footer-button:hover { - background: #003f78; - border-color: #003f78; -} - -body:not(.mobile-template) #footer-buttons a[href="/account"] #footer-button::after, -body:not(.mobile-template) #footer-buttons a[href="/account/login"] #footer-button::after { - content: "Sign in"; -} - -body:not(.mobile-template) #footer-buttons a[href="/account/logout"] #footer-button::after { - content: "Sign out"; -} - -body:not(.mobile-template) #footer-buttons #footer-button i { - display: none !important; -} - -#mini-player, -#mini-player-tracks { - width: auto; - margin: 10px 14px; - flex: 0 1 360px; - order: 5; - background: #ffffff; - color: var(--fg); - border: 1px solid var(--littlehelps-rule); - border-radius: 0; - box-shadow: none; -} - -#mini-player { - padding: 10px 12px; - gap: 8px; - max-height: 156px; - overflow: hidden; -} - -#mini-player-tracks { - padding: 8px 0; - gap: 0; - max-height: 142px; - overflow-y: auto; -} - -#mini-player-main { - align-items: center; - gap: 10px; -} - -#mini-player-art-wrapper, -#mini-player-art { - width: 42px; - height: 42px; - border-radius: 0; -} - -#mini-player-art-wrapper { - margin-top: 0; - border: 1px solid var(--littlehelps-rule); - background: #f7f7f7; - overflow: hidden; -} - -#mini-player-art { - border: 0; - background: #f7f7f7; -} - -#mini-player-download { - background: rgba(0, 83, 159, 0.86) !important; - color: #ffffff !important; -} - -#mini-player-meta { - gap: 6px; -} - -#mini-player-title { - min-height: 18px; -} - -#mini-player-title-inner, -.mini-track { - color: var(--littlehelps-ink); - font-family: "TescoModern", Arial, Helvetica, var(--emoji-font), sans-serif !important; - font-size: 13px; - font-weight: 700; -} - -.mini-track { - display: block; - padding: 8px 12px; - border-bottom: 1px solid #e9e9e9; - color: var(--littlehelps-blue); -} - -.mini-track:last-child { - border-bottom: 0; -} - -.mini-track:hover, -.mini-track.active { - background: #eef6ff; - color: var(--littlehelps-blue); -} - -.mini-track.active { - border-left: 4px solid #008dc8; - padding-left: 8px; -} - -#mini-player-row { - gap: 8px; -} - -#mini-player-controls { - align-items: center; -} - -#mini-player-play, -#mini-player-mute, -#mini-player-download { - color: var(--littlehelps-blue); - transition: color 0.15s ease, background-color 0.15s ease; -} - -#mini-player-play { - width: 26px; - height: 26px; - border: 2px solid var(--littlehelps-blue); - border-radius: 50%; - background: #ffffff; - color: var(--littlehelps-blue); - font-size: 12px; -} - -#mini-player-mute { - font-size: 15px; -} - -#mini-player-play:hover, -#mini-player-mute:hover, -#mini-player-download:hover { - color: #ffffff; - background: var(--littlehelps-blue); -} - -#mini-player-volume-wrapper { - gap: 6px; -} - -#mini-player-volume-wrapper:hover #mini-player-volume { - width: 72px; -} - -#mini-player-seek, -#mini-player-volume { - height: 6px; - background: #e6e6e6; - border: 0; - border-radius: 999px; - accent-color: var(--littlehelps-blue); -} - -#mini-player-seek::-webkit-slider-thumb, -#mini-player-volume::-webkit-slider-thumb { - width: 14px; - height: 14px; - border-radius: 50%; - background: var(--littlehelps-blue); - border: 2px solid #ffffff; - box-shadow: 0 0 0 1px var(--littlehelps-blue); -} - -#mini-player-seek::-moz-range-track, -#mini-player-volume::-moz-range-track { - height: 6px; - background: #e6e6e6; - border: 0; - border-radius: 999px; -} - -#mini-player-seek::-moz-range-thumb, -#mini-player-volume::-moz-range-thumb { - width: 12px; - height: 12px; - border-radius: 50%; - background: var(--littlehelps-blue); - border: 2px solid #ffffff; - box-shadow: 0 0 0 1px var(--littlehelps-blue); -} - -input[type="range"] { - accent-color: var(--littlehelps-blue); -} - -.tooltip { - background: var(--littlehelps-blue); - color: #ffffff; - border-color: var(--littlehelps-blue); - border-radius: 0; -} - -.spoiler { - background-color: var(--littlehelps-blue); -} - -#error { - color: var(--littlehelps-red); - font-weight: 700; -} - -body.mobile-template { - background: #f7f7f7 !important; - color: var(--fg) !important; - font-family: "TescoModern", Arial, Helvetica, var(--emoji-font), sans-serif !important; -} - -body.mobile-template #page-wrapper { - padding-top: 0 !important; -} - -body.mobile-template::before { - content: ""; - position: sticky; - inset: 0 auto auto 0; - width: 100%; - height: 24px; - display: block; - background: var(--littlehelps-blue); - z-index: 2; - pointer-events: none; -} - -body.mobile-template #sidebar, -body.mobile-template .mobile-collapsed-header { - background: #ffffff !important; - color: var(--fg) !important; - border-color: var(--littlehelps-rule) !important; - border-radius: 0 !important; - box-shadow: 0 2px 8px rgba(31, 31, 31, 0.08) !important; -} - -body.mobile-template #sidebar { - width: 100% !important; - min-width: 0 !important; - max-width: none !important; - max-height: none !important; - display: block !important; - height: auto !important; - padding-bottom: 0 !important; - border-bottom: 1px solid var(--littlehelps-rule) !important; - overflow: hidden !important; -} - -body.mobile-template #header { - position: relative; - display: flex !important; - align-items: center !important; - justify-content: space-between !important; - gap: 12px !important; - padding: 22px 16px 24px !important; - border-bottom: 1px solid var(--littlehelps-rule) !important; - text-align: left !important; -} - -body.mobile-template #subtitle, -body.mobile-template #dev-mode-banner { - display: none !important; -} - -body.mobile-template #title, -body.mobile-template .mobile-collapsed-title { - position: relative; - display: inline-block; - color: var(--littlehelps-red) !important; - font-size: 29px !important; - font-weight: 700 !important; - line-height: 1 !important; - background: none !important; - -webkit-text-fill-color: var(--littlehelps-red) !important; - -webkit-text-stroke: 0.4px var(--littlehelps-red) !important; - text-shadow: - 0.3px 0 0 var(--littlehelps-red), - -0.2px 0 0 var(--littlehelps-red) !important; -} - -body.mobile-template #title::after, -body.mobile-template .mobile-collapsed-title::after { - content: ""; - position: absolute; - left: 2px; - right: 2px; - bottom: -11px; - height: 7px; - background-image: linear-gradient(135deg, transparent 0 20%, var(--littlehelps-blue) 20% 80%, transparent 80% 100%); - background-size: 27px 7px; - background-repeat: repeat-x; -} - -body.mobile-template #hide-sidebar, -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar { - background: var(--littlehelps-blue) !important; - color: #ffffff !important; - border: 0 !important; - border-radius: 50% !important; - box-shadow: none !important; -} - -body.mobile-template #hide-sidebar { - width: 34px !important; - height: 34px !important; - padding: 0 !important; - display: inline-flex !important; - align-items: center !important; - justify-content: center !important; - flex: 0 0 34px !important; - font-size: 17px !important; -} - -body.mobile-template .mobile-collapsed-brand, -body.mobile-template .mobile-collapsed-title { - color: var(--littlehelps-red) !important; - font-weight: 700 !important; -} - -body.mobile-template .mobile-collapsed-subtitle, -body.mobile-template #footer-text, -body.mobile-template #user-greeting, -body.mobile-template #content-footer { - color: var(--subtle) !important; -} - -body.mobile-template .mobile-collapsed-header { - margin: 0 !important; - padding: 12px 14px 14px !important; - border-bottom: 1px solid var(--littlehelps-rule) !important; - box-shadow: 0 2px 8px rgba(31, 31, 31, 0.08) !important; -} - -body.mobile-template .mobile-collapsed-subtitle { - display: none !important; -} - -body.mobile-template .mobile-collapsed-header #show-sidebar { - width: 38px !important; - height: 38px !important; - padding: 0 !important; - display: inline-flex !important; - align-items: center !important; - justify-content: center !important; - order: 2; - margin-left: auto !important; -} - -body.mobile-template .mobile-nav-grid { - display: grid !important; - grid-template-columns: repeat(2, minmax(0, 1fr)) !important; - gap: 0 !important; - padding: 0 !important; - overflow: visible !important; - border-top: 1px solid var(--littlehelps-rule) !important; - border-bottom: 1px solid var(--littlehelps-rule) !important; - background: #ffffff !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link { - min-width: 0 !important; - border-right: 1px solid var(--littlehelps-rule) !important; - border-bottom: 1px solid var(--littlehelps-rule) !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link:nth-child(2n) { - border-right: 0 !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link:nth-last-child(-n + 2) { - border-bottom: 0 !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button { - background: #ffffff !important; - color: var(--littlehelps-blue) !important; - min-height: 48px !important; - justify-content: flex-start !important; - padding: 0 16px !important; - border: 0 !important; - border-left: 4px solid transparent !important; - border-bottom: 0 !important; - border-radius: 0 !important; - box-shadow: none !important; - font-size: 16px !important; - font-weight: 700 !important; - text-align: left !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active { - background: #ffffff !important; - color: var(--littlehelps-blue) !important; - border-left-color: #008dc8 !important; -} - -body.mobile-template #footer-buttons { - display: grid !important; - grid-template-columns: repeat(2, minmax(0, 1fr)) !important; - gap: 0 !important; - border: 1px solid var(--littlehelps-rule) !important; - border-bottom: 0 !important; -} - -body.mobile-template #sidebar-footer, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks { - margin: 0 !important; - background: #ffffff !important; - border: 0 !important; - border-radius: 0 !important; - box-shadow: none !important; -} - -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks { - border-bottom: 1px solid var(--littlehelps-rule) !important; -} - -body.mobile-template #mini-player { - padding: 12px 16px !important; - max-height: none !important; - overflow: visible !important; -} - -body.mobile-template #mini-player-main { - align-items: center !important; - gap: 10px !important; -} - -body.mobile-template #mini-player-art-wrapper, -body.mobile-template #mini-player-art { - width: 44px !important; - height: 44px !important; - border-radius: 0 !important; -} - -body.mobile-template #mini-player-art-wrapper { - border: 1px solid var(--littlehelps-rule) !important; - background: #f7f7f7 !important; -} - -body.mobile-template #mini-player-title-inner, -body.mobile-template .mini-track { - color: var(--littlehelps-ink) !important; - font-family: "TescoModern", Arial, Helvetica, var(--emoji-font), sans-serif !important; - font-size: 14px !important; - font-weight: 700 !important; -} - -body.mobile-template #mini-player-row { - gap: 8px !important; -} - -body.mobile-template #mini-player-play { - width: 30px !important; - height: 30px !important; - border: 2px solid var(--littlehelps-blue) !important; - border-radius: 50% !important; - background: #ffffff !important; - color: var(--littlehelps-blue) !important; -} - -body.mobile-template #mini-player-play:hover, -body.mobile-template #mini-player-mute:hover { - background: var(--littlehelps-blue) !important; - color: #ffffff !important; -} - -body.mobile-template #mini-player-tracks { - padding: 0 !important; - max-height: 184px !important; - overflow-y: auto !important; -} - -body.mobile-template .mini-track { - padding: 11px 16px !important; - border-bottom: 1px solid #e9e9e9 !important; - color: var(--littlehelps-blue) !important; -} - -body.mobile-template .mini-track:hover, -body.mobile-template .mini-track.active { - background: #eef6ff !important; - color: var(--littlehelps-blue) !important; -} - -body.mobile-template .mini-track.active { - border-left: 4px solid #008dc8 !important; - padding-left: 12px !important; -} - -body.mobile-template #sidebar-footer { - padding: 14px 16px 16px !important; -} - -body.mobile-template #footer-text { - display: block !important; - margin: 0 0 10px !important; - text-align: left !important; - font-size: 12px !important; -} - -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - width: 100% !important; - min-width: 0 !important; - min-height: 44px !important; - padding: 0 8px !important; - background: #ffffff !important; - color: var(--littlehelps-blue) !important; - border: 0 !important; - border-bottom: 1px solid var(--littlehelps-rule) !important; - border-right: 1px solid var(--littlehelps-rule) !important; - border-radius: 0 !important; - box-shadow: none !important; - font-size: 15px !important; -} - -body.mobile-template #footer-buttons > a.mobile-footer-link:nth-child(2n) > #footer-button.mobile-footer-button { - border-right: 0 !important; -} - -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button i { - display: none !important; -} - -body.mobile-template #footer-buttons > a[href="/"] #footer-button::after { - content: "Home"; -} - -body.mobile-template #footer-buttons > a[href="/discord"] #footer-button::after { - content: "Discord"; -} - -body.mobile-template #footer-buttons > a[href="/settings"] #footer-button::after { - content: "Settings"; -} - -body.mobile-template #footer-buttons > a[href="/account"] #footer-button::after, -body.mobile-template #footer-buttons > a[href="/account/login"] #footer-button::after { - content: "Sign in"; -} - -body.mobile-template #footer-buttons > a[href="/account/logout"] #footer-button::after { - content: "Sign out"; -} - -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: var(--littlehelps-blue) !important; - color: #ffffff !important; - border-color: var(--littlehelps-blue) !important; -} - -body.mobile-template #content { - padding: 12px !important; - background: #f7f7f7 !important; -} - -body.mobile-template #content-layout, -body.mobile-template #content-main { - background: #ffffff !important; - color: var(--fg) !important; - border: 0 !important; - border-radius: 0 !important; - box-shadow: none !important; -} - -body.mobile-template #content-layout { - padding: 16px !important; -} - -body.mobile-template form#search { - display: flex !important; - align-items: center !important; - gap: 8px !important; - margin: 0 0 16px !important; - padding: 0 !important; - background: transparent !important; - border: 0 !important; -} - -body.mobile-template #search-box { - flex: 1 1 auto !important; - min-width: 0 !important; - height: 42px !important; - min-height: 42px !important; - padding: 0 14px !important; - background: #ffffff !important; - color: var(--fg) !important; - border: 1px solid #777777 !important; - border-radius: 0 !important; - box-shadow: none !important; - font-size: 16px !important; - font-style: italic !important; -} - -body.mobile-template #search-button { - width: 42px !important; - min-width: 42px !important; - height: 42px !important; - min-height: 42px !important; - padding: 0 !important; - display: inline-flex !important; - align-items: center !important; - justify-content: center !important; - background: var(--littlehelps-blue) !important; - color: #ffffff !important; - border: 1px solid var(--littlehelps-blue) !important; - border-radius: 50% !important; -} - -body.mobile-template input, -body.mobile-template textarea, -body.mobile-template .dropdown, -body.mobile-template .text-input, -body.mobile-template .bbcode-dropdown, -body.mobile-template .bbcode-btn, -body.mobile-template #bbcode-textbox, -body.mobile-template #bbcode-preview, -body.mobile-template .checkbox, -body.mobile-template .radio, -body.mobile-template .color-input { - background: #ffffff !important; - color: var(--fg) !important; - border-color: #7a7a7a !important; -} - -body.mobile-template .checkbox:checked, -body.mobile-template input.checkbox:checked { - background: - linear-gradient(45deg, transparent 0 43%, #ffffff 43% 58%, transparent 58%) 3px 8px / 6px 6px no-repeat, - linear-gradient(-45deg, transparent 0 43%, #ffffff 43% 58%, transparent 58%) 7px 7px / 8px 7px no-repeat, - var(--littlehelps-blue) !important; - border-color: var(--littlehelps-blue) !important; -} - -body.mobile-template .radio:checked, -body.mobile-template input.radio:checked { - background: - radial-gradient(circle, var(--littlehelps-blue) 0 4px, transparent 5px), - #ffffff !important; - border-color: #b9b9b9 !important; -} - -body.mobile-template #mini-player-seek, -body.mobile-template #mini-player-volume { - height: 6px !important; - background: #e6e6e6 !important; - border: 0 !important; - border-radius: 999px !important; - accent-color: var(--littlehelps-blue) !important; -} - -body.mobile-template #mini-player-seek::-webkit-slider-thumb, -body.mobile-template #mini-player-volume::-webkit-slider-thumb { - width: 14px !important; - height: 14px !important; - border-radius: 50% !important; - background: var(--littlehelps-blue) !important; - border: 2px solid #ffffff !important; - box-shadow: 0 0 0 1px var(--littlehelps-blue) !important; -} - -body.mobile-template #mini-player-seek::-moz-range-track, -body.mobile-template #mini-player-volume::-moz-range-track { - height: 6px !important; - background: #e6e6e6 !important; - border: 0 !important; - border-radius: 999px !important; -} - -body.mobile-template #mini-player-seek::-moz-range-thumb, -body.mobile-template #mini-player-volume::-moz-range-thumb { - width: 12px !important; - height: 12px !important; - border-radius: 50% !important; - background: var(--littlehelps-blue) !important; - border: 2px solid #ffffff !important; - box-shadow: 0 0 0 1px var(--littlehelps-blue) !important; -} - -@media (max-width: 420px) { - body.mobile-template .mobile-nav-grid { - grid-template-columns: 1fr !important; - } - - body.mobile-template .mobile-nav-grid a.mobile-nav-link { - border-right: 0 !important; - } - - body.mobile-template .mobile-nav-grid a.mobile-nav-link:nth-last-child(2) { - border-bottom: 1px solid var(--littlehelps-rule) !important; - } -} -body.littlehelps-theme .content-pagination .guestbook-page-btn { border-radius: 3px; } diff --git a/themes/lib/littlehelps/littlehelps.html b/themes/lib/littlehelps/littlehelps.html deleted file mode 100644 index e3ce667..0000000 --- a/themes/lib/littlehelps/littlehelps.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - {title} | fridge.dev - - - - - - - - - - - - - - - -
- -
- -
- -
- -
{content}
- -
-
- - diff --git a/themes/lib/littlehelps/tescomodern-bold.ttf b/themes/lib/littlehelps/tescomodern-bold.ttf deleted file mode 100644 index 4d256c3..0000000 Binary files a/themes/lib/littlehelps/tescomodern-bold.ttf and /dev/null differ diff --git a/themes/lib/littlehelps/tescomodern.ttf b/themes/lib/littlehelps/tescomodern.ttf deleted file mode 100644 index eda2e05..0000000 Binary files a/themes/lib/littlehelps/tescomodern.ttf and /dev/null differ diff --git a/themes/lib/modern-sleek/modern-sleek.css b/themes/lib/modern-sleek/modern-sleek.css deleted file mode 100644 index f0c3e1c..0000000 --- a/themes/lib/modern-sleek/modern-sleek.css +++ /dev/null @@ -1,221 +0,0 @@ -:root { - --bg: #101214; - --fg: #f2f5f8; - --border: #30363d; - --subtle: #a6b0bb; - --links: #4cc2ff; - --chat-own-fg: #ffffff; - --hero-ascii-muted: #627487; - --hero-ascii-1: #f2f5f8; - --hero-ascii-2: #cfe8ff; - --hero-ascii-3: #9ed8ff; - --hero-ascii-4: #70caff; - --hero-ascii-5: #4cc2ff; - --hero-ascii-6: #47a6ff; - --hero-ascii-7: #2d7dff; - --hero-ascii-opacity: 0.96; -} - -body { - background: - radial-gradient(circle at 86% 12%, rgba(76, 194, 255, 0.18), transparent 30%), - linear-gradient(180deg, #171a1f 0%, #101214 58%, #0b0d10 100%); - color: var(--fg); -} - -#page-wrapper, -#container { - background: transparent; -} - -#sidebar { - width: 284px; - background: rgba(26, 29, 33, 0.96); - border-right: 1px solid rgba(255, 255, 255, 0.08); - box-shadow: 14px 0 34px rgba(0, 0, 0, 0.24); -} - -#header { - margin: 0; - padding: 18px 16px 16px; - background: - linear-gradient(90deg, rgba(76, 194, 255, 0.14), transparent), - rgba(32, 36, 42, 0.88); - border-bottom: 1px solid rgba(255, 255, 255, 0.08); -} - -#title, -.mobile-collapsed-title { - color: #ffffff; - font-family: "MainBold", var(--emoji-font), monospace; - text-shadow: none; -} - -#subtitle, -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -.usage-label { - color: var(--subtle); -} - -a, -#hide-sidebar, -#show-sidebar { - color: var(--links); -} - -#sidebar > a { - display: block; - margin: 0 10px 4px; -} - -#sidebar > a:first-of-type { - margin-top: 12px; -} - -#tab { - padding: 9px 12px; - background: transparent; - border: 1px solid transparent; - border-radius: 4px; - color: var(--fg); -} - -#tab:hover, -#tab.active { - background: rgba(76, 194, 255, 0.16); - border-color: rgba(76, 194, 255, 0.38); - color: #ffffff; -} - -#content { - padding: 32px; -} - -#content-layout { - max-width: 960px; - padding: 26px 30px; - background: rgba(28, 32, 37, 0.86); - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 6px; - box-shadow: 0 18px 42px rgba(0, 0, 0, 0.28); -} - -#post, -.account-admin-card, -.usage-card, -.form-card, -.grid-item, -pre code.hljs, -#mini-player, -#mini-player-tracks, -#sidebar-footer, -.site-popup-dialog { - background: rgba(31, 35, 40, 0.92); - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 6px; - color: var(--fg); - box-shadow: 0 10px 24px rgba(0, 0, 0, 0.18); -} - -#post:hover, -.account-admin-card:hover, -.usage-card:hover { - background: rgba(36, 41, 47, 0.96); -} - -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -#bbcode-preview { - background: #0f1216; - color: var(--fg); - border: 1px solid #3b4652; - border-radius: 4px; -} - -button, -#search-button, -#form-button, -#settings-save, -#color-reset, -#footer-button, -.danger-button { - background: #256d9c; - color: #ffffff; - border: 1px solid #3fa6e8; - border-radius: 4px; - box-shadow: none; -} - -button:hover, -#search-button:hover, -#form-button:hover, -#settings-save:hover, -#color-reset:hover, -#footer-button:hover { - background: #3399db; - color: #ffffff; -} - -.theme-picker-button, -.theme-picker-option { - background: rgba(31, 35, 40, 0.92) !important; - border-color: rgba(255, 255, 255, 0.12) !important; - border-radius: 6px !important; -} - -.theme-picker-option:hover, -.theme-picker-option.selected { - background: rgba(76, 194, 255, 0.18) !important; -} - -#mini-player-art-wrapper, -#mini-player-art { - border-radius: 4px; -} - -body.mobile-template { - background: linear-gradient(180deg, #171a1f 0%, #101214 58%, #0b0d10 100%) !important; - color: var(--fg) !important; -} - -body.mobile-template #sidebar, -body.mobile-template .mobile-collapsed-header, -body.mobile-template #content-layout, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks, -body.mobile-template #sidebar-footer { - background: rgba(28, 32, 37, 0.96) !important; - color: var(--fg) !important; - border-color: rgba(255, 255, 255, 0.1) !important; - border-radius: 6px !important; -} - -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - background: rgba(31, 35, 40, 0.94) !important; - color: var(--fg) !important; - border-color: rgba(255, 255, 255, 0.12) !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: #256d9c !important; - color: #ffffff !important; - border-color: #3fa6e8 !important; -} -body.modern-sleek-theme .content-pagination .guestbook-page-btn { border-radius: 2px; } diff --git a/themes/lib/modern-sleek/modern-sleek.html b/themes/lib/modern-sleek/modern-sleek.html deleted file mode 100644 index 149cb11..0000000 --- a/themes/lib/modern-sleek/modern-sleek.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - {title} | fridge.dev - - - - - - - - - - - - - -
- -
- -
{content}
- -
-
- - diff --git a/themes/lib/occult/occult.css b/themes/lib/occult/occult.css deleted file mode 100644 index d5b9bc0..0000000 --- a/themes/lib/occult/occult.css +++ /dev/null @@ -1,1034 +0,0 @@ -:root { - --bg: #070907; - --fg: #efe6cf; - --border: #3f6f63; - --subtle: #9ca889; - --links: #b9d36b; - --occult-deep: #0b1411; - --occult-panel: #101b16; - --occult-ink: #16231d; - --occult-brass: #d1aa57; - --occult-wax: #8e2f2a; - --hero-ascii-muted: #817d63; - --hero-ascii-1: #8e2f2a; - --hero-ascii-2: #9e5133; - --hero-ascii-3: #ad7440; - --hero-ascii-4: #d1aa57; - --hero-ascii-5: #b9d36b; - --hero-ascii-6: #8fb575; - --hero-ascii-7: #3f6f63; - --hero-ascii-opacity: 0.92; -} - -body { - counter-reset: occult-nav; - background: - radial-gradient(circle at 58% 42%, transparent 0 118px, rgba(209, 170, 87, 0.07) 119px 120px, transparent 121px 168px, rgba(185, 211, 107, 0.055) 169px 170px, transparent 171px), - repeating-linear-gradient(90deg, rgba(185, 211, 107, 0.035) 0 1px, transparent 1px 56px), - repeating-linear-gradient(0deg, rgba(209, 170, 87, 0.03) 0 1px, transparent 1px 42px), - conic-gradient(from 18deg at 50% 18%, transparent 0 12deg, rgba(185, 211, 107, 0.08) 12deg 14deg, transparent 14deg 45deg), - linear-gradient(180deg, #020403 0%, #0b1411 45%, #070907 100%); - color: var(--fg); -} - -body::before, -body::after { - content: ""; - position: fixed; - pointer-events: none; -} - -.occult-rune-field, -.occult-floor-sigil { - position: fixed; - pointer-events: none; -} - -.occult-rune-field { - inset: 0; - z-index: -1; - overflow: hidden; - color: rgba(209, 170, 87, 0.36); - font-family: Georgia, "Times New Roman", serif; - text-shadow: 0 0 18px rgba(185, 211, 107, 0.22); -} - -.occult-rune-field span { - position: absolute; - display: grid; - place-items: center; - width: 78px; - height: 78px; - border: 1px solid rgba(209, 170, 87, 0.16); - border-radius: 50%; - background: radial-gradient(circle, rgba(7, 16, 13, 0.72), transparent 68%); - font-size: 30px; - opacity: 0.64; -} - -.occult-rune-field span:nth-child(1) { - top: 76px; - right: 9vw; -} - -.occult-rune-field span:nth-child(2) { - top: 29vh; - right: 23vw; - transform: rotate(12deg); -} - -.occult-rune-field span:nth-child(3) { - right: 6vw; - bottom: 19vh; - transform: rotate(-10deg); -} - -.occult-rune-field span:nth-child(4) { - left: 326px; - bottom: 76px; - transform: rotate(18deg); -} - -.occult-rune-field span:nth-child(5) { - left: 42vw; - top: 13vh; - color: rgba(185, 211, 107, 0.3); -} - -.occult-rune-field span:nth-child(6) { - right: 34vw; - bottom: 31vh; - width: 56px; - height: 56px; - font-size: 23px; -} - -.occult-floor-sigil { - right: 7vw; - bottom: -125px; - z-index: -1; - width: min(430px, 42vw); - aspect-ratio: 1; - border-radius: 50%; - opacity: 0.34; - background: - linear-gradient(90deg, transparent 49.6%, rgba(185, 211, 107, 0.55) 49.6% 50.4%, transparent 50.4%), - linear-gradient(18deg, transparent 49.6%, rgba(209, 170, 87, 0.44) 49.6% 50.4%, transparent 50.4%), - linear-gradient(162deg, transparent 49.6%, rgba(142, 47, 42, 0.42) 49.6% 50.4%, transparent 50.4%), - repeating-radial-gradient(circle, transparent 0 50px, rgba(185, 211, 107, 0.62) 51px 52px, transparent 53px 88px); - filter: drop-shadow(0 0 22px rgba(185, 211, 107, 0.12)); -} - -body::before { - inset: 22px; - z-index: -2; - border: 1px solid rgba(185, 211, 107, 0.14); - background: - repeating-radial-gradient(circle at 50% 18%, transparent 0 44px, rgba(209, 170, 87, 0.07) 45px 46px, transparent 47px 88px), - linear-gradient(118deg, transparent 0 49.8%, rgba(63, 111, 99, 0.16) 49.8% 50.2%, transparent 50.2% 100%), - linear-gradient(62deg, transparent 0 49.8%, rgba(142, 47, 42, 0.15) 49.8% 50.2%, transparent 50.2% 100%); - clip-path: polygon(24px 0, calc(100% - 24px) 0, 100% 24px, 100% calc(100% - 24px), calc(100% - 24px) 100%, 24px 100%, 0 calc(100% - 24px), 0 24px); - opacity: 0.86; -} - -body::after { - inset: 0; - z-index: -1; - background: - linear-gradient(90deg, rgba(7, 9, 7, 0.92) 0 280px, transparent 280px), - radial-gradient(ellipse at 82% 10%, rgba(142, 47, 42, 0.18), transparent 34%), - linear-gradient(180deg, transparent, rgba(2, 4, 3, 0.7)); -} - -#page-wrapper, -#container { - background: transparent; -} - -#sidebar { - width: 270px; - background: - linear-gradient(90deg, rgba(185, 211, 107, 0.08) 0 1px, transparent 1px 100%), - linear-gradient(180deg, rgba(12, 20, 17, 0.97), rgba(5, 7, 6, 0.97)); - border-right: 1px solid rgba(185, 211, 107, 0.38); - box-shadow: - inset -7px 0 0 rgba(63, 111, 99, 0.18), - 14px 0 34px rgba(0, 0, 0, 0.42); -} - -#header { - position: relative; - margin: 13px; - padding: 15px 13px 17px; - text-align: left; - background: - linear-gradient(135deg, rgba(185, 211, 107, 0.13) 0 16%, transparent 16% 100%), - linear-gradient(180deg, rgba(22, 35, 29, 0.94), rgba(7, 9, 7, 0.94)); - border: 1px solid var(--border); - border-bottom: 3px double var(--occult-brass); - border-radius: 0; - clip-path: polygon(12px 0, 100% 0, 100% calc(100% - 12px), calc(100% - 12px) 100%, 0 100%, 0 12px); - box-shadow: - inset 0 0 0 1px rgba(239, 230, 207, 0.04), - 0 0 24px rgba(185, 211, 107, 0.08); -} - -#header::before { - content: "☽ ✶ ☉"; - position: absolute; - left: 12px; - right: 12px; - top: -11px; - color: var(--occult-brass); - font-family: Georgia, "Times New Roman", serif; - font-size: 13px; - letter-spacing: 8px; - text-align: center; - text-shadow: 0 0 9px rgba(209, 170, 87, 0.3); -} - -#header::after { - content: "SIGIL-03"; - position: absolute; - right: 10px; - bottom: 8px; - color: var(--occult-brass); - font-family: "MainBold", var(--emoji-font), monospace; - font-size: 10px; - letter-spacing: 0; -} - -#title, -.mobile-collapsed-title { - color: var(--links); - font-family: "MainBold", var(--emoji-font), monospace; - font-size: 21px; - text-transform: lowercase; - text-shadow: - 0 0 10px rgba(185, 211, 107, 0.42), - 1px 1px 0 #000; -} - -#subtitle, -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -#post-bookmark, -#post-bookmark-feed, -#post-edit-feed, -.usage-label, -.feed-reply-meta, -.form-field label, -.color-row span { - color: var(--subtle); -} - -a, -#hide-sidebar, -#show-sidebar { - color: var(--links); -} - -a:hover, -#hide-sidebar:hover, -#show-sidebar:hover { - color: var(--occult-brass); -} - -#sidebar > a { - display: block; - margin: 0 13px 7px; -} - -#tab { - counter-increment: occult-nav; - position: relative; - min-height: 35px; - display: flex; - align-items: center; - gap: 9px; - padding: 8px 12px 8px 47px; - color: var(--fg); - background: - linear-gradient(90deg, rgba(63, 111, 99, 0.28), rgba(16, 27, 22, 0.94) 62%, rgba(142, 47, 42, 0.14)); - border: 1px solid rgba(63, 111, 99, 0.7); - border-radius: 0; - clip-path: polygon(9px 0, 100% 0, 100% calc(100% - 9px), calc(100% - 9px) 100%, 0 100%, 0 9px); - box-shadow: - inset 0 1px 0 rgba(239, 230, 207, 0.06), - 0 2px 0 rgba(0, 0, 0, 0.48); -} - -#tab::before { - content: counter(occult-nav, decimal-leading-zero); - position: absolute; - left: 10px; - width: 26px; - color: var(--occult-brass); - font-family: "MainBold", var(--emoji-font), monospace; - font-size: 10px; - text-align: center; - border-right: 1px solid rgba(209, 170, 87, 0.45); -} - -#tab::after { - content: "✶"; - position: absolute; - right: 9px; - width: auto; - height: auto; - transform: none; - background: transparent; - color: var(--occult-wax); - font-size: 12px; - text-shadow: 0 0 10px rgba(142, 47, 42, 0.72); -} - -#tab:hover, -#tab.active { - background: - linear-gradient(90deg, var(--links), var(--border) 100%); - color: #03100b; - border-color: var(--links); - transform: translateX(4px); - box-shadow: - -4px 0 0 var(--occult-wax), - 0 0 18px rgba(185, 211, 107, 0.18); -} - -#tab:hover::before, -#tab.active::before { - color: #03100b; - border-right-color: rgba(3, 16, 11, 0.38); -} - -#content { - padding: 34px; -} - -#content-layout { - position: relative; - isolation: isolate; - max-width: 920px; - min-height: calc(100% - 2px); - padding: 24px; - background: - linear-gradient(90deg, rgba(185, 211, 107, 0.06) 0 1px, transparent 1px 28px), - linear-gradient(180deg, rgba(16, 27, 22, 0.95), rgba(7, 9, 7, 0.96)); - border: 1px solid rgba(185, 211, 107, 0.48); - border-top: 3px double var(--occult-brass); - border-radius: 0; - clip-path: polygon(18px 0, 100% 0, 100% calc(100% - 18px), calc(100% - 18px) 100%, 0 100%, 0 18px); - box-shadow: - inset 0 0 0 1px rgba(239, 230, 207, 0.04), - 8px 8px 0 rgba(0, 0, 0, 0.38), - 0 22px 55px rgba(0, 0, 0, 0.42); -} - -#content-layout::before { - content: ""; - position: absolute; - inset: -16px; - z-index: -1; - pointer-events: none; - border: 1px solid rgba(63, 111, 99, 0.34); - background: - conic-gradient(from 45deg at 50% 40%, transparent 0 20deg, rgba(185, 211, 107, 0.1) 20deg 21deg, transparent 21deg 90deg), - repeating-linear-gradient(135deg, transparent 0 15px, rgba(209, 170, 87, 0.08) 15px 16px, transparent 16px 30px); - clip-path: polygon(22px 0, 100% 0, 100% calc(100% - 22px), calc(100% - 22px) 100%, 0 100%, 0 22px); -} - -#content-layout::after { - content: "as above / so below"; - display: block; - margin-top: 16px; - color: rgba(209, 170, 87, 0.62); - font-family: "MainBold", var(--emoji-font), monospace; - font-size: 11px; - text-align: right; -} - -#content-main > *:first-child { - margin-top: 0; -} - -#post, -.account-admin-card, -.usage-card, -pre code.hljs, -.form-card, -.grid-item, -#mini-player, -#mini-player-tracks, -#sidebar-footer { - background: - linear-gradient(180deg, rgba(22, 35, 29, 0.94), rgba(9, 15, 12, 0.94)); - color: var(--fg); - border: 1px solid rgba(63, 111, 99, 0.72); - border-radius: 0; - box-shadow: - inset 0 0 0 1px rgba(239, 230, 207, 0.035), - 4px 4px 0 rgba(0, 0, 0, 0.34); -} - -#post, -.account-admin-card, -.usage-card, -pre code.hljs { - padding: 15px; -} - -#post:hover, -.account-admin-card:hover, -.usage-card:hover { - background: - linear-gradient(180deg, rgba(28, 47, 39, 0.95), rgba(11, 20, 17, 0.96)); - border-color: rgba(185, 211, 107, 0.72); -} - -#post-content, -#post-title, -.form-card, -.form-card p, -.checkbox-label span, -.radio-label span, -.color-row, -.feed-reply-body, -.guestbook-post-actions, -#content-main, -#content-main h1, -#content-main h2, -#content-main h3, -#content-main h4, -#content-main p, -#content-main li { - color: var(--fg); -} - -#content-main h1, -#content-main h2, -#post-title { - color: #f6edc8; - text-shadow: 0 0 12px rgba(185, 211, 107, 0.18); -} - -#search-box, -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -#bbcode-preview, -#create-account-form input[type="text"], -#admin-account-form input[type="text"], -#admin-account-form textarea { - background: #07100d; - color: var(--fg); - border: 1px solid rgba(63, 111, 99, 0.78); - border-radius: 0; -} - -.dropdown option, -.bbcode-dropdown option { - background: #07100d; - color: var(--fg); -} - -#search-box:hover, -#search-box:focus, -input:hover, -input:focus, -textarea:hover, -textarea:focus, -.dropdown:hover, -.dropdown:focus, -.text-input:hover, -.text-input:focus, -.bbcode-dropdown:hover, -.bbcode-dropdown:focus, -.bbcode-btn:hover, -.bbcode-btn:focus, -#bbcode-textbox:focus { - background: #0d1a15; - border-color: var(--links); - box-shadow: 0 0 0 3px rgba(185, 211, 107, 0.13); - outline: none; -} - -.bbcode-editor, -.bbcode-toolbar, -#bbcode-preview { - background: rgba(9, 15, 12, 0.88); - color: var(--fg); - border-color: rgba(63, 111, 99, 0.72); -} - -.checkbox, -.radio, -.color-input { - background: #07100d; - border: 1px solid rgba(63, 111, 99, 0.78); -} - -.checkbox:checked { - background-color: var(--links); -} - -.radio:checked { - background: radial-gradient(circle, var(--links) 30%, #07100d 34%); -} - -#search-button, -#form-button, -#lastfm-link-button, -#settings-save, -#color-reset, -.danger-button, -button, -#footer-button { - background: - linear-gradient(180deg, #1c332a, #08110e); - color: var(--fg); - border: 1px solid var(--border); - border-radius: 0; - box-shadow: - inset 0 1px 0 rgba(239, 230, 207, 0.06), - 3px 3px 0 rgba(0, 0, 0, 0.35); -} - -#search-button:hover, -#form-button:hover, -#lastfm-link-button:hover, -#settings-save:hover, -#color-reset:hover, -button:hover, -#footer-button:hover { - background: - linear-gradient(180deg, var(--links), #557359); - color: #03100b; - border-color: var(--links); -} - -#settings-save { - background: var(--links) !important; - color: #03100b !important; -} - -.danger-button, -.grid-delete-button, -#admin-account-delete-form button { - background: var(--occult-wax); - color: #fff3df; -} - -.form-button-disabled, -.form-button-disabled:hover, -.form-button-disabled:active, -.bbcode-btn.disabled:hover, -.bbcode-dropdown.disabled:hover { - background: #111713; - color: #6d7468; - box-shadow: none; - transform: none; - cursor: not-allowed; -} - -#mini-player, -#mini-player-tracks, -#sidebar-footer { - margin: 10px 13px; - width: calc(100% - 26px); - box-sizing: border-box; -} - -#mini-player { - padding: 8px; - overflow-x: hidden; -} - -#mini-player-art { - border-color: var(--border); - border-radius: 0; -} - -#mini-player-title-inner, -.mini-track { - color: var(--occult-brass); -} - -#mini-player-title-inner { - display: block; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -#mini-player-play, -#mini-player-controls span { - color: var(--fg); -} - -#mini-player-controls span:hover, -#mini-player-play:hover { - color: var(--links); -} - -#mini-player-seek, -#mini-player-volume { - accent-color: var(--links); -} - -#sidebar-footer { - padding: 12px 8px 10px; -} - -#footer-text { - display: block; - margin-bottom: 8px; - text-align: center; -} - -#footer-buttons { - gap: 5px; -} - -#footer-button { - display: flex; - min-height: 25px; - align-items: center; - justify-content: center; - padding: 4px 6px; -} - -#footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: var(--links) !important; - color: #03100b !important; - border-color: var(--links) !important; -} - -.tooltip { - background: #07100d; - color: var(--fg); - border: 1px solid var(--links); - border-radius: 0; - box-shadow: - 3px 3px 0 rgba(0, 0, 0, 0.55), - 0 0 18px rgba(185, 211, 107, 0.2); -} - -body.mobile-template { - background: - repeating-linear-gradient(90deg, rgba(185, 211, 107, 0.04) 0 1px, transparent 1px 42px), - linear-gradient(180deg, #020403 0%, #0b1411 52%, #070907 100%) !important; - color: var(--fg) !important; -} - -body.mobile-template::before { - inset: 10px; - opacity: 0.52; -} - -body.mobile-template::after { - display: none; -} - -body.mobile-template .mobile-collapsed-header, -body.mobile-template #sidebar, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks, -body.mobile-template #sidebar-footer, -body.mobile-template #content-layout, -body.mobile-template #post, -body.mobile-template .usage-card, -body.mobile-template .form-card, -body.mobile-template .grid-item { - background: - linear-gradient(180deg, rgba(22, 35, 29, 0.96), rgba(7, 9, 7, 0.96)) !important; - color: var(--fg) !important; - border: 1px solid rgba(63, 111, 99, 0.78) !important; - border-radius: 0 !important; - box-shadow: - inset 0 0 0 1px rgba(239, 230, 207, 0.035), - 3px 3px 0 rgba(0, 0, 0, 0.32) !important; -} - -body.mobile-template .mobile-collapsed-header { - border-bottom: 3px double var(--occult-brass) !important; -} - -body.mobile-template .mobile-collapsed-brand, -body.mobile-template .mobile-collapsed-subtitle, -body.mobile-template #subtitle, -body.mobile-template #footer-text, -body.mobile-template #user-greeting, -body.mobile-template #content-footer, -body.mobile-template #post-date, -body.mobile-template #post-description, -body.mobile-template #post-username { - color: var(--subtle) !important; -} - -body.mobile-template .mobile-collapsed-title, -body.mobile-template #title { - color: var(--links) !important; - text-shadow: 0 0 10px rgba(185, 211, 107, 0.35) !important; -} - -body.mobile-template #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - background: - linear-gradient(180deg, #1c332a, #08110e) !important; - color: var(--fg) !important; - border: 1px solid var(--border) !important; - border-radius: 0 !important; -} - -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: - linear-gradient(180deg, var(--links), #557359) !important; - color: #03100b !important; - border-color: var(--links) !important; -} - -body.mobile-template #content { - padding: 13px !important; -} - -body.mobile-template #content-layout { - padding: 15px !important; - clip-path: polygon(12px 0, 100% 0, 100% calc(100% - 12px), calc(100% - 12px) 100%, 0 100%, 0 12px) !important; -} - -body.mobile-template #content-layout::before { - inset: -8px !important; -} - -body.mobile-template #content-layout::after { - margin-top: 12px !important; - font-size: 10px !important; -} - -body.mobile-template #content-main { - padding: 0 !important; - background: transparent !important; - color: var(--fg) !important; -} - -body.mobile-template #content-main h1, -body.mobile-template #content-main h2, -body.mobile-template #content-main h3, -body.mobile-template #content-main h4, -body.mobile-template #content-main p, -body.mobile-template #content-main li, -body.mobile-template #post-content, -body.mobile-template #post-title, -body.mobile-template .checkbox-label span, -body.mobile-template .radio-label span, -body.mobile-template .color-row, -body.mobile-template .feed-reply-body { - color: var(--fg) !important; -} - -body.mobile-template input, -body.mobile-template textarea, -body.mobile-template .dropdown, -body.mobile-template .text-input, -body.mobile-template .bbcode-dropdown, -body.mobile-template .bbcode-btn, -body.mobile-template #bbcode-textbox, -body.mobile-template #bbcode-preview { - background: #07100d !important; - color: var(--fg) !important; - border: 1px solid rgba(63, 111, 99, 0.78) !important; - border-radius: 0 !important; -} - -body.mobile-template .checkbox, -body.mobile-template .radio, -body.mobile-template .color-input { - background: #07100d !important; - border-color: rgba(63, 111, 99, 0.78) !important; -} - -body.mobile-template .checkbox:checked { - background-color: var(--links) !important; -} - -body.mobile-template .radio:checked { - background: radial-gradient(circle, var(--links) 30%, #07100d 34%) !important; -} - -body.mobile-template #sidebar { - width: 100% !important; - min-width: 0 !important; - max-width: none !important; - height: auto !important; - min-height: 0 !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid, -body.mobile-template #footer-buttons { - width: auto !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - min-height: 34px !important; - box-sizing: border-box !important; -} - -#mini-player, -#mini-player-tracks, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks { - background: - linear-gradient(180deg, rgba(22, 35, 29, 0.96), rgba(7, 9, 7, 0.96)) !important; - color: var(--fg) !important; - border: 1px solid rgba(63, 111, 99, 0.78) !important; -} - -#mini-player-main, -#mini-player-meta, -#mini-player-title, -#mini-player-row, -#mini-player-controls, -#mini-player-volume-wrapper { - color: var(--fg); -} - -#mini-player-art-wrapper, -#mini-player-art { - background: #07100d !important; - border-color: rgba(63, 111, 99, 0.78) !important; -} - -#mini-player-download, -#mini-player-play, -#mini-player-controls span { - color: var(--links) !important; -} - -#mini-player-download:hover, -#mini-player-play:hover, -#mini-player-controls span:hover { - color: #03100b !important; - background: var(--links) !important; -} - -#mini-player-title-inner, -.mini-track { - color: var(--links) !important; -} - -.mini-track { - background: transparent !important; - border-color: transparent !important; -} - -.mini-track:hover, -.mini-track.active { - background: linear-gradient(180deg, var(--links), #557359) !important; - color: #03100b !important; - border-color: var(--links) !important; -} - -#mini-player-seek, -#mini-player-volume { - accent-color: var(--links) !important; - background: #07100d !important; - border-color: rgba(63, 111, 99, 0.78) !important; -} - -#mini-player-seek::-webkit-slider-thumb, -#mini-player-volume::-webkit-slider-thumb { - background: var(--links) !important; - border-color: var(--occult-brass) !important; -} - -#mini-player-seek::-moz-range-track, -#mini-player-volume::-moz-range-track { - background: #07100d !important; - border-color: rgba(63, 111, 99, 0.78) !important; -} - -#mini-player-seek::-moz-range-thumb, -#mini-player-volume::-moz-range-thumb { - background: var(--links) !important; - border-color: var(--occult-brass) !important; -} - -#tab:hover, -#tab.active, -#tab:hover::before, -#tab.active::before, -#tab:hover::after, -#tab.active::after, -#footer-button:hover, -#footer-button.active, -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - color: #03100b !important; -} - -.chat-view { - --chat-own-bg: #263f31; - --chat-own-fg: #efe6cf; -} - -.chat-message-own { - border-color: #557359; -} - -.chat-message-own .chat-reply-reference, -.chat-message-own .chat-reaction.reacted { - background: rgba(239, 230, 207, 0.12); -} - -#post-edit-feed, -.guestbook-edit-btn, -.guestbook-delete-btn, -#post-edit-feed:hover, -.guestbook-edit-btn:hover, -.guestbook-delete-btn:hover, -#post-edit-feed:active, -.guestbook-edit-btn:active, -.guestbook-delete-btn:active { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; - padding: 0 !important; - color: var(--subtle) !important; -} - -.guestbook-edit-btn, -.guestbook-delete-btn { - width: 16px !important; - height: 16px !important; -} - -#mini-player-title { - overflow: hidden !important; - width: 100% !important; - min-width: 0 !important; -} - -#mini-player-title-inner.scrolling { - display: inline-block !important; - max-width: none !important; - width: max-content !important; - overflow: visible !important; - text-overflow: clip !important; -} - - -/* theme ascii/resource cleanup */ -#usage-grid .usage-card, -body.mobile-template #usage-grid .usage-card { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - outline: 0 !important; - border-radius: 0 !important; - padding: 4px 0 !important; - transform: none !important; -} - -#usage-grid .usage-card:hover, -body.mobile-template #usage-grid .usage-card:hover { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; -} - -.usage-ascii { - color: var(--resource-ascii) !important; - text-shadow: none !important; - filter: none !important; -} - -.usage-label { - color: var(--resource-label) !important; - text-shadow: none !important; -} - -#ascii-time { - color: var(--time-ascii) !important; - text-shadow: none !important; -} - -#ascii-time-label { - color: var(--time-label) !important; -} - -/* distinct occult controls: sigil panels with inner glow */ -#tab, -#footer-button, -button, -#form-button, -#search-button, -#settings-save, -#color-reset, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - border: 1px solid color-mix(in srgb, var(--links) 72%, var(--border) 28%) !important; - border-radius: 2px !important; - background: - radial-gradient(circle at 18% 50%, rgba(200, 132, 32, 0.22), transparent 38%), - linear-gradient(135deg, rgba(70, 28, 80, 0.42), rgba(11, 7, 16, 0.96)) !important; - color: var(--fg) !important; - box-shadow: - inset 0 0 18px rgba(200, 132, 32, 0.16), - 0 0 0 1px rgba(0, 0, 0, 0.6), - 3px 3px 0 rgba(0, 0, 0, 0.32) !important; -} - -#tab::before { - content: "◇ "; - color: var(--links); -} - -#tab:hover, -#tab.active, -#footer-button:hover, -#footer-button.active, -button:hover, -#form-button:hover, -#search-button:hover, -#settings-save:hover, -#color-reset:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: - radial-gradient(circle at 18% 50%, rgba(248, 207, 116, 0.3), transparent 40%), - linear-gradient(135deg, rgba(93, 37, 102, 0.72), rgba(18, 10, 26, 0.96)) !important; - color: #f8cf74 !important; - border-color: #f8cf74 !important; - box-shadow: - inset 0 0 22px rgba(248, 207, 116, 0.2), - 0 0 16px rgba(200, 132, 32, 0.24) !important; -} -body.occult-theme .content-pagination .guestbook-page-btn { border-radius: 0; } diff --git a/themes/lib/occult/occult.html b/themes/lib/occult/occult.html deleted file mode 100644 index 6394262..0000000 --- a/themes/lib/occult/occult.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - {title} | fridge.dev - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- -
-{content} -
- -
- - -
-
-
- - diff --git a/themes/lib/thinkpad/thinkpad.css b/themes/lib/thinkpad/thinkpad.css deleted file mode 100644 index 1bc8123..0000000 --- a/themes/lib/thinkpad/thinkpad.css +++ /dev/null @@ -1,399 +0,0 @@ -:root { - --bg: #111315; - --fg: #e7e7e2; - --border: #383d3f; - --subtle: #9ca3a3; - --links: #e2201a; - --chat-own-fg: #ffffff; - --hero-ascii-muted: #656b6c; - --hero-ascii-1: #f5f5ef; - --hero-ascii-2: #d8d8d0; - --hero-ascii-3: #b6b8b3; - --hero-ascii-4: #8f9693; - --hero-ascii-5: #707b78; - --hero-ascii-6: #e2201a; - --hero-ascii-7: #ff4a3d; - --hero-ascii-opacity: 0.96; -} - -body.thinkpad-theme, -body.thinkpad-theme *:not(#title):not(#title *):not(.mobile-collapsed-title):not(.mobile-collapsed-title *):not(.fa):not(.fa-solid):not(.fa-regular):not(.fa-brands):not([class^="fa-"]):not([class*=" fa-"]) { - font-family: 'IBM_VGA', var(--emoji-font), monospace !important; -} - -body { - background: - linear-gradient(90deg, rgba(255, 255, 255, 0.025) 1px, transparent 1px), - linear-gradient(0deg, rgba(0, 0, 0, 0.34) 1px, transparent 1px), - radial-gradient(circle at 78% 14%, rgba(226, 32, 26, 0.11), transparent 26%), - linear-gradient(135deg, #1a1d1f 0%, #0b0c0d 58%, #151719 100%); - background-size: 6px 6px, 6px 6px, auto, auto; - color: var(--fg); -} - -.thinkpad-deck { - position: fixed; - inset: 0; - z-index: -1; - pointer-events: none; - background: - radial-gradient(circle at 32px 32px, rgba(226, 32, 26, 0.95) 0 4px, transparent 5px), - linear-gradient(90deg, transparent calc(100% - 138px), rgba(255, 255, 255, 0.04) calc(100% - 138px) calc(100% - 136px), transparent calc(100% - 136px)), - linear-gradient(180deg, transparent calc(100% - 72px), rgba(255, 255, 255, 0.05) calc(100% - 72px) calc(100% - 70px), transparent calc(100% - 70px)); - opacity: 0.9; -} - -#page-wrapper, -#container { - background: transparent; -} - -#sidebar { - width: 224px; - min-width: 224px; - max-width: 224px; - height: 100vh; - background: - linear-gradient(180deg, rgba(31, 34, 36, 0.98), rgba(10, 11, 12, 0.98)), - var(--bg); - border-right: 1px solid #404547; - box-shadow: - inset -7px 0 0 rgba(0, 0, 0, 0.32), - 12px 0 28px rgba(0, 0, 0, 0.42); - overflow-y: hidden; -} - -#header { - position: relative; - margin: 9px 10px 8px; - padding: 9px 10px 8px; - background: - linear-gradient(90deg, rgba(226, 32, 26, 0.12), transparent 34%), - #151719; - border: 1px solid #3c4143; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.08), - 0 2px 0 #050505; -} - -#header::after { - content: "x230"; - position: absolute; - right: 9px; - bottom: 8px; - color: #ff4a3d; - font-family: 'IBM_VGA', var(--emoji-font), monospace !important; - font-size: 11px; -} - -#title, -.mobile-collapsed-title { - color: #f5f5ef; - text-transform: none; - text-shadow: 1px 1px 0 #000; - font-size: 18px; - line-height: 1.05; -} - -#subtitle { - display: inline-block; - margin-bottom: 3px; - color: #9ee37d; - font-family: 'IBM_VGA', var(--emoji-font), monospace; - font-size: 10px; - line-height: 1; - text-shadow: 1px 1px 0 #000; -} - -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -.usage-label { - color: var(--subtle); -} - -a, -#hide-sidebar, -#show-sidebar { - color: var(--links); -} - -#sidebar > a { - display: block; - margin: 0 10px 6px; -} - -#tab { - min-height: 0; - padding: 9px 10px; - background: - linear-gradient(180deg, #24282a, #131516); - border: 1px solid #41484a; - border-radius: 2px; - color: var(--fg); - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.08), - 0 2px 0 #050505; - font-size: 13px; - line-height: 1.16; - text-transform: lowercase; -} - -body.thinkpad-theme .tooltip { - padding: 6px 9px; - background: - linear-gradient(180deg, rgba(38, 42, 44, 0.98), rgba(13, 15, 16, 0.98)); - color: #f5f5ef; - border: 1px solid #4b5153; - border-left: 4px solid var(--links); - border-radius: 2px; - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.08), - 3px 3px 0 #050505, - 0 10px 24px rgba(0, 0, 0, 0.38); - font-family: 'IBM_VGA', var(--emoji-font), monospace !important; - font-size: 12px; - line-height: 1.25; -} - -#tab::before { - content: "■ "; - color: #e2201a; -} - -#tab:hover, -#tab.active { - background: - linear-gradient(180deg, #e53935, #a71310); - border-color: #ff6259; - color: #ffffff; - transform: translateY(1px); - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.22), - 0 1px 0 #050505; -} - -#content { - padding: 30px; -} - -#content-layout, -#post, -.account-admin-card, -.usage-card, -.form-card, -.grid-item, -pre code.hljs, -#mini-player, -#mini-player-tracks, -#sidebar-footer { - background: - linear-gradient(180deg, rgba(31, 34, 36, 0.96), rgba(16, 18, 19, 0.96)); - border: 1px solid #3c4143; - border-radius: 2px; - color: var(--fg); - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, 0.07), - 0 12px 28px rgba(0, 0, 0, 0.28); -} - -#content-layout { - max-width: 930px; - padding: 24px 28px; -} - -#user-greeting { - padding: 4px 10px; - font-size: 11px; -} - -#sidebar-spacer { - margin-top: auto; - min-height: 4px; -} - -#mini-player, -#mini-player-tracks { - width: calc(100% - 20px); - margin: 4px 10px; - flex-shrink: 0; - box-sizing: border-box; -} - -#mini-player-tracks { - padding: 5px 6px; - max-height: 68px; - gap: 2px; -} - -.mini-track { - font-size: 10px; - line-height: 1.15; -} - -#mini-player { - padding: 6px; - gap: 4px; - max-height: 66px; - margin-bottom: 4px; - overflow: hidden; -} - -#mini-player-main { - gap: 6px; -} - -#mini-player-art-wrapper { - width: 22px; - height: 22px; - margin-top: 0; -} - -#mini-player-meta { - gap: 2px; -} - -#mini-player-title-inner { - font-size: 10px; -} - -#mini-player-row { - gap: 4px; -} - -#mini-player-play { - width: 14px; - height: 14px; - font-size: 10px; -} - -#mini-player-controls { - font-size: 11px; -} - -#mini-player-volume-wrapper:hover #mini-player-volume { - width: 42px; -} - -#mini-player-seek, -#mini-player-volume { - height: 3px; -} - -#sidebar-footer { - width: calc(100% - 20px); - margin: 4px 10px 8px; - padding: 7px 6px 6px; - flex-shrink: 0; -} - -#footer-text { - margin-bottom: 5px; - font-size: 10px; -} - -#footer-buttons { - gap: 3px; -} - -#footer-button { - min-height: 0; - padding: 3px 5px; - font-size: 11px; -} - -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -#bbcode-preview { - background: #0c0d0e; - color: var(--fg); - border: 1px solid #4b5153; - border-radius: 2px; -} - -button, -#search-button, -#form-button, -#settings-save, -#color-reset, -#footer-button, -.danger-button { - background: linear-gradient(180deg, #2b3032, #131516); - color: var(--fg); - border: 1px solid #4b5153; - border-radius: 2px; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.09), 0 2px 0 #050505; -} - -button:hover, -#search-button:hover, -#form-button:hover, -#settings-save:hover, -#color-reset:hover, -#footer-button:hover { - background: linear-gradient(180deg, #e53935, #a71310); - color: #ffffff; - border-color: #ff6259; -} - -.theme-picker-button, -.theme-picker-option { - background: linear-gradient(180deg, #24282a, #131516) !important; - border-color: #41484a !important; -} - -.theme-picker-option:hover, -.theme-picker-option.selected { - background: linear-gradient(180deg, #e53935, #a71310) !important; -} - -body.mobile-template { - background: - radial-gradient(circle at 32px 32px, rgba(226, 32, 26, 0.18), transparent 28px), - linear-gradient(135deg, #1a1d1f 0%, #0b0c0d 58%, #151719 100%) !important; - color: var(--fg) !important; -} - -body.mobile-template #sidebar { - height: auto !important; - overflow-y: visible !important; -} - -body.mobile-template #sidebar, -body.mobile-template .mobile-collapsed-header, -body.mobile-template #content-layout, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks, -body.mobile-template #sidebar-footer { - background: linear-gradient(180deg, rgba(31, 34, 36, 0.98), rgba(10, 11, 12, 0.98)) !important; - color: var(--fg) !important; - border-color: #41484a !important; -} - -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - background: linear-gradient(180deg, #24282a, #131516) !important; - color: var(--fg) !important; - border-color: #41484a !important; -} - -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: linear-gradient(180deg, #e53935, #a71310) !important; - color: #ffffff !important; - border-color: #ff6259 !important; -} -body.thinkpad-theme .content-pagination .guestbook-page-btn { border-radius: 2px; } diff --git a/themes/lib/thinkpad/thinkpad.html b/themes/lib/thinkpad/thinkpad.html deleted file mode 100644 index 26aeb20..0000000 --- a/themes/lib/thinkpad/thinkpad.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - {title} | fridge.dev - - - - - - - - - - - - - - -
- -
- -
{content}
- -
-
- - diff --git a/themes/lib/whiteprint/whiteprint.css b/themes/lib/whiteprint/whiteprint.css index 257386a..768eb1c 100644 --- a/themes/lib/whiteprint/whiteprint.css +++ b/themes/lib/whiteprint/whiteprint.css @@ -1,807 +1,546 @@ -:root { - --bg: #eceaf0; - --fg: #171b1d; - --border: #776490; - --subtle: #6f617f; - --links: #3e8582; - --chat-own-fg: #ffffff; - --hero-ascii-muted: #8a8392; - --hero-ascii-1: #776490; - --hero-ascii-2: #766f94; - --hero-ascii-3: #747a99; - --hero-ascii-4: #72869d; - --hero-ascii-5: #7091a1; - --hero-ascii-6: #6e9da4; - --hero-ascii-7: #6caaa7; - --hero-ascii-opacity: 1; - --resource-ascii: #4d918e; - --resource-label: #776490; - --time-ascii: #4d918e; - --time-label: #6f617f; -} - -body { +:root, +body.whiteprint-theme { + --bg: #f1f0ed; + --fg: #3f3e3b; + --border: #85778d; + --subtle: #74716f; + --links: #527a73; + --chat-own-fg: #fbfaf7; + --hero-ascii-muted: #8d8987; + --hero-ascii-1: #85778d; + --hero-ascii-2: #807a87; + --hero-ascii-3: #788081; + --hero-ascii-4: #71867b; + --hero-ascii-5: #698b76; + --hero-ascii-6: #618f72; + --hero-ascii-7: #598d7d; + --selection-bg: #85778d; + --selection-fg: #fbfaf7; + --scrollbar-track: #e3e1dd; + --scrollbar-thumb: #aa9e9f; + --scrollbar-thumb-hover: #67857f; + --scrollbar-thumb-border: #f1f0ed; +} + +body.whiteprint-theme, +body.whiteprint-theme.mobile-template { background: - linear-gradient(135deg, rgba(119, 100, 144, 0.16), rgba(108, 170, 167, 0.12)), - linear-gradient(90deg, rgba(119, 100, 144, 0.08) 1px, transparent 1px), - linear-gradient(0deg, rgba(108, 170, 167, 0.07) 1px, transparent 1px), - #eceaf0; - background-size: auto, 18px 18px, 18px 18px, auto; - color: var(--fg); -} - -.paper-grain { - position: fixed; - inset: 0; - z-index: -2; - pointer-events: none; - opacity: 0.42; - background: - radial-gradient(circle at 18% 12%, rgba(23, 27, 29, 0.12) 0 1px, transparent 2px), - radial-gradient(circle at 78% 42%, rgba(23, 27, 29, 0.1) 0 1px, transparent 2px), - radial-gradient(circle at 44% 88%, rgba(255, 255, 255, 0.22) 0 1px, transparent 2px); - background-size: 24px 24px, 31px 31px, 19px 19px; -} - -#page-wrapper, -#container { - background: transparent; + linear-gradient(135deg, rgba(119, 100, 144, 0.065), rgba(108, 170, 167, 0.05)), + linear-gradient(90deg, rgba(119, 100, 144, 0.055) 1px, transparent 1px), + linear-gradient(0deg, rgba(108, 170, 167, 0.045) 1px, transparent 1px), + #f1f0ed !important; + background-size: auto, 18px 18px, 18px 18px, auto !important; + color: var(--fg) !important; } -#sidebar { - width: 280px; +body.whiteprint-theme .paper-grain { + opacity: 0.24; background: - linear-gradient(180deg, rgba(249, 248, 252, 0.9), rgba(219, 236, 234, 0.9)), - var(--bg); - border-right: 2px solid var(--border); - box-shadow: 10px 0 0 rgba(23, 27, 29, 0.08); -} - -#header { - margin: 10px; - padding: 12px 0; - border-top: 4px double var(--border); - border-bottom: 4px double var(--border); - text-align: center; -} - -#title, -.mobile-collapsed-title { - background-image: linear-gradient(0deg, #776490, #748f9c, #6caaa7); - background-clip: text; - -webkit-background-clip: text; - color: transparent; - -webkit-text-fill-color: transparent; - font-family: "MainBold", var(--emoji-font), monospace; - font-size: 24px; - letter-spacing: 0; - text-transform: uppercase; -} - -#subtitle, -#footer-text, -#user-greeting, -#content-footer, -#post-date, -#post-date-feed, -#post-description, -#post-username, -.usage-label { - color: var(--subtle); -} - -#hide-sidebar, -#show-sidebar { - color: var(--subtle); -} - -#hide-sidebar:hover, -#show-sidebar:hover { - color: var(--links); -} - -#sidebar > a { - display: block; - margin: 0 10px 8px 10px; + radial-gradient(circle at 18% 12%, rgba(81, 72, 88, 0.16) 0 1px, transparent 2px), + radial-gradient(circle at 78% 42%, rgba(68, 91, 86, 0.13) 0 1px, transparent 2px), + radial-gradient(circle at 44% 88%, rgba(67, 64, 61, 0.12) 0 1px, transparent 2px); + background-size: 24px 24px, 31px 31px, 19px 19px; } -#tab { - padding: 8px 10px; - border: 1px solid var(--border); - border-radius: 0; - background: - linear-gradient(90deg, rgba(119, 100, 144, 0.13), rgba(108, 170, 167, 0.09)), - rgba(247, 248, 244, 0.62); - color: var(--fg); - text-align: left; - box-shadow: 3px 3px 0 rgba(23, 27, 29, 0.18); - text-transform: uppercase; +body.whiteprint-theme #page-wrapper, +body.whiteprint-theme #container { + background: transparent !important; } -#tab::before { - content: ">> "; - color: var(--links); +body.whiteprint-theme #sidebar, +body.whiteprint-theme.mobile-template #sidebar { + background: #e7e5e1 !important; + background-image: none !important; + border-color: var(--border) !important; + box-shadow: 6px 0 0 rgba(78, 68, 58, 0.07) !important; } -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button::before { - content: none !important; +body.whiteprint-theme #header { + background: transparent !important; + background-image: none !important; + border-color: var(--border) !important; } -#tab:hover, -#tab.active { - transform: translate(-2px, -2px); - background: linear-gradient(90deg, #776490, #6caaa7); - color: #f7f8f4; - box-shadow: 5px 5px 0 rgba(108, 170, 167, 0.28); +body.whiteprint-theme #title, +body.whiteprint-theme #title .title-letter, +body.whiteprint-theme .mobile-collapsed-title, +body.whiteprint-theme .mobile-collapsed-title .title-letter { + background-image: linear-gradient(0deg, #85778d, #737f82, #598d7d, #737f82, #85778d); } -.theme-picker-button, -.theme-picker-option { - background: - linear-gradient(90deg, rgba(119, 100, 144, 0.13), rgba(108, 170, 167, 0.09)), - rgba(247, 248, 244, 0.62) !important; +body.whiteprint-theme #content-layout, +body.whiteprint-theme.mobile-template #content-layout, +body.whiteprint-theme.mobile-template #content-main { + background: #f8f7f4 !important; + background-image: none !important; color: var(--fg) !important; border-color: var(--border) !important; + box-shadow: 5px 5px 0 rgba(78, 68, 58, 0.07) !important; } -.theme-picker-button:hover, -.theme-picker-option:hover, -.theme-picker-option.selected { - background: linear-gradient(90deg, #776490, #6caaa7) !important; - color: #f7f8f4 !important; +body.whiteprint-theme :is(#tab, #footer-button, .mobile-nav-button, .mobile-footer-button, #show-sidebar) { + background: #f4f2ee !important; + background-image: none !important; + color: var(--fg) !important; + border-color: var(--border) !important; + box-shadow: none !important; } -.theme-picker-button:hover .theme-picker-title, -.theme-picker-button:hover .theme-picker-description, -.theme-picker-button:hover .theme-picker-chevron, -.theme-picker-option:hover .theme-picker-option-title, -.theme-picker-option:hover .theme-picker-option-description, -.theme-picker-option.selected .theme-picker-option-title, -.theme-picker-option.selected .theme-picker-option-description { - color: #f7f8f4 !important; +body.whiteprint-theme :is(#tab, #footer-button, .mobile-nav-button, .mobile-footer-button, #show-sidebar):hover, +body.whiteprint-theme :is(#tab, #footer-button, .mobile-nav-button, .mobile-footer-button).active { + background: #dcd9d4 !important; + color: #302d29 !important; + border-color: #74677c !important; } -#content { - padding: 34px; +body.whiteprint-theme #tab::before, +body.whiteprint-theme #footer-button::before { + color: inherit !important; } -#content-layout { - max-width: 920px; - min-height: calc(100% - 2px); - padding: 24px 30px; - background: - linear-gradient(145deg, rgba(119, 100, 144, 0.1), rgba(108, 170, 167, 0.08)), - rgba(247, 248, 244, 0.82); - border: 2px solid var(--border); - box-shadow: - 0 0 0 8px rgba(247, 248, 244, 0.58), - 12px 12px 0 rgba(23, 27, 29, 0.16); +body.whiteprint-theme #mini-player, +body.whiteprint-theme #mini-player-tracks, +body.whiteprint-theme #sidebar-footer, +body.whiteprint-theme.mobile-template #mini-player, +body.whiteprint-theme.mobile-template #mini-player-tracks, +body.whiteprint-theme.mobile-template #sidebar-footer { + background: #f4f2ee !important; + background-image: none !important; + color: var(--fg) !important; + border-color: var(--border) !important; + box-shadow: none !important; } -#content-main > *:first-child { - margin-top: 0; +body.whiteprint-theme .mini-track { + background: transparent !important; + background-image: none !important; + color: var(--fg) !important; + border-color: #b7aca5 !important; } -a { - color: var(--links); +body.whiteprint-theme .mini-track:hover, +body.whiteprint-theme .mini-track.active { + background: #e1dfda !important; + color: #31514c !important; + border-color: var(--links) !important; } -#post, -.account-admin-card, -.usage-card, -pre code.hljs { - background: rgba(247, 248, 244, 0.7); - border: 1px solid var(--border); - border-radius: 0; - box-shadow: 4px 4px 0 rgba(23, 27, 29, 0.13); -} - -#post { - padding: 14px 16px; -} - -#post:hover, -.account-admin-card:hover, -.usage-card:hover { - background: rgba(255, 255, 252, 0.9); -} - -#post-content, -#post-title, -.form-card, -.form-card p, -.form-field label, -.checkbox-label span, -.radio-label span, -.color-row, -.color-row span, -.feed-reply-body, -.feed-reply-meta, -.guestbook-post-actions, -#content-main, -#content-main h1, -#content-main h2, -#content-main h3, -#content-main h4, -#content-main p, -#content-main li { - color: var(--fg); -} - -#post-description, -#post-date, -#post-date-feed, -#post-username, -#post-bookmark, -#post-bookmark-feed, -#post-edit-feed, -.form-card p, -.form-field label, -.color-row span, -.feed-reply-meta { - color: var(--subtle); -} - -#search-box, -input, -textarea, -.dropdown, -.text-input, -.bbcode-dropdown, -.bbcode-btn, -#bbcode-textbox, -#bbcode-preview, -#create-account-form input[type="text"], -#admin-account-form input[type="text"], -#admin-account-form textarea { - background: rgba(247, 248, 244, 0.94); - color: var(--fg); - border: 1px solid var(--border); - border-radius: 0; -} - -.dropdown option, -.bbcode-dropdown option { - background: #f7f8f4; - color: var(--fg); -} - -#search-box:hover, -#search-box:focus, -input:hover, -input:focus, -textarea:hover, -textarea:focus, -.dropdown:hover, -.dropdown:focus, -.text-input:hover, -.text-input:focus, -.bbcode-dropdown:hover, -.bbcode-dropdown:focus, -.bbcode-btn:hover, -.bbcode-btn:focus, -#bbcode-textbox:focus { - background: #f7f8f4; - color: var(--fg); - border-color: var(--links); - box-shadow: 3px 3px 0 rgba(23, 27, 29, 0.16); - outline: none; +body.whiteprint-theme :is(#mini-player-title-inner, #mini-player-artist, #footer-text, #user-greeting) { + color: var(--subtle) !important; } -.bbcode-editor, -.bbcode-toolbar, -.form-card, -.grid-item, -#bbcode-preview { - background: rgba(247, 248, 244, 0.78); - color: var(--fg); - border-color: var(--border); +body.whiteprint-theme :is(#mini-player-play, #mini-player-mute, #mini-player-close) { + color: var(--links) !important; } -.checkbox, -.radio { - background: #f7f8f4; - border: 1px solid var(--border); +body.whiteprint-theme #mini-player-close { + background: transparent !important; + border: 0 !important; } -.checkbox:checked { - background-color: var(--links); +body.whiteprint-theme #mini-player-seek, +body.whiteprint-theme #mini-player-volume { + background: #d7d4cf !important; + border-color: #a79b96 !important; } -.radio:checked { - background: radial-gradient(circle, var(--links) 30%, #f7f8f4 34%); +body.whiteprint-theme :is(input, textarea, select, .text-input, .dropdown, .bbcode-dropdown, .theme-picker-button, .theme-picker-option, .site-popup-dialog, .site-popup input, .site-popup textarea) { + background: #faf9f6 !important; + background-image: none !important; + color: var(--fg) !important; + border-color: #9b8f91 !important; + box-shadow: none !important; } -.color-input { - background: #f7f8f4; - border: 1px solid var(--border); - box-shadow: 3px 3px 0 rgba(23, 27, 29, 0.16); +body.whiteprint-theme :is(button, #form-button, #two-buttons, .bbcode-btn, input[type="submit"], input[type="button"]) { + background: #e9e7e2 !important; + background-image: none !important; + color: var(--fg) !important; + border-color: #91858c !important; + box-shadow: none !important; } -.color-input:hover, -.color-input:focus { - border-color: var(--links); - box-shadow: 4px 4px 0 rgba(23, 27, 29, 0.18); +body.whiteprint-theme :is(button, #form-button, #two-buttons, .bbcode-btn, input[type="submit"], input[type="button"]):hover { + background: #d8d5d0 !important; + color: #302d29 !important; } -#search-button, -#form-button, -#lastfm-link-button, -#settings-save, -#color-reset, -.danger-button, -button, -#footer-button { - background: linear-gradient(90deg, #776490, #6caaa7); - color: #f7f8f4; - border: 1px solid var(--border); - border-radius: 0; - box-shadow: 3px 3px 0 rgba(23, 27, 29, 0.2); +body.whiteprint-theme :is(#post, .feed-post, .journal-post, .notification-item, .music-album, .gallery-item, table, details, .settings-section, .account-admin-card) { + background: #e6e3de !important; + background-image: none !important; + color: var(--fg) !important; + border-color: #a99da0 !important; + box-shadow: none !important; } -#search-button:hover, -#form-button:hover, -#settings-save:hover, -#color-reset:hover, -button:hover, -#footer-button:hover { - background: linear-gradient(90deg, #8b73a8, #80bfbc); - color: #f7f8f4; +body.whiteprint-theme :is(#post, .feed-post, .journal-post, .music-album, .gallery-item, .account-admin-card):hover { + background: #dcd8d2 !important; +} + +/* Content surfaces are deliberately a shade deeper than the page paper. This + keeps dense listings legible without bringing back Blackprint's dark wash. */ +body.whiteprint-theme :is( + #post, + .feed-post, + .journal-post, + .form-card, + .grid-item, + .notification-item, + .music-album, + .gallery-item, + .chat-admin-card, + .account-admin-card, + .site-popup-dialog, + .feed-reply-notice, + .bbcode-editor, + #bbcode-preview, + table, + details, + .settings-section +) { + background: #e6e3de !important; + background-image: none !important; + color: var(--fg) !important; + border-color: #978a8e !important; + box-shadow: 3px 3px 0 rgba(82, 72, 65, 0.1) !important; } -#search-button:active, -#form-button:active, -#settings-save:active, -#color-reset:active, -button:active, -#footer-button:active, -.bbcode-btn:active { - background: #f7f8f4; - color: var(--fg); - transform: translate(1px, 1px); - box-shadow: 1px 1px 0 rgba(23, 27, 29, 0.2); +body.whiteprint-theme .image-modal-content { + background: transparent !important; + background-image: none !important; + border: 0 !important; + box-shadow: none !important; } -#settings-save { - background: linear-gradient(90deg, #776490, #6caaa7) !important; - color: #f7f8f4 !important; +body.whiteprint-theme .image-modal-filename { + color: #e8e5df !important; } -#settings-save:hover, -#settings-save:active { - background: linear-gradient(90deg, #8b73a8, #80bfbc) !important; - color: #f7f8f4 !important; +body.whiteprint-theme .image-modal-expand { + color: #b9d1cc !important; + border-color: #b9d1cc !important; } -.danger-button, -.grid-delete-button, -#admin-account-delete-form button { - background: #7b2e3b; - color: #f7f8f4; +body.whiteprint-theme .image-modal-expand:hover { + background: #b9d1cc !important; + color: #293330 !important; } -.form-button-disabled { - background: #cfd5d2; - color: var(--subtle); +body.whiteprint-theme :is( + #post, + .feed-post, + .journal-post, + .grid-item, + .notification-item, + .music-album, + .gallery-item, + .chat-admin-card, + .account-admin-card +):hover { + background: #dcd8d2 !important; + background-image: none !important; } -.form-button-disabled:hover, -.form-button-disabled:active, -.bbcode-btn.disabled:hover, -.bbcode-dropdown.disabled:hover { - background: #cfd5d2; - color: var(--subtle); - box-shadow: none; - transform: none; - cursor: not-allowed; +body.whiteprint-theme .grid-item { + overflow: hidden; } -#mini-player, -#mini-player-tracks, -#sidebar-footer { - margin: 10px; - width: calc(100% - 20px); +body.whiteprint-theme .grid-image { + background: #f7f6f2 !important; + border: 1px solid #b2a5a1; box-sizing: border-box; - background: rgba(247, 248, 244, 0.7); - border: 1px solid var(--border); - border-radius: 0; - box-shadow: 3px 3px 0 rgba(23, 27, 29, 0.16); -} - -#mini-player { - padding: 8px; - gap: 5px; - overflow-x: hidden; } -#mini-player-main { - gap: 7px; -} - -#mini-player-art-wrapper { - width: 30px; - height: 30px; - margin-top: 0; -} - -#mini-player-meta { - min-width: 0; -} - -#mini-player-title-inner { - display: block; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -#mini-player-row { - gap: 6px; +body.whiteprint-theme .grid-caption { + color: var(--fg) !important; } -#mini-player-title-inner, -.mini-track { - color: var(--links); +body.whiteprint-theme .grid-subcaption { + color: var(--subtle) !important; } -#mini-player-play, -#mini-player-controls span { - color: var(--fg); +/* Search is a single, clearly defined control rather than two controls floating + directly on the page background. */ +body.whiteprint-theme #search { + padding: 8px; + background: #e1ded8 !important; + background-image: none !important; + border: 1px solid #978a8e; + box-sizing: border-box; } -#mini-player-controls span:hover, -#mini-player-play:hover { - color: var(--links); +body.whiteprint-theme #search-box, +body.whiteprint-theme :is( + input[type="text"], + input[type="search"], + input[type="email"], + input[type="password"], + input[type="url"], + input[type="number"], + textarea, + select, + .text-input, + .dropdown, + .bbcode-dropdown, + #bbcode-textbox +) { + background: #fbfaf7 !important; + background-image: none !important; + color: var(--fg) !important; + border-color: #8f8187 !important; + box-shadow: inset 0 0 0 1px rgba(82, 72, 65, 0.05) !important; +} + +body.whiteprint-theme #search-box::placeholder, +body.whiteprint-theme :is(input, textarea)::placeholder { + color: #887d77 !important; + opacity: 1; +} + +body.whiteprint-theme #search-box:hover, +body.whiteprint-theme #search-box:focus, +body.whiteprint-theme :is( + input[type="text"], + input[type="search"], + input[type="email"], + input[type="password"], + input[type="url"], + input[type="number"], + textarea, + select, + .text-input, + .dropdown, + .bbcode-dropdown, + #bbcode-textbox +):hover, +body.whiteprint-theme :is( + input[type="text"], + input[type="search"], + input[type="email"], + input[type="password"], + input[type="url"], + input[type="number"], + textarea, + select, + .text-input, + .dropdown, + .bbcode-dropdown, + #bbcode-textbox +):focus { + background: #fdfcf9 !important; + border-color: var(--links) !important; + box-shadow: 0 0 0 2px rgba(82, 122, 115, 0.18) !important; + outline: none; } -#mini-player-seek, -#mini-player-volume { - background: #f7f8f4; - border: 1px solid var(--border); - accent-color: var(--links); +body.whiteprint-theme :is(select, .dropdown, .bbcode-dropdown) option { + background: #fbfaf7 !important; + color: var(--fg) !important; } -#sidebar-footer { - padding: 14px 8px 10px 8px; +body.whiteprint-theme #search-button { + background: #c9d2c8 !important; + background-image: none !important; + color: #343a35 !important; + border-color: #7f8d84 !important; + box-shadow: none !important; } -#footer-text { - display: block; - margin-bottom: 10px; - text-align: center; +body.whiteprint-theme #search-button:hover { + background: #b9c7bc !important; + color: #28302b !important; } -#footer-buttons { - gap: 4px; +body.whiteprint-theme #search-button:active { + background: #aebeb2 !important; } -#footer-button { - display: flex; - min-height: 24px; - align-items: center; - justify-content: center; - padding: 4px 6px; +/* ASCII art and resource readouts are plain ink on paper. Never apply the + general code-block surface to these preformatted displays. */ +body.whiteprint-theme #homepage-hero-ascii, +body.whiteprint-theme #homepage-hero-ascii > pre, +body.whiteprint-theme #ascii, +body.whiteprint-theme #ascii-time, +body.whiteprint-theme #ascii-time-label, +body.whiteprint-theme #usage-grid, +body.whiteprint-theme #usage-grid .usage-card, +body.whiteprint-theme .usage-ascii, +body.whiteprint-theme .usage-label { + background: transparent !important; + background-image: none !important; + border: 0 !important; + box-shadow: none !important; + outline: 0 !important; } -#footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { - background: var(--links) !important; - color: #f7f8f4 !important; - border-color: var(--border) !important; +body.whiteprint-theme #usage-grid .usage-card:hover { + background: transparent !important; } -#footer-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover { - background: var(--links) !important; - color: #f7f8f4 !important; - border-color: var(--border) !important; - box-shadow: 3px 3px 0 rgba(23, 27, 29, 0.16) !important; +body.whiteprint-theme pre, +body.whiteprint-theme code, +body.whiteprint-theme blockquote { + background: transparent !important; + background-image: none !important; + color: inherit; + box-shadow: none !important; } -.tooltip { - background: #f7f8f4; - color: var(--fg); - border: 1px solid var(--border); - border-radius: 0; - box-shadow: - 4px 4px 0 rgba(23, 27, 29, 0.2), - inset 0 0 0 2px rgba(31, 95, 120, 0.08); +body.whiteprint-theme :is(.post-content, .feed-markdown, .mdpaste-markdown) pre, +body.whiteprint-theme pre code.hljs, +body.whiteprint-theme code.hljs { + background: #e8e5df !important; + color: #393630 !important; + border-color: #aa9ea0 !important; } -#error { - color: #7b2e3b; +body.whiteprint-theme a { + color: var(--links); } -#spa-loading { - background: #f7f8f4; - color: var(--fg); - border: 1px solid var(--border); - box-shadow: 4px 4px 0 rgba(23, 27, 29, 0.16); +body.whiteprint-theme :is(.site-popup-backdrop, .mobile-menu-backdrop) { + background: rgba(67, 58, 50, 0.28) !important; + background-image: none !important; } -body.mobile-template { - background: - linear-gradient(135deg, rgba(119, 100, 144, 0.16), rgba(108, 170, 167, 0.12)), - linear-gradient(90deg, rgba(119, 100, 144, 0.08) 1px, transparent 1px), - linear-gradient(0deg, rgba(108, 170, 167, 0.07) 1px, transparent 1px), - #eceaf0 !important; +body.whiteprint-theme :is(.site-notification-toast, .tooltip, .chat-context-menu) { + background: #f8f7f4 !important; + background-image: none !important; color: var(--fg) !important; -} - -body.mobile-template .mobile-collapsed-header, -body.mobile-template #sidebar, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks, -body.mobile-template #sidebar-footer, -body.mobile-template #content-layout, -body.mobile-template #post, -body.mobile-template .usage-card { - background: rgba(247, 248, 244, 0.88) !important; - border-color: var(--border) !important; - border-radius: 0 !important; - box-shadow: 4px 4px 0 rgba(23, 27, 29, 0.14) !important; -} - -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - background: linear-gradient(90deg, #776490, #6caaa7) !important; - color: #f7f8f4 !important; border-color: var(--border) !important; + box-shadow: none !important; } -body.mobile-template #show-sidebar:hover, -body.mobile-template .mobile-collapsed-header #show-sidebar:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - background: linear-gradient(90deg, #8b73a8, #80bfbc) !important; - color: #f7f8f4 !important; - border-color: var(--border) !important; +body.whiteprint-theme .chat-view { + --chat-own-bg: #5f837c; + --chat-own-fg: #fbfaf7; } -body.mobile-template input, -body.mobile-template textarea, -body.mobile-template .dropdown, -body.mobile-template .text-input, -body.mobile-template .bbcode-dropdown, -body.mobile-template .bbcode-btn, -body.mobile-template #bbcode-textbox, -body.mobile-template #bbcode-preview, -body.mobile-template .checkbox, -body.mobile-template .radio, -body.mobile-template .color-input { - background: #f7f8f4 !important; +body.whiteprint-theme :is(.chat-message:not(.chat-message-own), .chat-reply-reference, .chat-reply-compose) { + background: #e9e7e2 !important; + background-image: none !important; color: var(--fg) !important; border-color: var(--border) !important; } -body.mobile-template .checkbox:checked { - background-color: var(--links) !important; -} - -body.mobile-template .radio:checked { - background: radial-gradient(circle, var(--links) 30%, #f7f8f4 34%) !important; -} - -body.mobile-template #content { - padding: 12px !important; -} - -body.mobile-template #content-layout { - padding: 14px !important; - background: rgba(247, 248, 244, 0.88) !important; +body.whiteprint-theme.mobile-template :is(.mobile-collapsed-header, #show-sidebar) { + background: #f4f2ee !important; + background-image: none !important; + color: var(--fg) !important; border-color: var(--border) !important; } -body.mobile-template #content-main { - padding: 0 !important; - background: transparent !important; +body.whiteprint-theme.mobile-template #content { color: var(--fg) !important; } -body.mobile-template #sidebar { - width: 100% !important; +/* Complete mobile shell coverage. */ +body.whiteprint-theme.mobile-template #sidebar { + width: calc(100% - 16px) !important; min-width: 0 !important; max-width: none !important; - height: auto !important; - min-height: 0 !important; - box-sizing: border-box !important; -} - -body.mobile-template .mobile-nav-grid, -body.mobile-template #footer-buttons { - width: auto !important; + padding-bottom: 10px !important; box-sizing: border-box !important; + background: #e7e5e1 !important; + border: 1px solid #85778d !important; + border-radius: 8px !important; } -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { - min-height: 34px !important; - box-sizing: border-box !important; +body.whiteprint-theme.mobile-template .mobile-nav-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)) !important; + gap: 7px !important; + padding: 8px 10px 0 !important; } -#mini-player, -#mini-player-tracks, -body.mobile-template #mini-player, -body.mobile-template #mini-player-tracks { - background: rgba(247, 248, 244, 0.92) !important; +body.whiteprint-theme.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button { + min-width: 0 !important; + min-height: 38px !important; + background: #f4f2ee !important; color: var(--fg) !important; - border-color: var(--border) !important; - box-shadow: 4px 4px 0 rgba(23, 27, 29, 0.14) !important; -} - -#mini-player-main, -#mini-player-meta, -#mini-player-title, -#mini-player-row, -#mini-player-controls, -#mini-player-volume-wrapper { - color: var(--fg); -} - -#mini-player-art-wrapper, -#mini-player-art { - background: #f7f8f4 !important; - border-color: var(--border) !important; -} - -#mini-player-download, -#mini-player-play, -#mini-player-controls span { - color: var(--links) !important; -} - -#mini-player-download:hover, -#mini-player-play:hover, -#mini-player-controls span:hover { - color: #f7f8f4 !important; - background: var(--links) !important; -} - -#mini-player-title-inner, -.mini-track { - color: var(--links) !important; -} - -.mini-track { - background: transparent !important; - border-color: transparent !important; + border: 1px solid #95888f !important; + border-radius: 5px !important; } -.mini-track:hover, -.mini-track.active { - background: var(--links) !important; - color: #f7f8f4 !important; - border-color: var(--border) !important; -} - -#mini-player-seek, -#mini-player-volume { - accent-color: var(--links) !important; - background: #f7f8f4 !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-webkit-slider-thumb, -#mini-player-volume::-webkit-slider-thumb { - background: var(--links) !important; - border-color: var(--border) !important; -} - -#mini-player-seek::-moz-range-track, -#mini-player-volume::-moz-range-track { - background: #f7f8f4 !important; - border-color: var(--border) !important; +body.whiteprint-theme.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, +body.whiteprint-theme.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active { + background: #dcd9d4 !important; + color: #302d29 !important; + border-color: #74677c !important; } -#mini-player-seek::-moz-range-thumb, -#mini-player-volume::-moz-range-thumb { - background: var(--links) !important; - border-color: var(--border) !important; -} - -#tab:hover, -#tab.active, -#tab:hover::before, -#tab.active::before, -#footer-button:hover, -#footer-button.active, -body.mobile-template #show-sidebar, -body.mobile-template .mobile-collapsed-header #show-sidebar, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button:hover, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active, -body.mobile-template .mobile-nav-grid a.mobile-nav-link > #tab.mobile-nav-button.active:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active, -body.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active:hover { - color: #f7f8f4 !important; -} - -#post-edit-feed, -.guestbook-edit-btn, -.guestbook-delete-btn, -#post-edit-feed:hover, -.guestbook-edit-btn:hover, -.guestbook-delete-btn:hover, -#post-edit-feed:active, -.guestbook-edit-btn:active, -.guestbook-delete-btn:active { +body.whiteprint-theme.mobile-template #content { padding: 10px !important; } +body.whiteprint-theme.mobile-template #content-layout { + padding: 0 !important; background: transparent !important; border: 0 !important; box-shadow: none !important; - transform: none !important; - padding: 0 !important; - color: var(--subtle) !important; -} - -.guestbook-edit-btn, -.guestbook-delete-btn { - width: 16px !important; - height: 16px !important; } - -#mini-player-title { - overflow: hidden !important; - width: 100% !important; +body.whiteprint-theme.mobile-template #content-main { min-width: 0 !important; + padding: 16px 14px !important; + background: #f8f7f4 !important; + border: 1px solid #9b8f91 !important; + border-radius: 7px !important; + box-shadow: 3px 3px 0 rgba(78,68,58,.07) !important; + overflow-x: hidden !important; } -#mini-player-title-inner.scrolling { - display: inline-block !important; - max-width: none !important; - width: max-content !important; - overflow: visible !important; - text-overflow: clip !important; +body.whiteprint-theme.mobile-template #sidebar :is(#mini-player, #mini-player-tracks, #sidebar-footer) { + margin: 8px 10px 0 !important; + width: auto !important; + background: #f4f2ee !important; + color: var(--fg) !important; + border: 1px solid #95888f !important; + border-radius: 6px !important; +} +body.whiteprint-theme.mobile-template #sidebar #mini-player { padding: 9px !important; } +body.whiteprint-theme.mobile-template #sidebar #mini-player-title-inner { color: var(--fg) !important; } +body.whiteprint-theme.mobile-template #sidebar #mini-player-artist { color: var(--subtle) !important; } +body.whiteprint-theme.mobile-template #sidebar #mini-player-close { + background: #f4f2ee !important; + color: var(--subtle) !important; + border-color: #95888f !important; } - -/* theme ascii/resource cleanup */ -#usage-grid .usage-card, -body.mobile-template #usage-grid .usage-card { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - outline: 0 !important; - border-radius: 0 !important; - padding: 4px 0 !important; - transform: none !important; +body.whiteprint-theme.mobile-template :is(#post, .feed-post, .journal-post, .notification-item, .music-album, .gallery-item, .form-card, .grid-item, .chat-admin-card, .account-admin-card, .settings-section, details, table) { + background: #e6e3de !important; + background-image: none !important; + color: var(--fg) !important; + border-color: #978a8e !important; + box-shadow: 2px 2px 0 rgba(82,72,65,.08) !important; } - -#usage-grid .usage-card:hover, -body.mobile-template #usage-grid .usage-card:hover { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - transform: none !important; +body.whiteprint-theme.mobile-template :is(#post, .feed-post, .journal-post, .grid-item, .music-album, .gallery-item, .account-admin-card):hover { + background: #dcd8d2 !important; } - -.usage-ascii { - color: var(--resource-ascii) !important; - text-shadow: none !important; - filter: none !important; +body.whiteprint-theme.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button { + background: #f4f2ee !important; + background-image: none !important; + color: var(--fg) !important; + border: 1px solid #95888f !important; + border-radius: 5px !important; } - -.usage-label { - color: var(--resource-label) !important; - text-shadow: none !important; +body.whiteprint-theme.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button:hover, +body.whiteprint-theme.mobile-template #footer-buttons > a.mobile-footer-link > #footer-button.mobile-footer-button.active { + background: #dcd9d4 !important; + color: #302d29 !important; + border-color: #74677c !important; } +body.whiteprint-theme.mobile-template :is(#post-content, #post-title, #post-header, .grid-caption, .form-card, .settings-section) { color: var(--fg) !important; } +body.whiteprint-theme.mobile-template :is(#post-description, #post-date, #post-date-feed, #post-username, .grid-subcaption) { color: var(--subtle) !important; } -#ascii-time { - color: var(--time-ascii) !important; - text-shadow: none !important; +body.whiteprint-theme.mobile-template :is(input, textarea, select, .text-input, .dropdown, .bbcode-dropdown, #bbcode-textbox) { + max-width: 100% !important; + box-sizing: border-box !important; + background: #fbfaf7 !important; + color: var(--fg) !important; } +body.whiteprint-theme.mobile-template :is(table, pre, code, img, video, iframe) { max-width: 100% !important; } +body.whiteprint-theme.mobile-template :is(pre, table) { overflow-x: auto !important; } -#ascii-time-label { - color: var(--time-label) !important; +html.access-high-contrast body.whiteprint-theme { + --bg: #fbfaf7 !important; + --fg: #000000 !important; + --border: #000000 !important; + --subtle: #333333 !important; + --links: #004f47 !important; } -body.whiteprint-theme .content-pagination .guestbook-page-btn { border-radius: 2px; } diff --git a/themes/lib/whiteprint/whiteprint.html b/themes/lib/whiteprint/whiteprint.html index f9351ce..8398c87 100644 --- a/themes/lib/whiteprint/whiteprint.html +++ b/themes/lib/whiteprint/whiteprint.html @@ -5,15 +5,18 @@ {title} | fridge.dev + + - + + - - - - - + + + + + @@ -22,7 +25,7 @@ + + + + + + + + diff --git a/themes/littlehelps.json b/themes/littlehelps.json deleted file mode 100644 index 4babe71..0000000 --- a/themes/littlehelps.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "little helps", - "description": "clean supermarket aisles, iconic blue controls, and local modern fonts", - "thumbnail": "thumbnails/littlehelps.svg", - "html": "littlehelps/littlehelps.html", - "css": "littlehelps/littlehelps.css" -} diff --git a/themes/modern-sleek.json b/themes/modern-sleek.json deleted file mode 100644 index 91729f4..0000000 --- a/themes/modern-sleek.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "modern sleek", - "description": "windows 10 dark-mode panels with cool acrylic blue accents", - "thumbnail": "thumbnails/modern-sleek.svg", - "html": "modern-sleek/modern-sleek.html", - "css": "modern-sleek/modern-sleek.css" -} diff --git a/themes/occult.json b/themes/occult.json deleted file mode 100644 index 9f11e53..0000000 --- a/themes/occult.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "occult", - "description": "sigil-lit dark panels with purple and candle-gold accents", - "thumbnail": "thumbnails/occult.svg", - "html": "occult/occult.html", - "css": "occult/occult.css" -} diff --git a/themes/thinkpad.json b/themes/thinkpad.json deleted file mode 100644 index ab3a3bc..0000000 --- a/themes/thinkpad.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "thinkpad", - "description": "matte black laptop shell with red trackpoint accents and panel lights", - "thumbnail": "thumbnails/thinkpad.svg", - "html": "thinkpad/thinkpad.html", - "css": "thinkpad/thinkpad.css" -} diff --git a/themes/thumbnails/aero.svg b/themes/thumbnails/aero.svg index a97d264..ed621d4 100644 --- a/themes/thumbnails/aero.svg +++ b/themes/thumbnails/aero.svg @@ -1,34 +1,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/themes/thumbnails/arcade.svg b/themes/thumbnails/arcade.svg deleted file mode 100644 index 2953a3e..0000000 --- a/themes/thumbnails/arcade.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/themes/thumbnails/base16.svg b/themes/thumbnails/base16.svg new file mode 100644 index 0000000..8342224 --- /dev/null +++ b/themes/thumbnails/base16.svg @@ -0,0 +1 @@ + diff --git a/themes/thumbnails/blackprint.svg b/themes/thumbnails/blackprint.svg index 4c9bfa5..94db4d1 100644 --- a/themes/thumbnails/blackprint.svg +++ b/themes/thumbnails/blackprint.svg @@ -1,7 +1,7 @@ + - - + diff --git a/themes/thumbnails/bubblegum.svg b/themes/thumbnails/bubblegum.svg deleted file mode 100644 index cc51cbf..0000000 --- a/themes/thumbnails/bubblegum.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/themes/thumbnails/catpuccin.svg b/themes/thumbnails/catpuccin.svg new file mode 100644 index 0000000..8fea8c3 --- /dev/null +++ b/themes/thumbnails/catpuccin.svg @@ -0,0 +1 @@ + diff --git a/themes/thumbnails/classic.svg b/themes/thumbnails/classic.svg index de6ac98..9602b18 100644 --- a/themes/thumbnails/classic.svg +++ b/themes/thumbnails/classic.svg @@ -1,7 +1,7 @@ - + - - + + diff --git a/themes/thumbnails/cottagecore.svg b/themes/thumbnails/cottagecore.svg deleted file mode 100644 index 1ea17d6..0000000 --- a/themes/thumbnails/cottagecore.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/themes/thumbnails/crt.svg b/themes/thumbnails/crt.svg deleted file mode 100644 index 3251db2..0000000 --- a/themes/thumbnails/crt.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/themes/thumbnails/gothic.svg b/themes/thumbnails/gothic.svg deleted file mode 100644 index ec72c40..0000000 --- a/themes/thumbnails/gothic.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/themes/thumbnails/littlehelps.svg b/themes/thumbnails/littlehelps.svg deleted file mode 100644 index f7dbe4d..0000000 --- a/themes/thumbnails/littlehelps.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - fridge.dev - - - - - - feed - journal - music - tools - - - - - - - - save - diff --git a/themes/thumbnails/modern-sleek.svg b/themes/thumbnails/modern-sleek.svg deleted file mode 100644 index 8c9a507..0000000 --- a/themes/thumbnails/modern-sleek.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/themes/thumbnails/occult.svg b/themes/thumbnails/occult.svg deleted file mode 100644 index b3f2067..0000000 --- a/themes/thumbnails/occult.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/themes/thumbnails/thinkpad.svg b/themes/thumbnails/thinkpad.svg deleted file mode 100644 index f0615d6..0000000 --- a/themes/thumbnails/thinkpad.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/themes/thumbnails/whiteprint.svg b/themes/thumbnails/whiteprint.svg index 5633eff..32b35dc 100644 --- a/themes/thumbnails/whiteprint.svg +++ b/themes/thumbnails/whiteprint.svg @@ -1,9 +1,9 @@ - - - - - - - + + + + + + + diff --git a/themes/whiteprint.json b/themes/whiteprint.json index af678a1..e4245f1 100644 --- a/themes/whiteprint.json +++ b/themes/whiteprint.json @@ -1,7 +1,8 @@ { "name": "whiteprint", - "description": "light print layout with purple-to-teal ink accents", + "description": "blackprint's paper-and-ink layout in a soft muted light palette", "thumbnail": "thumbnails/whiteprint.svg", "html": "whiteprint/whiteprint.html", - "css": "whiteprint/whiteprint.css" + "css": "whiteprint/whiteprint.css", + "base": "blackprint" } diff --git a/wiki/API-Reference.md b/wiki/API-Reference.md index 23c9422..152eac7 100644 --- a/wiki/API-Reference.md +++ b/wiki/API-Reference.md @@ -15,7 +15,7 @@ All API routes live under `/api/*` and are handled by PHP. - Requires logged-in user - Returns current settings from `data/accounts/accounts.json` -- Currently exposes `theme`, `glowIntensity`, `colors`, `onekoEnabled`, `fruityDanceEnabled`, `fruityDanceSpritesheet`, `fruityDanceLoop`, `fruityDanceSpeed`, `fruityDanceReflection`, `reduceMotion`, `discordNotificationsEnabled`, `titleAnimation`, `titleAnimationAlways`, and `titleAnimationDesync`; `colors` is honored by `classic` for the full palette and by `ambercrt`/`CRT` for the single `links` phosphor color +- Currently exposes `theme`, `glowIntensity`, `colors`, `onekoEnabled`, `fruityDanceEnabled`, `fruityDanceSpritesheet`, `fruityDanceLoop`, `fruityDanceSpeed`, `fruityDanceReflection`, `reduceMotion`, `discordNotificationsEnabled`, `titleAnimation`, `titleAnimationAlways`, and `titleAnimationDesync`; `colors` is honored by `classic` for its full palette - Toast-only settings fields are documented on [Toast](Toast#personality-sources) `POST` @@ -29,7 +29,7 @@ All API routes live under `/api/*` and are handled by PHP. - Can set the Fruity Dance enabled state, a directory-backed spritesheet, one of its metadata-defined animation rows, speed from 25–200%, and reflection strength from 0–100%; GET also returns `fruityDanceAnimations`, parsed from the selected sheet's same-basename `.txt` file, and the settings UI sends changes automatically - Can set `discordNotificationsEnabled` to opt a linked account in or out of automated Toast feed-notification DMs - Syncs the `theme_pref` cookie so anonymous and first-load rendering can pick the active theme -- Validates color fields as `#RRGGBB`; the settings UI sends the full palette for `classic` and only `links` for `CRT` +- Validates Classic color fields as `#RRGGBB` - Admin users can also toggle maintenance mode through the settings flow - Toast-only personality persistence is documented on [Toast](Toast#personality-sources) @@ -48,8 +48,9 @@ All API routes live under `/api/*` and are handled by PHP. `GET` - Public route -- Returns selectable themes, with `default` displayed as `blackprint` before discovered themes +- Returns Blackprint as `default`, then Whiteprint and Classic, followed by any other discovered selectable themes - Each valid theme must include `name`, `description`, `thumbnail`, `html`, and `css` +- Theme metadata may set `base` to `blackprint` to inherit Blackprint's body layer - Theme `html` and `css` paths are resolved from `/themes/lib`; picker thumbnails are resolved from `/themes` ### `/api/bookmark` diff --git a/wiki/Data-Contracts.md b/wiki/Data-Contracts.md index 65356a4..eebd846 100644 --- a/wiki/Data-Contracts.md +++ b/wiki/Data-Contracts.md @@ -66,8 +66,8 @@ Notes: - Extra unknown keys can exist and are preserved by `account/admin/edit` - Bookmarks are the current source of truth for logged-in users - Bookmark ids currently use raw feed ids and `journal:{id}`; legacy `newsletter:{id}` values can exist but are ignored -- `theme: default` is Blackprint and uses the base template plus `/style.css`; `theme: classic` enables saved `colors` for `bg`/`fg`/`border`/`subtle`/`links`; `theme: ambercrt` is shown as `CRT` and uses only saved `colors.links` as its main phosphor color; any other valid value refers to a `/themes/{theme-id}.json` file with `name`, `description`, `thumbnail`, `html`, and `css` -- Legacy `blackprint` normalizes to `default`, `custom` normalizes to `classic`, `newsprint` normalizes to `whiteprint`, `crt` normalizes to `ambercrt`, and removed `liminal`/`syswave` preferences normalize to `default` +- `theme: default` is Blackprint and uses the base template plus `/style.css`; `theme: classic` enables `colors` for `bg`/`fg`/`border`/`subtle`/`links`, and selecting Classic in the settings picker overwrites those five values with Classic's defaults before persistence; any other valid value refers to a discovered `/themes/{theme-id}.json` package with `name`, `description`, `thumbnail`, `html`, and `css` +- The aliases `blackprint` and `custom` normalize to `default` and `classic` respectively; preferences for theme packages that no longer exist fall back to Blackprint during rendering - Text glow is stored in `glowIntensity`; the settings UI writes `none` for off and `medium` for on, while legacy `low`/`high` values are treated as enabled medium glow when saved again - Title motion is stored in `titleAnimation` (`wobble`, `bounce`, `rubberhose`, `bubble`, `slot-machine`, `moonwalk`, or `heartbeat`), `titleAnimationAlways` (boolean), and `titleAnimationDesync` (boolean, default `true`); removed `pinball` values migrate to `wobble`; legacy `orbit`, `domino`, and `lava-lamp` values migrate to `bubble`; removed `tidal-wave`, `accordion`, and `typewriter` values migrate to `slot-machine`, while `helicopter`, `haunted`, and `juggle` migrate to `moonwalk`; guests keep the same values in local storage - Accessibility toggles are stored as account booleans such as `reduceMotion`; logged-out browsers keep the same preferences in localStorage. Debug mode applies immediately when its checkbox changes and, for logged-in users, posts its account value independently of the general “save changes” action; changing that checkbox alone therefore does not mark the settings form dirty @@ -148,8 +148,9 @@ Notes: - The metadata filename is the saved theme id, for example `/themes/cool.json` becomes `cool` - `name` is the label shown in `/settings` - `description` is the short supporting text shown under the theme name in the picker +- optional `base` may be `blackprint`; unsupported base values invalidate the package - `thumbnail` is a 4:3 preview path relative to `/themes`, usually `thumbnails/{theme-id}.svg` -- `html` and `css` must be relative paths in `/themes/lib`, for example `aero/aero.html` and `aero/aero.css` +- `html` and `css` must be relative paths in `/themes/lib`, for example `example/example.html` and `example/example.css` - Theme asset paths cannot be absolute, contain `..`, or use characters outside letters, numbers, `.`, `_`, `-`, and `/` - Desktop rendering uses both themed HTML and CSS - Mobile rendering keeps `template_mobile.html` and only swaps the CSS diff --git a/wiki/Frontend-and-Templates.md b/wiki/Frontend-and-Templates.md index 6c938d7..b0f42a0 100644 --- a/wiki/Frontend-and-Templates.md +++ b/wiki/Frontend-and-Templates.md @@ -114,9 +114,23 @@ Turn off Cloudflare's separate `preserve query string` toggle for both rules, be Submitted site search forms use the shared SPA content loader so results replace `#content` without refreshing the surrounding page or interrupting sidebar audio. A buttonless in-site “searching” popup remains visible until that content swap completes. Instant client-side filters, such as log and emoji filtering, remain immediate and do not display the network-wait popup. -Blackprint is the base/default theme in `/style.css` and `template.html`. Its default-only CSS is scoped to `body.blackprint-theme`; keep it scoped so selectable themes are not forced to override Blackprint details just to look normal. Blackprint uses a dark charcoal grey base with a #776490-to-#6caaa7 accent range, and Blackprint plus whiteprint intentionally keep clipped title gradients across that purple-to-teal range. Sidebar titles are always rendered lowercase; Classic alone retains the “grab a snack from the” subtitle. Non-classic desktop theme titles use the local `Streetbomber` face and show `fridge` without the `.dev` suffix. The title gradient animates continuously unless reduced motion is active. `/settings` exposes wobble, bounce, rubberhose, bubble, slot machine, moonwalk, and heartbeat through a theme-picker-width in-site control whose button and menu options contain animated previews that immediately follow the desync setting; there is no separate preview card. It also provides optional always-playing mode and default-on per-character desynchronization. Desync uses positive staggered starts rather than negative mid-cycle offsets, and every selectable animation begins from the neutral letter pose so its first movement eases in instead of snapping. When Reduce Motion is enabled, the entire title-animation panel is disabled and explains that the feature cannot be configured; previews and runtime-driven rolls stop until motion is re-enabled. Preferences apply locally for guests, sync to the `titleAnimation`, `titleAnimationAlways`, and `titleAnimationDesync` account fields for logged-in users, and respect reduced-motion preferences. When hover or always-playing ends, the runtime snapshots the last rendered letter transforms and transitions them back to their neutral state instead of snapping. Slot Machine is runtime-driven and caps itself at seven active reels, hiding non-reel suffix characters such as Classic’s `.dev` while rolling: six reels normally cycle random glyphs and lock onto `fridge`; one mutually exclusive 1-in-20 result lands on `fridg3`, pauses, then rerolls only the sixth reel until it locks onto `e`, while another 1-in-20 result uses a seventh reel to land on `freezer`, pauses, then rerolls all seven characters before the first six lock back onto `fridge` and the extra reel disappears. The runtime freezes the title’s measured inline and block size throughout each roll so variable-width glyphs and the temporary seventh reel cannot resize the sidebar header. Bubble floats letters upward until they pop, respawns them above the viewport, then rapidly drops and squash-settles them back into the title; picker previews use a shorter local fall distance. Bubble desync is phase-aware: letters start together and rise at different speeds, synchronize at the pop checkpoint, then cascade through the fall and impact phases. `#title` includes balanced animation-safe padding and negative margins so transformed letters remain inside its gradient paint area without changing header spacing; retain or extend that safe area when adding animations with greater travel. Selectable themes are declared by `/themes/*.json`, include picker descriptions and 4:3 thumbnails from `/themes/thumbnails`, and assets live in `/themes/lib`; `classic` is the old default look and exposes full color picker overrides, while `CRT` exposes a single main phosphor color and derives the rest of its palette in CSS. `aero` keeps Blackprint's sidebar/content structure but renders it through blue glass panels, `thinkpad` uses late-2000s/early-2010s matte laptop styling with red trackpoint accents and a compact desktop sidebar sized for 1366x768-era laptop screens, `occult` layers runes and sigil geometry over its ritual green/brass layout, `gothic` uses cathedral-inspired rose-window, spire, cross, and candle motifs, `modern-sleek` uses a Windows 10 dark-mode style, and `little helps` uses a Tesco-inspired blue/red top-header layout with the local Tesco Modern fonts from `/themes/lib/littlehelps`, ITC New Text for the lowercase `fridge` title, and preserved ASCII font blocks. `little helps` also includes a desktop header search form that submits `q` to `/feed` plus Tesco-style mobile header, nav, footer, mini-player, and feed search styling. Desktop theme selection can use themed HTML and CSS; mobile view keeps the mobile template and appends theme CSS after mobile-specific inline styles. Default mobile rendering receives `blackprint-theme` from `lib/render.php`. +Blackprint is the built-in default theme in `/style.css`, `/template.html`, and `/template_mobile.html`; it is not a JSON theme package. Its default-only layer is scoped to `body.blackprint-theme` and uses a dark charcoal base with a #776490-to-#6caaa7 accent range. Classic is currently the only packaged selectable theme, lives in `/themes/classic.json` and `/themes/lib/classic`, retains the original “grab a snack from the” subtitle and `.dev` suffix, and exposes full `bg`/`fg`/`border`/`subtle`/`links` color controls. Other theme packages are discovered from `/themes/*.json`, use 4:3 thumbnails under `/themes/thumbnails`, and load assets from `/themes/lib`; desktop may use their HTML and CSS while mobile always keeps the shared mobile template and appends only theme CSS. The title is lowercase and uses per-character spans with a clipped purple-to-teal gradient. `/settings` exposes wobble, bounce, rubberhose, bubble, slot machine, moonwalk, and heartbeat, plus optional always-playing and default-on character desynchronization. Reduce Motion disables previews and runtime title motion. Slot Machine and Bubble include runtime behavior that depends on the existing title spans, measured safe area, and overflow rules, so themes must preserve those contracts. The complete current theme-authoring contract and component inventory is maintained in `/themes/AGENTS.md` from the canonical cascade in `/style.css`. -The sidebar show/hide state is animated through `body.sidebar-is-hidden`, which `main.js` toggles while preserving the `sidebarVisible` localStorage preference. Classic retains the desktop collapse control; other desktop themes omit it. Blackprint and whiteprint keep their desktop `>>` menu prefixes, but mobile nav buttons suppress those prefixes for a cleaner grid. +Classic's mobile menu is pinned with explicit 8px left and right insets, capped to the viewport width, and uses border-box sizing and internal vertical scrolling. It has a four-sided border plus an inset right-edge rule so the overlay scrollbar cannot obscure the panel boundary, and keeps the ten primary navigation items in two columns even below 420px. Its header, navigation, player, and footer use compact consistent insets. Classic's desktop template uses the current shared mini-player structure: title and artist occupy separate metadata rows, play/seek/mute share the playback row, the volume control expands in place, and only close remains pinned at the top-right. Selecting Classic in the settings theme picker immediately resets all five customizable colors to Classic's defaults and persists those defaults locally and, for logged-in users, to the account. + +Whiteprint is a packaged light counterpart to Blackprint. Its metadata declares `base: blackprint`, so the renderer applies both `whiteprint-theme` and `blackprint-theme` and it automatically shares Blackprint's desktop/mobile layout, title behavior, navigation, player, controls, and component coverage. Its appended stylesheet uses soft neutral off-whites, charcoal ink, dusty purple, and restrained sage accents. The page retains a low-contrast light version of Blackprint's purple-to-sage wash, 18px line grid, and paper-grain pattern while cards and controls remain flat, contrasting muted surfaces; ASCII/resource readouts and image-modal content wrappers stay transparent. + +Aero is a packaged Frutiger Aero interpretation of the Blackprint layout. It uses the bundled Tahoma face and a softly blurred, cover-scaled `background.jpg` beneath translucent XP/Windows 7-inspired glass panels, muted blue-grey and sage controls, and rounded content cards. Its BBCode/Markdown editor uses compact blue-glass formatting buttons, independently scrollable formatting controls, and a bright unified writing/preview surface rather than the general green submit-button skin. Its persistent music player switches to a compact Winamp-inspired dark beveled chassis with a soft phosphor display, metallic transport controls, slate-blue range tracks, and a matching playlist while retaining the shared player hooks. Aero supplies explicit light checked controls: checkboxes show a white tick on sage and radio buttons show an inset sage dot. The shared title and Font Awesome faces are left untouched, IBM VGA remains reserved for shared ASCII displays, and the monospace face remains reserved for code. Aero menu labels are lowercase and omit Blackprint's `>>` prefix. Its mobile layer preserves the shared safe menu gutter and restyles the complete shell without requiring separate mobile markup. + +Whiteprint and Aero each include an explicit mobile coverage block after their desktop component rules. These blocks match the shared mobile template's high-specificity shell, post-card, footer-button, and player selectors, preserve the 8px menu gutter, retain two navigation columns at narrow widths, replace inline dark content surfaces, constrain wide media/forms/tables, and apply each theme's player, footer, active-navigation, editor, and form treatment inside the expanded menu. + +Base16 is a packaged flat interpretation of the Blackprint layout using the complete Base16 Default Dark `base00`–`base0F` palette. A theme-wide invariant removes inherited gradients, decorative background images, shadows, text shadows, filters, backdrop filters, and paper grain from the shell and components; functional theme thumbnails and Fruity Dance sprites remain visible. Solid Base16 surfaces cover cards, navigation, editors, forms, dialogs, chat, the player, and the explicit two-column mobile layout. Native checked controls are restored and accented with `base0D`, keeping their indicators visible without custom image textures. + +Catpuccin is a packaged dark palette theme derived from the Blackprint layout. It uses the darker Catppuccin crust tone for the outer site canvas, with soft mocha panel surfaces and rose, peach, yellow, green, teal, blue, and mauve accents. It covers the desktop and two-column mobile shells, cards, forms, editor, player, popups, and checked controls. Delete and destructive controls—including feed replies, guestbook posts, grid items, chat, and account administration—intentionally share the same base and hover treatment as ordinary buttons instead of switching to a separate red danger style. + +Theme-picker and Fruity Dance spritesheet-picker subtitles use the site's `MainRegular` face explicitly in both the selected button and menu options, rather than inheriting a browser button font. + +The sidebar show/hide state is animated through `body.sidebar-is-hidden`, which `main.js` toggles while preserving the `sidebarVisible` localStorage preference. Classic retains the desktop collapse control; Blackprint omits it. Blackprint keeps its desktop `>>` menu prefixes, while mobile nav buttons suppress those prefixes for a cleaner grid. The complete sidebar suppresses text selection and native image/link dragging while preserving normal control interaction. The homepage fridge.dev ASCII hero uses the shared `--hero-ascii-*` color variables so each theme can tune the gradient without editing homepage markup. The server-time and resource ASCII use `--time-*` and `--resource-*` variables, which default to the hero palette unless a theme overrides them. The server-time glyphs are loaded from `/resources/ascii-time.txt`: twelve glyph blocks in fixed `0123456789:?` order, separated by lines containing exactly 16 hyphens. This external font applies only to the clock; system-usage percentages retain their separate renderer and glyphs. The clock renderer preserves spacing contained inside each glyph and adds one explicit character cell after every non-final glyph, including colons. On each five-second usage refresh, metrics whose displayed rounded value changed briefly scramble only their number glyphs before settling; unchanged metrics and every percent glyph remain stable. The server-time ASCII drops seconds when the homepage is too narrow and rechecks on resize/SPAs so it does not need a refresh. Resource cards are intentionally unboxed so the ASCII itself carries the theme. Shared mobile `#ascii` fitting measures the parent panel's content box after subtracting horizontal padding, ensuring wide page titles such as Guestbook and Notifications fit inside `#content-main` without being clipped. It runs forced passes after initial layout settling, direct-load font readiness, and SPA swaps. Later resize observations only refit when the content width actually changes, preventing mobile browser chrome movement while scrolling from resizing the title, and mobile ASCII font-size transitions are disabled. @@ -124,8 +138,6 @@ Mobile view renders the sidebar title with the same per-letter spans as desktop Text selection uses the active theme's `--links` color over its `--bg` color. Main titles and shared ASCII displays are intentionally non-selectable so dragging across decorative text does not highlight it. -ThinkPad and CRT use IBM VGA throughout their interfaces while leaving the shared desktop and mobile title typefaces unchanged; ThinkPad also gives its generated tooltips a matching hardware-panel treatment. ThinkPad's desktop navigation rows use the spare sidebar height while retaining enough room for the player, track list, greeting, and footer at 1366×768 without sidebar scrolling. - Native page, component, and sidebar scrollbars use shared colours derived from the active theme's background, border, subtle, and link variables. Theme styles should change those foundation variables rather than introduce hard-coded scrollbar colours. Fonts and icons come from: diff --git a/wiki/Routing-and-Rendering.md b/wiki/Routing-and-Rendering.md index ff21f5a..ef2eff0 100644 --- a/wiki/Routing-and-Rendering.md +++ b/wiki/Routing-and-Rendering.md @@ -43,7 +43,7 @@ Typical route flow: 6. Inject placeholders like `{content}`, `{title}`, `{description}`, `{user_greeting}` 7. Optionally swap account footer button to logout when logged in -Theme selection also runs through `lib/render.php`. `default` is Blackprint and uses the base template/style. Desktop requests for selectable themes can use a theme HTML template from `/themes/lib`; mobile requests always keep `template_mobile.html` and append the selected theme CSS after the mobile inline styles. Legacy saved values are normalized (`blackprint` to `default`, `custom` to `classic`, `newsprint` to `whiteprint`). +Theme selection also runs through `lib/render.php`. `default` is Blackprint and uses the base template/style. Classic and Whiteprint are packaged selectable themes. Desktop requests for packaged themes can use a theme HTML template from `/themes/lib`; mobile requests always keep `template_mobile.html` and append the selected theme CSS after the mobile inline styles. Every package receives a `{theme-id}-theme` body class; metadata with `base: blackprint` also receives `blackprint-theme`, allowing Whiteprint to inherit Blackprint's layout and component coverage. The aliases `blackprint` and `custom` normalize to `default` and `classic` respectively. Some routes also pull in extra shared libs like `lib/feed.php` for route-specific persistence helpers instead of keeping all that logic inline.