/* ================================================================
   TRAKS 2026 — Design System
   Fonte di verità: brief §2 + prototipi traks/
================================================================ */

/* ----------------------------------------------------------------
   Custom properties
---------------------------------------------------------------- */
:root {
  --paper:      #e8e5df;
  --paper-dark: #dedacf;
  --ink:        #141210;
  --ink-soft:   #564e42;
  --ink-body:   #3c372f;
  --red:        #b6202c;
  --red-bright: #e0584f;
  --gray:       #bdb5a3;
  --hair:       #cdc7ba;
  --fg:         #141210;
  --bg:         #e8e5df;
  --bg-2:       #dedacf;

  --font-display: 'Archivo Black', Impact, sans-serif;
  --font-serif:   'Newsreader', Georgia, serif;
  --font-ui:      'Archivo', system-ui, sans-serif;

  --wrap:    1140px;
  --pad:     clamp(20px, 4vw, 48px);
  --radius:  0px; /* volontariamente netto */
}

/* ----------------------------------------------------------------
   Reset minimale
---------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
  background: var(--bg);
  color: var(--fg);
  font-family: var(--font-serif);
  font-size: clamp(17px, 1.8vw, 20px);
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  min-height: 100vh;
}

a { color: inherit; text-decoration: none; }
img, svg, video { display: block; max-width: 100%; height: auto; }
button { font: inherit; cursor: pointer; border: none; background: none; color: inherit; }
:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }
::selection { background: var(--red); color: var(--paper); }

/* ----------------------------------------------------------------
   Layout utilities
---------------------------------------------------------------- */
.wrap {
  max-width: var(--wrap);
  margin-inline: auto;
  padding-inline: var(--pad);
}

.visually-hidden {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0);
  white-space: nowrap; border: 0;
}

/* ----------------------------------------------------------------
   Grana di carta (overlay globale)
   Vive in ::after su body — nessun JS
---------------------------------------------------------------- */
/* Grana di carta — solo desktop con mouse (hover:hover esclude iOS/Android) */
@media (hover: hover) and (pointer: fine) {
  body::before {
    content: '';
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 9999;
    opacity: .38;
    mix-blend-mode: multiply;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.72' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23g)' opacity='.9'/%3E%3C/svg%3E");
  }
}

/* ----------------------------------------------------------------
   Tipografia base
---------------------------------------------------------------- */
h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-ui);
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: -.02em;
}

.display {
  font-family: var(--font-display);
  letter-spacing: .04em;
}

.mono, code, time {
  font-family: var(--font-ui);
  font-variant-numeric: tabular-nums;
  font-size: .88em;
}

.label {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: .14em;
  text-transform: uppercase;
}

p + p { margin-top: 1.2em; }
blockquote {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.18em;
  line-height: 1.5;
  border-left: 4px solid var(--red);
  padding-left: 1.4em;
  margin: 2em 0;
  color: var(--ink-body);
}

/* ----------------------------------------------------------------
   Sticky deck "in ascolto / in onda"
   JS: assets/js/deck.js
---------------------------------------------------------------- */
.traks-deck {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--ink);
  color: var(--paper);
  border-bottom: 2px solid var(--fg);
}

.traks-deck .wrap {
  display: flex;
  align-items: center;
  gap: 16px;
  padding-block: 10px;
}

.deck-live {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: .16em;
  text-transform: uppercase;
  display: flex;
  align-items: center;
  gap: 8px;
  color: #e9e2d2;
  flex: none;
}

.deck-led {
  width: 9px; height: 9px;
  border-radius: 50%;
  background: var(--red-bright);
  box-shadow: 0 0 0 0 rgba(224,88,79,.6);
  animation: deck-pulse 1.6s ease-out infinite;
  flex: none;
}

@keyframes deck-pulse {
  0%   { box-shadow: 0 0 0 0   rgba(224,88,79,.55); }
  70%  { box-shadow: 0 0 0 7px rgba(224,88,79,0); }
  100% { box-shadow: 0 0 0 0   rgba(224,88,79,0); }
}

@media (prefers-reduced-motion: reduce) {
  .deck-led { animation: none; }
}

.deck-nowplaying {
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 13px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex: none;
  max-width: 32vw;
}

.deck-nowplaying span { color: var(--gray); font-weight: 400; }

.deck-wave {
  flex: 1;
  height: 28px;
  min-width: 60px;
}

.deck-time {
  font-family: var(--font-ui);
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  color: #e9e2d2;
  flex: none;
}

.deck-play {
  flex: none;
  width: 32px; height: 32px;
  border: 1.5px solid #5a5142;
  border-radius: 50%;
  display: grid;
  place-items: center;
  color: var(--paper);
  transition: background .15s, border-color .15s;
}

.deck-play:hover {
  background: var(--red);
  border-color: var(--red);
}

.deck-play svg { width: 12px; height: 12px; }

/* Skip (prossimo brano) nella barra radio */
.deck-skip {
  flex: none;
  width: 28px; height: 28px;
  display: grid;
  place-items: center;
  color: var(--gray);
  transition: color .15s;
}
.deck-skip:hover { color: var(--paper); }
.deck-skip svg { width: 15px; height: 15px; }

/* ----------------------------------------------------------------
   Masthead
---------------------------------------------------------------- */
.traks-masthead {
  padding: 22px 0 18px;
  border-bottom: 4px solid var(--fg);
}

.masthead-row {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
}

.masthead-brand {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
}

/* Ricerca nel masthead — presente su tutte le pagine */
.masthead-search {
  display: flex;
  align-items: stretch;
  width: 100%;
  max-width: 440px;
  border: 2px solid var(--fg);
  background: var(--bg);
}
.masthead-search input[type="search"] {
  flex: 1;
  min-width: 0;
  border: 0;
  background: transparent;
  padding: 10px 12px;
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--fg);
  -webkit-appearance: none;
  appearance: none;
}
.masthead-search input[type="search"]:focus { outline: 2px solid var(--red); outline-offset: -2px; }
.masthead-search input[type="search"]::placeholder { color: var(--ink-soft); opacity: .8; }
.masthead-search button {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  border: 0;
  cursor: pointer;
  background: var(--ink);
  color: var(--paper);
  padding: 0 16px;
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 11px;
  letter-spacing: .12em;
  text-transform: uppercase;
  transition: background .15s;
}
.masthead-search button:hover { background: var(--red); }
.masthead-search button svg { width: 15px; height: 15px; }
/* Sotto i 420px la parola "Cerca" non ci sta accanto al campo: resta la lente,
   che da sola si capisce. */
@media (max-width: 420px) {
  .masthead-search button span { display: none; }
  .masthead-search button { padding: 0 13px; }
}

.masthead-logo {
  display: block;
  text-decoration: none;
}

.masthead-logo img {
  height: clamp(140px, 18vw, 280px);
  width: auto;
  display: block;
  max-width: 420px;
}

.masthead-payoff {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-soft);
  line-height: 1;
}

.masthead-payoff strong { color: var(--red); }

.traks-nav {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 4px 28px;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 13px;
  letter-spacing: .08em;
  text-transform: uppercase;
}

.traks-nav a,
.traks-nav li a {
  color: var(--fg);
  padding: 4px 0;
  transition: color .15s;
  list-style: none;
}

/* WordPress genera <ul><li><a> — rimuoviamo gli stili lista */
.traks-nav ul { list-style: none; display: contents; }
.traks-nav li { display: contents; }

.traks-nav a:hover { color: var(--red); }

/* ----------------------------------------------------------------
   Manifesto bar
---------------------------------------------------------------- */
.traks-manifesto {
  border-bottom: 1px solid var(--hair);
  padding: 12px 0;
}

.manifesto-inner {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 24px;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--fg);
  align-items: center;
}

.manifesto-year { color: var(--gray); margin-left: auto; }

/* ----------------------------------------------------------------
   Card flusso (ultimi pezzi)
---------------------------------------------------------------- */
.traks-flow {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr));
  gap: 0;
}

.traks-card {
  display: flex;
  flex-direction: column;
  border-right: 1px solid var(--hair);
  border-bottom: 1px solid var(--hair);
  padding: 24px;
  transition: background .15s;
  text-decoration: none;
  color: var(--fg);
}

.traks-card:hover { background: var(--bg-2); }
.traks-card:nth-child(3n) { border-right: 0; }

.card-category {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 10px;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--red);
  margin-bottom: 10px;
}

.card-thumb {
  aspect-ratio: 4/3;
  overflow: hidden;
  margin-bottom: 16px;
  background: var(--ink);
}

.card-thumb img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform .4s;
}

.traks-card:hover .card-thumb img { transform: scale(1.03); }

.card-title {
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: clamp(18px, 2.2vw, 24px);
  line-height: 1.1;
  letter-spacing: -.02em;
  margin-bottom: 8px;
}

.card-excerpt {
  font-family: var(--font-serif);
  font-size: 15px;
  line-height: 1.55;
  color: var(--ink-soft);
  flex: 1;
}

.card-meta {
  font-family: var(--font-ui);
  font-size: 11px;
  letter-spacing: .06em;
  color: var(--gray);
  margin-top: 14px;
  text-transform: uppercase;
}

/* ----------------------------------------------------------------
   Fascia analogica scura
---------------------------------------------------------------- */
.traks-dark-band {
  background: var(--ink);
  color: var(--paper);
  border-top: 8px solid var(--red);
  padding: 44px 0;
}

