:root{--ink:#1b202b;--muted:#687286;--line:#e7e9ed;--wash:#f6f7f9;--red:#c9223b;--ok:#167451;--bad:#b12b3e}
*{box-sizing:border-box}body{margin:0;background:var(--wash);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"PingFang TC","Noto Sans TC","Microsoft JhengHei",sans-serif;line-height:1.65}button,input,select{font:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{opacity:.5;cursor:wait}input,select{border:1px solid #cbd2dd;border-radius:10px;background:white;padding:10px 12px;min-height:44px;max-width:100%;color:var(--ink)}input:focus-visible,select:focus-visible,button:focus-visible,a:focus-visible{outline:3px solid #eaa2af;outline-offset:3px}label{font-size:13px;font-weight:700}.hidden{display:none!important}.shell{max-width:1240px;margin:0 auto;padding:32px 24px 60px}.pageHead{display:flex;justify-content:space-between;align-items:center;gap:24px;margin-bottom:30px}.pageHead nav{display:flex;gap:10px;flex-wrap:wrap}.eyebrow{color:#b1263c;font-size:11px;font-weight:800;letter-spacing:.15em}h1{font-size:clamp(28px,4vw,38px);line-height:1.3;margin:5px 0}h2{font-size:20px;margin:0;line-height:1.4}h3{font-size:16px;margin:0 0 12px}p{margin:8px 0}.muted{color:var(--muted)}.small{font-size:12px}.card{background:white;border:1px solid var(--line);border-radius:20px;box-shadow:0 16px 44px rgba(30,39,63,.035)}.btn{display:inline-flex;justify-content:center;align-items:center;gap:7px;border:1px solid #dce1e8;background:white;border-radius:11px;min-height:43px;padding:9px 14px;color:#303744;font-weight:750;font-size:13px;text-decoration:none;white-space:nowrap}.btn.primary{background:var(--red);border-color:var(--red);color:white}.loginCard{max-width:470px;margin:65px auto;padding:32px}.loginCard h2{margin:8px 0 12px}.loginCard .muted{font-size:14px}.loginCard form{display:grid;gap:10px;margin-top:26px}.loginCard button{margin-top:8px}.message{font-size:13px;min-height:1.65em;margin:12px 0;color:var(--muted);overflow-wrap:anywhere}.message.error{color:var(--bad)}.message.success{color:var(--ok)}.overview{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:22px}.metric{padding:20px 22px}.metric>span{font-size:13px;color:var(--muted);font-weight:700}.metric>strong{display:block;font-size:36px;line-height:1.3;margin:8px 0;color:#243b32}.metric:nth-child(2)>strong{color:#a36b1e}.metric:nth-child(3)>strong{color:#7b8493}.metric>small{font-size:11px;color:var(--muted)}.rosterCard,.detailCard{padding:24px}.detailCard{margin-top:22px;scroll-margin-top:20px}.sectionHead{display:flex;justify-content:space-between;align-items:center;gap:16px}.sectionHead p{margin-bottom:0}.settings{background:#f8f9fb;border:1px solid var(--line);border-radius:12px;padding:14px;display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin:22px 0}.settings input{width:83px}.settings>p{width:100%;margin:0}.filters{display:flex;gap:15px;align-items:end;flex-wrap:wrap}.filters>div{display:grid;gap:5px}.filters input{width:190px}.filters select{min-width:170px}.tableScroll{overflow-x:auto;width:100%;border:1px solid var(--line);border-radius:12px}table{border-collapse:collapse;width:100%;font-size:13px;min-width:860px}th,td{text-align:left;padding:13px 12px;border-bottom:1px solid var(--line);vertical-align:middle}th{background:#f8f9fb;color:#566170;font-size:12px;white-space:nowrap}tr:last-child td{border-bottom:0}.seatNumber{font-size:18px;font-weight:800}.stamp{white-space:nowrap;line-height:1.5;font-variant-numeric:tabular-nums;font-size:12px}.stamp .date{display:block;color:var(--muted);font-size:11px}.status{display:inline-flex;border-radius:30px;padding:4px 10px;font-size:12px;font-weight:700;white-space:nowrap}.status.submitted{background:#e8f7ef;color:var(--ok)}.status.in_progress{background:#fff3df;color:#8f601e}.status.not_started{background:#eef0f4;color:#687286}.scoreCell{font-size:18px;font-weight:800;white-space:nowrap}.tableFoot{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:12px 0}.emptyRow{text-align:center;padding:35px;color:var(--muted)}.historyBar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:22px}.historyBar select{min-width:280px;flex:1}.detailStats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:18px 0}.detailStat{background:#f7f8fa;border-radius:12px;padding:12px}.detailStat span{display:block;color:var(--muted);font-size:12px}.detailStat strong{display:block;font-size:17px;margin-top:5px}.detailStat .stamp{font-size:14px}.notice{border:1px solid #f0dfbd;background:#fff9ed;border-radius:12px;padding:13px 15px;color:#7b5925;font-size:13px;margin:16px 0}.notice.neutral{border-color:#dde3ec;background:#f8faff;color:#58667a}.detailTable{min-width:540px}.detailTable .char{font-size:25px;font-weight:800}.inkThumb{display:block;width:80px;height:80px;border:1px solid var(--line);border-radius:8px;background:white}.questionNumber{font-weight:800;color:var(--bad)}.reason{max-width:460px;font-size:13px}.detailPass{color:var(--ok);font-weight:700}.progressTrack{height:7px;border-radius:10px;overflow:hidden;background:#e7e9ed;margin:15px 0}.progressFill{height:100%;background:var(--red)}.srOnly{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.recordNote{font-size:11px;color:var(--muted);margin-top:4px}.recordNote.warn{color:#97651e}
@media(max-width:850px){.overview{grid-template-columns:repeat(2,minmax(0,1fr))}.detailStats{grid-template-columns:repeat(2,minmax(0,1fr))}.pageHead{align-items:flex-start}.pageHead nav{justify-content:flex-end}.rosterCard,.detailCard{padding:20px}}
@media(max-width:520px){.shell{padding:22px 14px 40px}.pageHead{flex-direction:column;gap:16px;margin-bottom:22px}.pageHead nav{justify-content:flex-start}.overview{gap:9px}.metric{padding:16px}.metric>strong{font-size:30px}.metric>small{display:block;line-height:1.5}.rosterCard,.detailCard{padding:16px}.sectionHead{align-items:flex-start}.sectionHead h2{font-size:18px}.sectionHead .btn{padding:8px 10px}.settings{gap:7px}.settings .btn{width:100%}.filters{gap:10px}.filters>div{flex:1;min-width:120px}.filters input,.filters select{width:100%;min-width:0}.loginCard{margin:28px 0;padding:25px}.historyBar select{min-width:0;width:100%;flex-basis:100%;font-size:13px}.detailStat{padding:10px}.detailStat strong{font-size:15px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
