aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/style.css
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-08-24 14:33:20 +0200
committerChristophe Besson <cbesson@gmail.com>2026-08-24 14:33:20 +0200
commit0b0da86f1f9d6f0b1a27b5e1e1658c42de9f356a (patch)
treeba8daf5dcf050d44b7b0e766babbfda8fadac59f /packages/meshbay-hub/src/meshbay_hub/static/style.css
parent6af05abf410bbd038ce7fa6915a659defc509071 (diff)
downloadmeshbay-0b0da86f1f9d6f0b1a27b5e1e1658c42de9f356a.tar.gz
feat(node,hub): season-specific overviews, manual TMDB match correction, and wizard polish
Two operator-facing fixes for a real 3-season show whose automatic TMDB match was wrong at the show level: per-season overview/air_date tabs in the detail modal (falling back to the show-level text when a season's own is empty), and a "Fix match…" search-and-correct affordance that re-resolves every file sharing the corrected show's display_title. New signed op OP_TMDB_OVERRIDE and two read-only pairs (season_meta_req/resp, tmdb_search_req/resp), MNP_VERSION 0.5 -> 0.6. Also: the create-group wizard gets a spinning indexing indicator and an app-selection step, group settings default the TMDB language to the operator's own locale (never as a global default), and a file renamed mid-session now re-triggers title parsing instead of being silently skipped by the enrichment dedup guard. Fixes two bugs found during this work: the search overlay's z-index lost to the base video-overlay class and rendered invisibly, and season_meta's own empty overview didn't fall back to the show-level one. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LAmyXtc6dAADsH23ydXQpY
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/style.css')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/style.css61
1 files changed, 61 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/style.css b/packages/meshbay-hub/src/meshbay_hub/static/style.css
index e1900d9..446a751 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/style.css
+++ b/packages/meshbay-hub/src/meshbay_hub/static/style.css
@@ -2624,3 +2624,64 @@ a.transfer-name {
.video-flat-chevron.open { transform: rotate(180deg); }
.video-flat-season { padding-left: 24px; margin-bottom: 8px; }
.video-flat-season .video-season-header { margin: 6px 0 4px; }
+
+/* Season tab bar — docs/mediacenter.md §5.4's per-season overview view */
+.video-season-tabs {
+ display: flex;
+ gap: 4px;
+ margin: 10px 0;
+ overflow-x: auto;
+}
+.video-season-tab {
+ padding: 5px 12px;
+ border: 1px solid var(--border);
+ border-radius: 999px;
+ background: var(--bg-surface);
+ color: var(--text-dim);
+ font-size: 0.85em;
+ white-space: nowrap;
+ cursor: pointer;
+}
+.video-season-tab:hover { border-color: var(--accent); color: var(--text); }
+.video-season-tab.active { border-color: var(--accent); color: var(--accent); background: var(--bg-raised); }
+
+.video-fix-match { margin: 8px 0; font-size: 0.85em; }
+
+/* Operator search-and-correct overlay, layered on top of the detail modal.
+ Must beat .video-overlay's own z-index: 200 — both are position: fixed,
+ so without an explicit higher value here this one loses the stacking
+ order despite being the later sibling in the DOM. */
+.video-search-overlay { z-index: 210; }
+.video-search-panel { max-width: 480px; }
+.video-search-form { display: flex; gap: 8px; }
+.video-search-form input {
+ flex: 1;
+ padding: 7px 10px;
+ border: 1px solid var(--border);
+ border-radius: 6px;
+ background: var(--bg-surface);
+ color: var(--text);
+}
+.video-search-hint { font-size: 0.78em; color: var(--text-dim); margin: 6px 0 2px; }
+.video-search-error { font-size: 0.85em; color: var(--error); }
+.video-search-results { display: flex; flex-direction: column; gap: 4px; margin-top: 10px; }
+.video-search-result {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding: 6px;
+ border: 1px solid transparent;
+ border-radius: 6px;
+ background: none;
+ text-align: left;
+ cursor: pointer;
+}
+.video-search-result:hover:not(:disabled) { border-color: var(--accent); background: var(--bg-raised); }
+.video-search-result:disabled { opacity: 0.5; cursor: not-allowed; }
+.video-search-result-thumb { width: 46px; height: 68px; flex-shrink: 0; }
+.video-search-result-poster {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ border-radius: 4px;
+}