/* ==========================================================================
   THE PRESS KIT
   ==========================================================================

   THIS FILE IS LINKED AFTER THE PER-BAND INLINE <style> BLOCK, AND THAT IS THE
   WHOLE MECHANISM. theme.css declares the --ui-* defaults on :root; the band's
   own values are emitted inline on :root too, later in the document. Equal
   specificity, so document order decides — and @media contributes nothing to
   specificity. An `@media print { :root { --ui-ground: #fff } }` added to
   theme.css would therefore lose to every band's own dark ground, silently,
   with the rule visibly present in the stylesheet. See
   .claude/skills/theme-css-cascade.

   THE RULE FOR THIS FILE: declare on :root ONLY inside @media print. Outside
   print, style this document's own classes and never the band's variables — or
   it would flatten every band's palette on screen.
   ========================================================================== */

.pk {
  max-width: 62rem;
  margin: 0 auto;
  padding: clamp(2rem, 6vw, 5rem) clamp(1.25rem, 5vw, 3rem) 6rem;
  color: var(--text);
  font-family: var(--ui-body);
  font-size: 1.0625rem;
  line-height: 1.6;
}

.pk__head { margin-bottom: 3rem; }
.pk__name {
  font-family: var(--ui-display); font-weight: 400;
  font-size: clamp(2.25rem, 8vw, 4.5rem); line-height: 1.02;
  letter-spacing: .02em; text-transform: uppercase;
  margin: 0 0 .5rem; color: var(--text-bright); text-wrap: balance;
}
.pk__facts {
  font-family: var(--ui-mono); font-size: .75rem;
  letter-spacing: var(--track-mid); text-transform: uppercase;
  color: var(--text-muted); margin: 0 0 1rem;
}
.pk__line { font-size: 1.125rem; color: var(--text-quiet); margin: 0; max-width: 46rem; }

.pk__block { margin-top: 2.75rem; padding-top: 1.5rem; border-top: 1px solid var(--ink-rule); }
/* THE FIVE SMALL-LABEL RULES BELOW WERE ALL --text-faint (32% ink), AND ALL OF
   THEM WERE ILLEGIBLE. Measured on the shipped default palette they were
   2.50:1, and on the shipped LIGHT palette 2.03:1, against WCAG 2.2 AA's 4.5:1
   for text this size. They are on --text-muted now, which is not a taste
   choice: 58% is the tier Theme::MIN_PALETTE_CONTRAST is derived from, so it is
   the LOWEST rung that no savable palette can push under 4.5:1. Anything
   quieter would need a higher palette floor, which is a change to the Theme
   model, not to this file. It measures 5.91:1 dark / 5.63:1 light — the
   smallest honest step available, not a step to seven.

   --text-faint is gone from theme.css entirely; these rules were its last
   consumers anywhere, exactly as --text-dim and --text-ghost were retired
   before it. See spec/system/press_kit_contrast_spec.rb.

   WHY THESE WORDS ARE NOT DECORATION, since that is the only exemption on
   offer: WCAG's decoration test is a test on the WORDS — text is decorative
   only if it can be rearranged or substituted without changing its purpose.
   "Booking" over an address, "Discography" over a list of records, a release
   year and a catalogue number all fail it outright. Norway's forskrift om
   universell utforming av IKT binds this page with no size or free-tier
   exemption, and this is the page a booker prints. */
.pk__block h2 {
  font-family: var(--ui-display); font-weight: 400; font-size: .8125rem;
  letter-spacing: var(--track-wide); text-transform: uppercase;
  color: var(--text-muted); margin: 0 0 1.25rem;
}

/* THE BOOKING ADDRESS, AND IT IS NOT ON THE ACCENT ANY MORE. theme.css says it
   in the token block: --accent is DECORATIVE ONLY, and --accent-ui carries
   anything you click, because the authentic colours fail WCAG on purpose. This
   rule reached for --accent anyway and the single line this whole document
   exists to deliver measured 3.93:1 on the default palette.

   --text-body, and NOT --accent-ui, because --accent-ui is derived against the
   band's ink and nothing validates the accent: a pale accent is a hex a band
   can save, and it reduces this address to 1.60:1 on a light palette and to
   2.25:1 on white paper. --text-body derives from the pair
   Theme#palette_has_room_for_the_text_scale actually governs. It is also the
   tier theme.css:844 puts the SAME address on in the hero, for the same reason,
   after the same measurement.

   DECLARED RATHER THAN INHERITED, though `a { color: var(--text-body) }` in
   theme.css already says it. theme.css:809-828 records why: `inherit` fails in
   the unsafe direction — a container with a quieter colour makes the address
   quieter, silently and with no rule to read. */
