:root {
    --blue: #244f87;
    --blue-dark: #17375f;
    --blue-light: #eaf2fb;
    --green: #217a57;
    --yellow: #a86d00;
    --red: #a83a3a;
    --ink: #253044;
    --muted: #667085;
    --line: #d9e1eb;
    --surface: #ffffff;
    --background: #f4f7fb;
    --radius: 16px;
    --shadow: 0 10px 30px rgba(29, 56, 92, .08);
}
* { box-sizing: border-box; }
html { font-size: 16px; }
body { margin: 0; color: var(--ink); background: var(--background); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans TC", Arial, sans-serif; line-height: 1.55; }
a { color: var(--blue); text-decoration: none; }
.container { width: min(1180px, calc(100% - 32px)); margin: 0 auto; }
.site-header { position: sticky; top: 0; z-index: 20; color: #fff; background: linear-gradient(135deg, var(--blue-dark), var(--blue)); box-shadow: 0 4px 18px rgba(20, 42, 71, .18); }
.header-inner { min-height: 74px; display: flex; align-items: center; justify-content: space-between; gap: 20px; }
.brand { display: flex; align-items: center; gap: 12px; color: #fff; }
.brand-mark { width: 42px; height: 42px; border-radius: 12px; display: grid; place-items: center; color: var(--blue-dark); background: #fff; font-size: 24px; font-weight: 800; }
.brand strong, .brand small { display: block; }
.brand small { opacity: .78; font-size: 12px; letter-spacing: .2em; }
.top-nav { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 4px; }
.top-nav a { color: #fff; padding: 9px 10px; border-radius: 9px; font-size: 14px; }
.top-nav a:hover { background: rgba(255,255,255,.12); }
.main-content { min-height: calc(100vh - 135px); padding-top: 28px; padding-bottom: 44px; }
.site-footer { color: var(--muted); font-size: 13px; text-align: center; padding: 18px 0 28px; }
.card { background: var(--surface); border: 1px solid rgba(217,225,235,.8); border-radius: var(--radius); box-shadow: var(--shadow); padding: 24px; margin-bottom: 22px; }
h1, h2 { line-height: 1.25; margin-top: 0; }
h1 { font-size: clamp(26px, 4vw, 38px); margin-bottom: 18px; }
h2 { font-size: 21px; }
.eyebrow { color: var(--blue); font-weight: 800; letter-spacing: .08em; margin: 0 0 6px; }
.muted, .field-help { color: var(--muted); }
.field-help { margin-top: 5px; font-size: 13px; }
.auth-card { width: min(460px, 100%); margin: 7vh auto 0; padding: 30px; }
.narrow { width: min(620px, 100%); margin-left: auto; margin-right: auto; }
label, legend { display: block; font-weight: 700; margin-bottom: 7px; }
input, select, textarea { width: 100%; border: 1px solid #bdc9d8; border-radius: 11px; padding: 12px 13px; font: inherit; color: var(--ink); background: #fff; }
input:focus, select:focus, textarea:focus { outline: 3px solid rgba(36,79,135,.14); border-color: var(--blue); }
form > label:not(:first-child) { margin-top: 17px; }
fieldset { border: 0; padding: 0; margin: 22px 0; }
legend { font-size: 17px; margin-bottom: 12px; }
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; border: 0; border-radius: 11px; padding: 10px 17px; font: inherit; font-weight: 800; cursor: pointer; }
.btn-primary { color: #fff; background: var(--blue); }
.btn-primary:hover { background: var(--blue-dark); }
.btn-secondary { color: var(--blue-dark); background: var(--blue-light); }
.btn-warning { color: #6f4700; background: #fff1c9; }
.btn-block { width: 100%; margin-top: 22px; }
.btn-large { min-height: 58px; font-size: 19px; }
.btn-small { min-height: 34px; padding: 6px 10px; font-size: 13px; }
.alert { border-radius: 12px; padding: 13px 15px; margin: 0 0 18px; font-weight: 650; }
.alert-success { color: #145c40; background: #e5f7ef; border: 1px solid #bde6d4; }
.alert-warning { color: #7a5000; background: #fff5d9; border: 1px solid #f0d992; }
.alert-danger { color: #8c2f2f; background: #fdecec; border: 1px solid #edc2c2; }
.welcome-card { display: flex; justify-content: space-between; align-items: center; gap: 24px; background: linear-gradient(135deg, #fff, #f1f7ff); }
.profile-grid { display: grid; grid-template-columns: repeat(2, minmax(180px, 1fr)); gap: 12px 28px; }
.profile-grid span { display: block; color: var(--muted); font-size: 13px; }
.today-count { min-width: 150px; text-align: center; padding: 18px; border-radius: 18px; color: #fff; background: var(--blue); }
.today-count span, .today-count small { display: block; }
.today-count strong { display: block; font-size: 48px; line-height: 1.1; }
.feature-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; }
.feature-card { display: block; min-height: 190px; color: var(--ink); background: #fff; border: 1px solid var(--line); border-radius: var(--radius); padding: 22px; box-shadow: var(--shadow); transition: transform .15s ease, box-shadow .15s ease; }
.feature-card:hover { transform: translateY(-3px); box-shadow: 0 16px 36px rgba(29,56,92,.13); }
.feature-card.primary { color: #fff; background: linear-gradient(135deg, var(--blue-dark), var(--blue)); }
.feature-card h2 { margin: 13px 0 7px; }
.feature-card p { margin: 0; opacity: .76; }
.feature-icon { width: 46px; height: 46px; display: grid; place-items: center; border-radius: 13px; color: var(--blue); background: var(--blue-light); font-size: 22px; font-weight: 900; }
.primary .feature-icon { color: var(--blue-dark); background: #fff; }
.page-heading, .section-title-row { display: flex; align-items: center; justify-content: space-between; gap: 18px; }
.page-heading { margin-bottom: 22px; }
.page-heading h1 { margin-bottom: 0; }
.form-grid { display: grid; gap: 16px; }
.form-grid.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.form-grid.four { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.align-end { align-items: end; }
.class-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 10px; }
.choice-button input, .pill-choice input { position: absolute; opacity: 0; pointer-events: none; }
.choice-button span, .pill-choice span { display: flex; align-items: center; justify-content: center; min-height: 56px; padding: 10px; border: 2px solid var(--line); border-radius: 13px; background: #fff; font-weight: 850; cursor: pointer; }
.choice-button input:checked + span, .pill-choice input:checked + span { color: #fff; border-color: var(--blue); background: var(--blue); box-shadow: 0 0 0 4px rgba(36,79,135,.12); }
.option-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; }
.pill-choice span { min-height: 48px; font-size: 14px; }
.table-scroll { width: 100%; overflow-x: auto; }
table { width: 100%; border-collapse: collapse; font-size: 14px; }
th, td { padding: 12px 10px; text-align: left; vertical-align: top; border-bottom: 1px solid var(--line); }
thead th { color: var(--blue-dark); background: #f0f5fb; white-space: nowrap; }
tbody tr:hover { background: #fafcff; }
.table-subtext { display: block; color: var(--muted); }
.badge { display: inline-block; padding: 4px 9px; border-radius: 999px; color: var(--blue-dark); background: var(--blue-light); font-size: 12px; font-weight: 850; white-space: nowrap; }
.badge-success { color: #145c40; background: #dcf4e9; }
.badge-warning { color: #7a5000; background: #fff0bf; }
.badge-danger { color: #8c2f2f; background: #fde3e3; }
.badge-muted { color: #596273; background: #e9edf2; }
.empty-state { text-align: center; color: var(--muted); padding: 32px 0; }
.inline-form { display: flex; align-items: center; gap: 6px; margin: 0; }
.inline-form select { min-width: 115px; padding: 7px; }
.action-stack { display: flex; flex-wrap: wrap; gap: 6px; }
.action-stack form { margin: 0; }
.week-table { min-width: 970px; table-layout: fixed; }
.week-table th:first-child { width: 86px; }
.week-table thead th { text-align: center; }
.week-table thead small { display: block; color: var(--muted); font-weight: 500; }
.week-table td { height: 110px; padding: 7px; }
.empty-cell { display: grid; place-items: center; height: 92px; border: 1px dashed #b7c6d8; border-radius: 10px; color: #8190a3; }
.week-record { border-left: 4px solid var(--blue); border-radius: 8px; background: #f2f7fd; padding: 8px; margin-bottom: 6px; }
.week-record strong, .week-record span, .week-record small, .week-record em { display: block; }
.week-record span { font-size: 12px; }
.week-record small { color: var(--muted); }
.week-record em { margin-top: 4px; font-size: 12px; font-style: normal; color: #7c3e23; }

.form-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 24px; padding-top: 20px; border-top: 1px solid var(--line); }
.switch-row { min-height: 47px; display: flex; align-items: center; gap: 10px; margin: 0; padding: 11px 13px; border: 1px solid #bdc9d8; border-radius: 11px; background: #fff; cursor: pointer; }
.switch-row input { width: 20px; height: 20px; margin: 0; accent-color: var(--blue); }
.switch-row span { font-weight: 650; }
@media (max-width: 900px) {
    .header-inner { padding: 12px 0; align-items: flex-start; }
    .top-nav { max-width: 62%; }
    .feature-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .form-grid.four { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .class-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .option-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 620px) {
    .container { width: min(100% - 20px, 1180px); }
    .site-header { position: static; }
    .header-inner { display: block; }
    .top-nav { max-width: none; justify-content: flex-start; margin-top: 10px; }
    .top-nav a { padding: 7px 8px; }
    .card { padding: 17px; border-radius: 13px; }
    .welcome-card, .page-heading, .section-title-row { display: block; }
    .today-count { margin-top: 18px; }
    .profile-grid, .feature-grid, .form-grid.two, .form-grid.four { grid-template-columns: 1fr; }
    .class-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .option-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .page-heading .btn { margin-top: 12px; }
    .form-actions { flex-direction: column-reverse; }
    .form-actions .btn { width: 100%; }
}

/* v1.2 專科教室借用 */
.today-stats { display: flex; gap: 12px; }
.secondary-stat { background: #2f7967; }
.period-choice-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.period-choice-grid .choice-button span { flex-direction: column; gap: 2px; min-height: 66px; }
.period-choice-grid small { color: inherit; opacity: .72; font-size: 12px; font-weight: 600; }
.room-admin-form { grid-template-columns: minmax(220px, 1fr) minmax(280px, 2fr) auto auto; }
.booking-toolbar { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 16px; margin-bottom: 14px; }
.booking-title { text-align: center; }
.booking-title h2, .booking-title p { margin-bottom: 0; }
.booking-title p { color: var(--muted); font-size: 13px; }
.booking-legend { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; color: var(--muted); font-size: 13px; margin-bottom: 13px; }
.legend-dot { display: inline-block; width: 11px; height: 11px; margin-right: 5px; border-radius: 50%; vertical-align: -1px; }
.legend-dot.available { background: #dcecfb; border: 1px solid #8eb2d4; }
.legend-dot.booked { background: #cce9df; border: 1px solid #58a188; }
.booking-week-table td { height: 145px; }
.booking-empty { height: 127px; color: var(--blue); background: #fbfdff; }
.booking-empty strong, .booking-empty span { display: block; text-align: center; }
.booking-unavailable { height: 127px; color: #9aa4b2; background: #f3f5f7; border-style: solid; }
.booking-empty span { color: var(--muted); font-size: 12px; font-weight: 500; }
.booking-record { min-height: 127px; border-left: 4px solid #2f7967; border-radius: 9px; background: #edf8f4; padding: 9px; }
.booking-record > strong, .booking-record > span, .booking-record > em, .booking-record > small { display: block; }
.booking-record > span { color: #315d52; font-size: 12px; font-weight: 700; }
.booking-record > em { color: var(--ink); margin-top: 5px; font-style: normal; font-weight: 700; }
.booking-record > small { color: var(--muted); margin-top: 4px; }
.booking-actions { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 9px; }
.booking-actions form { margin: 0; }
.today-column { background-color: #fffaf0 !important; }

@media (max-width: 900px) {
    .period-choice-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .room-admin-form { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 620px) {
    .today-stats { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 18px; }
    .today-count { min-width: 0; margin-top: 0; padding: 13px 8px; }
    .today-count strong { font-size: 36px; }
    .period-choice-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .room-admin-form { grid-template-columns: 1fr; }
    .booking-toolbar { grid-template-columns: 1fr 1fr; }
    .booking-title { grid-column: 1 / -1; grid-row: 1; }
    .booking-toolbar > a:last-child { justify-self: end; }
}

/* v1.3 專科教室禁借時段 */
.btn-danger { color: #fff; background: #a53c3c; }
.btn-danger:hover { background: #873030; }
.heading-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
.legend-dot.blocked { background: #f4caca; border: 1px solid #b95555; }
.booking-blocked {
    height: 127px;
    align-content: center;
    gap: 5px;
    color: #8c2f2f;
    background: #fff0f0;
    border: 1px solid #df9b9b;
    text-align: center;
}
.booking-blocked strong, .booking-blocked span, .booking-blocked a { display: block; }
.booking-blocked span { max-width: 150px; color: #713e3e; font-size: 12px; line-height: 1.45; }
.booking-blocked a { color: #7d3434; font-size: 12px; font-weight: 750; text-decoration: underline; }
.block-rule-fields { margin-top: 16px; }
.block-active-switch { margin-top: 16px; }
.conflict-card { border-left: 5px solid #b74b4b; }
.conflict-card h2 { color: #8c2f2f; }
@media (max-width: 620px) {
    .heading-actions { justify-content: flex-start; margin-top: 12px; }
    .heading-actions .btn { width: 100%; margin-top: 0; }
}


/* v1.4 共享 PDF 檔案 */
.btn-light { color: var(--ink); background: #eef1f5; }
.btn-light:hover { background: #dfe5ec; }
.file-stat { background: #71528f; }
.shared-file-filters .filter-actions { display: flex; gap: 8px; margin-top: 16px; }
.shared-file-table { min-width: 900px; }
.shared-file-table th:first-child { min-width: 230px; }
.shared-purpose { display: block; margin-top: 8px; line-height: 1.45; }
.pagination { display: flex; align-items: center; justify-content: center; gap: 12px; margin-top: 20px; }
.uploader-summary { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin: 20px 0; }
.uploader-summary > div { padding: 13px 15px; border: 1px solid var(--line); border-radius: 12px; background: #f8fafc; }
.uploader-summary span, .uploader-summary strong { display: block; }
.uploader-summary span { color: var(--muted); font-size: 12px; }
.current-file-box { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 4px 12px; margin: 18px 0; padding: 15px; border: 1px solid #cdd9e8; border-radius: 13px; background: #f3f7fc; }
.current-file-box span, .current-file-box strong, .current-file-box small { grid-column: 1; }
.current-file-box span, .current-file-box small { color: var(--muted); }
.current-file-box .btn { grid-column: 2; grid-row: 1 / span 3; }
.pdf-upload-box { margin-top: 18px; padding: 18px; border: 2px dashed #b8c7d9; border-radius: 14px; background: #fbfdff; }
.pdf-upload-box input[type=file] { padding: 11px; background: #fff; }
@media (max-width: 760px) {
    .today-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .today-count { min-width: 0; padding: 13px 8px; }
    .today-count strong { font-size: 34px; }
}
@media (max-width: 620px) {
    .today-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .uploader-summary { grid-template-columns: 1fr; }
    .current-file-box { grid-template-columns: 1fr; }
    .current-file-box .btn { grid-column: 1; grid-row: auto; margin-top: 8px; }
    .shared-file-filters .filter-actions { flex-direction: column; }
    .shared-file-filters .filter-actions .btn { width: 100%; }
}

/* v1.5 校務共同行事曆 */
.calendar-stat { background: #ad5b36; }
.calendar-filter-card .filter-actions { display: flex; gap: 8px; margin-top: 16px; }
.calendar-card { padding: 18px; }
.calendar-toolbar { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 14px; margin-bottom: 16px; text-align: center; }
.calendar-toolbar h2 { margin: 0; }
.calendar-scroll { width: 100%; overflow-x: auto; }
.calendar-grid { display: grid; grid-template-columns: repeat(7, minmax(132px, 1fr)); min-width: 924px; }
.calendar-weekdays > div { padding: 10px; color: #fff; background: var(--blue); border-right: 1px solid rgba(255,255,255,.18); text-align: center; font-weight: 800; }
.calendar-weekdays > div:first-child { border-radius: 10px 0 0 0; }
.calendar-weekdays > div:last-child { border-radius: 0 10px 0 0; }
.calendar-month-grid { border-left: 1px solid var(--line); border-top: 1px solid var(--line); }
.calendar-day { min-height: 148px; padding: 7px; background: #fff; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.calendar-day.outside-month { background: #f3f5f8; }
.calendar-day.outside-month .calendar-day-number, .calendar-day.outside-month .calendar-event { opacity: .52; }
.calendar-day.calendar-today { box-shadow: inset 0 0 0 3px #d89a2c; background: #fffaf0; }
.calendar-day-number { display: flex; align-items: center; justify-content: space-between; min-height: 26px; margin-bottom: 5px; color: var(--muted); font-weight: 850; }
.calendar-day-number small { padding: 2px 6px; border-radius: 999px; color: #795000; background: #fff0c2; }
.calendar-day-events { display: grid; gap: 5px; }
.calendar-event { position: relative; display: block; padding: 6px 7px; border-left: 4px solid var(--blue); border-radius: 7px; color: var(--ink); background: #eef5fc; font-size: 12px; line-height: 1.35; overflow: hidden; }
.calendar-event span { color: var(--muted); font-size: 11px; }
.calendar-event strong { display: block; }
.calendar-event em { position: absolute; top: 5px; right: 5px; color: var(--green); font-size: 10px; font-style: normal; font-weight: 800; }
.calendar-event.cancelled { opacity: .55; text-decoration: line-through; }
.category-school_meeting { --category-color: #4e67a8; }
.category-teaching { --category-color: #2b7b69; }
.category-student_affairs { --category-color: #a15b32; }
.category-exam { --category-color: #a33f4f; }
.category-training { --category-color: #7653a2; }
.category-parent { --category-color: #a06a14; }
.category-holiday { --category-color: #4b7b3a; }
.category-other { --category-color: #667085; }
.calendar-event[class*="category-"], .badge[class*="category-"], .calendar-widget-category[class*="category-"] { border-color: var(--category-color); }
.calendar-event[class*="category-"] { border-left-color: var(--category-color); background: color-mix(in srgb, var(--category-color) 9%, white); }
.badge[class*="category-"] { color: var(--category-color); background: color-mix(in srgb, var(--category-color) 12%, white); }
.calendar-list { display: grid; gap: 10px; }
.calendar-list-item { display: grid; grid-template-columns: 72px 1fr; gap: 16px; padding: 14px; border: 1px solid var(--line); border-radius: 13px; background: #fff; }
.calendar-list-item.cancelled { opacity: .6; }
.calendar-list-date { min-height: 62px; display: grid; place-items: center; align-content: center; border-radius: 11px; color: #fff; background: var(--blue); }
.calendar-list-date strong, .calendar-list-date span { display: block; }
.calendar-list-date strong { font-size: 20px; }
.calendar-list-date span { font-size: 12px; }
.calendar-list-body h3 { margin: 5px 0 3px; font-size: 18px; }
.calendar-list-body p { margin: 0; color: var(--muted); }
.calendar-list-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; color: var(--muted); font-size: 12px; }
.compact-calendar-list .calendar-list-item { padding: 11px; }
.compact-calendar-list .calendar-list-date { min-height: 54px; }
.calendar-form-card { width: min(900px, 100%); margin-left: auto; margin-right: auto; }
.calendar-all-day-switch { margin: 20px 0 16px; }
.calendar-recurrence-grid { margin: 16px 0; }
.calendar-detail-badges { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
.calendar-detail-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin: 0; }
.calendar-detail-grid > div { padding: 14px; border: 1px solid var(--line); border-radius: 12px; background: #f8fafc; }
.calendar-detail-grid dt { color: var(--muted); font-size: 12px; }
.calendar-detail-grid dd { margin: 3px 0 0; font-weight: 750; }
.calendar-description { margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--line); }
.calendar-description p { white-space: normal; }
.calendar-manage-actions { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: 8px; margin-top: 24px; padding-top: 20px; border-top: 1px solid var(--line); }
.calendar-manage-actions form { margin: 0; }

/* 公開行事曆，可嵌入 wsjh.tc.edu.tw */
.public-calendar-page, .calendar-widget-page { background: #fff; }
.public-calendar-shell { width: min(1240px, calc(100% - 24px)); margin: 0 auto; padding: 18px 0 28px; }
.public-calendar-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 14px; }
.public-calendar-header p, .calendar-widget-header p { margin: 0; color: var(--blue); font-weight: 800; letter-spacing: .08em; }
.public-calendar-header h1 { margin: 2px 0 0; font-size: clamp(26px, 4vw, 38px); }
.public-calendar-filter { display: grid; grid-template-columns: auto minmax(180px, 280px); align-items: center; justify-content: end; gap: 10px; margin-bottom: 12px; }
.public-calendar-filter label { margin: 0; }
.public-calendar-card { padding: 16px; margin-bottom: 16px; border: 1px solid var(--line); border-radius: 14px; background: #fff; box-shadow: 0 8px 22px rgba(29,56,92,.07); }
.public-month-grid .calendar-day { min-height: 132px; }
.public-event-list-section h2 { margin-bottom: 15px; }
.public-event-description { margin-top: 8px; color: #455269; font-size: 14px; }
.public-calendar-footer { color: var(--muted); text-align: center; font-size: 12px; }
.calendar-widget-shell { width: 100%; padding: 8px; }
.calendar-widget-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 4px 4px 12px; border-bottom: 2px solid var(--blue-light); }
.calendar-widget-header h1 { margin: 0; font-size: 24px; }
.calendar-widget-header a { font-weight: 800; }
.calendar-widget-list { display: grid; }
.calendar-widget-item { display: grid; grid-template-columns: 64px 1fr; gap: 12px; padding: 12px 5px; border-bottom: 1px solid var(--line); }
.calendar-widget-date { display: grid; place-items: center; align-content: center; min-height: 58px; border-radius: 11px; color: #fff; background: var(--blue); }
.calendar-widget-date strong { font-size: 18px; }
.calendar-widget-date span { font-size: 11px; }
.calendar-widget-category { display: inline-block; padding: 2px 7px; border-radius: 999px; color: var(--category-color); background: color-mix(in srgb, var(--category-color) 11%, white); font-size: 11px; font-weight: 800; }
.calendar-widget-content h2 { margin: 3px 0; font-size: 17px; }
.calendar-widget-content p { margin: 0; color: var(--muted); font-size: 13px; }
.calendar-widget-empty { padding: 32px 8px; color: var(--muted); text-align: center; }

@media (max-width: 760px) {
    .calendar-detail-grid { grid-template-columns: 1fr; }
    .public-calendar-header { align-items: flex-start; }
}
@media (max-width: 620px) {
    .calendar-filter-card .filter-actions { flex-direction: column; }
    .calendar-filter-card .filter-actions .btn { width: 100%; }
    .calendar-toolbar { grid-template-columns: 1fr 1fr; }
    .calendar-toolbar > div { grid-column: 1 / -1; grid-row: 1; }
    .calendar-toolbar > a:last-child { justify-self: stretch; }
    .calendar-list-item { grid-template-columns: 58px 1fr; gap: 10px; padding: 10px; }
    .calendar-list-date { min-height: 55px; }
    .calendar-list-date strong { font-size: 17px; }
    .calendar-manage-actions { flex-direction: column; }
    .calendar-manage-actions .btn { width: 100%; }
    .public-calendar-shell { width: min(100% - 12px, 1240px); padding-top: 8px; }
    .public-calendar-header { display: block; }
    .public-calendar-header .btn { margin-top: 8px; }
    .public-calendar-filter { grid-template-columns: 1fr; }
    .public-calendar-card { padding: 9px; }
    .calendar-widget-item { grid-template-columns: 58px 1fr; gap: 9px; }
}
@media (max-width: 1080px) and (min-width: 761px) {
    .welcome-card { align-items: flex-start; }
    .today-stats { display: grid; grid-template-columns: repeat(2, minmax(130px, 1fr)); }
}
.public-calendar-filter { grid-template-columns: auto minmax(180px, 280px) auto; }
@media (max-width: 620px) {
    .public-calendar-filter { grid-template-columns: 1fr; }
    .public-calendar-filter .btn { width: 100%; }
}

/* v1.6 會議資料共編中心 */
.meeting-stat { background: #6654a4; }
.meeting-category-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(120px,1fr)); gap:10px; margin-bottom:16px; }
.meeting-category-card { display:flex; align-items:center; justify-content:space-between; gap:8px; min-height:70px; padding:13px; border:1px solid var(--line); border-radius:13px; background:#fff; color:var(--ink); box-shadow:0 6px 16px rgba(25,53,85,.05); }
.meeting-category-card strong { font-size:16px; }
.meeting-category-card span { color:var(--muted); font-size:12px; }
.meeting-category-card.active { border-color:var(--blue); background:#edf5fc; box-shadow:inset 0 0 0 1px var(--blue); }
.meeting-filter-card .filter-actions { display:flex; gap:8px; margin-top:16px; }
.meeting-list { display:grid; gap:12px; }
.meeting-list-item { display:grid; grid-template-columns:78px minmax(0,1fr) auto; gap:16px; align-items:center; padding:14px; border:1px solid var(--line); border-radius:14px; background:#fff; }
.meeting-list-date { display:grid; place-items:center; align-content:center; min-height:70px; padding:8px; border-radius:12px; color:#fff; background:#3c5782; text-align:center; }
.meeting-list-date strong { font-size:21px; }
.meeting-list-date span { font-size:11px; }
.meeting-list-main h3 { margin:6px 0 4px; font-size:19px; }
.meeting-list-main p { margin:0; color:var(--muted); }
.meeting-list-meta,.meeting-list-foot { display:flex; flex-wrap:wrap; gap:8px 14px; color:var(--muted); font-size:12px; }
.meeting-list-foot { margin-top:8px; }
.meeting-list-actions { display:flex; gap:7px; }
.meeting-status-draft { color:#725b00; background:#fff5c9; }
.meeting-status-editing { color:#24558b; background:#e8f2fc; }
.meeting-status-final { color:#5d3b8f; background:#f0eafd; }
.meeting-status-published { color:#1d6d52; background:#e4f7ef; }
.meeting-form-card { width:min(1050px,100%); margin:0 auto; }
.meeting-selector-fieldset { margin:22px 0; padding:16px; border:1px solid var(--line); border-radius:13px; }
.meeting-selector-fieldset legend { padding:0 8px; font-size:17px; font-weight:850; }
.meeting-check-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:9px; }
.meeting-check-item,.meeting-file-check { display:flex; align-items:flex-start; gap:9px; padding:10px; border:1px solid var(--line); border-radius:10px; background:#f9fbfd; }
.meeting-check-item input,.meeting-file-check input { width:auto; margin-top:4px; }
.meeting-check-item span,.meeting-file-check span { display:grid; gap:2px; }
.meeting-check-item small,.meeting-file-check small { color:var(--muted); }
.meeting-file-check-list { display:grid; gap:8px; max-height:380px; overflow:auto; }
.meeting-detail-badges { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:18px; }
.meeting-detail-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:10px; margin:0; }
.meeting-detail-grid>div { padding:13px; border:1px solid var(--line); border-radius:11px; background:#f8fafc; }
.meeting-detail-grid .wide { grid-column:1/-1; }
.meeting-detail-grid dt { color:var(--muted); font-size:12px; }
.meeting-detail-grid dd { margin:4px 0 0; line-height:1.65; font-weight:700; }
.meeting-document-view { display:grid; gap:13px; margin:16px 0; }
.meeting-section-view { display:grid; grid-template-columns:44px 1fr; gap:14px; }
.meeting-section-number { display:grid; place-items:center; width:38px; height:38px; border-radius:999px; color:#fff; background:var(--blue); font-weight:850; }
.meeting-section-view h2 { margin:3px 0 12px; font-size:21px; }
.meeting-section-content { white-space:normal; line-height:1.85; overflow-wrap:anywhere; }
.meeting-section-updated { margin:14px 0 0; color:var(--muted); font-size:12px; }
.meeting-support-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; }
.people-chip-list { display:flex; flex-wrap:wrap; gap:8px; }
.people-chip-list span { display:grid; padding:8px 10px; border-radius:10px; background:#eef4fa; }
.people-chip-list small { color:var(--muted); }
.meeting-attachment-list { display:grid; gap:8px; }
.meeting-attachment-list a { display:grid; gap:2px; padding:10px; border:1px solid var(--line); border-radius:10px; }
.meeting-attachment-list small { color:var(--muted); }
.meeting-flow-actions { display:flex; flex-wrap:wrap; gap:8px; }
.meeting-flow-actions form { margin:0; }
.meeting-add-section-card .inline-form { grid-template-columns:minmax(0,1fr) auto; }
.meeting-editor-sections { display:grid; gap:14px; }
.meeting-editor-section { position:relative; }
.meeting-editor-section-head { display:grid; grid-template-columns:44px minmax(0,1fr) auto; gap:12px; align-items:end; margin-bottom:10px; }
.meeting-editor-section textarea { min-height:260px; line-height:1.7; }
.meeting-autosave-status { align-self:center; min-width:120px; padding:6px 9px; border-radius:999px; color:var(--muted); background:#eef2f6; text-align:center; font-size:12px; font-weight:750; }
.meeting-autosave-status[data-state="saving"] { color:#24558b; background:#e8f2fc; }
.meeting-autosave-status[data-state="saved"] { color:#1d6d52; background:#e4f7ef; }
.meeting-autosave-status[data-state="dirty"] { color:#725b00; background:#fff5c9; }
.meeting-autosave-status[data-state="error"] { color:#9a2531; background:#fde9ec; }
.meeting-save-version-card { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:18px; align-items:end; margin-top:16px; }
.meeting-save-version-card .form-actions { margin:0; }
.meeting-version-list { display:grid; gap:10px; }
.meeting-version-list article { display:grid; grid-template-columns:52px minmax(0,1fr) auto; gap:14px; align-items:center; padding:12px; border:1px solid var(--line); border-radius:12px; }
.meeting-version-list h2 { margin:0 0 4px; font-size:17px; }
.meeting-version-list p { margin:0; color:var(--muted); }
.meeting-version-index { display:grid; place-items:center; width:44px; height:44px; border-radius:10px; color:#fff; background:#6654a4; font-weight:850; }
.empty-note { color:var(--muted); }
@media (max-width:800px){.meeting-detail-grid{grid-template-columns:1fr 1fr}.meeting-support-grid{grid-template-columns:1fr}.meeting-list-item{grid-template-columns:64px 1fr}.meeting-list-actions{grid-column:2;justify-content:flex-start}.meeting-editor-section-head{grid-template-columns:40px 1fr}.meeting-autosave-status{grid-column:2;justify-self:start}.meeting-save-version-card{grid-template-columns:1fr}}
@media (max-width:560px){.meeting-detail-grid{grid-template-columns:1fr}.meeting-list-item{grid-template-columns:56px 1fr;gap:10px;padding:10px}.meeting-list-date{min-height:58px}.meeting-list-actions{flex-direction:column}.meeting-filter-card .filter-actions{flex-direction:column}.meeting-filter-card .btn{width:100%}.meeting-category-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.meeting-section-view{grid-template-columns:1fr}.meeting-editor-section-head{grid-template-columns:1fr}.meeting-section-number{width:34px;height:34px}.meeting-autosave-status{grid-column:1}.meeting-version-list article{grid-template-columns:44px 1fr}.meeting-version-list article .btn{grid-column:2;justify-self:start}}

/* v1.6.3 首頁統計卡片響應式修正 */
.welcome-card {
    display: grid;
    grid-template-columns: minmax(300px, .85fr) minmax(0, 1.65fr);
    align-items: center;
}
.today-stats {
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    min-width: 0;
}
.today-count {
    min-width: 0;
    padding: 16px 10px;
}
.today-count span,
.today-count small {
    line-height: 1.35;
}

@media (max-width: 1080px) and (min-width: 761px) {
    .welcome-card {
        display: block;
    }
    .today-stats {
        grid-template-columns: repeat(6, minmax(0, 1fr));
        margin-top: 18px;
    }
}

@media (max-width: 760px) {
    .welcome-card {
        display: block;
    }
    .today-stats {
        grid-template-columns: repeat(3, minmax(0, 1fr));
        margin-top: 18px;
    }
}

@media (max-width: 620px) {
    .today-stats {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 390px) {
    .today-stats {
        grid-template-columns: 1fr;
    }
}

/* v1.7 維修通報中心 */
.btn-danger { color:#fff; background:#a83a3a; }
.btn-danger:hover { background:#842929; }
.nav-notification-link { position:relative; }
.nav-badge { display:inline-grid; place-items:center; min-width:19px; height:19px; margin-left:4px; padding:0 5px; border-radius:999px; color:#7d1f1f; background:#fff2a8; font-size:11px; font-weight:900; vertical-align:middle; }
.repair-stat { background:#a14f63; }
.repair-summary-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:14px; margin-bottom:20px; }
.repair-summary-card { display:flex; align-items:center; justify-content:space-between; min-height:92px; padding:18px 20px; border-radius:15px; color:#fff; box-shadow:var(--shadow); }
.repair-summary-card span { font-weight:800; }
.repair-summary-card strong { font-size:38px; line-height:1; }
.repair-summary-card.pending { background:#aa6d00; }
.repair-summary-card.processing { background:#315f93; }
.repair-summary-card.open { background:#8a4b70; }
.repair-summary-card.completed { background:#25785b; }
.repair-filter-card .filter-actions { display:flex; gap:8px; grid-column:1/-1; }
.repair-ticket-list { display:grid; gap:13px; }
.repair-ticket-card { position:relative; padding:16px 17px; border:1px solid var(--line); border-left:5px solid #8a98a8; border-radius:14px; background:#fff; }
.repair-ticket-card.urgency-urgent { border-left-color:#d48b00; }
.repair-ticket-card.urgency-class_impact { border-left-color:#b23c3c; }
.repair-ticket-head,.repair-ticket-foot,.repair-detail-title { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; }
.repair-ticket-head h2 { margin:7px 0 0; font-size:20px; }
.repair-ticket-head time,.repair-detail-title time { color:var(--muted); font-size:12px; white-space:nowrap; }
.repair-ticket-badges { display:flex; flex-wrap:wrap; gap:6px; }
.repair-dept-it { color:#174f82; background:#e4f1fd; }
.repair-dept-general { color:#76500c; background:#fff1c9; }
.repair-status-pending,.repair-status-returned { color:#755600; background:#fff2bd; }
.repair-status-accepted,.repair-status-processing { color:#205b91; background:#e5f1fc; }
.repair-status-waiting_material,.repair-status-procurement,.repair-status-outsourced { color:#76500c; background:#f7e8cc; }
.repair-status-completed,.repair-status-closed { color:#176247; background:#dff4ea; }
.repair-status-cancelled { color:#667085; background:#e9edf2; }
.repair-ticket-body { margin:13px 0; }
.repair-ticket-body p { margin:5px 0 0; color:var(--muted); }
.repair-ticket-foot { align-items:center; justify-content:flex-start; flex-wrap:wrap; color:var(--muted); font-size:12px; }
.repair-ticket-foot .btn { margin-left:auto; }
.repair-form-card { width:min(980px,100%); margin-left:auto; margin-right:auto; }
.repair-auto-info { display:flex; flex-wrap:wrap; gap:12px 26px; margin-top:18px; padding:13px; border-radius:11px; background:#eef5fb; }
.repair-detail-title { margin-bottom:16px; }
.repair-detail-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:10px; margin:0; }
.repair-detail-grid>div { padding:13px; border:1px solid var(--line); border-radius:11px; background:#f8fafc; }
.repair-detail-grid .wide { grid-column:1/-1; }
.repair-detail-grid dt { color:var(--muted); font-size:12px; }
.repair-detail-grid dd { margin:4px 0 0; font-weight:700; line-height:1.7; }
.pre-wrap { white-space:pre-wrap; overflow-wrap:anywhere; }
.repair-photo-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(160px,1fr)); gap:10px; margin-top:16px; }
.repair-photo-grid.compact { grid-template-columns:repeat(auto-fill,minmax(120px,180px)); }
.repair-photo-grid a { display:grid; gap:6px; padding:7px; border:1px solid var(--line); border-radius:11px; background:#fff; }
.repair-photo-grid img { width:100%; aspect-ratio:4/3; object-fit:cover; border-radius:8px; background:#eef1f5; }
.repair-photo-grid span { overflow:hidden; color:var(--muted); font-size:11px; text-overflow:ellipsis; white-space:nowrap; }
.repair-quick-action { display:flex; align-items:center; justify-content:space-between; gap:18px; background:#eef6ff; }
.repair-quick-action h2,.repair-quick-action p { margin-bottom:4px; }
.repair-timeline { position:relative; display:grid; gap:0; margin-top:18px; }
.repair-timeline-item { position:relative; display:grid; grid-template-columns:24px minmax(0,1fr); gap:12px; padding-bottom:18px; }
.repair-timeline-item::before { content:""; position:absolute; left:7px; top:15px; bottom:-2px; width:2px; background:#d8e1eb; }
.repair-timeline-item:last-child::before { display:none; }
.repair-timeline-dot { position:relative; z-index:1; width:16px; height:16px; margin-top:5px; border:4px solid #dce9f7; border-radius:999px; background:var(--blue); }
.repair-timeline-item.internal .repair-timeline-dot { border-color:#f9e7b9; background:#9b6a00; }
.repair-timeline-content { padding:13px; border:1px solid var(--line); border-radius:12px; background:#fff; }
.repair-timeline-item.internal .repair-timeline-content { border-color:#ecd69d; background:#fffaf0; }
.repair-timeline-meta { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:8px; }
.repair-timeline-meta time { color:var(--muted); font-size:12px; white-space:nowrap; }
.repair-timeline-content p { margin:7px 0 0; }
.repair-status-change { display:inline-block; padding:5px 8px; border-radius:8px; color:#315f93; background:#edf4fb; font-size:13px; }
.repair-process-card,.repair-comment-card { width:min(980px,100%); margin-left:auto; margin-right:auto; }
.repair-end-actions .action-stack { align-items:center; }
.repair-reopen-form { display:grid; grid-template-columns:minmax(220px,1fr) auto; gap:7px; flex:1 1 520px; }
.repair-handler-card .meeting-check-grid { max-height:430px; overflow:auto; padding:3px; }
.repair-category-inline { display:grid; grid-template-columns:140px minmax(180px,1fr) 88px auto; gap:7px; align-items:center; min-width:540px; }
.repair-category-inline input,.repair-category-inline select { padding:8px 9px; }
.notification-list { display:grid; gap:8px; }
.notification-item { display:grid; grid-template-columns:44px minmax(0,1fr) auto; gap:12px; align-items:center; padding:12px 14px; border:1px solid var(--line); border-radius:12px; color:var(--ink); background:#fff; }
.notification-item.unread { border-color:#97b7dc; background:#eef6ff; box-shadow:inset 4px 0 0 var(--blue); }
.notification-icon { display:grid; place-items:center; width:40px; height:40px; border-radius:11px; color:#fff; background:var(--blue); font-weight:900; }
.notification-body { display:grid; gap:2px; }
.notification-body small,.notification-body time { color:var(--muted); }
.notification-body time { font-size:11px; }
.notification-unread-dot { width:10px; height:10px; border-radius:999px; background:#d43e3e; }

@media (max-width:1080px) and (min-width:761px) {
    .today-stats { grid-template-columns:repeat(3,minmax(0,1fr)); }
}
@media (max-width:800px) {
    .repair-summary-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
    .repair-detail-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
    .repair-quick-action { align-items:flex-start; flex-direction:column; }
}
@media (max-width:620px) {
    .repair-filter-card .filter-actions,.repair-ticket-head,.repair-detail-title,.repair-timeline-meta { align-items:flex-start; flex-direction:column; }
    .repair-filter-card .filter-actions .btn,.repair-ticket-foot .btn { width:100%; margin-left:0; }
    .repair-summary-grid,.repair-detail-grid { grid-template-columns:1fr; }
    .repair-ticket-foot { align-items:stretch; flex-direction:column; }
    .repair-reopen-form { grid-template-columns:1fr; flex-basis:100%; }
    .repair-category-inline { grid-template-columns:1fr; min-width:250px; }
    .notification-item { grid-template-columns:40px minmax(0,1fr); }
    .notification-unread-dot { position:absolute; right:18px; }
}

/* v1.8 各處室工作報告母子章節 */
.meeting-department-group { overflow:visible; }
.meeting-department-intro { min-height:110px !important; }
.meeting-department-toolbar { display:flex; justify-content:space-between; align-items:center; gap:12px; margin:22px 0 10px; padding-top:16px; border-top:1px solid var(--border); }
.meeting-department-toolbar > div { display:flex; gap:8px; flex-wrap:wrap; }
.meeting-department-report-list { display:grid; gap:10px; }
.meeting-department-report { border:1px solid var(--border); border-radius:14px; background:#f9fbfd; overflow:hidden; }
.meeting-department-report[open] { background:#fff; box-shadow:0 8px 24px rgba(35,65,105,.07); }
.meeting-department-report summary { display:grid; grid-template-columns:54px minmax(0,1fr) minmax(0,auto) auto; align-items:center; gap:10px; padding:14px 16px; cursor:pointer; list-style:none; }
.meeting-department-report summary::-webkit-details-marker { display:none; }
.meeting-department-report summary::after { content:'＋'; font-weight:900; color:var(--blue); font-size:20px; }
.meeting-department-report[open] summary::after { content:'－'; }
.meeting-department-report summary strong { font-size:17px; }
.meeting-department-report summary small { color:var(--muted); }
.meeting-child-number { display:grid; place-items:center; min-height:34px; border-radius:10px; background:#eaf2fc; color:var(--blue); font-weight:850; }
.meeting-department-report-body { padding:16px; border-top:1px solid var(--border); }
.meeting-department-report-body textarea { min-height:220px; }
.meeting-department-report-body > label:not(:first-child) { margin-top:12px; }
.meeting-department-report-body[data-readonly="1"] textarea,
.meeting-department-report-body[data-readonly="1"] input,
.meeting-editor-section[data-readonly="1"] textarea,
.meeting-editor-section[data-readonly="1"] input { background:#f2f5f8; color:#536174; }
.meeting-department-view-list { display:grid; gap:14px; margin-top:16px; }
.meeting-department-view-item { padding:14px 16px; border:1px solid var(--border); border-radius:12px; background:#fafcfe; }
.meeting-department-view-item h3 { margin:0 0 10px; font-size:17px; color:var(--blue); }
.meeting-section-editor-label { margin-top:18px; font-weight:750; color:var(--text); }
.meeting-department-create-form { grid-template-columns:minmax(0,1fr) 150px auto; }
.meeting-department-admin-list { display:grid; gap:16px; margin-top:16px; }
.meeting-department-admin-card .meeting-selector-fieldset.compact { margin-top:16px; }
.meeting-apply-existing { margin-top:14px; }

@media (max-width:900px) {
  .meeting-department-report summary { grid-template-columns:48px minmax(0,1fr) auto; }
  .meeting-department-report summary small { grid-column:2; }
  .meeting-department-report summary .meeting-autosave-status { grid-column:3; grid-row:1 / span 2; }
  .meeting-department-create-form { grid-template-columns:1fr 130px; }
  .meeting-department-create-form .btn { grid-column:1 / -1; }
}
@media (max-width:600px) {
  .meeting-department-toolbar { align-items:flex-start; flex-direction:column; }
  .meeting-department-report summary { grid-template-columns:44px minmax(0,1fr); padding:12px; }
  .meeting-department-report summary small,
  .meeting-department-report summary .meeting-autosave-status { grid-column:2; grid-row:auto; justify-self:start; }
  .meeting-department-report summary::after { grid-column:1; grid-row:2 / span 2; justify-self:center; }
  .meeting-department-create-form { grid-template-columns:1fr; }
  .meeting-department-create-form .btn { grid-column:auto; }
}

/* v1.9 行事曆分級權限與送審發布 */
.workflow-draft,
.workflow-revision_draft { background:#e8eef7; color:#294a73; }
.workflow-pending,
.workflow-revision_pending { background:#fff1bf; color:#815c00; }
.workflow-returned,
.workflow-revision_returned { background:#ffe0d8; color:#9a351f; }
.workflow-internal_published { background:#dcf3e9; color:#176148; }
.workflow-public_published { background:#e5dcf7; color:#54378e; }
.workflow-withdrawn { background:#e9edf2; color:#526172; }
.workflow-cancelled { background:#f4dadd; color:#8a2935; }

.calendar-work-list { display:grid; gap:10px; }
.calendar-work-item {
    display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:12px; align-items:center;
    padding:14px 16px; border:1px solid #dbe3ed; border-radius:14px; text-decoration:none; color:inherit;
    background:#fff;
}
.calendar-work-item:hover { border-color:#86a7d2; box-shadow:0 7px 20px rgba(31,71,118,.08); }
.calendar-work-item strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.calendar-work-item small { color:#6a7787; white-space:nowrap; }

.permission-user-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:10px; }
.permission-user-grid.compact { grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); }
.permission-user-option {
    display:flex; gap:10px; align-items:center; padding:11px 12px; border:1px solid #dce4ee;
    border-radius:12px; background:#fff; cursor:pointer;
}
.permission-user-option input { width:20px; height:20px; flex:0 0 auto; }
.permission-user-option span { display:flex; flex-direction:column; min-width:0; }
.permission-user-option strong { font-size:15px; }
.permission-user-option small { color:#6a7787; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.calendar-unit-permission-list { display:grid; gap:16px; }
.calendar-unit-permission-card { padding:16px; border:1px solid #dbe3ed; border-radius:16px; background:#f8fafc; }
.calendar-unit-permission-card h3 { margin:0 0 12px; color:#234f84; }
.calendar-permission-section + .calendar-permission-section { margin-top:18px; }
.sticky-form-actions { position:sticky; bottom:12px; display:flex; justify-content:flex-end; margin-top:18px; z-index:5; }
.sticky-form-actions .btn { box-shadow:0 8px 28px rgba(26,57,94,.22); }

.review-summary-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; margin-bottom:18px; }
.review-summary-card { display:flex; align-items:baseline; gap:12px; }
.review-summary-card span { color:#5d6c7e; }
.review-summary-card strong { font-size:38px; color:#234f84; }
.review-summary-card small { color:#6a7787; }
.calendar-review-list { display:grid; gap:18px; }
.calendar-review-card { display:grid; grid-template-columns:minmax(0,1.6fr) minmax(300px,.8fr); gap:22px; padding:18px; border:1px solid #dbe3ed; border-radius:16px; background:#fff; }
.calendar-review-main h3 { margin:10px 0 6px; }
.review-description { margin-top:12px; padding:12px 14px; background:#f5f8fc; border-radius:12px; line-height:1.65; }
.calendar-review-actions { display:flex; flex-direction:column; gap:8px; padding-left:20px; border-left:1px solid #dbe3ed; }
.calendar-review-actions textarea { min-height:76px; }
.calendar-review-actions .button-row { display:flex; flex-wrap:wrap; gap:8px; }
.review-change-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; margin-top:12px; }
.review-change-grid > div { padding:12px; border:1px solid #dbe3ed; border-radius:12px; }
.review-change-grid strong { color:#244f87; }
.review-change-grid p { margin:6px 0 0; }
.calendar-revision-preview { margin-top:20px; padding:14px 16px; border:1px solid #dbe3ed; border-radius:14px; background:#f8fafc; }
.calendar-revision-preview summary { cursor:pointer; font-weight:700; color:#244f87; }
.calendar-revision-preview .detail-grid { margin-top:16px; }

@media (max-width: 900px) {
    .calendar-review-card { grid-template-columns:1fr; }
    .calendar-review-actions { padding-left:0; padding-top:16px; border-left:0; border-top:1px solid #dbe3ed; }
    .calendar-work-item { grid-template-columns:1fr; gap:7px; }
    .calendar-work-item strong { white-space:normal; }
    .calendar-work-item small { white-space:normal; }
}
@media (max-width: 620px) {
    .review-summary-grid { grid-template-columns:1fr; }
    .review-change-grid { grid-template-columns:1fr; }
    .calendar-review-actions .button-row .btn { width:100%; }
}

/* v1.10 行事曆公告連結與整學期PDF */
.public-announcement-link,.calendar-widget-announcement{display:inline-flex;align-items:center;margin-top:6px;padding:5px 10px;border-radius:999px;background:#edf4fb;color:#175a97;font-weight:700;text-decoration:none;font-size:13px}.public-announcement-link:hover,.calendar-widget-announcement:hover{background:#dceaf7}.calendar-announcement-link{margin:18px 0}.calendar-pdf-generate-card .form-grid{margin-top:14px}.calendar-pdf-generate-card select{width:100%}.workflow-public_published{background:#dff4e7;color:#17663b}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}

/* v1.11 平板借用管理 */
.tablet-stat { background:#2b7180; }
.tablet-week-table .booking-record { border-left-color:#367f93; background:#edf8fb; }
.tablet-reservation-record .badge { margin-bottom:6px; }
.tablet-detail-grid { grid-template-columns:repeat(3,minmax(0,1fr)); }
.detail-text { margin-top:18px; padding:14px 16px; border:1px solid var(--line); border-radius:12px; background:#f8fafc; }
.detail-text span { display:block; color:var(--muted); font-size:12px; font-weight:750; }
.detail-text p { margin:5px 0 0; }
.dashboard-mini-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:14px; margin-bottom:20px; }
.mini-stat { text-align:center; padding:18px; }
.mini-stat span { display:block; color:var(--muted); font-weight:750; }
.mini-stat strong { display:block; margin-top:4px; font-size:36px; color:var(--blue-dark); }
.mini-stat.danger strong { color:#a33f3f; }
.tablet-device-picker { margin-top:20px; }
.meeting-check-item.disabled { opacity:.55; background:#f2f3f5; }
.kiosk-url-text { overflow-wrap:anywhere; font-size:14px; }
.tablet-issue-row { display:grid; grid-template-columns:1fr 1fr 1.5fr; gap:8px; margin-bottom:8px; }

.tablet-kiosk-page { min-height:100vh; margin:0; background:linear-gradient(145deg,#edf4fb,#f7fbff); color:var(--ink); }
.tablet-kiosk-shell { width:min(100% - 28px,980px); margin:0 auto; padding:26px 0 40px; }
.tablet-kiosk-header { display:flex; align-items:center; gap:14px; margin-bottom:24px; }
.tablet-kiosk-header .brand-mark { width:58px; height:58px; font-size:28px; }
.tablet-kiosk-header p,.tablet-kiosk-header h1 { margin:0; }
.tablet-kiosk-header p { color:var(--muted); font-weight:700; }
.tablet-kiosk-home { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:22px; margin-top:44px; }
.tablet-kiosk-choice { display:flex; min-height:260px; flex-direction:column; justify-content:center; align-items:center; gap:14px; padding:30px; border-radius:26px; color:#fff; box-shadow:0 18px 45px rgba(42,73,111,.17); text-align:center; text-decoration:none; transition:transform .15s ease; }
.tablet-kiosk-choice:hover { transform:translateY(-3px); }
.tablet-kiosk-choice.pickup { background:linear-gradient(145deg,#285f98,#3e83bf); }
.tablet-kiosk-choice.return { background:linear-gradient(145deg,#26715f,#3e9a7d); }
.tablet-kiosk-choice strong { font-size:34px; }
.tablet-kiosk-choice span { max-width:300px; font-size:17px; opacity:.92; }
.tablet-kiosk-toolbar { display:grid; grid-template-columns:auto 1fr auto; align-items:center; margin-bottom:18px; }
.tablet-kiosk-toolbar h2 { margin:0; text-align:center; }
.tablet-kiosk-class-form { display:grid; grid-template-columns:1fr 2fr auto; align-items:end; gap:12px; padding:18px; border:1px solid var(--line); border-radius:16px; background:#fff; box-shadow:var(--shadow); }
.tablet-kiosk-class-form label { grid-column:1; }
.tablet-kiosk-class-form select { grid-column:2; }
.tablet-kiosk-list { display:grid; gap:16px; margin-top:20px; }
.tablet-kiosk-card { display:grid; grid-template-columns:minmax(0,1fr) minmax(280px,360px); gap:22px; align-items:start; padding:22px; border:1px solid var(--line); border-radius:18px; background:#fff; box-shadow:var(--shadow); }
.tablet-kiosk-card h3 { margin:8px 0 5px; font-size:24px; }
.tablet-kiosk-card p { margin:0; color:var(--muted); }
.tablet-kiosk-action-form { display:grid; gap:10px; }
.tablet-return-actions { display:grid; gap:10px; }
.tablet-issue-form { grid-column:1/-1; padding-top:15px; border-top:1px solid var(--line); }
.tablet-kiosk-empty { padding:40px 20px; border:2px dashed #b8c7d9; border-radius:18px; background:#fff; text-align:center; }
.tablet-kiosk-empty h3 { margin-bottom:8px; }
.tablet-kiosk-empty p { margin:0; color:var(--muted); }
.tablet-kiosk-footer { margin-top:24px; color:var(--muted); text-align:center; font-size:13px; }
.tablet-kiosk-success { font-size:18px; text-align:center; }

@media (max-width:900px){
  .dashboard-mini-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .tablet-detail-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .tablet-kiosk-card { grid-template-columns:1fr; }
}
@media (max-width:620px){
  .tablet-detail-grid,.dashboard-mini-grid { grid-template-columns:1fr; }
  .tablet-kiosk-home { grid-template-columns:1fr; margin-top:22px; }
  .tablet-kiosk-choice { min-height:190px; }
  .tablet-kiosk-choice strong { font-size:28px; }
  .tablet-kiosk-class-form { grid-template-columns:1fr; }
  .tablet-kiosk-class-form label,.tablet-kiosk-class-form select { grid-column:1; }
  .tablet-kiosk-toolbar { grid-template-columns:1fr; gap:10px; }
  .tablet-kiosk-toolbar h2 { grid-row:1; }
  .tablet-issue-row { grid-template-columns:1fr; padding:12px; border:1px solid var(--line); border-radius:12px; }
}

/* v1.12 登入安全強化 */
.mfa-setup-card { padding:24px; }
.mfa-setup-grid { display:grid; grid-template-columns:minmax(260px,.8fr) minmax(320px,1.2fr); gap:28px; align-items:start; }
.mfa-setup-grid h2 { margin-top:0; color:var(--blue-dark); font-size:20px; }
.mfa-qr { display:flex; align-items:center; justify-content:center; min-height:286px; margin-top:16px; padding:12px; border:1px solid var(--line); border-radius:18px; background:#fff; }
.mfa-qr canvas { display:block; max-width:100%; height:auto; image-rendering:pixelated; }
.copy-row { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:8px; }
.copy-row input { font-family:ui-monospace,SFMono-Regular,Consolas,monospace; letter-spacing:.08em; }
.security-note { margin:16px 0 24px; padding:14px 16px; border-left:4px solid #4f86bd; border-radius:10px; background:#eef5fb; }
.security-note p { margin:4px 0 0; color:var(--muted); }
.otp-input { max-width:240px; font-size:28px; font-weight:800; letter-spacing:.32em; text-align:center; font-variant-numeric:tabular-nums; }
.mfa-mode-form { margin-top:6px; }
.backup-code-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; margin:18px 0; }
.backup-code-grid code { display:block; padding:12px 14px; border:1px dashed #9fb4ca; border-radius:10px; background:#f7fafc; font-size:17px; font-weight:800; letter-spacing:.06em; text-align:center; }
.inline-confirm-form { display:grid; grid-template-columns:minmax(150px,220px) auto; gap:7px; align-items:center; }
.inline-confirm-form input { min-width:0; padding:8px 10px; }
.security-status-row { display:flex; justify-content:space-between; gap:24px; align-items:center; }
.security-status-row h2 { margin:8px 0 3px; }
.security-status-row .stat-number { min-width:150px; font-size:42px; font-weight:850; color:var(--blue-dark); text-align:center; }
.security-status-row .stat-number small { display:block; font-size:12px; font-weight:700; color:var(--muted); }
@media (max-width:760px) {
  .mfa-setup-grid { grid-template-columns:1fr; }
  .backup-code-grid { grid-template-columns:1fr; }
  .inline-confirm-form { grid-template-columns:1fr; }
  .security-status-row { align-items:flex-start; flex-direction:column; }
  .security-status-row .stat-number { text-align:left; }
}

/* v1.13 活動照片送件中心 */
.badge-info { color:#205b91; background:#e5f1fc; }
.badge-primary { color:#fff; background:var(--blue); }
.btn-ghost { color:var(--muted); background:#eef1f5; }
.text-danger { color:var(--red); }
.photo-stat { background:#7a5b98; }
.photo-guidance-card { display:flex; align-items:flex-start; gap:18px; background:linear-gradient(135deg,#fff,#f5f0fb); }
.photo-guidance-card h2,.photo-guidance-card p { margin-bottom:6px; }
.photo-guidance-icon { flex:0 0 58px; height:58px; display:grid; place-items:center; border-radius:16px; color:#fff; background:#73508f; font-size:23px; font-weight:900; }
.stats-row { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:12px; margin-bottom:22px; }
.stat-card { display:flex; flex-direction:column; gap:3px; padding:16px 18px; border:1px solid var(--line); border-radius:14px; background:#fff; box-shadow:var(--shadow); }
.stat-card span { color:var(--muted); font-weight:750; }
.stat-card strong { color:var(--blue-dark); font-size:30px; line-height:1.1; }
.segmented-links { display:inline-flex; gap:4px; padding:4px; border-radius:12px; background:#edf2f7; }
.segmented-links a { padding:8px 13px; border-radius:9px; color:var(--muted); font-weight:800; }
.segmented-links a.active { color:#fff; background:var(--blue); }
.filter-bar { display:grid; grid-template-columns:190px minmax(220px,1fr) auto; gap:12px; align-items:end; }
.filter-actions { display:flex; gap:8px; }
.photo-submission-list { display:grid; gap:12px; }
.photo-submission-item { display:grid; grid-template-columns:76px minmax(0,1fr) 180px; gap:16px; align-items:center; padding:16px; border:1px solid var(--line); border-left:5px solid #73508f; border-radius:14px; background:#fff; }
.photo-submission-date { display:grid; place-items:center; min-height:64px; border-radius:13px; color:#5c3d73; background:#f2eafb; }
.photo-submission-date strong,.photo-submission-date span { display:block; }
.photo-submission-date strong { font-size:22px; line-height:1; }
.photo-submission-date span { margin-top:4px; font-size:11px; }
.photo-submission-meta { display:flex; flex-wrap:wrap; gap:7px 12px; align-items:center; color:var(--muted); font-size:12px; }
.photo-submission-main h3 { margin:7px 0 4px; font-size:20px; }
.photo-submission-main p { margin:4px 0 0; color:var(--muted); }
.photo-submission-side { display:grid; justify-items:end; gap:6px; color:var(--muted); font-size:12px; text-align:right; }
.photo-step-list { display:grid; gap:9px; margin:14px 0 0; padding-left:23px; }
.photo-submission-form > div:not(:first-child) { margin-top:18px; }
.input-action-row { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:8px; }
.photo-confirm-box { display:grid; gap:10px; padding:15px; border:1px solid #cfd8e5; border-radius:13px; background:#f8fafc; }
.photo-confirm-box label,.photo-close-check { display:flex; align-items:flex-start; gap:10px; margin:0; font-weight:700; }
.photo-confirm-box input,.photo-close-check input { width:20px; height:20px; flex:0 0 auto; margin-top:2px; accent-color:var(--blue); }
.photo-link-panel { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-top:16px; padding:14px 16px; border:1px solid #b9d2eb; border-radius:13px; background:#eef6ff; }
.photo-link-panel.success { border-color:#b9dfcf; background:#eaf8f1; }
.photo-link-panel strong,.photo-link-panel small { display:block; }
.photo-link-panel small { margin-top:3px; color:var(--muted); }
.photo-action-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; margin-top:16px; }
.photo-action-box { display:flex; flex-direction:column; gap:10px; padding:16px; border:1px solid var(--line); border-radius:13px; background:#f9fbfd; }
.photo-action-box h3,.photo-action-box p { margin:0; }
.photo-action-box p { color:var(--muted); }
.photo-action-box textarea { min-height:86px; }
.photo-action-box .btn { margin-top:auto; }
.photo-action-box.danger-box { border-color:#efc8c8; background:#fff8f8; }
.photo-complete-card,.photo-close-card { width:min(980px,100%); margin-left:auto; margin-right:auto; }
.photo-close-card { display:flex; align-items:center; justify-content:space-between; gap:22px; background:#f1faf6; }
.photo-close-card form { min-width:min(420px,100%); }
.photo-close-card .btn { width:100%; margin-top:12px; }
.photo-detail-grid { margin-top:12px; }
.photo-timeline .repair-timeline-dot { background:#73508f; border-color:#eee3f6; }

@media (max-width:900px) {
    .stats-row { grid-template-columns:repeat(3,minmax(0,1fr)); }
    .photo-submission-item { grid-template-columns:68px minmax(0,1fr); }
    .photo-submission-side { grid-column:2; justify-items:start; text-align:left; }
    .photo-action-grid { grid-template-columns:1fr; }
}
@media (max-width:620px) {
    .photo-guidance-card,.photo-link-panel,.photo-close-card { align-items:flex-start; flex-direction:column; }
    .stats-row { grid-template-columns:repeat(2,minmax(0,1fr)); }
    .filter-bar { grid-template-columns:1fr; }
    .filter-actions .btn { flex:1; }
    .photo-submission-item { grid-template-columns:1fr; }
    .photo-submission-date { width:72px; min-height:58px; }
    .photo-submission-side { grid-column:1; justify-items:start; }
    .input-action-row { grid-template-columns:1fr; }
    .photo-link-panel .btn { width:100%; }
    .segmented-links { margin-top:12px; }
}

/* v1.15 調查表中心 */
.survey-builder-form,
.survey-response-form { display: grid; gap: 18px; }
.survey-audience-tabs { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 16px; }
.choice-card { display: block; cursor: pointer; }
.choice-card input { position: absolute; opacity: 0; pointer-events: none; }
.choice-card span { display: block; padding: 14px; border: 1px solid #ccd8e7; border-radius: 12px; text-align: center; font-weight: 700; background: #fff; }
.choice-card input:checked + span { color: #153f73; border-color: #2b5daa; background: #edf4fc; box-shadow: inset 0 0 0 1px #2b5daa; }
.survey-audience-panel { padding: 16px; margin: 12px 0 18px; border: 1px solid #d8e1ed; border-radius: 12px; background: #f8fbff; }
.survey-audience-panel[hidden] { display: none; }
.check-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px 14px; }
.choice-line { display: flex; gap: 9px; align-items: flex-start; line-height: 1.45; }
.choice-line input { margin-top: 3px; flex: 0 0 auto; }
.choice-line span { display: flex; flex-direction: column; }
.choice-line small { color: #69798c; }
.survey-question-card { padding: 16px; margin-bottom: 14px; border: 1px solid #d6e0ec; border-radius: 14px; background: #fbfdff; }
.survey-question-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 14px; }
.survey-question-card-head > strong { color: #214e83; font-size: 1.05rem; }
.survey-question-specific { padding-top: 14px; margin-top: 14px; border-top: 1px dashed #cfdae7; }
.survey-question-options textarea { width: 100%; }
.survey-required { min-height: 42px; align-items: center; }
.compact-grid { gap: 10px 14px; }
.compact-buttons { gap: 6px; }
.sticky-actions { position: sticky; bottom: 0; z-index: 10; padding: 12px; border: 1px solid #d6e0ec; border-radius: 14px; background: rgba(255,255,255,.96); box-shadow: 0 -8px 24px rgba(33,78,131,.08); }
.survey-list { display: grid; gap: 12px; }
.survey-list-item { display: grid; grid-template-columns: minmax(0, 1fr) 190px auto; gap: 18px; align-items: center; padding: 16px 0; border-bottom: 1px solid #e0e7f0; }
.survey-list-item:last-child { border-bottom: 0; }
.survey-list-main h3 { margin: 8px 0 6px; }
.survey-list-main h3 a { color: #123d70; text-decoration: none; }
.survey-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; color: #637489; font-size: .9rem; }
.survey-time-line { color: #637489; font-size: .9rem; }
.survey-list-progress { display: grid; gap: 5px; text-align: right; }
.survey-list-progress strong { color: #183f70; font-size: 1.05rem; }
.survey-list-progress span { color: #718196; font-size: .85rem; }
.progress-track,
.survey-bar-track { overflow: hidden; height: 8px; border-radius: 999px; background: #e4ebf3; }
.progress-track > span,
.survey-bar-track > span { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg,#2e69aa,#5ca2d6); }
.progress-track.large { height: 14px; margin: 12px 0 18px; }
.survey-list-actions { display: flex; flex-direction: column; gap: 7px; }
.template-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
.template-card { padding: 16px; border: 1px solid #d8e1ed; border-radius: 12px; background: #fbfdff; }
.template-card h3 { margin-top: 0; color: #173f70; }
.survey-summary-head { display: flex; justify-content: space-between; gap: 16px; align-items: flex-start; margin-bottom: 16px; }
.survey-summary-head > div:first-child { display: flex; gap: 8px; flex-wrap: wrap; }
.survey-profile-grid { margin-top: 18px; }
.survey-rate { color: #245f9f; font-size: 1.8rem; }
.compact-stats { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.survey-question-preview-list { display: grid; gap: 12px; padding-left: 24px; }
.survey-question-preview-list > li { padding: 12px 14px; border: 1px solid #e0e7ef; border-radius: 10px; }
.survey-preview-question { display: flex; justify-content: space-between; gap: 12px; }
.survey-preview-question span { color: #6e7e91; font-size: .88rem; white-space: nowrap; }
.survey-option-preview { display: flex; flex-wrap: wrap; gap: 8px 16px; margin-top: 10px; color: #52677e; }
.survey-admin-actions { align-items: center; flex-wrap: wrap; }
.survey-admin-actions form { margin: 0; }
.survey-save-template { margin-top: 18px; padding-top: 14px; border-top: 1px dashed #d2dce8; }
.pending-user-grid { margin-top: 14px; }
.pending-user { display: flex; flex-direction: column; padding: 10px; border: 1px solid #dce5ef; border-radius: 9px; background: #fff; }
.pending-user span { color: #6b7b8f; font-size: .86rem; }
.survey-fill-intro { border-top: 4px solid #2b5daa; }
.survey-fill-question { scroll-margin-top: 20px; }
.survey-fill-question-head { display: flex; gap: 12px; align-items: flex-start; margin-bottom: 12px; }
.survey-fill-question-head > span { flex: 0 0 auto; padding: 3px 8px; border-radius: 999px; background: #eaf2fb; color: #285c96; font-size: .85rem; }
.survey-fill-question-head > strong { font-size: 1.08rem; color: #193f6d; }
.survey-choice-stack { display: grid; gap: 10px; }
.survey-choice-stack .choice-line { padding: 10px 12px; border: 1px solid #dbe4ee; border-radius: 10px; background: #fff; }
.inline-other-input { width: min(420px, 100%); margin-left: 6px; }
.survey-scale { display: grid; grid-template-columns: minmax(80px, 1fr) auto minmax(80px, 1fr); gap: 16px; align-items: center; }
.survey-scale > span:last-child { text-align: right; }
.survey-scale-options { display: flex; gap: 8px; }
.survey-scale-options label { cursor: pointer; }
.survey-scale-options input { position: absolute; opacity: 0; }
.survey-scale-options span { display: grid; place-items: center; width: 40px; height: 40px; border: 1px solid #bac9da; border-radius: 50%; background: #fff; font-weight: 700; }
.survey-scale-options input:checked + span { color: #fff; border-color: #245d9b; background: #245d9b; }
.survey-matrix-table th,
.survey-matrix-table td,
.survey-matrix-result th,
.survey-matrix-result td { text-align: center; vertical-align: middle; }
.survey-matrix-table tbody th,
.survey-matrix-result tbody th { text-align: left; min-width: 160px; }
.survey-result-card { border-left: 4px solid #4d83bb; }
.survey-bar-list { display: grid; gap: 14px; }
.survey-bar-label { display: flex; justify-content: space-between; gap: 12px; margin-bottom: 5px; }
.survey-bar-label strong { color: #345f8e; }
.survey-numeric-summary { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 12px; }
.survey-numeric-summary > div { padding: 16px; border-radius: 12px; background: #f1f6fc; text-align: center; }
.survey-numeric-summary span { display: block; color: #64768b; }
.survey-numeric-summary strong { display: block; margin-top: 5px; color: #1c4e84; font-size: 1.6rem; }
.survey-text-answer-list { display: grid; gap: 10px; }
.survey-text-answer-list article { padding: 12px 14px; border: 1px solid #dbe4ee; border-radius: 10px; background: #fbfdff; }
.response-detail-list { display: grid; gap: 8px; margin: 10px 0 0; padding-left: 22px; min-width: 320px; }
.response-detail-list li div { margin-top: 3px; white-space: pre-wrap; }

@media (max-width: 900px) {
    .survey-audience-tabs,
    .template-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .check-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .survey-list-item { grid-template-columns: 1fr; }
    .survey-list-progress { text-align: left; }
    .survey-list-actions { flex-direction: row; flex-wrap: wrap; }
}
@media (max-width: 600px) {
    .survey-audience-tabs,
    .template-grid,
    .check-grid,
    .compact-stats,
    .survey-numeric-summary { grid-template-columns: 1fr; }
    .survey-summary-head,
    .survey-preview-question { flex-direction: column; }
    .survey-scale { grid-template-columns: 1fr; }
    .survey-scale > span:last-child { text-align: left; }
    .survey-scale-options { flex-wrap: wrap; }
    .survey-question-card-head { align-items: flex-start; flex-direction: column; }
}


/* v1.15.1 調查表建立頁版面修正 */
.form-grid > .span-two { grid-column: 1 / -1; }
.survey-builder-form .form-grid > * { min-width: 0; }
.survey-builder-form fieldset { min-width: 0; margin: 0; }
.survey-builder-form .choice-line {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    width: 100%;
    min-width: 0;
    margin: 0 0 8px;
    line-height: 1.45;
    writing-mode: horizontal-tb;
    white-space: normal;
}
.survey-builder-form .choice-line input[type="checkbox"],
.survey-builder-form .choice-line input[type="radio"] {
    width: 18px;
    min-width: 18px;
    height: 18px;
    margin: 3px 0 0;
    padding: 0;
    flex: 0 0 18px;
    accent-color: var(--blue);
}
.survey-builder-form .choice-line > span {
    display: block;
    min-width: 0;
    overflow-wrap: anywhere;
}
.survey-builder-form .choice-line small {
    display: block;
    margin-top: 2px;
    color: #69798c;
    font-weight: 500;
}
.survey-settings-grid { align-items: start; }
.survey-choice-fieldset,
.survey-setting-toggle {
    padding: 12px 14px;
    border: 1px solid #d8e1ed;
    border-radius: 12px;
    background: #f8fbff;
}
.survey-choice-fieldset legend { padding: 0 4px; }
.survey-choice-stack.compact { display: grid; gap: 4px; }
.survey-choice-stack.compact .choice-line { margin: 0; padding: 6px 0; }
.survey-setting-toggle { min-height: 48px; align-items: center !important; margin: 0 !important; cursor: pointer; }
.survey-setting-toggle input[type="checkbox"] { margin-top: 0; }
.survey-builder-form .check-grid { align-items: stretch; }
.survey-builder-form .check-grid .choice-line {
    min-height: 58px;
    margin: 0;
    padding: 10px 12px;
    border: 1px solid #dce5ef;
    border-radius: 10px;
    background: #fff;
}
.survey-builder-form .check-grid .choice-line:hover { border-color: #9fb8d3; background: #f8fbff; }
.survey-question-card .form-grid.two { align-items: start; }
.survey-required-wrap { align-self: end; }
.survey-question-card .survey-required {
    min-height: 47px;
    margin: 0;
    padding: 11px 13px;
    align-items: center;
    border: 1px solid #bdc9d8;
    border-radius: 11px;
    background: #fff;
    cursor: pointer;
}
.survey-question-card .survey-required input[type="checkbox"] { margin-top: 0; }
.survey-question-card label,
.survey-question-card .choice-line { overflow-wrap: normal; word-break: normal; }
.survey-builder-form .sticky-actions {
    position: static;
    z-index: auto;
    margin-top: 0;
    background: #fff;
    box-shadow: none;
}
@media (max-width: 600px) {
    .form-grid > .span-two { grid-column: auto; }
    .survey-question-card .survey-required { margin-top: 0; }
    .survey-builder-form .check-grid .choice-line { min-height: 52px; }
}

/* v1.16 社團選填中心 */
.club-stat {
    color: #173f72;
    background: linear-gradient(145deg, #edf4ff 0%, #d8e8fb 100%);
    border: 1px solid #b8cfea;
    box-shadow: 0 8px 22px rgba(35, 79, 132, .10);
    opacity: 1;
}
.club-stat span {
    color: #244f87;
    font-weight: 800;
}
.club-stat strong {
    color: #123e73;
    text-shadow: none;
}
.club-stat small {
    color: #526d8d;
    font-weight: 700;
}
.club-campaign-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 18px; }
.club-campaign-card { border: 1px solid #d6e1ef; border-radius: 18px; padding: 20px; background: #fff; display: flex; flex-direction: column; gap: 13px; box-shadow: 0 8px 24px rgba(36,79,135,.05); }
.club-campaign-card h2 { margin: 0; color: #173f72; }
.club-campaign-card p { margin: 0; color: #5b6c82; line-height: 1.65; }
.club-card-top, .club-card-actions, .club-public-toolbar, .club-student-identity, .club-campaign-summary { display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.club-card-top { font-size: 14px; color: #68798d; }
.club-card-actions { justify-content: flex-start; flex-wrap: wrap; margin-top: auto; }
.club-card-time { font-size: 14px; }
.club-progress-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.club-progress-grid.large { grid-template-columns: repeat(auto-fit, minmax(145px, 1fr)); margin: 18px 0; }
.club-progress-grid > div { background: #f5f8fc; border-radius: 12px; padding: 12px; text-align: center; }
.club-progress-grid.large > .card { padding: 18px; }
.club-progress-grid strong { display: block; font-size: 24px; color: #174a82; }
.club-progress-grid span { display: block; margin-top: 4px; color: #68798d; font-size: 13px; }
.progress-track i { display: block; height: 100%; background: #2f6fb8; border-radius: inherit; }
.club-management-actions { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 15px; }
.feature-card.compact { padding: 18px; min-height: 0; }
.feature-card.compact h3 { margin: 4px 0 8px; color: #163e70; }
.club-campaign-summary { align-items: flex-start; }
.club-campaign-summary > div:first-child { flex: 1; min-width: 0; }
.club-campaign-public-link { min-width: 280px; border: 1px solid #d4e0ef; border-radius: 14px; padding: 16px; background: #f7faff; display: grid; gap: 6px; }
.club-campaign-public-link a { font-weight: 700; }
.club-capacity-grid, .club-class-progress-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 14px; }
.club-capacity-grid > div, .club-capacity-grid > a, .club-class-progress-grid > a { display: grid; gap: 7px; border: 1px solid #d9e3ef; border-radius: 14px; padding: 15px; background: #fff; color: inherit; text-decoration: none; }
.club-capacity-grid strong, .club-class-progress-grid strong { color: #174a82; }
.club-capacity-grid small { color: #6b7c91; }
.club-adviser-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 16px; }
.club-adjust-list { display: grid; gap: 16px; }
.club-adjust-list > article { border: 1px solid #d8e3ef; border-radius: 15px; padding: 16px; display: grid; grid-template-columns: minmax(260px, 1fr) minmax(420px, 2fr); gap: 14px; align-items: start; }
.club-adjust-student p { display: flex; flex-wrap: wrap; gap: 7px 12px; margin: 8px 0; }
.club-adjust-student p span { font-size: 14px; color: #5c6f86; }
.club-adjust-form { display: grid; grid-template-columns: 1.2fr .8fr 1.4fr auto; gap: 8px; align-items: end; }
.club-unassign-form { grid-column: 2; display: flex; gap: 8px; justify-content: flex-end; }
.club-unassign-form input { max-width: 280px; }
.club-export-buttons { margin-top: 14px; }
.club-public-body { margin: 0; min-height: 100vh; background: linear-gradient(145deg, #eaf2fb 0%, #f7f9fc 55%, #edf4fb 100%); }
.club-public-shell { width: min(680px, calc(100% - 28px)); margin: 0 auto; padding: 42px 0; }
.club-public-shell.wide { width: min(980px, calc(100% - 28px)); }
.club-public-card { background: rgba(255,255,255,.97); border: 1px solid #d9e4f0; border-radius: 24px; padding: 30px; box-shadow: 0 18px 60px rgba(23,63,114,.12); }
.club-public-card h1 { color: #153f73; margin: 18px 0 10px; }
.club-public-brand { display: flex; align-items: center; gap: 12px; }
.club-public-brand > span { width: 48px; height: 48px; border-radius: 14px; background: #244f87; color: white; display: grid; place-items: center; font-size: 24px; font-weight: 800; }
.club-public-brand div { display: grid; }
.club-public-brand strong { color: #163f71; font-size: 20px; }
.club-public-brand small { color: #6c7d90; }
.club-login-grid { margin-top: 20px; }
.club-public-help { text-align: center; color: #718196; margin: 18px 0 0; font-size: 14px; }
.club-student-identity { background: #f0f6fd; border-radius: 14px; padding: 14px 16px; margin: 16px 0; }
.club-student-identity span { color: #5b6d82; }
.club-result-panel { border: 2px solid #9fc2e7; background: #f4f9ff; border-radius: 18px; padding: 24px; text-align: center; margin: 20px 0; }
.club-result-panel h2 { color: #174a82; font-size: 30px; margin: 8px 0; }
.club-preference-list { display: grid; gap: 14px; margin: 20px 0; }
.club-preference-row { display: grid; grid-template-columns: 110px 1fr; align-items: center; gap: 12px; }
.club-preference-row label { margin: 0; font-size: 18px; font-weight: 800; color: #174a82; }
.club-current-preferences { margin-top: 24px; border-top: 1px solid #dce5ef; padding-top: 20px; }
.club-current-preferences ol { line-height: 1.9; }
.club-code-print { width: min(1100px, calc(100% - 30px)); margin: 20px auto; }
.club-code-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; }
.club-code-grid article { border: 1px dashed #6e8298; border-radius: 10px; padding: 16px; display: grid; gap: 7px; break-inside: avoid; }
.club-code-grid code { font-size: 24px; letter-spacing: 3px; font-weight: 800; color: #174a82; }
.club-code-grid small, .club-code-grid span { color: #68798d; }
.print-toolbar { display: flex; justify-content: flex-end; gap: 10px; margin-bottom: 15px; }
.inline-checks { display: flex; flex-wrap: wrap; gap: 14px 22px; align-items: center; }
.inline-checks label { display: inline-flex; align-items: center; gap: 7px; margin: 0; }
.inline-checks input { width: auto !important; }
.compact-form { align-items: end; }
.button-group.wrap { flex-wrap: wrap; }
.club-card-actions .btn, .club-export-buttons .btn { text-decoration: none; }

@media (max-width: 900px) {
    .club-adjust-list > article { grid-template-columns: 1fr; }
    .club-adjust-form { grid-template-columns: 1fr 1fr; }
    .club-unassign-form { grid-column: 1; justify-content: flex-start; }
    .club-campaign-summary { flex-direction: column; }
    .club-campaign-public-link { width: 100%; min-width: 0; }
}
@media (max-width: 620px) {
    .club-public-card { padding: 20px; border-radius: 18px; }
    .club-card-top, .club-public-toolbar, .club-student-identity { align-items: flex-start; flex-direction: column; }
    .club-progress-grid { grid-template-columns: repeat(2, 1fr); }
    .club-adjust-form { grid-template-columns: 1fr; }
    .club-preference-row { grid-template-columns: 1fr; }
    .club-code-grid { grid-template-columns: 1fr; }
}
@media print {
    .print-toolbar { display: none !important; }
    .club-code-print { width: 100%; margin: 0; }
    .club-code-grid { grid-template-columns: repeat(2, 1fr); }
    .club-code-grid article { page-break-inside: avoid; }
}
.club-selection-summary { display: flex; justify-content: space-between; align-items: center; gap: 14px; padding: 16px; margin-top: 14px; border-radius: 14px; background: #f3f7fc; }
.club-selection-summary strong { color: #174a82; font-size: 20px; }
.club-selection-summary span { color: #607287; }
.club-selection-table input[type="checkbox"] {
    width: 20px;
    min-width: 20px;
    height: 20px;
    margin: 0;
    padding: 0;
    accent-color: var(--blue);
}
.club-selection-table th:first-child,
.club-selection-table td:first-child { width: 72px; text-align: center; }
@media (max-width: 620px) { .club-selection-summary { align-items: flex-start; flex-direction: column; } }

/* v1.17 校內公告中心 */
.announcement-nav-badge { background: #ffcf66; color: #623b00; }
.announcement-unread-stat,
.announcement-confirm-stat { text-decoration: none; opacity: 1; }
.announcement-unread-stat { background: linear-gradient(145deg, #244f87, #173d70); }
.announcement-confirm-stat { color: #713b00; background: linear-gradient(145deg, #fff1cc, #ffd98a); border: 1px solid #e3b74f; }
.announcement-confirm-stat span,
.announcement-confirm-stat strong,
.announcement-confirm-stat small { color: inherit; }
.dashboard-urgent-announcements { display: grid; gap: 12px; margin-bottom: 20px; }
.urgent-announcement-banner { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 20px 22px; color: #7b2020; background: linear-gradient(135deg, #fff2f0, #ffe0dc); border: 2px solid #d8675d; border-radius: 17px; box-shadow: 0 12px 30px rgba(151, 45, 37, .12); }
.urgent-announcement-banner h2 { margin: 5px 0; color: #8a2525; font-size: 24px; }
.urgent-announcement-banner p { margin: 0; color: #84504c; }
.urgent-announcement-label { display: inline-block; padding: 4px 10px; color: #fff; background: #a83434; border-radius: 999px; font-weight: 900; font-size: 13px; }
.dashboard-announcement-card { border-top: 5px solid #244f87; }
.dashboard-announcement-list { display: grid; gap: 10px; }
.dashboard-announcement-item { display: grid; grid-template-columns: minmax(150px, auto) 1fr auto; align-items: center; gap: 14px; padding: 13px 15px; color: var(--ink); border: 1px solid #d8e2ee; border-left: 5px solid #9ab1ca; border-radius: 12px; background: #fff; }
.dashboard-announcement-item.is-unread { background: #fffaf0; box-shadow: 0 5px 16px rgba(95, 69, 12, .07); }
.dashboard-announcement-item.priority-urgent { border-left-color: #b63838; }
.dashboard-announcement-item.priority-important { border-left-color: #d77a22; }
.dashboard-announcement-item.priority-deadline { border-left-color: #9b6811; }
.dashboard-announcement-item strong { color: #173f72; }
.dashboard-announcement-item small { color: #68798d; white-space: nowrap; }
.announcement-list { display: grid; gap: 13px; }
.announcement-list-card { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 18px; border: 1px solid #d8e2ee; border-left: 6px solid #9aacc1; border-radius: 15px; background: #fff; }
.announcement-list-card.is-unread { background: #fffaf0; box-shadow: 0 8px 20px rgba(91, 65, 9, .07); }
.announcement-list-card.priority-urgent { border-left-color: #b63838; }
.announcement-list-card.priority-important { border-left-color: #d47720; }
.announcement-list-card.priority-deadline { border-left-color: #a46e0b; }
.announcement-list-main { flex: 1; min-width: 0; }
.announcement-list-main h2 { margin: 9px 0 5px; }
.announcement-list-main p { margin: 3px 0; color: #66788d; }
.announcement-deadline { color: #92520d !important; font-weight: 750; }
.announcement-meta-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.announcement-progress-mini { flex: 0 0 125px; text-align: center; padding: 12px; border-radius: 13px; background: #f2f6fb; }
.announcement-progress-mini strong,
.announcement-progress-mini span,
.announcement-progress-mini small { display: block; }
.announcement-progress-mini strong { color: #174a82; font-size: 26px; }
.announcement-progress-mini span,
.announcement-progress-mini small { color: #65778b; }
.announcement-priority-general { color: #244f87; background: #eaf2fb; }
.announcement-priority-important { color: #7b4300; background: #ffe7c7; }
.announcement-priority-urgent { color: #8b2525; background: #ffdada; }
.announcement-priority-deadline { color: #765000; background: #fff0b9; }
.announcement-detail { border-top: 6px solid #90a7bf; }
.announcement-detail.priority-urgent { border-top-color: #b63838; }
.announcement-detail.priority-important { border-top-color: #d47720; }
.announcement-detail.priority-deadline { border-top-color: #a46e0b; }
.announcement-detail-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; margin-bottom: 18px; }
.announcement-detail-head p { color: #68798d; margin: 8px 0 0; }
.announcement-profile { margin-bottom: 22px; }
.announcement-body { min-height: 150px; padding: 24px; border: 1px solid #dbe4ee; border-radius: 15px; background: #fbfdff; font-size: 17px; line-height: 1.9; }
.announcement-related { margin-top: 24px; padding-top: 20px; border-top: 1px solid #dce4ed; }
.announcement-related h2 { margin-bottom: 12px; }
.announcement-confirm-panel { margin-top: 24px; padding: 20px; border-radius: 15px; background: #f2f7fd; text-align: center; }
.announcement-admin-actions form { margin: 0; }
.announcement-admin-actions .inline-form { flex: 1 1 390px; }
.announcement-admin-actions .inline-form input { min-width: 220px; }
.announcement-form .choice-line { display: flex; align-items: flex-start; gap: 9px; margin: 0; min-width: 0; }
.announcement-form .choice-line input[type="checkbox"],
.announcement-form .choice-line input[type="radio"] { width: 18px; min-width: 18px; height: 18px; margin: 3px 0 0; padding: 0; flex: 0 0 18px; accent-color: var(--blue); }
.announcement-form .choice-line span { min-width: 0; }
.announcement-form .choice-line strong,
.announcement-form .choice-line small { display: block; }
.announcement-form .choice-line small { color: #6b7d91; font-weight: 500; }
.announcement-switches { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; align-self: end; }
.announcement-switches .choice-line { min-height: 49px; padding: 10px 12px; border: 1px solid #c9d5e2; border-radius: 11px; background: #fff; }
.announcement-audience-tabs { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 18px; }
.announcement-audience-tabs label { margin: 0; }
.announcement-audience-tabs input { position: absolute; opacity: 0; pointer-events: none; }
.announcement-audience-tabs span { display: grid; place-items: center; min-height: 58px; padding: 10px; border: 2px solid #d6e0ec; border-radius: 13px; background: #fff; text-align: center; cursor: pointer; }
.announcement-audience-tabs input:checked + span { color: #fff; background: #244f87; border-color: #244f87; box-shadow: 0 0 0 4px rgba(36,79,135,.12); }
.announcement-audience-panel[hidden] { display: none !important; }
.announcement-audience-panel .check-grid { margin-top: 10px; }
.announcement-audience-panel .choice-line { min-height: 54px; padding: 10px 12px; border: 1px solid #dce5ef; border-radius: 11px; background: #fff; }
.announcement-link-grid select[multiple] { min-height: 145px; }
.announcement-external-links { display: grid; gap: 12px; }
.form-grid > .span-three { grid-column: 1 / -1; }
.timeline-list { display: grid; gap: 10px; margin-top: 15px; }
.timeline-list article { padding: 13px 15px; border-left: 4px solid #9eb6cf; border-radius: 9px; background: #f6f9fc; }
.timeline-list article strong,
.timeline-list article span { display: block; }
.timeline-list article span { color: #68798d; font-size: 13px; }
.timeline-list article p { margin: 7px 0 0; }

@media (max-width: 900px) {
    .dashboard-announcement-item { grid-template-columns: 1fr; }
    .dashboard-announcement-item small { white-space: normal; }
    .announcement-audience-tabs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .announcement-switches { grid-template-columns: 1fr; }
}
@media (max-width: 620px) {
    .urgent-announcement-banner,
    .announcement-list-card,
    .announcement-detail-head { align-items: flex-start; flex-direction: column; }
    .urgent-announcement-banner .btn,
    .announcement-list-card > .btn { width: 100%; }
    .announcement-progress-mini { width: 100%; flex-basis: auto; }
    .announcement-audience-tabs { grid-template-columns: 1fr; }
    .announcement-admin-actions .inline-form { flex-direction: column; align-items: stretch; }
    .announcement-admin-actions .inline-form input { min-width: 0; }
}
.announcement-category-table input[type="checkbox"] { width: 20px; min-width: 20px; height: 20px; margin: 0; padding: 0; accent-color: var(--blue); }

/* v1.17.1 首頁統計卡快速連結 */
.dashboard-stat-link {
    position: relative;
    display: block;
    color: inherit;
    text-decoration: none;
    cursor: pointer;
    transition: transform .16s ease, box-shadow .16s ease, filter .16s ease;
}
.dashboard-stat-link:visited { color: inherit; }
.dashboard-stat-link::after {
    content: "›";
    position: absolute;
    top: 7px;
    right: 10px;
    color: currentColor;
    font-size: 20px;
    font-weight: 900;
    line-height: 1;
    opacity: .55;
}
.dashboard-stat-link:hover {
    transform: translateY(-3px);
    box-shadow: 0 13px 28px rgba(23, 52, 89, .20);
    filter: brightness(1.035);
}
.dashboard-stat-link:hover::after { opacity: 1; }
.dashboard-stat-link:focus-visible {
    outline: 4px solid rgba(255, 183, 52, .85);
    outline-offset: 3px;
    transform: translateY(-2px);
}
.dashboard-stat-link:active {
    transform: translateY(0);
    box-shadow: 0 5px 13px rgba(23, 52, 89, .16);
}
@media (prefers-reduced-motion: reduce) {
    .dashboard-stat-link { transition: none; }
}

/* v1.17.2 首頁統計卡文字清晰度修正 */
.today-count.dashboard-stat-link,
.today-count.dashboard-stat-link:link,
.today-count.dashboard-stat-link:visited {
    color: #fff;
}
.today-count.dashboard-stat-link span,
.today-count.dashboard-stat-link strong,
.today-count.dashboard-stat-link small,
.today-count.dashboard-stat-link::after {
    color: inherit;
}

/* 淺色統計卡維持深色文字 */
.today-count.club-stat.dashboard-stat-link,
.today-count.club-stat.dashboard-stat-link:link,
.today-count.club-stat.dashboard-stat-link:visited {
    color: #173f72;
}
.today-count.club-stat.dashboard-stat-link span { color: #244f87; }
.today-count.club-stat.dashboard-stat-link strong { color: #123e73; }
.today-count.club-stat.dashboard-stat-link small { color: #526d8d; }
.today-count.club-stat.dashboard-stat-link::after { color: #355e95; }

.today-count.announcement-confirm-stat.dashboard-stat-link,
.today-count.announcement-confirm-stat.dashboard-stat-link:link,
.today-count.announcement-confirm-stat.dashboard-stat-link:visited {
    color: #713b00;
}
.today-count.announcement-confirm-stat.dashboard-stat-link span,
.today-count.announcement-confirm-stat.dashboard-stat-link strong,
.today-count.announcement-confirm-stat.dashboard-stat-link small,
.today-count.announcement-confirm-stat.dashboard-stat-link::after {
    color: inherit;
}


/* v1.18 系統整合與穩定 */
.dashboard-welcome-compact { display:flex; align-items:center; justify-content:space-between; gap:20px; }
.dashboard-welcome-compact h1 { margin-bottom:5px; }
.dashboard-welcome-compact p:last-child { margin:0; color:var(--muted); }
.dashboard-header-actions { display:flex; flex-wrap:wrap; gap:8px; }
.dashboard-workspace-section { margin:24px 0; }
.dashboard-stat-grid { display:grid; grid-template-columns:repeat(7,minmax(105px,1fr)); gap:12px; }
.dashboard-stat-grid .today-count { min-width:0; min-height:142px; }
.dashboard-stat-grid.data-grid { grid-template-columns:repeat(2,minmax(180px,260px)); }
.dashboard-favorites-card { border-top:5px solid #2f806d; }
.favorite-feature-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; }
.favorite-feature { display:flex; align-items:center; gap:13px; min-height:92px; padding:15px; color:var(--ink); border:1px solid var(--line); border-radius:14px; background:#f9fbfd; text-decoration:none; transition:transform .15s ease,box-shadow .15s ease; }
.favorite-feature:hover { transform:translateY(-2px); box-shadow:0 9px 20px rgba(34,65,102,.12); }
.favorite-feature strong,.favorite-feature small { display:block; }
.favorite-feature strong { color:#173f72; }
.favorite-feature small { margin-top:3px; color:var(--muted); }
.favorite-choice-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.favorite-choice { display:flex; align-items:center; gap:12px; padding:14px; border:1px solid var(--line); border-radius:14px; background:#fff; }
.favorite-choice input { width:20px!important; min-width:20px; height:20px; margin:0; }
.favorite-choice strong,.favorite-choice small { display:block; }
.favorite-choice small { color:var(--muted); }
.permission-matrix small,.responsive-table td small { display:block; margin-top:4px; color:var(--muted); }
.permission-cell { text-align:center; color:#a5afbb; font-size:20px; font-weight:900; }
.permission-cell.has-permission { color:#23715f; background:#eef9f5; }
.row-muted { opacity:.55; }
.health-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin-bottom:22px; }
.health-check { display:flex; align-items:center; gap:12px; padding:17px; border:1px solid var(--line); border-radius:14px; background:#fff; }
.health-check>span { display:grid; place-items:center; width:38px; height:38px; border-radius:50%; font-size:22px; font-weight:900; }
.health-check strong,.health-check small { display:block; }
.health-check small { color:var(--muted); }
.health-check.is-ok>span { color:#fff; background:#2f806d; }
.health-check.is-error { border-color:#e2a1a1; background:#fff7f7; }
.health-check.is-error>span { color:#fff; background:#b54040; }
.version-summary { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; }
.version-summary>div { padding:18px; border-radius:13px; background:#f3f7fc; }
.version-summary span,.version-summary strong { display:block; }
.version-summary span { color:var(--muted); }
.version-summary strong { margin-top:5px; color:#174a82; font-size:22px; }
.notification-filter { display:grid; gap:12px; padding:15px; }
.filter-pills { display:flex; flex-wrap:wrap; gap:7px; }
.filter-pills a { padding:8px 13px; color:#455c76; border:1px solid #d7e1eb; border-radius:999px; background:#fff; text-decoration:none; font-weight:750; }
.filter-pills a.active { color:#fff; background:#244f87; border-color:#244f87; }
.filter-pills.compact a { padding:6px 10px; font-size:13px; }
.notification-work-item { display:flex; align-items:center; gap:12px; }
.notification-main-link { display:flex; align-items:center; flex:1; min-width:0; gap:12px; color:inherit; text-decoration:none; }
.notification-meta { display:flex; flex-wrap:wrap; gap:5px; margin-bottom:4px; }
.notification-complete-form { margin:0; }
.button-row,.table-actions { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.table-actions form { margin:0; }
code { word-break:break-all; }
@media(max-width:1000px){.dashboard-stat-grid{grid-template-columns:repeat(4,minmax(0,1fr));}.favorite-feature-grid,.health-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media(max-width:760px){.dashboard-welcome-compact{align-items:flex-start;flex-direction:column;}.dashboard-header-actions{width:100%;}.dashboard-header-actions .btn{flex:1;}.dashboard-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr));}.dashboard-stat-grid.data-grid{grid-template-columns:repeat(2,minmax(0,1fr));}.favorite-choice-grid,.favorite-feature-grid,.health-grid,.version-summary{grid-template-columns:1fr;}.notification-work-item{align-items:stretch;flex-direction:column;}.notification-complete-form .btn{width:100%;}}
@media(max-width:520px){.dashboard-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.dashboard-stat-grid .today-count{min-height:128px;padding:12px 7px}.dashboard-stat-grid .today-count strong{font-size:34px}.responsive-table table{min-width:720px}.form-actions{position:static!important}.btn{min-height:44px}}

/* v1.19 校內投票中心 */
.today-count.vote-stat { background:#7a4f9c; color:#fff; }
.today-count.vote-stat.dashboard-stat-link,
.today-count.vote-stat.dashboard-stat-link:link,
.today-count.vote-stat.dashboard-stat-link:visited { color:#fff; }
.vote-type-tabs { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; margin-bottom:20px; }
.vote-type-tabs label { margin:0; }
.vote-type-tabs input { position:absolute; opacity:0; pointer-events:none; }
.vote-type-tabs span { display:grid; place-items:center; min-height:60px; padding:12px; border:2px solid #d8e1ed; border-radius:14px; background:#fff; color:#35506e; font-weight:850; cursor:pointer; }
.vote-type-tabs input:checked + span { color:#fff; background:linear-gradient(135deg,#345d9c,#7252a8); border-color:#5f55a8; box-shadow:0 0 0 4px rgba(95,85,168,.13); }
.vote-form [hidden], .vote-audience-panel[hidden] { display:none!important; }
.vote-option-builder { display:grid; gap:12px; }
.vote-option-row { display:grid; grid-template-columns:minmax(180px,1fr) minmax(240px,1.5fr) auto; align-items:end; gap:12px; padding:14px; border:1px solid #dbe4ee; border-radius:14px; background:#f9fbfd; }
.vote-option-row label { display:block; margin-bottom:6px; }
.vote-option-row .btn { margin-bottom:1px; }
.vote-user-grid { max-height:420px; overflow:auto; padding-right:5px; }
.vote-audience-tabs { grid-template-columns:repeat(4,minmax(0,1fr)); }
.vote-audience-panel { padding:16px; margin:12px 0 18px; border:1px solid #d8e1ed; border-radius:12px; background:#f8fbff; }
.vote-audience-panel .check-grid { grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); align-items:stretch; gap:12px; margin-top:10px; }
.vote-audience-panel .choice-line {
    display:flex;
    align-items:flex-start;
    gap:10px;
    width:100%;
    min-width:0;
    min-height:58px;
    margin:0;
    padding:10px 12px;
    border:1px solid #dce5ef;
    border-radius:11px;
    background:#fff;
    line-height:1.45;
    writing-mode:horizontal-tb;
    text-orientation:mixed;
    white-space:normal;
    word-break:normal;
    overflow-wrap:anywhere;
    box-sizing:border-box;
}
.vote-audience-panel .choice-line input[type="checkbox"],
.vote-audience-panel .choice-line input[type="radio"] {
    width:18px;
    min-width:18px;
    height:18px;
    margin:3px 0 0;
    padding:0;
    flex:0 0 18px;
    accent-color:#315f9f;
}
.vote-audience-panel .choice-line > span {
    display:block;
    min-width:0;
    flex:1 1 auto;
}
.vote-audience-panel .choice-line strong,
.vote-audience-panel .choice-line small {
    display:block;
    writing-mode:horizontal-tb;
    text-orientation:mixed;
    white-space:normal;
    word-break:break-word;
    overflow-wrap:anywhere;
}
.vote-audience-panel .choice-line small { margin-top:2px; color:#6b7d91; font-weight:500; }
.vote-list { display:grid; gap:14px; }
.vote-list-item { display:grid; grid-template-columns:minmax(0,1fr) 175px auto; align-items:center; gap:18px; padding:18px; border:1px solid #dce5ef; border-radius:15px; background:#fff; }
.vote-list-main h3 { margin:7px 0; }
.vote-list-main h3 a { color:#173f72; text-decoration:none; }
.vote-list-main p { margin:6px 0; color:#53677e; }
.vote-meta { display:flex; flex-wrap:wrap; align-items:center; gap:7px; color:#5b6f85; font-size:13px; }
.vote-time-line { color:#687b90; font-size:14px; }
.vote-list-progress { min-width:160px; }
.vote-list-progress strong,.vote-list-progress span { display:block; }
.vote-list-progress strong { color:#174a82; font-size:22px; }
.vote-list-progress span { margin:3px 0 8px; color:#667a91; font-size:13px; }
.vote-list-actions { display:flex; flex-wrap:wrap; justify-content:flex-end; gap:7px; }
.vote-detail-head { display:flex; align-items:flex-start; justify-content:space-between; gap:24px; }
.vote-detail-head>div:first-child { min-width:0; flex:1; }
.vote-detail-head p { line-height:1.75; }
.vote-progress-card { flex:0 0 220px; padding:18px; border-radius:14px; background:#f2f6fb; }
.vote-progress-card strong,.vote-progress-card span,.vote-progress-card small { display:block; }
.vote-progress-card strong { color:#174a82; font-size:28px; }
.vote-progress-card span { color:#5c7087; }
.vote-progress-card small { margin-top:7px; color:#71849a; }
.vote-option-display { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.vote-option-display article { display:flex; align-items:flex-start; gap:12px; padding:15px; border:1px solid #dce5ef; border-radius:14px; background:#fbfcfe; }
.vote-option-display strong,.vote-option-display p { display:block; }
.vote-option-display p { margin:5px 0 0; color:#63768b; }
.vote-option-number { display:grid; place-items:center; flex:0 0 34px; width:34px; height:34px; border-radius:50%; color:#fff; background:#4c61aa; font-weight:900; }
.vote-admin-actions form { margin:0; }
.vote-cancel-form { margin-top:16px!important; }
.vote-cancel-form input { min-width:320px; flex:1; }
.vote-ballot-intro p { line-height:1.75; }
.vote-ballot-options { display:grid; gap:12px; }
.vote-ballot-option { position:relative; display:flex; align-items:center; gap:13px; min-height:76px; padding:15px 17px; border:2px solid #dce4ed; border-radius:15px; background:#fff; cursor:pointer; transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease; }
.vote-ballot-option:hover { transform:translateY(-1px); border-color:#9eb3d1; box-shadow:0 8px 18px rgba(33,65,104,.08); }
.vote-ballot-option input { position:absolute; opacity:0; pointer-events:none; width:1px!important; height:1px!important; }
.vote-ballot-check { flex:0 0 24px; width:24px; height:24px; border:2px solid #9aabc0; border-radius:6px; background:#fff; }
.vote-ballot-option input[type="radio"] + .vote-ballot-check { border-radius:50%; }
.vote-ballot-option input:checked + .vote-ballot-check { border-color:#2e66aa; background:#2e66aa; box-shadow:inset 0 0 0 5px #fff; }
.vote-ballot-option:has(input:checked) { border-color:#4e69c0; background:#f2f5ff; box-shadow:0 0 0 4px rgba(78,105,192,.11); }
.vote-ballot-copy { min-width:0; }
.vote-ballot-copy strong,.vote-ballot-copy small { display:block; }
.vote-ballot-copy strong { color:#173f72; font-size:17px; }
.vote-ballot-copy small { margin-top:4px; color:#687b90; line-height:1.45; }
.vote-receipt-card { text-align:center; }
.vote-receipt-check { display:grid; place-items:center; width:74px; height:74px; margin:14px auto; border-radius:50%; color:#fff; background:#2f806d; font-size:42px; font-weight:900; }
.vote-receipt-code { margin:20px 0; padding:18px; border:2px dashed #8ca6c6; border-radius:14px; background:#f4f8fc; }
.vote-receipt-code span,.vote-receipt-code strong { display:block; }
.vote-receipt-code span { color:#667b91; }
.vote-receipt-code strong { margin-top:7px; color:#173f72; font-size:25px; letter-spacing:.08em; }
.vote-result-summary-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; margin-bottom:20px; }
.vote-result-summary-grid article { text-align:center; }
.vote-result-summary-grid span,.vote-result-summary-grid strong,.vote-result-summary-grid small { display:block; }
.vote-result-summary-grid span { color:#64778d; }
.vote-result-summary-grid strong { margin:7px 0; color:#174a82; font-size:30px; }
.vote-result-summary-grid small { color:#75879a; }
.vote-result-summary-grid .is-passed { border-top:5px solid #2f806d; }
.vote-result-summary-grid .is-failed { border-top:5px solid #b54040; }
.vote-result-list { display:grid; gap:11px; }
.vote-result-row { display:grid; grid-template-columns:42px minmax(180px,1.1fr) minmax(180px,2fr) 90px; align-items:center; gap:13px; padding:13px; border:1px solid #dce5ef; border-radius:13px; }
.vote-result-row.is-winner { border-color:#9fd1c1; background:#f2fbf7; }
.vote-result-row.is-tie { border-color:#e6c36b; background:#fffaf0; }
.vote-result-rank { display:grid; place-items:center; width:34px; height:34px; border-radius:50%; color:#fff; background:#5a6f91; font-weight:900; }
.vote-result-name strong,.vote-result-name small { display:block; }
.vote-result-name small { margin-top:4px; color:#6f8195; }
.vote-result-bar { height:14px; overflow:hidden; border-radius:999px; background:#e8eef5; }
.vote-result-bar span { display:block; height:100%; border-radius:inherit; background:linear-gradient(90deg,#2f67aa,#6a53ac); }
.vote-result-number { text-align:right; }
.vote-result-number strong,.vote-result-number small { display:block; }
.vote-result-number strong { color:#174a82; }
.vote-result-number small { color:#71849a; }
.vote-audit-list article { border-left-color:#6655ad; }
.permission-toggle { display:inline-flex; align-items:center; justify-content:center; margin:0; }
.permission-toggle input { width:20px!important; min-width:20px; height:20px; margin:0; accent-color:#315f9f; }
.permission-toggle span { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); }
.vote-permission-table th,.vote-permission-table td { text-align:center; }
.vote-permission-table th:first-child,.vote-permission-table td:first-child { text-align:left; }

@media(max-width:1000px){
 .vote-list-item{grid-template-columns:1fr 150px}.vote-list-actions{grid-column:1/-1;justify-content:flex-start}.vote-result-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media(max-width:760px){
 .vote-type-tabs,.vote-audience-tabs,.vote-option-display{grid-template-columns:1fr}.vote-option-row{grid-template-columns:1fr}.vote-option-row .btn{width:100%}.vote-list-item{grid-template-columns:1fr}.vote-list-progress{min-width:0}.vote-detail-head{flex-direction:column}.vote-progress-card{width:100%;flex-basis:auto}.vote-cancel-form{align-items:stretch;flex-direction:column}.vote-cancel-form input{min-width:0}.vote-result-row{grid-template-columns:38px 1fr 80px}.vote-result-bar{grid-column:2/-1}.vote-result-summary-grid{grid-template-columns:1fr 1fr}.vote-ballot-option{align-items:flex-start}.vote-receipt-code strong{font-size:20px;letter-spacing:.03em;}.vote-audience-panel .check-grid{grid-template-columns:1fr;}
}
@media(max-width:520px){.vote-result-summary-grid{grid-template-columns:1fr}.vote-list-actions .btn{flex:1}.vote-ballot-form .form-actions{display:grid;grid-template-columns:1fr}.vote-option-number{flex-basis:30px;width:30px;height:30px}.vote-result-row{grid-template-columns:34px 1fr 70px;gap:8px;padding:10px}}

/* v1.20 會議共編待辦與完成確認 */
.today-count.meeting-collab-stat { background:#5368a8; color:#fff; }
.today-count.meeting-collab-stat.dashboard-stat-link,
.today-count.meeting-collab-stat.dashboard-stat-link:link,
.today-count.meeting-collab-stat.dashboard-stat-link:visited { color:#fff; }
.meeting-due-label { font-weight:800; }
.meeting-due-label.is-soon { color:#a85d00; }
.meeting-due-label.is-overdue { color:#b3261e; }
.meeting-my-collaboration-card { border-left:6px solid #5368a8; }
.meeting-my-collaboration-card.status-completed { border-left-color:#2f806d; background:#f7fcfa; }
.meeting-my-collaboration-card.status-revision_requested { border-left-color:#b56a22; background:#fffaf2; }
.meeting-collaboration-status-pending { color:#5c6370; background:#edf1f5; }
.meeting-collaboration-status-editing { color:#24558b; background:#e8f2fc; }
.meeting-collaboration-status-completed { color:#1d6d52; background:#e4f7ef; }
.meeting-collaboration-status-revision_requested { color:#8c4c08; background:#fff0d9; }
.meeting-collaboration-edit-note span { display:block; margin-top:5px; }
.meeting-collaboration-progress-list { display:grid; gap:11px; }
.meeting-collaboration-person {
    display:grid;
    grid-template-columns:minmax(220px,1fr) auto minmax(210px,.8fr);
    align-items:start;
    gap:12px;
    padding:14px;
    border:1px solid #dce5ef;
    border-left:5px solid #95a3b4;
    border-radius:13px;
    background:#fff;
}
.meeting-collaboration-person.status-editing { border-left-color:#4c78af; }
.meeting-collaboration-person.status-completed { border-left-color:#2f806d; background:#f7fcfa; }
.meeting-collaboration-person.status-revision_requested { border-left-color:#c17828; background:#fffaf3; }
.meeting-collaboration-person-main { min-width:0; }
.meeting-collaboration-person-main strong,
.meeting-collaboration-person-main small { display:block; }
.meeting-collaboration-person-main strong { color:#173f72; font-size:16px; }
.meeting-collaboration-person-main small { margin-top:3px; color:#66798f; }
.meeting-collaboration-person-main .revision-note { color:#9a560d; font-weight:700; }
.meeting-revision-request summary { color:#805014; cursor:pointer; font-weight:800; }
.meeting-revision-request form { display:grid; gap:7px; margin-top:8px; }
.meeting-revision-request textarea { min-width:0; width:100%; }
.meeting-collaboration-log-list { display:grid; gap:8px; }
.meeting-collaboration-log-list article { display:flex; align-items:center; justify-content:space-between; gap:14px; padding:10px 12px; border:1px solid #e0e7ef; border-radius:10px; background:#fafcff; }
.meeting-collaboration-log-list small { color:#71849a; white-space:nowrap; }
@media(max-width:900px){
    .meeting-collaboration-person{grid-template-columns:1fr auto}.meeting-revision-request{grid-column:1/-1}.meeting-collaboration-log-list article{align-items:flex-start;flex-direction:column;gap:3px}.meeting-collaboration-log-list small{white-space:normal}
}
@media(max-width:600px){
    .meeting-collaboration-person{grid-template-columns:1fr}.meeting-collaboration-person>.badge{justify-self:start}.meeting-revision-request{grid-column:auto}
}

/* v1.21 共享檔案中心 */
.shared-file-scope-tabs { margin: 0 0 16px; }
.shared-file-filter-grid { grid-template-columns: minmax(240px,2fr) repeat(4,minmax(150px,1fr)); }
.shared-file-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:16px; }
.shared-file-card { display:flex; flex-direction:column; min-width:0; overflow:hidden; border:1px solid #dbe4ee; border-radius:16px; background:#fff; box-shadow:0 5px 16px rgba(33,65,104,.06); }
.shared-file-card.is-pinned { border-color:#e5bc59; box-shadow:0 0 0 3px rgba(229,188,89,.13),0 5px 16px rgba(33,65,104,.06); }
.shared-file-card-main { display:flex; align-items:flex-start; gap:13px; flex:1; min-width:0; padding:17px; color:inherit; text-decoration:none; }
.shared-file-card-main:hover strong { color:#225f9f; }
.shared-file-type-icon,.shared-file-detail-icon { display:grid; place-items:center; flex:0 0 52px; width:52px; height:52px; border-radius:14px; color:#fff; background:#5b6f91; font-size:13px; font-weight:950; letter-spacing:-.02em; }
.shared-file-type-icon.kind-pdf,.shared-file-detail-icon.kind-pdf { background:#b33a48; }
.shared-file-type-icon.kind-word,.shared-file-detail-icon.kind-word { background:#2d61a7; }
.shared-file-type-icon.kind-excel,.shared-file-detail-icon.kind-excel { background:#26725b; }
.shared-file-type-icon.kind-powerpoint,.shared-file-detail-icon.kind-powerpoint { background:#b35435; }
.shared-file-type-icon.kind-opendocument,.shared-file-detail-icon.kind-opendocument { background:#5e55a1; }
.shared-file-type-icon.kind-image,.shared-file-detail-icon.kind-image { background:#8b4f92; }
.shared-file-type-icon.kind-text,.shared-file-detail-icon.kind-text { background:#4b647c; }
.shared-file-type-icon.kind-csv,.shared-file-detail-icon.kind-csv { background:#2f806d; }
.shared-file-type-icon.kind-archive,.shared-file-detail-icon.kind-archive { background:#8a6a2d; }
.shared-file-card-copy { min-width:0; flex:1; }
.shared-file-card-copy strong,.shared-file-card-copy small { display:block; }
.shared-file-card-copy strong { margin:7px 0; color:#173f72; font-size:17px; line-height:1.45; overflow-wrap:anywhere; }
.shared-file-card-copy small { margin-top:4px; color:#66798e; line-height:1.45; overflow-wrap:anywhere; }
.shared-file-card-badges { display:flex; flex-wrap:wrap; gap:5px; min-height:24px; }
.shared-file-card-footer { display:flex; justify-content:space-between; align-items:center; gap:10px; padding:11px 15px; border-top:1px solid #e4eaf1; background:#f9fbfd; color:#6d7f92; font-size:13px; }
.shared-file-card-footer form { margin:0; }
.shared-file-tag-row { display:flex; flex-wrap:wrap; gap:6px; padding:0 15px 14px; }
.shared-file-tag-row a { padding:4px 8px; border-radius:999px; color:#365f8d; background:#edf4fb; text-decoration:none; font-size:12px; font-weight:750; }
.shared-file-tag-row.detail-tags { margin:-4px 0 16px; padding:0; }
.shared-file-form .form-grid > * { min-width:0; }
.file-upload-box { padding:17px; margin-bottom:16px; border:2px dashed #a9bdd3; border-radius:14px; background:#f6f9fd; }
.file-upload-box input[type=file] { margin-top:8px; }
.shared-file-audience-tabs { grid-template-columns:repeat(5,minmax(0,1fr)); }
.shared-file-audience-panel { padding:15px; margin:10px 0 18px; border:1px solid #d8e1ed; border-radius:12px; background:#f8fbff; }
.shared-file-audience-panel[hidden] { display:none!important; }
.shared-file-audience-panel .check-grid { grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); align-items:stretch; }
.shared-file-audience-panel .choice-line,.shared-file-switch-grid .choice-line { display:flex; align-items:flex-start; gap:10px; min-width:0; margin:0; padding:11px 12px; border:1px solid #dce5ef; border-radius:11px; background:#fff; writing-mode:horizontal-tb; }
.shared-file-audience-panel .choice-line input,.shared-file-switch-grid .choice-line input { width:18px; min-width:18px; height:18px; margin:3px 0 0; flex:0 0 18px; accent-color:#315f9f; }
.shared-file-audience-panel .choice-line span,.shared-file-switch-grid .choice-line span { display:block; min-width:0; }
.shared-file-audience-panel .choice-line strong,.shared-file-audience-panel .choice-line small,.shared-file-switch-grid .choice-line strong,.shared-file-switch-grid .choice-line small { display:block; writing-mode:horizontal-tb; overflow-wrap:anywhere; }
.shared-file-audience-panel .choice-line small,.shared-file-switch-grid .choice-line small { margin-top:3px; color:#6b7d91; }
.shared-file-user-grid { max-height:420px; overflow:auto; }
.shared-file-switch-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; margin-top:16px; }
.shared-file-switch-grid > div { min-width:0; padding:11px 12px; border:1px solid #dce5ef; border-radius:11px; background:#fff; }
.shared-file-detail-head { display:flex; align-items:flex-start; gap:20px; }
.shared-file-detail-icon { flex-basis:72px; width:72px; height:72px; font-size:17px; border-radius:18px; }
.shared-file-detail-copy { min-width:0; flex:1; }
.shared-file-detail-copy h2 { margin:8px 0; overflow-wrap:anywhere; }
.shared-file-detail-copy > p { color:#53677e; line-height:1.75; white-space:pre-wrap; }
.shared-file-meta-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; margin-top:16px; }
.shared-file-meta-grid > div { padding:11px 12px; border-radius:11px; background:#f1f6fb; }
.shared-file-meta-grid span,.shared-file-meta-grid strong { display:block; }
.shared-file-meta-grid span { color:#6b7d91; font-size:12px; }
.shared-file-meta-grid strong { margin-top:4px; color:#173f72; overflow-wrap:anywhere; }
.shared-file-preview-help { display:flex; align-items:center; justify-content:space-between; gap:14px; margin-bottom:12px; padding:11px 14px; border:1px solid #cddbeb; border-radius:11px; background:#f3f7fc; color:#526a84; line-height:1.55; }
.shared-file-preview-help a { flex:0 0 auto; color:#174f8e; font-weight:800; text-decoration:none; }
.shared-file-preview-help a:hover { text-decoration:underline; }
.shared-file-pdf-preview { width:100%; height:75vh; min-height:620px; border:1px solid #d7e0ea; border-radius:12px; background:#fff; }
.shared-file-image-preview { display:grid; place-items:center; min-height:320px; padding:16px; border-radius:12px; background:#edf2f7; }
.shared-file-image-preview img { display:block; max-width:100%; max-height:75vh; border-radius:8px; box-shadow:0 8px 28px rgba(0,0,0,.12); }
.shared-file-text-preview { max-height:70vh; overflow:auto; padding:18px; border:1px solid #dbe4ed; border-radius:12px; background:#f8fafc; white-space:pre-wrap; word-break:break-word; font-family:ui-monospace,SFMono-Regular,Consolas,monospace; }
.shared-file-csv-preview { min-width:700px; }
.shared-file-version-list { display:grid; gap:10px; }
.shared-file-version-list article { display:grid; grid-template-columns:52px minmax(0,1fr) auto; align-items:center; gap:13px; padding:12px 14px; border:1px solid #dce5ef; border-radius:12px; background:#fbfcfe; }
.shared-file-version-list article > span:first-child { display:grid; place-items:center; width:46px; height:38px; border-radius:10px; color:#fff; background:#536ca0; font-weight:900; }
.shared-file-version-list strong,.shared-file-version-list small { display:block; }
.shared-file-version-list small { margin-top:4px; color:#6d7f91; }
.shared-file-version-list p { margin:7px 0 0; color:#52677d; }
.shared-file-category-admin { display:grid; gap:9px; }
.shared-file-category-row { display:grid; grid-template-columns:minmax(150px,1fr) minmax(220px,2fr) 90px 90px auto; align-items:center; gap:9px; padding:10px; border:1px solid #dce5ef; border-radius:11px; background:#fbfcfe; }
.shared-file-category-row.is-new { border-style:dashed; background:#f3f8fd; }
.shared-file-category-row .choice-line { margin:0; }
@media(max-width:1100px){.shared-file-filter-grid{grid-template-columns:repeat(3,minmax(0,1fr));}.shared-file-grid{grid-template-columns:repeat(2,minmax(0,1fr));}.shared-file-audience-tabs{grid-template-columns:repeat(3,minmax(0,1fr));}.shared-file-switch-grid,.shared-file-meta-grid{grid-template-columns:repeat(2,minmax(0,1fr));}.shared-file-category-row{grid-template-columns:1fr 1.5fr 80px 85px auto;}}
@media(max-width:760px){.shared-file-filter-grid,.shared-file-grid,.shared-file-audience-tabs,.shared-file-switch-grid,.shared-file-meta-grid{grid-template-columns:1fr;}.shared-file-detail-head{flex-direction:column}.shared-file-preview-help{align-items:flex-start;flex-direction:column}.shared-file-pdf-preview{min-height:520px;height:70vh}.shared-file-version-list article{grid-template-columns:46px minmax(0,1fr)}.shared-file-version-list article>.btn,.shared-file-version-list article>.badge{grid-column:2}.shared-file-category-row{grid-template-columns:1fr}.shared-file-category-row .btn{width:100%;}}


/* v1.21.4 會議章節共享檔案附件 */
.meeting-section-files{margin-top:14px;padding:13px;border:1px solid #d9e4ef;border-radius:12px;background:#f7faff;scroll-margin-top:130px}.meeting-section-files-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.meeting-section-files-head strong,.meeting-section-files-head small{display:block}.meeting-section-files-head small{margin-top:2px;color:#6d8094}.meeting-section-file-list{display:grid;gap:8px}.meeting-section-file-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid #e0e7ef;border-radius:10px;background:#fff}.meeting-section-file-item>a{min-width:0;flex:1;color:inherit;text-decoration:none}.meeting-section-file-item strong,.meeting-section-file-item small{display:block;overflow-wrap:anywhere}.meeting-section-file-item strong{color:#174a82}.meeting-section-file-item small{margin-top:3px;color:#6c7f93}.meeting-section-file-add{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px;margin-top:10px}.meeting-section-view-files{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:12px 0;padding:10px 12px;border-radius:10px;background:#f1f6fb}.meeting-section-view-files>strong{margin-right:4px;color:#254f82}.meeting-section-view-files a{padding:5px 9px;border-radius:999px;background:#fff;color:#225b98;text-decoration:none;font-weight:750;border:1px solid #d4e0ec}.meeting-permission-issue-list{display:grid;gap:8px}.meeting-permission-issue-list>div{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid #ead49a;border-radius:10px;background:#fffaf0}.meeting-permission-issue-list span{min-width:0;flex:1}.meeting-permission-issue-list strong,.meeting-permission-issue-list small{display:block}.meeting-permission-issue-list small{margin-top:3px;color:#7b6a43}.meeting-attachment-permission-warning{border-color:#e6c36b}.shared-file-form .alert strong{font-weight:900}@media(max-width:760px){.meeting-section-files-head{align-items:flex-start;flex-direction:column}.meeting-section-file-add{grid-template-columns:1fr}.meeting-section-file-add .btn{width:100%}.meeting-section-file-item{align-items:stretch;flex-direction:column}.meeting-section-file-item .btn{width:100%}.meeting-permission-issue-list>div{align-items:stretch;flex-direction:column}.meeting-permission-issue-list .btn{width:100%}}
.meeting-section-file-restricted{min-width:0;flex:1}.meeting-section-file-restricted strong,.meeting-section-file-restricted small{display:block}.meeting-section-file-restricted small{margin-top:3px;color:#9a6d32}.restricted-file-pill{padding:5px 9px;border:1px dashed #d1a95a;border-radius:999px;background:#fff8e7;color:#7b5b24;font-weight:750}

/* v1.21.6 會議資料／會議紀錄正式分流 */
.meeting-minutes-summary-card { border-top: 4px solid #6d55a7; }
.meeting-minutes-summary-card .meeting-detail-grid { margin-top: 12px; }
.meeting-minutes-status-not-started { background:#edf1f6; color:#596b80; }
.meeting-minutes-status-draft { background:#fff0c9; color:#8a5b00; }
.meeting-minutes-status-completed { background:#dff6e9; color:#1f7457; }
.meeting-minutes-form { display:grid; gap:18px; }
.meeting-minutes-overall-card { border-top:4px solid #315f9f; }
.meeting-minutes-section-list { display:grid; gap:18px; }
.meeting-minutes-section-card { padding:20px; }
.meeting-minutes-section-head { display:flex; align-items:center; gap:12px; margin-bottom:14px; }
.meeting-minutes-section-head > span { display:grid; place-items:center; flex:0 0 38px; width:38px; height:38px; border-radius:50%; background:#28568e; color:#fff; font-weight:900; }
.meeting-minutes-section-head h2 { margin:0; color:#173f72; }
.meeting-minutes-source { margin:10px 0 16px; border:1px solid #d7e1ec; border-radius:12px; background:#f7f9fc; }
.meeting-minutes-source summary { padding:11px 14px; cursor:pointer; color:#35506e; font-weight:800; }
.meeting-minutes-source > div { padding:0 14px 14px; color:#53677e; line-height:1.75; }
.meeting-minutes-record-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px 14px; }
.meeting-minutes-record-grid > div { min-width:0; }
.meeting-minutes-record-grid .span-two { grid-column:1/-1; }
.meeting-minutes-record-grid textarea { min-height:88px; }
.meeting-minutes-child-list { display:grid; gap:14px; margin-top:18px; padding-top:18px; border-top:1px solid #dce5ef; }
.meeting-minutes-child-card { padding:16px; border:1px solid #dbe4ee; border-radius:14px; background:#fbfcfe; }
.meeting-minutes-child-card h3 { margin:0 0 12px; color:#284f7d; }
.readonly-field { min-height:47px; padding:11px 13px; border:1px solid #d5dfeb; border-radius:10px; background:#f5f8fb; color:#53677e; }
.meeting-minutes-actions { justify-content:flex-end; gap:10px; }
@media(max-width:760px){
  .meeting-minutes-record-grid{grid-template-columns:1fr}.meeting-minutes-record-grid .span-two{grid-column:auto}.meeting-minutes-section-card{padding:15px}.meeting-minutes-actions{display:grid;grid-template-columns:1fr}.meeting-minutes-actions .btn{width:100%}
}


/* v1.21.7 會議共編期間教師預覽 */
.meeting-preview-alert { border-width:2px; }
.meeting-preview-alert strong { font-size:1.05rem; }
.meeting-preview-badge { color:#7a4a00; background:#fff0c7; border:1px solid #e7c56c; }
.meeting-attachment-restricted { display:flex; flex-direction:column; gap:2px; padding:10px 12px; border:1px dashed #c9d3df; border-radius:10px; background:#f7f9fb; color:#65768a; }
.meeting-attachment-restricted strong { color:#52667d; }
.meeting-attachment-restricted small { color:#8a5960; }


/* v1.21.8 會議紀錄待閱與閱讀確認 */
.today-count.meeting-minutes-stat{background:#426a9f;color:#fff}.today-count.meeting-minutes-stat:link,.today-count.meeting-minutes-stat:visited{color:#fff}
.meeting-minutes-confirm-setting .choice-line{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border:1px solid #cfdbea;border-radius:12px;background:#f8fbff}.meeting-minutes-confirm-setting input{width:18px!important;min-width:18px;height:18px;margin:3px 0 0}.meeting-minutes-confirm-setting span,.meeting-minutes-confirm-setting strong,.meeting-minutes-confirm-setting small{display:block}.meeting-minutes-confirm-setting small{margin-top:4px;color:#65798f}
.meeting-minutes-read-complete{margin:14px 0;padding:11px 14px;border-radius:11px;background:#edf9f3;color:#246b54;font-weight:800}.meeting-minutes-progress-panel{margin-top:18px;padding:16px;border:1px solid #d7e2ee;border-radius:14px;background:#f8fbff}.meeting-minutes-progress-panel .compact-stats{margin:12px 0}.meeting-minutes-reader-details summary{cursor:pointer;font-weight:800;color:#244f87}.meeting-minutes-reader-details td small{display:block;color:#6a7d91;margin-top:2px}
.meeting-minutes-inbox-tabs{margin:0 0 16px}.meeting-minutes-inbox-list{display:grid;gap:12px}.meeting-minutes-inbox-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px;padding:16px;border:1px solid #dbe5ef;border-radius:14px;background:#fff;color:inherit;text-decoration:none}.meeting-minutes-inbox-item.is-pending{border-left:5px solid #d99a2b}.meeting-minutes-inbox-item.is-done{border-left:5px solid #4a9679}.meeting-minutes-inbox-item h3{margin:8px 0 5px;color:#173f72}.meeting-minutes-inbox-item p{margin:0;color:#63768b}.meeting-minutes-inbox-status{text-align:right}.meeting-minutes-inbox-status strong,.meeting-minutes-inbox-status small{display:block}.meeting-minutes-inbox-status small{margin-top:4px;color:#6f8194}
@media(max-width:760px){.meeting-minutes-inbox-item{grid-template-columns:1fr}.meeting-minutes-inbox-status{text-align:left}}


/* v1.21.9 共編草案首頁預覽提醒 */
.today-count.meeting-preview-stat { background:#3f7891; color:#fff; }
.today-count.meeting-preview-stat.dashboard-stat-link,
.today-count.meeting-preview-stat.dashboard-stat-link:link,
.today-count.meeting-preview-stat.dashboard-stat-link:visited { color:#fff; }
.meeting-preview-new-badge { color:#8a4b00; background:#fff0c7; border:1px solid #e7c56c; }
.meeting-preview-seen-badge { color:#3c6875; background:#e7f3f6; border:1px solid #b9d9e1; }

/* v1.21.12 首頁學期行事簡曆快速入口 */
.calendar-brief-quick-card {
    display:grid;
    grid-template-columns:auto minmax(210px,.9fr) minmax(280px,1.35fr) auto;
    align-items:center;
    gap:18px;
    margin:0 0 14px;
    padding:18px 20px;
    color:#173f72;
    border:1px solid #bfd5e7;
    border-left:6px solid #248c84;
    border-radius:18px;
    background:linear-gradient(135deg,#f4fbff 0%,#eef8f6 100%);
    box-shadow:0 8px 22px rgba(31,76,111,.09);
    text-decoration:none;
    transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;
}
.calendar-brief-quick-card:link,
.calendar-brief-quick-card:visited { color:#173f72; }
.calendar-brief-quick-card:hover,
.calendar-brief-quick-card:focus-visible {
    transform:translateY(-2px);
    border-color:#88b8c6;
    box-shadow:0 12px 26px rgba(31,76,111,.14);
    outline:none;
}
.calendar-brief-quick-card:focus-visible { box-shadow:0 0 0 4px rgba(49,95,159,.18),0 12px 26px rgba(31,76,111,.14); }
.calendar-brief-quick-icon {
    display:grid;
    place-items:center;
    width:58px;
    height:58px;
    border-radius:16px;
    color:#fff;
    background:#2f806d;
    box-shadow:0 7px 16px rgba(47,128,109,.2);
}
.calendar-brief-quick-icon span { font-size:26px; font-weight:900; }
.calendar-brief-quick-main { min-width:0; }
.calendar-brief-quick-title-row { display:flex; flex-wrap:wrap; align-items:center; gap:7px; margin-bottom:4px; }
.calendar-brief-quick-kicker { color:#2f806d; font-size:13px; font-weight:850; }
.calendar-brief-quick-term { padding:3px 8px; color:#47647f; border-radius:999px; background:#fff; font-size:12px; font-weight:750; }
.calendar-brief-quick-main h3 { margin:0 0 5px; color:#173f72; font-size:22px; }
.calendar-brief-quick-week { display:flex; flex-wrap:wrap; align-items:baseline; gap:9px; }
.calendar-brief-quick-week strong { color:#244f87; font-size:27px; line-height:1.15; }
.calendar-brief-quick-week span { color:#60768d; font-size:14px; font-weight:700; }
.calendar-brief-quick-events { display:grid; gap:5px; min-width:0; padding-left:18px; border-left:1px solid #cddce7; }
.calendar-brief-quick-events-label { color:#5e748a; font-size:12px; font-weight:850; }
.calendar-brief-quick-event,
.calendar-brief-quick-empty { display:block; overflow:hidden; color:#334f6d; font-size:14px; white-space:nowrap; text-overflow:ellipsis; }
.calendar-brief-quick-event b { color:#244f87; }
.calendar-brief-quick-event.style-meeting { color:#236f68; }
.calendar-brief-quick-event.style-exam,
.calendar-brief-quick-event.style-holiday { color:#a64242; }
.calendar-brief-quick-event.style-emphasis { color:#9b611c; }
.calendar-brief-quick-events small { color:#708499; }
.calendar-brief-quick-action { display:flex; align-items:center; gap:6px; justify-self:end; min-width:max-content; padding:9px 12px; color:#fff; border-radius:11px; background:#315f9f; font-size:14px; font-weight:850; }
.calendar-brief-quick-action span { font-size:22px; line-height:.7; }
@media(max-width:1000px){
    .calendar-brief-quick-card{grid-template-columns:auto minmax(0,1fr) auto;}
    .calendar-brief-quick-events{grid-column:2/-1;padding-left:0;border-left:0;border-top:1px solid #cddce7;padding-top:10px;}
}
@media(max-width:620px){
    .calendar-brief-quick-card{grid-template-columns:auto minmax(0,1fr);gap:12px;padding:15px;}
    .calendar-brief-quick-icon{width:48px;height:48px;border-radius:13px}.calendar-brief-quick-icon span{font-size:22px}
    .calendar-brief-quick-main h3{font-size:19px}.calendar-brief-quick-week strong{font-size:23px}
    .calendar-brief-quick-events{grid-column:1/-1}.calendar-brief-quick-action{grid-column:1/-1;justify-self:stretch;justify-content:center;}
}

/* v1.21.15 Google 共編中心 */
.today-count.google-collab-stat { background:#2f6f78; color:#fff; }
.today-count.google-collab-stat.dashboard-stat-link,
.today-count.google-collab-stat.dashboard-stat-link:link,
.today-count.google-collab-stat.dashboard-stat-link:visited { color:#fff; }
.google-collab-heading p { max-width:760px; }
.google-collab-security-note { display:flex; gap:10px; align-items:flex-start; margin:0 0 16px; padding:12px 14px; border:1px solid #d9c98b; border-radius:12px; background:#fff9df; color:#66541d; line-height:1.55; }
.google-collab-security-note strong { flex:0 0 auto; color:#7a5a00; }
.google-collab-security-note.compact { margin-top:14px; font-size:14px; }
.google-collab-summary-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; margin:0 0 18px; }
.google-collab-summary-card { display:grid; grid-template-columns:1fr auto; align-items:end; gap:2px 12px; padding:16px 18px; border:1px solid #d8e3ed; border-radius:15px; background:#fff; color:#24425f; text-decoration:none; box-shadow:0 4px 12px rgba(34,69,102,.06); }
.google-collab-summary-card:link,.google-collab-summary-card:visited { color:#24425f; }
.google-collab-summary-card span { font-weight:850; }
.google-collab-summary-card strong { grid-row:1/3; grid-column:2; font-size:32px; line-height:1; color:#244f87; }
.google-collab-summary-card small { color:#718399; }
.google-collab-summary-card.is-active { border-left:5px solid #3c8b78; }
.google-collab-summary-card.is-completed { border-left:5px solid #6887a7; }
.google-collab-summary-card.is-template { border-left:5px solid #9b7a42; }
.google-collab-template-section { margin-bottom:18px; }
.google-collab-template-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:13px; }
.google-collab-template-card { display:flex; gap:13px; min-width:0; padding:14px; border:1px solid #dce5ee; border-radius:14px; background:#fbfdff; }
.google-collab-template-body { min-width:0; flex:1; }
.google-collab-template-body h3 { margin:5px 0 4px; color:#173f72; }
.google-collab-template-body p { margin:0 0 10px; color:#62768a; line-height:1.55; }
.google-collab-type-icon { display:grid; place-items:center; flex:0 0 44px; width:44px; height:44px; border-radius:12px; color:#fff; background:#4779a6; font-weight:900; box-shadow:0 4px 10px rgba(40,70,105,.14); }
.google-collab-type-icon.type-spreadsheet,.google-collab-mini-type.type-spreadsheet { background:#2f8067; }
.google-collab-type-icon.type-presentation,.google-collab-mini-type.type-presentation { background:#b36a32; }
.google-collab-type-icon.type-form,.google-collab-mini-type.type-form { background:#725b9b; }
.google-collab-type-icon.type-drive,.google-collab-mini-type.type-drive { background:#5e778b; }
.google-collab-type-icon.large { width:58px; height:58px; flex-basis:58px; border-radius:15px; font-size:20px; }
.google-collab-card-meta { display:flex; flex-wrap:wrap; align-items:center; gap:7px; color:#6a7f93; font-size:12px; font-weight:700; }
.google-collab-status-active { background:#e1f4eb; color:#256b55; }
.google-collab-status-completed { background:#e6eef7; color:#3d6287; }
.google-collab-status-archived { background:#edf0f3; color:#687887; }
.google-collab-filter { display:grid; grid-template-columns:minmax(220px,1.6fr) repeat(3,minmax(150px,.8fr)) auto; gap:12px; align-items:end; margin:0 0 16px; padding:13px; border-radius:13px; background:#f6f9fc; }
.google-collab-filter label { display:block; margin-bottom:5px; font-weight:800; color:#36526e; }
.google-collab-filter-action { display:flex; gap:9px; align-items:center; padding-bottom:2px; }
.google-collab-list { display:grid; gap:12px; }
.google-collab-card { display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:14px; align-items:center; padding:15px; border:1px solid #dbe5ee; border-radius:14px; background:#fff; }
.google-collab-card.is-pinned { border-left:5px solid #d0a348; background:#fffdf7; }
.google-collab-card-main { min-width:0; }
.google-collab-card-main h3 { margin:5px 0 4px; font-size:18px; }
.google-collab-card-main h3 a { color:#173f72; text-decoration:none; }
.google-collab-card-main p { margin:0 0 5px; color:#5b7187; line-height:1.55; }
.google-collab-card-main small { color:#7a8c9e; }
.google-collab-card-actions { display:flex; gap:8px; align-items:center; }
.google-collab-form { display:grid; gap:17px; }
.google-collab-form textarea { resize:vertical; }
.google-collab-audience-box { margin:0; padding:15px; border:1px solid #d8e3ed; border-radius:13px; }
.google-collab-audience-box legend { padding:0 8px; color:#244f87; font-weight:900; }
.google-collab-audience-box .help-text { margin:0 0 12px; color:#6b7f92; }
.google-collab-audience-grid { display:grid; grid-template-columns:.7fr 1fr 1.25fr; gap:16px; }
.google-collab-audience-grid strong { display:block; margin-bottom:8px; color:#36526e; }
.google-collab-audience-grid select { width:100%; }
.check-line { display:flex !important; align-items:center; gap:8px; margin:7px 0; font-weight:700; color:#445d75; }
.check-line input[type="checkbox"],.check-line input[type="radio"] { width:auto !important; min-width:0 !important; flex:0 0 auto; margin:0; }
.google-collab-pin { margin:0; }
.google-collab-inline-checks { display:flex; flex-wrap:wrap; gap:18px; }
.google-collab-detail-card { display:grid; gap:18px; }
.google-collab-detail-head { display:flex; gap:14px; align-items:center; }
.google-collab-detail-head h2 { margin:5px 0 0; color:#173f72; }
.google-collab-detail-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin:0; }
.google-collab-detail-grid > div { padding:12px; border-radius:11px; background:#f7f9fc; }
.google-collab-detail-grid dt { margin-bottom:4px; color:#6b7f92; font-size:12px; font-weight:850; }
.google-collab-detail-grid dd { margin:0; color:#294965; font-weight:750; }
.google-collab-description { padding-top:14px; border-top:1px solid #e0e7ef; }
.google-collab-description h3 { margin:0 0 8px; color:#36526e; }
.google-collab-description p { margin:0; color:#4f667c; line-height:1.75; }
.google-collab-dashboard-card { display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:16px; align-items:center; margin:0 0 14px; padding:17px 19px; border:1px solid #cbdde2; border-left:6px solid #2f806d; border-radius:17px; background:linear-gradient(135deg,#f5fbfa 0%,#f4f8fd 100%); box-shadow:0 7px 18px rgba(34,73,93,.08); }
.google-collab-dashboard-icon { display:grid; place-items:center; width:54px; height:54px; border-radius:15px; background:#2f806d; color:#fff; font-size:22px; font-weight:900; }
.google-collab-dashboard-main { min-width:0; }
.google-collab-dashboard-title-row { display:flex; flex-wrap:wrap; gap:7px; align-items:center; }
.google-collab-dashboard-kicker { color:#2f806d; font-size:13px; font-weight:900; }
.google-collab-dashboard-main h3 { margin:4px 0 7px; color:#173f72; font-size:21px; }
.google-collab-dashboard-items { display:flex; flex-wrap:wrap; gap:7px; min-width:0; }
.google-collab-dashboard-items a { display:flex; align-items:center; gap:7px; max-width:360px; padding:6px 9px; border:1px solid #d8e5ea; border-radius:10px; background:#fff; color:#34536f; text-decoration:none; }
.google-collab-dashboard-items a span:last-child { overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
.google-collab-mini-type { display:grid; place-items:center; flex:0 0 24px; width:24px; height:24px; border-radius:7px; background:#4779a6; color:#fff; font-size:11px; font-weight:900; }
.google-collab-dashboard-empty { color:#687d90; }
.google-collab-dashboard-actions { display:flex; flex-direction:column; gap:7px; }
@media(max-width:1050px){.google-collab-filter{grid-template-columns:repeat(2,minmax(0,1fr))}.google-collab-filter-action{grid-column:1/-1}.google-collab-dashboard-card{grid-template-columns:auto minmax(0,1fr)}.google-collab-dashboard-actions{grid-column:1/-1;flex-direction:row;justify-content:flex-end}.google-collab-detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.google-collab-summary-grid,.google-collab-template-grid,.google-collab-audience-grid,.google-collab-detail-grid{grid-template-columns:1fr}.google-collab-filter{grid-template-columns:1fr}.google-collab-filter-action{grid-column:auto}.google-collab-card{grid-template-columns:auto minmax(0,1fr)}.google-collab-card-actions{grid-column:1/-1;justify-content:flex-end}.google-collab-dashboard-card{grid-template-columns:auto minmax(0,1fr);padding:14px}.google-collab-dashboard-actions{grid-column:1/-1;justify-content:stretch}.google-collab-dashboard-actions .btn{flex:1}.google-collab-security-note{display:block}.google-collab-security-note strong{display:block;margin-bottom:4px}}

/* v1.21.16 共享檔案資料夾與智慧搜尋 */
.shared-file-browser{display:grid;grid-template-columns:240px minmax(0,1fr);gap:16px;align-items:start}
.shared-file-browser-main{min-width:0;display:grid;gap:16px}
.shared-file-sidebar{position:sticky;top:132px;padding:14px;max-height:calc(100vh - 150px);overflow:auto}
.shared-file-sidebar-title{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:3px 5px 10px;color:#244f87}
.shared-file-sidebar-title span,.shared-file-sidebar-title a{font-size:12px;color:#6a7f95;text-decoration:none}
.shared-file-sidebar-title.folder-title{margin-top:14px;padding-top:14px;border-top:1px solid #e2e9f0}
.shared-file-smart-nav,.shared-file-folder-tree{display:grid;gap:4px}
.shared-file-smart-nav a,.shared-file-folder-tree a{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 10px;border-radius:10px;color:#35536f;text-decoration:none;font-weight:750}
.shared-file-smart-nav a:hover,.shared-file-folder-tree a:hover{background:#f0f5fa}
.shared-file-smart-nav a.active,.shared-file-folder-tree a.active{background:#e5f0fb;color:#174f8e}
.shared-file-smart-nav b,.shared-file-folder-tree b{min-width:24px;padding:2px 6px;border-radius:999px;background:#eef3f8;color:#687d92;font-size:11px;text-align:center}
.shared-file-smart-nav a.active b,.shared-file-folder-tree a.active b{background:#fff;color:#174f8e}
.shared-file-folder-tree a>span{display:flex;align-items:center;min-width:0;gap:6px;overflow-wrap:anywhere}
.shared-file-folder-tree a i{font-style:normal;font-size:13px}
.shared-file-folder-tree .depth-2{padding-left:24px;font-size:14px}
.shared-file-folder-tree .depth-3{padding-left:39px;font-size:13px}
.shared-file-filter-grid-v116{grid-template-columns:minmax(280px,2fr) repeat(5,minmax(125px,1fr))}
.shared-file-search-wide{min-width:0}
.shared-file-results{min-width:0}
.shared-file-view-toggle{align-items:center}
.shared-file-folder-line{color:#3f6989!important;font-weight:700}
.shared-file-list-table{min-width:1050px}
.shared-file-list-table td{vertical-align:middle}
.shared-file-list-table td small{display:block;margin-top:3px;color:#718397}
.shared-file-list-name{display:flex;align-items:center;gap:9px;color:#173f72;text-decoration:none}
.shared-file-list-name strong,.shared-file-list-name small{display:block;overflow-wrap:anywhere}
.mini-kind{display:grid;place-items:center;flex:0 0 35px;width:35px;height:35px;border-radius:9px;background:#5b6f91;color:#fff;font-size:10px;font-weight:900}
.mini-kind.kind-pdf{background:#b33a48}.mini-kind.kind-word{background:#2d61a7}.mini-kind.kind-excel{background:#26725b}.mini-kind.kind-powerpoint{background:#b35435}.mini-kind.kind-image{background:#8b4f92}.mini-kind.kind-archive{background:#8a6a2d}
.shared-file-folder-admin{display:grid;gap:9px}
.shared-file-folder-row{display:grid;grid-template-columns:minmax(150px,1.1fr) minmax(150px,1fr) minmax(190px,1.5fr) 80px 118px 68px minmax(78px,auto);align-items:center;gap:8px;padding:10px;border:1px solid #dce5ef;border-radius:11px;background:#fbfcfe}
.shared-file-folder-row.is-new{border-style:dashed;background:#f3f8fd}
.shared-file-folder-row.is-system{background:#fff9e8;border-color:#ecdca8}
.shared-file-folder-row .choice-line{display:flex;flex-direction:row;align-items:center;gap:7px;min-width:0;margin:0;white-space:nowrap;writing-mode:horizontal-tb}
.shared-file-folder-row .choice-line input[type="checkbox"]{width:18px;min-width:18px;height:18px;margin:0;padding:0;flex:0 0 18px}
.shared-file-folder-row .choice-line span{display:inline-block;min-width:max-content;white-space:nowrap;word-break:keep-all;overflow-wrap:normal;writing-mode:horizontal-tb}
.folder-file-count{font-size:12px;color:#65798e;text-align:center;white-space:nowrap;word-break:keep-all;writing-mode:horizontal-tb}
.shared-file-organize-filters{grid-template-columns:minmax(260px,2fr) repeat(3,minmax(150px,1fr))}
.shared-file-organize-table{min-width:1050px}
.shared-file-organize-table td{vertical-align:middle}
.shared-file-organize-table td strong,.shared-file-organize-table td small{display:block}
.shared-file-organize-table td small{margin-top:4px;color:#718397}
.shared-file-organize-table input[type="checkbox"],.shared-file-select-all input[type="checkbox"]{width:18px!important;min-width:18px;height:18px;accent-color:#315f9f}
.shared-file-select-all{display:flex;align-items:center;gap:8px;margin:0}
.shared-file-batch-bar{position:sticky;bottom:10px;z-index:4;display:grid;grid-template-columns:minmax(220px,1.4fr) minmax(190px,1fr) minmax(140px,.7fr) auto;align-items:end;gap:10px;margin-top:16px;padding:14px;border:1px solid #cad9e7;border-radius:14px;background:rgba(248,251,255,.96);box-shadow:0 8px 24px rgba(33,65,104,.13);backdrop-filter:blur(8px)}
.shared-file-batch-bar label{display:block;margin-bottom:5px;font-size:13px;font-weight:800;color:#405a75}
@media(max-width:1280px){.shared-file-filter-grid-v116{grid-template-columns:repeat(3,minmax(0,1fr))}.shared-file-search-wide{grid-column:span 2}.shared-file-folder-row{grid-template-columns:minmax(140px,1fr) minmax(135px,1fr) minmax(180px,1.35fr) 75px 108px minmax(78px,auto)}.folder-file-count{display:none}}
@media(max-width:980px){.shared-file-browser{grid-template-columns:1fr}.shared-file-sidebar{position:static;max-height:none}.shared-file-smart-nav{grid-template-columns:repeat(3,minmax(0,1fr))}.shared-file-folder-tree{grid-template-columns:repeat(2,minmax(0,1fr))}.shared-file-folder-tree .depth-2,.shared-file-folder-tree .depth-3{padding-left:10px}.shared-file-batch-bar{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.shared-file-filter-grid-v116,.shared-file-organize-filters{grid-template-columns:1fr}.shared-file-search-wide{grid-column:auto}.shared-file-smart-nav,.shared-file-folder-tree{grid-template-columns:1fr}.shared-file-folder-row{grid-template-columns:1fr}.shared-file-folder-row .btn{width:100%}.shared-file-batch-bar{position:static;grid-template-columns:1fr}.shared-file-view-toggle{flex-wrap:wrap}}


/* v1.21.18 會議共編附件資料夾選擇器 */
.meeting-section-file-add{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px;padding-top:10px;border-top:1px dashed #d7e2ee}.meeting-section-file-add small{color:#6c7f93}.meeting-file-picker-open{overflow:hidden}.meeting-file-picker-backdrop{position:fixed;inset:0;z-index:1500;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(18,35,55,.54);backdrop-filter:blur(2px)}.meeting-file-picker-backdrop[hidden]{display:none!important}.meeting-file-picker-dialog{display:flex;flex-direction:column;width:min(980px,96vw);max-height:min(820px,92vh);overflow:hidden;border-radius:18px;background:#fff;box-shadow:0 28px 80px rgba(10,31,55,.3)}.meeting-file-picker-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px 20px 14px;border-bottom:1px solid #e0e8f0}.meeting-file-picker-head h2{margin:2px 0 4px}.meeting-file-picker-head small{color:#60758a}.meeting-file-picker-close{border:0;background:transparent;color:#526a82;font-size:32px;line-height:1;cursor:pointer;padding:3px 8px;border-radius:8px}.meeting-file-picker-close:hover{background:#eef4fa}.meeting-file-picker-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;padding:12px 18px;background:#f7f9fc;border-bottom:1px solid #e6edf4}.meeting-file-picker-nav{display:flex;gap:7px;flex-wrap:wrap}.meeting-file-picker-search{display:grid;grid-template-columns:auto minmax(220px,360px);align-items:center;gap:8px;margin:0}.meeting-file-picker-search span{font-size:13px;font-weight:800;color:#5c7085}.meeting-file-picker-search input{min-height:38px}.meeting-file-picker-breadcrumb{padding:9px 18px;border-bottom:1px solid #e6edf4;background:#fff;color:#496783;font-size:13px;font-weight:750;overflow-wrap:anywhere}.meeting-file-picker-body{min-height:260px;overflow:auto;padding:14px 18px 18px}.meeting-file-picker-folders{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:12px}.meeting-file-picker-folder{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:13px 14px;border:1px solid #d9e5f0;border-radius:12px;background:#f8fbfe;color:#294f72;text-align:left;cursor:pointer}.meeting-file-picker-folder:hover{border-color:#9fc2e5;background:#edf6ff}.meeting-file-picker-folder>span:nth-child(2){min-width:0}.meeting-file-picker-folder strong,.meeting-file-picker-folder small{display:block;overflow-wrap:anywhere}.meeting-file-picker-folder small{margin-top:3px;color:#71859a;font-size:12px}.meeting-file-picker-folder-icon{font-size:24px}.meeting-file-picker-files{display:grid;gap:8px}.meeting-file-picker-item{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:11px;padding:11px 12px;border:1px solid #dfe7ef;border-radius:11px;background:#fff;cursor:pointer}.meeting-file-picker-item:hover{border-color:#abc8e4;background:#f8fbfe}.meeting-file-picker-item input{width:auto;margin:0}.meeting-file-picker-file-main{min-width:0}.meeting-file-picker-file-main strong,.meeting-file-picker-file-main small{display:block;overflow-wrap:anywhere}.meeting-file-picker-file-main strong{color:#194f86}.meeting-file-picker-file-main small{margin-top:3px;color:#708297;font-size:12px}.meeting-file-picker-state{padding:4px 8px;border-radius:999px;background:#edf4fb;color:#3c6388;font-size:12px;font-weight:800;white-space:nowrap}.meeting-file-picker-item.is-attached{background:#f5f6f8;cursor:not-allowed;opacity:.72}.meeting-file-picker-item.is-attached .meeting-file-picker-state{background:#e7ecef;color:#667780}.meeting-file-picker-empty{display:grid;gap:4px;place-items:center;padding:36px 18px;color:#718297;text-align:center}.meeting-file-picker-empty[hidden]{display:none!important}.meeting-file-picker-foot{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 18px;border-top:1px solid #dfe8f0;background:#f8fafc}.meeting-file-picker-foot>div:first-child{display:grid;gap:2px}.meeting-file-picker-foot small{color:#74869a}.meeting-form-file-picker{margin-top:10px;padding:12px;border:1px solid #dbe5ef;border-radius:12px;background:#fbfdff}.meeting-form-file-picker .meeting-file-picker-toolbar{margin:-12px -12px 0;border-radius:12px 12px 0 0}.meeting-form-file-picker .meeting-file-picker-breadcrumb{margin:0 -12px 12px}.meeting-form-file-picker-summary{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px;padding:9px 11px;border-radius:9px;background:#edf5fc;color:#315c82}.meeting-form-file-picker-summary small{color:#698199}.meeting-form-file-picker .meeting-file-check-list{max-height:340px}.meeting-form-file-picker .meeting-file-check[hidden],.meeting-file-picker-folder[hidden],.meeting-file-picker-item[hidden]{display:none!important}
@media(max-width:800px){.meeting-section-file-add{align-items:stretch;flex-direction:column}.meeting-section-file-add .btn{width:100%}.meeting-file-picker-backdrop{align-items:stretch;padding:0}.meeting-file-picker-dialog{width:100%;max-height:none;height:100%;border-radius:0}.meeting-file-picker-toolbar{align-items:stretch;flex-direction:column}.meeting-file-picker-search{grid-template-columns:1fr}.meeting-file-picker-search input{width:100%}.meeting-file-picker-folders{grid-template-columns:1fr}.meeting-file-picker-foot{align-items:stretch;flex-direction:column}.meeting-file-picker-foot .button-row{width:100%}.meeting-file-picker-foot .button-row .btn{flex:1}.meeting-form-file-picker-summary{align-items:flex-start;flex-direction:column}}

/* v1.21.18.1 資料夾篩選修正：雙重隱藏保護，避免 display 規則使非目前資料夾檔案重新出現 */
.is-picker-hidden{display:none!important}


/* v1.21.18.2 資料夾管理版面修正：狀態文字固定橫排，避免「系統保留／啟用」被擠成直排 */
.shared-file-folder-row .folder-status-label{white-space:nowrap;word-break:keep-all;overflow-wrap:normal;writing-mode:horizontal-tb}
@media(max-width:980px){
  .shared-file-folder-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .shared-file-folder-row input[name="description"]{grid-column:1/-1}
  .shared-file-folder-row .folder-file-count{display:block;text-align:left}
  .shared-file-folder-row .btn{justify-self:stretch}
}
@media(max-width:700px){
  .shared-file-folder-row{grid-template-columns:1fr}
  .shared-file-folder-row input[name="description"]{grid-column:auto}
  .shared-file-folder-row .folder-file-count{display:none}
}


/* v1.21.18.3 會議公告狀態提示與教師可見性改善 */
.meeting-publication-warning {
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:18px;
    margin-bottom:18px;
}
.meeting-publication-warning > div { flex:1 1 auto; min-width:0; line-height:1.7; }
.meeting-publication-warning form { flex:0 0 auto; margin:0; }
.meeting-visibility-private-badge { color:#8a4b00; background:#fff0c7; border:1px solid #e7c56c; }
@media(max-width:760px){
    .meeting-publication-warning { align-items:stretch; flex-direction:column; }
    .meeting-publication-warning .btn { width:100%; }
}

/* v1.22.0 課表測試與匯入管理（系統管理員限定） */
.timetable-page-heading{align-items:flex-start}
.timetable-admin-only-banner{display:flex;gap:14px;align-items:center;justify-content:space-between;margin:0 0 18px;padding:14px 18px;border:1px solid #f0c36a;border-radius:16px;background:#fff8df;color:#5b4306;box-shadow:0 8px 24px rgba(36,79,135,.06)}
.timetable-admin-only-banner strong{white-space:nowrap;font-size:1.02rem}.timetable-admin-only-banner span{color:#695a36}
.timetable-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:0 0 18px}.timetable-preview-summary{grid-template-columns:repeat(6,minmax(0,1fr));margin-top:16px}
.timetable-kpi{margin:0;min-height:116px;display:flex;flex-direction:column;justify-content:center}.timetable-kpi span{font-weight:700;color:#5e6c80}.timetable-kpi strong{font-size:1.9rem;color:#193d6b;margin:4px 0}.timetable-kpi small{color:#758197}
.timetable-selected-version{background:#f4f9ff}.timetable-version-actions{min-width:230px;align-items:flex-start}.timetable-version-actions form{display:inline-flex}
.timetable-release-disabled{border:1px dashed #c6cfdb;background:#f8fafc}.timetable-release-disabled h2{color:#667085}
.timetable-detail-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.timetable-detail-chips span{padding:7px 11px;border-radius:999px;background:#edf4fc;color:#315b8e;font-size:.92rem;font-weight:700}
.timetable-upload-card input[type=file]{padding:12px;background:#f8fafc}
.timetable-issue-list{display:grid;gap:9px}.timetable-issue{display:grid;grid-template-columns:70px minmax(0,1fr);gap:10px;align-items:start;padding:11px 13px;border-radius:12px;border:1px solid #d9e2ed;background:#f8fafc}.timetable-issue strong{font-size:.9rem}.timetable-issue.issue-error{background:#fff2f2;border-color:#efb5b5;color:#7f1d1d}.timetable-issue.issue-warning{background:#fff9e8;border-color:#efd38e;color:#684e0b}.timetable-issue.issue-info{background:#f1f7ff;border-color:#bfd6f0;color:#315b8e}
.timetable-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 18px}.timetable-tabs a{display:inline-flex;padding:11px 16px;border-radius:12px;border:1px solid #d3deeb;background:#fff;color:#294c76;font-weight:800;text-decoration:none}.timetable-tabs a.active{background:#244f87;border-color:#244f87;color:#fff;box-shadow:0 7px 18px rgba(36,79,135,.18)}
.timetable-filter-row{display:flex;align-items:end;gap:14px;flex-wrap:wrap}.timetable-filter-row label{min-width:240px;flex:1}.timetable-filter-row label select{width:100%}.timetable-filter-row>div:not(.button-row){display:flex;flex-direction:column;gap:5px;padding:7px 3px}.timetable-filter-row .button-row{margin-left:auto}
.timetable-grid-card{padding:0;overflow:hidden}.timetable-grid-wrap{overflow-x:auto}.timetable-week-grid{width:100%;min-width:920px;border-collapse:separate;border-spacing:0;table-layout:fixed}.timetable-week-grid th,.timetable-week-grid td{border-right:1px solid #e0e7ef;border-bottom:1px solid #e0e7ef;padding:8px;vertical-align:top}.timetable-week-grid thead th{background:#244f87;color:#fff;text-align:center;padding:12px 8px}.timetable-week-grid th:first-child{width:78px}.timetable-week-grid tbody>tr>th{background:#f2f6fb;color:#294c76;text-align:center}.timetable-week-grid tr:last-child th,.timetable-week-grid tr:last-child td{border-bottom:0}.timetable-week-grid th:last-child,.timetable-week-grid td:last-child{border-right:0}
.timetable-course{position:relative;display:flex;flex-direction:column;gap:2px;min-height:68px;padding:8px 9px;border-radius:10px;background:#eef5fd;border-left:4px solid #3f6fa8;margin-bottom:5px}.timetable-course:last-child{margin-bottom:0}.timetable-course strong{font-size:1rem;color:#1d3d64}.timetable-course span{font-size:.9rem;color:#4d6078}.timetable-course small{font-size:.78rem;color:#718096}.timetable-course em{position:absolute;right:6px;top:5px;font-style:normal;font-size:.72rem;font-weight:800;padding:2px 5px;border-radius:999px;background:#fff5ce;color:#755906}.timetable-course.week-odd{background:#fff9e8;border-left-color:#d29d20}.timetable-course.week-even{background:#f2efff;border-left-color:#7b61b3}.timetable-empty-cell{display:block;text-align:center;color:#a2adba;padding:24px 0}
.timetable-school-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.timetable-school-card{position:relative;display:flex;flex-direction:column;gap:5px;min-height:120px;padding:14px;border:1px solid #d5e0ec;border-radius:14px;background:#f8fbff}.timetable-school-card>strong{font-size:1.25rem;color:#244f87}.timetable-school-card>span{font-weight:800;color:#26384f}.timetable-school-card>small{color:#66758a}.timetable-school-card>em{position:absolute;right:10px;top:10px;font-style:normal;font-size:.75rem;padding:3px 7px;border-radius:999px;background:#fff3c7;color:#6c5207}
.badge.badge-danger{background:#fde7e7;color:#a61b1b;border-color:#f2bcbc}
@media(max-width:1100px){.timetable-preview-summary{grid-template-columns:repeat(3,minmax(0,1fr))}.timetable-school-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:820px){.timetable-summary-grid,.timetable-preview-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.timetable-school-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.timetable-admin-only-banner{align-items:flex-start;flex-direction:column}.timetable-filter-row .button-row{margin-left:0;width:100%}}
@media(max-width:560px){.timetable-summary-grid,.timetable-preview-summary,.timetable-school-grid{grid-template-columns:1fr}.timetable-issue{grid-template-columns:1fr}.timetable-tabs a{flex:1 1 calc(50% - 8px);justify-content:center}.timetable-filter-row label{min-width:100%}}

/* v1.22.1 正式課表發布與教師查閱 */
.btn-success{color:#fff;background:#237a48;border-color:#237a48}.btn-success:hover{background:#1c653b;border-color:#1c653b}
.timetable-published-banner{display:flex;gap:14px;align-items:center;justify-content:space-between;margin:0 0 18px;padding:14px 18px;border:1px solid #9fd0b5;border-radius:16px;background:#edf9f2;color:#145a35;box-shadow:0 8px 24px rgba(36,79,135,.06)}
.timetable-published-banner strong{white-space:nowrap;font-size:1.02rem}.timetable-published-banner span{color:#37684e}
.timetable-published-version{background:#eefaf3}.timetable-publish-meta{color:#237a48;font-weight:700}
.timetable-version-release-panel{display:flex;align-items:center;justify-content:space-between;gap:18px;border-left:5px solid #4a75a8}.timetable-version-release-panel h2{margin:2px 0 6px}.timetable-version-release-panel p{margin:0;color:#65748a}.timetable-version-release-panel form{margin:0}
.timetable-view-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px}.timetable-view-toolbar h2{margin:2px 0}.timetable-view-toolbar p{margin:0}
.timetable-release-guide{border:1px solid #cfe0f3;background:#f7fbff}.timetable-release-guide p{margin-bottom:0;color:#52657b}
@media(max-width:820px){.timetable-published-banner,.timetable-version-release-panel,.timetable-view-toolbar{align-items:flex-start;flex-direction:column}.timetable-version-release-panel .button-row,.timetable-view-toolbar .button-row{width:100%}}

/* v1.23.0 學生出缺勤／請假登記中心 */
.attendance-heading{align-items:flex-start}.attendance-summary-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px;margin-bottom:18px}.attendance-kpi{display:flex;flex-direction:column;gap:5px;text-decoration:none;color:inherit;min-height:116px}.attendance-kpi span{font-weight:700;color:#52647c}.attendance-kpi strong{font-size:2rem;color:#17385f}.attendance-kpi small{color:#74839a}.attendance-kpi-danger{border-color:#efb0b0;background:#fff9f9}.attendance-kpi-danger strong{color:#b42318}.attendance-class-checks{display:grid;grid-template-columns:repeat(auto-fit,minmax(135px,1fr));gap:10px}.attendance-class-check{border:1px solid #d8e1ed;border-radius:14px;padding:12px 14px;display:flex;align-items:center;justify-content:space-between;gap:8px;background:#f8fbff}.attendance-class-check strong{font-size:1.05rem}.attendance-class-check span{font-size:.88rem;color:#64748b}.attendance-class-check.is-done{background:#f1fbf4;border-color:#b7dfc2}.attendance-class-check.is-pending{background:#fff9ec;border-color:#ead29d}.attendance-row-pending{background:#fff7f7}.attendance-action-form{display:flex;flex-direction:column;gap:18px}.attendance-history{display:flex;flex-direction:column;gap:0}.attendance-history-item{display:grid;grid-template-columns:150px 1fr 150px;gap:18px;padding:16px 0;border-bottom:1px solid #e5ebf3;align-items:start}.attendance-history-item:last-child{border-bottom:0}.attendance-history-item time,.attendance-history-item>span{color:#66758b;font-size:.92rem}.attendance-history-item p{margin:4px 0;color:#44566f}.attendance-history-item small{color:#66758b}.attendance-roster-counts{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.attendance-roster-counts span{background:#f2f6fb;border:1px solid #dce5f0;border-radius:999px;padding:7px 11px}.attendance-pair-code{font-size:1.7rem;letter-spacing:.18em;color:#174d85}.attendance-class-body{margin:0;background:#eef3f9;color:#182b44}.attendance-class-shell{width:min(1500px,calc(100% - 32px));margin:0 auto;padding:22px 0 44px}.attendance-class-login{max-width:560px;margin:7vh auto}.attendance-pin-input{text-align:center;font-size:2rem;letter-spacing:.25em;font-weight:800;margin-bottom:16px}.attendance-class-header{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;background:#fff;border:1px solid #d9e3ef;border-radius:20px;padding:20px 24px;margin-bottom:16px;box-shadow:0 8px 24px rgba(33,64,101,.07)}.attendance-class-header h1{margin:3px 0 5px;font-size:2rem}.attendance-class-header p{margin:0;color:#60728b}.attendance-class-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}.attendance-student-card{background:#fff;border:2px solid #d8e2ef;border-radius:18px;padding:14px;min-height:150px;display:flex;flex-direction:column;gap:12px;box-shadow:0 5px 16px rgba(32,61,96,.05)}.attendance-student-card.status-pending{border-color:#e59595;background:#fff7f7}.attendance-student-card.status-excused{border-color:#e8cb89;background:#fffaf0}.attendance-student-card.status-late_arrived,.attendance-student-card.status-returned{border-color:#9fd3ae;background:#f5fcf7}.attendance-student-card.status-left_school{border-color:#e8b27e;background:#fff8f1}.attendance-student-id{display:flex;align-items:center;gap:12px}.attendance-student-id strong{display:grid;place-items:center;width:46px;height:46px;border-radius:50%;background:#244f87;color:#fff;font-size:1.25rem}.attendance-student-id span{font-weight:800;font-size:1.08rem}.attendance-student-state{min-height:30px}.attendance-student-actions{margin-top:auto}.attendance-student-actions form,.attendance-student-actions .btn{width:100%}.attendance-complete-form{display:flex;justify-content:center;margin-top:22px}.btn-large{font-size:1.1rem;padding:14px 28px}.btn-danger{background:#b42318;color:#fff;border-color:#b42318}.btn-success{background:#19713a;color:#fff;border-color:#19713a}.badge-danger{background:#fde8e8;color:#a61b1b}.badge-warning{background:#fff0c7;color:#805900}.badge-success{background:#dcf6e5;color:#196b37}.badge-muted{background:#edf2f7;color:#5e6d82}
@media(max-width:1100px){.attendance-summary-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.attendance-class-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:760px){.attendance-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.attendance-class-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.attendance-class-header{flex-direction:column}.attendance-history-item{grid-template-columns:1fr;gap:5px}.attendance-class-shell{width:min(100% - 18px,1500px)}}

.attendance-action-form [hidden]{display:none!important}
.attendance-pin-change{display:flex;gap:6px;align-items:center}.attendance-pin-change input{width:92px;min-width:92px;padding:7px 8px}
.attendance-class-check>div{display:flex;flex-direction:column;gap:2px}.attendance-class-check small{color:#8490a2;font-size:.78rem}.attendance-class-check form{margin:0}.attendance-class-check .btn{white-space:nowrap}

/* v1.23.0.2 attendance class-check permissions / cancellation */
.attendance-check-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;min-width:0}.attendance-cancel-details{position:relative}.attendance-cancel-details>summary{list-style:none;cursor:pointer;border:1px solid #efc0bc;background:#fff5f4;color:#9d241c;border-radius:9px;padding:7px 10px;font-size:.86rem;font-weight:800;white-space:nowrap}.attendance-cancel-details>summary::-webkit-details-marker{display:none}.attendance-cancel-details[open]>summary{background:#fdeceb}.attendance-cancel-form{position:absolute;right:0;top:calc(100% + 7px);z-index:20;width:290px;background:#fff;border:1px solid #d8e1ed;border-radius:12px;padding:12px;box-shadow:0 12px 30px rgba(28,51,78,.16);display:grid;gap:9px}.attendance-cancel-form label{display:grid;gap:5px;font-size:.84rem;font-weight:700;color:#44566f}.attendance-cancel-form select,.attendance-cancel-form input{min-width:0}.attendance-check-history{margin-top:16px;border-top:1px solid #e1e7ef;padding-top:12px}.attendance-check-history>summary{cursor:pointer;font-weight:800;color:#254f82}.attendance-permission-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.attendance-authorized-grid{margin-top:8px}
@media(max-width:980px){.attendance-permission-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.attendance-class-check{align-items:flex-start;flex-direction:column}.attendance-check-actions{width:100%;justify-content:flex-start}.attendance-cancel-form{left:0;right:auto}}
@media(max-width:680px){.attendance-permission-grid{grid-template-columns:1fr}.attendance-cancel-form{position:static;width:100%;margin-top:7px}}

/* v1.23.1 parent online leave */
.attendance-kpi-warning{border-color:#e8d397;background:#fffaf0}.attendance-kpi-warning strong{color:#8a5a00}
.attendance-parent-body{margin:0;background:#eef3f9;color:#182b44}.attendance-parent-shell{width:min(980px,calc(100% - 28px));margin:0 auto;padding:24px 0 46px}.attendance-parent-brand{display:flex;align-items:center;gap:12px;margin-bottom:18px}.attendance-parent-brand .brand-mark{display:grid;place-items:center;width:46px;height:46px;border-radius:14px;background:#244f87;color:#fff;font-size:1.5rem;font-weight:900}.attendance-parent-brand div:last-child{display:flex;flex-direction:column}.attendance-parent-brand strong{font-size:1.05rem}.attendance-parent-brand span{color:#687990;font-size:.9rem}.attendance-parent-login{max-width:620px;margin:4vh auto}.attendance-parent-login form{display:grid;gap:10px}.attendance-parent-login input{text-transform:none}.attendance-parent-note{margin-top:18px;padding:13px 15px;border-radius:12px;background:#fff8e7;border:1px solid #ebd49d;color:#6e5319;line-height:1.7}.attendance-parent-student-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;background:#fff;border:1px solid #d9e3ef;border-radius:18px;padding:20px 22px;margin-bottom:16px}.attendance-parent-student-header h1{margin:3px 0 5px}.attendance-parent-student-header p{margin:0;color:#64748b}.attendance-parent-request-form{display:grid;gap:16px}.attendance-parent-request-form textarea{width:100%;resize:vertical}.attendance-parent-request-form [hidden]{display:none!important}.attendance-parent-request-list{display:grid;gap:10px}.attendance-parent-request-item{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:14px 16px;border:1px solid #dce5ef;border-radius:14px;background:#f9fbfe}.attendance-parent-request-item>div{display:flex;align-items:flex-start;gap:8px}.attendance-parent-request-item>div:first-child{flex-direction:column}.attendance-parent-request-item>div:last-child{align-items:center}.attendance-parent-request-item small,.attendance-parent-request-item span{color:#64748b}.attendance-parent-footer{text-align:center;color:#7b899c;font-size:.86rem;padding:22px 0}.attendance-parent-public-url{padding:14px 16px;background:#f3f7fb;border:1px solid #dbe5ef;border-radius:12px;margin:10px 0 14px;overflow-wrap:anywhere}.attendance-parent-review-summary{grid-template-columns:minmax(220px,320px)}.attendance-parent-review-list{display:grid;gap:14px}.attendance-parent-review-card{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:18px;border:1px solid #dbe4ef;border-radius:16px;padding:18px;background:#fbfdff}.attendance-parent-review-title{display:flex;align-items:center;justify-content:space-between;gap:10px}.attendance-parent-review-main dl{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 18px;margin:14px 0}.attendance-parent-review-main dl div{display:grid;grid-template-columns:82px 1fr;gap:8px}.attendance-parent-review-main dt{color:#6b7c91;font-weight:700}.attendance-parent-review-main dd{margin:0}.attendance-parent-reason,.attendance-parent-review-note{padding:11px 13px;background:#f5f8fc;border-radius:10px;margin-top:10px}.attendance-parent-reason p{margin:5px 0 0;line-height:1.65}.attendance-parent-review-actions{border-left:1px solid #e0e7ef;padding-left:18px;display:flex;flex-direction:column;gap:12px}.attendance-parent-review-actions label{display:grid;gap:6px;font-weight:700;color:#52647c}
@media(max-width:760px){.attendance-parent-student-header{flex-direction:column}.attendance-parent-request-item{align-items:flex-start;flex-direction:column}.attendance-parent-request-item>div:last-child{width:100%;justify-content:space-between}.attendance-parent-review-card{grid-template-columns:1fr}.attendance-parent-review-actions{border-left:0;border-top:1px solid #e0e7ef;padding-left:0;padding-top:14px}.attendance-parent-review-main dl{grid-template-columns:1fr}}
@media(min-width:1101px){.attendance-summary-grid{grid-template-columns:repeat(6,minmax(0,1fr))}}


/* v1.23.1.1 parent activation / dashboard */
.today-count.attendance-parent-pending-stat{background:#c66a2f;color:#fff}.today-count.attendance-parent-pending-stat.dashboard-stat-link,.today-count.attendance-parent-pending-stat.dashboard-stat-link:link,.today-count.attendance-parent-pending-stat.dashboard-stat-link:visited{color:#fff}
.attendance-parent-admin-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:0 0 18px}.attendance-parent-admin-summary .card{display:flex;flex-direction:column;gap:4px;padding:18px}.attendance-parent-admin-summary span{font-weight:800;color:#53677d}.attendance-parent-admin-summary strong{font-size:2.1rem;color:#174d85}.attendance-parent-admin-summary small{color:#78889b}.attendance-parent-class-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:16px}.attendance-parent-class-card{display:grid;gap:7px;padding:15px;border:1px solid #d8e3ef;border-radius:14px;background:#fbfdff;color:#294965;text-decoration:none}.attendance-parent-class-card:link,.attendance-parent-class-card:visited{color:#294965}.attendance-parent-class-card strong{font-size:1.15rem;color:#174d85}.attendance-parent-class-card span{font-weight:800}.attendance-parent-class-card small{color:#718399}.attendance-parent-progress{height:7px;border-radius:999px;background:#e5ebf2;overflow:hidden}.attendance-parent-progress i{display:block;height:100%;background:#2f806d;border-radius:999px}.attendance-parent-activation-student{display:flex;flex-direction:column;gap:4px;margin:14px 0;padding:13px 15px;border:1px solid #dbe5ef;border-radius:12px;background:#f5f8fc}.attendance-parent-activation-student strong{color:#244f87}.attendance-parent-activation-student span{color:#6e7e91;font-size:.9rem}
@media(max-width:850px){.attendance-parent-admin-summary,.attendance-parent-class-grid{grid-template-columns:1fr 1fr}}@media(max-width:560px){.attendance-parent-admin-summary,.attendance-parent-class-grid{grid-template-columns:1fr}}

/* v1.23.2 統一學生名單管理 */
.student-registry-stats,.student-import-stats{margin-bottom:24px}.student-row-inactive{opacity:.82}.table-subtext{display:block;color:#6b7890;margin-top:4px}.button-row.compact{gap:6px;flex-wrap:wrap}.student-change-timeline{display:grid;gap:14px}.student-change-timeline .timeline-item{display:grid;grid-template-columns:18px 1fr;gap:12px;position:relative}.student-change-timeline .timeline-dot{width:12px;height:12px;border-radius:50%;background:#2b5b93;margin-top:7px}.student-change-timeline .timeline-content{border:1px solid #d9e3ef;border-radius:14px;padding:14px 16px;background:#fff}.student-change-timeline small{display:block;color:#6b7890;margin-top:4px}.danger-zone{border-color:#f0c7c7}.danger-zone .btn-danger{background:#a93434;color:#fff;border-color:#a93434}.student-import-stats{grid-template-columns:repeat(5,minmax(0,1fr))}
@media (max-width:980px){.student-import-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.student-registry-stats,.student-import-stats{grid-template-columns:1fr 1fr}}
.student-registry-stats,.student-import-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.student-import-stats{grid-template-columns:repeat(5,minmax(0,1fr))}.student-registry-stats .dashboard-stat,.student-import-stats .dashboard-stat{background:#fff;border:1px solid #d8e2ee;border-radius:18px;padding:20px;box-shadow:0 10px 30px rgba(31,65,105,.06)}.student-registry-stats .dashboard-stat span,.student-import-stats .dashboard-stat span{display:block;color:#51627a;font-weight:700}.student-registry-stats .dashboard-stat strong,.student-import-stats .dashboard-stat strong{display:block;color:#123e73;font-size:34px;line-height:1.15;margin:8px 0}.student-registry-stats .dashboard-stat small,.student-import-stats .dashboard-stat small{color:#7a8799}
@media (max-width:980px){.student-registry-stats,.student-import-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.student-registry-stats,.student-import-stats{grid-template-columns:1fr 1fr}.student-registry-stats .dashboard-stat,.student-import-stats .dashboard-stat{padding:14px}.student-registry-stats .dashboard-stat strong,.student-import-stats .dashboard-stat strong{font-size:28px}}


/* v1.23.2.2 首頁今日課表、節次時間與迷你列印 */
.timetable-period-time{display:block;margin-top:4px;color:#6b7f96;font-size:.72rem;font-weight:700;line-height:1.25;white-space:nowrap}.timetable-week-grid tbody>tr>th .timetable-period-time{color:#627892}.timetable-week-grid th:first-child{width:108px}
.timetable-print-options{position:relative;display:inline-block}.timetable-print-options>summary{list-style:none;cursor:pointer;user-select:none}.timetable-print-options>summary::-webkit-details-marker{display:none}.timetable-print-options[open]>summary{background:#eaf2fb;border-color:#9fb6d1}.timetable-print-options-menu{position:absolute;right:0;top:calc(100% + 7px);z-index:40;display:grid;width:270px;padding:7px;border:1px solid #d4dfeb;border-radius:13px;background:#fff;box-shadow:0 14px 36px rgba(25,55,90,.18)}.timetable-print-options-menu a{display:flex;flex-direction:column;gap:2px;padding:10px 11px;border-radius:9px;color:#244f87;text-decoration:none}.timetable-print-options-menu a:hover{background:#eef5fd}.timetable-print-options-menu strong{font-size:.95rem}.timetable-print-options-menu small{color:#718096;font-size:.78rem}
.dashboard-timetable-card{margin:16px 0 20px;padding:18px 20px;border:1px solid #b9cfe6;border-left:7px solid #2e66a6;border-radius:18px;background:linear-gradient(135deg,#f8fbff 0%,#eef6ff 60%,#f8fbff 100%);box-shadow:0 10px 28px rgba(34,78,126,.10)}
.dashboard-timetable-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:14px}.dashboard-timetable-kicker{display:inline-block;margin-bottom:4px;color:#2c659f;font-size:.78rem;font-weight:900;letter-spacing:.06em}.dashboard-timetable-head h2{margin:0;color:#173e6d;font-size:1.35rem}.dashboard-timetable-head p{margin:5px 0 0;color:#61768d;font-size:.9rem}.dashboard-timetable-actions{display:flex;gap:8px;flex-wrap:wrap}
.dashboard-timetable-focus{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}.dashboard-timetable-status{min-height:96px;padding:14px 16px;border:1px solid #d8e5f2;border-radius:14px;background:#fff}.dashboard-timetable-status>span{display:block;margin-bottom:5px;color:#6c7f94;font-size:.78rem;font-weight:800}.dashboard-timetable-status>strong{display:block;color:#1d446f;font-size:1.08rem}.dashboard-timetable-status>small{display:block;margin-top:6px;color:#718096}.dashboard-timetable-status.is-current{border-color:#77b696;background:#f0fbf5;box-shadow:inset 4px 0 0 #3c8b64}.dashboard-timetable-status.is-next{border-color:#9eb8db;background:#f5f9ff;box-shadow:inset 4px 0 0 #507faf}.dashboard-timetable-status.is-free,.dashboard-timetable-status.is-rest{background:#fafcff}.dashboard-timetable-course-lines{display:flex;gap:7px;flex-wrap:wrap;margin-top:7px}.dashboard-timetable-course-lines b{display:inline-flex;padding:5px 8px;border-radius:8px;background:#fff;color:#244f87;font-size:.9rem;box-shadow:0 1px 5px rgba(30,64,103,.09)}
.dashboard-timetable-strip{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:7px}.dashboard-timetable-period{min-width:0;min-height:74px;padding:8px 7px;border:1px solid #d6e1ed;border-radius:11px;background:#fff;color:#365574;text-decoration:none}.dashboard-timetable-period>span{display:flex;align-items:center;justify-content:space-between;gap:4px;margin-bottom:5px}.dashboard-timetable-period>span b{display:grid;place-items:center;flex:0 0 24px;width:24px;height:24px;border-radius:50%;background:#edf3fa;color:#315f90}.dashboard-timetable-period>span small{color:#7a8999;font-size:.61rem;white-space:nowrap}.dashboard-timetable-period>strong{display:block;color:#244f87;font-size:.76rem;line-height:1.25;overflow-wrap:anywhere}.dashboard-timetable-period.is-empty>strong{color:#a0a9b4;font-weight:600}.dashboard-timetable-period.is-current{border-color:#4a9a70;background:#edf9f2;box-shadow:0 0 0 2px rgba(61,143,102,.13)}.dashboard-timetable-period.is-next{border-color:#5c86b5;background:#f0f6fd}.dashboard-timetable-period em{font-style:normal;color:#8b6711;font-size:.65rem}.dashboard-timetable-unmapped{display:flex;flex-direction:column;gap:5px;padding:14px;border:1px dashed #cfb36a;border-radius:12px;background:#fff9e8;color:#6a5319}
@media(max-width:1000px){.dashboard-timetable-strip{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:700px){.dashboard-timetable-head,.dashboard-timetable-focus{grid-template-columns:1fr;display:grid}.dashboard-timetable-actions{width:100%}.dashboard-timetable-actions .btn{flex:1}.dashboard-timetable-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.timetable-print-options-menu{left:0;right:auto;width:min(270px,82vw)}.timetable-week-grid th:first-child{width:96px}}

/* v1.23.2.4 巡堂特殊時段 */
[data-patrol-teacher-fieldset][hidden]{display:none!important}
.week-table th>small{display:block;margin-top:3px;font-size:.72rem;font-weight:600;color:#718096;white-space:nowrap}


/* v1.23.2.5 patrol timetable integration */
.patrol-class-board{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.patrol-class-card{border:1px solid var(--border-color,#d8e1ec);border-radius:16px;padding:16px;background:#fff}.patrol-class-card.is-normal{border-color:#a9dcc2;background:#f2fbf6}.patrol-class-card.has-record{border-color:#efc47a;background:#fffaf0}.patrol-class-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:1.12rem}.patrol-schedule-line{display:flex;flex-direction:column;gap:3px;min-height:58px;margin:12px 0;color:#26384f}.patrol-schedule-line small{color:#64748b}.patrol-code-mini{font-size:.88rem;color:#8a4c00;min-height:1.4em}.patrol-card-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.patrol-card-actions form{margin:0}.patrol-timetable-snapshot{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:18px}.patrol-timetable-snapshot>div{background:#f5f8fc;border-radius:12px;padding:12px}.patrol-timetable-snapshot span,.patrol-timetable-snapshot small{display:block;color:#64748b}.patrol-timetable-snapshot strong{display:block;margin-top:4px}.patrol-code-group{margin:16px 0}.patrol-code-group h3{font-size:1rem;margin:0 0 8px}.patrol-code-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.patrol-code-choice{display:block}.patrol-code-choice input{position:absolute;opacity:0;pointer-events:none}.patrol-code-choice span{display:flex;gap:8px;align-items:flex-start;border:1px solid #d8e1ec;border-radius:10px;padding:10px 12px;min-height:48px;background:#fff;cursor:pointer}.patrol-code-choice strong{color:#1d4f8f;min-width:28px}.patrol-code-choice input:checked+span{border-color:#2d5b95;background:#edf4ff;box-shadow:0 0 0 1px #2d5b95 inset}.patrol-counts input{max-width:180px}.patrol-detail-form fieldset{margin-bottom:18px}.patrol-variance-grid{grid-template-columns:repeat(5,minmax(0,1fr))}.is-muted{opacity:.6}.patrol-context-form{margin-bottom:16px}@media(max-width:1000px){.patrol-class-board{grid-template-columns:repeat(2,minmax(0,1fr))}.patrol-variance-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:700px){.patrol-class-board,.patrol-timetable-snapshot,.patrol-code-grid{grid-template-columns:1fr}.patrol-variance-grid{grid-template-columns:1fr 1fr}}


/* v1.23.2.5.1 patrol code alignment / visual polish */
.patrol-code-fieldset{padding:18px 20px 20px;border:1px solid #d7e1ed;border-radius:16px;background:#fbfdff}.patrol-code-fieldset>legend{padding:0 8px;font-weight:800;color:#173c6b}.patrol-code-help{margin:0 0 14px;color:#64748b}.patrol-code-group{margin:18px 0 22px}.patrol-code-group:last-child{margin-bottom:0}.patrol-code-group h3{display:flex;align-items:center;gap:8px;margin:0 0 10px;font-size:1.02rem;color:#1f2f46}.patrol-code-group-mark{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:9px;background:#eaf2fd;color:#1d4f8f;font-weight:900;line-height:1}.patrol-code-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.patrol-code-choice{display:grid!important;grid-template-columns:22px minmax(0,1fr);align-items:center;gap:10px;margin:0;padding:0;border:1px solid #d8e1ec;border-radius:12px;background:#fff;cursor:pointer;overflow:hidden;min-height:56px;transition:border-color .15s ease,box-shadow .15s ease,background .15s ease}.patrol-code-choice:hover{border-color:#aac2df;background:#f8fbff}.patrol-code-choice>input[type="checkbox"]{position:static!important;opacity:1!important;pointer-events:auto!important;width:20px!important;min-width:20px!important;height:20px!important;margin:0 0 0 13px!important;padding:0!important;justify-self:start;accent-color:#2d5b95;cursor:pointer}.patrol-code-content{display:grid!important;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:9px;min-height:54px;padding:9px 12px 9px 0!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;cursor:pointer}.patrol-code-badge{display:inline-flex;align-items:center;justify-content:center;min-width:38px;height:30px;padding:0 8px;border-radius:8px;background:#eef4fb;color:#1d4f8f;font-weight:900;font-size:.9rem;letter-spacing:.02em}.patrol-code-text{display:block;min-width:0;line-height:1.45;color:#1e293b;font-weight:650}.patrol-code-choice>input[type="checkbox"]:checked+.patrol-code-content{background:#edf5ff!important}.patrol-code-choice>input[type="checkbox"]:checked+.patrol-code-content .patrol-code-badge{background:#2d5b95;color:#fff}.patrol-code-choice:has(>input[type="checkbox"]:checked){border-color:#2d5b95;background:#edf5ff;box-shadow:0 0 0 1px #2d5b95 inset}.patrol-code-choice:focus-within{outline:3px solid rgba(45,91,149,.18);outline-offset:2px}.patrol-code-group-s .patrol-code-group-mark{background:#eaf8f0;color:#237a4b}.patrol-code-group-e .patrol-code-group-mark{background:#fff4df;color:#9a6200}.patrol-code-group-m .patrol-code-group-mark{background:#f3edff;color:#6d43a5}.patrol-code-group-o .patrol-code-group-mark{background:#fdecec;color:#a83a3a}@media(max-width:900px){.patrol-code-grid{grid-template-columns:1fr}}@media(max-width:520px){.patrol-code-fieldset{padding:14px 12px 16px}.patrol-code-choice{grid-template-columns:22px minmax(0,1fr);gap:8px}.patrol-code-choice>input[type="checkbox"]{margin-left:10px!important}.patrol-code-content{grid-template-columns:auto minmax(0,1fr);padding-right:9px!important}.patrol-code-badge{min-width:34px;padding:0 6px}.patrol-code-text{font-size:.95rem}}
