.season-schedule-toolbar { align-items: center; }
.season-schedule-toolbar__actions { display: flex; align-items: center; flex-wrap: wrap; gap: .5rem; }
/* Frame scrolls horizontally only so sticky header tracks the page (see tables.css). */
.season-setup-sheet {
  border: 1px solid var(--border-primary);
  border-radius: var(--radius-panel);
  overflow-x: auto;
  overflow-y: clip;
  max-width: 100%;
  background: var(--bg-surface);
  -webkit-overflow-scrolling: touch;
}
.season-grid-header, .season-grid-row { display: grid; grid-template-columns: 10.75rem minmax(0, 1fr) minmax(0, 1fr); min-width: 38rem; }
/* Column chrome matches workspace head — a real step above the sheet paper. */
.season-grid-header {
  position: sticky;
  top: 0;
  z-index: 3;
  background: var(--workspace-head-bg);
  color: var(--text-primary);
  font-size: .8rem;
  font-weight: 600;
  border-bottom: 1px solid var(--workspace-head-border);
}
.season-grid-header > div { padding: .6rem .75rem; text-align: center; border-inline-end: 1px solid var(--workspace-head-border); }
.season-grid-header > div:first-child { position: sticky; left: 0; z-index: 4; background: var(--workspace-head-bg); text-align: start; }
.season-grid-row { border-top: 1px solid var(--border-primary); min-height: 3rem; background: transparent; }
.season-grid-date {
  position: sticky;
  left: 0;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .375rem;
  padding: .375rem .625rem;
  border-inline-end: 1px solid var(--border-primary);
  background: var(--bg-surface);
  font-size: .8rem;
  white-space: nowrap;
}
.season-grid-events {
  grid-column: 2 / -1;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-auto-flow: row dense;
  gap: .125rem .5rem;
  padding: .375rem .5rem;
  align-items: center;
  background-image: linear-gradient(to right, transparent calc(50% - .5px), var(--border-primary) calc(50% - .5px), var(--border-primary) calc(50% + .5px), transparent calc(50% + .5px));
}
.season-grid-event {
  min-width: 0;
  width: 100%;
  padding: .15rem .35rem;
  border-radius: var(--radius-button);
  box-sizing: border-box;
}
.season-grid-event[data-program=all] { grid-column: 1 / -1; }
.season-grid-event[data-program=upn], .season-grid-meeting-line[data-program=upn],
.season-grid-subordinate[data-program=upn] { grid-column: 1; }
.season-grid-event[data-program=upyu], .season-grid-meeting-line[data-program=upyu],
.season-grid-subordinate[data-program=upyu] { grid-column: 2; }
.season-grid-subordinate[data-program=all] { grid-column: 1 / -1; }
/* Match meeting-line left chrome so titles line up without a drag handle. */
.season-grid-subordinate {
  --season-chrome: 1.75rem;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .15rem .35rem;
  min-width: 0;
  width: 100%;
  min-height: 2.3rem;
  padding: .15rem var(--season-chrome) .15rem var(--season-chrome);
  border-radius: var(--radius-button);
  box-sizing: border-box;
  text-decoration: none;
  color: inherit;
  background: var(--bg-elevated);
}
.season-grid-subordinate:hover,
.season-grid-subordinate:focus-visible {
  background: color-mix(in srgb, var(--bg-elevated) 70%, var(--border-primary));
  outline: none;
}
.season-grid-subordinate.is-canceled .season-grid-subordinate__title {
  text-decoration: line-through;
  opacity: .7;
}
.season-grid-subordinate__title {
  font: inherit;
  font-size: .85rem;
  font-weight: 400;
  line-height: 1.25;
  min-width: 0;
}
.season-grid-subordinate__source {
  font-size: .75rem;
  font-weight: 400;
  color: var(--text-muted);
  min-width: 0;
}
/*
 * Breaks and holidays: soft full chip on the event (not a half-filled line).
 * Quieter than month/header chrome; skhodyny stay on clear paper.
 */
