/* Sogoma base, v4.0.0. Reset, fonts, type steps, Sky and Line, focus, French composition helpers, registers, forced colours.
   Load order: ../tokens/tokens.css, base.css, icons.css, components.css. No raw hex here: every colour is a token.

   Fonts. The @font-face block below is generated by kit/fonts/make_fonts.py build (do not edit between the markers).
   - Default: static cuts, font-display: swap, one file per subset loaded by unicode-range.
   - Morning route: put data-register="morning" on <html>. The same files are then served under the "Newsreader Opt" and
     "Inter Opt" families with font-display: optional (no swap, no layout shift: the fallback stays if the file is late).
   - Desktop (min-width: 1024px): the variable files (families "Newsreader VF" and "Inter VF"), axes kept, opsz automatic.
   - font-synthesis: none everywhere: a missing weight or style is never faked. */

/* FACES:BEGIN (generated by kit/fonts/make_fonts.py build: do not edit) */
/* Static cuts, one file per subset, loaded by unicode-range. font-display: swap. */
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/newsreader-400-opsz20.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/newsreader-400-opsz20.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/newsreader-400-opsz20.latin-ext.woff2") format("woff2");
  unicode-range: U+0100-0149, U+014C-0151, U+0154-0177, U+0179-0180, U+0182-0185, U+0187-0189, U+018B-018F, U+0191-0195, U+0197-019C, U+019E-01B1, U+01B3-024F, U+1E00-1EFF; }
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("../fonts/newsreader-500-opsz32.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("../fonts/newsreader-500-opsz32.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("../fonts/newsreader-500-opsz32.latin-ext.woff2") format("woff2");
  unicode-range: U+0100-0149, U+014C-0151, U+0154-0177, U+0179-0180, U+0182-0185, U+0187-0189, U+018B-018F, U+0191-0195, U+0197-019C, U+019E-01B1, U+01B3-024F, U+1E00-1EFF; }