.dark-band-num {
  font-family: var(--font-display);
  font-size: clamp(72px, 12vw, 150px);
  line-height: .8;
  color: var(--red-bright);
  letter-spacing: .04em;
}

.dark-band-label { color: var(--gray); }

.dark-band-title {
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: clamp(28px, 4vw, 48px);
  line-height: 1;
  margin: 10px 0 12px;
  letter-spacing: -.02em;
}

.dark-band-desc {
  color: #d8d0bf;
  max-width: 48ch;
  font-size: 16px;
}

.dark-band-cta {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: .12em;
  border: 1.5px solid var(--paper);
  padding: 14px 22px;
  white-space: nowrap;
  color: var(--paper);
  transition: background .15s, border-color .15s;
}

.dark-band-cta:hover { background: var(--red); border-color: var(--red); }

/* ----------------------------------------------------------------
   Sezione header generico
---------------------------------------------------------------- */
.sec-header {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--red);
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 28px;
  padding-top: 44px;
}

.sec-header::after {
  content: '';
  flex: 1;
  height: 2px;
  background: var(--ink);
}

/* ----------------------------------------------------------------
   Single post — intestazione comune
---------------------------------------------------------------- */
.post-header {
  padding: 44px 0 36px;
  border-bottom: 2px solid var(--fg);
}

.post-kicker {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 12px;
  flex-wrap: wrap;
}

.post-tag {
  background: var(--red);
  color: var(--paper);
  padding: 3px 10px;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 10px;
  letter-spacing: .14em;
  text-transform: uppercase;
}

.post-tag--live { animation: deck-pulse 1.6s ease-out infinite; }

