:root {
    --navy: #1b365d;
    --navy-2: #2c5282;
    --ink: #1a1f2b;
    --muted: #5c6570;
    --line: #c5ced6;
    --paper: #f6f3ee;
    --card: #fff;
    --pr: #e7f0df;
    --aula-v: #e4eef8;
    --aula-k: #fff1cc;
    --aula-s: #efe8f6;
    --umbau: #e03a00;
    --umbau-bg: #ffd4c2;
    --umbau-single: #ff3b00;
    --kollision: #7b2cbf;
    --kollision-border: #4a148c;
    --weekend: #eceff2;
    --ferien: #e2e5e8;
    --today: #fff6b5;
    --ok: #1f7a3a;
    --klausur-frame: #f57c00;
    --klausur-fw: 2px;
    --err: #b42318;
    --warn: #b45309;
    --radius: 10px;
    font-family: "Segoe UI", "Calibri", "Helvetica Neue", sans-serif;
}

* { box-sizing: border-box; }
html, body { margin: 0; background: var(--paper); color: var(--ink); }
body { min-height: 100vh; }

h1 { font-size: 1.65rem; margin: 0.1rem 0 0; color: var(--navy); letter-spacing: -0.02em; }
h2 { font-size: 1.1rem; margin: 0 0 0.8rem; color: var(--navy); }
.kicker { margin: 0; text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.72rem; color: var(--navy-2); font-weight: 700; }
.lead, .hint, .muted { color: var(--muted); }
.hint { font-size: 0.92rem; line-height: 1.4; }

