/* Agoramores — "march" theme overrides. Loaded after main.css.
   Every selector here is scoped to body[data-theme-id="march"]. */

/* ---------------------------------------------------------------------------
   MARCH — "in like a lion, out like a lamb."

   The month is a duality, so the page is built as one continuous weather front
   running top to bottom: a bruised slate thunderhead with driving rain and wind
   combing through it at the LION end, a tear in the cloud where the sun breaks
   out as a tawny mane sunburst, and below the squall line a mild, clearing
   fleece-white sky over the first green shoots at the LAMB end. The heading
   rainbow walks the same journey — lion red and ember and mane gold first, then
   shoot green, moss, storm-bruise and rose — and red re-enters mid-cycle so the
   spectrum never stops reading as red-led.

   THE ONE STRUCTURAL RULE THAT MAKES THIS LEGIBLE
   -----------------------------------------------
   .night-sky is position: fixed, so the whole page scrolls OVER it. That means
   every line of body copy passes over every band of the illustration at some
   scroll offset — a genuinely dark storm and a genuinely white fleece in the
   same backdrop cannot both carry one ink. So the duality here is carried by
   HUE, TEXTURE and CHROMA, never by luminance extremes, and the sky is built
   under a hard floor:

     NO LAYER ANYWHERE IN .night-sky IS DARKER THAN --mar-storm-bruise (#bbb8d2).

   Cloud masses are painted in exactly two colours — the cold --mar-storm-core
   and the violet --mar-storm-bruise — at varying alpha, so their composite can
   only ever be lighter than the darker of the two. Rain, wind, god-rays and the
   fleece nap are all LIGHT-ADDING (warm and cold whites), so they can only
   raise luminance, which can only improve contrast against the dark ink. That
   makes #bbb8d2 the true worst case for the entire page, and every colour in
   the palette below was measured against it rather than against --bg. Ratios
   are quoted per token; the tightest are called out where they land.

   The drama therefore has to come from HUE and EDGE rather than from shadow:
   cold violet-slate cloud with hard shoulders and a hot cream tear burning
   through it at one end, warm fleece at the other. Two colour temperatures held
   at one luminance read as far more weather than a grey ramp does, and they
   cost the reader nothing.

   Motion: two ambient transform-only layers (rain, wind), plus the header's
   existing neon strip. No new continuous effect beyond that, the first frame is
   already the finished picture, and both reduced-motion and reduced-data stop
   the travel without removing a single painted layer.
   --------------------------------------------------------------------------- */
body[data-theme-id="march"] {
  /* ---- Ink ---------------------------------------------------------------
     Storm ink. Measured against #bbb8d2 (the darkest pixel on the page) and
     against #faf8f3 (the brightest):
       --mar-ink       8.82 : 1  →  16.02 : 1
       --mar-ink-soft  5.71 : 1  →  10.36 : 1
       --mar-muted     4.75 : 1  →   7.46 : 1
     All three clear AA body text at BOTH ends, which is the whole reason the
     luminance band above is kept as narrow as it is. */
  --mar-ink: #201b18;
  --mar-ink-soft: #433b34;
  --mar-muted: #4f4740;

  /* ---- The lion: red anchor, mane, ember --------------------------------
     Red is the standing anchor of every Agoramores month and it leads here as
     the gale-warning flag: --mar-red is the structural colour (borders, table
     headers, the first stop of all three gradients), --mar-red-deep is the
     link ink, and --mar-red-lit is bright enough that it is confined to
     illustration only — 2.33 : 1 on the storm, so it may never carry text.
       --mar-red        3.34 : 1 on the storm, 5.45 : 1 on --bg  (borders, large type)
       --mar-red-deep   4.94 : 1 on the storm, 8.06 : 1 on --bg  (links, AA everywhere)
       --mar-red-dark   5.65 : 1 on the storm                    (link hover, AA everywhere) */
  --mar-red: #b8201f;
  --mar-red-deep: #8c1210;
  --mar-red-dark: #7c0f0e;
  --mar-red-lit: #d8342c;

  /* Mane. --mar-mane and --mar-straw are the lit fur catching the sun and are
     illustration-only (2.27 : 1 and lower on the storm). --mar-mane-deep is the
     tawny that can hold text: 3.80 : 1 on the storm, 6.50 : 1 on the breadcrumb
     card, which is where it actually sits as --tt-gold. */
  --mar-mane-deep: #7a4c08;
  --mar-mane: #a06a10;
  --mar-straw: #d9b45e;
  --mar-ember: #a83c12;
  --mar-tawny: #7f5309;

  /* ---- The lamb: shoots, moss, and the cool supporting hues -------------
     Cool colours are supporting cast only — never dominant over the red. Each
     one still clears 3 : 1 on the storm so it can take a heading stop:
       --mar-shoot-deep 4.54   --mar-bruise 4.75   --mar-slate 4.15
       --mar-moss       3.61   --mar-rose   3.70   --mar-shoot 3.28 */
  --mar-shoot-deep: #2f5417;
  --mar-shoot: #3d6b1f;
  --mar-moss: #4e5d43;
  --mar-slate: #5d4e37;
  --mar-bruise: #634133;
  --mar-rose: #9f3130;

  /* ---- Scenery ----------------------------------------------------------
     The luminance ladder of the illustration, lion → lamb. The two storm values
     are the ONLY colours the cloud masses are drawn in, and --mar-storm-bruise
     is the floor described at the top of this file: nothing in .night-sky may go
     below it. They sit at effectively one luminance and differ in hue — cold
     blue-slate and a violet bruise — which is what lets the cloud have internal
     form without any of it going dark.
     --mar-card is the breadcrumb bar, the one element in the whole project
     allowed a background of its own. --mar-turf / --mar-turf-deep are the shoot
     band, kept deliberately bleached — March grass is thin new green over last
     year's dead straw, and a pale band keeps the footer readable (ink 9.40 : 1,
     links 5.26 : 1 on --mar-turf-deep). */
  --mar-storm-core: #c5bab2;
  --mar-storm-bruise: #c8b8b1;
  --mar-storm: #cec7bb;
  --mar-storm-lit: #d8d1c5;
  --mar-overcast: #dbd9d1;
  --mar-fleece: #efe7d2;
  --mar-wool: #f2e6d2;
  --mar-card: #f0e7d2;
  --mar-turf: #d2d6b6;
  --mar-turf-deep: #bec596;

  /* ---- Geometry ---------------------------------------------------------
     Two squall depths and the shoot band, as percentages of the fixed backdrop
     so they hold at any viewport height. The rain and wind curtains END on a
     tonal step built into the sky gradient below — the same trick the April
     creek uses at its waterline. A curtain that stops in open sky shows a cut
     edge; a curtain that stops on the squall line reads as weather clearing.
     The mobile block at the foot of this file rescales all four. */
  --mar-squall-near: 62%;
  --mar-squall-far: 46%;
  --mar-turf-h: clamp(2.6rem, 7vh, 4.4rem);
  --mar-sun-r: 22rem;

  --tt-bg: var(--mar-fleece);
  /* Link-hover paired to THIS block's ground (standing rule 2026-08-14),
     not the mode name — march's unmoded block is its own canonical lighting.
     #efece3 is light: #FF465A only measures 2.83:1 here, so this lighting
     takes the same-hue dark variant, #BD0014 — 5.60:1. */
  --link-hover: #BC0900;
  --tt-bg-alt: #e2ded2;
  --tt-cyan: var(--mar-ink);
  --tt-cyan-soft: var(--mar-ink-soft);
  --tt-yellow: var(--mar-tawny);
  --tt-orange: var(--mar-ember);
  --tt-chartreuse: var(--mar-shoot-deep);
  --tt-green: var(--mar-shoot);
  --tt-pink: var(--mar-rose);
  --tt-purple: var(--mar-bruise);
  --tt-blue: var(--mar-slate);
  --tt-teal: var(--mar-moss);
  --tt-gray: var(--mar-muted);
  --tt-gold: var(--mar-mane-deep);
  --tt-red: var(--mar-red);
  --tt-breadcrumb-text: var(--mar-red-deep);
  /* Daylight: the breadcrumb glow is a warm bloom at low alpha, not neon. */
  --tt-breadcrumb-glow: rgba(184, 32, 31, 0.16);
  /* Hover/focus halo for the zodiac glyphs. Every other month casts a LIGHT
     halo because its ground is dark; March's chips are dark tawny glyphs on a
     near-white card, so the halo has to be DARK to trace them at all — the same
     inversion the lava-lamp theme needs. Checked against --mar-card (#f4f1ea).
     This token is the chips' entire hover/focus affordance: they carry no
     border, no ring and no box-shadow on any theme. */
  --zodiac-glow: rgba(140, 18, 16, 0.62);
  /* The engraving on the tarot card: the one text-shadow that cuts the card's
     numeral and the breadcrumb separators INTO its face rather than printing
     them on it. main.css defaults it to a black lip, which is right under a
     glyph on a dark card and wrong under one on fleece — on a pale face the lit
     edge of a struck stroke is the white BELOW the letter, not the black. Every
     light-ground theme has to state this or it inherits a smudge. */
  --tt-engrave: 0 1px 0 rgba(242, 230, 210, 0.75);

  /* Structural border palette — every visible frame, rail and keyline in the
     project draws from this one gradient, so it is the lion → lamb journey in
     six stops. Red leads, red returns at stop four, and the run closes on red
     again so a repeated or rotated copy joins seamlessly. */
  --tt-heading-rainbow: linear-gradient(
    90deg,
    var(--mar-red),
    var(--mar-ember),
    var(--mar-mane-deep),
    var(--mar-red),
    var(--mar-shoot-deep),
    var(--mar-moss),
    var(--mar-red)
  );
  --tt-heading-rainbow-vertical: linear-gradient(
    180deg,
    var(--mar-red),
    var(--mar-ember),
    var(--mar-mane-deep),
    var(--mar-red),
    var(--mar-shoot-deep),
    var(--mar-moss),
    var(--mar-red)
  );
  /* The heading spectrum: nine stops walking lion → lamb (red, ember, tawny,
     shoot-deep, RED AGAIN, moss, slate, bruise, rose), written out twice so the
     200% background in main.css loops with no visible reset, and closed on red
     so the wrap point is invisible. Every one of these nine clears 3 : 1 on the
     storm core and 5 : 1 on --bg, so the gradient stays a readable heading at
     both ends of the page rather than eight near-blacks pretending to be a
     rainbow. Red appears twice per cycle, as the red-bias rule requires. */
  --tt-heading-text-rainbow: linear-gradient(
    90deg,
    var(--mar-red),
    var(--mar-ember),
    var(--mar-tawny),
    var(--mar-shoot-deep),
    var(--mar-red),
    var(--mar-moss),
    var(--mar-slate),
    var(--mar-bruise),
    var(--mar-rose),
    var(--mar-red),
    var(--mar-ember),
    var(--mar-tawny),
    var(--mar-shoot-deep),
    var(--mar-red),
    var(--mar-moss),
    var(--mar-slate),
    var(--mar-bruise),
    var(--mar-rose),
    var(--mar-red)
  );

  /* ---- Type -------------------------------------------------------------
     A condensed grotesque for headings. System stacks only — this project loads
     no webfonts anywhere, so the choice adds zero network requests and the
     first paint is already the finished typography. Condensed is the right
     voice for a gale: it packs tight, leans forward and reads as wind-raked,
     and it is unmistakably not September's engraved Copperplate caps or
     October's blocky uppercase mono. Body copy and the brand wordmark are left
     alone — --font-text is locked in main.css and is the same on every theme
     (2026-08-15), and --font-cursive is untouched at the token level because
     the brand is a locked fixture with its own stack. */
  --font-heading: "Avenir Next Condensed", "HelveticaNeue-CondensedBold",
    "Helvetica Neue Condensed", "Roboto Condensed", "Liberation Sans Narrow",
    "Arial Narrow", Optima, "Segoe UI", sans-serif;

  --bg: var(--mar-fleece);
  --surface: transparent;
  --text: var(--mar-ink);
  --text-soft: var(--mar-ink-soft);
  --muted: var(--mar-muted);
  /* Red binds to the structure, per the standing anchor rule: --border and
     every hairline in the theme are the month red rather than a neutral grey. */
  --border: var(--mar-red);
  --border-dim: rgba(184, 32, 31, 0.26);
  --border-teal: rgba(78, 93, 67, 0.45);
  background: var(--mar-fleece);
  color: var(--mar-ink);
  color-scheme: light;
}