.post-small {
  font-family: var(--font-ui);
  font-size: 11px;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

.post-title {
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: clamp(32px, 6vw, 76px);
  line-height: .95;
  letter-spacing: -.025em;
  margin-bottom: 14px;
}

.post-title .artist { color: var(--red); }

.post-byline {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: 12px;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

.post-byline strong { color: var(--fg); }

/* ----------------------------------------------------------------
   Corpo articolo
---------------------------------------------------------------- */
.post-body {
  max-width: 68ch;
  margin: 0 auto;
  padding: 44px 0;
  font-size: clamp(17px, 1.9vw, 20px);
  color: var(--ink-body);
}

.post-body h2 {
  font-size: clamp(22px, 3vw, 30px);
  margin: 2em 0 .8em;
}

.post-body h3 {
  font-size: clamp(18px, 2.4vw, 24px);
  margin: 1.6em 0 .6em;
}

/* ----------------------------------------------------------------
   Scheda disco / evento
---------------------------------------------------------------- */
.traks-scheda {
  background: var(--bg-2);
  border: 1px solid var(--hair);
  border-top: 4px solid var(--fg);
  padding: 24px 28px;
  font-family: var(--font-ui);
  font-size: 14px;
}

.traks-scheda dt {
  font-weight: 600;
  font-size: 10px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-top: 12px;
}

.traks-scheda dd {
  margin: 2px 0 0 0;
  color: var(--fg);
}

/* ----------------------------------------------------------------
   Tracklist recensione standard
---------------------------------------------------------------- */
.tracklist-std { border-top: 1px solid var(--hair); }

.tracklist-std .track-item {
  display: grid;
  grid-template-columns: 32px 1fr auto;
  gap: 12px;
  align-items: baseline;
  padding: 14px 0;
  border-bottom: 1px solid var(--hair);
}

.track-num {
  font-family: var(--font-ui);
  font-variant-numeric: tabular-nums;
  font-size: 13px;
  color: var(--gray);
}

.track-title {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 16px;
}

.track-comment {
  font-family: var(--font-serif);
  font-size: 15px;
  color: var(--ink-soft);
  margin-top: 4px;
  grid-column: 2;
}

.track-dur {
  font-family: var(--font-ui);
  font-variant-numeric: tabular-nums;
  font-size: 13px;
  color: var(--gray);
  white-space: nowrap;
}

/* ----------------------------------------------------------------
   Live review player (rispecchia traks-in-diretta.html)
   Stili di base — il resto nel plugin traks-live-review
---------------------------------------------------------------- */
.live-review-player {
  background: var(--ink);
  color: var(--paper);
  padding: 22px 24px 26px;
}

.live-review-player .player-top {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 18px;
  flex-wrap: wrap;
}

.btn-play-large {
  width: 52px; height: 52px;
  border-radius: 50%;
  background: var(--red);
  color: var(--paper);
  display: grid;
  place-items: center;
  flex: none;
  transition: transform .12s;
}

.btn-play-large:hover  { transform: scale(1.06); }
.btn-play-large:active { transform: scale(.96); }
.btn-play-large svg    { width: 18px; height: 18px; }

@media (prefers-reduced-motion: reduce) {
  .btn-play-large:hover { transform: none; }
}

.player-counter {
  font-family: var(--font-ui);
  font-variant-numeric: tabular-nums;
  font-size: 15px;
  color: #f0e9d8;
  background: #0c0a07;
  padding: 8px 12px;
  border: 1px solid #322c22;
}

.btn-restart {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: .1em;
  color: var(--gray);
  border: 1px solid #3a342a;
  padding: 8px 12px;
  transition: color .15s, border-color .15s;
}

.btn-restart:hover { color: var(--paper); border-color: var(--red); }

.player-trackname {
  font-family: var(--font-ui);
  font-size: 12px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--gray);
  margin-left: auto;
  text-align: right;
}

.player-trackname strong { color: #f0e9d8; }

.player-waveform {
  position: relative;
  height: 96px;
  display: flex;
  align-items: center;
  gap: 2px;
  cursor: pointer;
}

.waveform-bar {
  flex: 1;
  min-width: 1px;
  background: #3a342a;
  transition: background .08s linear;
  border-radius: 1px;
}

.waveform-bar.filled { background: var(--red); }

.waveform-playhead {
  position: absolute;
  top: -4px; bottom: -4px;
  width: 2px;
  background: #f0e9d8;
  pointer-events: none;
  box-shadow: 0 0 8px rgba(240,233,216,.5);
}

.waveform-playhead::after {
  content: '';
  position: absolute;
  top: -5px; left: -4px;
  width: 10px; height: 5px;
  background: #f0e9d8;
  clip-path: polygon(0 0, 100% 0, 50% 100%);
}

/* ----------------------------------------------------------------
   Reactions timeline
---------------------------------------------------------------- */
.reactions-stream {
  margin-top: 32px;
  display: grid;
  grid-template-columns: 88px 1fr;
}

.reaction-tc {
  font-family: var(--font-ui);
  font-variant-numeric: tabular-nums;
  font-size: 13px;
  color: var(--gray);
  padding: 14px 16px 14px 0;
  text-align: right;
  border-right: 2px solid var(--bg-2);
}

.reaction-text {
  padding: 13px 0 13px 26px;
  font-family: var(--font-serif);
  font-size: clamp(17px, 2vw, 21px);
  line-height: 1.45;
  color: var(--gray);
  position: relative;
  transition: color .3s, opacity .3s;
}

.reaction-text::before {
  content: '';
  position: absolute;
  left: -7px; top: 22px;
  width: 12px; height: 12px;
  border-radius: 50%;
  background: var(--bg);
  border: 2px solid var(--gray);
  transition: background .25s, border-color .25s, transform .25s;
}

/* past */
.reaction--past .reaction-tc  { color: var(--ink-soft); }
.reaction--past .reaction-text { color: var(--ink-soft); }
.reaction--past .reaction-text::before { background: var(--ink-soft); border-color: var(--ink-soft); }

/* active */
.reaction--active .reaction-tc  { color: var(--red-bright); font-weight: 600; }
.reaction--active .reaction-text { color: var(--paper); font-weight: 500; }
.reaction--active .reaction-text::before { background: var(--red-bright); border-color: var(--red-bright); transform: scale(1.35); }

/* ----------------------------------------------------------------
   Footer
---------------------------------------------------------------- */
.traks-footer {
  background: var(--ink);
  color: var(--paper);
  border-top: 8px solid var(--red);
  padding: 52px 0 64px;
}

.footer-inner {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 24px;
  flex-wrap: wrap;
}

.footer-links {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: 13px;
  text-align: left;
  line-height: 2;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--gray);
}

.footer-links a:hover { color: var(--red-bright); }
.footer-links .highlight { color: var(--red-bright); }

.footer-fine {
  margin-top: 26px;
  border-top: 2px solid #2e2920;
  padding-top: 14px;
  font-family: var(--font-ui);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: .1em;
  color: var(--gray);
  display: flex;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}

/* ----------------------------------------------------------------
   Placeholder duotone (immagini mancanti)
---------------------------------------------------------------- */
.traks-placeholder {
  background: var(--ink);
  aspect-ratio: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}

.traks-placeholder img {
  width: 100%; height: 100%;
  object-fit: cover;
  opacity: .7;
}

/* ----------------------------------------------------------------
   Home — Streaming della settimana
---------------------------------------------------------------- */
.traks-streaming {
  border-bottom: 2px solid var(--fg);
  padding-bottom: 0;
}

.streaming-controls {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 14px 0;
}

.streaming-play-btn {
  flex: none;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--red);
  border: none;
  color: #fff;
  display: grid;
  place-items: center;
  cursor: pointer;
  transition: background .15s;
}
.streaming-play-btn:hover { background: var(--red-bright, #c0392b); }
.streaming-play-btn svg { width: 22px; height: 22px; }

.streaming-info { flex: 1; min-width: 0; }

.streaming-label {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0;
  padding: 0;
}

.streaming-nowplaying {
  font-size: 12px;
  color: var(--fg);
  margin: 3px 0 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.streaming-skip-btn {
  flex: none;
  width: 36px;
  height: 36px;
  background: none;
  border: 1.5px solid var(--hair);
  color: var(--ink-soft);
  display: grid;
  place-items: center;
  cursor: pointer;
  transition: border-color .15s, color .15s;
}
.streaming-skip-btn:hover { border-color: var(--fg); color: var(--fg); }
.streaming-skip-btn svg { width: 18px; height: 18px; }

.streaming-time {
  font-size: 13px;
  color: var(--ink-soft);
  flex: none;
}

.streaming-dot { color: var(--red); }

/* Condividi + timer di spegnimento (solo blocco grande in home) */
.streaming-aux-btn {
  flex: none;
  height: 36px;
  min-width: 36px;
  padding: 0 8px;
  background: none;
  border: 1.5px solid var(--hair);
  color: var(--ink-soft);
  display: inline-flex;
  align-items: center;
  gap: 4px;
  cursor: pointer;
  transition: border-color .15s, color .15s;
}
.streaming-aux-btn:hover { border-color: var(--fg); color: var(--fg); }
.streaming-aux-btn svg { width: 17px; height: 17px; }
.streaming-aux-btn.is-ok { border-color: var(--red); color: var(--red); }
.streaming-sleep-btn.is-on { border-color: var(--red); color: var(--red); }
.streaming-sleep-min { font-size: 11px; font-weight: 600; letter-spacing: .04em; }

/* Equalizzatore: barrette che ballano solo mentre la radio suona. Onesto: non
   segue le note (l'audio degli embed non è leggibile), è un segnale di "on air". */
.streaming-eq {
  flex: none;
  display: inline-flex;
  align-items: flex-end;
  gap: 2px;
  height: 14px;
  margin-left: 4px;
}
.streaming-eq i {
  width: 3px;
  height: 30%;
  background: var(--red);
  opacity: .5;
}
.traks-streaming.is-playing .streaming-eq i,
.traks-deck.is-playing .streaming-eq i {
  opacity: 1;
  animation: traks-eq .9s ease-in-out infinite;
}
.traks-streaming.is-playing .streaming-eq i:nth-child(2) { animation-delay: -.7s; }
.traks-streaming.is-playing .streaming-eq i:nth-child(3) { animation-delay: -.35s; }
.traks-streaming.is-playing .streaming-eq i:nth-child(4) { animation-delay: -.5s; }
@keyframes traks-eq {
  0%, 100% { height: 25%; }
  50%      { height: 100%; }
}
@media (prefers-reduced-motion: reduce) {
  .traks-streaming.is-playing .streaming-eq i,
  .traks-deck.is-playing .streaming-eq i { animation: none; height: 60%; }
}

/* Blocco grande in home su smartphone: i comandi stanno su una riga, la
   scritta "Radio TRAKS · musica indipendente…" va sotto a tutta larghezza.
   Senza questo la scritta andava a capo 4 volte e schiacciava l'equalizzatore. */
@media (max-width: 600px) {
  .streaming-controls { gap: 9px; flex-wrap: wrap; }
  .streaming-info   { flex: 1 1 100%; order: 9; margin-top: 2px; }
  .streaming-label  { font-size: 9px; letter-spacing: .04em; }
  .streaming-skip-btn { order: 1; }
  .streaming-play-btn { order: 2; }
  .streaming-eq       { order: 3; margin-left: 0; }
  #radio-share-btn    { order: 4; }
  #radio-sleep-btn    { order: 5; }
  .streaming-time     { order: 6; margin-left: auto; }
  .streaming-aux-btn  { height: 34px; }
}

.streaming-wave-wrap {
  position: relative;
  height: 120px;
  cursor: pointer;
  padding: 0 clamp(20px, 4vw, 48px);
  background: var(--bg);
}

.streaming-wave {
  width: 100%;
  height: 100%;
  display: block;
}

.streaming-playhead {
  position: absolute;
  top: 0; bottom: 0;
  width: 2px;
  background: var(--red);
  pointer-events: none;
  right: clamp(20px, 4vw, 48px);
  box-shadow: 0 0 12px rgba(158,20,20,.4);
}

.streaming-playhead::after {
  content: '';
  position: absolute;
  top: -6px; left: -5px;
  width: 12px; height: 6px;
  background: var(--red);
  clip-path: polygon(0 0, 100% 0, 50% 100%);
}

/* ----------------------------------------------------------------
   Home — Due colonne
---------------------------------------------------------------- */
.home-columns {
  display: grid;
  grid-template-columns: 1fr 380px;
  gap: 0;
  border-bottom: 2px solid var(--fg);
}

/* Colonna sinistra — featured */
.home-featured {
  padding: 40px 48px 40px 0;
  border-right: 2px solid var(--fg);
}

.featured-kicker { margin-bottom: 12px; }

.featured-title {
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: clamp(32px, 5.5vw, 64px);
  line-height: .95;
  letter-spacing: -.025em;
  margin-bottom: 14px;
}

.featured-title a { color: inherit; }
.featured-title a:hover { color: var(--red); }

.featured-cover {
  margin: 20px 0 24px;
}

.featured-cover img {
  width: 100%;
  aspect-ratio: 16/9;
  object-fit: cover;
  display: block;
}

.featured-byline {
  font-family: var(--font-ui);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-bottom: 28px;
}

/* Player preview in home */
.featured-player {
  background: var(--ink);
  color: var(--paper);
  padding: 18px 20px 20px;
}

.featured-player-top {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 14px;
  flex-wrap: wrap;
}

.featured-player-wave {
  height: 72px;
  position: relative;
}

.featured-wave {
  width: 100%;
  height: 100%;
  display: block;
}

/* Colonna destra — sidebar ultimi pezzi */
.home-sidebar {
  padding: 40px 0 40px 36px;
}

.sidebar-header {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--red);
  margin-bottom: 0;
  padding-bottom: 14px;
  border-bottom: 2px solid var(--fg);
}

.sidebar-item {
  border-bottom: 1px solid var(--hair);
}

.sidebar-item-link {
  display: block;
  padding: 18px 0;
  transition: background .12s;
  color: var(--fg);
}

.sidebar-item-link:hover { color: var(--red); }

.sidebar-item-cat {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 10px;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--red);
  display: block;
  margin-bottom: 6px;
}

.sidebar-item-title {
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: clamp(16px, 1.6vw, 20px);
  line-height: 1.1;
  letter-spacing: -.01em;
  margin-bottom: 6px;
}

.sidebar-item-excerpt {
  font-family: var(--font-serif);
  font-size: 14px;
  line-height: 1.5;
  color: var(--ink-soft);
  margin-bottom: 8px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.sidebar-item-meta {
  font-size: 11px;
  color: var(--gray);
  text-transform: uppercase;
  letter-spacing: .06em;
}

/* ----------------------------------------------------------------
   Home — Rubriche
---------------------------------------------------------------- */
.traks-rubriche .rubriche-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0;
  border-top: 1px solid var(--hair);
}

.rubrica {
  padding: 28px 32px 28px 0;
  border-right: 2px solid var(--fg);
}

.rubrica:last-child {
  border-right: 0;
  padding-left: 32px;
  padding-right: 0;
}

.rubrica-title {
  font-family: var(--font-ui);
  font-size: clamp(22px, 3.2vw, 36px);
  margin: 10px 0 12px;
  letter-spacing: -.02em;
}

.rubrica-desc {
  color: var(--ink-soft);
  font-size: 16px;
  max-width: 38ch;
  margin-bottom: 16px;
}

.rubrica-link {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: .08em;
  border-bottom: 2px solid var(--red);
  padding-bottom: 3px;
}

.rubrica-link:hover { color: var(--red); }

/* ----------------------------------------------------------------
   Responsive
---------------------------------------------------------------- */
@media (max-width: 1000px) {
  .home-columns { grid-template-columns: 1fr; }
  .home-featured { border-right: 0; padding-right: 0; border-bottom: 2px solid var(--fg); }
  .home-sidebar  { padding-left: 0; }
}

@media (max-width: 820px) {
  .masthead-payoff { text-align: center; }

  /* Il titolo del brano è l'unica cosa nella striscia che dice COSA stai
     ascoltando: su mobile deve esserci. Era nascosto perché non ci stava —
     a larghezza fissa la striscia chiede già più dei ~340px di un telefono.
     A cedere il posto sono l'onda (decorazione: è pure aria-hidden) e il
     tempo: l'informazione batte l'ornamento. */
  .deck-nowplaying { flex: 1 1 auto; min-width: 0; max-width: none; }
  .deck-wave { display: none; }
  .deck-time { display: none; }
  .traks-deck .wrap { gap: 12px; }

  .manifesto-inner { gap: 3px 14px; }
  .manifesto-year { margin-left: 0; }

  .streaming-wave-wrap { height: 72px; }

  .traks-flow { grid-template-columns: 1fr; }
  .traks-card { border-right: 0; }

  .traks-rubriche .rubriche-grid { grid-template-columns: 1fr; }
  .rubrica                { border-right: 0; border-bottom: 2px solid var(--fg); padding: 22px 0; }
  .rubrica:last-child     { padding-left: 0; border-bottom: 0; }

  .reactions-stream { grid-template-columns: 58px 1fr; }
  .reaction-text    { font-size: 17px; padding-left: 18px; }

  .post-title { font-size: clamp(28px, 8vw, 52px); }
}

@media (max-width: 540px) {
  .traks-nav { gap: 4px 18px; }

  /* Sul telefono vero l'etichetta ("RADIO MARLENE KUNTZ", maiuscola e
     spaziata) da sola si mangia metà striscia e al titolo resterebbero otto
     caratteri. Qui dell'etichetta resta il LED — che è un figlio con
     larghezza propria e non risente del font-size — e il titolo prende la
     riga. Da fermo non si perde l'identità della radio: la scritta dice già
     "… su TRAKS, non stop". Il testo resta nell'albero di accessibilità e
     continua a essere letto dagli screen reader. */
  .deck-live { font-size: 0; gap: 0; letter-spacing: 0; }
}

.author-info { display: none; }
.pp-multiple-authors-boxes-wrapper { display: none; }

.post-body a,
.single-content a { text-decoration: underline; }

/* ----------------------------------------------------------------
   Gallerie fotografiche — tre varianti di stile
---------------------------------------------------------------- */

/* Reset base blocco galleria WP */
.wp-block-gallery {
  margin: 2em 0;
}
.wp-block-gallery .wp-block-image { margin: 0; }
.wp-block-gallery figcaption {
  font-family: var(--font-ui);
  font-size: 12px;
  letter-spacing: .04em;
  color: var(--ink-soft);
  text-align: center;
  padding: 6px 8px;
  background: transparent;
}

/* ── Variante 1: Griglia libera (default) ── */
.wp-block-gallery.is-style-griglia,
.wp-block-gallery:not(.is-style-strip):not(.is-style-mosaico) {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 4px;
}
.wp-block-gallery.is-style-griglia .wp-block-image img,
.wp-block-gallery:not(.is-style-strip):not(.is-style-mosaico) .wp-block-image img {
  width: 100%;
  height: 220px;
  object-fit: cover;
  display: block;
  cursor: zoom-in;
  transition: opacity .2s;
}
.wp-block-gallery.is-style-griglia .wp-block-image img:hover,
.wp-block-gallery:not(.is-style-strip):not(.is-style-mosaico) .wp-block-image img:hover {
  opacity: .88;
}

/* ── Variante 2: Strip orizzontale ── */
.wp-block-gallery.is-style-strip {
  display: flex;
  overflow-x: auto;
  gap: 4px;
  scrollbar-width: thin;
  scrollbar-color: var(--hair) transparent;
  padding-bottom: 8px;
}
.wp-block-gallery.is-style-strip .wp-block-image {
  flex: none;
}
.wp-block-gallery.is-style-strip .wp-block-image img {
  height: 280px;
  width: auto;
  display: block;
  cursor: zoom-in;
  transition: opacity .2s;
}
.wp-block-gallery.is-style-strip .wp-block-image img:hover { opacity: .88; }

/* ── Variante 3: Mosaico ── */
.wp-block-gallery.is-style-mosaico {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-auto-rows: 260px;
  gap: 4px;
}
.wp-block-gallery.is-style-mosaico .wp-block-image:first-child {
  grid-column: 1 / -1;
  grid-row: span 2;
}
.wp-block-gallery.is-style-mosaico .wp-block-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  cursor: zoom-in;
  transition: opacity .2s;
}
.wp-block-gallery.is-style-mosaico .wp-block-image img:hover { opacity: .88; }

