:root {
  /* Legibility over bright, cloud-textured skies — worst case is white-on-white.
     Order of preference: scrim → plate → shadow. Never outline/stroke type. */
  --scrim-bottom: linear-gradient(to top, rgba(16, 18, 22, 0.72) 0%, rgba(16, 18, 22, 0.52) 34%, rgba(16, 18, 22, 0) 100%); /* @kind other */
  --scrim-bottom-h: 820px;
  /* Title/display variant — the 116px title band sits higher in the frame, where the
     caption scrim has already decayed. Holds >=0.66 alpha under the title and >=0.46 under
     its 30px kicker, which sits ~700px off the bottom edge of a 1350 frame. */
  --scrim-title: linear-gradient(to top, rgba(16, 18, 22, 0.82) 0%, rgba(16, 18, 22, 0.66) 55%, rgba(16, 18, 22, 0.46) 80%, rgba(16, 18, 22, 0.24) 92%, rgba(16, 18, 22, 0) 100%); /* @kind other */
  --scrim-title-h: 950px;  /* taller scrim for display type */
  --scrim-top: linear-gradient(to bottom, rgba(16, 18, 22, 0.46) 0%, rgba(16, 18, 22, 0) 100%); /* @kind other */
  --scrim-top-h: 300px;

  /* Daytime-sky stand-in for mocks until real photographs are dropped in.
     Bright blue → white cloud → golden hour: the worst-case legibility background. */
  --sky-stand-in: linear-gradient(178deg, #8fb8dd 0%, #b9d2e8 30%, #e9eef1 58%, #f2e3c6 82%, #e6c99b 100%); /* @kind other */

  --plate-pad-y: 12px;
  --plate-pad-x: 20px;
  --plate-radius: 2px;       /* near-square; documents, not bubbles */
  --plate-blur: 8px;         /* backdrop-filter on the record plate only */

  /* Contact shadow — a print lying on a surface, shot from above. Not a floating card. */
  --shadow-contact: 0 2px 3px rgba(0, 0, 0, 0.55), 0 8px 14px -8px rgba(0, 0, 0, 0.6); /* @kind shadow */
  --print-border: 10px;
  --shadow-caption: 0 2px 18px rgba(12, 14, 18, 0.55);  /* insurance, not the main defense */
  --shadow-card: 0 1px 0 var(--rule-on-paper);

  --grain-opacity: 0.05; /* @kind other */    /* optional 4–5% film grain over full-frame stills */
  --radius-card: 3px;
}
