/*
 * Schedule — three layout modes via data-view="list|cards|table"
 * Pure CSS layouts, same HTML markup for all three.
 * Uses Pico CSS variables for theme integration.
 */

/* ── Toolbar ────────────────────────────────────────────── */

.schedule-toolbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin-bottom: 1.5rem;
}

.schedule-tracks {
  flex: 1;
}

.schedule-actions {
  flex-shrink: 0;
}

.schedule-actions a[role="button"] {
  padding: 0.4rem 0.5rem;
  line-height: 0;
}

.schedule-actions a[role="button"] svg {
  display: block;
}

/* ══════════════════════════════════════════════════════════
   LIST VIEW (default)
   ══════════════════════════════════════════════════════════ */

.schedule-grid[data-view="list"] {
  display: flex;
  flex-direction: column;
}

.schedule-grid[data-view="list"] .schedule-item {
  display: grid;
  grid-template-columns: 6rem 1fr auto;
  gap: 1rem;
  padding: 1rem 1.25rem;
  border-bottom: 1px solid var(--muted-border-color);
  border-left: 3px solid var(--track-color, var(--muted-border-color));
  transition: background-color 0.15s;
}

.schedule-grid[data-view="list"] .schedule-item:last-child {
  border-bottom: none;
}

.schedule-grid[data-view="list"] .schedule-item:hover {
  background-color: var(--card-sectioning-background-color);
}

/* ══════════════════════════════════════════════════════════
   CARD VIEW
   ══════════════════════════════════════════════════════════ */

.schedule-grid[data-view="cards"] {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 1rem;
}

.schedule-grid[data-view="cards"] .schedule-item {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding: 1.25rem;
  border-radius: var(--border-radius);
  border-top: 3px solid var(--track-color, var(--muted-border-color));
  background: var(--card-background-color);
  box-shadow: var(--card-box-shadow);
  transition: box-shadow 0.15s, transform 0.15s;
}

.schedule-grid[data-view="cards"] .schedule-item:hover {
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  transform: translateY(-1px);
}

.schedule-grid[data-view="cards"] .si-time {
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--primary);
  order: -1;
}

.schedule-grid[data-view="cards"] .si-body {
  gap: 0.5rem;
}

.schedule-grid[data-view="cards"] a.si-title {
  font-size: 1.0625rem;
}

.schedule-grid[data-view="cards"] .si-speakers {
  margin-top: auto;
  padding-top: 0.5rem;
  border-top: 1px solid var(--muted-border-color);
}

/* ══════════════════════════════════════════════════════════
   TABLE VIEW
   ══════════════════════════════════════════════════════════ */

.schedule-grid[data-view="table"] {
  display: table;
  width: 100%;
  border-collapse: collapse;
}

.schedule-grid[data-view="table"] .schedule-item {
  display: table-row;
}

.schedule-grid[data-view="table"] .schedule-item:hover {
  background-color: var(--card-sectioning-background-color);
}

.schedule-grid[data-view="table"] .si-time,
.schedule-grid[data-view="table"] .si-body,
.schedule-grid[data-view="table"] .si-bookmark-cell {
  display: table-cell;
  padding: 0.75rem 1rem;
  border-bottom: 1px solid var(--muted-border-color);
  vertical-align: top;
}

.schedule-grid[data-view="table"] .si-time {
  white-space: nowrap;
  width: 6rem;
  border-left: 3px solid var(--track-color, var(--muted-border-color));
}

.schedule-grid[data-view="table"] .si-bookmark-cell {
  width: 2.5rem;
  text-align: center;
}

/* ══════════════════════════════════════════════════════════
   ROOM VIEW (time × rooms grid)
   ══════════════════════════════════════════════════════════ */

.schedule-room-grid table {
  width: 100%;
  border-collapse: collapse;
  table-layout: fixed;
}

.schedule-room-grid th,
.schedule-room-grid td {
  padding: 0.75rem;
  border: 1px solid var(--muted-border-color);
  vertical-align: top;
}

.schedule-room-grid thead th {
  background: var(--card-sectioning-background-color);
  font-size: 0.8125rem;
  font-weight: 600;
  text-align: center;
  position: sticky;
  top: 0;
  z-index: 1;
}

.sr-time-col {
  width: 6.5rem;
}

.sr-time {
  font-size: 0.875rem;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  color: var(--muted-color);
  white-space: nowrap;
  text-align: center;
}

.sr-cell {
  border-left: 3px solid var(--track-color, transparent);
  min-width: 10rem;
}

.sr-cell.bookmarked {
  background-color: var(--card-sectioning-background-color);
  border-left-color: var(--primary);
}

.sr-talk {
  display: flex;
  flex-direction: column;
  gap: 0.375rem;
}

a.sr-title,
a.sr-title:visited {
  font-weight: 600;
  font-size: 0.875rem;
  line-height: 1.35;
  color: var(--color);
  text-decoration: none;
}