/* ── Lightbox ── */
#traks-lightbox {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 10000;
  background: rgba(20,18,16,.95);
  align-items: center;
  justify-content: center;
  cursor: zoom-out;
}
#traks-lightbox.open { display: flex; }

#traks-lightbox img {
  max-width: 92vw;
  max-height: 88vh;
  object-fit: contain;
  display: block;
  box-shadow: 0 8px 48px rgba(0,0,0,.6);
}

#traks-lightbox figcaption {
  position: absolute;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%);
  font-family: var(--font-ui);
  font-size: 13px;
  color: #d8d0bf;
  text-align: center;
  max-width: 60ch;
  pointer-events: none;
}

.traks-lb-prev,
.traks-lb-next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: 1.5px solid rgba(255,255,255,.3);
  color: #fff;
  width: 44px; height: 44px;
  display: grid;
  place-items: center;
  font-size: 20px;
  cursor: pointer;
  transition: border-color .15s;
  z-index: 1;
}
.traks-lb-prev { left: 24px; }
.traks-lb-next { right: 24px; }
.traks-lb-prev:hover,
.traks-lb-next:hover { border-color: var(--red); color: var(--red-bright); }

.traks-lb-close {
  position: absolute;
  top: 20px; right: 20px;
  background: none;
  border: none;
  color: #fff;
  font-size: 28px;
  cursor: pointer;
  line-height: 1;
  opacity: .7;
}
.traks-lb-close:hover { opacity: 1; }

/* ----------------------------------------------------------------
   "Tracciato" — firma di Sottotraccia
   Linea da sismografo/macchina della verità: piatta e discreta, con
   un unico picco rosso dove "scotta" il dato. La texture vive solo
   nel picco — il resto è un tratto sottile che quasi scompare.
---------------------------------------------------------------- */
.tracciato {
  display: block;
  width: 100%;
  line-height: 0;
}

.tracciato-svg {
  width: 100%;
  height: 100%;
  display: block;
}

.tracciato-base {
  stroke: var(--hair);
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.tracciato-peak {
  stroke: var(--red);
  stroke-width: 3;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/* Separatore tra sezioni: banda bassa e discreta */
.tracciato--separator {
  height: 48px;
  margin: 40px 0;
}

/* Testata articolo Sottotraccia: banda più alta, sotto il titolo */
.tracciato--header {
  height: 96px;
  margin: 20px 0 8px;
}

/* Animazione "la linea che scrive il picco": il JS calcola la lunghezza
   reale del path e imposta le custom properties --len; qui si anima
   solo lo stroke-dashoffset. Stato iniziale = invisibile finché il JS
   non è pronto, per evitare un lampo del tracciato già completo. */
.tracciato-peak[data-animate] {
  stroke-dasharray: var(--len, 0);
  stroke-dashoffset: var(--len, 0);
  transition: stroke-dashoffset 1.1s cubic-bezier(.2,.7,.2,1);
}
.tracciato-peak[data-animate].is-drawn {
  stroke-dashoffset: 0;
}

@media (prefers-reduced-motion: reduce) {
  .tracciato-peak[data-animate] {
    stroke-dasharray: none;
    stroke-dashoffset: 0;
    transition: none;
  }
}

/* ----------------------------------------------------------------
   "Box-dato" — callout per il dato che scotta dentro un articolo
   di Sottotraccia. Riusa il motivo del picco come bordo/accento.
---------------------------------------------------------------- */
.box-dato {
  border-left: 3px solid var(--red);
  background: var(--bg-2);
  padding: 20px 24px;
  margin: 32px 0;
}

.box-dato-label {
  font-family: var(--font-ui);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .1em;
  color: var(--red);
  margin-bottom: 6px;
  display: block;
}

.box-dato-value {
  font-family: var(--font-display);
  font-size: clamp(28px, 5vw, 44px);
  line-height: 1;
  color: var(--fg);
  margin-bottom: 8px;
  display: block;
}

.box-dato p {
  font-family: var(--font-serif);
  font-size: 16px;
  color: var(--ink-body);
  margin: 0;
}

/* ----------------------------------------------------------------
   "Sotto il palco" — rassegna live settimanale
   Tre livelli ripetuti per voce (nome / riga-dati mono / commento),
   cosi l'occhio scansiona senza dover leggere tutto. Lunghezze
   diseguali di proposito: la scelta della settimana pesa di piu,
   i raggruppamenti per città comprimono più nomi in poco spazio.
---------------------------------------------------------------- */
.sotto-il-palco { margin: 8px 0; }

/* Timeline della settimana: giovedì → mercoledì, un punto per giorno,
   pieno se ci sono live quel giorno. Funziona anche come immagine
   social a se stante (Telegram/Bluesky). */
.sip-timeline {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20px 0 28px;
  margin-bottom: 28px;
  border-bottom: 2px solid var(--bg-2);
}

.sip-timeline-day {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  flex: 1;
  position: relative;
}

.sip-timeline-day::before {
  content: '';
  position: absolute;
  top: 5px; left: 50%;
  width: 100%;
  height: 2px;
  background: var(--bg-2);
  z-index: 0;
}
.sip-timeline-day:last-child::before { display: none; }

.sip-timeline-dot {
  width: 12px; height: 12px;
  border-radius: 50%;
  background: var(--bg);
  border: 2px solid var(--gray);
  z-index: 1;
}

.sip-timeline-day.has-live .sip-timeline-dot {
  background: var(--red);
  border-color: var(--red);
}

.sip-timeline-label {
  font-family: var(--font-ui);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--ink-soft);
}
.sip-timeline-day.has-live .sip-timeline-label {
  color: var(--fg);
  font-weight: 600;
}

/* Elenco voci */
.sip-list {
  display: flex;
  flex-direction: column;
}

.sip-entry {
  padding: 22px 0;
  border-bottom: 1px solid var(--bg-2);
}
.sip-entry:first-child { padding-top: 0; }

.sip-artist {
  font-family: var(--font-display);
  color: var(--fg);
  display: block;
  line-height: 1.05;
}

.sip-meta {
  font-family: var(--font-ui);
  font-variant-numeric: tabular-nums;
  color: var(--ink-soft);
  letter-spacing: .02em;
  display: block;
  margin-top: 6px;
}

.sip-comment {
  font-family: var(--font-serif);
  color: var(--ink-body);
  margin-top: 10px;
}

/* Standard: due righe, il grosso della rassegna */
.sip-entry--standard .sip-artist { font-size: clamp(20px, 2.6vw, 25px); }
.sip-entry--standard .sip-meta   { font-size: 12px; }
.sip-entry--standard .sip-comment { font-size: 15px; line-height: 1.5; -webkit-line-clamp: 2; display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; }

/* Scelta della settimana: trattamento speciale, pesa di più */
.sip-entry--featured {
  padding: 28px 24px;
  border: none;
  border-left: 3px solid var(--red);
  background: var(--bg-2);
  margin-bottom: 8px;
}
.sip-entry--featured .sip-label {
  font-family: var(--font-ui);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .1em;
  color: var(--red);
  display: block;
  margin-bottom: 10px;
}
.sip-entry--featured .sip-artist { font-size: clamp(30px, 4.5vw, 48px); }
.sip-entry--featured .sip-meta   { font-size: 13px; }
.sip-entry--featured .sip-comment { font-size: 17px; line-height: 1.6; }

/* Raggruppamenti (città/festivalone): mini-titolo di zona + una riga
   che comprime più nomi invece di ripetere tre livelli per ciascuno. */
.sip-entry--grouped .sip-group-title {
  font-family: var(--font-ui);
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--red);
  display: block;
  margin-bottom: 8px;
}
.sip-entry--grouped .sip-group-names {
  font-family: var(--font-serif);
  font-size: 16px;
  color: var(--ink-body);
  line-height: 1.6;
}
.sip-entry--grouped .sip-group-names strong { color: var(--fg); }

