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 @@