diff --git a/backlogger/static/backlogger/style.css b/backlogger/static/backlogger/style.css new file mode 100644 index 0000000..a53aeec --- /dev/null +++ b/backlogger/static/backlogger/style.css @@ -0,0 +1,104 @@ +/* ── Reset ─────────────────────────────────────────────────────── */ +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + +/* ── Base ──────────────────────────────────────────────────────── */ +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + background: #0f172a; + color: #e2e8f0; + min-height: 100vh; +} +a { color: inherit; text-decoration: none; } + +/* ── Site header ───────────────────────────────────────────────── */ +.site-header { + background: #0a0f1e; + border-bottom: 1px solid #1e293b; + padding: 0.75rem 2rem; + display: flex; + justify-content: space-between; + align-items: center; +} +.site-header .brand { color: #38bdf8; font-weight: 600; font-size: 0.95rem; } +.site-header nav { display: flex; gap: 1.5rem; align-items: center; } +.site-header nav a { color: #64748b; font-size: 0.85rem; } +.site-header nav a:hover { color: #e2e8f0; } + +/* ── Buttons ───────────────────────────────────────────────────── */ +.btn { + display: inline-block; + padding: 0.45rem 1rem; + border-radius: 6px; + font-size: 0.85rem; + cursor: pointer; + border: none; + transition: opacity 0.15s; + font-family: inherit; +} +.btn:hover { opacity: 0.85; } +.btn-primary { background: #38bdf8; color: #0f172a; font-weight: 600; } +.btn-sm { padding: 0.3rem 0.65rem; font-size: 0.78rem; } +.btn-outline { background: transparent; color: #94a3b8; border: 1px solid #334155; } +.btn-danger { background: transparent; color: #f87171; border: 1px solid #f87171; padding: 0.3rem 0.65rem; font-size: 0.78rem; } +.btn-danger:hover { background: #f87171; color: #0f172a; opacity: 1; } +.btn-done { background: transparent; color: #34d399; border: 1px solid #34d399; padding: 0.3rem 0.65rem; font-size: 0.78rem; } +.btn-done:hover { background: #34d399; color: #0f172a; opacity: 1; } +.btn-abandon { background: transparent; color: #fb923c; border: 1px solid #fb923c; padding: 0.3rem 0.65rem; font-size: 0.78rem; } +.btn-abandon:hover { background: #fb923c; color: #0f172a; opacity: 1; } +.btn-ghost { background: transparent; color: #64748b; border: 1px solid #334155; } +.btn-ghost:hover { color: #e2e8f0; opacity: 1; } +.btn-text { background: none; border: none; color: #64748b; font-size: 0.8rem; cursor: pointer; font-family: inherit; padding: 0; } +.btn-text:hover { color: #e2e8f0; } + +/* ── Form fields ───────────────────────────────────────────────── */ +.field { margin-bottom: 1.1rem; } +.field label { + display: block; + font-size: 0.78rem; + color: #94a3b8; + text-transform: uppercase; + letter-spacing: 0.07em; + margin-bottom: 0.4rem; +} +.field input[type="text"], +.field input[type="number"], +.field input[type="password"], +.field select { + width: 100%; + background: #1e293b; + border: 1px solid #334155; + border-radius: 6px; + color: #e2e8f0; + padding: 0.6rem 0.75rem; + font-size: 0.9rem; + font-family: inherit; +} +.field input:focus, +.field select:focus { outline: none; border-color: #38bdf8; } + +/* ── Errors ────────────────────────────────────────────────────── */ +.errorlist { list-style: none; color: #f87171; font-size: 0.8rem; margin-top: 0.3rem; } +.error-banner { + background: #450a0a; + border: 1px solid #f87171; + border-radius: 8px; + color: #fca5a5; + padding: 0.85rem 1.1rem; + margin-bottom: 1.5rem; +} + +/* ── Light theme ───────────────────────────────────────────────── */ +body[data-theme="light"] { background: #f8fafc; color: #0f172a; } +body[data-theme="light"] .site-header { background: #ffffff; border-color: #e2e8f0; } +body[data-theme="light"] .site-header .brand { color: #0284c7; } +body[data-theme="light"] .site-header nav a { color: #64748b; } +body[data-theme="light"] .btn-primary { background: #0284c7; } +body[data-theme="light"] .btn-outline { color: #64748b; border-color: #cbd5e1; } +body[data-theme="light"] .field input[type="text"], +body[data-theme="light"] .field input[type="number"], +body[data-theme="light"] .field input[type="password"], +body[data-theme="light"] .field select { + background: #f1f5f9; + color: #0f172a; + border-color: #cbd5e1; +} diff --git a/backlogger/templates/backlogger/base.html b/backlogger/templates/backlogger/base.html new file mode 100644 index 0000000..6d886c1 --- /dev/null +++ b/backlogger/templates/backlogger/base.html @@ -0,0 +1,22 @@ +{% load static %} + + + + + + {% block title %}Backlogger{% endblock %} + + {% block styles %}{% endblock %} + + + + + +{% block content %}{% endblock %} + +{% block scripts %}{% endblock %} + + diff --git a/backlogger/templates/backlogger/base_auth.html b/backlogger/templates/backlogger/base_auth.html new file mode 100644 index 0000000..2b90dd0 --- /dev/null +++ b/backlogger/templates/backlogger/base_auth.html @@ -0,0 +1,39 @@ +{% load static %} + + + + + + {% block title %}Backlogger{% endblock %} + + + {% block styles %}{% endblock %} + + +{% block content %}{% endblock %} + + diff --git a/backlogger/templates/backlogger/item_form.html b/backlogger/templates/backlogger/item_form.html index fce87bb..216d622 100644 --- a/backlogger/templates/backlogger/item_form.html +++ b/backlogger/templates/backlogger/item_form.html @@ -1,144 +1,39 @@ - - - - - - {{ action }} Item — Backlogger - +{% endblock %} - .two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } - - .actions { - display: flex; - justify-content: space-between; - align-items: center; - margin-top: 2rem; - } - .btn { - display: inline-block; - padding: 0.5rem 1.25rem; - border-radius: 6px; - font-size: 0.875rem; - cursor: pointer; - border: none; - } - .btn-primary { background: #38bdf8; color: #0f172a; font-weight: 600; } - .btn-primary:hover { opacity: 0.88; } - .btn-ghost { background: transparent; color: #64748b; border: 1px solid #334155; text-decoration: none; padding: 0.5rem 1.25rem; } - .btn-ghost:hover { color: #e2e8f0; } - - .errorlist { list-style: none; color: #f87171; font-size: 0.8rem; margin-top: 0.3rem; } - - - - - +{% block nav %} +← Back to backlogger +{% endblock %} +{% block content %}

