/* shows.css (magazine) — the sheet of the SHOWS package (design package S6:
   docs/design-kickoff/S6_BAUVORLAGE.md): the calendar leaf, the card of a show, the large row, the
   crumbs, tabs and the buttons with a number, the blocks of four, the months of the calendar — and
   the tiles of a show's own page.

   Load order in the magazine's layout: tailwind.css → the platform's components.css and shell.css →
   the magazine's components.css (the blocks its pages share) → article.css, issue.css, THIS file →
   app.css. The admin has its own layout and loads none of them.

   ⚠️ Loaded on EVERY page of the magazine, like the two sheets beside it. So:
   - every block is named `mag-…` (a colour version of the platform's pill `pill-…`), and a name
     belongs to ONE sheet: none that components.css or another package uses;
   - a block of components.css is restyled only under a class of this package, never by its bare
     name — that would change it on every page;
   - colours only as var(--mn-…): a colour without a name gets one in tailwind.base.js.

   How LARGE the blocks are built stands in ONE place: the block "The scale" right below, in the
   form of components.css — the phone's and the tablet's values on the root, what differs from 1024
   in one media query, in whole pixels, each under a name `--mag-…` that no other sheet defines. A
   rule further down says `var(--mag-…)` where it sets a size; it may read a name of components.css
   as well. Never `--atom-…` or `--mn-size-…` (mineralica/tests/test_scale.py).

   Held by magazine/tests/test_shows_sheet.py (its table SIZES says what stands here) through
   magazine/tests/sheet_rules.py, and with the other sheets by test_package_sheets.py. */

/* ---------- The scale ---------- */
/* The sizes of this package's blocks, named in ONE place. Built is "Stufe C" — about three quarters
   of what the frames draw; every line says what the frame draws. */
:root {
  /* The calendar leaf (Figma set 5375:2109): the same at every width — in a card it stands beside
     a text column that has 196 px left on a phone of 360. */
  --mag-date: 96px;                                          /* how wide the leaf is — drawn 120 (decision G-2) */
  --mag-date-days-size: 22px;  --mag-date-days-line: 28px;   /* its days, in the serif — drawn 28/36 */

  /* The card of a show. */
  --mag-show-pad: 12px;                                      /* inside the card — drawn 16, 20 at the right */
  --mag-show-gap: 12px;                                      /* leaf · words — drawn 16 */
  --mag-show-gap-wide: 16px;                                 /* … of a card alone in its row — drawn 24 */

  /* The large row (Figma 5418:6273). */
  --mag-highlight-pad: 12px;                                 /* inside the row — drawn 24, 28 at the right */
  --mag-highlight-gap: 12px;                                 /* leaf · words · link — drawn 28 */
  --mag-highlight-date: 96px;                                /* its leaf — drawn 148 */
  --mag-highlight-days-size: 22px;  --mag-highlight-days-line: 28px;   /* the leaf's days — drawn 34/42 */

  /* Icons that stand beside a line of 16: in a tab (the facts of a head, the lines of a contact
     and what is on site read the same name). */
  --mag-shows-glyph: 16px;                                   /* — drawn 18 */

  /* The two tabs of a page with a calendar. */
  --mag-tabs-top: 16px;                                      /* above the tabs — drawn 32 */
  --mag-tabs-gap: 20px;                                      /* between the two — drawn 40 */

  /* The blocks of a page in blocks. */
  --mag-block-apart: 24px;                                   /* between two blocks — drawn 48 */

  /* The calendar: a month that is folded. */
  --mag-months-row: 44px;                                    /* the least height of its row, all of it the trigger — not drawn */

  /* The tiles of a show's page and the box of a show week. */
  --mag-box-pad: 16px;                                       /* inside a tile — drawn 24 */
  --mag-box-gap: 12px;                                       /* between two groups of a tile, the line in the middle — drawn 20 */

  /* The head of an overview (the magazine's page head, components.css, with wider words). */
  --mag-shows-head-text: 680px;                              /* how wide its words run — drawn 680 (the page stays 1120) */
  --mag-facts-apart: 12px;                                   /* between two facts under its title — drawn 24 */
  --mag-guide: 120px;                                        /* the printed guide's cover, by its height — drawn 218 */
  --mag-guide-thumb: 48px;                                   /* … in the narrow row — drawn 72 */

  /* The entry page: its two cards. */
  --mag-region-pad: 16px;                                    /* inside a card — drawn 32, 28 below */
  --mag-region-gap: 12px;                                    /* between its groups; button · link — drawn 24 */
  --mag-region-apart: 20px;                                  /* the cards · "Other countries" — drawn 40 */

  /* The pages: distances between their parts. */
  --mag-shows-top: 20px;                                     /* the tabs · what follows them — drawn 40 */
  --mag-shows-else: 16px;                                    /* above the ways on, beyond a head's distance — drawn 32 */
  --mag-past-top: 20px;                                      /* above "Past shows" — drawn 40 */
  --mag-week-cols: 24px;                                     /* a show week: introduction · box — drawn 94 */

  /* A show's own page (Figma 5474:9443). */
  --mag-show-cols: 24px;                                     /* words · tiles, from 1024; below that the room above the tiles — drawn 64 */
  --mag-show-aside-top: 32px;                                /* how far under the head's upper edge the tiles begin, from 1024 only — drawn 45 */
  --mag-show-part: 24px;                                     /* between two parts of the text — drawn 48 */
  --mag-onsite-apart: 16px;                                  /* between two facts of "On site" — drawn 32 */
  --mag-dates-pad: 12px;                                     /* a run's row, at its sides — drawn 24 */
  --mag-dates-pad-open: 12px;                                /* … above and below an open one — drawn 20 */
  --mag-map: 360px;                                          /* the map's height, at every width (the script sets it on the frame) — drawn 480 */
}
@media (min-width: 1024px) {
  :root {
    --mag-highlight-pad: 20px;
    --mag-highlight-gap: 20px;
    --mag-highlight-date: 112px;
    --mag-highlight-days-size: 26px;  --mag-highlight-days-line: 32px;
    --mag-tabs-top: 24px;
    --mag-tabs-gap: 28px;
    --mag-block-apart: 36px;
    --mag-box-pad: 20px;
    --mag-box-gap: 16px;
    --mag-facts-apart: 16px;
    --mag-guide: 164px;
    --mag-guide-thumb: 56px;
    --mag-region-pad: 24px;
    --mag-region-gap: 16px;
    --mag-region-apart: 28px;
    --mag-shows-top: 28px;
    --mag-shows-else: 24px;
    --mag-past-top: 28px;
    --mag-week-cols: 64px;
    --mag-show-cols: 48px;
    --mag-show-part: 36px;
    --mag-onsite-apart: 24px;
    --mag-dates-pad: 16px;
    --mag-dates-pad-open: 14px;
  }
}