.season-grid-event[data-effect=break],
.season-grid-event[data-season-holiday=true] {
  background: var(--bg-elevated);
}
.season-grid-event[data-effect=break] .season-grid-title,
.season-grid-event[data-season-holiday=true] .season-grid-title {
  color: var(--text-primary);
}
.season-grid-meeting-line {
  /* Title/meta stay in flow; drag / undo / menu overlay so they never shift centering. */
  --season-chrome: 1.75rem;
  position: relative;
  display: flex;
  align-items: center;
  gap: .125rem;
  min-width: 0;
  width: 100%;
  min-height: 2.3rem;
  padding: .15rem calc(var(--season-chrome) * 2) .15rem var(--season-chrome);
  border-radius: var(--radius-button);
  box-sizing: border-box;
}
/* Same amber cell wash as roster / sheet pending cells — color only, same box size. */
.season-grid-meeting-line.is-unsaved,
.season-grid-event.is-unsaved {
  background: color-mix(in srgb, var(--warning) 16%, var(--bg-surface));
}
.season-meeting-coverage .selectable-check-option.is-unsaved {
  border-style: dashed;
}
.season-meeting-coverage .selectable-check-option.is-unsaved .form-check-input {
  border-style: dashed;
  border-width: 1.5px;
  border-color: var(--border-primary);
}
.season-meeting-coverage .selectable-check-option.is-unsaved .form-check-input:checked {
  background-color: var(--bg-surface);
  background-image: var(--form-check-unsaved-bg-image);
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
}
.season-grid-drag { cursor: grab; touch-action: none; opacity: .45; font-size: 1rem; }
.season-grid-drag:hover, .season-grid-drag:focus-visible { opacity: 1; }
.season-date-grid.is-dragging, .season-date-grid.is-dragging * { cursor: grabbing; user-select: none; }
body.season-grid-dragging { cursor: grabbing; user-select: none; }
.season-grid-drag-source {
  opacity: 0.35;
  outline: 1px dashed var(--accent-primary);
  outline-offset: -1px;
  border-radius: var(--radius-button);
  background: color-mix(in srgb, var(--accent-primary) 6%, var(--bg-surface));
}
.season-grid-drag-ghost {
  position: fixed;
  z-index: 1090;
  margin: 0;
  pointer-events: none;
  opacity: 0.96;
  border-radius: var(--radius-button);
  background: var(--bg-elevated);
  box-shadow: var(--shadow-lg, 0 12px 28px rgba(15, 23, 42, 0.2));
  border: 1px solid var(--accent-primary);
}
.season-grid-drop-preview {
  pointer-events: none;
  min-height: 2rem;
  opacity: 0.55;
  border-radius: var(--radius-button);
  border: 1px dashed var(--accent-primary);
  background: color-mix(in srgb, var(--accent-primary) 14%, var(--bg-elevated));
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent-primary) 20%, transparent);
}
.season-grid-drop-preview[data-program=all] { grid-column: 1 / -1; }
.season-grid-drop-preview[data-program=upn] { grid-column: 1; }
.season-grid-drop-preview[data-program=upyu] { grid-column: 2; }
.season-grid-drag-ghost .season-grid-title,
.season-grid-drop-preview .season-grid-title,
.season-grid-drag-ghost .season-grid-meeting-title,
.season-grid-drop-preview .season-grid-meeting-title {
  display: block;
  min-height: 2rem;
  padding: .25rem .375rem;
  font-size: .85rem;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.season-grid-event__line {
  --season-chrome: 1.75rem;
  position: relative;
  display: flex;
  align-items: center;
  gap: .25rem;
  min-width: 0;
  min-height: 2.3rem;
  /* Left: drag. Right: undo slot + menu (always reserved so layout never jumps). */
  padding-inline: var(--season-chrome) calc(var(--season-chrome) * 2);
}
/* Full-row events: equal rails so centered titles stay geometrically centered. */
.season-grid-event[data-program=all] .season-grid-event__line {
  padding-inline: calc(var(--season-chrome) * 2);
}
.season-grid-event__line .season-grid-drag,
.season-grid-meeting-line .season-grid-drag {
  position: absolute;
  inset-inline-start: 0;
  top: 50%;
  transform: translateY(-50%);
  z-index: 1;
}
.season-grid-event__line .season-grid-event__menu,
.season-grid-meeting-line .season-grid-event__menu {
  position: absolute;
  inset-inline-end: 0;
  top: 50%;
  transform: translateY(-50%);
  z-index: 1;
}
.season-grid-event__line .season-grid-meeting-undo,
.season-grid-meeting-line .season-grid-meeting-undo {
  position: absolute;
  inset-inline-end: var(--season-chrome);
  top: 50%;
  transform: translateY(-50%);
  z-index: 1;
}
/* Sheet cell, not a form-control — avoids double focus ring + mobile 16px jump. */
.season-grid-event .season-grid-title,
.season-grid-meeting-line .season-grid-meeting-title {
  min-width: 0;
  flex: 1 1 auto;
  min-height: 2rem;
  height: 2rem;
  width: 100%;
  margin: 0;
  padding: .25rem .375rem;
  border: 1px solid transparent;
  border-radius: var(--radius-button);
  background: transparent;
  box-shadow: none;
  color: var(--text-primary);
  font: inherit;
  font-size: .85rem;
  line-height: 1.25;
}
.season-grid-event .season-grid-title:focus,
.season-grid-meeting-line .season-grid-meeting-title:focus {
  border-color: var(--accent-primary);
  background: var(--bg-input);
  outline: none;
  box-shadow: 0 0 0 3px rgba(var(--accent-primary-rgb), 0.18);
}
.season-grid-event .season-grid-title::placeholder,
.season-grid-meeting-line .season-grid-meeting-title::placeholder {
  color: var(--text-tertiary);
}
.season-grid-meeting-meta {
  flex: 0 0 auto;
  font-size: .7rem;
  color: var(--text-secondary);
  white-space: nowrap;
}
.season-grid-range { flex: 0 0 auto; font-size: .7rem; color: var(--text-secondary); white-space: nowrap; }
.season-grid-icon { display: inline-grid; place-items: center; flex: 0 0 1.75rem; width: 1.75rem; height: 1.75rem; min-height: 1.75rem; padding: 0; border: 0; border-radius: var(--radius-button); background: transparent; color: var(--text-secondary); line-height: 1; font-size: 1.1rem; cursor: pointer; }
.season-grid-icon:hover { background: var(--bg-hover); color: var(--accent-primary); }
.season-grid-icon:focus-visible { outline: 2px solid var(--accent-primary); outline-offset: 1px; }
.season-grid-event__menu { opacity: .45; letter-spacing: .05em; }
.season-grid-event:hover .season-grid-event__menu, .season-grid-event:focus-within .season-grid-event__menu { opacity: 1; }
.season-grid-event__menu[aria-expanded=true] { opacity: 1; background: var(--bg-hover); color: var(--accent-primary); }
.season-item-menu {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 1080;
  width: 0;
  height: 0;
  overflow: visible;
  pointer-events: none;
}
.season-item-menu:not(.show),
.season-item-menu[hidden] { display: none !important; }
.season-item-menu.show { display: block; }
.season-item-menu__bridge {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
  pointer-events: none;
}
.season-item-menu__bridge path {
  fill: transparent;
  pointer-events: fill;
}
.season-item-menu__panel {
  position: fixed;
  z-index: 1;
  min-width: 11.5rem;
  max-width: min(18rem, calc(100vw - 1rem));
  padding: .25rem;
  border: 1px solid var(--border-primary);
  border-radius: var(--radius-panel);
  background: var(--bg-surface);
  box-shadow: var(--shadow-dropdown);
  pointer-events: auto;
}
.season-item-menu__panel > [role=menuitem] {
  display: block;
  width: 100%;
  margin: 0;
  padding: .45rem .65rem;
  border: 0;
  border-radius: var(--radius-button);
  background: transparent;
  color: var(--text-primary);
  font: inherit;
  font-size: .85rem;
  line-height: 1.25;
  text-align: start;
  cursor: pointer;
}
.season-item-menu__panel > [role=menuitem]:hover,
.season-item-menu__panel > [role=menuitem]:focus-visible {
  background: var(--bg-hover);
  color: var(--accent-primary);
  outline: none;
}
.season-item-menu__panel > [role=menuitem].is-danger {
  color: var(--danger-fg);
}
.season-item-menu__panel > [role=menuitem].is-danger:hover,
.season-item-menu__panel > [role=menuitem].is-danger:focus-visible {
  background: var(--danger-bg-hover);
  color: var(--danger-fg-strong);
}
.season-grid-meeting-line .season-grid-drag,
.season-grid-meeting-line .season-grid-event__menu,
.season-grid-meeting-line .season-grid-meeting-undo,
.season-grid-event .season-grid-meeting-undo { opacity: .45; }
.season-grid-meeting-line:hover .season-grid-drag,
.season-grid-meeting-line:focus-within .season-grid-drag,
.season-grid-meeting-line:hover .season-grid-event__menu,
.season-grid-meeting-line:focus-within .season-grid-event__menu,
.season-grid-meeting-line:hover .season-grid-meeting-undo:not(.is-placeholder),
.season-grid-meeting-line:focus-within .season-grid-meeting-undo:not(.is-placeholder),
.season-grid-meeting-line.is-unsaved .season-grid-meeting-undo:not(.is-placeholder),
.season-grid-event:hover .season-grid-meeting-undo:not(.is-placeholder),
.season-grid-event:focus-within .season-grid-meeting-undo:not(.is-placeholder),
.season-grid-event.is-unsaved .season-grid-meeting-undo:not(.is-placeholder) { opacity: 1; }
.season-grid-meeting-undo {
  color: var(--text-secondary);
}
.season-grid-meeting-undo.is-placeholder {
  opacity: 0 !important;
  pointer-events: none;
}
.season-grid-meeting-undo:hover,
.season-grid-meeting-undo:focus-visible {
  color: var(--accent-primary);
}
@media (hover: none) {
  .season-grid-meeting-line .season-grid-drag,
  .season-grid-meeting-line .season-grid-event__menu,
  .season-grid-meeting-line .season-grid-meeting-undo:not(.is-placeholder),
  .season-grid-event .season-grid-meeting-undo:not(.is-placeholder) { opacity: 1; }
}
.season-grid-events:has(.season-grid-event[data-program=all]),
.season-grid-events:has(.season-grid-drop-preview[data-program=all]),
.season-grid-events:has(.season-grid-boundary) { background-image: none; }
.season-grid-event[data-program=all] .season-grid-title { text-align: center; }
.season-grid-boundary {
  grid-column: 1 / -1;
  width: 100%;
  padding: .375rem;
  border: 0;
  background: transparent;
  font-weight: 600;
  font-size: .85rem;
  color: var(--accent-primary);
  text-align: center;
  cursor: pointer;
}
.season-grid-boundary:hover { text-decoration: underline; }
.season-grid-boundary:focus-visible { outline: 2px solid var(--accent-primary); outline-offset: 1px; }
/* Month bands sit under the column header on the paper ladder. */
.season-grid-month {
  min-width: 38rem;
  padding: .35rem .75rem;
  border-top: 1px solid var(--workspace-sub-nav-border);
  background: var(--workspace-sub-nav-bg);
  color: var(--text-secondary);
  font-size: .75rem;
  font-weight: 600;
}
.season-editor-choices { display: flex; flex-wrap: wrap; gap: .375rem; }
.season-editor-choices [aria-pressed=true] { background: var(--btn-primary-bg); color: var(--text-inverse); }
#season-event-editor input, #season-event-editor select { min-width: 0; }
@media (hover: none) { .season-grid-event__menu { opacity: 1; } }
.season-setup-dates { display: flex; flex-wrap: wrap; gap: .5rem; }
.season-setup-dates input { width: 10rem; }
.season-setup [hidden], .season-setup-pool [hidden] { display: none !important; }

.season-programs, .season-template-options { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; }
.season-programs--single { grid-template-columns: minmax(0, 1fr); }
.season-wizard-programs { margin-bottom: 0; }
.season-wizard-days__list { margin-top: 0; }
.season-program { min-width: 0; border: 0; padding: 0; }
.season-program + .season-program { border-inline-start: 1px solid var(--border-primary); padding-inline-start: 1rem; }
.season-program:not(.season-program--standalone) .form-label { font-size: .8rem; margin-bottom: .25rem; }
.season-program:not(.season-program--standalone) .form-control,
.season-program:not(.season-program--standalone) .form-select { min-height: 2.25rem; padding: .375rem .625rem; font-size: .85rem; }
.season-program .form-select { appearance: auto; }
.season-program__times { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: .5rem; }
.season-program__times input { min-width: 0; }
.season-program__weeks { flex: 0 0 4.5rem; }
.season-program [data-season-schedule-target=firstDate] { font-size: .8rem; }
.season-program legend { float: none; width: auto; padding: 0; margin: 0; }
.season-program--standalone { margin-bottom: .25rem; }
.season-program [hidden], #season-schedule-wizard [hidden] { display: none !important; }
.season-wizard-year { max-width: 10rem; }
.season-template-option { display: flex; flex-direction: column; padding: 1rem; border: 1px solid var(--border-primary); border-radius: var(--radius-panel); background: var(--bg-surface); cursor: pointer; min-width: 0; }
.season-template-option:has(input:checked) { border-color: var(--accent-primary); outline: 1px solid var(--accent-primary); }
.season-template-option:focus-within { outline: 2px solid var(--accent-primary); outline-offset: 2px; }
.season-template-preview { padding: .75rem; background: var(--bg-primary); border-radius: var(--radius-panel); }
.season-template-preview__events { list-style: none; margin: 0; padding: 0; }
.season-template-preview__events li { display: flex; flex-direction: column; gap: .1rem; padding: .5rem 0; border-top: 1px solid var(--border-primary); font-size: .85rem; }
.season-wizard-option { max-width: 100%; }
.season-wizard-event { max-width: 100%; white-space: normal; text-align: start; justify-content: flex-start; gap: .4rem; padding: .4rem .65rem; }
.season-wizard-event [data-event-caption] { white-space: nowrap; }
.season-wizard-event__mark::before { content: '+'; }
.season-wizard-option .btn-check:checked + .season-wizard-event { background: var(--btn-primary-bg); border-color: var(--btn-primary-bg); color: white; }
.season-wizard-option .btn-check:checked + .season-wizard-event .season-wizard-event__mark::before { content: '✓'; }
.season-wizard-option .btn-check:focus-visible + .season-wizard-event { outline: 2px solid var(--accent-primary) !important; outline-offset: 2px; }
.season-meeting-coverage .selectable-check-list { margin-top: 0; }
.season-meeting-coverage__group + .season-meeting-coverage__group { margin-top: 0.85rem; }
.season-meeting-coverage__heading {
  margin: 0 0 0.35rem;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--text-muted);
}
.season-meeting-coverage__done-hint {
  max-width: 16rem;
  line-height: 1.35;
}
@media (max-width: 575.98px) {
  .season-programs { grid-template-columns: 1fr; }
  .season-program + .season-program { border-inline-start: 0; border-block-start: 1px solid var(--border-primary); padding-inline-start: 0; padding-block-start: .75rem; }
  .season-template-options { grid-template-columns: 1fr; gap: .75rem; }
  .season-template-option { display: flex; flex-direction: column; padding: .6rem; }
  .season-template-preview { padding: .3rem; }
}
