/* Festival planner components on the festival website's own design system.
   site/site.css (vendored from the website repo) supplies the tokens, header,
   footer, glass material, buttons, chat panel and both themes. This file only
   lays out the planner and styles planner-specific parts with those tokens. */

.sjr-planner { max-width: 1440px; }
.planner-layout { display: grid; grid-template-columns: minmax(0, 1fr) min(430px, 34vw); gap: 40px; align-items: start; }
.planner-stage { display: grid; grid-template-columns: minmax(0, 1fr); gap: 32px; min-width: 0; }
.planner-stage > .glass { margin: 0; min-width: 0; }
.planner-intro h1 { margin-bottom: 14px; }
.planner-intro p:last-child { margin-bottom: 0; }
.sjr-planner h2 { margin-bottom: 18px; }

/* Docked assistant: the site's chat panel, held beside the plan. */
.planner-chat { position: sticky; top: calc(var(--sjr-header-height) + 20px); height: calc(100dvh - var(--sjr-header-height) - 84px); min-height: 520px; width: auto; }
.planner-chat .sjr-chat-header > div { flex-direction: column; align-items: flex-start; gap: 2px; }
.planner-chat-intro { font-size: 14px; margin: 0; padding: 12px 18px 0; }
.planner-chat-body { flex: 1 1 0; min-height: 0; display: flex; flex-direction: column; }
.planner-chat .sjr-chat-message { white-space: normal; }
.planner-chat .sjr-chat-message p:last-child, .planner-chat .sjr-chat-message ul:last-child { margin-bottom: 0; }
.planner-chat .sjr-chat-message ul { margin: 0 0 .7em; padding-left: 1.2em; }
.planner-chat .sjr-chat-message.user { margin-left: 12%; }
.planner-chat .sjr-chat-message.assistant { margin-right: 6%; }
.planner-chat .sjr-chat-form textarea { flex: 1 1 auto; }
.planner-send { flex: 0 0 auto; height: 44px; }
.planner-suggestions { display: flex; flex-wrap: wrap; gap: 8px; padding: 0 18px 10px; }
.planner-suggestion { min-height: 40px; padding: 8px 12px; font-size: 13px; text-align: left; color: var(--sjr-ink); }
.typing { display: flex; gap: 5px; width: max-content; }
.typing span { width: 7px; height: 7px; border-radius: 50%; background: var(--sjr-gold); animation: planner-blink 1.2s infinite; }
.typing span:nth-child(2) { animation-delay: .2s; } .typing span:nth-child(3) { animation-delay: .4s; }
@keyframes planner-blink { 0%, 80%, 100% { opacity: .25; } 40% { opacity: 1; } }

/* Narrow screens: one view at a time, switched with the site's control style. */
.planner-tabs { display: none; }
@media (max-width: 1050px) {
  .planner-tabs { display: flex; gap: 8px; position: sticky; top: var(--sjr-header-height); z-index: 20; padding: 10px 0; margin: -40px 0 20px; background: color-mix(in srgb, var(--sjr-base) 88%, transparent); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); border-bottom: 1px solid var(--sjr-border); }
  .planner-tabs button { flex: 1; position: relative; font-weight: 600; font-size: 14px; }
  .planner-tabs button[aria-selected="true"] { color: var(--sjr-gold); border-color: var(--sjr-gold); background: color-mix(in srgb, var(--sjr-gold) 14%, transparent); }
  .planner-tabs button.has-update::after { content: ''; position: absolute; top: 7px; right: 10px; width: 8px; height: 8px; border-radius: 50%; background: var(--sjr-gold); }
  .planner-layout { grid-template-columns: 1fr; }
  .planner-layout > [data-active="false"] { display: none; }
  .planner-chat { position: static; width: 100%; height: calc(100dvh - var(--sjr-header-height) - 96px); min-height: 440px; }
}