/* ---------- Marks ---------- */
/* The marks of the show pages: the platform's tag pill (24 high, 12/16, capitals — its geometry is
   the atoms') in four more colours. "Past" before the place of a show without a date ahead;
   "Canceled" in the meta row of a run that is called off; "Next" at the first run ahead on a show's
   page; and the marks of a day ("Trade visitors only"). No new colour name: the three tones the
   frames draw beside the scales fall on named ones — the error tint with its strong tone (text on
   a tint is `-strong`, the preset's rule), the warning tint with its.
   Rules of their own, not names in the list of `.pill-free` in components.css: a test holds that
   list as it is. */
.pill-past { background: var(--mn-gray-200); color: var(--mn-gray-700); }
.pill-canceled { background: var(--mn-error-surface); color: var(--mn-error-strong); }
.pill-next { background: var(--mn-green-100); color: var(--mn-green-700); }
.pill-trade { background: var(--mn-warning-surface); color: var(--mn-warning-strong); }

/* ---------- Small heading ---------- */
/* The small line over a group — "MAJOR SHOWS", "BY COUNTRY", "OTHER COUNTRIES", the groups of a
   tile: 12/18 (the class of the text scale in the markup), semibold, in spaced capitals by CSS —
   the markup keeps the words as they are written. It IS a heading of the outline (an <h2> to <h4>
   by its place) and has no step and no serif, like the mark of a year. 8 down to what it names. */
.mag-eyebrow { margin-bottom: 8px; font-weight: 600; text-transform: uppercase; letter-spacing: 1.2px; color: var(--mn-gray-700); }

/* ---------- Calendar leaf ---------- */
/* A run as the leaf of a calendar (directory/_show_card.html, `date_leaf`): the month in spaced
   capitals, the days in the serif, a third line — the weekdays, "18 days", "last held". A <time>;
   it carries no link and knows no show.
   The leaf is narrow (84 inside) and the month line does not always fit: "OKT 2026" does (about
   68), "OKT–NOV 2026" does not, a turn of the year never. So the line comes in pieces — each stays
   together, the line breaks BETWEEN two — and the leaf is then a line higher (80 → 98). The pieces
   are plain inline boxes with a blank between them; the leaf is a column, so its lines are boxes
   of their own without any `display` here.
   Its ground: tinted green in a card, the surface on the tinted ground of a large row (`--light`),
   grey in the card of a show without a date ahead (set there). */
.mag-date {
  display: flex; flex-direction: column; flex: none; align-items: center; justify-content: center;
  width: var(--mag-date); padding: 8px 6px; border-radius: 6px;
  background: var(--mn-green-100); text-align: center;
}
.mag-date--light { background: var(--mn-surface); }
.mag-date__month { font-weight: 600; text-transform: uppercase; letter-spacing: 1.2px; color: var(--mn-green-700); }
.mag-date__month > span { white-space: nowrap; }
.mag-date__days { font-size: var(--mag-date-days-size); line-height: var(--mag-date-days-line); white-space: nowrap; color: var(--mn-gray-900); }
.mag-date__note { color: var(--mn-gray-700); }

/* ---------- Show card ---------- */
/* A show in a list (directory/_show_card.html, `show_card`; Figma set 5375:2109): the leaf at the
   left, the words at the right, both in the middle of the card's height — at EVERY width, the card
   is never stacked. It fills the column its grid gives it; the grid makes the cards of a row
   equally high.

   The surface is that of the magazine's teasers (components.css, `.mag-article`): white, the
   radius of a box, no border, a soft shadow that reaches up more than down — ONE shadow for every
   card of the magazine (the show frames draw a tighter one). The values are repeated here, because
   a package does not add its names to a rule of the shared sheet; the tiles of a show's page
   (`.mag-box--card`) and the two cards of the entry page (`.mag-region`) share them. A hairline in
   a solid tone stands before the shadow for a browser without `color-mix`.

   ONE link per card, as in the teasers: the root is an <article>, the link is the title, its
   `::after` is laid over the whole card. ⚠️ So the root is `position: relative`, and NOTHING
   between it and the link carries a `position` (the text column, the heading); the card does not
   clip, or the frame around it was cut off.
   ⚠️ `min-width: 0` on the WHOLE text column: it is an item of the row beside the leaf and by
   itself at least as wide as its longest word (docs/DESIGN_BUILD_GUIDE.md §6). */
.mag-show, .mag-box--card, .mag-region {
  background: var(--mn-surface); border-radius: var(--rounded-box);
  box-shadow: 0 0 0 1px var(--mn-gray-200);
  box-shadow: 0 -6px 32px color-mix(in srgb, var(--mn-gray-900) 8%, transparent);
}
.mag-show { position: relative; display: flex; align-items: center; gap: var(--mag-show-gap); padding: var(--mag-show-pad); }
.mag-show--wide { gap: var(--mag-show-gap-wide); }
.mag-show__body { display: flex; flex-direction: column; flex: 1; gap: 4px; min-width: 0; }
.mag-show__link::after { content: ""; position: absolute; inset: 0; border-radius: var(--rounded-box); }
.mag-show__link:focus-visible { outline: none; }
.mag-show__link:focus-visible::after { outline: 2px solid var(--mn-green-600); outline-offset: 2px; }
/* The place: a pin and the town, in the meta row's type but a tone darker — it is the first thing
   a reader looks for. Pin and words are ONE item of the line; "Past" stands before it, 8 away.
   Where both do not fit side by side — a long place in the narrow column of a phone — the place
   goes under the mark as a whole, instead of being squeezed beside it until a word breaks in the
   middle ("Réalmon-t", seen at 280). Only a single word wider than the column still breaks. */
.mag-show__place {
  display: flex; flex-wrap: wrap; align-items: center; gap: 2px 8px;
  font-size: var(--mag-meta-size); line-height: var(--mag-meta-line); font-weight: 500; color: var(--mn-gray-800);
}
.mag-show__where { display: inline-flex; align-items: center; gap: var(--mag-meta-gap); min-width: 0; }
.mag-show__where .icon { flex: none; width: var(--mag-meta-glyph); height: var(--mag-meta-glyph); }
.mag-show__where > span { min-width: 0; overflow-wrap: break-word; }
/* The subtitle: ONE line, cut off with an ellipsis (decision S6-9) — most are longer than a line,
   and two cards of a row would otherwise differ by a line again and again. */
.mag-show__sub { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; color: var(--mn-gray-700); }
/* A show without a date ahead: a quiet ground with an edge instead of the shadow, the leaf grey.
   The frames draw its words in gray 600 — 4.1 : 1 on this ground, 3.6 : 1 on the leaf — so they
   are built in gray 700: what greys the card out is its ground, the missing shadow and the mark.
   The edge is drawn INSIDE (a border would move the content by a pixel against the card beside it). */