.top {
    background: var(--navy);
    color: #fff;
    padding: 1rem 1.25rem 0.85rem;
    position: sticky;
    top: 0;
    z-index: 5;
    box-shadow: 0 2px 10px rgba(0,0,0,.18);
}
.top h1, .top .kicker { color: #fff; }
.top-inner { display: flex; justify-content: space-between; gap: 1rem; align-items: flex-start; flex-wrap: wrap; }
.top-nav { display: flex; gap: 0.5rem; flex-wrap: wrap; align-items: center; }
.sj-switch label { color: #dbe7f5; font-size: 0.85rem; display: flex; gap: 0.4rem; align-items: center; }
.sj-switch select { padding: 0.3rem 0.4rem; border-radius: 6px; border: 0; }

.mode-bar {
    display: flex;
    gap: 0.6rem;
    flex-wrap: wrap;
    margin-top: 0.85rem;
    align-items: center;
}
.mode-pill {
    background: #fff;
    color: var(--navy);
    padding: 0.35rem 0.7rem;
    border-radius: 999px;
    font-size: 0.9rem;
}
.mode-extra { font-size: 0.85rem; opacity: 0.9; }
.cache-warn { margin: 0.6rem 0 0; background: #fff3cd; color: #633806; padding: 0.4rem 0.6rem; border-radius: 6px; font-size: 0.88rem; }

.btn {
    display: inline-block;
    background: #f4a261;
    color: #1b140c;
    font-weight: 700;
    text-decoration: none;
    border: 0;
    padding: 0.45rem 0.8rem;
    border-radius: 8px;
    cursor: pointer;
    font-size: 0.9rem;
}
.btn-danger { background: #b42318; color: #fff; }
.btn-danger:hover { filter: brightness(1.08); }
.btn-ghost { background: transparent; color: #fff; border: 1px solid rgba(255,255,255,.45); }
.admin .btn-ghost, .narrow .btn-ghost, .print-page .btn-ghost { color: var(--navy); border-color: var(--line); }
.print-page .top .btn-ghost { color: #fff; border-color: rgba(255,255,255,.45); }

main { padding: 1rem 1.25rem 2rem; }
.narrow { max-width: 32rem; margin: 2rem auto; }
.admin { max-width: 1100px; margin: 0 auto; display: grid; gap: 1rem; }
.card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 1rem 1.1rem; }
.form { display: grid; gap: 0.75rem; }
.form label, .inline-form label { display: grid; gap: 0.25rem; font-size: 0.88rem; font-weight: 600; }
.form input[type=text], .form input[type=password], .form input[type=number],
.form select, .form textarea, .inline-form input, .inline-form select {
    font: inherit; padding: 0.45rem 0.55rem; border: 1px solid var(--line); border-radius: 8px; font-weight: 400;
}
fieldset { border: 1px solid var(--line); border-radius: 8px; display: flex; gap: 1rem; flex-wrap: wrap; }
.radio { font-weight: 500; display: flex; gap: 0.35rem; align-items: center; }
.inline-form { display: flex; gap: 0.75rem; flex-wrap: wrap; align-items: end; }
.transfer-actions { display: flex; gap: 1rem; flex-wrap: wrap; align-items: end; }
.transfer-actions > .btn { align-self: end; }
.import-existing-choice {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.45rem;
    max-width: 31rem;
}
.dp { position: relative; }
.dp-panel {
    position: absolute;
    z-index: 20;
    margin-top: 0.35rem;
    background: #fff;
    border: 1px solid var(--line);
    border-radius: 10px;
    box-shadow: 0 8px 24px rgba(27, 54, 93, 0.18);
    padding: 0.7rem;
    width: 18.5rem;
}
.dp-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.4rem; }
.dp-nav {
    border: 1px solid var(--line);
    background: #fff;
    border-radius: 6px;
    width: 1.8rem;
    height: 1.8rem;
    cursor: pointer;
    font-size: 1.1rem;
    line-height: 1;
}
.dp-week, .dp-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 0.15rem;
    text-align: center;
    user-select: none;
}
.dp-week { font-size: 0.72rem; color: var(--muted); text-transform: uppercase; margin-bottom: 0.2rem; }
.dp-day {
    border: 0;
    background: transparent;
    border-radius: 6px;
    padding: 0.35rem 0;
    cursor: pointer;
    font: inherit;
}
.dp-day:hover { background: #e8eef6; }
.dp-day.is-today { box-shadow: inset 0 0 0 1px var(--navy-2); }
.dp-day.is-selected { background: #c5d8f0; font-weight: 700; }
.dp-day.is-endpoint { background: var(--navy); color: #fff; }
.dp-day.is-busy {
    box-shadow: inset 0 -4px 0 #e03a00;
    font-weight: 700;
}
.dp-day.is-busy.is-today { box-shadow: inset 0 0 0 1px var(--navy-2), inset 0 -4px 0 #e03a00; }
.dp-day.is-clash,
.dp-day.is-selected.is-clash,
.dp-day.is-endpoint.is-clash {
    background: var(--kollision);
    color: #fff;
    box-shadow: none;
}
.dp-day.is-disabled { opacity: 0.35; cursor: not-allowed; }
.dp-help { font-size: 0.78rem; color: var(--muted); margin: 0.5rem 0 0.3rem; font-weight: 400; }
.dp-clear { border: 0; background: none; color: var(--navy-2); cursor: pointer; font: inherit; font-size: 0.82rem; padding: 0; }
.dp-clash {
    margin-top: 0.55rem;
    background: var(--kollision);
    color: #fff;
    border-radius: 8px;
    padding: 0.55rem 0.65rem;
    font-size: 0.82rem;
    line-height: 1.35;
}
.dp-clash strong {
    display: block;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-size: 0.9rem;
    margin-bottom: 0.2rem;
}
.dp-clash ul { margin: 0.25rem 0 0; padding-left: 1.1rem; }
kbd { font: inherit; font-weight: 700; border: 1px solid var(--line); border-radius: 4px; padding: 0 0.25rem; background: #f3f4f6; }
.page-foot { text-align: center; color: var(--muted); padding: 0 1rem 2rem; font-size: 0.85rem; }

.flash { padding: 0.6rem 0.75rem; border-radius: 8px; margin-bottom: 0.8rem; }
.flash-ok { background: #e6f6ea; color: var(--ok); }
.flash-warn { background: #fff3cd; color: #7a4b00; border: 2px solid #e2b100; }
.flash-error { background: #fde8e6; color: var(--err); }
.form-actions { display: flex; gap: 0.6rem; flex-wrap: wrap; align-items: center; }

.kollision-banner {
    display: block;
    width: 100%;
    appearance: none;
    -webkit-appearance: none;
    background: #7b2cbf;
    background: var(--kollision);
    color: #fff;
    font-weight: 800;
    font-family: inherit;
    text-align: left;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    padding: 0.28rem 0.4rem;
    margin-bottom: 0.35rem;
    border: 2px solid #4a148c;
    border-color: var(--kollision-border);
    font-size: 0.78rem;
    line-height: 1.25;
}
.kollision-banner.is-clickable { cursor: pointer; }
.kollision-banner.is-clickable:hover { filter: brightness(1.08); }
.kollision-banner:not(.is-resolved) {
    background: #7b2cbf !important;
    background: var(--kollision) !important;
    border-color: #4a148c !important;
    border-color: var(--kollision-border) !important;
    color: #fff !important;
}
.kollision-banner.is-resolved {
    background: #218739 !important;
    border-color: #0c5220 !important;
    color: #fff !important;
}
.kollision-title, .kollision-list, .kollision-kommentar { display: block; }
.kollision-list { font-weight: 650; text-transform: none; letter-spacing: 0; font-size: 0.92em; margin-top: 0.15rem; }
.kollision-kommentar {
    margin-top: 0.3rem;
    padding-top: 0.25rem;
    border-top: 1px solid rgba(255,255,255,.55);
    font-weight: 600;
    text-transform: none;
    letter-spacing: 0;
}
.collision-resolved-check { font-size: 0.95rem !important; }

.table-wrap { overflow-x: auto; }
table.data { width: 100%; border-collapse: collapse; font-size: 0.92rem; }
table.data th, table.data td { text-align: left; padding: 0.4rem 0.45rem; border-bottom: 1px solid var(--line); vertical-align: top; }
.actions { display: flex; gap: 0.6rem; white-space: nowrap; }
.actions a { color: var(--navy-2); }
form.inline { display: inline; }
button.linkish { background: none; border: 0; color: var(--err); cursor: pointer; font: inherit; padding: 0; }

.cal-wrap { overflow-x: auto; background: #fff; border: 1px solid var(--line); border-radius: 8px; }
table.cal {
    width: 100%;
    min-width: 860px;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 0.86rem;
}
table.cal th, table.cal td { border: 1px solid #b7c2cc; vertical-align: top; }
table.cal td { overflow-wrap: anywhere; }
table.cal thead th {
    background: var(--navy);
    color: #fff;
    font-weight: 700;
    padding: 0.4rem 0.5rem;
    position: sticky;
    top: 0;
    z-index: 2;
}
table.cal thead tr:nth-child(2) th { top: 2.05rem; background: #274772; }
.col-pr { width: 24%; background: #fbfdf8; }
.col-date { width: 14%; text-align: center !important; background: #fafafa; }
.col-aula { width: 62%; }
.col-v { width: 21%; background: #f7fbfe; }
.col-k { width: 21%; background: #fffdf6; }
.col-s { width: 20%; background: #fcfaff; }
table.cal td { padding: 0.35rem 0.45rem; }

body.print-page .past-toggle-row { display: none; }
tr.past-toggle-row td {
    padding: 0.4rem 0.5rem !important;
    text-align: center;
    background: #e7f4ea;
    border-color: #c5e0c8;
}
.past-toggle-badge {
    display: inline-block;
    background: var(--ok);
    color: #fff;
    font-weight: 750;
    text-decoration: none;
    border-radius: 999px;
    padding: 0.28rem 0.9rem;
    font-size: 0.88rem;
    line-height: 1.3;
}
.past-toggle-badge:hover { filter: brightness(1.08); color: #fff; }
.past-toggle-badge.is-on {
    background: #fff;
    color: var(--ok);
    box-shadow: inset 0 0 0 2px var(--ok);
}
.past-toggle-badge.is-on:hover { color: var(--ok); }

.month-divider td {
    padding: 0 !important;
    background: var(--navy) !important;
    border-color: var(--navy) !important;
}
.month-toggle {
    display: flex;
    align-items: center;
    gap: 0.45rem;
    width: 100%;
    padding: 0.42rem 0.65rem;
    border: 0;
    background: transparent;
    color: #fff;
    font: inherit;
    font-weight: 800;
    text-align: left;
    cursor: pointer;
}
.month-toggle:hover { background: rgba(255,255,255,.1); }
.month-toggle-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.15rem;
    height: 1.15rem;
    border: 1px solid rgba(255,255,255,.75);
    border-radius: 3px;
    line-height: 1;
}

tr.mini td { padding: 0 0.35rem; font-size: 0.68rem; line-height: 1.15; height: 1.05rem; color: #7a828c; overflow: hidden; }
tr.mini .date-day { opacity: 0.9; }
tr.is-today td.col-date { background: var(--today); font-weight: 700; }
tr.row-off td { background: var(--ferien); }
tr.row-off .col-date { background: #d4d8dc; }

tr.row-wechsel .col-aula-wechsel {
    background: #e03a00 !important;
    color: #fff;
    font-weight: 800;
    letter-spacing: 0.03em;
    vertical-align: middle !important;
    padding: 0.5rem 0.55rem;
    border-color: #7a1400;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
}
tr.row-wechsel .wechsel-content {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}
.wechsel-heading {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    padding: 0.22rem 0.45rem;
    border: 2px solid #8a1c00;
    border-radius: 999px;
    font-size: 0.72rem;
    line-height: 1.15;
    font-weight: 800;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}
tr.row-wechsel .wechsel-heading strong {
    font: inherit;
    letter-spacing: inherit;
}
tr.row-wechsel .wechsel-heading-change {
    margin-left: 0.2rem;
    padding-left: 0.45rem;
    border-left: 1px solid rgba(255,255,255,.55);
    font: inherit;
    font-weight: 800;
    letter-spacing: 0.01em;
    text-transform: none;
}
tr.row-wechsel .wechsel-heading-room {
    font: inherit;
    opacity: 0.9;
}
tr.row-wechsel .umbau-ico { width: 0.95em; height: 0.95em; }
tr.row-wechsel .wechsel-gap {
    display: block;
    font-size: 0.72rem;
    font-weight: 650;
    letter-spacing: 0;
    text-transform: none;
    margin-top: 0.1rem;
    opacity: 0.95;
}
tr.row-wechsel .col-aula-wechsel { text-align: left; }

.date-day, .date-off { display: flex; flex-direction: column; align-items: center; gap: 0.05rem; }
.date-num { font-weight: 700; font-variant-numeric: tabular-nums; }
.date-wd { font-size: 0.75em; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); }
.date-lbl { font-size: 0.78rem; font-weight: 700; color: var(--navy); text-align: center; line-height: 1.2; }

td.is-modus.modus-veranstaltung { background: #d7e8f8; }
td.is-modus.modus-klausur { background: #ffe7a8; }
td.is-modus.modus-konferenz, td.is-modus.modus-leer { background: #eadff4; }
td.is-klausurphase {
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame);
}
td.is-klausurphase:not(.klausur-joins-prev) {
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame),
        inset 0 var(--klausur-fw) var(--klausur-frame);
}
td.is-klausurphase:not(.klausur-joins-next) {
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame),
        inset 0 calc(-1 * var(--klausur-fw)) var(--klausur-frame);
}
td.is-klausurphase:not(.klausur-joins-prev):not(.klausur-joins-next) {
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame),
        inset 0 var(--klausur-fw) var(--klausur-frame),
        inset 0 calc(-1 * var(--klausur-fw)) var(--klausur-frame);
}
td.has-event:not(.is-umbau) {
    background: #e1f3e8;
    box-shadow: inset 0 0 0 3px var(--ok);
}
td.has-event.is-umbau {
    border: 2px solid var(--umbau);
    box-shadow: inset 0 0 0 3px var(--ok);
}
td.has-event.is-umbau-single {
    background: #ff4d12;
    color: #fff;
}
tr.has-aula-event-band td.col-v:not(.is-umbau),
tr.has-aula-event-band td.col-k:not(.is-umbau),
tr.has-aula-event-band td.col-s:not(.is-umbau) {
    background: #e1f3e8 !important;
}
tr.has-aula-event-band td.col-v {
    box-shadow:
        inset 4px 0 var(--ok),
        inset 0 4px var(--ok),
        inset 0 -4px var(--ok);
}
tr.has-aula-event-band td.col-k {
    box-shadow:
        inset 0 4px var(--ok),
        inset 0 -4px var(--ok);
}
tr.has-aula-event-band td.col-s {
    box-shadow:
        inset -4px 0 var(--ok),
        inset 0 4px var(--ok),
        inset 0 -4px var(--ok);
}
tr.has-aula-event-band.has-aula-umbau td.col-v,
tr.has-aula-event-band.has-aula-umbau td.col-k,
tr.has-aula-event-band.has-aula-umbau td.col-s {
    background: repeating-linear-gradient(-45deg, #ffd0bc, #ffd0bc 8px, #ffe6db 8px, #ffe6db 16px) !important;
}
td.col-aula-nested {
    padding: 0 !important;
    overflow-wrap: break-word;
}
table.aula-nested {
    width: 100%;
    height: 100%;
    table-layout: fixed;
    border-collapse: collapse;
    border: 0;
}
table.aula-nested col.aula-nested-v { width: calc(21 / 62 * 100%); }
table.aula-nested col.aula-nested-k { width: calc(21 / 62 * 100%); }
table.aula-nested col.aula-nested-s { width: calc(20 / 62 * 100%); }
table.aula-nested td {
    border: 1px solid #b7c2cc;
    vertical-align: top;
    padding: 0.35rem 0.45rem;
    overflow-wrap: anywhere;
}
table.aula-nested .aula-nested-banner {
    border-top: 0;
    border-left: 0;
    border-right: 0;
}
table.aula-nested .aula-nested-banner .kollision-banner { margin-bottom: 0; }
table.aula-nested .aula-nested-banner .kollision-banner + .kollision-banner { margin-top: 0.35rem; }
table.aula-nested .kollision-banner.is-unresolved,
tr.has-aula-event-band .kollision-banner.is-unresolved,
tr.has-aula-klausur-band .kollision-banner.is-unresolved {
    background: #7b2cbf !important;
    border-color: #4a148c !important;
    color: #fff !important;
}
table.aula-nested .aula-nested-v,
table.aula-nested .aula-nested-umbau { border-left: 0; }
table.aula-nested .aula-nested-s,
table.aula-nested .aula-nested-umbau { border-right: 0; }
table.aula-nested .aula-nested-v,
table.aula-nested .aula-nested-k,
table.aula-nested .aula-nested-s,
table.aula-nested .aula-nested-umbau { border-bottom: 0; }
table.aula-nested .aula-nested-v.is-modus.modus-veranstaltung { background: #d7e8f8; }
table.aula-nested .aula-nested-k.is-modus.modus-klausur { background: #ffe7a8; }
table.aula-nested .aula-nested-s.is-modus.modus-konferenz,
table.aula-nested .aula-nested-s.is-modus.modus-leer { background: #eadff4; }
table.aula-nested .aula-nested-umbau.is-umbau,
table.aula-nested td.is-umbau {
    background: repeating-linear-gradient(-45deg, #ffd0bc, #ffd0bc 8px, #ffe6db 8px, #ffe6db 16px);
}
tr.has-aula-event-band td.col-aula-nested {
    background: #e1f3e8 !important;
    box-shadow:
        inset 4px 0 var(--ok),
        inset -4px 0 var(--ok),
        inset 0 4px var(--ok),
        inset 0 -4px var(--ok);
}
tr.has-aula-event-band td.col-aula-nested td {
    background: transparent !important;
}
tr.has-aula-event-band.has-aula-umbau td.col-aula-nested {
    background: repeating-linear-gradient(-45deg, #ffd0bc, #ffd0bc 8px, #ffe6db 8px, #ffe6db 16px) !important;
}
tr.has-aula-klausur-band td.col-aula-nested {
    background: #ffe7a8 !important;
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame),
        inset 0 var(--klausur-fw) var(--klausur-frame),
        inset 0 calc(-1 * var(--klausur-fw)) var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-prev td.col-aula-nested {
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame),
        inset 0 calc(-1 * var(--klausur-fw)) var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-next td.col-aula-nested {
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame),
        inset 0 var(--klausur-fw) var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-prev.klausur-joins-next td.col-aula-nested {
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame);
}
tr.has-aula-klausur-band td.col-aula-nested td {
    background: transparent !important;
    box-shadow: none;
}
tr.has-aula-klausur-band td.col-v,
tr.has-aula-klausur-band td.col-k,
tr.has-aula-klausur-band td.col-s {
    background: #ffe7a8 !important;
}
tr.has-aula-klausur-band td.col-v {
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset 0 var(--klausur-fw) var(--klausur-frame),
        inset 0 calc(-1 * var(--klausur-fw)) var(--klausur-frame);
}
tr.has-aula-klausur-band td.col-k {
    box-shadow:
        inset 0 var(--klausur-fw) var(--klausur-frame),
        inset 0 calc(-1 * var(--klausur-fw)) var(--klausur-frame);
}
tr.has-aula-klausur-band td.col-s {
    box-shadow:
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame),
        inset 0 var(--klausur-fw) var(--klausur-frame),
        inset 0 calc(-1 * var(--klausur-fw)) var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-prev td.col-v {
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset 0 calc(-1 * var(--klausur-fw)) var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-prev td.col-k {
    box-shadow: inset 0 calc(-1 * var(--klausur-fw)) var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-prev td.col-s {
    box-shadow:
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame),
        inset 0 calc(-1 * var(--klausur-fw)) var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-next td.col-v {
    box-shadow:
        inset var(--klausur-fw) 0 var(--klausur-frame),
        inset 0 var(--klausur-fw) var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-next td.col-k {
    box-shadow: inset 0 var(--klausur-fw) var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-next td.col-s {
    box-shadow:
        inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame),
        inset 0 var(--klausur-fw) var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-prev.klausur-joins-next td.col-v {
    box-shadow: inset var(--klausur-fw) 0 var(--klausur-frame);
}
tr.has-aula-klausur-band.klausur-joins-prev.klausur-joins-next td.col-k {
    box-shadow: none;
}
tr.has-aula-klausur-band.klausur-joins-prev.klausur-joins-next td.col-s {
    box-shadow: inset calc(-1 * var(--klausur-fw)) 0 var(--klausur-frame);
}
td.is-umbau {
    background: repeating-linear-gradient(-45deg, #ffd0bc, #ffd0bc 8px, #ffe6db 8px, #ffe6db 16px);
    border: 2px solid var(--umbau);
}
td.is-umbau-single {
    background: #ff4d12;
    color: #fff;
    border: 2px solid var(--umbau);
}
td.is-umbau.umbau-joins-prev { border-top-color: transparent; }
td.is-umbau.umbau-joins-next { border-bottom-color: transparent; }
td.is-umbau-single .event-title,
td.is-umbau-single .event-range,
td.is-umbau-single .event-note { color: inherit; }
td.is-umbau-single .jg-chip { background: #fff; color: var(--umbau); }

.umbau-badge {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.2rem;
    max-width: 100%;
    box-sizing: border-box;
    font-weight: 800;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    background: var(--umbau);
    color: #fff;
    border: 2px solid #8a1c00;
    border-radius: 8px;
    padding: 0.22rem 0.45rem;
    font-size: 0.72rem;
    line-height: 1.15;
    margin-bottom: 0.3rem;
    box-shadow: 0 1px 0 #8a1c00;
}
.umbau-badge-label {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
}
.umbau-ico { width: 0.95em; height: 0.95em; flex: 0 0 auto; }
.umbau-badge-comment {
    display: block;
    max-width: 100%;
    margin: 0;
    padding: 0.12rem 0 0;
    border-top: 1px solid rgba(255,222,0,.7);
    color: #ffde00;
    font-weight: 800;
    text-transform: none;
    letter-spacing: 0;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
}

.event {
    margin: 0.15rem 0 0.35rem;
    line-height: 1.25;
    position: relative;
    color: var(--ink);
}
.event-editable { cursor: grab; padding-right: 2.5rem; border-radius: 4px; }
.event-editable:hover { background: rgba(255,255,255,.38); }
.event-editable.is-dragging { opacity: 0.45; }
.event-actions {
    position: absolute;
    top: 0;
    right: 0;
    display: flex;
    gap: 0.05rem;
}
.event-edit, .event-del {
    width: 1.2rem;
    height: 1.2rem;
    border: 0;
    border-radius: 4px;
    background: transparent;
    font-size: 0.95rem;
    line-height: 1;
    cursor: pointer;
    padding: 0;
}
.event-edit { color: var(--navy-2); }
.event-edit:hover { background: #e8eef6; }
.event-del { color: var(--err); font-size: 1.05rem; }
.event-del:hover { background: #fde8e6; }
body.is-admin tr.mini td { height: 1.35rem; }
body.is-admin [data-drop-date]:not(.is-umbau) { cursor: pointer; }
body.is-admin td[data-umbau-open] { cursor: pointer; }
body.is-admin [data-drop-date].drag-over {
    outline: 2px dashed var(--navy);
    background: #fff4c2 !important;
}
.event-modal {
    border: 0;
    border-radius: 12px;
    padding: 0;
    width: calc(100% - 2rem);
    max-width: 32rem;
    overflow: visible;
    box-shadow: 0 18px 48px rgba(20, 30, 45, 0.28);
}
.event-modal::backdrop { background: rgba(20, 30, 45, 0.48); }
.event-modal form { padding: 1.15rem 1.25rem 1.25rem; }
.event-modal h2 { margin-top: 0; }
.event-modal .btn-ghost { color: var(--navy); border-color: var(--line); }
.event-modal .dp-panel { z-index: 40; }
.umbau-agenda-modal {
    width: calc(100% - 2rem);
    max-width: 72rem;
    max-height: calc(100vh - 2rem);
    padding: 0;
    border: 0;
    border-radius: 12px;
    box-shadow: 0 18px 48px rgba(20, 30, 45, 0.28);
}
.umbau-agenda-modal::backdrop { background: rgba(20, 30, 45, 0.48); }
.umbau-agenda-dialog { padding: 1.1rem 1.25rem 1.25rem; }
.umbau-agenda-head {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 1rem;
    flex-wrap: wrap;
}
.umbau-agenda-head h2 { margin-top: 0.1rem; }
.umbau-agenda-head .btn-ghost { color: var(--navy); border-color: var(--line); }
.umbau-agenda-wrap { overflow-x: auto; }
.umbau-agenda-table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.umbau-agenda-table th {
    padding: 0.5rem 0.65rem;
    background: var(--navy);
    color: #fff;
    text-align: left;
}
.umbau-agenda-table td {
    width: 50%;
    padding: 0.4rem;
    border: 1px solid var(--line);
    vertical-align: top;
}
.umbau-agenda-phase {
    padding: 0.42rem 0.55rem;
    border: 2px solid #d97706;
    border-radius: 7px;
    background: #fff1cc;
}
.umbau-agenda-phase + .umbau-agenda-phase { margin-top: 0.3rem; }
.umbau-agenda-phase.is-too-short {
    border-color: #74120d;
    background: #b42318;
    color: #fff;
    box-shadow: inset 0 0 0 2px #ffb4aa;
}
.umbau-agenda-days { margin-top: 0.12rem; font-variant-numeric: tabular-nums; }
.umbau-agenda-duration {
    margin-top: 0.25rem;
    padding: 0.15rem 0.3rem;
    border: 1px solid rgba(255,255,255,.7);
    border-radius: 4px;
    font-size: 0.78rem;
    font-weight: 850;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}
.umbau-agenda-events {
    margin-top: 0.3rem;
    padding-top: 0.25rem;
    border-top: 1px solid currentColor;
    font-size: 0.86rem;
}
.umbau-agenda-events ul {
    margin: 0.15rem 0 0;
    padding-left: 1.1rem;
}
.umbau-agenda-events li + li { margin-top: 0.12rem; }
.umbau-agenda-comment {
    margin-top: 0.25rem;
    padding-top: 0.22rem;
    border-top: 1px solid currentColor;
    font-weight: 650;
    white-space: pre-wrap;
}
.termin-agenda-th-pr { background: #4a6b32 !important; }
.termin-agenda-th-aula { background: #2c5282 !important; }
.termin-agenda-card {
    padding: 0.42rem 0.55rem;
    border: 2px solid #5a7a3a;
    border-radius: 7px;
    background: var(--pr);
    color: var(--ink);
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
}
.termin-agenda-card + .termin-agenda-card { margin-top: 0.3rem; }
.termin-agenda-card.is-aula {
    background: var(--aula-v);
    border-color: var(--navy-2);
}
.termin-agenda-card.is-beide {
    background: linear-gradient(90deg, var(--pr) 0 50%, var(--aula-v) 50% 100%);
    border-color: var(--navy);
}
.termin-agenda-card.is-past { opacity: 0.62; }
.termin-agenda-card.is-current { box-shadow: inset 0 0 0 2px var(--ok); }
.termin-agenda-days { margin-top: 0.12rem; font-variant-numeric: tabular-nums; }
.termin-agenda-meta { margin-top: 0.12rem; font-size: 0.82rem; color: var(--muted); }
.termin-agenda-note {
    margin-top: 0.25rem;
    padding-top: 0.22rem;
    border-top: 1px solid rgba(27, 54, 93, 0.25);
    white-space: pre-wrap;
    font-size: 0.85rem;
}
.termin-agenda-card.is-compact {
    padding: 0.05rem 0.28rem;
    border-width: 1px;
    border-radius: 3px;
    font-size: 7.6pt;
    line-height: 1.22;
    overflow: hidden;
}
.termin-agenda-card.is-compact + .termin-agenda-card.is-compact { margin-top: 0.08rem; }
.termin-agenda-card.is-compact .jg-chip {
    font-size: 0.62rem;
    padding: 0 0.28em;
    vertical-align: 0.05em;
}
.termin-agenda-card.is-compact .termin-agenda-date {
    font-variant-numeric: tabular-nums;
    font-weight: 800;
}
.termin-agenda-card.is-compact .termin-agenda-mode {
    font-weight: 500;
    color: var(--muted);
}
.termin-agenda-card.is-compact .termin-agenda-note {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: inherit;
    color: var(--muted);
    white-space: nowrap;
}
.termin-agenda-card.is-compact.is-current { box-shadow: inset 0 0 0 1px var(--ok); }
.termin-agenda-table.is-compact th {
    padding: 0.18rem 0.35rem;
    font-size: 8.5pt;
}
.termin-agenda-table.is-compact td { padding: 0.12rem 0.16rem; }

body.print-agenda .top { padding: 0.45rem 0.85rem 0.4rem; }
body.print-agenda h1 { font-size: 1.05rem; }
body.print-agenda main { padding: 0.55rem 0.85rem 0.4rem; }
.agenda-print-foot {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.15rem;
    margin: 0.45rem 0.85rem 0.7rem;
    padding-top: 0.35rem;
    border-top: 1px solid var(--line);
    text-align: center;
    break-inside: avoid;
    page-break-inside: avoid;
}
.agenda-print-qr svg {
    width: 22mm;
    height: 22mm;
    display: block;
}
.agenda-print-foot p { margin: 0; color: var(--ink); }
.agenda-print-url { font-size: 8.5pt; font-variant-numeric: tabular-nums; }
.agenda-print-pw { font-size: 8.5pt; font-weight: 700; }

body.print-agenda .umbau-agenda-table,
body.print-umbau .umbau-agenda-table {
    border-collapse: separate;
    border-spacing: 0 0.1rem;
}
body.print-agenda .umbau-agenda-table th,
body.print-umbau .umbau-agenda-table th {
    padding: 0.18rem 0.35rem;
    background: transparent !important;
    color: var(--ink);
    border-left: 3px solid var(--navy-2);
}
body.print-agenda .umbau-agenda-table th:first-child,
body.print-umbau .umbau-agenda-table th:first-child {
    border-left-color: #4a6b32;
}
body.print-agenda .umbau-agenda-table td,
body.print-umbau .umbau-agenda-table td {
    padding: 0.08rem 0.18rem;
    border: 0;
}
body.print-agenda .termin-agenda-card {
    padding: 0.03rem 0.3rem;
    border: 0;
    border-left: 3px solid #4a6b32;
    border-radius: 0;
    background: transparent !important;
    box-shadow: none;
}
body.print-agenda .termin-agenda-card.is-aula { border-left-color: var(--navy-2); }
body.print-agenda .termin-agenda-card.is-beide { border-left-color: var(--navy); }
body.print-agenda .agenda-print-foot { border-top: 0; }
body.print-umbau .umbau-agenda-phase {
    padding: 0.2rem 0.4rem;
    border: 0;
    border-left: 3px solid #d97706;
    border-radius: 0;
    background: transparent;
    color: var(--ink);
    box-shadow: none;
}
body.print-umbau .umbau-agenda-phase + .umbau-agenda-phase { margin-top: 0.12rem; }
body.print-umbau .umbau-agenda-phase.is-too-short {
    border-left-color: #b42318;
    background: transparent;
    color: var(--ink);
    box-shadow: none;
}
body.print-umbau .umbau-agenda-duration {
    margin-top: 0.1rem;
    padding: 0;
    border: 0;
    color: #9f1c13;
}
body.print-umbau .umbau-agenda-events,
body.print-umbau .umbau-agenda-comment {
    margin-top: 0.12rem;
    padding-top: 0;
    border-top: 0;
}
body.print-umbau .umbau-agenda-events ul { margin-top: 0.05rem; }

@media print {
    .event-del, .event-edit, .event-actions, .event-modal, .umbau-agenda-modal { display: none !important; }
}
.event-title { font-weight: 650; }
.event-range { font-size: 0.78em; color: var(--muted); }
.event-mode-hint { margin-top: 0.12rem; font-size: 0.78em; color: var(--err); font-weight: 750; }
.event-note { font-size: 0.78em; color: var(--warn); }
.jg-chip {
    display: inline-block;
    background: var(--navy);
    color: #fff;
    border-radius: 999px;
    font-size: 0.7rem;
    padding: 0.05rem 0.4rem;
    margin-left: 0.15rem;
}
.warn-ico {
    display: inline-flex;
    width: 1.05em;
    height: 1.05em;
    border-radius: 50%;
    background: #e2b100;
    color: #3b2a00;
    font-weight: 900;
    align-items: center;
    justify-content: center;
    font-size: 0.75em;
    margin-right: 0.2rem;
    border: 1px solid #8a6a00;
    cursor: help;
}
.klausurphase {
    background: #fff;
    border: 1px solid #d4a017;
    padding: 0.35rem 0.45rem;
    margin-bottom: 0.35rem;
    font-size: 0.82rem;
    line-height: 1.35;
}

.print-hint { text-align: center; color: var(--muted); }

@media print {
    body { background: #fff; }
    .no-print, .top-nav, .cache-warn, .print-hint { display: none !important; }
    .top { position: static; background: #fff; color: var(--navy); box-shadow: none; padding: 0 0 0.4rem; }
    .top h1, .top .kicker { color: var(--navy); }
    .mode-pill { border: 1px solid var(--navy); }
    table.cal { min-width: 0; font-size: 8.5pt; }
    table.cal thead th { position: static; }
    .cal-wrap { border: 0; }
    @page { size: A4 landscape; margin: 8mm; }
    @page agenda-portrait { size: A4 portrait; margin: 18mm; }
    @page umbau-landscape { size: A4 landscape; margin: 18mm; }
    body.print-agenda { page: agenda-portrait; font-size: 9pt; }
    body.print-umbau { page: umbau-landscape; }
    body.print-agenda .top { padding: 0 0 0.2rem; }
    body.print-agenda h1 { font-size: 10pt; margin: 0; }
    body.print-agenda .kicker { font-size: 7pt; letter-spacing: 0.08em; }
    body.print-agenda main { padding: 0; }
    body.print-agenda .agenda-print-foot {
        margin: 0.35rem 0 0;
        padding-top: 0;
        border-top: 0;
    }
    body.print-agenda .agenda-print-qr svg { width: 18mm; height: 18mm; }
    body.print-agenda .agenda-print-url,
    body.print-agenda .agenda-print-pw { font-size: 7.5pt; }
    body.print-agenda .termin-agenda-table.is-compact th {
        padding: 0.18rem 0.32rem;
        font-size: 9pt;
    }
    body.print-agenda .termin-agenda-table.is-compact td { padding: 0.12rem 0.16rem; }
    body.print-agenda .termin-agenda-card.is-compact {
        font-size: 8.5pt;
        line-height: 1.22;
        padding: 0.06rem 0.28rem;
    }
    body.print-agenda .termin-agenda-card.is-compact + .termin-agenda-card.is-compact { margin-top: 0.08rem; }
    body.print-agenda .termin-agenda-card.is-current { box-shadow: none; }
    body.print-umbau .top { padding: 0 0 0.2rem; }
    body.print-umbau main { padding: 0; }
    body.print-umbau .hint { margin: 0 0 0.2rem; font-size: 7.5pt; }
    body.print-umbau .umbau-agenda-phase {
        font-size: 8.5pt;
        line-height: 1.22;
    }
    tr.row-wechsel td, td.is-umbau, td.is-umbau-single, .umbau-badge, .kollision-banner,
    tr.has-aula-klausur-band td.col-v, tr.has-aula-klausur-band td.col-k, tr.has-aula-klausur-band td.col-s,
    tr.has-aula-klausur-band td.col-aula-nested,
    .termin-agenda-card, .termin-agenda-th-pr, .termin-agenda-th-aula, .umbau-agenda-phase, .agenda-print-qr {
        -webkit-print-color-adjust: exact;
        print-color-adjust: exact;
    }
    tr[data-calendar-month][hidden] { display: table-row !important; }
    .month-toggle-icon { display: none; }
}

@media (max-width: 800px) {
    .top { position: static; }
    h1 { font-size: 1.3rem; }
}