.pk__block--contact .pk__pairs dd a { color: var(--text-body); }

/* A two-column definition list that STACKS rather than truncating. The spec's
   edge case names a long line-up and long roles as a print hazard, and the
   hazard is overflow, not page-breaking. */
.pk__pairs { display: grid; grid-template-columns: minmax(6rem, 12rem) 1fr; gap: .5rem 1.5rem; margin: 0; }
/* BOTH COLUMNS WRAP, and the dt half was missing. dd had `overflow-wrap:
   anywhere` from the start; dt did not, and dt is the column with a HARD
   ceiling — `minmax(6rem, 12rem)`, so its track stops growing at 192px while
   the text keeps going. A single unbroken token in a member's name (a stage
   name, or one of the compound nouns Norwegian forms without hyphens) ran 426px
   through a 192px column and straight across the values beside it. On screen
   that is ugly; on paper it is two strings printed on top of each other, and
   T020's edge case is the whole line-up, not just the roles. Measured under
   print media at A4 width in spec/system/press_kit_print_spec.rb. */
.pk__pairs dt {
  font-family: var(--ui-mono); font-size: .6875rem; letter-spacing: .08em;
  text-transform: uppercase; color: var(--text-muted); padding-top: .3rem;
  overflow-wrap: anywhere;
}
.pk__pairs dd { margin: 0; color: var(--text-quiet); overflow-wrap: anywhere; }
@media (max-width: 32rem) { .pk__pairs { grid-template-columns: 1fr; gap: .1rem 0; } }

.pk__quote { margin: 0 0 1.75rem; max-width: 46rem; }
.pk__quote blockquote { margin: 0; }
.pk__quote blockquote p {
  margin: 0; font-size: 1.25rem; line-height: 1.45;
  color: var(--text-bright); text-wrap: pretty;
}
.pk__quote blockquote p::before { content: "\201C"; }
.pk__quote blockquote p::after  { content: "\201D"; }
.pk__quote figcaption {
  margin-top: .5rem; font-family: var(--ui-mono); font-size: .75rem;
  letter-spacing: .06em; color: var(--text-muted);
}
.pk__quote figcaption cite { font-style: normal; }
.pk__quote figcaption a { color: inherit; }

.pk__prose { max-width: 42rem; color: var(--text-body); }
.pk__prose p { margin: 0 0 1em; }

