
  .week-nav { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; gap: 8px; }
  .week-nav-btn { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: var(--r-card); background: var(--bg); color: var(--ink); text-decoration: none; font-size: var(--fs-xl); line-height: 1; border: 1px solid var(--line); flex-shrink: 0; }
  .week-nav-btn:hover { background: var(--line-soft); }
  .week-nav-center { display: inline-flex; align-items: center; gap: 10px; }
  .week-nav-label { font-size: var(--fs-base); font-weight: 600; color: var(--ink); }
  .cal-btn { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: var(--r-control); background: none; border: 1px solid var(--line); color: var(--brand); cursor: pointer; padding: 0; }
  .cal-btn:hover { background: var(--line-soft); }
  .cal-btn svg { width: 20px; height: 20px; }
  .cal-input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
  .today-row { text-align: center; margin-bottom: 12px; }
  .today-btn { display: inline-block; font-size: var(--fs-sm); color: var(--brand); border: 1px solid var(--brand-tint-strong); background: var(--brand-tint); border-radius: var(--r-pill); padding: 4px 14px; text-decoration: none; }
  .today-btn:hover { background: var(--brand-tint-strong); }

  /* Weekday strip */
  .daystrip { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin-bottom: 24px; }
  .daystrip-day { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 7px 0 8px; border-radius: var(--r-control); text-decoration: none; border: 1px solid transparent; }
  .daystrip-day:hover { background: var(--line-soft); }
  .daystrip-dow { font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: .04em; color: var(--muted-2); }
  .daystrip-num { font-size: var(--fs-base); font-weight: 600; color: var(--ink); }
  .daystrip-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--brand); }
  .daystrip-dot.empty { background: transparent; }
  .daystrip-day.is-today { border-color: var(--brand-tint-strong); }
  .daystrip-day.is-today .daystrip-num { color: var(--brand); }
  .daystrip-day.is-selected { background: var(--brand); border-color: var(--brand); }
  .daystrip-day.is-selected .daystrip-dow, .daystrip-day.is-selected .daystrip-num { color: var(--surface); }
  .daystrip-day.is-selected .daystrip-dot { background: var(--surface); }

  /* .page--schedule (960px) gives the week-nav/daystrip room to breathe, but a
     session card's own content is short — stretched to the full column it
     reads as mostly empty. Cap the day (title + its cards) to the site's
     regular text-column width and centre it inside the wider page instead. */
  .day { max-width: 640px; margin: 0 auto 36px; scroll-margin-top: 72px; }
  .day + .day { border-top: 1px solid var(--line); padding-top: 24px; }
  .day--selected .day-title { color: var(--brand); }
  .session-card--past { opacity: .55; }
  .day-title { font-size: var(--fs-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--muted-2); margin-bottom: 10px; }
  .session-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); padding: 14px 16px; margin-bottom: 10px; display: flex; gap: 14px; align-items: flex-start; }
  /* The frame (spec 031) gives the height: 3:4 of this width. */
  .session-card-img { width: 72px; border-radius: var(--r-control); flex-shrink: 0; }
  .session-card-body { flex: 1; min-width: 0; }
  .session-status { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; margin-top: 8px; }

  /* Above the point where the schedule's wider .page--schedule column (960px)
     leaves the card's short text stacked at the left with dead space to the
     right, put status/action on the same row as title/meta instead. */
  /* «Кто идёт»: a native disclosure, so it works without JS and on touch. The
     summary keeps a 44px tap height; the list wraps under it. */
  .who-is-going { margin-top: 10px; font-size: var(--fs-sm); color: var(--muted); }
  .who-is-going summary { min-height: 44px; display: flex; align-items: center; cursor: pointer;
    color: var(--brand); font-weight: 600; line-height: 1.3; }
  .who-is-going summary { list-style: none; }
  .who-is-going summary::-webkit-details-marker { display: none; }
  /* The arrow is decoration: the empty alt text keeps screen readers on the label.
     Browsers without alt-text support keep the first declaration. */
  .who-is-going summary::before { content: "▸"; content: "▸" / ""; margin-right: 6px; }
  .who-is-going[open] summary::before { content: "▾"; content: "▾" / ""; }
  .who-is-going p { margin: 0 0 4px; line-height: 1.45; color: var(--ink); }
  @media (min-width: 700px) {
    .session-card-body { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px 16px; }
    .session-info { min-width: 0; }
    .session-status { align-items: flex-end; margin-top: 0; flex-shrink: 0; }
    .who-is-going { flex-basis: 100%; margin-top: 0; }
  }
  .session-title { font-weight: 600; font-size: var(--fs-base); margin-bottom: 6px; }
  .session-meta { font-size: var(--fs-sm); color: var(--muted); display: flex; flex-wrap: wrap; gap: 6px 12px; margin-bottom: 8px; }
  .badge { display: inline-block; font-size: var(--fs-xs); font-weight: 600; padding: 3px 10px; border-radius: var(--r-pill); }
  .badge-available { background: var(--ok-bg); color: var(--ok); }
  .badge-full { background: var(--bad-bg); color: var(--bad); }
  .badge-waitlist { background: var(--warn-bg); color: var(--warn); }
  .badge-enrolled { background: var(--info-bg); color: var(--info); }
  /* Masterclass: a paid service outside the subscription, so its card says the
     price and the terms before the client presses «записаться». */
  .badge-masterclass { background: var(--brand-tint); color: var(--brand); }
  .masterclass-note { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
  .masterclass-terms { font-size: var(--fs-xs); color: var(--muted-2); }
  .empty { color: var(--muted-2); font-size: var(--fs-sm); }

  /* Status and action are two elements on purpose (FR-016/017): the badge
     names the state, the button is the only clickable part. */
  .session-action { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
  .enrolled-row { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
  .spots-note { font-size: var(--fs-xs); color: var(--ok); }
  .cancel-inline { display: inline; margin: 0; }
  .btn-cancel { background: none; border: 1px solid var(--bad); color: var(--bad); font-size: var(--fs-xs); font-weight: 600; padding: 3px 10px; border-radius: var(--r-pill); cursor: pointer; }
  .btn-cancel:hover { background: var(--bad-bg); }