.mag-show--past { background: var(--mn-gray-50); box-shadow: inset 0 0 0 1px var(--mn-gray-200); }
.mag-show--past .mag-date { background: var(--mn-gray-200); }
.mag-show--past .mag-date__month, .mag-show--past .mag-date__days,
.mag-show--past .mag-show__title, .mag-show--past .mag-show__place { color: var(--mn-gray-700); }

/* ---------- Large row ---------- */
/* A show week or a major show across the whole width of the content (directory/_highlight.html;
   Figma 5418:6273): a tinted ground with an edge, no shadow; the leaf on the surface, the mark
   over the title, a sentence of at most two lines, the facts, and "View the show" at the right.
   The words at the right are an ornament in the link atom's type — the row's ONE link is its
   title, laid over all of it like a card's.

   The parts by the row's OWN width, not the window's — it stands across a page, and it has to
   stand in a narrower place as well (the kitchen sink shows it at three widths in one window). So
   the root is a container, and its one child, the frame, is the grid the queries rearrange (an
   element cannot ask about itself):
   - below 640: the leaf beside mark and title; below them, across the row, the sentence, the facts
     and the words of the link. The text column gives up its box for that (`display: contents`), so
     its children are items of the frame's grid;
   - from 640 (a page in a window of 768 gives it 720): leaf · words, the link's words under the facts;
   - from 900 (a window of 1024 gives it 928): leaf · words · link, all in the middle of the height.
   The SIZES switch with the window at 1024, like every size of this sheet (below that the leaf is
   the card's). A browser without container queries keeps the first form at every width.
   ⚠️ `container-type: inline-size` takes the row's own width away: in a box that is sized by its
   content it collapses to nothing. It always stands where it is given a width — a block of a
   page, a column `minmax(0, 1fr)`. */
.mag-highlight {
  position: relative; container-type: inline-size;
  background: var(--mn-green-50); border: 1px solid var(--mn-green-200); border-radius: var(--rounded-box);
}
.mag-highlight__frame {
  display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center;
  column-gap: var(--mag-highlight-gap); row-gap: 6px; padding: var(--mag-highlight-pad);
}
.mag-highlight .mag-date { width: var(--mag-highlight-date); }
.mag-highlight .mag-date__days { font-size: var(--mag-highlight-days-size); line-height: var(--mag-highlight-days-line); }
.mag-highlight__body { display: contents; }
.mag-highlight__head { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; min-width: 0; }
.mag-highlight__text, .mag-highlight__facts, .mag-highlight__more { grid-column: 1 / -1; }
/* Three lines of the sentence while the row is narrow, two once it has its three parts, then an
   ellipsis. */
.mag-highlight__text {
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;
  color: var(--mn-gray-800);
}
/* The place is the first fact and a tone darker, as in a card. */
.mag-highlight__facts .mag-meta__item:first-child { color: var(--mn-gray-800); }
.mag-highlight__more { justify-self: start; white-space: nowrap; }
.mag-highlight__link::after { content: ""; position: absolute; inset: 0; border-radius: var(--rounded-box); }
.mag-highlight__link:focus-visible { outline: none; }
.mag-highlight__link:focus-visible::after { outline: 2px solid var(--mn-green-600); outline-offset: 2px; }
@container (min-width: 640px) {
  .mag-highlight__body { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; min-width: 0; }
  /* The leaf beside both rows of the second column: the words, and the link's words under them. */
  .mag-highlight .mag-date { grid-row: 1 / span 2; }
  .mag-highlight__more { grid-column: 2; }
}
@container (min-width: 900px) {
  .mag-highlight__frame { grid-template-columns: auto minmax(0, 1fr) auto; }
  .mag-highlight .mag-date { grid-row: auto; }
  .mag-highlight__more { grid-column: 3; grid-row: 1; }
  .mag-highlight__text { -webkit-line-clamp: 2; }
}

/* --- the small row, in a card of the entry page (Figma 5419:7455) --- */
/* Leaf (month and days only, the card's leaf at every width), title, ONE line of facts, a chevron
   — one arrangement at every width, with a text column of its own (`__main`; the large row's
   gives up its box where the row is narrow). Below 768 the chevron is left out, by the WINDOW: the
   row is as narrow in a card of a tablet's two columns as on a phone.
   ⚠️ These rules stand BELOW the large row's, its queries included: they weigh the same and win by
   coming later. */
.mag-highlight--small .mag-highlight__frame { grid-template-columns: auto minmax(0, 1fr) auto; column-gap: 12px; padding: 10px; }
.mag-highlight--small .mag-date { width: var(--mag-date); grid-row: auto; }
.mag-highlight--small .mag-date__days { font-size: var(--mag-date-days-size); line-height: var(--mag-date-days-line); }
.mag-highlight__main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.mag-highlight__chevron { color: var(--mn-green-600); }
.mag-highlight__chevron .icon { width: var(--mag-meta-glyph); height: var(--mag-meta-glyph); }
@media (max-width: 767px) {
  .mag-highlight--small .mag-highlight__frame { grid-template-columns: auto minmax(0, 1fr); }
  .mag-highlight__chevron { display: none; }
}

/* ---------- Crumbs ---------- */
/* The trail above a page (directory/_crumbs.html): links in gray, underlined, a "›" between two
   steps, the page itself last, dark and no link. The list wraps, a step as a whole.
   A link is a line of 21 and a target of 39: a padding taken back by a margin, at the element
   itself — a target enlarged by a pseudo-element is not what a finger or the measuring tool sees.
   (It is an item of its step's row, so both take effect.)
   Below 768 the last step is left out: the page's title stands right below the trail. By a rule
   of this sheet, not by a hiding class with a variant in the markup — a step sets a `display`. */
.mag-crumbs { color: var(--mn-gray-700); }
.mag-crumbs__list { display: flex; flex-wrap: wrap; align-items: center; column-gap: 6px; }
.mag-crumbs__step { display: inline-flex; align-items: center; gap: 6px; min-width: 0; }
.mag-crumbs__step + .mag-crumbs__step::before { content: "\203A"; color: var(--mn-gray-500); }
/* 4 at each side as well, taken back alike: a step of three letters ("USA", 29 wide) is a target
   of 37 then (measured on the pages of the USA's states). */
.mag-crumbs__link { padding: 9px 4px; margin: -9px -4px; text-decoration: underline; text-underline-offset: 2px; }
.mag-crumbs__link:focus-visible { outline: 2px solid var(--mn-green-600); outline-offset: 2px; }
.mag-crumbs__here { color: var(--mn-gray-900); }
@media (max-width: 767px) {
  .mag-crumbs__here { display: none; }
}