@media (max-width: 640px) {
  .sip-timeline { padding: 14px 0 20px; }
  .sip-timeline-label { font-size: 9px; }
}

/* ----------------------------------------------------------------
   Mappa "Sotto il palco" — generata dal repeater ACF (vedi
   inc/sotto-il-palco.php). Profilo Italia in inchiostro sottile,
   punti rosso pieno; la "scelta della settimana" ha un anello,
   gli eventi TRAKS un contorno invece del pieno (dichiarazione
   di trasparenza).
---------------------------------------------------------------- */
.sip-map-wrap {
  background: var(--bg-2);
  padding: clamp(16px, 4vw, 32px);
}

.sip-map-svg {
  width: 100%;
  height: auto;
  max-height: 70vh;
  display: block;
}

.sip-map-italia path,
.sip-map-italia g {
  fill: var(--hair);
  stroke: var(--ink-soft);
  stroke-width: 1.4;
  stroke-linejoin: round;
}

.sip-map-point .sip-point-dot {
  fill: var(--red);
  stroke: var(--bg-2);
  stroke-width: 1.2;
  transition: r .15s ease;
}
.sip-map-point:hover .sip-point-dot,
.sip-map-point:focus .sip-point-dot { r: 8; cursor: pointer; }

.sip-map-point.is-scelta .sip-point-ring {
  fill: none;
  stroke: var(--red);
  stroke-width: 2;
  opacity: .55;
}

/* Eventi TRAKS: contorno invece di pieno, coerente con la
   dichiarazione di trasparenza (non si nasconde, ma non si confonde
   con una recensione indipendente). */
.sip-map-point.is-traks .sip-point-dot {
  fill: var(--paper);
  stroke: var(--red);
  stroke-width: 2.2;
}

.sip-point-label {
  font-family: var(--font-ui);
  font-size: 15px;
  fill: var(--ink);
  paint-order: stroke;
  stroke: var(--paper);
  stroke-width: 4px;
}

.sip-map-actions {
  display: flex;
  justify-content: flex-end;
  padding: 14px 0 0;
}

/* Tooltip al passaggio sui punti (appeso al body da sotto-il-palco.js) */
.sip-tooltip {
  position: fixed;
  z-index: 9999;
  background: var(--ink);
  color: var(--paper);
  font-family: var(--font-ui);
  font-size: 12px;
  line-height: 1.5;
  padding: 8px 12px;
  pointer-events: none;
  max-width: 220px;
  opacity: 0;
  transform: translate(-50%, calc(-100% - 12px));
  transition: opacity .12s ease;
}
.sip-tooltip.is-visible { opacity: 1; }
.sip-tooltip strong { color: var(--paper); }

/* ----------------------------------------------------------------
   Card export social (1080×1080) — fuori schermo, catturata da
   html2canvas su richiesta (stesso pattern del Level Up story
   generator: assets/js/html2canvas.min.js + sotto-il-palco.js).
---------------------------------------------------------------- */
.sip-card {
  /* position:fixed con z-index negativo mandava html2canvas in stallo
     (probabile interazione con la barra sticky del deck); un offset
     assoluto moderato invece resta fuori vista senza bloccare la
     cattura. */
  position: absolute;
  top: 0;
  left: -1200px;
  width: 1080px;
  height: 1080px;
  background: var(--bg);
  overflow: hidden;
}

.sip-card-inner {
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 64px;
}

.sip-card-kicker {
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 28px;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--red);
  margin-bottom: 4px;
}

.sip-card-title {
  font-family: var(--font-display);
  font-size: 64px;
  line-height: 1;
  color: var(--fg);
  margin-bottom: 32px;
}

.sip-card-map {
  flex: 1;
  min-height: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}
.sip-card-map .sip-map-svg { max-height: 100%; }
.sip-card-map .sip-point-label { font-size: 20px; }

.sip-card-foot {
  font-family: var(--font-ui);
  font-size: 20px;
  color: var(--ink-soft);
  text-align: center;
  margin-top: 24px;
}

/* ----------------------------------------------------------------
   "Senzacontesto" — intervista a domande fisse.
   Le domande sono uguali per tutti: stanno in secondo piano (UI,
   inchiostro tenue) e lasciano la scena alle risposte, in serif.
   Il numero progressivo dà il ritmo del questionario.
---------------------------------------------------------------- */
.senzacontesto {
  margin: 52px 0 0;
  border-top: 4px solid var(--fg);
  padding-top: 12px;
}

.sc-kicker {
  font-family: var(--font-ui);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .12em;
  color: var(--red);
  margin-bottom: 28px;
}

.sc-qa {
  display: grid;
  grid-template-columns: 56px 1fr;
  gap: 0 8px;
  padding: 22px 0;
  border-bottom: 1px solid var(--bg-2);
}

.sc-num {
  font-family: var(--font-ui);
  font-variant-numeric: tabular-nums;
  font-size: 13px;
  color: var(--gray);
  padding-top: 4px;
}

.sc-domanda {
  font-family: var(--font-ui);
  font-size: clamp(17px, 1.6vw, 19px);
  font-weight: 700;
  letter-spacing: .01em;
  line-height: 1.35;
  color: var(--fg);
  margin-bottom: 10px;
}

.sc-risposta {
  font-family: var(--font-serif);
  font-size: clamp(17px, 2vw, 21px);
  line-height: 1.5;
  color: var(--fg);
  margin: 0;
}

.sc-foto {
  margin: 32px 0 0;
}
.sc-domanda--foto { margin-bottom: 12px; }
.sc-foto img {
  display: block;
  margin-inline: auto;      /* centra le verticali */
  max-width: 100%;
  max-height: 80vh;         /* ci sta tutta, anche in verticale */
  width: auto;
  height: auto;
}

.sc-actions {
  display: flex;
  justify-content: flex-end;
  margin-top: 28px;
}

@media (max-width: 640px) {
  .sc-qa { grid-template-columns: 36px 1fr; }
}

/* ----------------------------------------------------------------
   Hub artista (taxonomy-artista.php)
---------------------------------------------------------------- */
.hub-editor-note {
  background: #fff4d6;
  border-left: 3px solid #b6202c;
  padding: 12px 16px;
  margin: 24px 0 0;
  font-family: var(--font-ui);
  font-size: 14px;
  color: var(--fg);
}
.hub-editor-note a { border-bottom: 2px solid var(--red); font-weight: 600; }

.hub-header {
  display: flex;
  gap: clamp(20px, 4vw, 44px);
  align-items: flex-start;
  padding: 44px 0 36px;
  border-bottom: 4px solid var(--fg);
  flex-wrap: wrap;
}
.hub-foto {
  flex: none;
  width: clamp(140px, 26vw, 260px);
}
.hub-foto img {
  width: 100%; height: auto; display: block;
  filter: none;
}
.hub-intro { flex: 1; min-width: 260px; }