/* ---------------------------------------------------------------------------
   THE WIND, at page level. body::before is the CRT scanline — a permanent
   fixture, so it is repurposed rather than switched off. Here it becomes the
   rake of wind across the whole pane: one fine set of steep streaks and one
   very faint counter-rake, warm-white so it can only add light.

   This layer sits ABOVE the text at z-index 5, which is why the alpha is held
   at the floor: it has to be felt, never read. Static, no repeat cost beyond
   two repeating-linear-gradients on the one fixed element that already existed.
   --------------------------------------------------------------------------- */
body[data-theme-id="march"]::before {
  background:
    repeating-linear-gradient(
      74deg,
      transparent 0 41px,
      rgba(242, 230, 210, 0.075) 41px 42px,
      transparent 42px 97px,
      rgba(238, 232, 210, 0.05) 97px 98px,
      transparent 98px 179px
    ),
    repeating-linear-gradient(
      99deg,
      transparent 0 73px,
      rgba(242, 230, 210, 0.035) 73px 74px,
      transparent 74px 211px
    );
}

/* ---------------------------------------------------------------------------
   THE CARD — the breadcrumb bar is the single element in the project allowed a
   background of its own, so it is where the duality is restated at object
   scale: a fleece card, lion at the left edge and lamb at the right.

   Left to right: a tawny mane wash bleeding in from the left, a wool nap over
   the whole face, then the fleece ground. The wash is a broad background
   gradient and NOT a rule down the edge — border-left in this project belongs
   exclusively to <a> elements inside ul/ol, and nothing here is one.
   All static. Nothing added to this element animates.
   --------------------------------------------------------------------------- */