/* ---------- Tabs ---------- */
/* The two views of a page with a calendar (directory/_tabs.html): LINKS between two pages, on a
   line across the content. The open one is semibold and dark with a stroke of 3 in the green of
   the buttons, lying on that line — a `border-bottom` of the tab, pulled over the line by the
   list's negative margin. A tab is 47 high (10 + its line of 24 + 10 + 3). */
.mag-tabs { padding-top: var(--mag-tabs-top); border-bottom: 1px solid var(--mn-gray-300); }
.mag-tabs__list { display: flex; gap: var(--mag-tabs-gap); margin-bottom: -1px; }
.mag-tabs__tab {
  display: inline-flex; align-items: center; gap: 6px; padding: 10px 0;
  border-bottom: 3px solid transparent; font-weight: 500; color: var(--mn-gray-700);
}
.mag-tabs__tab .icon { flex: none; width: var(--mag-shows-glyph); height: var(--mag-shows-glyph); }
.mag-tabs__tab[aria-current="page"] { font-weight: 600; color: var(--mn-gray-900); border-bottom-color: var(--mn-green-600); }
.mag-tabs__tab:focus-visible { outline: 2px solid var(--mn-green-600); outline-offset: 2px; }

/* ---------- Buttons with a number ---------- */
/* The ways to countries, states and other parts (directory/_count_links.html): a row of pills,
   each a name and its number of shows. The geometry is the jump list's (components.css,
   `.mag-jump`), whose two type sizes are read here: a pill 32 high (its line of 18, 6 above and
   below, the border), the LINK around it 36 — 2 above and below at the element itself. Many
   buttons wrap; the row never scrolls sideways. The number is drawn in gray 600 (4.3 : 1 on
   white) and built a tone darker. */
.mag-chips__list { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 6px; }
.mag-chips__link { display: inline-flex; padding: 2px 0; font-size: var(--mag-jump-size); line-height: var(--mag-jump-line); }
.mag-chips__pill {
  padding: 6px 12px; border: 1px solid var(--mn-gray-300); border-radius: 9999px;
  background: var(--mn-surface); font-weight: 500; color: var(--mn-green-700); white-space: nowrap;
}
.mag-chips__count { margin-left: 4px; font-weight: 400; color: var(--mn-gray-700); }
.mag-chips__link:focus-visible { outline: none; }
.mag-chips__link:focus-visible .mag-chips__pill { outline: 2px solid var(--mn-green-600); outline-offset: 2px; }

/* ---------- Block ---------- */
/* A country or a state with its next four shows (directory/_block.html; Figma 5418:6538): the
   name a step below the section's, the number of ALL its shows beside it, the link to its page at
   the right; below, the cards two in a row (`.mag-grid--2`). The distance between two blocks is a
   padding ABOVE each but the first — a block is an anchor, and a margin would not be part of it.
   The head by width: from 768 one row, the link pushed to the right. Below, the link takes a row
   of its own at the left — a grid, because a wrapping row would put it beside the number wherever
   it happens to fit, and at the right edge where it does not. */
.mag-block + .mag-block { padding-top: var(--mag-block-apart); }
.mag-block__head {
  display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: baseline; column-gap: 8px; row-gap: 2px;
  margin-bottom: var(--mag-section-head);
}
.mag-block__count { color: var(--mn-gray-700); }
.mag-block__all { grid-column: 1 / -1; justify-self: start; white-space: nowrap; }
.mag-block__none { color: var(--mn-gray-700); }
@media (min-width: 768px) {
  .mag-block__head { display: flex; }
  .mag-block__all { margin-left: auto; }
}

/* ---------- Calendar months ---------- */
/* The months of the calendar (directory/_months.html) are the groups along a line of
   components.css — its classes, on a <section> for an open month and on a <details> with its
   <summary> as the head for a folded one. Added here: the number of dates beside the mark, and
   the folding.
   A folded month is a row of at least 44, all of it the trigger, with a chevron at the right that
   turns when the month is open. The line runs through the row (the head's own piece of it); a
   folded month has no body, so two of them follow each other without a distance, and the distance
   to the next group comes back with the body when it is opened.
   ⚠️ The <summary> is a flex row through the shared class, which already takes the browser's
   triangle away; Safari draws its own and needs the second rule. */
.mag-months__count { margin-left: 8px; color: var(--mn-gray-700); }
.mag-months__summary { min-height: var(--mag-months-row); cursor: pointer; list-style: none; }
.mag-months__summary::-webkit-details-marker { display: none; }
.mag-months__summary:focus-visible { outline: 2px solid var(--mn-green-600); outline-offset: 2px; }
.mag-months__chevron { flex: none; width: var(--mag-shows-glyph); height: var(--mag-shows-glyph); margin-left: auto; color: var(--mn-gray-700); }
.mag-months__fold[open] .mag-months__chevron { transform: rotate(180deg); }

/* ---------- Tile ---------- */
/* A surface with groups one below the other: "Next date" and "Organizer" on a show's page, the box
   of a show week. `--card`: the surface of a card (above, with `.mag-show`). `--tint`: the warm
   tone, no edge, no shadow. Between two groups a hairline in the middle of their distance; in a
   group 4 between two lines — and 8 under its small heading, whose own margin is the larger one
   (the two collapse). */
.mag-box { padding: var(--mag-box-pad); border-radius: var(--rounded-box); }
.mag-box--tint { background: var(--mn-gray-75); }
.mag-box__group + .mag-box__group { margin-top: var(--mag-box-gap); padding-top: var(--mag-box-gap); border-top: 1px solid var(--mn-gray-200); }
.mag-box__group > * + * { margin-top: 4px; }

/* ---------- Overviews ---------- */
/* What the PAGES of the directory add to the blocks above (S6_BAUVORLAGE §2.5, §3.0 to §3.5): the
   head of an overview with its facts and the printed guide's place, the two cards of the entry
   page, the box of a show week — and the distances between the parts of a page, each a padding of
   a class of this package (`mag-shows-…`), because the pages are pages with bands: the children of
   <main> are items of a grid there, and their margins do not collapse. */

/* --- the head of an overview (directory/_shows_head.html) --- */
/* The magazine's tinted page head (components.css, `.mag-head`), changed in three points under a
   class of its own:
   - no least height: a state's head is a trail, a title and a line of facts, half as high as the
     head of the issue overview that the least height was made for;
   - the words run wider (680 instead of 480): a head here has no picture beside it, or a narrow
     one, and "Mineralienbörsen in Nordrhein-Westfalen" would break in two lines at 480;
   - the trail stands above mark and title, a section head's distance away. */
.mag-shows-head .mag-head__inner { min-height: 0; }
.mag-shows-head .mag-head__text { max-width: var(--mag-shows-head-text); }
.mag-shows-head .mag-crumbs { margin-bottom: var(--mag-section-head); }
/* The facts under the title — a state's "16 shows · 13 with upcoming dates", a show week's span of
   days, its town, its shows: 14/21 (the class of the text scale in the markup) with an icon of 16.
   Drawn 16/24 with 18; built a step smaller, because 16 beside a title of 32 reads as a second
   headline (the kitchen sink shows both). The row wraps, a fact stays with its icon. */
