/* 電腦教室登記系統 — 2026-08-27 前台美化改版
   視覺：編輯風版面 ＋ MGTCC（cc.mgt.ncu.edu.tw）深藍配色 */
:root{
  --ink:#2e353b;
  --muted:#5c6770;
  --faint:#8b97a3;
  --bg:#f3f6f9;
  --surface:#ffffff;
  --line:#e6ebf1;
  --line-strong:#9db0c4;
  --primary:#003366;
  --primary-dark:#00224d;
  --primary-soft:#e8eef5;
  --link:#0056b3;
  --free-bg:#ffffff;
  --free-hover:#eaf1f8;
  --closed-bg:#eef1f4;
  --pending-bg:#f0e3c8;
  --pending-bd:#b8912f;
  --pending-ink:#77590e;
  --approved-bg:#f0dcd4;
  --approved-bd:#b5674c;
  --approved-ink:#8a4028;
  --danger:#b23b2e;
  --danger-dark:#8f2f24;
  --radius:0;
  --mono:ui-monospace,"SFMono-Regular",Menlo,Consolas,"Liberation Mono",monospace;
  --sans:"Noto Sans TC","PingFang TC","Microsoft JhengHei",system-ui,-apple-system,"Segoe UI",sans-serif;
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  font-family:var(--sans);
  color:var(--ink);
  background:var(--bg);
  line-height:1.6;
}
a{color:var(--link);text-decoration:none}
a:hover{color:var(--primary-dark);text-decoration:underline}

