:root{--navy:#1F3864;--navy-deep:#16294A;--ink:#1F2A3C;--gold:#C9A227;--gold-soft:#F6EED6;--paper:#F6F7F9;--line:#DCE1E8;--muted:#5F6B7A;--ok:#1E7A4C;--bad:#B03A2E;--teal:#17876D;
--sans:"PingFang TC","Noto Sans TC","Microsoft JhengHei",system-ui,sans-serif;--kai:"Kaiti TC","STKaiti","BiauKai","DFKai-SB",serif}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--sans);color:var(--ink);background:#fff;line-height:1.7;font-size:16px}
a{color:var(--navy)}
[hidden]{display:none!important}
.nav{position:sticky;top:0;background:rgba(255,255,255,.97);border-bottom:1px solid var(--line);z-index:10}
.nav .in,.wrap,footer .in{max-width:1080px;margin:0 auto;padding:0 20px}
.nav .in{display:flex;align-items:center;gap:18px;height:72px}
.nav .logo{display:flex;align-items:center;gap:10px;font-family:var(--kai);font-size:20px;color:var(--navy);text-decoration:none;letter-spacing:.06em;margin-right:auto}
.nav .logo img{height:52px;width:auto}
.nav .logo small{display:block;font-family:var(--sans);font-size:10.5px;letter-spacing:.12em;color:var(--muted);line-height:1}
.nav a.l{color:var(--ink);text-decoration:none;font-size:15px}
.nav .lang{font-size:14px;color:var(--muted);text-decoration:none}
.who{font-size:14px;color:var(--muted)}
.btn{display:inline-block;border:1px solid var(--navy);background:var(--navy);color:#fff;padding:10px 20px;border-radius:4px;text-decoration:none;font-size:15.5px;cursor:pointer;font-family:inherit}
.btn:hover{background:var(--navy-deep)}.btn.ghost{background:transparent;color:var(--navy)}.btn.sm{padding:5px 12px;font-size:14px}
.btn:disabled{opacity:.45;cursor:not-allowed}
.wrap{padding-top:32px;padding-bottom:40px}
h1{font-family:var(--kai);font-size:40px;color:var(--navy);letter-spacing:.06em;line-height:1.25;margin-bottom:14px}
h2{font-family:var(--kai);font-size:28px;color:var(--navy);letter-spacing:.04em;margin-bottom:16px}
h3{font-size:17px;color:var(--navy);margin-bottom:6px}
.hero{display:grid;grid-template-columns:1.1fr 1fr;gap:36px;align-items:start}
.lead{font-size:17px;margin-bottom:14px}
.ticks{list-style:none}.ticks li{padding-left:24px;position:relative;margin:6px 0}
.ticks li:before{content:"";position:absolute;left:4px;top:.55em;width:9px;height:9px;background:var(--gold);border-radius:50%}
.card{background:#fff;border:1px solid var(--line);border-radius:8px;padding:20px;box-shadow:0 1px 3px rgba(20,30,60,.05);margin-bottom:18px}
.tabs{display:flex;gap:6px;margin-bottom:14px}
.tab{flex:1;border:1px solid var(--line);background:var(--paper);padding:8px;border-radius:4px;cursor:pointer;font:inherit;color:var(--muted)}
.tab.on{background:var(--navy);color:#fff;border-color:var(--navy)}
.form label{display:block;font-size:14px;color:var(--muted);margin-bottom:10px}
.form input:not([type=checkbox]),.form select{display:block;width:100%;margin-top:3px;padding:9px 10px;border:1px solid var(--line);border-radius:4px;font:inherit;color:var(--ink);background:#fff}
.form .chk{display:flex;gap:8px;align-items:flex-start;color:var(--ink)}.form .chk input{margin-top:6px}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.msg{color:var(--bad);font-size:14px;margin-top:8px;min-height:1em}
.hint{color:var(--muted);font-size:13.5px;margin-top:6px}
.levels{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:22px}
.levels div{background:var(--paper);border-top:3px solid var(--navy);padding:12px 14px;border-radius:4px}
.levels b{display:block;color:var(--navy)}.levels span{font-size:14px;color:var(--muted)}
.sets{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}
.set h3{margin:4px 0 2px;font-size:18px}.set .zh{color:var(--muted);font-size:14px}
.set .info{font-size:13.5px;color:var(--muted);margin:6px 0 10px}
.badge{font-size:12.5px;border-radius:10px;padding:0 8px;background:var(--paper);color:var(--muted);white-space:nowrap}
.badge.done{background:#E3F3EA;color:var(--ok)}
.back{display:inline-block;margin-bottom:12px;text-decoration:none;font-size:14.5px}
.phead{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:8px}
.meta{color:var(--muted);font-size:14px}
.pctl{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.pctl input[type=range]{flex:1;min-width:140px;accent-color:var(--navy)}
.time{font-variant-numeric:tabular-nums;font-size:14px;color:var(--muted);min-width:96px}
.pctl select{padding:6px;border:1px solid var(--line);border-radius:4px;font:inherit;font-size:14px}
.transcript p{padding:4px 8px;border-radius:4px;margin:2px 0;transition:background .2s}
.transcript p b{color:var(--navy);font-weight:600;margin-right:6px}
.transcript p{border-left:3px solid transparent}.transcript p.cur{background:#FBEFC4;border-left-color:var(--gold)}
.vocab{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:4px 16px;font-size:14.5px}
.vocab span{color:var(--muted)}
.questions .q{padding:12px 0;border-bottom:1px dashed var(--line)}.questions .q:last-of-type{border-bottom:0}
.questions .q p{font-weight:600;margin-bottom:6px}
.questions .opt{display:flex;gap:8px;align-items:flex-start;padding:4px 6px;border-radius:4px;cursor:pointer}
.questions .opt:hover{background:var(--paper)}.questions .opt input{margin-top:6px}
.questions input.fill{padding:7px 9px;border:1px solid var(--line);border-radius:4px;font:inherit;width:240px;max-width:100%}
.q.ok{background:linear-gradient(90deg,#E3F3EA 0,transparent 60%)}.q.bad{background:linear-gradient(90deg,#F8E3E0 0,transparent 60%)}
.q .ex{font-size:14.5px;margin-top:6px;padding:8px 10px;background:var(--paper);border-left:3px solid var(--gold);border-radius:3px}
.q .ex b.ok{color:var(--ok)}.q .ex b.bad{color:var(--bad)}
.opt.right{outline:2px solid var(--ok)}.opt.wrong{outline:2px solid var(--bad)}
.result .score{font-size:30px;font-family:var(--kai);color:var(--navy)}
.note{margin-top:30px;padding:18px 20px;background:var(--paper);border-radius:6px;font-size:14px;color:var(--muted)}
.note p+p{margin-top:6px}
footer{background:var(--navy);color:#fff;padding:22px 0;font-size:14px}footer a{color:#fff}
table{border-collapse:collapse;width:100%;font-size:13.5px}th,td{border-bottom:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}
th{background:var(--paper);white-space:nowrap}td{white-space:nowrap}td:nth-child(13){min-width:200px}
.stats{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:16px}.stats div{background:var(--paper);padding:10px 16px;border-radius:6px}.stats b{display:block;font-size:24px;color:var(--navy)}
.tblwrap{overflow-x:auto}
@media (max-width:760px){.hero,.levels,.row2{grid-template-columns:1fr}.nav a.l{display:none}h1{font-size:32px}}
.mt{margin-top:12px}
/* v2：三級聆聽（短片／短片無字幕／純錄音） */
.lvintro{margin:-6px 0 12px}
.levels .lv1{border-top-color:var(--teal)}.levels .lv2{border-top-color:var(--gold)}.levels .lv3{border-top-color:var(--navy)}
.set .thumb{display:block;width:calc(100% + 40px);max-width:none;height:auto;aspect-ratio:16/9;object-fit:cover;margin:-20px -20px 12px;border-radius:8px 8px 0 0;background:var(--paper)}
.lvpick{display:flex;flex-direction:column;gap:8px}
.lvpick .lv{display:flex;align-items:center;gap:10px;width:100%;min-height:52px;border:1.5px solid var(--line);background:#fff;border-radius:8px;padding:8px 10px;cursor:pointer;font:inherit;color:var(--ink);text-align:left;transition:border-color .15s,background .15s}
.lvpick .lv:hover,.lvpick .lv:focus-visible{border-color:var(--navy);outline:none}
.lvpick .lv .n{flex:none;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:700;font-size:15px}
.lvpick .lv1 .n{background:var(--teal)}.lvpick .lv2 .n{background:var(--gold)}.lvpick .lv3 .n{background:var(--navy)}
.lvpick .lv .t{flex:1;min-width:0;line-height:1.35}
.lvpick .lv .t b{display:block;font-size:15px;color:var(--ink);font-weight:600}
.lvpick .lv .t small{display:block;font-size:12.5px;color:var(--muted)}
.lvpick .lv.on{border-color:var(--navy);background:#EEF2F9;box-shadow:inset 0 0 0 1px var(--navy)}
.lvpick.tabs3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:4px 0 14px}
.lvpick.tabs3 .lv{flex-direction:column;align-items:center;text-align:center;gap:4px;padding:8px 6px}
.lvpick.tabs3 .lv .t small{display:none}
.lvpick.tabs3 .lv .badge{font-size:11.5px}
.screen{position:relative;margin:-20px -20px 14px;background:#000;border-radius:8px 8px 0 0;overflow:hidden;aspect-ratio:16/9;cursor:pointer}
.screen video{display:block;width:100%;height:100%;object-fit:contain;background:#000}
.audio-only{display:flex;align-items:center;justify-content:center;gap:10px;margin:-20px -20px 14px;padding:26px 16px;background:linear-gradient(135deg,var(--navy),var(--navy-deep));color:#fff;border-radius:8px 8px 0 0;font-size:15px;text-align:center}
.audio-only span{font-size:26px}
@media (max-width:760px){
  .wrap{padding-left:14px;padding-right:14px}
  .card{padding:16px}
  .set .thumb{width:calc(100% + 32px);margin:-16px -16px 10px}
  .screen,.audio-only{margin:-16px -16px 12px}
  .pctl{gap:8px}.pctl .btn{padding:9px 14px}.time{min-width:0}
  .lvpick.tabs3 .lv .t b{font-size:13.5px}
}
/* v3：審批、防濫用 */
.notice{background:#FFF4E5;border:1px solid #F2C27B;color:#7A4A00;border-radius:8px;padding:10px 12px;margin:0 0 12px}
.review{margin:2px 0 8px;color:var(--navy);font-weight:600}
.pending{max-width:620px;margin:20px auto;text-align:center}
.pending .big{font-size:44px;line-height:1}
.pending h2{margin:10px 0}
.wm{position:absolute;left:8%;top:10%;z-index:2;pointer-events:none;user-select:none;-webkit-user-select:none;white-space:nowrap;
  color:rgba(255,255,255,.72);background:rgba(0,0,0,.22);padding:2px 8px;border-radius:4px;text-shadow:0 0 2px rgba(0,0,0,.6);
  font-size:clamp(11px,2.1vw,17px);font-weight:600;letter-spacing:.02em;transition:left 2.5s ease-in-out,top 2.5s ease-in-out}
.fsexit{position:absolute;right:10px;top:10px;z-index:3;border:0;border-radius:6px;padding:6px 10px;background:rgba(0,0,0,.55);color:#fff;font:inherit;font-size:14px;cursor:pointer}
.screen:fullscreen,.screen:-webkit-full-screen{margin:0;border-radius:0;aspect-ratio:auto;width:100%;height:100%}
.screen.pseudo-fs{position:fixed;inset:0;z-index:1000;margin:0;border-radius:0;aspect-ratio:auto;width:100vw;height:100vh;height:100dvh}
.screen:fullscreen .wm,.screen.pseudo-fs .wm{font-size:clamp(14px,2vw,22px)}
body.no-scroll{overflow:hidden}
.pend td{background:#FFF8EC}
.st{display:inline-block;padding:1px 7px;border-radius:10px;font-size:12px;white-space:nowrap}
.st.pending{background:#FFE7B8;color:#7A4A00}.st.approved{background:#DDF2E8;color:#14583A}.st.rejected{background:#F3D6D6;color:#7A1E1E}.st.suspended{background:#E4E4E4;color:#444}
.btn.xs{padding:3px 9px;font-size:12.5px;min-height:0}
.btn.danger{background:#B3261E;border-color:#B3261E;color:#fff}
.over{color:#B3261E;font-weight:700}
/* v4：手機頁首（360–500px）——品牌名稱保持一行、學員名稱以省略號截短、按鈕保持可點按大小 */
@media (max-width:500px){
  .nav .in{gap:8px;height:60px;padding:0 12px}
  .nav .logo{flex:0 0 auto;gap:7px;font-size:17px;letter-spacing:.03em;white-space:nowrap}
  .nav .logo img{height:40px}
  .nav .logo small{font-size:8.5px;letter-spacing:.06em;white-space:nowrap}
  .nav .lang{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0 4px;font-size:14px}
  .nav .who{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
  .nav #logoutBtn{flex:0 0 auto;min-height:44px;min-width:52px;padding:6px 10px;white-space:nowrap}
}
@media (max-width:430px){.nav .logo small{display:none}}
/* v4：登記頁介紹短片（公開，只此一個檔案）及版權頁尾 */
.side{min-width:0}
.promo{margin:0 auto 18px;max-width:300px;text-align:center}
.promo-box{position:relative;border-radius:14px;overflow:hidden;background:#16294A;aspect-ratio:9/16;box-shadow:0 4px 18px rgba(20,30,60,.18)}
.promo video{display:block;width:100%;height:100%;object-fit:cover;background:#16294A}
.promo-unmute{position:absolute;top:10px;right:10px;border:0;border-radius:20px;padding:9px 14px;min-height:40px;background:rgba(22,41,74,.85);color:#fff;font-size:14.5px;font-family:inherit;cursor:pointer}
.promo figcaption{margin-top:9px;font-size:14px;color:var(--muted);letter-spacing:.02em}
@media (max-width:760px){.promo{max-width:min(300px,82vw)}}
footer .in{line-height:1.6}
/* 後台：重設密碼對話框 */
.btn.xs.pw{margin-left:4px}
.pwdlg{border:1px solid var(--line);border-radius:8px;padding:20px 22px;max-width:440px;width:92vw;margin:auto;box-shadow:0 10px 40px rgba(20,30,60,.25)}
.pwdlg::backdrop{background:rgba(20,30,60,.45)}
.pwdlg h3{font-size:18px;margin-bottom:12px}
.pwrow{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:8px 0}
.pwshow{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:22px;letter-spacing:.12em;background:var(--gold-soft);border:1px solid var(--gold);border-radius:4px;padding:4px 12px;user-select:all}
