diff --git a/chat/static/app.css b/chat/static/app.css
index 97cb0fd..0f2a654 100644
--- a/chat/static/app.css
+++ b/chat/static/app.css
@@ -285,17 +285,81 @@ body.drawer-modal-open { overflow: hidden; }
/* Scoped overrides for the drawer-content the server renders into
.drawer-panel-body. Keeps the existing class names working but
re-tunes them for the warm-paper context. */
+/* Tabs nav — sits at the top of .drawer-content and lets the user
+ pivot between Scene / Cast / Story / Turns groups. Underline-style
+ active indicator (a single muted-amber rule) keeps the editorial
+ feel — no pills, no boxes, no hover-fills. */
+.drawer-panel-body .drawer-tabs {
+ display: flex;
+ gap: 6px;
+ margin: 0 -8px 14px; /* bleed the divider rule slightly past the body padding */
+ padding: 0 8px 0;
+ border-bottom: 1px solid var(--rule);
+ flex-wrap: wrap;
+}
+.drawer-panel-body .drawer-tab {
+ appearance: none;
+ background: transparent;
+ border: none;
+ padding: 10px 14px 12px;
+ margin-bottom: -1px; /* sit on top of the parent's border-bottom */
+ font-family: var(--serif);
+ font-size: 15px;
+ font-weight: 400;
+ letter-spacing: 0.02em;
+ color: var(--ink-faint);
+ border-bottom: 2px solid transparent;
+ cursor: pointer;
+ transition:
+ color var(--duration) var(--ease),
+ border-color var(--duration) var(--ease);
+ border-radius: 0; /* strip the global button radius */
+}
+.drawer-panel-body .drawer-tab:hover {
+ color: var(--ink);
+ background: transparent;
+ border-color: transparent;
+}
+.drawer-panel-body .drawer-tab.is-active {
+ color: var(--ink);
+ border-bottom-color: var(--accent);
+ background: transparent;
+}
+.drawer-panel-body .drawer-tab.is-active:hover {
+ background: transparent;
+ color: var(--ink);
+}
+.drawer-panel-body .drawer-tab:focus-visible {
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+ border-radius: 2px;
+}
+
+/* Panes — only one visible at a time. Uses [hidden] so the JS can
+ toggle attribute-driven instead of class-driven. */
+.drawer-panel-body .drawer-tab-pane[hidden] { display: none; }
+
+/* Sections inside a pane: drop the section-level rules since the
+ tabs already segment the content. Keep the section h3 as a sub-
+ heading inside its pane — useful when a tab groups multiple
+ sections (e.g. Cast = Guest + Group + Edges). */
.drawer-panel-body .drawer-section {
- padding: 14px 0;
+ padding: 14px 0 18px;
border-bottom: 1px solid var(--rule);
}
-.drawer-panel-body .drawer-section:last-child { border-bottom: none; }
+.drawer-panel-body .drawer-tab-pane > .drawer-section:first-child { padding-top: 6px; }
+.drawer-panel-body .drawer-tab-pane > .drawer-section:last-child { border-bottom: none; padding-bottom: 4px; }
+/* When a pane has only one section, suppress the redundant h3 since
+ the tab label is the same name. */
+.drawer-panel-body .drawer-tab-pane:has(> .drawer-section:only-child) > .drawer-section > h3 {
+ display: none;
+}
.drawer-panel-body .drawer-section h3 {
margin: 0 0 10px;
font-family: var(--serif);
font-weight: 500;
- font-size: 13px;
- letter-spacing: 0.14em;
+ font-size: 12px;
+ letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--accent);
}
diff --git a/chat/templates/chat.html b/chat/templates/chat.html
index 2d4ef1f..9328e18 100644
--- a/chat/templates/chat.html
+++ b/chat/templates/chat.html
@@ -62,14 +62,28 @@