.mag-facts {
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px var(--mag-facts-apart);
  margin-top: 12px; font-weight: 500; color: var(--mn-gray-800);
}
.mag-facts__item { display: inline-flex; align-items: center; gap: 6px; min-width: 0; }
.mag-facts__item .icon { flex: none; width: var(--mag-shows-glyph); height: var(--mag-shows-glyph); }

/* --- the printed guide's place (directory/_guide.html; decision S6-N3) --- */
/* An announcement: a mark, the guide's name with its zone in green on a line of its own, the
   sentence that says when it appears, the cover — a cut-out sized by its HEIGHT, with the shadow
   of a cut-out (components.css, `.mag-cutout`). No link and no price.
   The column is as wide as its cover is high (drawn so: a square of 218 for the picture), and
   wider only where its title — which never breaks — needs more; the sentence wraps inside that,
   instead of pushing the column as wide as it is long.
   `--row`: the narrow version — the cover small at the left, the words beside it: in a card of the
   entry page, under a line across the card, and under the words of a head below 768. There the
   small heading stands close above the name. */
.mag-guide { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; width: min-content; min-width: var(--mag-guide); }
.mag-guide__title { white-space: nowrap; }
.mag-guide__region { display: block; color: var(--mn-green-600); }
.mag-guide__line { color: var(--mn-gray-700); }
.mag-guide__cover { flex: none; width: auto; max-width: none; height: var(--mag-guide); margin-top: 4px; }
.mag-guide--row { flex-direction: row; align-items: center; gap: 12px; width: auto; min-width: 0; }
.mag-guide--row .mag-guide__cover { height: var(--mag-guide-thumb); margin-top: 0; }
.mag-guide__words { min-width: 0; }
.mag-guide__name { font-weight: 600; }
.mag-guide .mag-eyebrow { margin-bottom: 2px; }
/* In a head the guide stands twice in the markup and is seen once: the column from 768, the row
   below. Each is hidden through the element around it — the guide sets a `display` and would win
   against a hiding class of the build. */
.mag-shows-head__below { margin-top: var(--mag-head-cta); }
@media (max-width: 767px) {
  .mag-shows-head__aside { display: none; }
}
@media (min-width: 768px) {
  .mag-shows-head__below { display: none; }
}

/* --- the two cards of the entry page (directory/_region_card.html; Figma 5419:7449) --- */
/* The USA and Europe: name and numbers, the large rows of the zone drawn small, the buttons of
   its largest parts, the button to its page with the way to its calendar — and the printed guide's
   row under a line. The surface is a card's (above, with `.mag-show`); the card is NO link, it
   holds five to ten of its own, so it has no answer to a pointer.
   The grid makes the two equally high; the actions stand at the foot of the higher card's height
   (`margin-top: auto`). Below 768 the button is as wide as the card, the calendar's link under it. */
.mag-region { display: flex; flex-direction: column; gap: var(--mag-region-gap); min-width: 0; padding: var(--mag-region-pad); }
.mag-region__counts { margin-top: 4px; font-weight: 500; color: var(--mn-gray-700); }
.mag-region__rows { display: flex; flex-direction: column; gap: 8px; }
.mag-region__actions { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; margin-top: auto; }
.mag-region__button { align-self: stretch; }
.mag-region .mag-guide { padding-top: var(--mag-region-gap); border-top: 1px solid var(--mn-gray-200); }
@media (min-width: 768px) {
  .mag-region__actions { flex-direction: row; flex-wrap: wrap; align-items: center; gap: 12px var(--mag-region-gap); }
  .mag-region__button { align-self: auto; }
}
/* "Other countries" under the two cards. */
.mag-shows-others { margin-top: var(--mag-region-apart); }

/* --- the parts of a page, and what lies between them --- */
/* `-first`: the section right under the tabs — it takes the tabs' distance instead of a section's
   (same weight as `.mag-section`, later sheet). `-featured`: the large rows of a page in blocks, a
   section of their own under the tabs; the list's section follows a section's distance below.
   `-rows`: the large rows, 8 apart. `-parts`: the buttons under them on a page drawn as a list.
   `-blocks`: the blocks, a block's distance under the buttons. `-else`: the ways on at the end of
   a page — a head's distance and a little more above them. `-past`: "Past shows" under the list. */
.mag-shows-first { padding-top: var(--mag-shows-top); }
.mag-shows-featured { padding-top: var(--mag-shows-top); }
.mag-shows-rows { display: flex; flex-direction: column; gap: 8px; }
.mag-shows-rows + .mag-shows-parts { margin-top: var(--mag-shows-top); }
.mag-shows-blocks { padding-top: var(--mag-block-apart); }
.mag-shows-else { padding-top: calc(var(--mag-section-head) + var(--mag-shows-else)); }
.mag-shows-past { padding-top: var(--mag-past-top); }
/* The head of a list that carries a count (the platform's section head: a title that may wrap, a
   count that never does). Here the count is a whole phrase — "61 mit kommendem Termin · 96
   insgesamt" — and on a phone it kept the row to itself: "Nach Bundesländern" beside it broke
   inside its word, down to one letter in a line (seen at 402 on the pages of Germany and Europe).
   So in these heads the row may wrap: where both do not fit, the count goes under the title, at
   the left like the link of a block's head. Where they fit, nothing changes. */
.mag-shows-counthead { flex-wrap: wrap; row-gap: 4px; }
/* The line of the legal notes (directory/_notes_line.html), the last line of every page of the
   directory: quiet, its link in the look of the link atom. ⚠️ The look is set from the <p>: the
   <a> carries no class, a test reads that tag as it is written. The link is a line of 21 and a
   target of 37 — a padding at the element itself, which an inline box takes without moving a line
   (its own box is the 17 of its type, not the line's 21: hence 10 above and below). */
.mag-shows-notes { margin-top: var(--mag-shows-top); color: var(--mn-gray-700); }
.mag-shows-notes a { padding: 10px 0; color: var(--mn-green-500); font-weight: 600; text-decoration: underline; }
.mag-shows-notes a:focus-visible { outline: 2px solid var(--mn-green-600); outline-offset: 2px; }

/* --- a show week (directory/show_week.html; Figma 5377:3450) --- */
/* The introduction beside the box "In the Show Guide": one column below 768; from 768 the box in
   half the width under the introduction; from 1024 two columns, 666 to 360 of the page's grid. */