/* Controls */
.planner-label { display: block; font-size: 13px; font-weight: 600; letter-spacing: .02em; color: var(--sjr-muted); margin-bottom: 8px; }
.planner-row { display: flex; flex-wrap: wrap; gap: 18px 24px; align-items: flex-end; margin-bottom: 20px; }
.planner-field { display: block; }
.planner-options { display: flex; flex-wrap: wrap; gap: 8px; }
.planner-options button { font-size: 14px; color: var(--sjr-ink); }
.planner-options button[aria-pressed="true"] { border-color: var(--sjr-gold); color: var(--sjr-gold); background: color-mix(in srgb, var(--sjr-gold) 16%, transparent); }
.planner-field select { min-height: 44px; padding: 10px 12px; border: 1px solid var(--sjr-border); border-radius: 3px; background: #ffffff07; color: var(--sjr-ink); }
[data-theme="light"] .planner-field select { background: #fffaf0; }
.interests { border: 0; padding: 0; margin: 0 0 24px; min-width: 0; }
.planner-primary { font-size: 14px; color: var(--sjr-gold); }
.planner-note { font-size: 14px; margin-bottom: 10px; }

.section-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 18px; }
.section-head h2 { margin: 0; }
.actions { display: flex; flex-wrap: wrap; gap: 8px; }
.actions button { font-size: 13px; font-weight: 600; }
.segmented { display: inline-flex; }
.segmented button { font-size: 13px; font-weight: 600; border-radius: 0; }
.segmented button:first-child { border-radius: 4px 0 0 4px; }
.segmented button:last-child { border-radius: 0 4px 4px 0; margin-left: -1px; }
.segmented button[aria-pressed="true"] { color: var(--sjr-gold); border-color: var(--sjr-gold); background: color-mix(in srgb, var(--sjr-gold) 14%, transparent); position: relative; }
#plan:focus { outline: none; }

.notice { border-left: 3px solid var(--sjr-gold); background: color-mix(in srgb, var(--sjr-gold) 8%, transparent); padding: 10px 14px; font-size: 14px; color: var(--sjr-ink); max-width: none; }
.notice.error { border-left-color: var(--sjr-orange); }
.conflicts ul { margin: 6px 0 0; padding-left: 1.2em; }
.small { font-size: 14px; }
.muted { color: var(--sjr-muted); }

/* Your plan: the schedule page's slot rhythm (gold time, serif title). */
.plan-list { list-style: none; margin: 0; padding: 0; }
.plan-day, .program-day { font: clamp(26px, 2.6vw, 34px)/1.15 Georgia, serif; letter-spacing: -.02em; color: var(--sjr-ink); margin: 22px 0 10px; }
.plan-item { display: grid; grid-template-columns: 116px 1fr auto; gap: 18px; align-items: start; padding: 18px 0; border-top: 1px solid var(--sjr-border); }
.plan-item.pinned .title::after { content: ' · pinned'; font: 600 12px/1 Arial, Helvetica, sans-serif; color: var(--sjr-gold); letter-spacing: .04em; }
.plan-item .time { display: flex; flex-direction: column; font-variant-numeric: tabular-nums; color: var(--sjr-gold); font-weight: 600; font-size: 17px; line-height: 1.35; }
.plan-item .time span { color: var(--sjr-muted); font-size: 13px; font-weight: 400; }
.what { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.what .title { font: 22px/1.25 Georgia, serif; text-decoration: none; color: var(--sjr-ink); }
.what .title[href] { text-decoration: underline; text-decoration-color: var(--sjr-border); text-underline-offset: 5px; }
.what .title[href]:hover { color: var(--sjr-gold); }
.venue { color: var(--sjr-muted); font-size: 14px; }
.item-actions { display: flex; gap: 6px; }
.icon-mini { width: 44px; min-width: 44px; padding: 0; font-size: 16px; }
.icon-mini[aria-pressed="true"] { color: var(--sjr-gold); border-color: var(--sjr-gold); }
.plan-gap { font-size: 13px; color: var(--sjr-muted); padding: 6px 0 6px 22px; position: relative; max-width: none; }
.plan-gap::before { content: ''; position: absolute; left: 6px; top: 0; bottom: 0; border-left: 1px dashed var(--sjr-border); }
.plan-gap.warn { color: var(--sjr-orange); font-weight: 600; }
[data-theme="light"] .plan-gap.warn { color: #9a4317; }

/* Full program, list view */
.program-list { list-style: none; padding: 0; margin: 0; }
.program-list li { display: grid; grid-template-columns: 170px 1fr auto; gap: 18px; align-items: center; padding: 14px 0; border-top: 1px solid var(--sjr-border); }
.program-list .time { font-size: 16px; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--sjr-gold); }
.add { font-size: 13px; font-weight: 600; white-space: nowrap; color: var(--sjr-ink); }
.add.on { color: var(--sjr-gold); border-color: var(--sjr-gold); background: color-mix(in srgb, var(--sjr-gold) 16%, transparent); }

/* Full program, timeline view */
.timeline-scroll { overflow-x: auto; padding-bottom: 8px; }
.timeline { display: grid; grid-template-columns: 48px repeat(var(--cols), minmax(132px, 1fr)); gap: 8px; min-width: calc(48px + var(--cols) * 140px); }
.hours { position: relative; margin-top: 52px; height: var(--height); font-size: 12px; color: var(--sjr-muted); }
.hours span { position: absolute; transform: translateY(-50%); }
.venue-head { height: 44px; display: flex; align-items: end; font: 15px/1.2 Georgia, serif; color: var(--sjr-ink); margin-bottom: 8px; border-bottom: 1px solid var(--sjr-border); padding-bottom: 6px; }
.track { position: relative; height: var(--height); background: repeating-linear-gradient(var(--sjr-border) 0 1px, transparent 1px 84px); }
.block-slot { position: absolute; left: 2px; right: 2px; }
.block { position: absolute; inset: 0; min-height: 0; padding: 6px 9px; overflow: hidden; display: flex; flex-direction: column; gap: 2px; text-align: left; font-size: 13px; line-height: 1.25; color: var(--sjr-ink); background: color-mix(in srgb, var(--sjr-base) 72%, transparent); }
.block:hover { border-color: var(--sjr-gold); }
.block.on { border-color: var(--sjr-gold); background: color-mix(in srgb, var(--sjr-gold) 22%, var(--sjr-base)); }
.block-time { color: var(--sjr-gold); font-variant-numeric: tabular-nums; font-size: 12px; font-weight: 600; }
.block-title { font-family: Georgia, serif; font-size: 14px; }
.block.short { flex-direction: row; align-items: center; gap: 6px; padding: 2px 8px; }
.block.short .block-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.block.short .block-time { display: none; }

.practical > summary { list-style: none; display: flex; justify-content: space-between; align-items: center; }
.practical > summary::-webkit-details-marker { display: none; }
.practical > summary::after { content: '⌄'; color: var(--sjr-gold); font-size: 24px; line-height: 1; }
.practical[open] > summary::after { transform: rotate(180deg); }
.practical > summary h2 { margin: 0; }
.practical dt { font-weight: 600; margin-top: 16px; color: var(--sjr-ink); }
.practical dd { margin: 4px 0 0; color: var(--sjr-muted); }

@media (max-width: 700px) {
  .sjr-planner .glass { padding: 22px 18px; }
  .program-list li { grid-template-columns: 1fr auto; }
  .program-list .time { grid-column: 1 / -1; }
  .plan-item { grid-template-columns: 86px 1fr; gap: 6px 14px; }
  .plan-item .item-actions { grid-column: 2; }
  .plan-item .time { font-size: 15px; }
  .what .title { font-size: 20px; }
}

@media (prefers-reduced-motion: reduce) {
  .typing span { animation: none; opacity: .7; }
}

@media print {
  .sjr-header, .sjr-footer, .sjr-skip, .planner-tabs, .planner-chat, .quick, .actions, .item-actions, .segmented, #program, .practical, #walk-note, #source-note, #program-title, .timeline-hint, .sjr-detail-dialog { display: none !important; }
  body::before { display: none !important; }
  .planner-layout { display: block; }
  .planner-layout > [data-active="false"] { display: block !important; }
  .glass { padding: 0 !important; background: none !important; }
}