.hub-kicker {
  font-family: var(--font-ui);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--red);
  margin-bottom: 8px;
}
.hub-name {
  font-family: var(--font-display);
  font-size: clamp(40px, 8vw, 84px);
  line-height: .92;
  letter-spacing: -.01em;
  color: var(--fg);
  margin-bottom: 12px;
}
.hub-meta {
  font-size: 13px;
  color: var(--ink-soft);
  margin-bottom: 16px;
}
.hub-cappello {
  font-family: var(--font-serif);
  font-size: clamp(18px, 2.2vw, 22px);
  line-height: 1.5;
  color: var(--ink-body);
  max-width: 60ch;
}
.hub-cappello p + p { margin-top: .6em; }

.hub-links {
  margin-top: 18px;
  display: flex;
  flex-wrap: wrap;
  gap: 8px 20px;
  font-family: var(--font-ui);
  font-size: 13px;
  font-weight: 600;
}
.hub-links a { border-bottom: 2px solid var(--red); padding-bottom: 2px; }

/* Richiamo alla radio dell'artista: avvia la striscia in cima, che su questo
   hub suona solo lui. Compare solo sopra la soglia di brani. */
.hub-radio {
  margin-top: 18px;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px 12px;
}
.hub-radio-btn {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: .1em;
  color: var(--paper);
  background: var(--red);
  border: 0;
  padding: 9px 14px;
  cursor: pointer;
  transition: background .15s;
}
.hub-radio-btn:hover { background: var(--ink); }
.hub-radio-btn svg { width: 13px; height: 13px; }
.hub-radio-hint { font-size: 12px; color: var(--ink-soft); }

.hub-section { margin-top: 44px; }
.hub-count { color: var(--gray); font-weight: 400; }
.hub-empty { padding: 44px 0; color: var(--ink-soft); }

/* ── Accesso hub artista: link sotto articolo, indice, menu ── */
.post-artisti{
  margin:2.4rem 0 0;padding:1rem 0 0;border-top:2px solid var(--fg);
  font-family:'Archivo',system-ui,sans-serif;font-size:.95rem;
  display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem .75rem;
}
.post-artisti-label{
  text-transform:uppercase;letter-spacing:.08em;font-size:.72rem;
  font-weight:700;color:var(--red);
}
.post-artisti-links a{
  display:inline-block;margin-right:.4rem;
  font-weight:700;color:var(--fg);text-decoration:none;
  border-bottom:2px solid var(--red);padding-bottom:1px;
}
.post-artisti-links a:hover{background:var(--red);color:var(--paper);border-color:var(--red);}

.artisti-index-head{margin:2rem 0 2.4rem;}
.artisti-index-sub{max-width:46ch;color:#4a453d;font-family:'Newsreader',Georgia,serif;font-size:1.05rem;}
.artisti-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));
  gap:1.6rem 1.4rem;margin-bottom:4rem;
}
.artista-card{text-decoration:none;color:var(--fg);display:block;}
.artista-card-foto{display:block;overflow:hidden;background:var(--gray);aspect-ratio:1/1;}
.artista-card-foto img{
  width:100%;height:100%;object-fit:cover;display:block;
  filter:grayscale(1) contrast(1.05);transition:filter .25s,transform .25s;
}
.artista-card:hover .artista-card-foto img{filter:grayscale(0);transform:scale(1.03);}
.artista-card-kicker{
  display:block;margin-top:.6rem;text-transform:uppercase;letter-spacing:.08em;
  font-size:.68rem;font-weight:700;color:var(--red);font-family:'Archivo',sans-serif;
}
.artista-card-name{
  display:block;margin-top:.15rem;font-family:'Archivo Black',sans-serif;
  font-size:1.15rem;line-height:1.1;
}

/* L'hub dell'artista in cima ai risultati di ricerca. Fondo scuro: deve
   staccarsi dall'elenco degli articoli, non sembrarne il primo. */
.search-hub{
  display:flex;gap:20px;align-items:center;
  background:var(--ink);color:var(--paper);
  padding:20px;margin:28px 0 8px;text-decoration:none;
  border-left:6px solid var(--red);
}
.search-hub:hover{background:#221f1a;}
.search-hub-foto{flex:0 0 108px;}
.search-hub-foto img{
  width:108px;height:108px;object-fit:cover;display:block;
  filter:grayscale(1) contrast(1.05);
}
.search-hub:hover .search-hub-foto img{filter:grayscale(0);}
.search-hub-testo{display:flex;flex-direction:column;gap:3px;min-width:0;}
.search-hub-kicker{
  font-family:var(--font-ui);font-size:10px;font-weight:700;
  letter-spacing:.18em;text-transform:uppercase;color:var(--red-bright);
}
.search-hub-nome{font-family:'Archivo Black',sans-serif;font-size:clamp(20px,3vw,28px);line-height:1.05;}
.search-hub-capp{font-family:var(--font-serif);font-size:15px;line-height:1.45;color:var(--gray);max-width:62ch;}
.search-hub-cta{
  font-family:var(--font-ui);font-size:11px;font-weight:700;
  letter-spacing:.1em;text-transform:uppercase;color:var(--paper);margin-top:5px;
}
@media (max-width:560px){
  .search-hub{flex-direction:column;align-items:flex-start;}
}

/* Vetrina degli hub in home. La griglia è la stessa dell'indice /artista/,
   ma qui le schede stanno su una riga sola: in home è un assaggio, l'elenco
   completo è a un clic. */
.home-hubs-grid{
  grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  margin-bottom:1.4rem;
}
.home-hubs-all{
  font-family:var(--font-ui);
  font-size:13px;
  font-weight:600;
}
.home-hubs-all a{border-bottom:2px solid var(--red);padding-bottom:2px;}

.artista-card-foto.is-empty{display:flex;align-items:center;justify-content:center;}
.artista-card-foto.is-empty::before{
  content:attr(data-x);font-family:'Archivo Black',sans-serif;font-size:2.2rem;
  color:var(--paper);opacity:.7;
}

/* Gallerie storiche ricostruite dagli allegati superstiti */
.traks-recovered-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;margin:24px 0;}
.traks-recovered-gallery figure{margin:0;}
.traks-recovered-gallery img{width:100%;height:100%;object-fit:cover;display:block;}
.traks-recovered-image{margin:24px 0;}
.traks-recovered-image img{max-width:100%;height:auto;display:block;}

/* ── Gallerie native TRAKS: 4 layout + lightbox ── */
.traks-gallery{margin:28px 0;}
.traks-gallery .tg-item{display:block;overflow:hidden;background:var(--gray);cursor:zoom-in;}
.traks-gallery .tg-item img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .3s;}
.traks-gallery .tg-item:hover img{transform:scale(1.04);}

/* Griglia pulita (DEFAULT) */
.traks-gallery.is-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px;}
.traks-gallery.is-grid .tg-item{aspect-ratio:1;}

/* Mosaico giustificato (proporzioni rispettate) */
.traks-gallery.is-mosaico{display:flex;flex-wrap:wrap;gap:6px;}
.traks-gallery.is-mosaico .tg-item{height:220px;flex:var(--ar,1.5) 1 calc(var(--ar,1.5) * 220px);}
.traks-gallery.is-mosaico .tg-item img{height:100%;}

/* Masonry a colonne */
.traks-gallery.is-masonry{column-count:4;column-gap:6px;}
.traks-gallery.is-masonry .tg-item{aspect-ratio:auto;margin:0 0 6px;break-inside:avoid;}
.traks-gallery.is-masonry .tg-item img{height:auto;}
@media(max-width:900px){.traks-gallery.is-masonry{column-count:3;}}
@media(max-width:560px){.traks-gallery.is-masonry{column-count:2;}}

/* Carosello orizzontale */
.traks-gallery.is-carosello{display:flex;gap:8px;overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:10px;}
.traks-gallery.is-carosello .tg-item{flex:0 0 auto;height:340px;scroll-snap-align:start;}
.traks-gallery.is-carosello .tg-item img{height:100%;width:auto;}

@media(max-width:560px){
  .traks-gallery.is-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));}
  .traks-gallery.is-mosaico .tg-item{height:150px;}
  .traks-gallery.is-carosello .tg-item{height:240px;}
}

/* Lightbox */
.tg-lightbox{position:fixed;inset:0;z-index:9999;background:rgba(15,13,10,.94);display:none;align-items:center;justify-content:center;}
.tg-lightbox.is-open{display:flex;}
.tg-lightbox .tg-stage{margin:0;max-width:92vw;max-height:88vh;display:flex;flex-direction:column;align-items:center;}
.tg-lightbox img{max-width:92vw;max-height:82vh;width:auto;height:auto;object-fit:contain;box-shadow:0 10px 40px rgba(0,0,0,.5);}
.tg-lightbox figcaption{color:var(--paper);font-family:'Archivo',sans-serif;font-size:.9rem;margin-top:12px;text-align:center;max-width:60ch;}
.tg-lightbox button{position:absolute;background:none;border:0;color:var(--paper);cursor:pointer;font-family:'Archivo',sans-serif;line-height:1;opacity:.8;transition:opacity .2s;}
.tg-lightbox button:hover{opacity:1;}
.tg-lightbox .tg-close{top:18px;right:24px;font-size:2.6rem;}
.tg-lightbox .tg-prev,.tg-lightbox .tg-next{top:50%;transform:translateY(-50%);font-size:4rem;padding:0 18px;}
.tg-lightbox .tg-prev{left:8px;}
.tg-lightbox .tg-next{right:8px;}