body[data-theme-id="march"] .breadcrumb-nav {
  background:
    /* Wool nap, same rule as the page fleece: each puff dies well inside its own
       tile so the flecks never touch and quilt up, and the two tiles share no
       common factor so they never phase into a pattern. */
    radial-gradient(circle at 34% 42%, rgba(242, 230, 210, 0.2) 0 5%, transparent 24%)
      0 0 / 3.1rem 2.5rem repeat,
    radial-gradient(circle at 68% 71%, rgba(242, 230, 210, 0.13) 0 4%, transparent 20%)
      0.7rem 0.4rem / 5.3rem 4.1rem repeat,
    /* the lion end of the card */
    linear-gradient(
      100deg,
      rgba(217, 180, 94, 0.38) 0%,
      rgba(217, 180, 94, 0.14) 22%,
      transparent 46%
    )
      0 0 / 100% 100% no-repeat,
    linear-gradient(180deg, #f1e6d2 0%, var(--mar-card) 58%, #ece7dc 100%)
      0 0 / 100% 100% no-repeat;
  /* A cast shadow, not a neon halo — this is a daylight theme. */
  box-shadow: 0 2px 14px rgba(32, 27, 24, 0.1), inset 0 1px 0 rgba(242, 230, 210, 0.7);
}

/* The existing terminal sweep becomes a gust crossing the card. Same element,
   same keyframe, same duration — only the colours move from July's cyan and
   hotpink to this month's wool white and a breath of the anchor red. */
body[data-theme-id="march"] .breadcrumb-nav::before {
  background: linear-gradient(
    90deg,
    transparent,
    rgba(239, 231, 210, 0.62),
    rgba(184, 32, 31, 0.1),
    transparent
  );
}

/* The tooltip floats on <body>, outside the card. This month has a real rainbow
   palette, so its border-image frame stands as written in main.css and only the
   drop shadow is retuned — a 0.45-alpha black halo is a dark-theme value and
   reads as soot on a fleece ground. */
body[data-theme-id="march"] .celestial-tooltip {
  background: var(--mar-card);
  box-shadow: 0 6px 22px rgba(32, 27, 24, 0.18);
}

/* ---------------------------------------------------------------------------
   THE SKY. One fixed element carrying the whole front, painted top layer first:

     1  god-rays        the light shafts thrown by the tear in the cloud
     2  the tear        the mane's hot core, breaking through at upper left
     3  lit shoulders   sun catching the tops of the nearer cloud
     4-6 thunderheads   three masses, drawn in --mar-storm-core at varying alpha
     7  the front       slate → overcast → fleece → wool, top to bottom

   Layers 1-3 and 7's lower half are light-adding; layers 4-6 are painted in the
   floor colour itself. Neither kind can take a pixel below #b6bcca, which is
   the invariant the whole palette was measured against.

   The rays are a repeating-conic-gradient whose origin sits just off the top
   left corner of the viewport, so only the down-and-right sector is ever
   visible and the fan reads as shafts raking across the page. There is no mask
   on it and none is needed: the alpha is low enough (0.13 / 0.08) that the
   shafts pass over the fleece end as light rather than as lines.

   All static, all no-repeat. This is the first frame and the final frame. */
body[data-theme-id="march"] .night-sky {
  background-color: var(--mar-fleece);
  background-image:
    /* 1. THE FADE. A conic gradient has no falloff — it paints its rays to the
          far corner of the element at full strength — so shafts thrown from the
          top left corner reach the bottom of the page as hard cream stripes and
          take the whole design over. That is what this layer exists to stop.

          It cannot be done with a mask: .night-sky is a fixed element whose
          children animate by transform, and a mask on it would ride along with
          them. So the fade is painted instead, as the TOPMOST background layer:
          transparent over the storm, ramping to solid fleece by the time it
          reaches the lamb end. It doubles as the organising lion-to-lamb ramp,
          and every value in it is far lighter than the floor, so it cannot cost
          a single point of contrast. */
    linear-gradient(
      180deg,
      transparent 0 32%,
      rgba(236, 231, 219, 0.34) 46%,
      rgba(240, 231, 210, 0.78) 60%,
      #f0e7d2 76%,
      #efe7d2 100%
    ),
    /* 2. The shafts themselves, thrown from the tear. Warm cream, kept low and
          spaced wide so that where they DO show, over the storm, they read as
          light in the air rather than as stripes on the page. */
    repeating-conic-gradient(
      from 96deg at 12% -8%,
      rgba(245, 230, 197, 0.19) 0deg 1.9deg,
      transparent 1.9deg 5.6deg,
      rgba(238, 231, 210, 0.11) 5.6deg 6.9deg,
      transparent 6.9deg 12.4deg
    ),
    /* 2. the tear in the bank: the lion's mane, burning through the cloud. */
    radial-gradient(
      circle var(--mar-sun-r) at 12% -8%,
      rgba(242, 232, 196, 0.95) 0 9%,
      rgba(255, 232, 175, 0.66) 26%,
      rgba(255, 222, 158, 0.3) 48%,
      rgba(255, 216, 150, 0.1) 66%,
      transparent 82%
    ),
    /* 3. lit shoulders — cream catching the top of the nearer cloud bank. */
    radial-gradient(ellipse 26rem 5rem at 30% 4%, rgba(243, 231, 202, 0.62), transparent 68%),
    radial-gradient(ellipse 18rem 3.5rem at 57% 13%, rgba(240, 231, 209, 0.34), transparent 70%),
    /* The rim of light along the UNDERSIDE of the bank. Without it the cloud
       has a top and no bottom, and the whole storm dissolves into an even wash;
       one thin lit edge is what tells the eye where the weather stops. */
    radial-gradient(ellipse 42rem 1.1rem at 64% 27%, rgba(239, 231, 210, 0.55), transparent 74%),
    radial-gradient(ellipse 22rem 0.8rem at 18% 31%, rgba(240, 231, 210, 0.38), transparent 76%),
    /* 4-6. The cloud banks. Hard shoulders: each mass holds full alpha out to a
            stated stop and then falls off fast, so the bank has an EDGE. A soft
            centre-to-transparent ramp is what turned this into fog last time.
            Drawn only in the two storm colours, so the floor holds. */
    radial-gradient(
      ellipse 44rem 13rem at 76% -3%,
      var(--mar-storm-bruise) 0 44%,
      rgba(200, 184, 177, 0.72) 63%,
      rgba(200, 184, 177, 0.2) 80%,
      transparent 92%
    ),
    radial-gradient(
      ellipse 32rem 9.5rem at 33% 6%,
      var(--mar-storm-core) 0 40%,
      rgba(197, 186, 178, 0.68) 62%,
      rgba(197, 186, 178, 0.18) 81%,
      transparent 93%
    ),
    radial-gradient(
      ellipse 24rem 7rem at 58% 19%,
      rgba(200, 184, 177, 0.86) 0 36%,
      rgba(200, 184, 177, 0.42) 61%,
      transparent 86%
    ),
    radial-gradient(
      ellipse 30rem 6rem at 6% 24%,
      rgba(197, 186, 178, 0.7) 0 34%,
      rgba(197, 186, 178, 0.24) 62%,
      transparent 88%
    ),
    /* 7. The front. The top third sits at the storm's own value rather than a
          pale grey — a bank of cloud only reads as weather if the sky it covers
          is already the weather's colour. The firmer step at 52% → 58% is the
          squall line: it is the height both rain curtains stop on, so their
          bottom edge lands on a real feature instead of cutting open sky. */
    linear-gradient(
      180deg,
      #c7bfb7 0%,
      #c9c1ba 15%,
      #ccc6c2 29%,
      #d4cdc1 41%,
      #d9d2c6 52%,
      #e1ddd2 58%,
      #eae5d9 70%,
      #f0e7d2 84%,
      #f0e7d2 100%
    );
  background-repeat: no-repeat;
}

/* ---------------------------------------------------------------------------
   THE FLEECE. .night-sky::before is the wool nap, and it is deliberately laid
   over the WHOLE page rather than only the lamb end: the fleece is the paper
   the storm is printed on, which is what ties the two halves into one image
   instead of two stacked pictures.

   The nap has to be FLECKS, not blobs. A soft radial whose falloff reaches the
   edge of its own tile touches its neighbours on all four sides, and the moment
   it does the eye stops seeing wool and starts seeing quilting — a grid of
   blurry squares over the whole page, which is exactly what the first pass of
   this theme shipped. So every puff here dies well inside its tile (transparent
   by 34-40% of a tile that is 9-16rem across), the tiles share no common
   factor, and the alpha is roughly a fifth of what it was. What is left reads
   as a faint mottle in the paper.

   Warm and cold whites only — every value is lighter than whatever it covers,
   so this layer can only raise contrast. July's star drift and twinkle are both
   switched off: wool does not move.
   --------------------------------------------------------------------------- */
body[data-theme-id="march"] .night-sky::before {
  inset: 0;
  opacity: 1;
  background-image:
    radial-gradient(circle at 34% 40%, rgba(242, 230, 210, 0.16) 0 9%, rgba(242, 230, 210, 0.06) 22%, transparent 36%),
    radial-gradient(circle at 72% 67%, rgba(238, 232, 210, 0.12) 0 7%, transparent 30%),
    radial-gradient(circle at 14% 79%, rgba(242, 230, 210, 0.09) 0 6%, transparent 26%);
  background-size: 9.5rem 7.75rem, 16.25rem 12.5rem, 6.75rem 5.25rem;
  background-position: 0 0, 3.4rem 2.1rem, 1.6rem 0.9rem;
  background-repeat: repeat;
  animation: none;
}

/* ---------------------------------------------------------------------------
   THE SQUALL — two depths on the two star layers that already existed, both
   confined to the lion end of the page and both stopping on the sky's own
   squall line. Motion is the difference between the two halves: the top of the
   page is weather, the bottom is still.

     --near   the near wind, combing the cloud tops left to right. Long tapered
              streaks, all on 20rem-wide tiles, travelling exactly 20rem per
              loop so the comb restarts with no seam. Occupies the top 38%.
     --far    the rain behind it, falling. Thin vertical streaks on tiles that
              are all 12rem tall, travelling exactly 12rem per loop. Occupies
              the top 54%.

   The rain SLANTS by carrying a constant skewX(-15deg) through both keyframe
   steps: the skew never animates, it just shears the tile so a vertical streak
   renders as a driven one, and it shears the translate vector with it so the
   drops fall down-and-across. Because the shear is constant and the travel is
   exactly one tile in element space, the loop is still seamless. That is also
   why the element is inset -14rem horizontally — the shear pushes content
   sideways by height × tan(15°), and .night-sky clips the overhang.

   Everything is white on slate, so the squall is light-adding like the rest of
   the sky. Transform only: no filter, no background-position animation, no
   layout property touched.
   --------------------------------------------------------------------------- */
body[data-theme-id="march"] .night-sky__stars--near {
  inset: -6rem -6rem var(--mar-squall-near) -6rem;
  opacity: 0.72;
  background-image:
    radial-gradient(ellipse 6.5rem 0.09rem at 22% 28%, rgba(242, 230, 210, 0.66) 0 44%, transparent 100%),
    radial-gradient(ellipse 9.5rem 0.075rem at 64% 61%, rgba(239, 231, 210, 0.5) 0 44%, transparent 100%),
    radial-gradient(ellipse 4.2rem 0.11rem at 86% 15%, rgba(242, 230, 210, 0.58) 0 42%, transparent 100%),
    radial-gradient(ellipse 7.8rem 0.08rem at 41% 82%, rgba(242, 230, 210, 0.44) 0 44%, transparent 100%);
  background-size: 20rem 6.5rem, 20rem 9.5rem, 20rem 13.5rem, 20rem 17.5rem;
  background-position: 0 0, 5rem 2rem, 11rem 4rem, 3rem 7rem;
  background-repeat: repeat;
  animation: marchWindComb 7.5s linear infinite;
}

body[data-theme-id="march"] .night-sky__stars--far {
  inset: -6rem -14rem var(--mar-squall-far) -14rem;
  opacity: 0.82;
  background-image:
    radial-gradient(ellipse 0.75px 13px at 26% 20%, rgba(242, 230, 210, 0.82) 0 42%, transparent 100%),
    radial-gradient(ellipse 0.75px 17px at 68% 63%, rgba(242, 230, 210, 0.68) 0 40%, transparent 100%),
    radial-gradient(ellipse 0.6px 10px at 43% 86%, rgba(242, 230, 210, 0.58) 0 44%, transparent 100%),
    radial-gradient(ellipse 0.85px 21px at 84% 35%, rgba(242, 230, 210, 0.54) 0 38%, transparent 100%);
  background-size: 3.25rem 12rem, 4.75rem 12rem, 6.5rem 12rem, 9rem 12rem;
  background-position: 0 0, 1.4rem 0, 3.1rem 0, 0.6rem 0;
  background-repeat: repeat;
  animation: marchRainDrive 2.4s linear infinite;
}

/* ---------------------------------------------------------------------------
   THE SHOOTS — the ground element. .night-sky__aurora is July's city skyline
   and belongs to July alone; every other month either hides it or repurposes it
   as natural scenery. March turns it into the first green coming up through
   last year's straw, which is the lamb end's only piece of hard geography.

   Drawn as a fringe rather than a lawn: two repeating-linear-gradient blade
   passes leaning against each other at 82° and 98°, a few radial tufts standing
   proud of them, and a bleached turf gradient underneath. The blades are
   confined to a 1.5rem strip at the TOP of the band, so the bulk of the band
   stays solid pale turf — a footer line sits on #bec596 (ink 9.40 : 1, links
   5.26 : 1) and only ever crosses a 1px blade, never a dark field.

   July's skyline clip-path and its magenta horizon glow are both cleared.
   --------------------------------------------------------------------------- */
body[data-theme-id="march"] .night-sky__aurora {
  display: block;
  z-index: 2;
  left: -2%;
  right: -2%;
  bottom: -1px;
  inset-block-start: auto;
  height: var(--mar-turf-h);
  clip-path: none;
  box-shadow: none;
  background-color: var(--mar-turf);
  background-image:
    /* Three tufts standing proud of the fringe. Each one gets an explicit tile
       WIDTH rather than `auto`: a gradient sized auto fills the whole band, and
       a `left 6%` offset against a full-width layer resolves to zero, so the
       three would silently ignore their placement and stack wherever their own
       gradient centre fell. Sized tiles make the placement real. */
    radial-gradient(ellipse 0.8rem 1.3rem at 50% 100%, rgba(61, 107, 31, 0.3) 0 50%, transparent 68%),
    radial-gradient(ellipse 0.62rem 1.05rem at 50% 100%, rgba(47, 84, 23, 0.26) 0 50%, transparent 68%),
    radial-gradient(ellipse 0.95rem 1.5rem at 50% 100%, rgba(61, 107, 31, 0.24) 0 50%, transparent 68%),
    /* The fringe: three blade passes leaning against each other. Two passes on
       their own comb up into an even picket fence — the periods here (15 / 25 /
       37px) share no common factor, so the blades bunch and thin the way real
       new growth does, and the whole fringe is under a rem tall so the band
       stays mostly open turf under the footer. */
    repeating-linear-gradient(
      82deg,
      transparent 0 7px,
      rgba(61, 107, 31, 0.3) 7px 8px,
      transparent 8px 15px
    ),
    repeating-linear-gradient(
      97deg,
      transparent 0 11px,
      rgba(47, 84, 23, 0.26) 11px 12px,
      transparent 12px 25px
    ),
    repeating-linear-gradient(
      88deg,
      transparent 0 17px,
      rgba(61, 107, 31, 0.22) 17px 19px,
      transparent 19px 37px
    ),
    /* Bleached turf, straw at the foot. The top stop is --mar-turf at zero alpha
       rather than the keyword `transparent`: `transparent` is rgba(0,0,0,0), so
       interpolating from it drags the ramp through grey and leaves a dirty band
       across the top of the shoot line. */
    linear-gradient(180deg, rgba(210, 214, 182, 0) 0%, var(--mar-turf) 34%, var(--mar-turf-deep) 100%);
  background-size:
    3.4rem 1.3rem,
    2.6rem 1.05rem,
    4.2rem 1.5rem,
    100% 0.95rem,
    100% 0.8rem,
    100% 0.7rem,
    100% 100%;
  background-position:
    left 8% bottom 0,
    left 46% bottom 0,
    left 76% bottom 0,
    left top,
    left top,
    left top,
    left top;
  background-repeat: no-repeat, no-repeat, no-repeat, repeat-x, repeat-x, repeat-x, no-repeat;
}

/* Fireworks are Independence Day furniture: July theme only. The JS also refuses
   to spawn them off-July, so this is belt-and-braces for any burst already on
   screen when the theme is switched. */
body[data-theme-id="march"] .night-sky__fireworks {
  display: none;
}

/* ---------------------------------------------------------------------------
   Header and brand.
   --------------------------------------------------------------------------- */

/* The wordmark takes the anchor red, so the first thing on every page is the
   month's red. On the storm ground it measures 3.6 : 1 and the type is
   2.8–5.75rem, well past the large-text threshold. The neon triple-glow is
   swapped for a mane bloom over a wool lift: a warm halo behind the letters and
   a single hairline of white under them, which is what backlit lettering
   actually does on an overcast day. */
body[data-theme-id="march"] .brand a {
  color: var(--mar-red);
  text-shadow:
    0 1px 0 rgba(242, 230, 210, 0.7),
    0 0 18px rgba(217, 180, 94, 0.55),
    0 0 44px rgba(216, 52, 44, 0.16);
}

body[data-theme-id="march"] .brand a:hover {
  color: var(--mar-red-lit);
  text-shadow:
    0 1px 0 rgba(242, 230, 210, 0.8),
    0 0 22px rgba(217, 180, 94, 0.7),
    0 0 52px rgba(216, 52, 44, 0.24);
}

/* The eyebrow is the little strip of weather bulletin over the hero. */
body[data-theme-id="march"] .eyebrow {
  letter-spacing: 0.3em;
  text-shadow: none;
}

/* ---------------------------------------------------------------------------
   HEADINGS — the condensed grotesque, leaning into the wind.
   --------------------------------------------------------------------------- */

/* Every heading, including the markdown H1, moves off the cursive and onto the
   condensed stack. Condensed sets narrower than the humanist sans it replaces,
   so the tracking comes in tight rather than out wide — the opposite move to
   September's engraved caps, and the reason the two months do not read alike.

   The separation from the busy sky behind is a white drop-shadow, and it has to
   be a FILTER rather than a text-shadow: these letters are painted with
   background-clip: text, and a text-shadow renders in the text phase, on top of
   the clipped gradient, which would bury the rainbow under a flat slab. A
   drop-shadow() reads the composited alpha instead, so the white lands behind
   the letterforms where it belongs. Two stops: a tight one that cuts the glyph
   out of the cloud, and a wider soft one that lifts it. */
body[data-theme-id="march"] main h1,
body[data-theme-id="march"] .page-title,
body[data-theme-id="march"] main h2,
body[data-theme-id="march"] main h3,
body[data-theme-id="march"] main h4,
body[data-theme-id="march"] main h5,
body[data-theme-id="march"] main h6,
body[data-theme-id="march"] .markdown-page .heading-section__trigger {
  font-family: var(--font-heading);
  font-style: normal;
  font-weight: 700;
  letter-spacing: -0.015em;
  text-shadow: none;
  /* `var(--heading-tint)` first: it is the site-wide per-level heading ladder
     from main.css, and `filter` replaces rather than accumulates, so a rule
     that omits it drops the ladder for this whole sheet. */
  filter:
    var(--heading-tint)
    drop-shadow(0 1px 0 rgba(242, 230, 210, 0.78))
    drop-shadow(0 2px 6px rgba(242, 230, 210, 0.5));
}

/* Condensed carries more characters per line, so the display sizes go UP rather
   than down. The trigger selectors are stated explicitly because main.css sizes
   those at (0,3,0) and would otherwise outrank a bare `main h1`. */
body[data-theme-id="march"] main h1,
body[data-theme-id="march"] .page-title,
body[data-theme-id="march"] .heading-section--level-1 > .heading-section__summary > .heading-section__trigger {
  font-size: clamp(2.7rem, 7.6vw, 5.2rem);
  letter-spacing: -0.028em;
}

body[data-theme-id="march"] main h2,
body[data-theme-id="march"] .heading-section--level-2 > .heading-section__summary > .heading-section__trigger {
  font-size: clamp(1.85rem, 4.4vw, 2.85rem);
}

body[data-theme-id="march"] main h3,
body[data-theme-id="march"] .heading-section--level-3 > .heading-section__summary > .heading-section__trigger {
  font-size: clamp(1.3rem, 2.6vw, 1.72rem);
  letter-spacing: 0;
}

/* The wind-rake under an H2: a short bar in the structural border palette,
   left-aligned so it trails off the way a gust does. It is drawn from
   --tt-heading-rainbow rather than a one-off gradient, because every visible
   rule in the project comes from that one palette. */
body[data-theme-id="march"] main h2::after {
  content: "";
  display: block;
  width: min(13rem, 44%);
  height: 2px;
  margin: 0.5rem 0 0;
  background: var(--tt-heading-rainbow);
  opacity: 0.85;
}

/* The section rails keep their rainbow but lose July's cyan filament halo — a
   glow behind a 3px bar on a pale ground just muddies its edge. */
body[data-theme-id="march"] .heading-section::before,
body[data-theme-id="march"] .page-toc::before {
  box-shadow: none;
}

body[data-theme-id="march"] .page-toc .page-toc__title {
  letter-spacing: 0.16em;
}

/* ---------------------------------------------------------------------------
   Links. main.css leaves content links at var(--text), which on this theme is
   the body ink — so without this they would be invisible as links. They take
   the deep red. A faint red underline used to run under them at rest, added so
   they were identifiable without relying on colour alone; it is gone per the
   standing no-underline rule (2026-08-14). Nothing rendered changes by dropping
   it — link-camouflage.css already holds every link flat at rest sitewide and
   was already winning the cascade over this rule, so the underline never
   painted. See public/link-camouflage.css before adding a new non-colour rest
   cue in its place.

   Hover DARKENS rather than brightens, which is the correct direction on a
   light ground and is also what keeps the state AA: --mar-red-dark measures
   5.63 : 1 against the storm core, where the brighter reds fall under 4.5. The
   affordance the eye reads is that colour move, now that no rule is drawn
   under the word. July's looping linkHotpinkGlow is switched off outright — a
   continuous animation on every hovered link is not a cost this project pays.
   --------------------------------------------------------------------------- */
body[data-theme-id="march"] main a {
  color: var(--mar-red-deep);
}

/* Hover colour is --link-hover, standing user rule 2026-08-14: #FF465A on
   every theme. --mar-red-dark's own 5.63:1-on-the-storm-core measurement no
   longer applies to this state — see the per-theme contrast note in
   DUH/rules/presentation.md. */
body[data-theme-id="march"] a:hover,
body[data-theme-id="march"] a:focus-visible {
  color: var(--link-hover);
  text-decoration: none;
  text-shadow: 0 0 14px rgba(217, 180, 94, 0.45);
  animation: none;
}

/* Visited links go to the storm bruise — 4.51 : 1 on the storm core, so a read
   link is still AA everywhere it can land. July's dark triple-glow is dropped;
   it was drawn to separate purple from a near-black page and does nothing here. */
body[data-theme-id="march"] a:visited {
  color: var(--mar-bruise);
  text-shadow: none;
}

/* ---------------------------------------------------------------------------
   Surfaces. Everything below already had a fill or a frame in main.css; each
   one is retuned for daylight. Nothing gains a background it did not already
   have — the single shared site background stands, and the breadcrumb bar
   remains its only exception.
   --------------------------------------------------------------------------- */

/* Paper, not glass: a warm white wash so code and fields read as an inset sheet
   on the fleece rather than as a dark well. Inline <code> is left without the
   inner lip on purpose — an inline box fragments across line breaks and a
   hairline would break with it. */
body[data-theme-id="march"] input,
body[data-theme-id="march"] textarea,
body[data-theme-id="march"] select,
body[data-theme-id="march"] code,
body[data-theme-id="march"] pre {
  background: rgba(242, 230, 210, 0.66);
  color: var(--mar-ink);
}

body[data-theme-id="march"] input,
body[data-theme-id="march"] textarea,
body[data-theme-id="march"] select,
body[data-theme-id="march"] pre {
  box-shadow: inset 0 1px 2px rgba(32, 27, 24, 0.08);
}

/* A code block is one sheet, not one per line: the wash belongs to the <pre>
   and the <code> inside it stays clear. Stated explicitly because the rule
   above outranks main.css's `pre code`. */
body[data-theme-id="march"] pre code {
  background: transparent;
  box-shadow: none;
}

/* The table header is the anchor red carrying wool type at 6.12 : 1, tracked
   and capped like a printed weather table. */
body[data-theme-id="march"] th {
  background: var(--mar-red);
  color: #f2e6d2;
  font-family: var(--font-heading);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

/* mark is a highlighter here rather than glowing text — a bloom on a light
   ground is invisible. Straw wash, ink on top, 11 : 1. */
body[data-theme-id="march"] mark {
  background: rgba(217, 180, 94, 0.45);
  color: var(--mar-ink);
  text-shadow: none;
}

/* No left rule on quotes — border-left in this project is reserved for <a>
   elements inside ul/ol and nothing else. The inset wash just moves from July's
   green to this month's mane gold. */
body[data-theme-id="march"] blockquote {
  color: var(--mar-ink-soft);
  box-shadow: inset 1rem 0 1.4rem -1.2rem rgba(160, 106, 16, 0.55);
}

/* Cards keep their rainbow frame and swap July's purple bloom for a real cast
   shadow, which is what an object on a lit page has. */
body[data-theme-id="march"] .hero-card,
body[data-theme-id="march"] .folder-section {
  box-shadow: 0 1px 3px rgba(32, 27, 24, 0.07), 0 6px 18px rgba(32, 27, 24, 0.05);
}

body[data-theme-id="march"] .hero-card:hover,
body[data-theme-id="march"] .folder-section:hover {
  box-shadow: 0 2px 6px rgba(32, 27, 24, 0.1), 0 12px 28px rgba(32, 27, 24, 0.09);
}

/* Trim. Selected by CLASS, never by element: the zodiac strip ran mixed — <a
   href> signs beside a <button> moon — so an element-qualified `button` or `a`
   rule in this sheet would land on half a row of chips and put a box or a
   shadow on it. All eight are anchors since the moon got its lunar calendar
   note, so a bare `a` rule now reaches the whole strip instead of half of it —
   no better. Every month sheet that has ever framed the chips did it this way. */
body[data-theme-id="march"] .time-bar,
body[data-theme-id="march"] .sitemap-link {
  box-shadow: inset 0 1px 0 rgba(242, 230, 210, 0.8), 0 1px 2px rgba(32, 27, 24, 0.06);
  text-shadow: none;
}

body[data-theme-id="march"] .sitemap-link:hover,
body[data-theme-id="march"] .sitemap-link:focus-visible {
  color: var(--mar-red-deep);
  box-shadow: inset 0 1px 0 rgba(242, 230, 210, 0.9), 0 2px 8px rgba(184, 32, 31, 0.16);
}

body[data-theme-id="march"] .time-bar {
  letter-spacing: 0.14em;
}

/* Belt-and-braces, per the permanent note on .celestial-chip in main.css: the
   chips carry no border, no ring and no box halo under any theme. Their entire
   hover/focus affordance is the halo cast from --zodiac-glow above, which is
   drawn on the GLYPH and therefore traces the shape of a ♌ or an ogham stave
   instead of boxing it. This pin exists so no future rule in this sheet can
   reach them by accident.

   transform is deliberately NOT restated here. October and November pin the
   chips flat because that is their chrome; March lets them lift like every
   other month, and leaving transform alone is what lets the reduced-motion
   block in main.css cancel that lift at its own weight. */
body[data-theme-id="march"] .celestial-chip,
body[data-theme-id="march"] .celestial-chip:hover,
body[data-theme-id="march"] .celestial-chip:focus-visible {
  border: 0;
  box-shadow: none;
  outline: none;
}

/* The footer sits over the shoot band, where the muted grey measures 5.06 : 1 —
   passing, but the ink is the better call over turf and straw. */
body[data-theme-id="march"] footer {
  color: var(--mar-ink-soft);
  letter-spacing: 0.1em;
}

/* Calendar chrome: main.css hovers these into a cyan wash, which is a
   dark-theme value and lands as a cold smear on fleece. Warm wash, red type. */
body[data-theme-id="march"] .calendar-app__nav:hover,
body[data-theme-id="march"] .calendar-app__today:hover,
body[data-theme-id="march"] .calendar-app__nav:focus-visible,
body[data-theme-id="march"] .calendar-app__today:focus-visible {
  background: rgba(184, 32, 31, 0.1);
  color: var(--mar-red-deep);
}

/* The scrollbar is the last piece of trim: moss rail, red on the way past. */
body[data-theme-id="march"]::-webkit-scrollbar-thumb:hover,
body[data-theme-id="march"] ::-webkit-scrollbar-thumb:hover {
  background-color: var(--mar-red);
}

/* ---------------------------------------------------------------------------
   Responsive. The scenery is driven by four custom properties precisely so this
   block can stay short: the squall curtains come down the page (a phone holds
   far less sky, so a 38% curtain would swallow the header), the sunburst
   tightens, and the shoot band shrinks so it never crowds the footer. Heading
   tracking opens back up — condensed type at a small size needs the air.
   --------------------------------------------------------------------------- */
@media (max-width: 800px) {
  body[data-theme-id="march"] {
    --mar-squall-near: 70%;
    --mar-squall-far: 56%;
    --mar-turf-h: clamp(2rem, 6vh, 3.2rem);
    --mar-sun-r: 14rem;
  }

  body[data-theme-id="march"] main h1,
  body[data-theme-id="march"] .page-title,
  body[data-theme-id="march"] .heading-section--level-1 > .heading-section__summary > .heading-section__trigger {
    letter-spacing: -0.018em;
  }

  body[data-theme-id="march"] main h2,
  body[data-theme-id="march"] main h3 {
    letter-spacing: 0;
  }

  body[data-theme-id="march"] main h2::after {
    width: min(8rem, 52%);
  }

  /* Half the rain, half the fill rate, same picture. A phone GPU compositing a
     full-screen sheared layer at 2.4s is the most expensive thing on this page,
     and two streak passes read as rain just as well as four. */
  body[data-theme-id="march"] .night-sky__stars--far {
    background-image:
      radial-gradient(ellipse 0.6px 13px at 30% 22%, rgba(242, 230, 210, 0.58) 0 42%, transparent 100%),
      radial-gradient(ellipse 0.6px 17px at 72% 66%, rgba(242, 230, 210, 0.46) 0 40%, transparent 100%);
    background-size: 4.75rem 12rem, 7.5rem 12rem;
  }

  body[data-theme-id="march"] .night-sky__stars--near {
    background-image:
      radial-gradient(ellipse 5.5rem 0.09rem at 24% 30%, rgba(242, 230, 210, 0.6) 0 44%, transparent 100%),
      radial-gradient(ellipse 8rem 0.075rem at 66% 63%, rgba(239, 231, 210, 0.46) 0 44%, transparent 100%);
    background-size: 20rem 8.5rem, 20rem 13.5rem;
  }
}

/* ---------------------------------------------------------------------------
   Reduced motion. Month blocks set their ambient motion on higher-specificity
   selectors than the generic .night-sky rules in main.css, so they need their
   own entry here or the travel keeps running.

   The squall stops where it stands. Every streak, tuft, ray and nap layer is
   still painted, so the first and final frame is the complete picture and only
   the movement is removed — a March sky with the wind held still, which is
   exactly what the static first frame already looked like.
   --------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  body[data-theme-id="march"] .night-sky::before,
  body[data-theme-id="march"] .night-sky__stars--far,
  body[data-theme-id="march"] .night-sky__stars--near,
  body[data-theme-id="march"] .night-sky__aurora {
    animation: none !important;
    transform: none !important;
  }

  /* The rain keeps its slant with the travel removed: dropping the shear too
     would leave the drops standing vertically, which is a different picture
     rather than the same one paused. */
  body[data-theme-id="march"] .night-sky__stars--far {
    transform: skewX(-15deg) !important;
  }

  body[data-theme-id="march"] a:hover,
  body[data-theme-id="march"] a:focus-visible {
    animation: none;
  }
}

/* ---------------------------------------------------------------------------
   Reduced data. Same stop on the motion, plus the two layers that actually cost
   fill rate are cut back: the repeating-conic god-rays come out of the sky
   (a full-viewport conic is the single most expensive paint in this theme) and
   the squall drops to one streak pass each. What is left is still recognisably
   a storm clearing into fleece, at a fraction of the paint.
   --------------------------------------------------------------------------- */
@media (prefers-reduced-data: reduce) {
  body[data-theme-id="march"] .night-sky::before,
  body[data-theme-id="march"] .night-sky__stars--far,
  body[data-theme-id="march"] .night-sky__stars--near,
  body[data-theme-id="march"] .night-sky__aurora {
    animation: none;
    transform: none;
  }

  body[data-theme-id="march"] .night-sky {
    background-image:
      radial-gradient(
        circle var(--mar-sun-r) at 12% -8%,
        rgba(242, 232, 196, 0.95) 0 9%,
        rgba(255, 232, 175, 0.6) 28%,
        rgba(255, 222, 158, 0.2) 52%,
        transparent 78%
      ),
      radial-gradient(
        ellipse 44rem 13rem at 76% -3%,
        var(--mar-storm-bruise) 0 44%,
        rgba(200, 184, 177, 0.6) 66%,
        transparent 90%
      ),
      linear-gradient(
        180deg,
        #c7bfb7 0%,
        #c9c1ba 15%,
        #ccc6c2 29%,
        #d4cdc1 41%,
        #d9d2c6 52%,
        #e1ddd2 58%,
        #eae5d9 70%,
        #f0e7d2 100%
      );
  }

  body[data-theme-id="march"] .night-sky::before {
    background-image:
      radial-gradient(circle at 34% 40%, rgba(242, 230, 210, 0.14) 0 9%, transparent 34%);
    background-size: 9.5rem 7.75rem;
  }

  body[data-theme-id="march"] .night-sky__stars--far {
    background-image:
      radial-gradient(ellipse 0.6px 15px at 44% 40%, rgba(242, 230, 210, 0.5) 0 42%, transparent 100%);
    background-size: 6rem 12rem;
    transform: skewX(-15deg);
  }

  body[data-theme-id="march"] .night-sky__stars--near {
    background-image:
      radial-gradient(ellipse 7.5rem 0.085rem at 40% 46%, rgba(242, 230, 210, 0.5) 0 44%, transparent 100%);
    background-size: 20rem 11rem;
  }

  body[data-theme-id="march"] a:hover,
  body[data-theme-id="march"] a:focus-visible {
    animation: none;
  }
}

/* ===========================================================================
   MARCH BY NIGHT — the counterpart lighting.

   Everything above is March's canonical state and is untouched: a body with no
   data-mode is still the lion-to-lamb front in daylight, which is what the
   server sends and what a reader with JS off keeps for good. Every selector
   below carries the second attribute as well, so it lands at (0,2,x) against
   the base's (0,1,x) and wins on specificity rather than on order — which
   matters, because every theme sheet in this project loads on every page.

   WHAT MARCH IS AFTER SUNDOWN. Not a dark version of the daylight picture: the
   actual event. A March squall crosses at dusk and the sky clears hard behind
   it, the temperature falls out from under the front, and frost settles onto
   the new grass that came up that afternoon. The duality survives intact and
   only changes tense — the lion is now the storm GOING, still raining and
   still combing wind across the top of the page, and the lamb is the cleared
   sky it left behind, with the first spring stars in it and rime on the
   shoots. "In like a lion, out like a lamb" is a sentence about time, and at
   night the page finally gets to read it in that order.

   The tear in the cloud is the same hole in the same deck at the same 12% /
   -8%. What is behind it changes: the mane becomes the moon. Same geometry,
   same god-ray fan thrown from the same origin, cold instead of hot and a
   quarter of the alpha, because that is genuinely the difference between the
   two light sources.

   THE INVARIANT INVERTS EXACTLY. The daylight sheet is built under one hard
   rule — NO LAYER IS DARKER THAN --mar-storm-bruise — because the ink is dark
   and .night-sky is fixed, so every line of copy crosses every band of the
   illustration at some scroll offset. The ink is light now, so the rule flips
   with it:

     NO LAYER ANYWHERE IN .night-sky COMPOSITES LIGHTER THAN #353c4e.

   That number is measured, not chosen: it is a moonray crossing the tear at
   the top left, which is the brightest overlap the scene can produce. There,
   --mar-muted measures 4.68:1, links 5.02:1, body ink 9.73:1, and the
   structural red 3.63:1 — the same two-tier treatment of red the daylight
   block uses, where --mar-red carries borders and large type and --mar-red-deep
   carries anything set as prose. The single brightest LAYER is --mar-storm-lit
   at #333a4a and nothing is painted above it.

   The consequence worth spelling out: rain, wind, moonrays and the wool nap
   are all light-ADDING, and by day that could only raise contrast, which is
   why the daylight block could be generous with them. At night light-adding is
   the dangerous direction, so every one of those alphas comes down hard and
   the nap changes sign outright and is painted dark. Two things are still
   allowed above the cap because they are marks and never fields — the frost
   edge on the blades and the rain streaks themselves are hairlines. The
   daylight block makes the same allowance for its 1px blades under the footer.

   NO NEW MOTION. Not one animation, duration, keyframe or skew is restated
   below. The rain still drives on marchRainDrive and the wind still combs on
   marchWindComb, at the same speeds over the same tiles, carrying the same
   constant skewX(-15deg); only their colour changes, because it is still
   raining. Leaving `animation` and `transform` untouched is also what keeps
   the reduced-motion block above working — it cancels travel at (0,2,x) with
   !important, and a night rule restating either property would fight it.
   =========================================================================== */
body[data-theme-id="march"][data-mode="night"] {
  /* ---- Ink, inverted ---------------------------------------------------
     Measured against #353c4e (the brightest composite in the night scene) and
     against --mar-fleece (the darkest):
       --mar-ink       9.73 : 1  →  17.7 : 1
       --mar-ink-soft  6.58 : 1  →  11.9 : 1
       --mar-muted     4.68 : 1  →   8.5 : 1
     All three clear AA body text at BOTH ends, which is the same reason the
     luminance band is kept narrow in this mode as in the other. */
  --mar-ink: #f2e6d2;
  --mar-ink-soft: #cec7c0;
  --mar-muted: #b1a79f;

  /* ---- The lion at night -----------------------------------------------
     Red is the standing anchor in both modes and it still leads every gradient
     and frames the card. The two-tier split is preserved exactly, only the
     legible direction is now UP rather than down:
       --mar-red        3.63 : 1 on the brightest composite   (borders, large type)
       --mar-red-deep   5.02 : 1                              (links, AA everywhere)
       --mar-red-dark   6.47 : 1                              (link hover)
       --mar-red-lit    4.34 : 1                              (brand hover, illustration) */
  --mar-red: #ff5c5b;
  --mar-red-deep: #ff8f8e;
  --mar-red-dark: #ffb3b3;
  --mar-red-lit: #ff7a72;

  /* Mane. The tear is lit by the moon now, but the CARD is still lit by the
     month: the lion end of the breadcrumb bar keeps its tawny wash, so these
     stay warm and simply come up to lamp weight.
       --mar-mane-deep 5.63   --mar-mane 6.62   --mar-tawny 6.15 */
  --mar-mane-deep: #dcb45e;
  --mar-mane: #eec27a;
  --mar-straw: #f5dfa6;
  --mar-ember: #f08a55;
  --mar-tawny: #e2bd6b;

  /* ---- The lamb at night ------------------------------------------------
     Supporting cast only, never dominant over the red, exactly as by day. Each
     still clears the 3 : 1 the daylight block sets for a heading stop, and all
     six clear 4.5 :
       --mar-shoot-deep 5.37   --mar-bruise 4.50   --mar-slate 4.59
       --mar-moss       5.14   --mar-rose   4.71   --mar-shoot 6.42 */
  --mar-shoot-deep: #8fc464;
  --mar-shoot: #a3d478;
  --mar-moss: #9eb88b;
  --mar-slate: #b7a487;
  --mar-bruise: #c89d8c;
  --mar-rose: #f88b8a;

  /* ---- Scenery ----------------------------------------------------------
     The same luminance ladder, lion to lamb, turned over. --mar-storm-lit is
     now the CEILING the whole palette was measured against, the way
     --mar-storm-bruise is the floor above. The two cloud colours still sit at
     effectively one luminance and differ only in hue — cold blue-slate and a
     violet bruise — which is what lets the bank have internal form without any
     of it going bright. --mar-turf is the shoot band with the night's frost on
     it: the footer's ink measures 8.70 : 1 there and its links 6.65 : 1. */
  --mar-storm-core: #312921;
  --mar-storm-bruise: #35251e;
  --mar-storm: #312b26;
  --mar-storm-lit: #403932;
  --mar-overcast: #2e2b23;
  --mar-fleece: #19140b;
  /* Link-hover re-paired to THIS block's ground (standing rule 2026-08-14).
     #12141b is dark: #FF465A clears 5.50:1 here. */
  --link-hover: #FF4947;
  --mar-wool: #221d1a;
  --mar-card: #201b18;
  --mar-turf: #212c1c;
  --mar-turf-deep: #1a2316;

  /* All three gradients, --border and every hairline in the theme are declared
     in the base block as var() chains onto the tokens above, so re-pointing
     them re-lights the entire frame system, the section rails and the heading
     spectrum for free. None of them is restated here, and none should be. */

  --tt-bg-alt: #231e1b;
  /* Night has bloom, and a card in the dark is a lit instrument rather than a
     printed one, so the breadcrumb glow comes up from the daylight whisper. */
  --tt-breadcrumb-glow: rgba(255, 92, 91, 0.4);
  /* The glyph halo inverts with the card under it. By day this is DARK,
     because March's chips are dark tawny glyphs on a near-white card and a
     light halo there is invisible; at night the card is dark and the halo has
     to be light or the chips lose their only hover and focus affordance. Still
     cast from text-shadow on the character and drop-shadow on the moon, so it
     traces the glyph and can never render as a box. Never a border, in either
     mode, on any theme. */
  --zodiac-glow: rgba(255, 143, 142, 0.62);
  /* Back to the :root default. A struck stroke on a dark card is lit from
     above, so the lip below the letter is black — the exact opposite of the
     value the base block sets for a fleece face. */
  --tt-engrave: 0 1px 0 rgba(0, 0, 0, 0.55);
  --border-dim: rgba(255, 92, 91, 0.3);
  --border-teal: rgba(158, 184, 139, 0.4);
  background: var(--mar-fleece);
  color: var(--mar-ink);
  color-scheme: dark;
}

/* THE WIND, at page level. body::before is the CRT scanline and a permanent
   fixture, so it is still the rake of wind across the whole pane and still
   warm-white — wind has no colour of its own and takes the light there is.
   What changes is how much of it there can be: this layer sits at z-index 5,
   ABOVE the text, and a white hairline over a near-black page subtracts far
   more contrast per unit alpha than the same line over fleece. Roughly a third
   of the daylight value keeps it felt and never read. */
body[data-theme-id="march"][data-mode="night"]::before {
  background:
    repeating-linear-gradient(
      74deg,
      transparent 0 41px,
      rgba(242, 230, 210, 0.028) 41px 42px,
      transparent 42px 97px,
      rgba(238, 232, 210, 0.018) 97px 98px,
      transparent 98px 179px
    ),
    repeating-linear-gradient(
      99deg,
      transparent 0 73px,
      rgba(242, 230, 210, 0.013) 73px 74px,
      transparent 74px 211px
    );
}

/* THE CARD. Still the one element in the project allowed a background of its
   own, still lion at the left edge and lamb at the right, still four layers in
   the same order. The wool nap is now a faint cool sheen rather than a warm
   one, the mane wash survives because the card is lit by the month rather than
   by the sky, and the cast shadow deepens: a drop shadow on fleece is a soft
   grey, and on a dark page it has to be real black to seat the card at all. */
body[data-theme-id="march"][data-mode="night"] .breadcrumb-nav {
  background:
    radial-gradient(circle at 34% 42%, rgba(245, 228, 211, 0.05) 0 5%, transparent 24%)
      0 0 / 3.1rem 2.5rem repeat,
    radial-gradient(circle at 68% 71%, rgba(245, 228, 211, 0.035) 0 4%, transparent 20%)
      0.7rem 0.4rem / 5.3rem 4.1rem repeat,
    linear-gradient(
      100deg,
      rgba(226, 189, 107, 0.2) 0%,
      rgba(226, 189, 107, 0.075) 22%,
      transparent 46%
    )
      0 0 / 100% 100% no-repeat,
    linear-gradient(180deg, #26211d 0%, var(--mar-card) 58%, #1a1512 100%)
      0 0 / 100% 100% no-repeat;
  box-shadow: 0 2px 14px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(242, 230, 210, 0.07);
}

/* The gust crossing the card. Same element, same keyframe, same duration —
   only the alpha a night reading takes. */
body[data-theme-id="march"][data-mode="night"] .breadcrumb-nav::before {
  background: linear-gradient(
    90deg,
    transparent,
    rgba(239, 231, 210, 0.18),
    rgba(255, 92, 91, 0.1),
    transparent
  );
}

/* The tooltip floats on <body>, outside the card. Its rainbow border-image
   frame stands as written in main.css and re-lights itself off the ramp; only
   the drop shadow needs restating, because a 0.18-alpha shadow tuned for
   fleece is invisible against the dark. */
body[data-theme-id="march"][data-mode="night"] .celestial-tooltip {
  box-shadow: 0 6px 24px rgba(0, 0, 0, 0.55);
}

/* ---------------------------------------------------------------------------
   THE SKY AFTER THE FRONT. The same element carrying the same seven-stage
   build, top layer first, plus one addition:

     0  stars           five pinpricks in the cleared half — the front's back
                        edge, and the only thing this mode adds to the picture
     1  the fade        transparent over the storm, solid night-fleece by the
                        lamb end, so the moonrays cannot reach the bottom
     2  moonrays        the shafts thrown by the tear, cold and a quarter alpha
     3  the tear        the moon behind the same hole in the same deck
     4  lit shoulders   moonlight catching the tops of the nearer cloud
     5  the under-rim   the one thin lit edge that tells the eye where the
                        weather stops — without it the bank has a top and no
                        bottom and the whole storm dissolves into a wash
     6-9 thunderheads   four masses, drawn only in the two storm colours
     10 the front       storm at the lion end down to night-fleece at the lamb

   The stars go FIRST, which is to say on top of everything, because the fade
   below them ramps to a solid colour by 76% and would otherwise bury the ones
   that matter most. They are pinpricks with no size or repeat, so each paints
   exactly once where it is placed, all of them below the rain curtain — a star
   over the squall is a mistake, not a subtlety, and the whole point of them is
   that the sky BEHIND the front has opened.

   The fade still exists for the same reason it does by day: a conic gradient
   has no falloff and paints its rays to the far corner at full strength, and
   it cannot be replaced by a mask because .night-sky is a fixed element whose
   children animate by transform and a mask would ride along with them. It just
   ramps to dark instead of to light — which, being darker than everything it
   covers, can only raise contrast, exactly as the daylight version can only
   raise it by being lighter.
   --------------------------------------------------------------------------- */
body[data-theme-id="march"][data-mode="night"] .night-sky {
  background-image:
    /* 0. the first spring stars, in the half the front has left */
    radial-gradient(circle at 17% 71%, rgba(245, 228, 211, 0.85) 0 0.9px, transparent 1.7px),
    radial-gradient(circle at 29% 64%, rgba(245, 228, 211, 0.6) 0 0.7px, transparent 1.4px),
    radial-gradient(circle at 52% 78%, rgba(245, 228, 211, 0.7) 0 0.8px, transparent 1.5px),
    radial-gradient(circle at 71% 67%, rgba(245, 228, 211, 0.5) 0 0.7px, transparent 1.3px),
    radial-gradient(circle at 86% 82%, rgba(245, 228, 211, 0.62) 0 0.8px, transparent 1.5px),
    /* 1. the fade, and the organising lion-to-lamb ramp */
    linear-gradient(
      180deg,
      transparent 0 32%,
      rgba(26, 22, 19, 0.34) 46%,
      rgba(25, 20, 11, 0.78) 60%,
      #1b1612 76%,
      #19140b 100%
    ),
    /* 2. moonrays. Cold, and roughly a quarter of the daylight alpha: this is
          the layer that sets the scene ceiling, because where a shaft crosses
          the tear it makes the brightest pixel on the page. */
    repeating-conic-gradient(
      from 96deg at 12% -8%,
      rgba(244, 229, 210, 0.045) 0deg 1.9deg,
      transparent 1.9deg 5.6deg,
      rgba(236, 227, 215, 0.026) 5.6deg 6.9deg,
      transparent 6.9deg 12.4deg
    ),
    /* 3. the tear in the bank — the moon, not the mane. The 9% core sits above
          the top edge of the viewport at this origin and is never seen, which
          is what lets it stay bright without costing a contrast point. */
    radial-gradient(
      circle var(--mar-sun-r) at 12% -8%,
      rgba(244, 229, 211, 0.34) 0 9%,
      rgba(232, 221, 207, 0.09) 26%,
      rgba(222, 208, 192, 0.045) 48%,
      rgba(216, 200, 182, 0.02) 66%,
      transparent 82%
    ),
    /* 4. moonlight on the tops of the nearer cloud */
    radial-gradient(ellipse 26rem 5rem at 30% 4%, rgba(236, 227, 215, 0.06), transparent 68%),
    radial-gradient(ellipse 18rem 3.5rem at 57% 13%, rgba(236, 227, 215, 0.04), transparent 70%),
    /* 5. the lit edge along the underside of the bank */
    radial-gradient(ellipse 42rem 1.1rem at 64% 27%, rgba(244, 229, 210, 0.09), transparent 74%),
    radial-gradient(ellipse 22rem 0.8rem at 18% 31%, rgba(244, 229, 210, 0.055), transparent 76%),
    /* 6-9. The cloud banks, still hard-shouldered — full value out to a stated
            stop and then a fast falloff, so each mass has an EDGE. A soft
            centre-to-transparent ramp is what turns this into fog. */
    radial-gradient(
      ellipse 44rem 13rem at 76% -3%,
      var(--mar-storm-bruise) 0 44%,
      rgba(53, 37, 30, 0.72) 63%,
      rgba(53, 37, 30, 0.2) 80%,
      transparent 92%
    ),
    radial-gradient(
      ellipse 32rem 9.5rem at 33% 6%,
      var(--mar-storm-core) 0 40%,
      rgba(49, 41, 33, 0.68) 62%,
      rgba(49, 41, 33, 0.18) 81%,
      transparent 93%
    ),
    radial-gradient(
      ellipse 24rem 7rem at 58% 19%,
      rgba(53, 37, 30, 0.86) 0 36%,
      rgba(53, 37, 30, 0.42) 61%,
      transparent 86%
    ),
    radial-gradient(
      ellipse 30rem 6rem at 6% 24%,
      rgba(49, 41, 33, 0.7) 0 34%,
      rgba(49, 41, 33, 0.24) 62%,
      transparent 88%
    ),
    /* 10. The front. The step at 52% → 58% is the squall line, kept exactly
           where it is because both rain curtains stop on it — a curtain that
           ends in open sky shows a cut edge, and that is as visible at night
           as it is at noon. */
    linear-gradient(
      180deg,
      #322a22 0%,
      #2f2821 15%,
      #2c2620 29%,
      #28231d 41%,
      #231f1b 52%,
      #1e1a17 58%,
      #1d180f 70%,
      #1b150d 84%,
      #19140b 100%
    );
}

/* THE FLEECE, in the dark. The nap is still the paper the storm is printed on
   and still covers the whole page, and every rule the daylight comment gives
   still holds: flecks and not blobs, each puff dying well inside a tile that
   shares no factor with its neighbours, or the eye stops seeing wool and
   starts seeing quilting.

   The one thing that changes is its sign. By day every value in it is lighter
   than whatever it covers, so the layer can only raise contrast against dark
   ink. At night the ink is light, so the same guarantee requires the opposite:
   the flecks are painted DARKER than the sky and the layer can still only ever
   help. Nothing here moves — wool does not, in either mode. */
body[data-theme-id="march"][data-mode="night"] .night-sky::before {
  background-image:
    radial-gradient(circle at 34% 40%, rgba(13, 8, 3, 0.24) 0 9%, rgba(13, 8, 3, 0.09) 22%, transparent 36%),
    radial-gradient(circle at 72% 67%, rgba(15, 11, 4, 0.17) 0 7%, transparent 30%),
    radial-gradient(circle at 14% 79%, rgba(13, 8, 3, 0.13) 0 6%, transparent 26%);
}

/* THE SQUALL, going. Same two depths on the same two layers, same tiles, same
   travel, same constant shear — the wind still combs the cloud tops and the
   rain still falls down-and-across, and both still stop on the sky's own
   squall line rather than in open air.

   Colour only. Rain and wind are light-adding in both modes; by day that could
   only improve the page and the alphas could be generous, at night it can only
   cost, so both layers come down to what moonlight actually puts on falling
   water. They stay visible because they are hairlines against a dark ground,
   which is the easiest thing in the world to see. */
body[data-theme-id="march"][data-mode="night"] .night-sky__stars--near {
  opacity: 0.5;
  background-image:
    radial-gradient(ellipse 6.5rem 0.09rem at 22% 28%, rgba(244, 229, 210, 0.5) 0 44%, transparent 100%),
    radial-gradient(ellipse 9.5rem 0.075rem at 64% 61%, rgba(235, 225, 214, 0.38) 0 44%, transparent 100%),
    radial-gradient(ellipse 4.2rem 0.11rem at 86% 15%, rgba(244, 229, 210, 0.44) 0 42%, transparent 100%),
    radial-gradient(ellipse 7.8rem 0.08rem at 41% 82%, rgba(228, 217, 206, 0.32) 0 44%, transparent 100%);
}

body[data-theme-id="march"][data-mode="night"] .night-sky__stars--far {
  opacity: 0.6;
  background-image:
    radial-gradient(ellipse 0.75px 13px at 26% 20%, rgba(244, 229, 211, 0.7) 0 42%, transparent 100%),
    radial-gradient(ellipse 0.75px 17px at 68% 63%, rgba(237, 227, 216, 0.56) 0 40%, transparent 100%),
    radial-gradient(ellipse 0.6px 10px at 43% 86%, rgba(244, 229, 211, 0.46) 0 44%, transparent 100%),
    radial-gradient(ellipse 0.85px 21px at 84% 35%, rgba(233, 223, 211, 0.42) 0 38%, transparent 100%);
}

/* THE SHOOTS, WITH FROST ON THEM. Same fringe, same three blade passes leaning
   against each other at 82° / 97° / 88° on the same three coprime periods, same
   three tufts standing proud of it, same bleached turf underneath — and still
   exactly SEVEN layers, because the background-size, background-position and
   background-repeat lists in the base rule have seven values each and a night
   pass with a different count would silently shift every one of them.

   The frost is added INSIDE the blade passes rather than as an eighth layer,
   for that reason and because it is the better drawing anyway: each blade now
   carries a pale hairline on its windward edge immediately followed by the
   dark blade itself, which is what rime on a stem actually looks like and is
   the same two-stop trick that makes January's rime needles read as raised.
   The highlight is the one thing in this mode allowed above the scene ceiling,
   and it is allowed because a footer line only ever crosses a sub-pixel edge,
   never a field — the same allowance the daylight block makes for its blades.

   The turf gradient's top stop is --mar-turf at zero alpha and not the keyword
   `transparent`, which is rgba(0,0,0,0) and would drag the ramp through black
   and leave a dirty band across the top of the shoot line. That trap is worse
   in this mode, not better. */
body[data-theme-id="march"][data-mode="night"] .night-sky__aurora {
  background-image:
    radial-gradient(ellipse 0.8rem 1.3rem at 50% 100%, rgba(26, 40, 20, 0.62) 0 50%, transparent 68%),
    radial-gradient(ellipse 0.62rem 1.05rem at 50% 100%, rgba(20, 32, 16, 0.56) 0 50%, transparent 68%),
    radial-gradient(ellipse 0.95rem 1.5rem at 50% 100%, rgba(26, 40, 20, 0.5) 0 50%, transparent 68%),
    repeating-linear-gradient(
      82deg,
      transparent 0 7px,
      rgba(218, 212, 198, 0.16) 7px 7.6px,
      rgba(11, 18, 9, 0.6) 7.6px 8.6px,
      transparent 8.6px 15px
    ),
    repeating-linear-gradient(
      97deg,
      transparent 0 11px,
      rgba(218, 212, 198, 0.12) 11px 11.5px,
      rgba(9, 15, 8, 0.54) 11.5px 12.5px,
      transparent 12.5px 25px
    ),
    repeating-linear-gradient(
      88deg,
      transparent 0 17px,
      rgba(218, 212, 198, 0.09) 17px 17.6px,
      rgba(11, 18, 9, 0.46) 17.6px 19.2px,
      transparent 19.2px 37px
    ),
    linear-gradient(180deg, rgba(33, 44, 28, 0) 0%, var(--mar-turf) 34%, var(--mar-turf-deep) 100%);
}

/* The wordmark keeps the anchor red, so the first thing on every page is still
   the month's red. The white hairline under the letters flips to black for the
   same reason --tt-engrave does — backlit lettering on an overcast day sits on
   a lit edge, and at night it sits on a dark one — and the mane bloom behind
   them opens up, because a halo is what a bright mark on a dark page wants. */
body[data-theme-id="march"][data-mode="night"] .brand a {
  text-shadow:
    0 1px 0 rgba(0, 0, 0, 0.6),
    0 0 18px rgba(226, 189, 107, 0.32),
    0 0 46px rgba(255, 92, 91, 0.2);
}

body[data-theme-id="march"][data-mode="night"] .brand a:hover {
  text-shadow:
    0 1px 0 rgba(0, 0, 0, 0.65),
    0 0 24px rgba(226, 189, 107, 0.45),
    0 0 56px rgba(255, 92, 91, 0.3);
}

/* Headings keep the condensed grotesque, the tight tracking and the
   drop-shadow technique. It still has to be a FILTER and not a text-shadow:
   these letters are painted with background-clip: text, and a text-shadow
   renders in the text phase on top of the clipped gradient and would bury the
   rainbow under a flat slab. Only the colour of the separation inverts — a
   glyph cut out of a bright cloud takes a white lip, a glyph cut out of a dark
   one takes a black lip. Two stops, same as by day: a tight one that cuts and
   a wider soft one that lifts. */
body[data-theme-id="march"][data-mode="night"] main h1,
body[data-theme-id="march"][data-mode="night"] .page-title,
body[data-theme-id="march"][data-mode="night"] main h2,
body[data-theme-id="march"][data-mode="night"] main h3,
body[data-theme-id="march"][data-mode="night"] main h4,
body[data-theme-id="march"][data-mode="night"] main h5,
body[data-theme-id="march"][data-mode="night"] main h6,
body[data-theme-id="march"][data-mode="night"] .markdown-page .heading-section__trigger {
  filter:
    var(--heading-tint)
    drop-shadow(0 1px 0 rgba(0, 0, 0, 0.62))
    drop-shadow(0 2px 6px rgba(0, 0, 0, 0.45));
}

/* LINKS. The night-mode underline rgbas that used to colour the rest and
   visited underline are gone along with the underline itself (removed above
   per the standing no-underline rule, 2026-08-14). Hover still moves toward
   MORE contrast at night, brighter rather than darker; --mar-red-dark is
   6.47 : 1 where the brighter reds sit near 4.5 — that part is unchanged. */
body[data-theme-id="march"][data-mode="night"] a:hover,
body[data-theme-id="march"][data-mode="night"] a:focus-visible {
  text-shadow: 0 0 16px rgba(226, 189, 107, 0.4);
}

/* ---------------------------------------------------------------------------
   Surfaces. Every one already had a fill or a frame; each is the same object
   seen after dark. Nothing gains a background it did not have — the single
   shared site background stands in both modes and the breadcrumb bar remains
   its only exception.
   --------------------------------------------------------------------------- */

/* Paper becomes a well. The inset sheet stops being a warm white wash on
   fleece and becomes a slightly raised dark surface, so the inner lip flips
   from a soft grey to a real shadow. Inline <code> is still left without the
   lip, because an inline box fragments across line breaks and a hairline
   would break with it. */
body[data-theme-id="march"][data-mode="night"] input,
body[data-theme-id="march"][data-mode="night"] textarea,
body[data-theme-id="march"][data-mode="night"] select,
body[data-theme-id="march"][data-mode="night"] code,
body[data-theme-id="march"][data-mode="night"] pre {
  background: rgba(245, 228, 211, 0.05);
}

body[data-theme-id="march"][data-mode="night"] input,
body[data-theme-id="march"][data-mode="night"] textarea,
body[data-theme-id="march"][data-mode="night"] select,
body[data-theme-id="march"][data-mode="night"] pre {
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.45);
}

/* The table header is still the anchor carrying wool type, but a field of
   colour with nothing lighting it is that colour laid over the dark rather
   than a painted bar — #ff5b60 as a solid slab would be the loudest thing on
   a night page by a wide margin, and the anchor is meant to bind the structure,
   not shout over it. The type is untouched and gains contrast: 14.4 : 1. */
body[data-theme-id="march"][data-mode="night"] th {
  background: rgba(255, 92, 91, 0.16);
}

/* mark is still a highlighter and not glowing text. Straw wash at the alpha it
   takes to be seen over a dark page, with the light ink over it at 9 : 1. */
body[data-theme-id="march"][data-mode="night"] mark {
  background: rgba(226, 189, 107, 0.26);
}

/* Still no left rule on quotes — border-left in this project is reserved for
   <a> inside ul/ol and nothing else, in either mode. The inset wash just comes
   up to where a warm mark can be seen against the dark. */
body[data-theme-id="march"][data-mode="night"] blockquote {
  box-shadow: inset 1rem 0 1.4rem -1.2rem rgba(226, 189, 107, 0.45);
}

/* On a lit page an object has a cast shadow; in the dark it has a lit top edge
   and only enough shadow left to seat it. Same two-step hover, same weights. */
body[data-theme-id="march"][data-mode="night"] .hero-card,
body[data-theme-id="march"][data-mode="night"] .folder-section {
  box-shadow: inset 0 1px 0 rgba(242, 230, 210, 0.06), 0 2px 10px rgba(0, 0, 0, 0.45);
}

body[data-theme-id="march"][data-mode="night"] .hero-card:hover,
body[data-theme-id="march"][data-mode="night"] .folder-section:hover {
  box-shadow: inset 0 1px 0 rgba(242, 230, 210, 0.1), 0 4px 18px rgba(0, 0, 0, 0.55);
}

/* Trim, still selected by CLASS and never by element. Every chip on the zodiac
   strip is an <a href> now, the moon included, so an element-qualified rule
   here would land on the whole row and put a box or a shadow on it. That trap
   has nothing to do with the light and is just as live in this block as in the
   one above. */
body[data-theme-id="march"][data-mode="night"] .time-bar,
body[data-theme-id="march"][data-mode="night"] .sitemap-link {
  box-shadow: inset 0 1px 0 rgba(242, 230, 210, 0.07), 0 1px 2px rgba(0, 0, 0, 0.4);
}

body[data-theme-id="march"][data-mode="night"] .sitemap-link:hover,
body[data-theme-id="march"][data-mode="night"] .sitemap-link:focus-visible {
  box-shadow: inset 0 1px 0 rgba(242, 230, 210, 0.1), 0 2px 8px rgba(255, 92, 91, 0.22);
}

/* Calendar chrome. The hover wash is the anchor at low alpha, and low alpha
   over fleece is not the same number as low alpha over near black. */
body[data-theme-id="march"][data-mode="night"] .calendar-app__nav:hover,
body[data-theme-id="march"][data-mode="night"] .calendar-app__today:hover,
body[data-theme-id="march"][data-mode="night"] .calendar-app__nav:focus-visible,
body[data-theme-id="march"][data-mode="night"] .calendar-app__today:focus-visible {
  background: rgba(255, 92, 91, 0.14);
}

/* THE ZODIAC CHIPS STILL CARRY NO FRAME, IN EITHER MODE. The pin in the base
   block is at (0,2,x) and already covers both, since a night body still
   matches body[data-theme-id="march"]. Nothing is restated here on purpose:
   there is no border, border-image, outline ring or box-shadow anywhere in
   this counterpart to undo, and a box-shadow on a chip IS a border, because it
   paints the element's bounding rectangle and tightens into a visible rounded
   box the moment its alpha climbs. Their whole hover and focus affordance is
   --zodiac-glow above, which flipped light with the card under it. */

/* ---------------------------------------------------------------------------
   Responsive, at night. The four geometry custom properties are deliberately
   NOT restated in the night block above, so the mobile block's squall heights,
   turf height and --mar-sun-r still govern and the scene rescales exactly as it
   does by day. What does need an entry is the pair of layers the mobile block
   repaints with literal colours: those rules are (0,1,2) and the night rules
   above are (0,2,2), so without this a phone in dark mode would get the full
   four-pass curtains back and a two-value background-size list applied to them.
   Same halving, same reason — a phone GPU compositing a full-screen sheared
   layer at 2.4s is the most expensive thing on this page in either mode.
   --------------------------------------------------------------------------- */
@media (max-width: 800px) {
  body[data-theme-id="march"][data-mode="night"] .night-sky__stars--far {
    background-image:
      radial-gradient(ellipse 0.6px 13px at 30% 22%, rgba(244, 229, 211, 0.5) 0 42%, transparent 100%),
      radial-gradient(ellipse 0.6px 17px at 72% 66%, rgba(237, 227, 216, 0.4) 0 40%, transparent 100%);
  }

  body[data-theme-id="march"][data-mode="night"] .night-sky__stars--near {
    background-image:
      radial-gradient(ellipse 5.5rem 0.09rem at 24% 30%, rgba(244, 229, 210, 0.46) 0 44%, transparent 100%),
      radial-gradient(ellipse 8rem 0.075rem at 66% 63%, rgba(235, 225, 214, 0.36) 0 44%, transparent 100%);
  }
}

/* ---------------------------------------------------------------------------
   Reduced motion, at night. No entry is needed and none is added: the block
   above cancels travel with `animation: none !important` and re-pins the rain's
   constant shear the same way, and !important beats any specificity. Nothing
   below the night banner restates `animation` or `transform`, which is what
   keeps that true.

   Reduced data, at night. This one DOES need an entry. Its cut-down layers are
   written at (0,1,x) and the night rules above are (0,2,x), so a metered
   connection in dark mode would otherwise get the full-viewport conic — the
   single most expensive paint in this theme — and the full curtains back, with
   the reduced-data background-size lists applied to the wrong layer counts.
   Same cuts, same counts, night colours: the rays and the stars come out, the
   nap drops to one pass and the squall to one streak each. What is left is
   still recognisably a storm going out over a clearing sky.
   --------------------------------------------------------------------------- */
@media (prefers-reduced-data: reduce) {
  body[data-theme-id="march"][data-mode="night"] .night-sky {
    background-image:
      radial-gradient(
        circle var(--mar-sun-r) at 12% -8%,
        rgba(244, 229, 211, 0.34) 0 9%,
        rgba(232, 221, 207, 0.09) 28%,
        rgba(222, 208, 192, 0.035) 52%,
        transparent 78%
      ),
      radial-gradient(
        ellipse 44rem 13rem at 76% -3%,
        var(--mar-storm-bruise) 0 44%,
        rgba(53, 37, 30, 0.6) 66%,
        transparent 90%
      ),
      linear-gradient(
        180deg,
        #322a22 0%,
        #2f2821 15%,
        #2c2620 29%,
        #28231d 41%,
        #231f1b 52%,
        #1e1a17 58%,
        #1d180f 70%,
        #19140b 100%
      );
  }

  body[data-theme-id="march"][data-mode="night"] .night-sky::before {
    background-image:
      radial-gradient(circle at 34% 40%, rgba(13, 8, 3, 0.22) 0 9%, transparent 34%);
  }

  body[data-theme-id="march"][data-mode="night"] .night-sky__stars--far {
    background-image:
      radial-gradient(ellipse 0.6px 15px at 44% 40%, rgba(244, 229, 211, 0.44) 0 42%, transparent 100%);
  }

  body[data-theme-id="march"][data-mode="night"] .night-sky__stars--near {
    background-image:
      radial-gradient(ellipse 7.5rem 0.085rem at 40% 46%, rgba(244, 229, 210, 0.42) 0 44%, transparent 100%);
  }
}

/* ---------------------------------------------------------------------------
   Keyframes. Both layers travel exactly one background tile, so each loop
   restarts with the pattern in register and there is no seam.

   marchRainDrive carries the shear through BOTH steps. skewX is a constant, not
   an animated value — it shears the tile so a vertical streak renders as driven
   rain, and it shears the 12rem travel vector with it so the drops fall down
   and across in one motion. Interpolating between two identical skews costs
   nothing; the compositor still only moves a translate.
   --------------------------------------------------------------------------- */
@keyframes marchRainDrive {
  from { transform: skewX(-15deg) translate3d(0, 0, 0); }
  to { transform: skewX(-15deg) translate3d(0, 12rem, 0); }
}

@keyframes marchWindComb {
  from { transform: translate3d(0, 0, 0); }
  to { transform: translate3d(20rem, 0, 0); }
}