.mag-week { display: grid; grid-template-columns: minmax(0, 1fr); align-items: start; gap: var(--mag-week-cols); }
.mag-week__intro { color: var(--mn-gray-800); }
.mag-week__intro > * + * { margin-top: 12px; }
@media (min-width: 768px) {
  .mag-week { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mag-week__intro { grid-column: 1 / -1; }
}
@media (min-width: 1024px) {
  .mag-week { grid-template-columns: minmax(0, 666fr) minmax(0, 360fr); }
  .mag-week__intro { grid-column: auto; }
  /* The box keeps its column where a page has no introduction: alone it would fill the wide one. */
  .mag-week-box { grid-column: 2; }
}
/* The box (directory/_week_box.html): a tile (`.mag-box--card`) with rows under a small heading, a
   hairline between two. A row is ONE link across the box — its line of 21 and 12 above and below,
   a target of 45: the words (the link atom's class stands on them), at the right a fact in gray
   and a chevron. The last row's lower 12 lie in the tile's own padding. */
.mag-week-box .mag-eyebrow { margin-bottom: 0; }
.mag-week-box__list { margin-bottom: -12px; }
.mag-week-box__row + .mag-week-box__row { border-top: 1px solid var(--mn-gray-200); }
.mag-week-box__link { display: flex; align-items: center; gap: 8px; padding: 12px 0; }
.mag-week-box__name { margin-right: auto; }
.mag-week-box__more { flex: none; color: var(--mn-gray-700); white-space: nowrap; }
.mag-week-box__chevron { flex: none; width: var(--mag-meta-glyph); height: var(--mag-meta-glyph); color: var(--mn-gray-700); }
.mag-week-box__link:focus-visible { outline: 2px solid var(--mn-green-600); outline-offset: 2px; }

/* ---------- A show ---------- */
/* The page of ONE show (directory/show_detail.html; Figma 5474:9443; S6_BAUVORLAGE §2.11, §3.6):
   its head on a tinted ground, beside it two tiles that reach up into the tint, the text, the map
   across the page — and after it a tinted band with other shows.

   The <article> stands on the page's grid and is a grid of its own. From 1024 two columns, 666 to
   390 of the page, in four rows:
       head   │ tiles         the tint lies behind ALL of row 1
       text   │ tiles         the tiles span rows 1 and 2
       the map, across
       the line of the legal notes, across
   ⚠️ Row 2 is `minmax(0, 1fr)`: the tiles span an `auto` row and a flexible one, and what they
   need beyond the head goes to the flexible one — so tiles higher than the head never make the
   tinted head higher; they hang out of it into the white, as drawn.
   Below 1024 one column in the order of the markup: head · tiles · text · map. The tint ends
   under the head there, the tiles stand below it on the page's ground — side by side from 768,
   one below the other on a phone.

   ⚠️ The tint is an EMPTY field of this grid in row 1, behind the head (same cell, earlier in the
   markup), and paints out to both edges of the window without making the page wider: a shadow
   without blur that is far larger than any window, cut off above and below by a clip that reaches
   as far to the sides. (A band across the window, as the overviews have it, cannot be the ground
   of one ROW of a grid that also holds the tiles.)
   ⚠️ A clipped box is painted in the layer of positioned boxes — ABOVE plain content, whatever the
   order in the markup. So head and tiles are lifted over it (`z-index`, which an item of a grid
   takes without a `position`); without that the tint covers the words. */
.mag-showpage { display: grid; grid-template-columns: minmax(0, 1fr); padding-bottom: var(--mag-section); }
.mag-showpage__tint {
  grid-column: 1 / -1; grid-row: 1;
  background: var(--mn-gray-75); box-shadow: 0 0 0 100vmax var(--mn-gray-75); clip-path: inset(0 -100vmax);
}
.mag-showpage__head { grid-column: 1; grid-row: 1; z-index: 1; min-width: 0; padding: var(--mag-head-pad) 0; }
.mag-showpage__head .mag-crumbs { margin-bottom: var(--mag-section-head); }
.mag-showpage__sub { margin-top: 12px; color: var(--mn-gray-700); overflow-wrap: break-word; }
/* ⚠️ `align-content: start`: from 1024 the column of tiles is as high as head and text together,
   and a grid hands height it has left over to its rows — the second tile then stood 46 under the
   first instead of 16 (seen at 1440). */
.mag-showpage__aside {
  z-index: 1; display: grid; grid-template-columns: minmax(0, 1fr); align-content: start; align-items: start;
  gap: var(--mag-box-gap); min-width: 0; padding-top: var(--mag-show-cols);
}
/* The text: a section's distance under the head, its parts a part's distance apart, each under a
   heading a step below the page's sections (the <h2>s of a column, not of the page). The
   description in the larger reading size, a paragraph per blank line of the record. It is typed
   by hand and may hold what no line can break — a web address written out —, so a word may break
   where the column ends rather than push the page wider than a phone. */
.mag-showpage__body { min-width: 0; padding-top: var(--mag-section); }
.mag-showpage__part + .mag-showpage__part { margin-top: var(--mag-show-part); }
.mag-showpage__title { margin-bottom: var(--mag-section-head); }
.mag-showpage__text { color: var(--mn-gray-800); overflow-wrap: break-word; }
.mag-showpage__text > * + * { margin-top: 12px; }
.mag-showpage__map { min-width: 0; padding-top: var(--mag-section); }
@media (min-width: 768px) {
  .mag-showpage__aside { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 1024px) {
  .mag-showpage {
    grid-template-columns: minmax(0, 666fr) minmax(0, 390fr); grid-template-rows: auto minmax(0, 1fr) auto auto;
    column-gap: var(--mag-show-cols);
  }
  .mag-showpage__aside { grid-column: 2; grid-row: 1 / span 2; grid-template-columns: minmax(0, 1fr); padding-top: var(--mag-show-aside-top); }
  .mag-showpage__body { grid-column: 1; grid-row: 2; }
  .mag-showpage__map, .mag-showpage > .mag-shows-notes { grid-column: 1 / -1; }
}

/* --- inside the two tiles (directory/_show_tiles.html, `date_tile`, `organizer_tile`) --- */
/* "Next date": the run in the serif (the step's class stands in the markup), under it weekdays and
   hours in gray; where the only run ahead is called off, its mark beside the date. "Last held"
   greys the DATE and nothing else — the tile is the main thing of the page and keeps its surface.
   Admission and dealers side by side, each a small heading, a value and at most one line; where
   one of them is not known the other keeps its half.
   A link in a tile ("Show on map", the website, the telephone number) is a line of 21 and a target
   of 37: a padding taken back by a margin at the element itself, as the link at a section's head
   has it. Its icon is the small one of a meta row (the atom would make it 16).
   The organiser's lines: an icon of 16, the link 8 beside it, 8 between two lines. ⚠️ The link may
   shrink (`min-width: 0`) and its host breaks anywhere: a tile is narrow, a host is one word. */
.mag-box__when { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; color: var(--mn-gray-900); }
.mag-box__when--past { color: var(--mn-gray-700); }
.mag-box__line { color: var(--mn-gray-700); }
.mag-box__pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--mag-box-gap); }
.mag-box__pair > * + * { margin-top: 0; }
.mag-box__value { font-weight: 600; color: var(--mn-gray-900); }
.mag-box__note { margin-top: 4px; color: var(--mn-gray-700); overflow-wrap: break-word; }
.mag-box__name { font-weight: 600; color: var(--mn-gray-900); overflow-wrap: break-word; }
.mag-box__address { color: var(--mn-gray-800); overflow-wrap: break-word; }
.mag-box__group > .mag-box__jump { margin-top: 6px; }
.mag-box__link { min-width: 0; padding: 8px 0; margin: -8px 0; }
.mag-box__link .icon { flex: none; width: var(--mag-meta-glyph); height: var(--mag-meta-glyph); }
.mag-box__link:focus-visible { outline: 2px solid var(--mn-green-600); outline-offset: 2px; }
.mag-box__contacts { display: flex; flex-direction: column; gap: 8px; font-weight: 500; color: var(--mn-gray-800); }
.mag-box__group > .mag-box__contacts { margin-top: 8px; }
.mag-box__contact { display: flex; align-items: center; gap: 8px; min-width: 0; }
.mag-box__contact > .icon { flex: none; width: var(--mag-shows-glyph); height: var(--mag-shows-glyph); color: var(--mn-gray-700); }
.mag-box__host { min-width: 0; overflow-wrap: anywhere; }

