    * { box-sizing: border-box; }
    :root { --ink: #20242d; --muted: #626873; --rule: #c8c8c4; --select-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='m2 4 4 4 4-4' fill='none' stroke='%2320242d' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
    body { margin: 0; color: var(--ink); background: #e9e7e3; font-family: "IBM Plex Sans", Arial, sans-serif; }
    button, input, select { font: inherit; }
    .planner-controls { display: grid; grid-template-columns: calc(841px / 3) minmax(0,1fr); align-items: center; gap: 12px 24px; padding: 24px 42px; background: #0d1438; color: white; }
    .planner-main { display: flex; flex-direction: column; gap: 8px; grid-column: 2; grid-row: 1; min-width: 0; }
    .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
    .planner-logo { display: block; grid-column: 1; grid-row: 1; justify-self: start; width: calc(841px / 3); max-width: 100%; height: auto; }
    .planner-footer { display: flex; align-items: center; justify-content: flex-end; }
    .planner-footer[hidden] { display: none; }
    .subscribe-link { color: white; font-weight: 600; text-decoration: underline; text-underline-offset: 3px; white-space: nowrap; }
    .subscribe-link:hover { color: #f6cb67; }
    .subscribe-link:focus-visible { outline: 3px solid #f6cb67; outline-offset: 3px; }
    .planner-controls form { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; }
    .planner-controls label { display: grid; gap: 5px; font-weight: 600; }
    .view-row { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 12px; }
    .view-prefix { font-weight: 600; }
    .planner-controls .view-control, .planner-controls .phase-control { display: inline-flex; align-items: center; min-height: 40px; }
    .planner-controls input, .planner-controls select { min-height: 40px; padding: 6px 9px; border: 1px solid #a7a9b2; border-radius: 3px; color: #20242d; background: white; }
    .planner-controls select { appearance: none; padding-right: 31px; background-image: var(--select-arrow); background-repeat: no-repeat; background-position: right 9px center; background-size: 12px 12px; }
    @media (forced-colors: active) { .planner-controls select { appearance: auto; background-image: none; padding-right: 9px; } }
    .planner-controls input:focus-visible, .planner-controls select:focus-visible { outline: 3px solid #f6cb67; outline-offset: 2px; }
    .planner-controls input[type="checkbox"] { width: 18px; height: 18px; min-height: 0; margin: 0; accent-color: #0d1438; }
    .toggle-control { display: flex !important; align-items: center; gap: 8px !important; min-height: 40px; }
    #filter-control { min-height: 0; }
    .view-row[hidden], .view-control[hidden], .phase-control[hidden], .toggle-control[hidden], .year-options[hidden], .time-options[hidden] { display: none !important; }
    .advanced-options { margin: 0; }
    .advanced-options summary { width: fit-content; margin-left: auto; color: white; cursor: pointer; font-weight: 600; line-height: 1.2; text-decoration: underline; text-underline-offset: 3px; }
    .advanced-options summary:hover { color: #f6cb67; }
    .advanced-options summary:focus-visible { outline: 3px solid #f6cb67; outline-offset: 3px; }
    .advanced-options[open] .when-closed, .advanced-options:not([open]) .when-open { display: none; }
    .source-options, .year-options, .time-options { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px 18px; margin: 14px 0 0; padding: 0; border: 0; }
    .source-options { display: block; min-width: 0; text-align: right; }
    .source-list { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px 18px; }
    .group-control { justify-content: flex-end; margin-top: 8px; min-height: 0; }
    .source-options legend, .year-options legend, .time-options legend { width: 100%; padding: 0 0 7px; text-align: right; font-weight: 600; }
    .source-options label, .year-options label, .time-options label { display: inline-flex; align-items: center; gap: 6px; font-weight: 400; }
    .advanced-options[open] .source-options, .advanced-options[open] .year-options, .advanced-options[open] .time-options { margin-top: 18px; }
    .advanced-options[open] .group-control { margin-top: 12px; }
    .planner-notice { margin: 16px 24px 0; padding: 12px 16px; border-left: 4px solid #0d1438; background: #fbf9f6; }
    .planner-notice[hidden] { display: none; }
    .week-navigation { display: flex; flex-wrap: wrap; align-items: end; gap: 6px; }
    .week-navigation[hidden] { display: none; }
    .week-navigation button { min-height: 34px; padding: 4px 10px; border: 1px solid #b5b7c0; border-radius: 3px; color: #0d1438; background: white; cursor: pointer; }
    .week-navigation button:not(:disabled):hover { text-decoration: underline; }
    .week-navigation button:disabled { color: #8e8e93; background: #f2f2f0; border-color: #d6d6d3; cursor: default; }
    .week-navigation button:focus-visible, .week-navigation input:focus-visible { outline: 2px solid #0d1438; outline-offset: 2px; }
    .week-navigation label { display: grid; gap: 3px; color: var(--muted); font-size: 11px; font-weight: 600; }
    .week-navigation input { min-height: 34px; padding: 4px 7px; border: 1px solid #b5b7c0; border-radius: 3px; color: var(--ink); background: white; font-size: 13px; }
    .week-navigation input[type="search"] { width: 190px; }
    .week-navigation label[hidden], .week-navigation button[hidden] { display: none; }
    .search-status { margin: 0 0 4mm; color: var(--muted); font-size: 10pt; }
    .planner-pages { padding: 24px; overflow-x: auto; }
    .week-page { width: 100%; min-height: calc(100dvh - 90px); margin: 0 auto 24px; padding: 18px; background: white; border: 1px solid var(--rule); display: flex; flex-direction: column; }
    .week-page:last-child { margin-bottom: 0; }
    .week-heading-row { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 12px; margin: 0 0 3mm; padding-bottom: 3mm; border-bottom: 2px solid var(--ink); }
    .week-heading { flex: none; max-width: 100%; margin: 0; font-size: 21pt; line-height: 1.1; font-weight: 600; }
    .week-heading-row .week-navigation { flex: none; max-width: 100%; }
    .source-key { display: flex; flex-wrap: wrap; gap: 1mm 5mm; margin: 0 0 4mm; color: var(--muted); font-size: 9pt; }
    .source-key-item { display: inline-flex; align-items: center; gap: 1.5mm; }
    .source-dot { display: inline-block; flex: none; width: 2.8mm; height: 2.8mm; border-radius: 50%; border: .25mm solid var(--muted); print-color-adjust: exact; -webkit-print-color-adjust: exact; }
    .week-grid { display: flex; flex: 1 0 auto; flex-direction: column; overflow-x: auto; }
    .print-week-table, .print-term-table { display: none; }
    .planner-row { display: grid; min-width: var(--min-screen-width, 960px); grid-template-columns: var(--screen-columns, 90px minmax(0,23fr) minmax(0,23fr) minmax(0,31fr) minmax(0,23fr)); }
    .planner-row > * { min-width: 0; }
    .column-headings { flex: none; border-bottom: 1px solid var(--rule); }
    .column-headings > div { padding: 0 3mm 3mm; color: var(--ink); font-size: 12pt; line-height: 1.15; font-weight: 600; }
    .column-headings > div:first-child { padding-left: 0; }
    .column-headings > div + div { border-left: 1px solid var(--rule); }
    .day-row { grid-template-rows: minmax(100%, auto); align-items: stretch; border-bottom: 1px solid var(--rule); print-color-adjust: exact; -webkit-print-color-adjust: exact; }
    .day-row.is-friday, .day-row.is-sunday { border-bottom: 0; }
    .day-row.is-saturday { border-top: 1px solid var(--rule); }
    .day-row > * { height: 100%; }
    .day-row.is-weekend, .day-row.is-holiday { background: #f7f6f3; }
    .weekday { flex: 1 0 25mm; }
    .weekend { flex: 0 0 auto; min-height: 13mm; }
    .weekend.is-saturday { margin-top: 4mm; }
    .day-label { padding: 3mm 2mm; line-height: 1.2; }
    .date-line { display: flex; align-items: baseline; gap: 1.5mm; white-space: nowrap; }
    .day-name, .day-label small { color: var(--muted); font-size: 9pt; font-weight: 400; }
    .day-number { font-size: 12pt; font-weight: 600; }
    .is-weekend .day-number, .is-holiday .day-number { color: var(--muted); }
    .day-label small { display: block; margin-top: 1mm; }
    .day-cell { padding: 3mm 3mm; border-left: 1px solid var(--rule); font-size: 12pt; line-height: 1.2; }
    .event-list { margin: 0; padding: 0; list-style: none; }
    .event-list li { display: grid; grid-template-columns: 2.8mm minmax(0,1fr); align-items: start; gap: 1.5mm; margin: 0 0 1.5mm; overflow-wrap: break-word; }
    .event-list .source-dot { margin-top: 1mm; }
    .event-list li:last-child { margin-bottom: 0; }
    .event-list li.is-major .event-title { font-weight: 600; }
    .event-list li.search-dimmed { opacity: .18; }
    .event-detail-trigger { display: block; width: 100%; padding: 0; border: 0; color: inherit; background: none; text-align: left; font: inherit; line-height: inherit; cursor: pointer; overflow-wrap: inherit; }
    .event-detail-trigger:hover .event-title, .event-detail-trigger:focus-visible .event-title { text-decoration: underline; text-underline-offset: 2px; }
    .is-cancelled .event-title, .is-absent .event-title { text-decoration: line-through; }
    .is-cancelled .event-detail-trigger:hover .event-title, .is-cancelled .event-detail-trigger:focus-visible .event-title,
    .is-absent .event-detail-trigger:hover .event-title, .is-absent .event-detail-trigger:focus-visible .event-title { text-decoration: line-through underline; }
    .event-detail-trigger:focus-visible { outline: 2px solid #0d1438; outline-offset: 3px; }
    .event-time { color: var(--muted); font-size: 9pt; }
    .agenda-page { width: 100%; margin: 0 auto; padding: 18px; background: white; border: 1px solid var(--rule); }
    .agenda-content { max-width: 1200px; margin: 0 auto; }
    .agenda-day { display: grid; grid-template-columns: 90px minmax(0,1fr); gap: 12px; padding: 3mm 0; border-top: 1px solid var(--rule); }
    .agenda-day:first-child { border-top: 0; }
    .agenda-date { margin: 0; font-size: 12pt; line-height: 1.25; font-weight: 600; }
    .agenda-date small { display: block; color: var(--muted); font-size: 9pt; font-weight: 400; }
    .agenda-events { margin: 0; padding: 0; list-style: none; }
    .agenda-event { display: grid; grid-template-columns: 2.8mm minmax(0,1fr); gap: 1.5mm; margin-bottom: 2mm; font-size: 12pt; line-height: 1.2; overflow-wrap: anywhere; }
    .agenda-event:last-child { margin-bottom: 0; }
    .agenda-event .source-dot { margin-top: 1mm; }
    .agenda-event.is-major .event-title { font-weight: 600; }
    .agenda-event.search-dimmed { opacity: .18; }
    .month-page { width: 100%; min-width: 1080px; margin: 0 auto 24px; padding: 18px; background: white; border: 1px solid var(--rule); }
    .month-page:last-child { margin-bottom: 0; }
    .month-table { width: 100%; table-layout: fixed; border-collapse: collapse; }
    .month-table-title { padding: 0; text-align: left; vertical-align: top; font-weight: 400; }
    .month-weekday-headings th { padding: 0 2mm 2mm; border-bottom: 1px solid var(--rule); font-size: 12pt; text-align: left; }
    .month-weekday-headings th + th, .month-week td + td { border-left: 1px solid var(--rule); }
    .month-week { border-bottom: 1px solid var(--rule); }
    .month-week td { --month-cell-padding: 2mm; width: 16.66%; padding: var(--month-cell-padding); vertical-align: top; }
    .month-week .event-list { margin-top: 1.5mm; }
    .month-page .event-list { font-size: 10pt; line-height: 1.17; }
    .month-page .event-list li { margin-bottom: 1mm; }
    .month-page .event-time { font-size: 8pt; }
    .month-day-number { display: block; font-size: 12pt; font-weight: 600; }
    .month-day-note { display: block; color: var(--muted); font-size: 8pt; }
    .month-day.is-holiday { margin: -2mm; padding: 2mm; background: #f7f6f3; }
    .month-day.is-outside { color: #b7b9bd; }
    .month-weekend .month-day + .month-day { margin-top: 2mm; margin-inline: calc(-1 * var(--month-cell-padding)); padding: 2mm var(--month-cell-padding) 0; border-top: 1px solid var(--rule); }
    .term-page { width: 100%; min-width: var(--min-screen-width, 960px); margin: 0 auto 24px; padding: 18px; background: white; border: 1px solid var(--rule); }
    .term-table { width: 100%; table-layout: fixed; border-collapse: collapse; }
    .term-table-title { padding: 0; text-align: left; vertical-align: top; font-weight: 400; }
    .term-column-headings th { padding: 0 2mm 2mm; border-bottom: 1px solid var(--rule); font-size: 12pt; text-align: left; vertical-align: bottom; }
    .term-column-headings th + th, .term-week td { border-left: 1px solid var(--rule); }
    .term-week { border-bottom: 1px solid var(--rule); }
    .term-week > * { padding: 2mm; vertical-align: top; }
    .term-week-label { font-size: 12pt; text-align: left; white-space: nowrap; }
    .term-page .event-list { font-size: 10pt; line-height: 1.17; }
    .term-page .event-list li { margin-bottom: 1mm; }
    .term-print-date { display: none; }
    .agenda-detail-trigger { display: grid; grid-template-columns: 95px minmax(0,1fr); align-items: baseline; gap: 12px; }
    .agenda-empty { margin: 8mm 0; color: var(--muted); text-align: center; }
    .agenda-day[hidden], .agenda-event[hidden], .agenda-empty[hidden] { display: none !important; }
    /* Both arrows share the font baseline; the corner spans from x-height to descender. */
    .continuation-arrow { position: relative; display: inline-block; width: 1.68em; height: 0; vertical-align: baseline; color: var(--ink); }
    .event-title-tail { white-space: nowrap; }
    .event-title-tail .continuation-arrow { margin-left: .25em; }
    .print-end-group { white-space: nowrap; }
    .print-end-group .continuation-arrow { margin-left: 0; }
    .print-end-date { display: none; }
    .continuation-arrow svg { position: absolute; top: -.75em; left: 0; width: 1.68em; height: 1em; fill: currentColor; }
    .continuation-arrow.is-bold path { stroke: currentColor; stroke-width: 50; stroke-linejoin: round; }
    .event-details { position: fixed; z-index: 1000; width: min(430px, calc(100vw - 24px)); max-height: calc(100dvh - 24px); overflow: auto; padding: 20px 22px 22px; border: 1px solid #b9bab7; border-radius: 8px; color: var(--ink); background: white; box-shadow: 0 12px 36px #0d143833; }
    .event-details[hidden], .event-details [hidden] { display: none; }
    .event-details-head { display: flex; align-items: start; justify-content: space-between; gap: 14px; }
    .event-details h2 { margin: 0 0 13px; font-size: 19px; line-height: 1.25; }
    .event-details-close { flex: none; width: 30px; height: 30px; margin: -5px -7px 0 0; padding: 0; border: 0; border-radius: 4px; color: var(--muted); background: transparent; font-size: 25px; line-height: 1; cursor: pointer; }
    .event-details-close:hover { color: var(--ink); background: #f2f1ee; }
    .event-details-close:focus-visible { outline: 2px solid #0d1438; outline-offset: 2px; }
    .event-details-when { margin: 0 0 13px; font-size: 14px; line-height: 1.4; }
    .event-details-source { display: flex; align-items: center; gap: 8px; margin: 0 0 15px; color: var(--muted); font-size: 13px; }
    .event-details-location, .event-details-attendance, .event-details-description { margin: 0; padding-top: 13px; border-top: 1px solid #e5e4e0; font-size: 14px; line-height: 1.5; }
    .event-details-attendance { margin-top: 13px; }
    .event-details-description { margin-top: 13px; white-space: pre-wrap; overflow-wrap: anywhere; }
    .event-details-description a { color: #0d1438; text-decoration: underline; text-underline-offset: 2px; }
    .event-details-description a:focus-visible { outline: 2px solid #0d1438; outline-offset: 2px; }
    .event-details-description p { margin: 0 0 .5em; }
    .event-details-description p:last-child { margin-bottom: 0; }
    .event-details-location strong, .event-details-attendance strong { display: block; margin-bottom: 2px; font-size: 12px; font-weight: 600; color: var(--muted); }
    @media (max-width: 1050px) { .planner-controls { grid-template-columns: minmax(0,1fr); row-gap: 8px; } .planner-logo { grid-column: 1; grid-row: 1; justify-self: center; margin-bottom: -16px; } .planner-main { grid-column: 1; grid-row: 2; } }
    @media (max-width: 700px) {
      .planner-controls { padding: 20px 30px; }
      .planner-pages { padding: 12px; }
      .agenda-page { padding: 12px; }
      .agenda-day { display: block; }
      .agenda-date { margin-bottom: 2mm; }
      .agenda-date small { display: inline; margin-left: .4em; }
      .agenda-detail-trigger { grid-template-columns: 68px minmax(0,1fr); gap: 4px 8px; }
    }
    @page { size: A4 landscape; margin: 8mm; }
    @page monthly { size: landscape; margin: 8mm; }
    @page term { size: A3 portrait; margin: 8mm; }
    @media print {
      html, body { margin: 0; padding: 0; background: white; }
      .planner-controls, .week-navigation, .event-details { display: none !important; }
      .event-title-tail.has-print-end { white-space: normal; }
      .print-end-date { display: inline; color: var(--muted); font-size: 9pt; font-weight: 400; }
      .print-end-group .continuation-arrow { margin-left: .25em; }
      .month-page .print-end-date { font-size: 7pt; }
      .planner-pages { display: block; padding: 0; overflow: visible; }
      .planner-row { min-width: 0; grid-template-columns: var(--print-columns, 21mm minmax(0,23fr) minmax(0,23fr) minmax(0,31fr) minmax(0,23fr)); }
      .week-page { display: block; width: 100%; min-width: 0; height: auto; min-height: 190mm; margin: 0; padding: 0; border: 0; }
      .week-page + .week-page { break-before: page; page-break-before: always; }
      .week-grid { display: block; overflow: visible; }
      .weekday { min-height: 25mm; }
      .day-row { break-inside: avoid; page-break-inside: avoid; }
      .week-page.print-table-ready { min-height: 0; }
      .print-table-ready > .week-heading-row, .print-table-ready > .source-key, .print-table-ready > .week-grid { display: none; }
      .print-table-ready > .print-week-table { display: table; width: 100%; height: 193mm; table-layout: fixed; border-collapse: collapse; }
      .print-week-table thead { display: table-header-group; }
      .print-week-table thead th { padding: 0; text-align: left; vertical-align: top; font-weight: 400; }
      .print-week-table .week-heading-row { margin-bottom: 2mm; padding-bottom: 2mm; }
      .print-week-table .source-key { margin-bottom: 2mm; }
      .print-week-table .print-column-headings th { padding: 0 3mm 3mm; border-bottom: 1px solid var(--rule); font-size: 12pt; font-weight: 600; }
      .print-week-table .print-column-headings th:first-child { padding-left: 0; }
      .print-week-table .print-column-headings th + th { border-left: 1px solid var(--rule); }
      .print-week-table tbody tr { break-inside: avoid; page-break-inside: avoid; }
      .print-week-table tbody tr.weekday { height: 25mm; }
      .print-week-table tbody tr.weekend { height: 8mm; }
      .print-week-table tbody tr.print-weekend-gap { height: 4mm; }
      .print-week-table tbody tr.print-weekend-gap > * { padding: 0; border: 0; }
      .print-week-table tbody tr.day-row > * { height: auto; padding-top: 1.5mm; padding-bottom: 1.5mm; vertical-align: top; border-bottom: 1px solid var(--rule); }
      .print-week-table tbody tr.day-row > .day-label { font-weight: 400; }
      .print-week-table tbody tr.day-row > .day-cell { border-left: 1px solid var(--rule); }
      .print-week-table tbody tr.is-friday > *, .print-week-table tbody tr.is-sunday > * { border-bottom: 0; }
      .print-week-table tbody tr.is-saturday > * { border-top: 1px solid var(--rule); }
      .print-week-table tbody tr.is-weekend > *, .print-week-table tbody tr.is-holiday > * { background: #f7f6f3; }
      .print-week-table .event-list li { margin-bottom: .75mm; }
      .print-week-table .event-list li:last-child { margin-bottom: 0; }
      .agenda-page { width: 100%; margin: 0; padding: 0; border: 0; }
      .agenda-content { max-width: 245mm; }
      .agenda-day { break-inside: avoid; page-break-inside: avoid; }
      .agenda-event { break-inside: avoid; page-break-inside: avoid; }
      .month-page { page: monthly; width: 100%; min-width: 0; margin: 0; padding: 0; border: 0; }
      .month-page + .month-page { break-before: page; page-break-before: always; }
      .month-table { height: calc(100vh - 4mm); }
      .month-table thead { display: table-header-group; }
      .month-week { break-inside: avoid; page-break-inside: avoid; }
      .month-week td { --month-cell-padding: 1.5mm; }
      .month-page .week-heading-row { margin-bottom: 2mm; padding-bottom: 2mm; }
      .month-page .source-key { margin-bottom: 2mm; }
      .month-page .event-list { font-size: 8.5pt; }
      .month-page .event-time { font-size: 7.5pt; }
      .month-page .event-list li { grid-template-columns: 2.2mm minmax(0,1fr); gap: 1mm; margin-bottom: .65mm; }
      .month-page .source-dot { width: 2.2mm; height: 2.2mm; }
      .month-page .event-list .source-dot { margin-top: .8mm; }
      .month-page .week-heading { font-size: 16pt; }
      .month-page .source-key { font-size: 8pt; }
      .month-weekday-headings th { font-size: 9pt; }
      .month-week td { --month-cell-padding: 1mm; }
      .month-week .event-list { margin-top: 1mm; }
      .month-day-number { font-size: 10pt; }
      .month-day-note { font-size: 7pt; }
      .month-day.is-holiday { margin: -1mm; padding: 1mm; }
      .month-weekend .month-day + .month-day { margin-top: 1mm; padding-top: 1mm; }
      .month-page .event-list { font-size: 8pt; line-height: 1.15; }
      .month-page .event-time { font-size: 7pt; }
      .month-page .event-list li { grid-template-columns: 1.8mm minmax(0,1fr); gap: .8mm; margin-bottom: .4mm; }
      .month-page .source-dot { width: 1.8mm; height: 1.8mm; }
      .month-page .event-list .source-dot { margin-top: .6mm; }
      .term-page { page: term; width: 100%; min-width: 0; margin: 0; padding: 0; border: 0; }
      .term-page.print-table-ready > .term-table:not(.print-term-table) { display: none; }
      .term-page.print-table-ready > .print-term-table { display: table; }
      .term-table { height: calc(100vh - 4mm); }
      .term-table thead { display: table-header-group; }
      .term-week { break-inside: avoid; page-break-inside: avoid; }
      .term-week > * { padding: 1.2mm; }
      .term-page .week-heading-row { margin-bottom: 2mm; padding-bottom: 2mm; }
      .term-page .week-heading { font-size: 16pt; }
      .term-page .source-key { margin-bottom: 2mm; font-size: 8pt; }
      .term-column-headings th { font-size: 9pt; }
      .term-week-label { font-size: 9pt; }
      .term-page .event-list { font-size: 8pt; line-height: 1.15; }
      .term-page .event-time { font-size: 7pt; }
      .term-page .event-list li { grid-template-columns: 1.8mm minmax(0,1fr); gap: .8mm; margin-bottom: .4mm; }
      .term-page .source-dot { width: 1.8mm; height: 1.8mm; }
      .term-page .event-list .source-dot { margin-top: .6mm; }
      .term-screen-date, .term-page .continuation-arrow:not(.is-multiday) { display: none; }
      .term-print-date { display: inline; }
    }
