/* ─── 公佈欄:116 碩士班考試日程(資料在 /bulletin.json) ─── */
.bb-entry{position:relative;flex:none;display:inline-flex;align-items:center;gap:6px;white-space:nowrap;cursor:pointer;
  min-height:32px;padding:0 12px;margin-right:6px;border-radius:999px;font-size:var(--text-sm);font-weight:600;
  color:var(--fg);background:var(--hover);border:1px solid var(--border-soft)}
.bb-entry:hover{background:var(--selected);color:var(--fg-2)}
.bb-entry:focus-visible{outline:2px solid var(--ring);outline-offset:2px}
.bb-entry svg{flex:none}
.bb-entry[hidden]{display:none}
.bb-entry .bb-dot{position:absolute;top:-2px;right:-2px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;
  background:var(--danger);color:#fff;font-size:11px;line-height:18px;text-align:center;font-weight:700;
  box-shadow:0 0 0 2px var(--bg)}
.bb-entry .bb-dot:empty{display:none}
.bb-entry-short{display:none}
/* 手機:標題列放不下,改放在頂端可橫向捲動的科目列 */
.bb-rail{display:none}
.bb-rail .srv{position:relative}
.bb-rail .bb-dot{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;
  background:var(--danger);color:#fff;font-size:11px;line-height:18px;text-align:center;font-weight:700;box-shadow:0 0 0 2px var(--surface-warm)}
.bb-rail .bb-dot:empty{display:none}
.bb-rail .srv[hidden]{display:none}
@media(max-width:620px){.bb-rail{display:block}.chat-hd .bb-entry{display:none}}

.bb{position:fixed;inset:0;z-index:50;background:var(--backdrop);display:flex;align-items:center;justify-content:center;padding:3vh 3vw}
.bb[hidden]{display:none}
.bb:not([hidden]){animation:fade-in 160ms var(--ease-standard)}
.bb-box{position:relative;width:min(880px,100%);max-height:94vh;display:flex;flex-direction:column;
  background:var(--surface);border-radius:var(--radius-md);overflow:hidden;
  box-shadow:var(--elev-raised),0 24px 64px rgba(0,0,0,.5)}
.bb:not([hidden]) .bb-box{animation:lb-pop-in 220ms var(--ease-standard)}
.bb-hd,.bb-tabs,.bb-ft{flex:none}
.bb-hd{display:flex;align-items:flex-start;gap:12px;padding:14px 12px 10px 20px}
.bb-hd h2{font-size:var(--text-lg);font-weight:700;color:var(--fg-2);line-height:1.3}
.bb-sub{font-size:var(--text-sm);color:var(--muted);margin-top:2px}
.bb-hd .sp{flex:1}
.bb-tabs{display:flex;gap:4px;padding:0 16px;border-bottom:1px solid var(--surface-warm);overflow-x:auto;scrollbar-width:none}
.bb-tabs::-webkit-scrollbar{display:none}
.bb-tab{border:0;background:transparent;color:var(--muted);font-weight:600;font-size:var(--text-sm);cursor:pointer;
  padding:10px 12px;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}
.bb-tab:hover{color:var(--fg)}
.bb-tab[aria-selected=true]{color:var(--fg-2);border-bottom-color:var(--accent)}
.bb-tab:focus-visible{outline:2px solid var(--ring);outline-offset:-2px}
.bb-body{overflow-y:auto;overscroll-behavior:contain;padding:16px 20px 20px}
.bb-panel[hidden]{display:none}
.bb-ft{padding:10px 20px;font-size:var(--text-xs);color:var(--muted);border-top:1px solid var(--surface-warm);line-height:1.6}
.bb-ft b{color:var(--fg)}
.bb-msg{color:var(--muted);font-size:var(--text-sm);padding:24px 0;text-align:center}

/* 近期 */
.bb-h3{font-size:var(--text-xs);font-weight:700;letter-spacing:.04em;color:var(--muted);margin:18px 0 8px}
.bb-h3:first-child{margin-top:0}
.bb-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.bb-ev{display:grid;grid-template-columns:88px 1fr auto;gap:2px 12px;align-items:center;
  padding:10px 12px;border-radius:var(--radius-md);background:var(--bg)}
.bb-ev.is-soon{box-shadow:inset 3px 0 0 var(--warn)}
.bb-ev.is-today{box-shadow:inset 3px 0 0 var(--danger)}
.bb-ev.is-past{opacity:.55}
.bb-date{font-variant-numeric:tabular-nums;color:var(--fg-2);font-weight:600;font-size:var(--text-sm);line-height:1.3}
.bb-date small{display:block;white-space:nowrap;color:var(--muted);font-weight:400;font-size:var(--text-xs)}
.bb-what{min-width:0;font-size:var(--text-sm);line-height:1.45}
.bb-what b{color:var(--fg-2)}
.bb-kind{display:inline-block;font-size:11px;font-weight:700;padding:1px 6px;border-radius:var(--radius-sm);margin-right:6px;vertical-align:1px;
  background:var(--selected);color:var(--fg)}
.bb-kind.k-apply{background:color-mix(in oklab,var(--accent) 30%,transparent);color:var(--mention-fg)}
.bb-kind.k-close{background:color-mix(in oklab,var(--danger) 28%,transparent);color:color-mix(in oklab,var(--danger) 35%,var(--fg-2))}
.bb-kind.k-exam{background:color-mix(in oklab,var(--warn) 28%,transparent);color:color-mix(in oklab,var(--warn) 45%,var(--fg-2))}
.bb-kind.k-result{background:color-mix(in oklab,var(--success) 28%,transparent);color:color-mix(in oklab,var(--success) 40%,var(--fg-2))}
.bb-tent{color:var(--muted);font-size:var(--text-xs);margin-left:4px}
.bb-left{font-size:var(--text-xs);font-weight:700;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.is-soon .bb-left{color:var(--warn)}
.is-today .bb-left{color:var(--danger)}
.bb-more{margin-top:8px}

/* 筆試日 */
.bb-exam{border-radius:var(--radius-md);background:var(--bg);margin-bottom:8px;overflow:hidden}
.bb-exam>summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:88px 1fr auto auto;gap:2px 12px;align-items:center;padding:10px 12px}
.bb-exam>summary::-webkit-details-marker{display:none}
.bb-exam>summary:hover{background:var(--hover)}
.bb-exam>summary:focus-visible{outline:2px solid var(--ring);outline-offset:-2px}
.bb-chev{transition:transform var(--motion-base) var(--ease-standard);color:var(--muted)}
.bb-exam[open] .bb-chev{transform:rotate(180deg)}
.bb-clash{color:var(--warn);font-size:var(--text-xs);font-weight:700;margin-left:6px}
.bb-sess{width:100%;border-collapse:collapse;font-size:var(--text-sm)}
.bb-sess td{padding:7px 12px;border-top:1px solid var(--border-soft);vertical-align:top}
.bb-sess td:first-child{white-space:nowrap;color:var(--muted);width:1%}
.bb-sess td:nth-child(2){white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--fg-2);width:1%}
.bb-ref{font-size:11px;color:var(--muted);margin-left:6px}
.bb-note{padding:8px 12px 10px;font-size:var(--text-xs);color:var(--muted);border-top:1px solid var(--border-soft);line-height:1.6}

