/* Photo Essay & Storytelling Mode Styles */ .essay-container { /* * One shared measure for every block, so headings, prose and figures line up * on the same left edge. Deliberately in rem, not the `68ch` this replaces: * `ch` is relative to each element's own font, so a serif heading resolved to * a wider column than the body text and started further left. 40rem matches * what 68ch produced for the body font. Custom properties are substituted as * raw tokens, so a `ch` value here would be re-resolved per element and bring * the bug straight back — keep this font-independent. * * `--essay-bleed` / `--essay-wide` are viewport-based by default and get * overridden where the essay renders inside a narrower box (e.g. the admin * Journal Studio preview pane). */ --essay-measure: 40rem; --essay-wide: 1100px; --essay-bleed: 100vw; width: 100%; max-width: 100%; margin: 0 auto; padding: 2rem 1.5rem 6rem 1.5rem; } /* Header & Cover */ .essay-header { max-width: var(--essay-measure); margin: 0 auto 3.5rem auto; text-align: center; } .essay-header__title { font-family: var(--font-serif, serif); font-size: clamp(2.2rem, 5vw, 3.8rem); font-weight: 700; line-height: 1.15; margin-bottom: 1rem; letter-spacing: -0.02em; } .essay-header__subtitle { font-family: var(--font-sans, sans-serif); font-size: clamp(1.1rem, 2.5vw, 1.4rem); opacity: 0.8; line-height: 1.5; margin-bottom: 1.5rem; } .essay-header__meta { font-family: var(--font-caption, monospace); font-size: 0.85rem; opacity: 0.6; text-transform: uppercase; letter-spacing: 0.05em; } /* Reading column */ .essay-prose { max-width: var(--essay-measure); margin: 0 auto 2.5rem auto; font-family: var(--font-sans, sans-serif); font-size: clamp(1.05rem, 2vw, 1.2rem); line-height: 1.75; color: var(--text-primary, rgba(255, 255, 255, 0.92)); } .essay-prose p { margin-bottom: 1.75rem; } .essay-heading { font-family: var(--font-serif, serif); max-width: var(--essay-measure); margin: 3.5rem auto 1.5rem auto; font-weight: 600; line-height: 1.25; } .essay-heading--1 { font-size: clamp(1.8rem, 3.5vw, 2.5rem); } .essay-heading--2 { font-size: clamp(1.5rem, 3vw, 2rem); } .essay-heading--3 { font-size: clamp(1.25rem, 2.5vw, 1.6rem); } /* Pullquote */ .essay-quote { max-width: var(--essay-measure); margin: 3.5rem auto; padding: 1.5rem 2rem; border-left: 3px solid var(--accent, #e60012); background: var(--bg-card, rgba(255, 255, 255, 0.03)); border-radius: 0 8px 8px 0; font-family: var(--font-serif, serif); font-style: italic; font-size: clamp(1.15rem, 2.2vw, 1.35rem); line-height: 1.6; } .essay-quote__author { display: block; margin-top: 0.75rem; font-family: var(--font-caption, monospace); font-style: normal; font-size: 0.85rem; opacity: 0.7; text-transform: uppercase; } /* Essay Photos & Layout Modes */ .essay-figure { margin: 3.5rem auto; width: 100%; } .essay-figure--contained { max-width: var(--essay-measure); } .essay-figure--wide { max-width: var(--essay-wide); } /* * `width` has to be set too, not just max-width: .essay-figure is width: 100%, * which over-constrains the box so the negative right margin is dropped and only * the left side bleeds. */ .essay-figure--fullbleed { width: var(--essay-bleed); max-width: var(--essay-bleed); margin-left: calc(-0.5 * var(--essay-bleed) + 50%); margin-right: calc(-0.5 * var(--essay-bleed) + 50%); } .essay-image-wrapper { position: relative; width: 100%; overflow: hidden; border-radius: var(--radius-md, 0px); max-height: 80vh; } .essay-image-wrapper img { object-fit: cover; width: 100%; height: auto; max-height: 80vh; display: block; transition: transform 0.4s ease; } .essay-image-wrapper:hover img { transform: scale(1.015); } .essay-figcaption { max-width: var(--essay-measure); margin: 0.75rem auto 0 auto; text-align: center; font-family: var(--font-caption, monospace); font-size: 0.85rem; opacity: 0.75; } /* Side by side photo pair */ /* * Justified row: each photo keeps its own aspect ratio, and its width is given * by `flex-grow: ` (set inline from the asset). Since width ∝ ratio * and height = width / ratio, both photos end up exactly the same height without * a single pixel being cropped — a shared baseline instead of one portrait * towering over a landscape. */ .essay-pair-grid { display: flex; gap: 1.5rem; width: 100%; max-width: var(--essay-wide); margin: 3.5rem auto; } .essay-pair-grid > .essay-image-wrapper { flex-basis: 0; min-width: 0; } @media (max-width: 640px) { /* Stacked: full width each, height from the photo's own ratio. */ .essay-pair-grid { flex-direction: column; gap: 1.5rem; } .essay-pair-grid > .essay-image-wrapper { flex: none; } }