/* ============================================================================
   The Calendar: Today.aspx, both its day view and its month view.
   Ported from the first edition's Today.aspx inline <style> block, which is
   where this used to live; the ruling of 2026-07-31 says all CSS lives in
   App_Themes and a page may not contain a style block. The look is unchanged:
   same classes, same sizes, same colours, same borders.

   WHAT MOVED AND WHY, so nobody reads a difference as a redesign:

     - The observance list, the week list and the month list are DIVS with
       role="list" rather than ul/li. js/panel-speak.js speaks an <li> WHOLE,
       so an observance rendered as li > div + div + div came out as one
       unbroken utterance with the name running straight into the timing prose.
       Every rule below that used to select ul/li now selects the div, and the
       drawn result is identical.
     - The section headings are h2.sechd2, not h3.sechd2. panel-speak composes
       a page from its h1, its kicker, its .entlede and then every .sec, and
       reads a section's heading from the h2 inside it. The RULE below is
       unchanged from the first edition's, so the heading is drawn at exactly
       the size it was.
     - The two date pickers are DIVS here and <form> elements in the first
       edition; the forms themselves live in the master's Scripts placeholder
       because MainContent is inside a server form. Same flex row, same fields.

   EVERYTHING IS SIZED IN rem/em AND NO BOX AROUND TEXT HAS A FIXED HEIGHT, so
   the A-/A+ control and a 200% system text size both still govern this page. A
   px font or a fixed-height row opts that element out of the reader's text
   size and clips. Every flex row of text wraps and gives its shrinkable member
   min-width:0, which is what stops a holiday name becoming three characters
   and an ellipsis on a phone.

   Loaded by Today.aspx.vb through PageAssets.StyleLink. Dropping a file into
   this folder does not link it.
   ============================================================================ */

/* The page kicker and the title, matched to the trail pages so the two ported
   surfaces are one family. .dvpage .kick already draws it gold and uppercase;
   these two values are the first edition's .eyebrow. */
.todaypage .kick{font-size:.7rem;letter-spacing:.22em;margin-bottom:10px}

/* break-word, NOT anywhere: anywhere breaks inside a word that would have fit,
   and a long date heading split mid-word at 200% text in this column. */
/* text-wrap:balance REMOVED here, w-launchfix1-2148, 2026-08-23 (launch
   readiness audit item 14; full reasoning in App_Themes\Divinity\home.css
   at its own .homepage .fcard h4 rule, ruling 309 prevalence sweep).
   overflow-wrap:break-word and hyphens:auto, kept, are the two properties
   actually doing the wrapping job named in the comment above; balance was
   only a cosmetic line-length evener riding alongside them. */
/* SELECTOR RESTORED TO h1.page, THEN MADE TAG-INDEPENDENT (.todaypage
   .page), w-launchfix3-2241, 2026-08-23 (board 1793/1812 reversal):
   Today.aspx's own date heading is h1 again, since Site.master's brand
   wordmark is now a non-heading element instead of an h1. */
.todaypage .page{font-family:var(--serif);font-size:2rem;margin:0 0 6px;font-weight:600;
  overflow-wrap:break-word;hyphens:auto}
.todaypage>.lede{font-size:.92rem;line-height:1.6;margin:0 0 8px}

/* THERE IS NO .tdfacts RULE HERE ANY MORE, and the removal is the record of
   why (wp-loose, 2026-08-03). A div.tdfacts held the long date in the heading
   block's .badges slot, and the comment that stood here reasoned it was a
   repeat and therefore safe. It was a repeat and therefore REDUNDANT: on the
   live day the lede is the date and on a dated URL the h1 is the date, so the
   page opened by saying the date twice in a row. A screen reader walking the
   document announced it, then announced it again before the sentence it goes
   with; the first edition's Today carries no such badge and says it once.
   Today.aspx.vb passes an empty meta line now, PageActions.Head omits the
   badges div entirely for an empty one, and nothing emits this class. */

/* THERE IS NO .dspeak BLOCK IN THIS FILE, and that is deliberate. The controls
   js/panel-speak.js injects into the action row are styled by site.css, in the
   block beside [data-pageacts] .readbtn, which every page already loads. This
   page needs no stylesheet link for them and neither does any other.

   The rules lived in App_Themes/Divinity/pageacts.css until 2026-08-02, linked
   through PageActions.Assets; that file and the two page-family-scoped copies in
   entity.css and trail.css were all folded onto the one shared block the same
   day. A copy here would be the duplication the one-renderer rule exists to
   prevent, and the three that existed are exactly what it was written about. */

/* THE SECTION WRAPPER IS A READ-ALOUD HOOK, NOT A PANEL. Every block on this
   page is wrapped in <section class="sec"> because js/panel-speak.js never
   reaches a block that is outside the h1, the kicker, the lede and the
   sections, and a calendar that speaks the date and then falls silent has told
   a listener nothing. .dvpage .sec draws a panel with a background, a border
   and 15px of padding, which the first edition's calendar does not have; these
   five values put it back to nothing so the hook costs the eye nothing. */
.todaypage .sec{background:none;border:0;border-radius:0;padding:0;margin:0}

/* The section heading. The first edition's h3.sechd2, value for value.
   THE COLOUR HAD TO BE STATED, and it was not until 2026-08-04 (visual repair
   wave, finding 11). The first edition emits a bare h3 and its rule sets no
   colour, so those headings take the body's --ink and read near-white. Here the
   heading is an h2 INSIDE a section.sec, which two deliberate port decisions
   put it in (the h2 so panel-speak composes an ordered outline, the section.sec
   so panel-speak reaches the block at all), and that is exactly the shape
   site.css paints gold at ".dvpage .sec>h2". Neither decision was about colour
   and neither should be undone to fix a colour, so the colour is stated here.
   The selector is one step more specific than the site rule so it wins on
   specificity rather than on which sheet happens to be linked last. */