/* 各校 */
.bb-schools{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:10px}
.bb-sch{border-radius:var(--radius-md);background:var(--bg);padding:12px 14px}
.bb-sch-hd{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}
.bb-sch-hd b{font-size:var(--text-base);color:var(--fg-2)}
.bb-st{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px}
.bb-st.st-published{background:color-mix(in oklab,var(--success) 28%,transparent);color:color-mix(in oklab,var(--success) 40%,var(--fg-2))}
.bb-st.st-partial{background:color-mix(in oklab,var(--warn) 25%,transparent);color:color-mix(in oklab,var(--warn) 45%,var(--fg-2))}
.bb-st.st-pending{background:var(--selected);color:var(--muted)}
.bb-exp{font-size:var(--text-xs);color:var(--muted)}
.bb-grp{border-top:1px solid var(--border-soft);padding-top:8px;margin-top:8px}
.bb-grp-name{font-weight:600;color:var(--fg-2);font-size:var(--text-sm);margin-bottom:4px}
.bb-kv{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;margin:0;font-size:var(--text-xs);line-height:1.55}
.bb-kv dt{color:var(--muted)}
.bb-kv dd{margin:0;color:var(--fg)}
.bb-links{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:10px;font-size:var(--text-xs)}
.bb-links a{color:var(--mention-fg);text-decoration:none;font-weight:600}
.bb-links a:hover{color:var(--fg-2);text-decoration:underline}

@media (max-width:860px){
  .bb{padding:0}
  .bb-box{max-height:100vh;height:100%;border-radius:0}
  .bb-body{padding:12px 12px 20px}
  .bb-hd{padding:12px 8px 8px 16px}
  .bb-tabs{padding:0 8px}
  .bb-ev{grid-template-columns:72px 1fr auto;gap:2px 10px}
  .bb-exam>summary{grid-template-columns:72px 1fr auto auto;gap:2px 8px}
  .bb-schools{grid-template-columns:1fr}
  .bb-tab{padding:12px}
}
@media (prefers-reduced-motion: reduce){
  .bb:not([hidden]),.bb:not([hidden]) .bb-box{animation:none}
  .bb-chev{transition:none}
}