/* ── Nastro del venerdì: player Mixtraks in cima alla home ── */
.traks-nastro{background:var(--ink);color:var(--paper);border-bottom:2px solid var(--red);}
.nastro-row{display:flex;align-items:center;gap:20px;padding:12px 0;flex-wrap:wrap;}
.nastro-label{font-family:'Archivo',sans-serif;font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--red-bright);margin:0;white-space:nowrap;font-weight:600;}
.nastro-embed{flex:1;min-width:260px;}
.nastro-embed iframe{display:block;width:100%;border:0;border-radius:8px;}
.nastro-link{font-family:'Archivo',sans-serif;font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--paper);text-decoration:none;border-bottom:1px solid var(--red);white-space:nowrap;padding-bottom:2px;}
.nastro-link:hover{color:var(--red-bright);}
@media(max-width:640px){.nastro-row{gap:10px;padding:10px 0;}.nastro-label{font-size:.66rem;}}

/* Player del nastro dentro la fascia scura Mixtraks */
.traks-dark-band .nastro-embed{margin:18px 0 4px;}
.traks-dark-band .nastro-embed iframe{display:block;width:100%;border:0;border-radius:10px;}

/* Il CTA della fascia scura è inline: col padding verticale sbordava sul
   player sottostante. inline-block fa rispettare l'ingombro reale. */
.dark-band-cta{display:inline-block;}
.traks-dark-band .nastro-embed{margin-top:24px;}

/* Spotify sostituisce la div #mixtraks-embed con un iframe: le regole
   sulla classe si perdono, quindi si stila l'iframe della fascia. */
.traks-dark-band iframe{display:block;width:100%;border:0;border-radius:10px;margin-top:26px;}

/* ----------------------------------------------------------------
   Scheda del disco — box unico a fine recensione (.disco-card)
---------------------------------------------------------------- */
.disco-card {
  margin: 64px 0 0;
  background: var(--bg-2);
  border: 2px solid var(--fg);
  border-top: 8px solid var(--red);
  padding: 32px 32px 36px;
  font-family: var(--font-ui);
}

.disco-card__kicker {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--red);
  margin: 0 0 14px;
}

.disco-card__title {
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: clamp(22px, 3.2vw, 32px);
  line-height: 1.05;
  letter-spacing: -.02em;
  color: var(--fg);
  margin: 0 0 24px;
  padding-bottom: 22px;
  border-bottom: 1px solid var(--fg);
}

.disco-card__artist { color: var(--red); }
.disco-card__sep    { color: var(--ink-soft); margin: 0 .25em; font-weight: 400; }
.disco-card__album  { font-style: normal; }

.disco-card__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 18px 28px;
  margin: 0;
}

.disco-card__row dt {
  font-weight: 600;
  font-size: 10px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin: 0 0 3px;
}

.disco-card__row dd {
  margin: 0;
  font-size: 16px;
  color: var(--fg);
}

.disco-card__also {
  margin-top: 28px;
  padding-top: 22px;
  border-top: 1px solid var(--fg);
}

.disco-card__also-label {
  font-weight: 600;
  font-size: 10px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin: 0 0 12px;
}

.disco-card__also-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 10px 18px;
}

.disco-card__also-list a {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 15px;
  color: var(--fg);
  border-bottom: 2px solid var(--red);
  padding-bottom: 2px;
  text-decoration: none;
}

.disco-card__also-list a:hover { color: var(--red); }

.disco-card__ig {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 26px;
  padding: 9px 16px;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 13px;
  letter-spacing: .02em;
  color: var(--paper);
  background: var(--ink);
  border: 2px solid var(--fg);
  text-decoration: none;
}

.disco-card__ig:hover {
  background: var(--red);
  border-color: var(--red);
  color: var(--paper);
}

/* ----------------------------------------------------------------
   La rete — blocco "Nella rete di…" nell'hub artista
   Testo, non grafo: è la versione che leggono Google, le risposte AI
   e chi naviga da tastiera. Il grafo arriverà sopra questo, mai al
   posto suo.
---------------------------------------------------------------- */
.hub-rete {
  margin: 2.5rem 0;
  padding: 1.25rem 0 1.25rem;
  border-top: 1px solid var(--hair);
  border-bottom: 1px solid var(--hair);
}

.rete-elenco {
  list-style: none;
  margin: .75rem 0 0;
  padding: 0;
}

.rete-elenco li {
  font-family: var(--font-serif);
  color: var(--ink-body);
  line-height: 1.6;
  padding: .3rem 0;
}

.rete-elenco li + li { border-top: 1px dotted var(--hair); }

/* La frase della relazione è etichetta, non contenuto: sta indietro. */
.rete-frase {
  font-family: var(--font-ui);
  font-size: .78rem;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-right: .4em;
}

.rete-elenco a { color: var(--fg); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 2px; }
.rete-elenco a:hover { color: var(--red); }

/* Un nodo senza hub curata: c'è, si legge, non si linka. */
.rete-nodo-spoglio { color: var(--ink-soft); }

.rete-anni { font-size: .8em; color: var(--ink-soft); }

/* Il punto della fonte: piccolo, rosso, cliccabile. "Come lo sappiamo". */
.rete-fonte {
  color: var(--red) !important;
  text-decoration: none !important;
  font-weight: 700;
  padding: 0 .15em;
}
.rete-fonte:hover { text-decoration: none !important; }

.rete-nota { font-size: .72rem; color: var(--ink-soft); margin-top: .75rem; }

/* ----------------------------------------------------------------
   La rete — la mappa
   Due colori più il rosso, come tutto il resto del sito. Il tipo di
   legame si distingue per TRATTO: aggiungere colori qui vorrebbe dire
   inventare una palette che TRAKS non ha.
---------------------------------------------------------------- */
.rete-grafo {
  margin: 1rem 0 1.5rem;
  background: var(--bg-2);
  border: 1px solid var(--hair);
  overflow: hidden;
  touch-action: pan-y;
}
.rete-grafo[hidden] { display: none; }
.rete-grafo svg { display: block; }

/* Gli archi: inchiostro sottile. Spenti restano visibili appena, così la
   forma d'insieme non sparisce quando si accende un nodo. */
.rete-arco {
  stroke: var(--ink);
  stroke-width: 1;
  opacity: .16;
  transition: opacity .18s ease;
}
.rete-arco.is-acceso { opacity: .75; }

.rete-pallino {
  fill: var(--red);
  stroke: var(--paper);
  stroke-width: 1.5;
  transition: opacity .18s ease;
}
.rete-nodo { cursor: pointer; opacity: .4; transition: opacity .18s ease; }
.rete-nodo.is-acceso { opacity: 1; }

/* Il centro della vista nodo: è la pagina in cui ti trovi, si vede che è lui. */
.rete-nodo-centro .rete-pallino { fill: var(--ink); }

/* Capolinea stranieri: cerchio vuoto. Si vede che il tratto finisce lì. */
.rete-nodo-terminale .rete-pallino { fill: var(--paper); stroke: var(--red); stroke-width: 2; }
.rete-nodo-terminale { cursor: default; }

/* Le etichette compaiono solo attorno al nodo attivo: tutte insieme
   sarebbero un muro di testo sopra il disegno. */
.rete-etichetta {
  font-family: var(--font-ui);
  font-size: 11px;
  letter-spacing: .02em;
  fill: var(--ink);
  opacity: 0;
  pointer-events: none;
  transition: opacity .18s ease;
  paint-order: stroke;
  stroke: var(--bg-2);
  stroke-width: 3px;
  stroke-linejoin: round;
}
/* le etichette non si accendono col nodo: regole in fondo al file */
.rete-nodo.is-attivo .rete-etichetta { font-weight: 700; }

.rete-nodo:focus { outline: none; }
.rete-nodo:focus-visible .rete-pallino { stroke: var(--ink); stroke-width: 3; }

.rete-legenda {
  font-size: .72rem;
  color: var(--ink-soft);
  line-height: 1.5;
  margin: .5rem 0 0;
}

/* Nodo terminale nel testo: presente, non linkato, e si capisce perché. */
.rete-nodo-estero {
  color: var(--ink-soft);
  border-bottom: 1px dotted var(--gray);
  cursor: help;
}

/* ---- pagina /la-rete/ ---- */
.rete-header { margin: 2rem 0 1.5rem; }
.rete-occhiello {
  font-family: var(--font-serif);
  font-size: 1.05rem;
  line-height: 1.65;
  color: var(--ink-body);
  max-width: 46em;
}
.rete-meta { font-size: .75rem; color: var(--ink-soft); margin-top: .5rem; }
.rete-figura { margin: 0 0 2rem; }

.rete-scene { margin: 2rem 0; }
.rete-scene a { color: var(--fg); text-decoration: underline; text-underline-offset: 2px; }
.rete-scene a:hover { color: var(--red); }

.rete-indice { list-style: none; margin: .75rem 0 0; padding: 0; }
.rete-indice li {
  padding: .55rem 0;
  border-top: 1px dotted var(--hair);
  line-height: 1.6;
}
.rete-indice-nome {
  font-family: var(--font-ui);
  font-weight: 700;
  color: var(--fg);
  display: block;
}
a.rete-indice-nome:hover { color: var(--red); }
.rete-indice-legami { font-family: var(--font-serif); color: var(--ink-body); }
.rete-indice-legami a { color: var(--fg); text-decoration: underline; text-underline-offset: 2px; }
.rete-indice-legami a:hover { color: var(--red); }