{{ action }} item

@@ -174,7 +69,6 @@
-

Games
@@ -200,7 +94,6 @@
-

Books
@@ -218,12 +111,11 @@
-

Films
-
+
{{ form.watched }} @@ -244,7 +136,9 @@
+{% endblock %} +{% block scripts %} - - - +{% endblock %} diff --git a/backlogger/templates/backlogger/list.html b/backlogger/templates/backlogger/list.html index 75b8490..15d8dcf 100644 --- a/backlogger/templates/backlogger/list.html +++ b/backlogger/templates/backlogger/list.html @@ -1,200 +1,73 @@ - - - - - - Backlogger — k-boris.tech - +{% endblock %} - .empty { - text-align: center; - padding: 5rem 2rem; - color: #64748b; - } - .empty a { color: #38bdf8; } - - /* Light theme overrides */ - body[data-theme="light"] { background: #f8fafc; color: #0f172a; } - body[data-theme="light"] .site-header { background: #ffffff; border-color: #e2e8f0; } - body[data-theme="light"] .site-header .brand { color: #0284c7; } - body[data-theme="light"] .card { background: #ffffff; border-color: #e2e8f0; } - body[data-theme="light"] .progress-bar { background: #e2e8f0; } - body[data-theme="light"] .progress-fill { background: #0284c7; } - body[data-theme="light"] .card-stat { color: #0284c7; } - body[data-theme="light"] .filter-bar { border-color: #e2e8f0; } - body[data-theme="light"] .tab-sep { background: #e2e8f0; } - body[data-theme="light"] .tab.active { color: #0284c7; border-bottom-color: #0284c7; } - body[data-theme="light"] .sort-wrap select { background: #f1f5f9; color: #0f172a; border-color: #cbd5e1; } - body[data-theme="light"] .btn-outline { color: #64748b; border-color: #cbd5e1; } - body[data-theme="light"] .btn-primary { background: #0284c7; } - body[data-theme="light"] .site-header nav a { color: #64748b; } - body[data-theme="light"] .empty a { color: #0284c7; } - - - - - +{% block nav %} +{{ request.user.profile.display_name|default:request.user.username }} +
{% csrf_token %}
+{% endblock %} +{% block content %}

Backlogger {{ items|length }}

@@ -242,7 +115,7 @@ - +
@@ -327,12 +200,13 @@
{% endif %}
+{% endblock %} +{% block scripts %} - - - +{% endblock %} diff --git a/backlogger/templates/backlogger/login.html b/backlogger/templates/backlogger/login.html index 19c5e9b..c0c8d28 100644 --- a/backlogger/templates/backlogger/login.html +++ b/backlogger/templates/backlogger/login.html @@ -1,123 +1,41 @@ - - - - - - Log in — k-boris.tech - - - -
- k-boris.tech -

Backlogger

+{% extends 'backlogger/base_auth.html' %} - {% if form.non_field_errors %} - {% for error in form.non_field_errors %} - {% if 'inactive' in error|lower or 'active' in error|lower %} -
Your account is pending approval. You'll be able to log in once it's activated.
- {% else %} -
Invalid username or password.
- {% endif %} - {% endfor %} - {% endif %} +{% block title %}Log in — k-boris.tech{% endblock %} -
- {% csrf_token %} - +{% block content %} +
+ k-boris.tech +

Backlogger

-
- - {{ form.username }} - {{ form.username.errors }} -
-
- - {{ form.password }} - {{ form.password.errors }} -
+ {% if form.non_field_errors %} + {% for error in form.non_field_errors %} + {% if 'inactive' in error|lower or 'active' in error|lower %} +
Your account is pending approval. You'll be able to log in once it's activated.
+ {% else %} +
Invalid username or password.
+ {% endif %} + {% endfor %} + {% endif %} - - -

- No account? Sign up -

-
- - +
+ {% csrf_token %} + + +
+ + {{ form.username }} + {{ form.username.errors }} +
+
+ + {{ form.password }} + {{ form.password.errors }} +
+ + +
+

+ No account? Sign up +

+
+{% endblock %} diff --git a/backlogger/templates/backlogger/profile.html b/backlogger/templates/backlogger/profile.html index 429ef50..d41fcc2 100644 --- a/backlogger/templates/backlogger/profile.html +++ b/backlogger/templates/backlogger/profile.html @@ -1,112 +1,45 @@ - - - - - - Profile — Backlogger - - - + .saved-msg { font-size: 0.82rem; color: #34d399; display: none; } + .saved-msg.show { display: inline; } - + body[data-theme="light"] .card { background: #ffffff; border-color: #e2e8f0; } + body[data-theme="light"] .field input[type="text"], + body[data-theme="light"] .field select { background: #f8fafc; color: #0f172a; border-color: #cbd5e1; } + body[data-theme="light"] .divider { border-color: #e2e8f0; } + +{% endblock %} +{% block nav %} +Backlog +Profile +
{% csrf_token %}
+{% endblock %} + +{% block content %}

Profile

@{{ request.user.username }}{% if request.user.date_joined %} · member since {{ request.user.date_joined|date:"N Y" }}{% endif %}

@@ -134,6 +67,4 @@
- - - +{% endblock %} diff --git a/backlogger/templates/backlogger/signup.html b/backlogger/templates/backlogger/signup.html index ac7b90d..3f90bd6 100644 --- a/backlogger/templates/backlogger/signup.html +++ b/backlogger/templates/backlogger/signup.html @@ -1,117 +1,46 @@ - - - - - - Sign up — Backlogger - - - -
- killmybacklog.com -

Create an account

+{% extends 'backlogger/base_auth.html' %} -
- {% csrf_token %} +{% block title %}Sign up — Backlogger{% endblock %} -
- - {{ form.username }} - {{ form.username.errors }} -
+{% block styles %} + +{% endblock %} -
- - {{ form.email }} - {{ form.email.errors }} -
+{% block content %} +
+ killmybacklog.com +

Create an account

-
- - {{ form.password1 }} - {{ form.password1.errors }} -
+ + {% csrf_token %} -
- - {{ form.password2 }} - {{ form.password2.errors }} -
+
+ + {{ form.username }} + {{ form.username.errors }} +
+
+ + {{ form.email }} + {{ form.email.errors }} +
+
+ + {{ form.password1 }} + {{ form.password1.errors }} +
+
+ + {{ form.password2 }} + {{ form.password2.errors }} +
- - -

- Already have an account? Log in -

-
- - + + +

+ Already have an account? Log in +

+
+{% endblock %} diff --git a/backlogger/templates/backlogger/signup_pending.html b/backlogger/templates/backlogger/signup_pending.html index 65a450b..25a2bae 100644 --- a/backlogger/templates/backlogger/signup_pending.html +++ b/backlogger/templates/backlogger/signup_pending.html @@ -1,51 +1,23 @@ - - - - - - Account requested — Backlogger - - - -
- killmybacklog.com -
-

Account requested

-

Your account is pending approval.
You'll receive access once it's activated.

-

Back to log in

-
- - +{% extends 'backlogger/base_auth.html' %} + +{% block title %}Account requested — Backlogger{% endblock %} + +{% block styles %} + +{% endblock %} + +{% block content %} +
+ killmybacklog.com +
+

Account requested

+

Your account is pending approval.
You'll receive access once it's activated.

+

Back to log in

+
+{% endblock %} diff --git a/backlogger/templates/backlogger/steam_import.html b/backlogger/templates/backlogger/steam_import.html index 1b43c4c..a29b1b2 100644 --- a/backlogger/templates/backlogger/steam_import.html +++ b/backlogger/templates/backlogger/steam_import.html @@ -1,154 +1,52 @@ - - - - - - Import from Steam — Backlogger - - - + .empty { text-align: center; padding: 4rem 2rem; color: #475569; } - + .steam-btn { display: inline-flex; align-items: center; gap: 0.6rem; background: #1b2838; border: 1px solid #2a475e; color: #c7d5e0; font-weight: 600; border-radius: 6px; padding: 0.6rem 1.1rem; font-size: 0.9rem; cursor: pointer; transition: background 0.15s; } + .steam-btn:hover { background: #2a475e; } + .steam-logo { width: 20px; height: 20px; } + +{% endblock %} +{% block nav %} +← Back to backlog +{% endblock %} + +{% block content %}
{% if error %} @@ -219,7 +117,7 @@ {% else %}

Import from Steam

-

Connect your Steam account to import your library.

+

Connect your Steam account to import your library.

+{% endblock %} +{% block scripts %} - - +{% endblock %}