.pk__rows { list-style: none; margin: 0; padding: 0; }
.pk__row {
  display: grid; grid-template-columns: 7rem 1fr auto; gap: .75rem 1.5rem;
  padding: .5rem 0; border-bottom: 1px solid var(--ink-hairline); align-items: baseline;
}
.pk__row-year { font-family: var(--ui-mono); font-size: .75rem; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.pk__row-main { display: flex; flex-wrap: wrap; gap: .25rem .75rem; align-items: baseline; overflow-wrap: anywhere; }
.pk__row-title { color: var(--text-bright); }
.pk__row-kind, .pk__row-meta {
  font-family: var(--ui-mono); font-size: .6875rem; letter-spacing: .06em;
  text-transform: uppercase; color: var(--text-muted);
}
/* 015 T021. THE DESCRIPTION SPANS THE ROW. `.pk__row` is
   `7rem 1fr auto` — year, title-and-kind, label-and-catalogue — and a
   600-character paragraph in the `1fr` middle column pushes the meta column
   right and prints as a narrow ribbon. `overflow-wrap` is the same answer
   `.pk__pairs dd` and `.pk__row-main` already give to a token with no spaces.

   NOTHING GOES IN THE PRINT BLOCK, and that is the point: this file has no clamp
   anywhere, so "in full, on paper" holds by construction, and `.pk__row`'s
   existing `break-inside: avoid` already keeps the note with its record. The
   600-character bound is what makes that declaration true — every browser
   ignores `break-inside: avoid` on a box taller than the page — and plan D5
   computes the headroom: a described row is ≈150pt against a 740pt A4 content
   box. */
.pk__row-note {
  grid-column: 1 / -1; margin-top: .35rem;
  color: var(--text-quiet); overflow-wrap: anywhere;
}

@media (max-width: 32rem) { .pk__row { grid-template-columns: 1fr; gap: .1rem; } }

.pk__rows .pk__row:last-child { border-bottom: 0; }

.pk__more { font-family: var(--ui-mono); font-size: .75rem; color: var(--text-muted); margin: .75rem 0 0; }
.pk__foot { margin-top: 4rem; padding-top: 1.5rem; border-top: 1px solid var(--ink-rule); }
/* Same move as the booking address, and the same tier the band's own footer
   link (.footer__press, theme.css:1087) already carries. 3.93:1 before. */
.pk__home { font-family: var(--ui-mono); font-size: .8125rem; color: var(--text-body); }

/* ==========================================================================
   PRINT
   ==========================================================================
   The one place this file may touch the band's variables, and it wins because
   this stylesheet is linked after the inline block. */
@media print {
  /* :root[data-tone], NOT :root, and the extra attribute is load-bearing.
     theme.css now derives --text-quiet / --text-body / --text-muted a second
     time under `:root[data-tone="light"]`, because a linear color-mix() does
     not mean the same contrast in both directions. That selector is (0,2,0);
     a bare :root here is (0,1,0) and would lose to it however late this file
     is linked — so a light-tone band's press kit would have printed the screen
     scale instead of the paper one, silently, on the one page a booker prints.
     Matched rather than raised: (0,2,0) against (0,2,0), and this file is
     later. <html> always carries data-tone; the layout writes it
     unconditionally. */
  :root[data-tone] {
    --ui-ground: #fff;
    --ui-ink: #111;
    --ui-grain: 0;
    --ui-texture: 0;

    /* THE DERIVED TEXT SCALE IS RESTATED, AND THE REASON HAS CHANGED — the
       old one is written down here because it is the honest history and
       because half of it is now false.

       It used to be legibility outright. theme.css builds --text-* as a
       color-mix between ink and ground; flip the ground to white and
       --text-faint (32%) resolved to about #b8b8b8, which is 2.10:1 on paper,
       and it was carrying every section label on this document. Measured in a
       print preview it was close to invisible.

       --text-faint is deleted and those labels are on --text-muted now, so
       WITHOUT this restatement the faintest rung would print at 4.61:1 — over
       the bar, and the claim that the restatement is what makes this page
       legible would be an overstatement. Two reasons keep it, both measured in
       spec/system/press_kit_contrast_spec.rb:

         1. TONE INDEPENDENCE. `:root[data-tone="light"]` re-derives three of
            these rungs at different percentages. Without the pin, two bands
            whose only difference is which way their palette runs print
            visibly different greys from the same document — 0.4587 against
            0.3747 for every label on the page. A printed press kit should not
            carry a screen decision the reader cannot see.
         2. DENSITY. 10.9:1 against 4.61:1 for the labels a booker reads off a
            venue printer with a tired toner cartridge. 4.61:1 is a number that
            survives a browser and does not necessarily survive a photocopy.

       The screen page is the one that can afford a whisper; paper cannot. */
    --text-bright: #000;
    --text:        #141414;
    --text-quiet:  #222;
    --text-body:   #222;
    --text-muted:  #3d3d3d;
    --ink-rule:     #c8c8c8;
    --ink-hairline: #e2e2e2;
    --ink-edge:     #b4b4b4;
  }

  @page { margin: 18mm; }

  body { background: #fff; color: #111; }

  /* 010 FR-014. A texture cut to lift a near-black screen ground by about one
     L* is, on white paper, either invisible or a smear of toner — and this page
     is printed by a booker at a venue. Suppressed HERE rather than in theme.css
     because this file loads after theme.css AND after the per-band inline
     block, which is what lets a bare class win on document order without a
     specificity trick. The print block inside theme.css would be a (0,1,0) rule
     competing with rules further down its own file. */
  .ambient { display: none; }

  .pk { max-width: none; padding: 0; font-size: 10.5pt; }
  .pk__name { font-size: 26pt; }

  /* 007 FR-017: a printed link still has to say where it went. mailto is excluded
     because the link text already IS the address, and the suffix would print it
     twice. */
  .pk a[href^="http"]::after {
    content: " (" attr(href) ")";
    font-family: var(--ui-mono); font-size: 8pt; word-break: break-all;
  }

  /* Page-breaking. Separate from the overflow rules above — a long role wraps,
     a quote must not be split across a page. */
  .pk__quote, .pk__row, .pk__block { break-inside: avoid; }
  .pk__block h2 { break-after: avoid; }

  .pk__foot { border-top: 1px solid #ccc; }
}