@font-face { font-family: "Newsreader Display"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("../fonts/newsreader-500-opsz44.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Newsreader Display"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("../fonts/newsreader-500-opsz44.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
@font-face { font-family: "Newsreader Display"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("../fonts/newsreader-500-opsz44.latin-ext.woff2") format("woff2");
  unicode-range: U+0100-0149, U+014C-0151, U+0154-0177, U+0179-0180, U+0182-0185, U+0187-0189, U+018B-018F, U+0191-0195, U+0197-019C, U+019E-01B1, U+01B3-024F, U+1E00-1EFF; }
@font-face { font-family: "Newsreader"; font-style: italic; font-weight: 400; font-display: swap;
  src: url("../fonts/newsreader-400i-opsz20.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Newsreader"; font-style: italic; font-weight: 400; font-display: swap;
  src: url("../fonts/newsreader-400i-opsz20.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
@font-face { font-family: "Newsreader"; font-style: italic; font-weight: 400; font-display: swap;
  src: url("../fonts/newsreader-400i-opsz20.latin-ext.woff2") format("woff2");
  unicode-range: U+0100-0149, U+014C-0151, U+0154-0177, U+0179-0180, U+0182-0185, U+0187-0189, U+018B-018F, U+0191-0195, U+0197-019C, U+019E-01B1, U+01B3-024F, U+1E00-1EFF; }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/inter-400-opsz14.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/inter-400-opsz14.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/inter-400-opsz14.latin-ext.woff2") format("woff2");
  unicode-range: U+0100-0149, U+014C-0151, U+0154-0177, U+0179-0180, U+0182-0185, U+0187-0189, U+018B-018F, U+0191-0195, U+0197-019C, U+019E-01B1, U+01B3-024F, U+1E00-1EFF; }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("../fonts/inter-500-opsz14.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("../fonts/inter-500-opsz14.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 500; font-display: swap;
  src: url("../fonts/inter-500-opsz14.latin-ext.woff2") format("woff2");
  unicode-range: U+0100-0149, U+014C-0151, U+0154-0177, U+0179-0180, U+0182-0185, U+0187-0189, U+018B-018F, U+0191-0195, U+0197-019C, U+019E-01B1, U+01B3-024F, U+1E00-1EFF; }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 600; font-display: swap;
  src: url("../fonts/inter-600-opsz24.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 600; font-display: swap;
  src: url("../fonts/inter-600-opsz24.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 600; font-display: swap;
  src: url("../fonts/inter-600-opsz24.latin-ext.woff2") format("woff2");
  unicode-range: U+0100-0149, U+014C-0151, U+0154-0177, U+0179-0180, U+0182-0185, U+0187-0189, U+018B-018F, U+0191-0195, U+0197-019C, U+019E-01B1, U+01B3-024F, U+1E00-1EFF; }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 400; font-display: swap;
  src: url("../fonts/inter-400i-opsz14.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 400; font-display: swap;
  src: url("../fonts/inter-400i-opsz14.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 400; font-display: swap;
  src: url("../fonts/inter-400i-opsz14.latin-ext.woff2") format("woff2");
  unicode-range: U+0100-0149, U+014C-0151, U+0154-0177, U+0179-0180, U+0182-0185, U+0187-0189, U+018B-018F, U+0191-0195, U+0197-019C, U+019E-01B1, U+01B3-024F, U+1E00-1EFF; }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("../fonts/jetbrainsmono-400.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
/* Morning route: the same files under *Opt family names with font-display: optional.
   A page picks them by putting data-register="morning" on <html> (see the --font-* overrides below).
   The URLs are identical, so the browser fetches each file once. */
@font-face { font-family: "Newsreader Opt"; font-style: normal; font-weight: 400; font-display: optional;
  src: url("../fonts/newsreader-400-opsz20.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Newsreader Opt"; font-style: normal; font-weight: 500; font-display: optional;
  src: url("../fonts/newsreader-500-opsz32.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Inter Opt"; font-style: normal; font-weight: 400; font-display: optional;
  src: url("../fonts/inter-400-opsz14.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Inter Opt"; font-style: normal; font-weight: 400; font-display: optional;
  src: url("../fonts/inter-400-opsz14.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
@font-face { font-family: "Inter Opt"; font-style: normal; font-weight: 500; font-display: optional;
  src: url("../fonts/inter-500-opsz14.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Inter Opt"; font-style: normal; font-weight: 500; font-display: optional;
  src: url("../fonts/inter-500-opsz14.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
@font-face { font-family: "Inter Opt"; font-style: normal; font-weight: 600; font-display: optional;
  src: url("../fonts/inter-600-opsz24.latin.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+0152-0153, U+0178, U+02C6, U+02DC, U+2009, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+202F, U+2039-203A, U+20AC, U+2212; }
@font-face { font-family: "Inter Opt"; font-style: normal; font-weight: 600; font-display: optional;
  src: url("../fonts/inter-600-opsz24.mande.woff2") format("woff2");
  unicode-range: U+014A-014B, U+0181, U+0186, U+018A, U+0190, U+0196, U+019D, U+01B2, U+0253-0254, U+0257, U+025B, U+0269, U+0272, U+028B, U+0300-0304, U+030C; }
/* Desktop (min-width: 1024px): variable files, axes kept, one file per family and style. */
@media (min-width: 1024px) {
  @font-face { font-family: "Newsreader VF"; font-style: normal; font-weight: 200 800; font-display: swap;
    src: url("../fonts/newsreader-variable.woff2") format("woff2"); }
  @font-face { font-family: "Newsreader VF"; font-style: italic; font-weight: 200 800; font-display: swap;
    src: url("../fonts/newsreader-italic-variable.woff2") format("woff2"); }
  @font-face { font-family: "Inter VF"; font-style: normal; font-weight: 100 900; font-display: swap;
    src: url("../fonts/inter-variable.woff2") format("woff2"); }
  @font-face { font-family: "Inter VF"; font-style: italic; font-weight: 100 900; font-display: swap;
    src: url("../fonts/inter-italic-variable.woff2") format("woff2"); }
}
/* FACES:END */

/* ---- Reset ---------------------------------------------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; font-synthesis: none; font-optical-sizing: auto; }
body { min-height: 100vh; background: var(--surface); color: var(--ink); -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }
img, svg, video, canvas { display: block; max-width: 100%; }
input, button, textarea, select { font: inherit; color: inherit; }
button { cursor: pointer; }
a { color: inherit; }
ul[role="list"], ol[role="list"] { list-style: none; padding: 0; }
table { border-collapse: collapse; }

/* ---- Fonts per route ------------------------------------------------------------------------------------------- */
[data-register="morning"] {
  --font-voice: "Newsreader Opt", "Newsreader Fallback Noto", "Newsreader Fallback DejaVu", Georgia, serif;
  --font-hand: "Inter Opt", "Inter Fallback Noto", "Inter Fallback DejaVu", system-ui, sans-serif;
}
@media (min-width: 1024px) {
  :root:not([data-register="morning"]) {
    --font-voice: "Newsreader VF", "Newsreader", "Newsreader Fallback Noto", "Newsreader Fallback DejaVu", Georgia, serif;
    --font-hand: "Inter VF", "Inter", "Inter Fallback Noto", "Inter Fallback DejaVu", system-ui, sans-serif;
  }
}

/* ---- Floors (floors 16 / 14 / 13 are data in tokens.source.json; rem so that text scaling still moves them) ------- */
:root {
  --floor-act: 1rem;
  --floor-label: 0.875rem;
  --floor-caption: 0.8125rem;
  --sg-sky-h: 48px;
  --sg-gap: var(--space-16);
  --sg-measure: var(--size-measure);
}
body { font-family: var(--type-body-family); font-weight: var(--type-body-weight); font-size: max(var(--floor-act), var(--type-body-size)); line-height: max(var(--type-body-line), 1.4em); }

/* ---- Type steps: classes read the --type-* variables of tokens.css -------------------------------------------- */
.sg-display { font-family: var(--type-display-family); font-weight: var(--type-display-weight); font-size: max(var(--floor-act), var(--type-display-size)); line-height: max(var(--type-display-line), 1.1em); letter-spacing: var(--type-display-tracking); }
.sg-voice-lg { font-family: var(--type-voice-lg-family); font-weight: var(--type-voice-lg-weight); font-size: max(var(--floor-act), var(--type-voice-lg-size)); line-height: max(var(--type-voice-lg-line), 1.15em); }
.sg-voice-md { font-family: var(--type-voice-md-family); font-weight: var(--type-voice-md-weight); font-size: max(var(--floor-act), var(--type-voice-md-size)); line-height: max(var(--type-voice-md-line), 1.25em); }
.sg-voice-sm { font-family: var(--type-voice-sm-family); font-weight: var(--type-voice-sm-weight); font-size: max(var(--floor-act), var(--type-voice-sm-size)); line-height: max(var(--type-voice-sm-line), 1.35em); }
.sg-voice-xs { font-family: var(--type-voice-xs-family); font-weight: var(--type-voice-xs-weight); font-size: max(var(--floor-act), var(--type-voice-xs-size)); line-height: max(var(--type-voice-xs-line), 1.4em); }
.sg-heading { font-family: var(--type-heading-family); font-weight: var(--type-heading-weight); font-size: max(var(--floor-act), var(--type-heading-size)); line-height: max(var(--type-heading-line), 1.3em); }
.sg-body { font-family: var(--type-body-family); font-weight: var(--type-body-weight); font-size: max(var(--floor-act), var(--type-body-size)); line-height: max(var(--type-body-line), 1.4em); }
.sg-small { font-family: var(--type-small-family); font-weight: var(--type-small-weight); font-size: max(var(--floor-label), var(--type-small-size)); line-height: max(var(--type-small-line), 1.4em); }
.sg-label { font-family: var(--type-label-family); font-weight: var(--type-label-weight); font-size: max(var(--floor-label), var(--type-label-size)); line-height: max(var(--type-label-line), 1.3em); letter-spacing: var(--type-label-tracking); }
.sg-amount { font-family: var(--type-amount-family); font-weight: var(--type-amount-weight); font-size: max(var(--floor-act), var(--type-amount-size)); line-height: max(var(--type-amount-line), 1.15em); font-variant-numeric: var(--type-amount-numeric); white-space: nowrap; }
.sg-amount-sm { font-family: var(--type-amount-sm-family); font-weight: var(--type-amount-sm-weight); font-size: max(var(--floor-act), var(--type-amount-sm-size)); line-height: max(var(--type-amount-sm-line), 1.3em); font-variant-numeric: var(--type-amount-sm-numeric); white-space: nowrap; }
.sg-caption { font-family: var(--type-caption-family); font-weight: var(--type-caption-weight); font-size: max(var(--floor-caption), var(--type-caption-size)); line-height: max(var(--type-caption-line), 1.3em); }
.sg-mono { font-family: var(--type-mono-family); font-weight: var(--type-mono-weight); font-size: max(var(--floor-label), var(--type-mono-size)); line-height: max(var(--type-mono-line), 1.4em); }
.sg-code { font-family: var(--type-code-family); font-weight: var(--type-code-weight); font-size: max(var(--floor-label), var(--type-code-size)); line-height: max(var(--type-code-line), 1.4em); }
h1 { font-family: var(--type-voice-lg-family); font-weight: var(--type-voice-lg-weight); font-size: max(var(--floor-act), var(--type-voice-lg-size)); line-height: max(var(--type-voice-lg-line), 1.15em); }
h2 { font-family: var(--type-voice-md-family); font-weight: var(--type-voice-md-weight); font-size: max(var(--floor-act), var(--type-voice-md-size)); line-height: max(var(--type-voice-md-line), 1.25em); }
h3, h4 { font-family: var(--type-heading-family); font-weight: var(--type-heading-weight); font-size: max(var(--floor-act), var(--type-heading-size)); line-height: max(var(--type-heading-line), 1.3em); }
code, kbd, samp, pre { font-family: var(--type-code-family); font-size: max(var(--floor-label), var(--type-code-size)); }

/* ---- Sky and Line --------------------------------------------------------------------------------------------- */
/* The Sky is Oasis deep; its lower edge is the Line (2 px Oasis); one 16 px Dawn disc sits 5 px above the Line.
   The disc's horizontal position is --sun-x (a length or a percentage), set by the page from the real sun. */
.sg-sky { position: relative; display: flex; align-items: center; min-height: var(--sg-sky-h); padding-inline: var(--space-16); background: var(--oasis-deep); color: var(--on-oasis-deep); }
@media (min-width: 1024px) { :root { --sg-sky-h: 56px; } } /* GRILLE: desktop from 1024 (Sky 48 phone, 56 desktop) */
[data-register="morning"] { --sg-sky-h: 72px; }
.sg-sky__name { font-family: var(--type-caption-family); font-weight: var(--type-label-weight); font-size: max(var(--floor-caption), var(--type-caption-size)); line-height: 1.3; letter-spacing: var(--type-label-tracking); }
.sg-sky__sun { position: absolute; inset-block-end: 5px; inset-inline-start: var(--sun-x, 50%); width: 16px; height: 16px; margin-inline-start: -8px; border-radius: 50%; background: var(--dawn); animation: sg-sunrise var(--duration-sun) var(--ease-held) 1 both; }
@keyframes sg-sunrise { from { transform: translateY(8px); opacity: 0; } to { transform: none; opacity: 1; } }
.sg-line { height: 2px; background: var(--oasis); }

/* ---- Focus ring: 2 px Oasis outside, the 2 px offset is the ground (white in Day) ----------------------------------- */
:focus { outline: none; }
:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
.sg-sky :focus-visible { outline-color: var(--on-oasis-deep); }

/* ---- Layout helpers -------------------------------------------------------------------------------------------- */
.sg-page { width: 100%; max-width: var(--size-page); margin-inline: auto; padding-inline: var(--space-16); }
.sg-measure { max-width: var(--sg-measure); }
.sg-stack > * + * { margin-block-start: var(--sg-gap); }
.sg-visually-hidden { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
.sg-skip { position: absolute; inset-inline-start: var(--space-16); inset-block-start: -100px; padding: var(--space-12) var(--space-16); background: var(--surface); color: var(--ink); border: 2px solid var(--border); }
.sg-skip:focus { inset-block-start: var(--space-8); }

/* ---- French composition helpers ------------------------------------------------------------------------------- */
:lang(fr) { hyphens: manual; quotes: "«\202F" "\202F»" "“" "”"; }
:lang(fr) q { quotes: "«\202F" "\202F»"; }
.sg-nowrap { white-space: nowrap; }
.sg-tnum { font-variant-numeric: tabular-nums; }
.sg-fr { text-wrap: pretty; overflow-wrap: break-word; }
.sg-money { white-space: nowrap; font-variant-numeric: tabular-nums; }

/* ---- Registers ------------------------------------------------------------------------------------------------- */
[data-register="morning"] { --sg-gap: var(--space-24); --sg-measure: var(--size-measure); }
[data-register="workshop"] { --sg-gap: var(--space-16); --sg-measure: var(--size-page); }
[data-register="watch"] { --sg-gap: var(--space-12); --sg-measure: var(--size-page); }
[data-register="site"] { --sg-gap: var(--space-32); --sg-measure: var(--size-measure); }

/* ---- Motion: nothing loops; the reduced-motion tokens already set the durations to 1 ms ---------------------------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 1ms; animation-iteration-count: 1; transition-duration: 1ms; scroll-behavior: auto; }
}

/* ---- Forced colours -------------------------------------------------------------------------------------------- */
@media (forced-colors: active) {
  .sg-sky { background: Canvas; color: CanvasText; border-block-end: 2px solid CanvasText; }
  .sg-sky__sun { background: Highlight; forced-color-adjust: none; }
  .sg-line { height: 0; background: none; border-block-start: 2px solid CanvasText; }
  :focus-visible { outline: 2px solid Highlight; }
  .sg-skip { border-color: CanvasText; }
}