/* --- the runs of a show (directory/_show_tiles.html, `run_rows`; Figma 5477:9305, 5478:9366) --- */
/* A list in one frame, a hairline between two runs. A run is a <details>: its <summary> is the
   whole head of the row — the date in the serif (ONE size open and folded: a row must not jump
   when it unfolds), the run's own name, its mark, and beside a folded run ahead its hours in a
   few words; a chevron at the right that turns. A folded row is 48 high (46 below 1024): its line
   and 12 above and below. An open run has the warm ground and under its head the hours — the main
   line with a clock, quieter lines for days that carry a mark — and the run's note.
   The words of the head wrap as a whole (`__words`), the chevron stays at the upper right: on a
   phone the mark goes under the date. A run with nothing to unfold has a plain head (`--plain`),
   no chevron and no pointer.
   ⚠️ The head sets a `display`, which takes the browser's triangle away; Safari draws its own and
   needs the second rule. The words beside a folded date are hidden while the run is open (its
   first line says the same) — by this sheet, there is no script. */
.mag-dates { overflow: hidden; border: 1px solid var(--mn-gray-300); border-radius: var(--rounded-box); background: var(--mn-surface); }
.mag-dates__run + .mag-dates__run { border-top: 1px solid var(--mn-gray-300); }
.mag-dates__run[open] { background: var(--mn-gray-75); }
.mag-dates__head { display: flex; align-items: flex-start; gap: 8px; padding: 12px var(--mag-dates-pad); list-style: none; cursor: pointer; }
.mag-dates__head::-webkit-details-marker { display: none; }
.mag-dates__head--plain { cursor: auto; }
.mag-dates__run[open] > .mag-dates__head { padding-top: var(--mag-dates-pad-open); padding-bottom: 8px; }
.mag-dates__head:focus-visible { outline: 2px solid var(--mn-green-600); outline-offset: -2px; }
.mag-dates__words { display: flex; flex: 1; flex-wrap: wrap; align-items: center; gap: 4px 8px; min-width: 0; }
.mag-dates__when { color: var(--mn-gray-900); }
.mag-dates__run--past .mag-dates__when { color: var(--mn-gray-700); }
.mag-dates__label { font-weight: 500; color: var(--mn-gray-800); }
.mag-dates__brief { color: var(--mn-gray-700); }
.mag-dates__run[open] .mag-dates__brief { display: none; }
.mag-dates__chevron { flex: none; width: var(--mag-shows-glyph); height: var(--mag-shows-glyph); margin-top: 4px; color: var(--mn-gray-700); }
.mag-dates__run[open] .mag-dates__chevron { transform: rotate(180deg); }
.mag-dates__body { padding: 0 var(--mag-dates-pad) var(--mag-dates-pad-open); }
.mag-dates__body > * + *, .mag-dates__lines > * + * { margin-top: 8px; }
.mag-dates__line { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; color: var(--mn-gray-700); }
.mag-dates__line--main { font-weight: 500; color: var(--mn-gray-800); }
.mag-dates__time { display: inline-flex; align-items: center; gap: 6px; min-width: 0; }
.mag-dates__time .icon { flex: none; width: var(--mag-meta-glyph); height: var(--mag-meta-glyph); }
.mag-dates__note { color: var(--mn-gray-800); overflow-wrap: break-word; }

/* --- what is on offer, what is on site (directory/_show_tiles.html) --- */
/* On offer: a small mark per category — the pill of a jump list in the green of a year's mark, 26
   high (its line of 18 and 4 above and below), no link; they wrap. Not the platform's pill: that
   one sets capitals. On site: facts with an icon of 16 each, in the type of a line of 16 (the
   class stands in the markup), medium; they wrap, a fact stays with its icon. */
.mag-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.mag-tags__item {
  padding: 4px 10px; border-radius: 9999px; background: var(--mn-green-100);
  font-size: var(--mag-jump-size); line-height: var(--mag-jump-line); font-weight: 500; color: var(--mn-green-700);
}
.mag-onsite { display: flex; flex-wrap: wrap; gap: 8px var(--mag-onsite-apart); font-weight: 500; color: var(--mn-gray-800); }
.mag-onsite__item { display: inline-flex; align-items: center; gap: 6px; min-width: 0; }
.mag-onsite__item .icon { flex: none; width: var(--mag-shows-glyph); height: var(--mag-shows-glyph); }

/* --- getting there (Figma 5477:9347) --- */
/* The heading with the address under it — a pin and one line, how to get in behind it — and at
   the right, on the line of the address, the way out to Google Maps; below 768 that link stands
   under the address. Then the map across the page.
   The map is the platform's placeholder (_embed_gate.html), which a script turns into a frame of
   the height the macro is handed — an inline style, so ONE height at every width until the macro
   takes a class instead (the plan's point E13). What this sheet adds is the room: the box is as
   high as the map will be BEFORE the frame exists, so nothing below it jumps when the map loads
   and "Show on map" lands where the map is. */
.mag-map__head { display: flex; flex-direction: column; align-items: flex-start; gap: 8px 12px; margin-bottom: var(--mag-section-head); }
/* ⚠️ `align-self: stretch`: in the column of a phone the words would otherwise be as wide as their
   longest word — a hall's name of fifty letters pushed the page 124 px wider (measured at 360);
   `overflow-wrap` breaks a word only in a box that has a width of its own. */