/* ── Topbar ── */
.topbar{background:var(--primary)}
.topbar__inner{
  max-width:1040px;margin:0 auto;padding:0 20px;
  height:62px;display:flex;align-items:center;justify-content:space-between;gap:16px;
}
.brand{display:flex;align-items:center;gap:10px;color:#ffffff}
.brand:hover{text-decoration:none;color:#ffffff}
.brand__name{font-weight:900;letter-spacing:.08em;font-size:18px}
.nav{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.nav a{
  padding:7px 12px;border-radius:0;color:#c5d3e3;font-size:15px;font-weight:700;
}
.nav a:hover{background:rgba(255,255,255,.10);color:#ffffff;text-decoration:none}
.nav a.is-active{color:#ffffff;background:rgba(255,255,255,.16)}
.nav__muted{color:#8fb9e8!important;font-weight:400!important;font-size:13px!important}
.nav__sep{width:1px;height:16px;background:rgba(197,211,227,.4);margin:0 6px}

/* ── Layout ── */
.wrap{max-width:1040px;margin:0 auto;padding:30px 20px 44px}
.foot{background:var(--primary);margin-top:24px}
.foot__inner{max-width:1040px;margin:0 auto;padding:16px 20px;color:#8fb9e8;font-size:13px}

h1{font-size:29px;font-weight:900;letter-spacing:.02em;line-height:1.25;margin:0 0 6px}
h2{font-size:18px;font-weight:700;margin:0 0 12px}
.lead{color:var(--muted);margin:0 0 22px;padding-bottom:16px;border-bottom:3px solid var(--primary)}

/* ── Cards ── */
.card{
  background:var(--surface);border:2px solid var(--primary);border-radius:0;
  padding:22px;margin-bottom:20px;
}
.card--tight{padding:16px}
.card--result{border:1px solid #c5d3e3;border-top:4px solid var(--primary);padding:20px 24px}
.card--result-approved{border-top-color:#2f7d4f}
.card--result-rejected{border-top-color:#8b97a3}

/* ── Flash ── */
.flash{padding:12px 16px;border-radius:0;margin-bottom:16px;font-size:15px;border:1px solid}
.flash--info{background:var(--primary-soft);border-color:#c5d3e3;color:var(--primary-dark)}
.flash--success{background:#e0efe5;border-color:#7ab08c;color:#1f6b35}
.flash--error{background:#fbe3df;border-color:#e3a89e;color:var(--danger-dark)}

/* ── Forms ── */
.form-row{margin-bottom:16px}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
label.lbl{display:block;font-weight:700;font-size:14px;margin-bottom:6px}
.req{color:var(--danger)}
input[type=text],input[type=email],input[type=tel],input[type=number],
input[type=password],input[type=date],select,textarea{
  width:100%;padding:9px 11px;border:1px solid var(--line-strong);border-radius:0;
  font-size:15px;font-family:inherit;color:var(--ink);background:#fff;
}
textarea{resize:vertical;min-height:72px}
input:focus,select:focus,textarea:focus{
  outline:2px solid var(--primary);outline-offset:1px;border-color:var(--primary);
}
.hint{color:var(--muted);font-size:13px;margin-top:4px}
.field-err{color:var(--danger);font-size:13px;margin-top:4px}
.honeypot{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* ── Buttons ── */
.btn{
  display:inline-block;border:1px solid var(--primary);border-radius:0;
  padding:9px 20px;font-size:15px;font-family:inherit;font-weight:700;cursor:pointer;
  background:var(--primary);color:#fff;
}
.btn:hover{background:var(--primary-dark);border-color:var(--primary-dark);color:#fff;text-decoration:none}
.btn--ghost{background:#fff;color:var(--ink);border-color:var(--line-strong)}
.btn--ghost:hover{background:var(--primary-soft);color:var(--primary-dark);border-color:var(--line-strong)}
.btn--danger{background:var(--danger);border-color:var(--danger)}
.btn--danger:hover{background:var(--danger-dark);border-color:var(--danger-dark)}
.btn--sm{padding:5px 12px;font-size:13px}
.btn:focus-visible{outline:2px solid var(--primary-dark);outline-offset:2px}

/* ── Pills / status ── */
.pill{display:inline-block;padding:2px 12px;border-radius:999px;font-size:13px;font-weight:700;border:1px solid}
.pill--pending{background:var(--pending-bg);border-color:var(--pending-bd);color:var(--pending-ink)}
.pill--approved{background:#e0efe5;border-color:#7ab08c;color:#1f6b35}
.pill--rejected{background:#eceff1;border-color:var(--line-strong);color:var(--muted)}
.pill--danger{background:#fbe3df;border-color:#e3a89e;color:var(--danger-dark)}

.code{font-family:var(--mono);letter-spacing:.12em;font-weight:700;color:var(--primary)}

/* ── Availability toolbar ── */
.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.toolbar form{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.daynav{display:inline-flex;border:1px solid var(--primary);border-radius:0;overflow:hidden}
.daynav a{padding:8px 13px;color:var(--primary);background:#fff;border-right:1px solid var(--primary)}
.daynav a:last-child{border-right:0}
.daynav a:nth-child(2){background:var(--primary);color:#fff;font-weight:700}
.daynav a:hover{background:var(--primary-soft);text-decoration:none}
.daynav a:nth-child(2):hover{background:var(--primary-dark);color:#fff}

.legend{display:flex;gap:16px;flex-wrap:wrap;color:var(--muted);font-size:13px;margin-bottom:14px}
.legend span{display:inline-flex;align-items:center;gap:6px}
.swatch{width:13px;height:13px;border-radius:0;border:1px solid}
.swatch--free{background:var(--free-bg);border-color:#a6b0ba}
.swatch--closed{background:var(--closed-bg);border-color:#a6b0ba}
.swatch--pending{background:var(--pending-bg);border-color:var(--pending-bd)}
.swatch--approved{background:var(--approved-bg);border-color:var(--approved-bd)}

/* ── Availability grid ── */
.grid-scroll{overflow-x:auto;border:2px solid var(--primary);border-radius:0;background:#fff}
table.grid{border-collapse:collapse;width:100%;font-size:12px}
table.grid th,table.grid td{border:1px solid var(--line);text-align:center}
table.grid thead th{
  background:#ffffff;color:var(--ink);font-family:var(--mono);font-weight:500;
  padding:6px 2px;white-space:nowrap;position:sticky;top:0;
  border-bottom:2px solid var(--primary);
}
table.grid th.room{
  position:sticky;left:0;z-index:2;background:#ffffff;text-align:left;
  padding:8px 12px;min-width:150px;font-family:var(--sans);color:var(--ink);
}
table.grid thead th.room{z-index:3}
table.grid td{height:30px;min-width:26px;padding:0}
.cell{display:block;width:100%;height:30px}
.cell--free{background:var(--free-bg)}
a.cell--free:hover{background:var(--free-hover)}
.cell--closed{background:var(--closed-bg);cursor:not-allowed}
.cell--pending{background:var(--pending-bg);box-shadow:inset 0 3px 0 var(--pending-bd)}
.cell--approved{background:var(--approved-bg);box-shadow:inset 0 3px 0 var(--approved-bd)}

/* ── 占用區塊（rowspan 合併儲存格，文字直接顯示於格內） ── */
td.occ{position:relative;padding:0;vertical-align:top}
td.occ--approved{background:var(--approved-bg);color:var(--approved-ink);border-top:3px solid var(--approved-bd)}
td.occ--pending{background:var(--pending-bg);color:var(--pending-ink);border-top:3px solid var(--pending-bd)}
.occ__in{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;
  padding:4px 6px;text-align:left;font-size:11px;line-height:1.35;word-break:break-word}
.occ__time{font-weight:900;white-space:nowrap}
.occ__tag{display:inline-block;margin-left:4px;padding:0 4px;border:1px solid currentColor;
  border-radius:0;font-size:10px;font-weight:400;vertical-align:1px;white-space:nowrap}
.occ__purpose{margin-top:2px}
.occ__unit{opacity:.8}
.occ__more{margin-top:2px;font-size:10px;opacity:.8}
.room-meta{display:block;color:var(--faint);font-size:11px;font-weight:400}

/* ── Weekly grid (single room: time rows × date columns) ── */
table.grid.week tbody th.timecol{height:30px}
table.grid.week th.timecol{
  position:sticky;left:0;z-index:2;background:#ffffff;
  font-family:var(--mono);font-weight:500;color:var(--muted);
  padding:4px 10px;text-align:right;white-space:nowrap;min-width:66px;font-size:12px;
}
table.grid.week thead th.timecol{z-index:3}
table.grid.week thead th.day{
  min-width:84px;padding:6px 4px;font-family:var(--sans);color:var(--ink);font-weight:900;font-size:14px;
}
table.grid.week thead th.day .dow{display:block;color:var(--muted);font-weight:400;font-size:11px;margin-top:2px}
table.grid.week thead th.day.is-today{color:var(--primary-dark);background:var(--primary-soft)}
table.grid.week td{min-width:84px}

/* 頁首列：標題＋教室切換器同列，底部粗藍線 */
.pagehead{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;flex-wrap:wrap;border-bottom:3px solid var(--primary);padding-bottom:16px;margin-bottom:20px}
.pagehead>div:first-child{min-width:260px}
.pagehead .lead{border-bottom:0;padding-bottom:0;margin-bottom:0}
.pagehead .switcher{margin-bottom:4px}

/* 教室切換列 */
.switcher{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.switcher select{width:auto;background:var(--primary);color:#fff;border-color:var(--primary);font-weight:700;padding:8px 14px;cursor:pointer}
.switcher select:focus{outline:2px solid var(--primary-dark);outline-offset:2px}
.roomcard{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.roomcard__name{font-weight:900;font-size:16px}

/* ── Data tables ── */
.table-scroll{overflow-x:auto}
table.data{border-collapse:collapse;width:100%;font-size:14px;background:#fff}
table.data th,table.data td{border-bottom:1px solid var(--line);padding:10px 12px;text-align:left;vertical-align:top}
table.data thead th{background:#ffffff;color:var(--ink);font-size:13px;font-weight:700;white-space:nowrap;border-bottom:2px solid var(--primary)}
table.data tbody tr:hover{background:#f6f9fc}
.nowrap{white-space:nowrap}
.t-time{font-family:var(--mono);font-size:13px}

/* ── Day schedule list ── */
.sched{margin-top:20px}
.sched h2{font-size:16px}
.sched-room{margin-bottom:14px}
.sched-room__name{font-weight:700;margin-bottom:4px}
.sched-room ul{margin:0;padding-left:18px;color:var(--muted)}
.sched-empty{color:var(--faint)}

/* ── Misc ── */
.muted{color:var(--muted)}
.center{text-align:center}
.stack>*+*{margin-top:10px}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;font-size:15px}
.kv dt{color:var(--muted)}
.kv dd{margin:0}
hr.sep{border:0;border-top:1px solid var(--line);margin:20px 0}

@media (max-width:680px){
  .form-grid{grid-template-columns:1fr}
  .topbar__inner{height:auto;padding:10px 16px;flex-direction:column;align-items:flex-start;gap:8px}
  h1{font-size:23px}
}
@media (prefers-reduced-motion:reduce){
  *{transition:none!important;animation:none!important}
}