.todaypage .sec>h2.sechd2,
.todaypage h2.sechd2{font-family:var(--serif);font-size:1.22rem;margin:26px 0 0;font-weight:600;
  color:var(--ink)}

/* ---- the day view -------------------------------------------------------- */

.todaypage .obslist{margin:16px 0 0;padding:0;display:flex;flex-direction:column;gap:0}
.todaypage .obs{padding:14px 0;border-bottom:1px solid var(--edge);min-width:0}
.todaypage .obs:last-child{border-bottom:0}
.todaypage .obs .nm{font-weight:650;font-size:1.02rem;overflow-wrap:anywhere}
.todaypage .obs .nm a{color:var(--ink);text-decoration:none}
.todaypage .obs .nm a:hover{color:var(--gold)}
.todaypage .obs .kd{color:var(--faint);font-size:.78rem;text-transform:uppercase;letter-spacing:.09em;
  margin-top:2px}
.todaypage .obs .tm{color:var(--muted);font-size:.9rem;line-height:1.5;margin-top:5px}
.todaypage .obs .nt{color:var(--faint);font-size:.84rem;line-height:1.5;margin-top:5px}
.todaypage .obs .day{display:inline-block;color:var(--gold-soft);font-size:.8rem;margin-top:4px}
.todaypage .obsacts{display:flex;flex-wrap:wrap;gap:8px;margin-top:9px}

/* The week ahead. min-width:0 on the name and a wrapping row, or a long
   holiday name refuses to wrap and pushes the row wide. */
.todaypage .wk{margin:14px 0 0;padding:0}
.todaypage .wk>div{display:flex;flex-wrap:wrap;gap:6px 14px;padding:9px 0;
  border-bottom:1px solid var(--edge);min-width:0}
.todaypage .wk>div:last-child{border-bottom:0}
.todaypage .wk .d{flex:0 0 auto;color:var(--faint);font-size:.84rem;min-width:7em}
/* THE DATE KEEPS ITS UNDERLINE, and this line used to carry
   text-decoration:none (visual repair wave, 2026-08-04, finding 11).

   The date is the only link in this whole block and it is set in the same
   muted --faint the labels around it use, so with the underline suppressed
   there was NOTHING left on the row saying it could be clicked: not a colour
   difference, not a weight difference, not a rule. The first edition has no
   .wk .d a rule at all, so its anchor takes the browser's own underline over
   the inherited --faint colour, which is exactly what a reader sees there.
   Restoring the underline is therefore the port, not a
   preference.

   The colour is left stated rather than deleted so the rule still says out
   loud that a muted link here is deliberate, and the hover is kept: it is an
   affordance the first edition lacks and costs a reader nothing. */
.todaypage .wk .d a{color:var(--faint)}
.todaypage .wk .d a:hover{color:var(--gold)}
.todaypage .wk .n{flex:1 1 12rem;min-width:0;overflow-wrap:anywhere}

.todaypage .daynav{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:14px}

/* ---- pick a date, pick a month (owner, 2026-07-30) ----
   Native inputs, so the phone raises its own date wheel and a keyboard gets the
   platform's own behaviour for free. Everything in rem/em: no fixed-width
   field, or the A+ control grows the label and leaves the box behind. */
.todaypage .daypick{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px}
.todaypage .daypick label{color:var(--faint);font-size:.72rem;text-transform:uppercase;letter-spacing:.12em}
.todaypage .daypick input{flex:0 1 12rem;min-width:0;background:var(--ground);border:1px solid var(--edge2);
  color:var(--ink);border-radius:9px;padding:8px 10px;font:inherit;font-size:.88rem}
.todaypage .daypick input:focus{outline:2px solid var(--gold);border-color:var(--gold)}

/* ---- the month view ------------------------------------------------------ */

.todaypage .mon{margin:18px 0 0;padding:0}
.todaypage .monday{padding:12px 0;border-bottom:1px solid var(--edge);min-width:0}
.todaypage .monday:last-child{border-bottom:0}
.todaypage .mond{font-weight:650;font-size:.95rem;overflow-wrap:anywhere}
.todaypage .mond a{color:var(--gold-soft);text-decoration:none}
.todaypage .mond a:hover{color:var(--gold);text-decoration:underline}
.todaypage .monobs{margin:5px 0 0;padding:0}
.todaypage .monrow{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;padding:3px 0;min-width:0}
.todaypage .monn{font-size:1rem;overflow-wrap:anywhere;min-width:0}
.todaypage .monn a{color:var(--ink);text-decoration:none}
.todaypage .monn a:hover{color:var(--gold)}
.todaypage .monk{color:var(--faint);font-size:.76rem;text-transform:uppercase;letter-spacing:.09em}

/* ---- shared bits drawn here and nothing in App_Themes styles yet ----------
   .sharerow / .shareurl are ShareMeta.ShareRow's markup, carried here from the
   first edition's block and scoped to .todaypage so this file cannot change
   another page. trail.css carries the same scoped copy and flags the
   same thing: hoisting into site.css is a decision for whoever owns that
   file, not this one. .sr-only is already in site.css and is deliberately NOT repeated.
   ------------------------------------------------------------------------- */
.todaypage .sharerow{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:20px 0 0}
.todaypage .shareurl{flex:1 1 18rem;min-width:0;background:var(--ground);border:1px solid var(--edge2);
  color:var(--ink);border-radius:9px;padding:8px 10px;font:inherit;font-size:.85rem}
.todaypage .hint{color:var(--faint);font-size:.84rem;line-height:1.5;margin:16px 0 0}
.todaypage .muted{color:var(--muted);line-height:1.55;margin:16px 0 0}
