/* ── Image pages ── */ .page--image { background: var(--color-primary, #1a1a2e); } .scene-image { width: 100%; height: 100%; object-fit: cover; display: block; } /* Placeholder shown when image not yet available */ .placeholder-image { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; } .placeholder-label { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; color: rgba(255, 255, 255, 0.75); text-align: center; padding: 1.5rem 2.5rem; border: 1px dashed rgba(255, 255, 255, 0.25); border-radius: 4px; } .placeholder-story { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.15em; opacity: 0.6; } .placeholder-scene { font-size: 1.15rem; font-weight: 500; line-height: 1.4; } /* ── Text pages ── */ .page--text { background: var(--cream, #faf8f2); /* Subtle paper texture via SVG noise */ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='0.025'/%3E%3C/svg%3E"); background-repeat: repeat; display: flex; align-items: center; } .text-page-inner { width: 100%; display: flex; flex-direction: column; gap: 0; } .scene-ornament { margin-top: auto; } /* ── Imprint page ── */ .page--imprint { background: var(--cream, #faf8f2); display: flex; align-items: flex-end; } /* ── Table of contents ── */ .page--toc { background: var(--cream, #faf8f2); display: flex; flex-direction: column; gap: 2rem; } .toc-list { list-style: none; counter-reset: toc; display: flex; flex-direction: column; gap: 0.7rem; } .toc-list li { counter-increment: toc; display: flex; align-items: baseline; gap: 0.8rem; } .toc-list li::before { content: counter(toc, decimal-leading-zero); min-width: 2.2rem; flex-shrink: 0; } /* ── Finale page ── */ .page--finale { background: var(--midnight, #0d0d2b); position: relative; } .finale-image { width: 100%; height: 100%; object-fit: cover; } .finale-overlay { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; padding-bottom: 1in; text-align: center; background: linear-gradient(to top, rgba(13, 13, 43, 0.75) 0%, transparent 55%); }