a.sr-title:hover {
  color: var(--primary);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.sr-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
  font-size: 0.6875rem;
  line-height: 1;
}

.sr-meta > span {
  display: inline-block;
  padding: 0.2rem 0.5rem;
  border-radius: 999px;
}

.sr-speakers {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  margin-top: 0.25rem;
}

.sr-speakers .si-speaker {
  font-size: 0.75rem;
}

.sr-speakers .si-avatar {
  width: 1.25rem;
  height: 1.25rem;
  min-width: 1.25rem;
  max-width: 1.25rem;
}

@media (max-width: 768px) {
  .schedule-room-grid {
    margin: 0 -1rem;
  }

  .sr-cell {
    min-width: 8rem;
  }
}

/* ══════════════════════════════════════════════════════════
   SHARED ELEMENTS
   ══════════════════════════════════════════════════════════ */

/* ── Time ───────────────────────────────────────────────── */

.si-time {
  font-size: 0.875rem;
  font-variant-numeric: tabular-nums;
  color: var(--muted-color);
  white-space: nowrap;
}

/* ── Body ───────────────────────────────────────────────── */

.si-body {
  display: flex;
  flex-direction: column;
  gap: 0.375rem;
  min-width: 0;
}

.si-header {
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
}

a.si-title,
a.si-title:visited {
  font-weight: 600;
  font-size: 1rem;
  line-height: 1.4;
  color: var(--color);
  text-decoration: none;
}

a.si-title:hover {
  color: var(--primary);
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* ── Meta (format, track, room) ─────────────────────────── */

.si-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 0.375rem;
  font-size: 0.75rem;
  line-height: 1;
}

.si-meta > span {
  display: inline-block;
  padding: 0.25rem 0.625rem;
  border-radius: 999px;
}

.si-format {
  background-color: var(--card-sectioning-background-color);
  color: var(--muted-color);
}

.si-track {
  background-color: var(--track-color, var(--secondary-background));
  color: var(--secondary-inverse, #fff);
}

.si-room {
  background-color: transparent;
  border: 1px solid var(--muted-border-color);
  color: var(--muted-color);
}

/* ── Speakers ───────────────────────────────────────────── */

.si-speakers {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-top: 0.125rem;
}

a.si-speaker,
a.si-speaker:visited {
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
  font-size: 0.8125rem;
  color: var(--muted-color);
  text-decoration: none;
}

a.si-speaker:hover {
  color: var(--primary);
}

img.si-avatar,
span.si-avatar {
  width: 1.5rem;
  height: 1.5rem;
  min-width: 1.5rem;
  max-width: 1.5rem;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}

.si-avatar--placeholder {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background-color: var(--secondary-background);
  color: var(--secondary-inverse, #fff);
  font-size: 0.6875rem;
  font-weight: 600;
}

/* ── Bookmark ───────────────────────────────────────────── */

.si-bookmark {
  all: unset;
  cursor: pointer;
  flex-shrink: 0;
  padding: 0.25rem;
  border-radius: var(--border-radius);
  color: var(--muted-color);
  transition: color 0.15s;
  line-height: 0;
}

.si-bookmark:hover {
  color: var(--primary);
}

.si-bookmark svg {
  display: block;
  fill: none;
  transition: fill 0.15s, stroke 0.15s;
}

.si-bookmark.active {
  color: var(--primary);
}

.si-bookmark.active svg {
  fill: var(--primary);
  stroke: var(--primary);
}

.schedule-item.bookmarked {
  background-color: var(--card-sectioning-background-color);
}

.schedule-grid[data-view="list"] .schedule-item.bookmarked {
  border-left-color: var(--primary);
}

.schedule-grid[data-view="cards"] .schedule-item.bookmarked {
  border-top-color: var(--primary);
}

.schedule-grid[data-view="table"] .schedule-item.bookmarked .si-time {
  border-left-color: var(--primary);
}

/* ── Responsive ─────────────────────────────────────────── */

@media (max-width: 480px) {
  .schedule-grid[data-view="list"] .schedule-item {
    grid-template-columns: 1fr auto;
    gap: 0.25rem;
  }

  .schedule-grid[data-view="list"] .si-time {
    grid-column: 1 / -1;
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--primary);
  }

  .schedule-grid[data-view="cards"] {
    grid-template-columns: 1fr;
  }

  .schedule-grid[data-view="table"] {
    display: flex;
    flex-direction: column;
  }

  .schedule-grid[data-view="table"] .schedule-item {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    padding: 0.75rem 1rem;
    border-bottom: 1px solid var(--muted-border-color);
  }

  .schedule-grid[data-view="table"] .si-time,
  .schedule-grid[data-view="table"] .si-body,
  .schedule-grid[data-view="table"] .si-bookmark-cell {
    display: block;
    padding: 0;
    border-bottom: none;
  }

  .schedule-toolbar {
    flex-direction: column;
    align-items: stretch;
  }
}
