Files
alembic/app/static/style.css
T
andrew bd56c8153f Add FastAPI app skeleton: settings, db, models, security, auth
- settings.py: pydantic-settings config for the two mount points
  (MUSIC_DATA_DIR, ALEMBIC_CONFIG_DIR), OIDC client config, encryption key path
- db.py: SQLite engine with WAL mode, plain-SQL schema migration runner
  (schema/*.sql, tracked by schema_version -- not the alembic migration tool)
- models.py: SQLAlchemy ORM models matching schema/0001_init.sql
- security/crypto.py: Fernet encrypt/decrypt for the secrets table
- security/oidc.py + routers/auth.py: Pocket ID OIDC login/callback/logout
- security/deps.py: require_auth dependency (redirect-to-login on no session)
- main.py: app factory, lifespan (init_db + beets WAL enable), session
  middleware, minimal dashboard route

Verified boots end-to-end via TestClient: unauthenticated GET / redirects to
/auth/login, static files serve, and all 13 schema tables get created on
first run.
2026-07-08 13:24:18 -06:00

91 lines
1.3 KiB
CSS

:root {
color-scheme: light dark;
--bg: #ffffff;
--fg: #1a1a1a;
--muted: #666;
--border: #ddd;
--accent: #2a6f97;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #14161a;
--fg: #e8e8e8;
--muted: #999;
--border: #333;
--accent: #6fb3d8;
}
}
* { box-sizing: border-box; }
body {
margin: 0;
font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
background: var(--bg);
color: var(--fg);
}
.topbar {
display: flex;
align-items: center;
gap: 1.5rem;
padding: 0.75rem 1.25rem;
border-bottom: 1px solid var(--border);
}
.topbar .brand {
font-weight: 700;
font-size: 1.1rem;
color: var(--accent);
text-decoration: none;
}
.topbar nav {
display: flex;
gap: 1rem;
flex: 1;
}
.topbar a {
color: var(--fg);
text-decoration: none;
}
.topbar nav a:hover {
color: var(--accent);
}
.logout {
font-size: 0.9rem;
color: var(--muted);
}
main {
max-width: 960px;
margin: 2rem auto;
padding: 0 1.25rem;
}
.muted { color: var(--muted); }
table {
width: 100%;
border-collapse: collapse;
}
th, td {
text-align: left;
padding: 0.4rem 0.6rem;
border-bottom: 1px solid var(--border);
}
button, .btn {
background: var(--accent);
color: #fff;
border: none;
padding: 0.5rem 1rem;
border-radius: 4px;
cursor: pointer;
}