/* Su schermo stretto un grafo alto quanto largo diventa illeggibile:
   si abbassa e si lascia più spazio all'elenco, che lì è la vista buona. */
@media (max-width: 640px) {
  .rete-grafo { margin-inline: calc(var(--pad) * -1); border-inline: 0; }
  .rete-etichetta { font-size: 12px; }
}

/* Chi ha chiesto meno animazioni riceve il disegno già fermo: la
   simulazione gira comunque, ma tutta prima di disegnare (vedi rete.js). */
@media (prefers-reduced-motion: reduce) {
  .rete-arco, .rete-nodo, .rete-etichetta, .rete-pallino { transition: none; }
}

/* I nomi dei pesi massimi restano accesi anche a riposo: senza, la mappa
   d'insieme è una costellazione senza nomi e non si capisce dove si è.
   Gli altri compaiono solo attorno al nodo attivo. */
.rete-nodo-nome-fisso .rete-etichetta { opacity: .85; }
.rete-nodo.mostra-nome .rete-etichetta { opacity: 1; }
.rete-nodo.is-attivo .rete-etichetta { opacity: 1; font-weight: 700; }

/* Il punto della fonte, seconda versione: prima era un carattere di
   punteggiatura alto sei pixel — invisibile, e su telefono impossibile da
   centrare col dito. Ora è un bersaglio tondo con l'area di tocco piena
   (24px, il minimo perché un dito lo prenda) e un contorno che dice che si
   clicca. Resta piccolo: è una nota a piè di pagina, non un pulsante. */
.rete-fonte {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  margin-left: .15em;
  vertical-align: -6px;
  border-radius: 50%;
  border: 1px solid var(--gray);
  color: var(--red) !important;
  font-size: 15px;
  line-height: 1;
  text-decoration: none !important;
  transition: background-color .15s ease, border-color .15s ease;
}
.rete-fonte span { display: block; margin-top: -5px; }
.rete-fonte:hover,
.rete-fonte:focus-visible {
  background: var(--red);
  border-color: var(--red);
  color: var(--paper) !important;
}

/* ----------------------------------------------------------------
   La rete — nomi e fonti, seconda versione.

   Prima ogni nome si portava dietro un cerchietto con la fonte: dieci
   nomi facevano dieci cerchietti in mezzo alle virgole, un rosario che
   spezzava la riga e non si capiva cosa fosse. Ora la riga è fatta solo
   di nomi, e le fonti stanno tutte insieme in fondo, come i crediti a
   piè di pagina di un pezzo di giornale.
---------------------------------------------------------------- */

/* Il vecchio pallino non esiste più: se resta in una pagina cache-ata
   almeno non fa danno. */
.rete-fonte { display: none; }

/* Un hub scritto da noi: sottolineatura piena, come tutti i link del sito. */
.rete-elenco a.rete-nodo-hub,
.rete-indice-legami a.rete-nodo-hub {
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
}

/* Un nodo che per ora è solo un nodo: tratteggio. Si può visitare — ci
   sono le sue parentele — ma non c'è ancora una scheda. */
.rete-elenco a.rete-nodo-nudo,
.rete-indice-legami a.rete-nodo-nudo,
a.rete-indice-nome.rete-indice-nudo {
  text-decoration: underline dotted;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  text-decoration-color: var(--gray);
}

/* La riga dei crediti. */
.rete-fonti {
  margin: 1rem 0 0;
  font-family: var(--font-ui);
  font-size: .78rem;
  line-height: 1.7;
  color: var(--ink-soft);
}
.rete-fonti-etichetta {
  text-transform: uppercase;
  letter-spacing: .06em;
  font-size: .7rem;
  color: var(--red);
  margin-right: .35em;
}
.rete-fonti a {
  color: var(--ink-soft);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
  text-decoration-color: var(--hair);
}
.rete-fonti a:hover { color: var(--red); text-decoration-color: currentColor; }
.rete-fonti-sep { margin: 0 .5em; color: var(--gray); }

/* ===== "Più letti" / "Riscoperte" / tag — aggiunto 9 ago 2026 ===== */

/* Box a schede a fine articolo */
.trk-piu-letti { margin: 48px 0 8px; }
.trk-piu-letti .trk-tabs {
  display: flex; gap: 24px;
  border-bottom: 1px solid var(--hair);
  margin-bottom: 4px;
}
.trk-piu-letti .trk-tab {
  appearance: none; background: none; border: 0; cursor: pointer;
  font-family: var(--font-ui); font-weight: 600; font-size: 13px;
  letter-spacing: .02em; color: var(--gray);
  padding: 10px 2px; margin-bottom: -1px;
  border-bottom: 2px solid transparent;
}
.trk-piu-letti .trk-tab.is-on { color: inherit; border-bottom-color: var(--red); }
.trk-panel.is-hidden { display: none; }
.trk-row {
  display: flex; gap: 14px; align-items: center;
  padding: 12px 0; border-bottom: 1px solid var(--hair);
  text-decoration: none; color: inherit;
}
.trk-row-thumb { flex: none; width: 60px; height: 60px; border-radius: 8px; overflow: hidden; }
.trk-row-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.trk-row-kick {
  display: block; font-family: var(--font-ui); font-size: 10px;
  letter-spacing: .09em; text-transform: uppercase; color: var(--gray);
}
.trk-row-tt { display: block; font-size: 15px; line-height: 1.3; margin-top: 2px; }
.trk-row:hover .trk-row-tt { color: var(--red); }
.trk-empty { color: var(--gray); font-size: 14px; padding: 12px 0; }

/* Tag "Tra i più letti" sulle card */
.card-hot {
  display: inline-block; margin-left: 8px;
  background: var(--red); color: #fff;
  font-family: var(--font-ui); font-weight: 600; font-size: 10px;
  letter-spacing: .06em; text-transform: uppercase;
  padding: 3px 8px; border-radius: 20px; vertical-align: middle;
}

/* Riscoperta in home */
.trk-riscoperta {
  display: flex; gap: 20px; align-items: stretch;
  border: 1px solid var(--hair); border-radius: 12px; overflow: hidden;
  text-decoration: none; color: inherit;
}
.trk-riscoperta-cover { flex: none; width: 180px; }
.trk-riscoperta-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.trk-riscoperta-body { padding: 20px 22px; display: flex; flex-direction: column; justify-content: center; }
.trk-riscoperta-kick {
  font-family: var(--font-ui); font-weight: 600; font-size: 11px;
  letter-spacing: .1em; text-transform: uppercase; color: var(--red); margin-bottom: 8px;
}
.trk-riscoperta-title { font-family: var(--font-serif, Georgia, serif); font-size: 22px; line-height: 1.25; }
.trk-riscoperta:hover .trk-riscoperta-title { color: var(--red); }
.trk-riscoperta-meta { margin-top: 8px; font-size: 13px; color: var(--gray); }
@media (max-width: 640px) {
  .trk-riscoperta { flex-direction: column; }
  .trk-riscoperta-cover { width: 100%; height: 180px; }
}

.post-byline .byline-ico{vertical-align:-0.14em;margin-right:3px;opacity:.75;}

/* ── Radio TRAKS: pastiglia "New entry"/"Classico" sul brano in onda (home) ──
   New entry = uscito da meno di 7 giorni; Classico = 5+ anni. Il badge sta
   dentro #radio-nowplaying, davanti al titolo; lo gestisce deck.js (radioBadge). */
.streaming-badge {
  display: inline-block;
  vertical-align: baseline;
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 9px;
  letter-spacing: .14em;
  text-transform: uppercase;
  padding: 2px 8px;
  margin-right: 8px;
  border-radius: 999px;
  line-height: 1.5;
}
.streaming-badge[hidden] { display: none; }

/* New entry — fresca e viva: pastiglia rossa piena con un filo di lucentezza */
.streaming-badge.is-new {
  color: #fff;
  background: linear-gradient(180deg, var(--red-bright, #e0584f) 0%, var(--red, #b6202c) 100%);
  box-shadow: 0 1px 2px rgba(182,32,44,.35);
}

/* Classico — ORO: lettere dorate PIENE (sempre visibili su fondo crema),
   contorno dorato e un velo d'oro nella pillola. Niente background-clip:text:
   su diversi browser lasciava il testo trasparente, cioè invisibile. */
.streaming-badge.is-classic {
  color: #a9791a;
  font-weight: 800;
  border: 1px solid rgba(184,134,11,.6);
  background: rgba(212,175,55,.14);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
}
/* Link all'articolo del brano in onda (Radio TRAKS) — additivo 21/8 */
.radio-np-link{color:inherit;text-decoration:none;border-bottom:1px dotted currentColor}
.radio-np-link:hover{border-bottom-style:solid}

/* ── Foto degli articoli centrate (feedback Fabio 30/8/2026) ──
   Cover, ritratto intervista e immagini singole nel corpo restavano a sinistra.
   Le gallerie (img nidificate in .wp-block-gallery) NON si toccano: qui solo i
   figli diretti di .post-body e le figure cover/portrait del template. */
.post-cover, .post-portrait { text-align: center; }
.post-cover img, .post-portrait img { display: block; margin-left: auto; margin-right: auto; height: auto; }
.post-body > figure.wp-block-image:not(.alignleft):not(.alignright) { text-align: center; }
.post-body > figure.wp-block-image:not(.alignleft):not(.alignright) img { margin-left: auto; margin-right: auto; }
