Private
Public Access
Four preset color themes, switchable from Profile settings with instant preview and server-side persistence (User.theme, applied via a data-theme attribute the CSS custom-property overrides in themes.css key off). Dark stays the existing DarkSingularity palette and default. Light is a genuine new light-mode design; Midnight is a higher-contrast OLED-friendly dark variant; Sunset swaps in a warm amber/coral accent family. Custom theme building (pick-your-own-colors) is out of scope for this pass -- presets only. Also: fixed the PATCH /api/auth/me handler to only apply fields actually present in the request body. It previously always overwrote display_name unconditionally, which happened to be harmless when it was the only field on ProfileUpdate but would have silently cleared it on any theme-only update. And switched two hardcoded hex colors (.btn-primary:hover, .role-badge-admin) to token-derived color-mix() values so they adapt across themes instead of staying fixed to the original cyan/violet palette. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
33 lines
874 B
Python
33 lines
874 B
Python
"""user theme preference
|
|
|
|
Revision ID: e849b2efb79b
|
|
Revises: 880f080648de
|
|
Create Date: 2026-08-15 21:53:44.914731
|
|
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = 'e849b2efb79b'
|
|
down_revision: Union[str, Sequence[str], None] = '880f080648de'
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
"""Upgrade schema."""
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.add_column('users', sa.Column('theme', sa.String(length=20), nullable=True))
|
|
# ### end Alembic commands ###
|
|
|
|
|
|
def downgrade() -> None:
|
|
"""Downgrade schema."""
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.drop_column('users', 'theme')
|
|
# ### end Alembic commands ###
|