kryten-webqueue 0.34.2__tar.gz → 0.34.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/CHANGELOG.md +24 -0
  2. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/PKG-INFO +1 -1
  3. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/static/css/main.css +56 -50
  4. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/pyproject.toml +1 -1
  5. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/.github/workflows/gitleaks.yml +0 -0
  6. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/.github/workflows/python-publish.yml +0 -0
  7. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/.github/workflows/release.yml +0 -0
  8. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/.gitignore +0 -0
  9. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/.gitleaks.toml +0 -0
  10. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/.pre-commit-config.yaml +0 -0
  11. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/AGENT-WORKFLOW-GUIDE.md +0 -0
  12. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/README.md +0 -0
  13. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/config.example.json +0 -0
  14. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/deploy/kryten-webqueue.service +0 -0
  15. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/deploy/nginx-queue.conf +0 -0
  16. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/IMPLEMENTATION_SPEC.md +0 -0
  17. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/IMPL_API_GATE.md +0 -0
  18. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/IMPL_ECONOMY.md +0 -0
  19. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/IMPL_KRYTEN_PY.md +0 -0
  20. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/IMPL_ROBOT.md +0 -0
  21. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/Kryten-Economy Service Quality Survey Report at v0.13.0.md +0 -0
  22. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/Kryten-Webqueue Service Quality Survey Report at v0.27.1.md +0 -0
  23. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/Log for incorrect promo insertion problem.txt +0 -0
  24. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/PLAN_PRESENCE_AND_PROMOS.md +0 -0
  25. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/PRE_PLAN_GAPS.md +0 -0
  26. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/PRODUCT_PLAN.md +0 -0
  27. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/SPEC_EMOTE_REHOST.md +0 -0
  28. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/SPEC_JOBS_AND_BROWSE.md +0 -0
  29. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/docs/UX_POLISH_PLAN.md +0 -0
  30. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/__init__.py +0 -0
  31. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/__main__.py +0 -0
  32. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/api_gate/__init__.py +0 -0
  33. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/api_gate/client.py +0 -0
  34. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/app.py +0 -0
  35. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/auth/__init__.py +0 -0
  36. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/auth/otp.py +0 -0
  37. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/auth/rate_limit.py +0 -0
  38. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/auth/session.py +0 -0
  39. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/catalog/__init__.py +0 -0
  40. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/catalog/db/__init__.py +0 -0
  41. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/catalog/db/_catalog.py +0 -0
  42. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/catalog/db/_connection.py +0 -0
  43. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/catalog/db/_feedback.py +0 -0
  44. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/catalog/db/_playlists.py +0 -0
  45. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/catalog/db/_queue.py +0 -0
  46. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/catalog/images.py +0 -0
  47. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/catalog/mediacms.py +0 -0
  48. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/catalog/sync.py +0 -0
  49. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/config.py +0 -0
  50. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/__init__.py +0 -0
  51. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/cmsutils/__init__.py +0 -0
  52. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/cmsutils/_common.py +0 -0
  53. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/cmsutils/enrichmeta.py +0 -0
  54. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/cmsutils/enrichtitles.py +0 -0
  55. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/cmsutils/enrichtv.py +0 -0
  56. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/cmsutils/fetchurls.py +0 -0
  57. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/cmsutils/motdposters.py +0 -0
  58. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/cmsutils/playedmovies.py +0 -0
  59. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/ytpipe/__init__.py +0 -0
  60. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/integrations/ytpipe/downloader.py +0 -0
  61. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/jobs/__init__.py +0 -0
  62. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/jobs/fetchurls_auth.py +0 -0
  63. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/jobs/job_scheduler.py +0 -0
  64. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/jobs/manager.py +0 -0
  65. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/jobs/rehost_emotes.py +0 -0
  66. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/jobs/tasks.py +0 -0
  67. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/logging_config.py +0 -0
  68. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/playlists/__init__.py +0 -0
  69. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/playlists/bulk_add.py +0 -0
  70. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/playlists/fire.py +0 -0
  71. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/playlists/importer.py +0 -0
  72. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/playlists/ordering.py +0 -0
  73. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/playlists/scheduler.py +0 -0
  74. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/promos/__init__.py +0 -0
  75. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/promos/director.py +0 -0
  76. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/queue/__init__.py +0 -0
  77. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/queue/completion.py +0 -0
  78. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/queue/ordering.py +0 -0
  79. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/queue/poller.py +0 -0
  80. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/queue/presence.py +0 -0
  81. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/queue/race_poller.py +0 -0
  82. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/queue/shadow.py +0 -0
  83. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/__init__.py +0 -0
  84. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/admin_catalog.py +0 -0
  85. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/admin_feedback.py +0 -0
  86. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/admin_job_schedules.py +0 -0
  87. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/admin_jobs.py +0 -0
  88. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/admin_moderation.py +0 -0
  89. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/admin_playlists.py +0 -0
  90. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/admin_promos.py +0 -0
  91. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/admin_queue.py +0 -0
  92. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/admin_schedules.py +0 -0
  93. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/auth.py +0 -0
  94. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/catalog.py +0 -0
  95. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/feedback.py +0 -0
  96. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/pages.py +0 -0
  97. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/queue.py +0 -0
  98. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/routes/user.py +0 -0
  99. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/static/js/admin-playlists.js +0 -0
  100. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/static/js/admin-promos.js +0 -0
  101. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/static/js/admin-queue-mgmt.js +0 -0
  102. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/static/js/admin-schedules.js +0 -0
  103. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/static/js/admin.js +0 -0
  104. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/static/js/main.js +0 -0
  105. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/admin/index.html +0 -0
  106. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/admin/playlists.html +0 -0
  107. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/admin/promos.html +0 -0
  108. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/admin/queue_mgmt.html +0 -0
  109. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/admin/schedules.html +0 -0
  110. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/auth/login.html +0 -0
  111. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/base.html +0 -0
  112. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/catalog/browse.html +0 -0
  113. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/catalog/item_detail.html +0 -0
  114. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/catalog/item_not_found.html +0 -0
  115. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/feedback/index.html +0 -0
  116. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/queue/index.html +0 -0
  117. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/race.html +0 -0
  118. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/templates/user/dashboard.html +0 -0
  119. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/ws/__init__.py +0 -0
  120. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/ws/handler.py +0 -0
  121. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/kryten_webqueue/ws/manager.py +0 -0
  122. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/__init__.py +0 -0
  123. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_config_persistence.py +0 -0
  124. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_feedback.py +0 -0
  125. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_fetchurls_sharepoint.py +0 -0
  126. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_phase1.py +0 -0
  127. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_phase2_jobs.py +0 -0
  128. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_phase3_jobs.py +0 -0
  129. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_phase4_live_fixes.py +0 -0
  130. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_playlist_import.py +0 -0
  131. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_presence_refund.py +0 -0
  132. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_promo_director.py +0 -0
  133. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_promo_pool_exclusion.py +0 -0
  134. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_queue_announce.py +0 -0
  135. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_race_poller.py +0 -0
  136. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_recently_played_hide.py +0 -0
  137. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_save_results_to_playlist.py +0 -0
  138. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_schedule_lock.py +0 -0
  139. {kryten_webqueue-0.34.2 → kryten_webqueue-0.34.4}/tests/test_search_facets.py +0 -0
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.34.4] - 2026-08-12
4
+
5
+ ### Changed
6
+
7
+ - Full re-theme: both dark and light modes now use a late-1970s palette.
8
+ - **Dark mode**: deep walnut-brown backgrounds (`#1a1208`–`#2f2010`), warm
9
+ cream text (`#f2e8d0`), harvest-gold accent (`#e89610`, 7.4:1 on bg),
10
+ avocado-green success, burnt-orange warning, rust danger.
11
+ - **Light mode**: warm cream surfaces (`#f5edd6`–`#fdf8ec`), dark-chocolate
12
+ text (`#2c1e08`), dark-amber accent (`#8a4e00`, 6:1 on cream), deep
13
+ avocado success, dark-amber warning, dark-rust danger.
14
+ - Added `--accent-text` CSS variable (dark in dark mode, cream in light mode)
15
+ so text on accent-colored buttons, badges, and pagination is always
16
+ legible. All hardcoded `color: white` / `color: #333` on tinted backgrounds
17
+ replaced with the appropriate token.
18
+
19
+ ## [0.34.3] - 2026-08-12
20
+
21
+ ### Fixed
22
+
23
+ - Dark mode: replaced low-contrast purple accent (`#6c5ce7`) with pale orange
24
+ (`#f5a742`, hover `#ffbc5e`) in both the default `:root` and the explicit
25
+ `[data-theme="dark"]` blocks. Light mode accent is unchanged.
26
+
3
27
  ## [0.34.2] - 2026-08-12