.mag-map__words { align-self: stretch; min-width: 0; }
.mag-map__where { display: flex; align-items: flex-start; gap: 6px; margin-top: 6px; color: var(--mn-gray-700); }
.mag-map__where .icon { flex: none; width: var(--mag-meta-glyph); height: var(--mag-meta-glyph); margin-top: 5px; }
.mag-map__where > span { min-width: 0; overflow-wrap: break-word; }
.mag-map__out { flex: none; padding: 8px 0; margin: -8px 0; white-space: nowrap; }
.mag-map__out .icon { width: var(--mag-meta-glyph); height: var(--mag-meta-glyph); }
.mag-map__out:focus-visible { outline: 2px solid var(--mn-green-600); outline-offset: 2px; }
.mag-map { min-height: var(--mag-map); overflow: hidden; border-radius: var(--rounded-box); background: var(--mn-gray-100); }
@media (min-width: 768px) {
  .mag-map__head { flex-direction: row; align-items: flex-end; justify-content: space-between; }
}

/* --- more shows (Figma 5474:9671) --- */
/* The band that ends the page: the warm ground from edge to edge, a section's distance above and
   below its content; the cards keep their white surface on it. As the last child of <main> it
   reaches the foot (shell.css).
   Its head is the platform's section head, whose title and link share ONE row — here both are
   long ("Weitere Messen in Nordrhein-Westfalen" · "Alle Messen in Nordrhein-Westfalen"), and on a
   phone the title stood in three lines beside the link (seen at 360). So in this band the row may
   wrap: where both do not fit, the link goes under the title. */
.mag-more { padding-top: var(--mag-section); padding-bottom: var(--mag-section); background: var(--mn-gray-75); }
.mag-more__head { flex-wrap: wrap; row-gap: 4px; }

/* ---------- A pointer that hovers ---------- */
/* Not drawn anywhere; built like the teasers: a deeper shadow and the title underlined, no lift
   and no zoom — through `:has()`, so a card without a link does not pretend to be one. A card
   without a date ahead keeps its edge and gets no shadow; a large row only a darker edge. */
@media (hover: hover) {
  .mag-show:has(.mag-show__link:hover) { box-shadow: 0 8px 28px color-mix(in srgb, var(--mn-gray-900) 12%, transparent); }
  .mag-show--past:has(.mag-show__link:hover) { box-shadow: inset 0 0 0 1px var(--mn-gray-400); }
  .mag-show__link:hover, .mag-highlight__link:hover { text-decoration: underline; text-underline-offset: 3px; }
  .mag-highlight:has(.mag-highlight__link:hover) { border-color: var(--mn-green-300); }
  .mag-crumbs__link:hover { color: var(--mn-gray-900); }
  .mag-tabs__tab:not([aria-current]):hover { color: var(--mn-gray-900); border-bottom-color: var(--mn-green-200); }
  .mag-chips__link:hover .mag-chips__pill { border-color: var(--mn-green-500); }
  .mag-months__summary:hover .mag-months__chevron { color: var(--mn-gray-900); }
  .mag-shows-notes a:hover { color: var(--mn-green-700); }
  .mag-week-box__link:hover .mag-week-box__name { color: var(--mn-green-700); }
  .mag-dates__head:hover .mag-dates__chevron { color: var(--mn-gray-900); }
}

/* ---------- Hidden stays hidden ---------- */
/* This sheet loads after tailwind.css: a `display` set above beats the build's hiding class and
   the `hidden` attribute (same weight, later file). Said again for every block that sets one.
   ⚠️ Only these two spellings. A block that is to be hidden at ONE width or in print keeps its
   `display` and stays visible — it is hidden through an element around it, never at the block
   itself and never through the `cls` of a macro that puts it on such a block (`show_card`,
   `date_leaf`); a test reads the templates for both ways (magazine/tests/test_components_sheet.py). */
.mag-date[hidden], .mag-date.hidden, .mag-show[hidden], .mag-show.hidden,
.mag-show__body[hidden], .mag-show__body.hidden, .mag-show__place[hidden], .mag-show__place.hidden,
.mag-show__where[hidden], .mag-show__where.hidden,
.mag-highlight__frame[hidden], .mag-highlight__frame.hidden, .mag-highlight__body[hidden], .mag-highlight__body.hidden,
.mag-highlight__head[hidden], .mag-highlight__head.hidden, .mag-highlight__text[hidden], .mag-highlight__text.hidden,
.mag-highlight__main[hidden], .mag-highlight__main.hidden,
.mag-crumbs__list[hidden], .mag-crumbs__list.hidden, .mag-crumbs__step[hidden], .mag-crumbs__step.hidden,
.mag-tabs__list[hidden], .mag-tabs__list.hidden, .mag-tabs__tab[hidden], .mag-tabs__tab.hidden,
.mag-chips__list[hidden], .mag-chips__list.hidden, .mag-chips__link[hidden], .mag-chips__link.hidden,
.mag-block__head[hidden], .mag-block__head.hidden { display: none; }
/* … and the blocks of the overviews. */
.mag-facts[hidden], .mag-facts.hidden, .mag-facts__item[hidden], .mag-facts__item.hidden,
.mag-guide[hidden], .mag-guide.hidden, .mag-guide__region[hidden], .mag-guide__region.hidden,
.mag-region[hidden], .mag-region.hidden, .mag-region__rows[hidden], .mag-region__rows.hidden,
.mag-region__actions[hidden], .mag-region__actions.hidden, .mag-shows-rows[hidden], .mag-shows-rows.hidden,
.mag-week[hidden], .mag-week.hidden, .mag-week-box__link[hidden], .mag-week-box__link.hidden { display: none; }
/* … and the blocks of a show's own page. */
.mag-showpage[hidden], .mag-showpage.hidden, .mag-showpage__aside[hidden], .mag-showpage__aside.hidden,
.mag-box__when[hidden], .mag-box__when.hidden, .mag-box__pair[hidden], .mag-box__pair.hidden,
.mag-box__contacts[hidden], .mag-box__contacts.hidden, .mag-box__contact[hidden], .mag-box__contact.hidden,
.mag-dates__head[hidden], .mag-dates__head.hidden, .mag-dates__words[hidden], .mag-dates__words.hidden,
.mag-dates__line[hidden], .mag-dates__line.hidden, .mag-dates__time[hidden], .mag-dates__time.hidden,
.mag-tags[hidden], .mag-tags.hidden, .mag-onsite[hidden], .mag-onsite.hidden,
.mag-onsite__item[hidden], .mag-onsite__item.hidden,
.mag-map__head[hidden], .mag-map__head.hidden, .mag-map__where[hidden], .mag-map__where.hidden { display: none; }
