Implemented the PD-009 refinement.

This commit is contained in:
Nick Beckley 2026-06-19 20:56:46 +01:00
parent c577235949
commit 783fb916f8
4 changed files with 69 additions and 8 deletions

View File

@ -2439,24 +2439,43 @@ body.timeline-inspector-resizing {
.timeline-navigation-card { .timeline-navigation-card {
display: grid; display: grid;
grid-template-columns: auto minmax(0, 1fr) auto; grid-template-areas:
gap: 14px; "icon copy"
"icon actions";
grid-template-columns: auto minmax(0, 620px);
gap: 8px 14px;
align-items: center; align-items: center;
justify-content: center;
border: 1px solid rgba(47, 111, 99, 0.42); border: 1px solid rgba(47, 111, 99, 0.42);
border-left: 5px solid var(--plotline-accent); border-left: 5px solid var(--plotline-accent);
border-radius: 8px; border-radius: 8px;
margin: 0 0 12px; margin: 0 0 12px;
padding: 14px 16px; padding: 14px 16px;
max-height: 280px;
overflow: hidden;
color: var(--plotline-ink); color: var(--plotline-ink);
background: linear-gradient(135deg, rgba(238, 245, 242, 0.98), rgba(255, 255, 255, 0.94)); background: linear-gradient(135deg, rgba(238, 245, 242, 0.98), rgba(255, 255, 255, 0.94));
box-shadow: 0 10px 26px rgba(30, 37, 43, 0.08); box-shadow: 0 10px 26px rgba(30, 37, 43, 0.08);
opacity: 1;
transform: translateY(0);
transition: opacity 1.15s ease, max-height 1.2s ease, margin 1.2s ease, padding 1.2s ease, transform 1.15s ease;
} }
.timeline-navigation-card[hidden] { .timeline-navigation-card[hidden] {
display: none; display: none;
} }
.timeline-navigation-card.is-dismissing {
margin-bottom: 0;
padding-top: 0;
padding-bottom: 0;
max-height: 0;
opacity: 0;
transform: translateY(-6px);
}
.timeline-navigation-card-icon { .timeline-navigation-card-icon {
grid-area: icon;
display: grid; display: grid;
place-items: center; place-items: center;
width: 42px; width: 42px;
@ -2468,6 +2487,11 @@ body.timeline-inspector-resizing {
font-weight: 900; font-weight: 900;
} }
.timeline-navigation-card-copy {
grid-area: copy;
text-align: center;
}
.timeline-navigation-card-copy h2 { .timeline-navigation-card-copy h2 {
margin: 0 0 6px; margin: 0 0 6px;
color: var(--plotline-accent-dark); color: var(--plotline-accent-dark);
@ -2482,10 +2506,11 @@ body.timeline-inspector-resizing {
} }
.timeline-navigation-card-actions { .timeline-navigation-card-actions {
grid-area: actions;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 8px; gap: 8px;
justify-content: flex-end; justify-content: center;
} }
.timeline-horizontal-overflow { .timeline-horizontal-overflow {
@ -2529,6 +2554,12 @@ body.timeline-inspector-resizing {
box-shadow: inset 18px 0 18px -20px rgba(244, 234, 220, 0.55), inset -18px 0 18px -20px rgba(244, 234, 220, 0.55); box-shadow: inset 18px 0 18px -20px rgba(244, 234, 220, 0.55), inset -18px 0 18px -20px rgba(244, 234, 220, 0.55);
} }
@media (prefers-reduced-motion: reduce) {
.timeline-navigation-card {
transition: opacity 0.12s ease;
}
}
.timeline-scene-card.filter-dim, .timeline-scene-card.filter-dim,
.timeline-scene-card.focus-dim, .timeline-scene-card.focus-dim,
.lane-dim { .lane-dim {
@ -4118,6 +4149,9 @@ body.dragging-location [data-drag-type="location"] {
} }
.timeline-navigation-card { .timeline-navigation-card {
grid-template-areas:
"copy"
"actions";
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
@ -4126,7 +4160,7 @@ body.dragging-location [data-drag-type="location"] {
} }
.timeline-navigation-card-actions { .timeline-navigation-card-actions {
justify-content: flex-start; justify-content: center;
} }
.story-bible-search, .story-bible-search,

File diff suppressed because one or more lines are too long

View File

@ -1260,9 +1260,32 @@
let dismissedForPage = false; let dismissedForPage = false;
let isDemoing = false; let isDemoing = false;
let isArmed = false; let isArmed = false;
let dismissTimer = null;
const knownLeft = new WeakMap(); const knownLeft = new WeakMap();
const rememberPosition = (container) => knownLeft.set(container, container.scrollLeft); const rememberPosition = (container) => knownLeft.set(container, container.scrollLeft);
const prefersReducedMotion = () => window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;
const showCard = () => {
window.clearTimeout(dismissTimer);
card.hidden = false;
card.classList.remove("is-dismissing");
};
const hideCard = (animate = false) => {
window.clearTimeout(dismissTimer);
if (!animate || prefersReducedMotion() || card.hidden) {
card.classList.remove("is-dismissing");
card.hidden = true;
return;
}
card.classList.add("is-dismissing");
dismissTimer = window.setTimeout(() => {
card.hidden = true;
card.classList.remove("is-dismissing");
}, 1300);
};
const updateEdgeIndicators = (container) => { const updateEdgeIndicators = (container) => {
const hasOverflow = hasHorizontalOverflow(container); const hasOverflow = hasHorizontalOverflow(container);
@ -1274,13 +1297,17 @@
const updateGuidanceState = () => { const updateGuidanceState = () => {
const shouldShow = hasHorizontalOverflow(primaryScrollContainer()) && !readDiscovered() && !dismissedForPage; const shouldShow = hasHorizontalOverflow(primaryScrollContainer()) && !readDiscovered() && !dismissedForPage;
card.hidden = !shouldShow; if (shouldShow) {
showCard();
} else if (!card.classList.contains("is-dismissing")) {
hideCard(false);
}
allScrollContainers().forEach(updateEdgeIndicators); allScrollContainers().forEach(updateEdgeIndicators);
}; };
const markDiscovered = () => { const markDiscovered = () => {
dismissedForPage = true; dismissedForPage = true;
card.hidden = true; hideCard(true);
try { try {
localStorage.setItem(navigationDiscoveryKey, "true"); localStorage.setItem(navigationDiscoveryKey, "true");
} catch { } catch {

File diff suppressed because one or more lines are too long