4
28
 
5
29
  ### Removed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: kryten-webqueue
3
- Version: 0.34.2
3
+ Version: 0.34.4
4
4
  Summary: Netflix/Tubi-style catalog browser and pay-to-play queue management for CyTube
5
5
  Author: grobertson
6
6
  License-Expression: MIT
@@ -1,22 +1,24 @@
1
1
  /* kryten-webqueue — Main Stylesheet */
2
2
 
3
3
  :root {
4
- /* Default (dark) palette. An explicit [data-theme="dark"] block below mirrors
5
- these so the navbar toggle is symmetric; [data-theme="light"] overrides
6
- them. Theme-independent tokens (radius, fonts, nav height) live here. */
7
- --bg-primary: #0f0f14;
8
- --bg-secondary: #1a1a24;
9
- --bg-card: #22222e;
10
- --bg-hover: #2a2a3a;
11
- --text-primary: #e8e8f0;
12
- --text-secondary: #9090a8;
13
- --accent: #6c5ce7;
14
- --accent-hover: #7f70f0;
15
- --success: #00b894;
16
- --warning: #fdcb6e;
17
- --danger: #e17055;
18
- --border: #33334a;
19
- --shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
4
+ /* Default (dark) palette 1970s night: walnut browns, harvest gold, avocado.
5
+ An explicit [data-theme="dark"] block below mirrors these so the navbar
6
+ toggle is symmetric; [data-theme="light"] overrides them.
7
+ Theme-independent tokens (radius, fonts, nav height) live here. */
8
+ --bg-primary: #1a1208;
9
+ --bg-secondary: #251a0d;
10
+ --bg-card: #2f2010;
11
+ --bg-hover: #3c2a16;
12
+ --text-primary: #f2e8d0;
13
+ --text-secondary: #ae9870;
14
+ --accent: #e89610;
15
+ --accent-hover: #f5aa28;
16
+ --accent-text: #1a1208; /* text on accent-colored backgrounds */
17
+ --success: #6aaa3c;
18
+ --warning: #df7c18;
19
+ --danger: #dc5430;
20
+ --border: #4a3218;
21
+ --shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
20
22
  --radius: 8px;
21
23
  --nav-height: 4rem;
22
24
  --font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
@@ -25,37 +27,40 @@
25
27
 
26
28
  /* Explicit dark theme (mirrors the defaults) — set by the toggle. */
27
29
  :root[data-theme="dark"] {
28
- --bg-primary: #0f0f14;
29
- --bg-secondary: #1a1a24;
30
- --bg-card: #22222e;
31
- --bg-hover: #2a2a3a;
32
- --text-primary: #e8e8f0;
33
- --text-secondary: #9090a8;
34
- --accent: #6c5ce7;
35
- --accent-hover: #7f70f0;
36
- --success: #00b894;
37
- --warning: #fdcb6e;
38
- --danger: #e17055;
39
- --border: #33334a;
40
- --shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
30
+ --bg-primary: #1a1208;
31
+ --bg-secondary: #251a0d;
32
+ --bg-card: #2f2010;
33
+ --bg-hover: #3c2a16;
34
+ --text-primary: #f2e8d0;
35
+ --text-secondary: #ae9870;
36
+ --accent: #e89610;
37
+ --accent-hover: #f5aa28;
38
+ --accent-text: #1a1208;
39
+ --success: #6aaa3c;
40
+ --warning: #df7c18;
41
+ --danger: #dc5430;
42
+ --border: #4a3218;
43
+ --shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
41
44
  }
42
45
 
43
- /* Light theme. Same accent family; lighter surfaces, darker text, and slightly
44
- deepened semantic colors so they keep contrast on white. */
46
+ /* Light theme 1970s day: warm cream surfaces, chocolate text, dark amber.
47
+ Accent darkened to #8a4e00 so it clears 6:1 on cream as link text
48
+ and still reads with cream (--accent-text) on buttons. */
45
49
  :root[data-theme="light"] {
46
- --bg-primary: #f3f3f8;
47
- --bg-secondary: #e9e9f1;
48
- --bg-card: #ffffff;
49
- --bg-hover: #e4e4ee;
50
- --text-primary: #1b1b26;
51
- --text-secondary: #5c5c72;
52
- --accent: #6c5ce7;
53
- --accent-hover: #5a4bd4;
54
- --success: #00997a;
55
- --warning: #b9810a;
56
- --danger: #c84b30;
57
- --border: #d6d6e2;
58
- --shadow: 0 4px 12px rgba(20, 20, 40, 0.12);
50
+ --bg-primary: #f5edd6;
51
+ --bg-secondary: #ece0c0;
52
+ --bg-card: #fdf8ec;
53
+ --bg-hover: #e6d8b0;
54
+ --text-primary: #2c1e08;
55
+ --text-secondary: #6a4e28;
56
+ --accent: #8a4e00;
57
+ --accent-hover: #6e3c00;
58
+ --accent-text: #fdf8ec;
59
+ --success: #357010;
60
+ --warning: #8c4a00;
61
+ --danger: #a83010;
62
+ --border: #c8b080;
63
+ --shadow: 0 4px 12px rgba(60, 40, 0, 0.15);
59
64
  }
60
65
 
61
66
  * {
@@ -165,10 +170,11 @@ a:hover {
165
170
  .btn-primary {
166
171
  background: var(--accent);
167
172
  border-color: var(--accent);
168
- color: white;
173
+ color: var(--accent-text);
169
174
  }
170
175
  .btn-primary:hover {
171
176
  background: var(--accent-hover);
177
+ color: var(--accent-text);
172
178
  }
173
179
  .btn-danger {
174
180
  background: var(--danger);
@@ -327,13 +333,13 @@ a:hover {
327
333
  .btn-queue {
328
334
  background: var(--accent);
329
335
  border-color: var(--accent);
330
- color: white;
336
+ color: var(--accent-text);
331
337
  flex: 1;
332
338
  }
333
339
  .btn-playnext {
334
340
  background: var(--warning);
335
341
  border-color: var(--warning);
336
- color: #333;
342
+ color: var(--bg-primary);
337
343
  flex: 1;
338
344
  }
339
345
 
@@ -576,14 +582,14 @@ a:hover {
576
582
  padding: 0.15rem 0.4rem;
577
583
  border-radius: 3px;
578
584
  background: var(--accent);
579
- color: white;
585
+ color: var(--accent-text);
580
586
  }
581
587
  .badge-paid {
582
588
  background: var(--accent);
583
589
  }
584
590
  .badge-promo {
585
591
  background: var(--warning);
586
- color: #1a1a1a;
592
+ color: var(--bg-primary);
587
593
  }
588
594
  .qi-user {
589
595
  font-size: 0.75rem;
@@ -1188,7 +1194,7 @@ a.np-chip {
1188
1194
  }
1189
1195
  .page-current {
1190
1196
  background: var(--accent);
1191
- color: white;
1197
+ color: var(--accent-text);
1192
1198
  padding: 0.3rem 0.6rem;
1193
1199
  border-radius: var(--radius);
1194
1200
  font-weight: 700;
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kryten-webqueue"
3
- version = "0.34.2"
3
+ version = "0.34.4"
4
4
  description = "Netflix/Tubi-style catalog browser and pay-to-play queue management for CyTube"
5
5
  readme = "README.md"
6
6
  license = "MIT"