:root{--bg:#f4f7fb;--panel:#fff;--text:#1f2937;--muted:#64748b;--line:#dbe3ef;--primary:#2563eb;--primary-dark:#1d4ed8;--success:#15803d;--danger:#b91c1c;--warning:#a16207;--shadow:0 10px 30px rgba(15,23,42,.08)}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans TC",Arial,sans-serif;line-height:1.55}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}.topbar{min-height:64px;background:#12233f;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 24px;gap:18px}.brand{display:flex;align-items:center;gap:9px;color:#fff;font-weight:800;font-size:20px;text-decoration:none}.brand:hover{text-decoration:none}.brand small{font-weight:500;color:#b7c8e5;font-size:12px}.brand-mark{font-size:24px}.main-nav{display:flex;align-items:center;gap:18px}.main-nav a{color:#e8eef9}.teacher-name{padding:6px 10px;background:rgba(255,255,255,.1);border-radius:999px}.class-nav{background:#fff;border-bottom:1px solid var(--line);padding:11px 24px;display:flex;gap:16px;align-items:center;overflow-x:auto;white-space:nowrap}.class-nav strong{margin-right:8px}.container{width:min(1180px,calc(100% - 32px));margin:26px auto 60px}.page-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.page-heading h1{margin:0;font-size:28px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:20px;box-shadow:var(--shadow);margin-bottom:20px}.panel h2,.panel h3{margin-top:0}.grid{display:grid;gap:18px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px;box-shadow:var(--shadow)}.stat{font-size:30px;font-weight:800;margin:6px 0}.muted{color:var(--muted)}.small{font-size:13px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;border-radius:9px;padding:9px 14px;font-weight:700;cursor:pointer;text-decoration:none;font-size:15px}.btn:hover{text-decoration:none}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-dark)}.btn-secondary{background:#e9eef6;color:#24324a}.btn-success{background:#15803d;color:#fff}.btn-danger{background:#b91c1c;color:#fff}.btn-warning{background:#d97706;color:#fff}.btn-sm{padding:6px 10px;font-size:13px}.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.form-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:14px}.col-12{grid-column:span 12}.col-8{grid-column:span 8}.col-7{grid-column:span 7}.col-6{grid-column:span 6}.col-4{grid-column:span 4}.col-3{grid-column:span 3}.col-2{grid-column:span 2}label{display:block;font-weight:700;margin-bottom:6px}input[type=text],input[type=password],input[type=date],input[type=number],input[type=file],select,textarea{width:100%;padding:10px 11px;border:1px solid #bdc9da;border-radius:8px;background:#fff;color:var(--text);font:inherit}input:focus,select:focus,textarea:focus{outline:2px solid rgba(37,99,235,.18);border-color:var(--primary)}input[type=checkbox]{width:19px;height:19px;accent-color:var(--primary)}.check-label{display:inline-flex;align-items:center;gap:7px;font-weight:600;margin:0}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:12px}.table{width:100%;border-collapse:collapse;background:#fff;min-width:760px}.table th,.table td{padding:11px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}.table th{background:#eef3f9;color:#334155;font-size:14px;position:sticky;top:0;z-index:1}.table tr:last-child td{border-bottom:0}.table tr:hover td{background:#fafcff}.text-center{text-align:center!important}.text-right{text-align:right!important}.alert{padding:12px 15px;border-radius:9px;margin-bottom:16px;font-weight:650}.alert-success{background:#dcfce7;color:#166534}.alert-danger{background:#fee2e2;color:#991b1b}.alert-warning{background:#fef3c7;color:#92400e}.alert-info{background:#dbeafe;color:#1e40af}.badge{display:inline-flex;align-items:center;padding:3px 8px;border-radius:999px;background:#e8eef7;font-size:12px;font-weight:750}.badge-success{background:#dcfce7;color:#166534}.badge-danger{background:#fee2e2;color:#991b1b}.badge-warning{background:#fef3c7;color:#92400e}.avatar{width:42px;height:42px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:#edf3ff;font-size:25px;border:1px solid #d5e2fb}.avatar-lg{width:66px;height:66px;font-size:38px}.avatar-picker{display:flex;flex-wrap:wrap;gap:8px}.avatar-choice input{position:absolute;opacity:0}.avatar-choice span{display:flex;width:46px;height:46px;align-items:center;justify-content:center;font-size:26px;border:2px solid transparent;border-radius:50%;background:#f1f5f9;cursor:pointer}.avatar-choice input:checked+span{border-color:var(--primary);background:#dbeafe}.daily-box{display:flex;justify-content:center}.daily-box input{transform:scale(1.15)}.score-input{min-width:82px}.public-link{word-break:break-all;background:#f8fafc;border:1px dashed #94a3b8;padding:10px;border-radius:8px}.login-shell{max-width:440px;margin:60px auto}.empty{padding:38px;text-align:center;color:var(--muted)}.footer{text-align:center;color:var(--muted);padding:22px}.public-header{background:linear-gradient(135deg,#18365e,#2458a6);color:#fff;padding:34px 20px;text-align:center}.public-header h1{margin:0 0 7px}.public-container{width:min(1050px,calc(100% - 26px));margin:22px auto}.leaderboard-row{display:flex;align-items:center;gap:12px}.rank{width:30px;font-weight:800}.points-positive{color:#15803d;font-weight:800}.points-negative{color:#b91c1c;font-weight:800}.nowrap{white-space:nowrap}.inline-form{display:inline}.help{font-size:13px;color:var(--muted);margin-top:5px}.section-title{display:flex;justify-content:space-between;gap:12px;align-items:center}.kpi-label{font-size:13px;color:var(--muted);font-weight:700}.danger-zone{border-color:#fecaca;background:#fffafa}
@media(max-width:850px){.grid-4,.grid-3,.grid-2{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr}.form-grid>[class^=col-]{grid-column:1}.topbar{padding:10px 14px;align-items:flex-start}.main-nav{gap:10px;flex-wrap:wrap;justify-content:flex-end}.teacher-name{display:none}.container{width:min(100% - 18px,1180px)}.class-nav{padding-left:12px}.page-heading h1{font-size:24px}}
.btn-candy{background:#9a5b13;color:#fff}.btn-candy:hover{background:#7c470d}.candy-nav-link{font-weight:800;color:#8a4b08!important}.candy-card{border-color:#f0c98a;background:#fffaf0}.candy-points{color:#a4550a;font-weight:800}.compact-form{display:grid;gap:7px}.compact-form input,.compact-form select{min-width:150px;padding:7px 8px;font-size:13px}.quick-buttons{display:flex;gap:5px;flex-wrap:wrap}.candy-table{min-width:1180px}.student-balance-pair{margin-left:auto;display:flex;gap:34px;text-align:right}.student-balance-pair .stat{margin-bottom:0}@media(max-width:850px){.student-balance-pair{margin-left:0;width:100%;justify-content:space-between}.leaderboard-row{flex-wrap:wrap}}
@media print{.topbar,.class-nav,.footer,.btn,.actions,details,.alert-info,.danger-zone{display:none!important}.container{width:100%;margin:0}.panel,.card{box-shadow:none;break-inside:avoid}.table{min-width:0;font-size:11px}}

/* v1.2 dynamic item settings */
.btn:disabled{opacity:.45;cursor:not-allowed}.row-inactive td{background:#f8fafc;color:#718096}.row-inactive input{background:#f3f4f6;color:#64748b}.item-settings-table{min-width:980px}.item-settings-table input{min-width:150px}.daily-dynamic-table{min-width:max(920px,100%)}.daily-dynamic-table th{min-width:155px}.daily-dynamic-table .sticky-seat{min-width:72px;width:72px;left:0}.daily-dynamic-table .sticky-student{min-width:190px;left:72px}.daily-dynamic-table .sticky-col{position:sticky;z-index:2;background:#fff}.daily-dynamic-table thead .sticky-col{z-index:4;background:#eef3f9}.daily-dynamic-table tbody tr:hover .sticky-col{background:#fafcff}.daily-table-wrap{max-width:100%}
@media(max-width:850px){.daily-dynamic-table .sticky-student{min-width:155px}.daily-dynamic-table th{min-width:135px}.item-settings-table input{min-width:120px}.section-title{align-items:flex-start;flex-wrap:wrap}}

/* v1.3 stage collection and student drawing wheel */
.draw-layout{grid-template-columns:minmax(0,1fr) 340px;align-items:start}.draw-stage{position:relative;overflow:hidden}.draw-stage-title{margin-bottom:12px}.wheel-shell{position:relative;width:min(680px,92vw);aspect-ratio:1;margin:0 auto;display:grid;place-items:center}.wheel-shell canvas{width:100%;height:100%;display:block;filter:drop-shadow(0 18px 28px rgba(15,23,42,.16))}.wheel-pointer{position:absolute;top:1.5%;left:50%;transform:translateX(-50%);z-index:4;width:0;height:0;border-left:24px solid transparent;border-right:24px solid transparent;border-top:54px solid #ef4444;border-bottom:0;filter:drop-shadow(0 4px 3px rgba(15,23,42,.3))}.wheel-spin-button{position:absolute;z-index:5;width:118px;height:118px;border-radius:50%;border:7px solid #fff;background:#12233f;color:#fff;font-size:25px;font-weight:900;cursor:pointer;box-shadow:0 10px 25px rgba(15,23,42,.28);transition:transform .18s,background .18s}.wheel-spin-button:hover{transform:scale(1.05);background:#1d4ed8}.wheel-spin-button:disabled{opacity:.55;cursor:not-allowed;transform:none}.draw-controls{display:flex;align-items:end;justify-content:center;gap:18px;flex-wrap:wrap;margin-top:10px;padding:14px;border-radius:12px;background:#f8fafc;border:1px solid var(--line)}.draw-controls label{margin-bottom:4px}.draw-controls select{min-width:110px}.draw-participant-count{font-weight:800;color:#1d4ed8;padding:9px 12px;border-radius:999px;background:#dbeafe}.draw-result{min-height:96px;display:flex;justify-content:center;align-items:center;gap:10px;flex-wrap:wrap;margin-top:15px;padding:14px;border:1px dashed #94a3b8;border-radius:12px;background:#fff}.draw-loading{font-size:20px;font-weight:800;color:#1d4ed8}.draw-winner-card{display:flex;align-items:center;gap:12px;padding:11px 16px;background:linear-gradient(135deg,#fef3c7,#fff7ed);border:2px solid #f59e0b;border-radius:14px;box-shadow:0 8px 18px rgba(245,158,11,.18);animation:winner-pop .38s ease-out}.draw-winner-card strong{font-size:21px}.draw-winner-order{font-size:12px;font-weight:900;color:#92400e;background:#fde68a;border-radius:999px;padding:4px 8px}.draw-winner-avatar{font-size:36px}.draw-sidebar{position:sticky;top:14px}.participant-toolbar{display:flex;gap:8px;margin-bottom:10px}.participant-list{display:grid;gap:7px;max-height:650px;overflow:auto;padding:3px;margin-bottom:14px}.participant-item{display:grid;grid-template-columns:24px 42px 1fr;align-items:center;gap:8px;padding:8px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:pointer;transition:opacity .18s,background .18s}.participant-item:hover{background:#f8fafc}.participant-item small{display:block;color:var(--muted);font-size:12px}.participant-item.is-excluded{opacity:.52;background:#f1f5f9}.draw-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}.draw-history-card{display:flex;align-items:center;gap:10px;padding:10px;border:1px solid var(--line);border-radius:11px;background:#fff}.draw-history-card small{display:block;color:var(--muted)}.confetti-layer{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:10}.confetti-piece{position:absolute;top:-18px;width:9px;height:18px;border-radius:2px;animation:confetti-fall 2.2s linear forwards}.draw-stage:fullscreen{background:var(--bg);padding:18px;overflow:auto}.draw-stage:fullscreen .wheel-shell{width:min(72vh,820px)}.draw-stage:fullscreen .draw-stage-title{max-width:1100px;margin-left:auto;margin-right:auto}.draw-stage:fullscreen .draw-controls,.draw-stage:fullscreen .draw-result{max-width:1000px;margin-left:auto;margin-right:auto}@keyframes winner-pop{0%{transform:scale(.72);opacity:0}75%{transform:scale(1.06)}100%{transform:scale(1);opacity:1}}@keyframes confetti-fall{0%{transform:translateY(-20px) rotate(0);opacity:1}100%{transform:translateY(820px) rotate(720deg);opacity:0}}
@media(max-width:1050px){.draw-layout{grid-template-columns:1fr}.draw-sidebar{position:static}.participant-list{max-height:360px;grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:650px){.wheel-shell{width:min(96vw,560px)}.wheel-pointer{border-left-width:17px;border-right-width:17px;border-top-width:40px}.wheel-spin-button{width:88px;height:88px;font-size:19px;border-width:5px}.draw-controls{align-items:stretch;flex-direction:column}.participant-list{grid-template-columns:1fr}.draw-result{align-items:stretch}.draw-winner-card{width:100%}}
@media(prefers-reduced-motion:reduce){.draw-winner-card,.confetti-piece{animation-duration:.01ms!important;animation-iteration-count:1!important}}

/* v1.4 YLL Teacher Toolbox + interactive seating chart */
.seat-create-panel{overflow:hidden}.seat-layout-tabs{display:flex;gap:10px;flex-wrap:wrap}.seat-layout-tab{display:flex;flex-direction:column;min-width:150px;padding:10px 13px;border:1px solid var(--line);border-radius:10px;background:#f8fafc;color:#24324a;font-weight:800}.seat-layout-tab small{font-weight:600;color:var(--muted)}.seat-layout-tab.active{background:#dbeafe;border-color:#60a5fa;color:#1d4ed8}.seat-toolbar-grid{display:grid;grid-template-columns:1.2fr 1fr auto;gap:16px;align-items:end}.seat-mini-form{display:flex;gap:8px;align-items:end}.seat-mini-form>div{min-width:120px;flex:1}.seat-mini-form label{font-size:12px;margin-bottom:3px}.seat-help{margin:18px 0 0}.seat-app{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:20px;align-items:start}.seat-app.is-saving{pointer-events:none;opacity:.84}.seat-stage{overflow:auto;min-height:540px}.seat-print-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.seat-print-title h2{margin:0}.classroom-board{margin:12px auto 28px;max-width:760px;border:8px solid #8b5a2b;border-radius:8px;background:#214d3d;color:#fff;text-align:center;font-weight:900;font-size:24px;letter-spacing:.3em;padding:13px;box-shadow:inset 0 0 0 2px rgba(255,255,255,.16),0 5px 15px rgba(15,23,42,.14)}.teacher-desk{width:170px;margin:26px auto 0;padding:9px;text-align:center;border-radius:8px;background:#d8b485;color:#503313;font-weight:800;border:2px solid #bb8b50}.seat-row-grid{display:grid;grid-template-columns:repeat(var(--seat-columns),minmax(122px,1fr));gap:16px;min-width:calc(var(--seat-columns) * 138px);align-items:stretch}.seat-groups-grid{display:grid;grid-template-columns:repeat(2,minmax(290px,1fr));gap:22px;min-width:650px}.seat-group-card{border:2px solid #cbd5e1;border-radius:16px;padding:14px;background:#f8fafc}.seat-group-title{text-align:center;font-weight:900;margin-bottom:12px;color:#1e3a5f}.seat-group-title span{display:block;font-size:12px;color:var(--muted);font-weight:650}.seat-group-slots{display:grid;grid-template-columns:repeat(2,minmax(125px,1fr));gap:12px}.seat-group-slots .seat-slot:nth-child(5):last-child{grid-column:1/-1;max-width:190px;width:100%;justify-self:center}.seat-slot{position:relative;min-height:112px;padding:24px 8px 8px;border:2px dashed #93a4bb;border-radius:12px;background:#fff;transition:border-color .15s,background .15s,transform .15s}.seat-slot:hover{border-color:#60a5fa}.seat-slot.is-drag-over{border-color:#2563eb;background:#dbeafe;transform:scale(1.02)}.seat-slot.is-locked{border-style:solid;border-color:#d97706;background:#fffbeb}.seat-position-label{position:absolute;top:5px;left:8px;font-size:10px;color:#94a3b8;font-weight:700}.seat-lock-button{position:absolute;top:3px;right:4px;border:0;background:transparent;cursor:pointer;font-size:15px;padding:2px 4px}.seat-card-holder{min-height:75px}.seat-empty-label{display:none;align-items:center;justify-content:center;min-height:70px;color:#94a3b8;font-weight:700}.seat-slot.is-empty .seat-empty-label{display:flex}.seat-student-card{display:flex;align-items:center;gap:8px;padding:7px 8px;border:1px solid #cad7ea;border-radius:10px;background:#fff;box-shadow:0 4px 12px rgba(15,23,42,.08);cursor:grab;user-select:none;touch-action:none}.seat-student-card:active{cursor:grabbing}.seat-student-card.is-dragging{opacity:.45}.seat-student-card.is-selected{outline:3px solid #2563eb;background:#eff6ff}.seat-student-card .avatar{width:37px;height:37px;font-size:22px;flex:0 0 auto}.seat-student-text{min-width:0}.seat-student-text strong{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px}.seat-student-text small{display:block;color:var(--muted);font-size:10px}.seat-unassigned-panel{position:sticky;top:20px}.seat-unassigned-list{display:flex;flex-direction:column;gap:9px;min-height:150px;border:2px dashed #cbd5e1;border-radius:12px;padding:10px;background:#f8fafc}.seat-unassigned-list.is-drag-over{border-color:#2563eb;background:#dbeafe}.seat-unassigned-empty{display:flex;min-height:110px;align-items:center;justify-content:center;color:#94a3b8;font-size:13px}.seat-unassigned-list.has-students .seat-unassigned-empty{display:none}.seat-save-status{margin-top:12px;padding:8px 10px;border-radius:8px;background:#f1f5f9;color:var(--muted);font-size:13px;font-weight:700}.seat-save-status.is-saved{background:#dcfce7;color:#166534}.seat-save-status.is-error{background:#fee2e2;color:#991b1b}.seat-stage:fullscreen{background:var(--bg);padding:22px;overflow:auto}.seat-stage:fullscreen .seat-print-title{font-size:1.15em}.seat-stage:fullscreen .seat-row-grid,.seat-stage:fullscreen .seat-groups-grid{max-width:1500px;margin:auto}
@media(max-width:1000px){.seat-app{grid-template-columns:1fr}.seat-unassigned-panel{position:static}.seat-toolbar-grid{grid-template-columns:1fr}.seat-groups-grid{grid-template-columns:1fr;min-width:330px}.seat-mini-form{flex-wrap:wrap}}
@media(max-width:650px){.seat-row-grid{gap:9px}.seat-slot{min-height:102px}.seat-student-card{padding:6px}.seat-student-text strong{font-size:12px}.seat-student-text small{display:none}.seat-groups-grid{min-width:290px}.seat-group-card{padding:9px}.seat-group-slots{gap:8px}.seat-create-panel .form-grid{display:block}.seat-create-panel .form-grid>div{margin-bottom:10px}.seat-print-title{display:block}}
@media print{body{background:#fff}.topbar,.class-nav,.page-heading,.footer,.no-print,.seat-unassigned-panel{display:none!important}.container{width:100%;margin:0;padding:0}.seat-app{display:block}.seat-stage{border:0;box-shadow:none;margin:0;padding:0;overflow:visible}.seat-row-grid{min-width:0;gap:9px}.seat-groups-grid{min-width:0;gap:12px}.seat-slot{break-inside:avoid;min-height:88px;padding-top:20px}.seat-student-card{box-shadow:none}.seat-student-text small,.seat-lock-button{display:none}.classroom-board{margin:8px auto 18px;padding:8px;font-size:18px}.teacher-desk{margin-top:14px}.seat-print-title{margin-bottom:8px}}

/* v1.4.1 custom group-row layout */
.seat-group-config-form{margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}
.seat-group-config-editor{padding:14px;border:1px solid #d8e1ee;border-radius:14px;background:#f8fafc}
.section-title.compact{margin-bottom:10px}.section-title.compact h3{margin:0}.section-title.compact p{margin:4px 0 0}
.seat-group-config-rows{display:flex;flex-direction:column;gap:9px}
.seat-group-config-row{display:grid;grid-template-columns:90px minmax(150px,220px) minmax(180px,240px) auto;gap:10px;align-items:end;padding:10px;border:1px solid #dbe3ef;border-radius:10px;background:#fff}
.seat-group-config-row>strong{align-self:center;color:#1e3a5f}.seat-group-config-row label{margin:0;font-size:12px}.seat-group-config-row input,.seat-group-config-row select{margin-top:3px}
.seat-config-actions{margin-top:11px}.seat-group-config-message{margin-top:10px;padding:8px 10px;border-radius:8px;font-size:13px;font-weight:750}.seat-group-config-message.is-valid{background:#dcfce7;color:#166534}.seat-group-config-message.is-invalid{background:#fee2e2;color:#991b1b}
.seat-group-config-preview{display:flex;flex-direction:column;gap:9px;margin-top:12px;padding:12px;border:1px dashed #aebed2;border-radius:12px;background:#fff}.seat-group-config-preview.is-invalid{border-color:#dc2626}
.seat-config-preview-row{display:flex;align-items:center;gap:12px}.seat-config-preview-label{width:55px;flex:0 0 auto;color:#64748b;font-size:12px;font-weight:800}.seat-config-preview-groups{display:flex;gap:8px;flex:1}.seat-config-preview-row.align-left .seat-config-preview-groups{justify-content:flex-start}.seat-config-preview-row.align-center .seat-config-preview-groups{justify-content:center}.seat-config-preview-row.align-right .seat-config-preview-groups{justify-content:flex-end}.seat-config-preview-row.align-spread .seat-config-preview-groups{justify-content:space-between}.seat-config-preview-groups span{min-width:68px;padding:8px 10px;border-radius:8px;background:#dbeafe;color:#1d4ed8;text-align:center;font-size:12px;font-weight:800}.seat-config-preview-groups span.is-missing{background:#fee2e2;color:#991b1b}
.seat-group-rows{display:flex;flex-direction:column;gap:24px;min-width:650px}.seat-group-row{display:grid;grid-template-columns:repeat(var(--groups-in-row),minmax(275px,1fr));gap:22px;width:100%;max-width:var(--group-row-max)}.seat-group-row.seat-group-align-left{margin-right:auto}.seat-group-row.seat-group-align-center{margin-left:auto;margin-right:auto}.seat-group-row.seat-group-align-right{margin-left:auto}.seat-group-row.seat-group-align-spread{max-width:none;margin:0}
.seat-group-title{position:relative;padding:0 30px}.seat-group-drag-handle{position:absolute;left:0;top:-4px;border:0;border-radius:7px;background:#e2e8f0;color:#475569;font-size:20px;line-height:1;padding:4px 7px;cursor:grab}.seat-group-drag-handle:active{cursor:grabbing}.seat-group-card.is-group-dragging{opacity:.45}.seat-group-card.is-group-drag-over{border-color:#2563eb;background:#dbeafe;box-shadow:0 0 0 4px rgba(37,99,235,.12)}
@media(max-width:1000px){.seat-group-row{grid-template-columns:1fr;max-width:none!important}.seat-group-config-row{grid-template-columns:1fr 1fr}.seat-group-config-row>strong{grid-column:1/-1}}
@media(max-width:650px){.seat-group-config-row{display:block}.seat-group-config-row>*{margin-bottom:8px}.seat-config-preview-row{align-items:flex-start}.seat-config-preview-groups{flex-wrap:wrap}.seat-group-rows{min-width:290px}}
@media print{.seat-group-row{gap:10px;max-width:none!important}.seat-group-rows{min-width:0;gap:12px}.seat-group-drag-handle{display:none!important}}

/* v1.5 daily memo */
.daily-memo-panel { border-left: 5px solid #8b5cf6; }
.daily-memo-panel h2 { margin: 0; }
.daily-memo-textarea {
  width: 100%; min-height: 118px; resize: vertical; border: 1px solid #cbd8ea;
  border-radius: 14px; padding: 14px 16px; font: inherit; line-height: 1.65;
  background: #fbfdff; color: #10213f;
}
.daily-memo-textarea:focus { outline: 3px solid rgba(139,92,246,.15); border-color: #8b5cf6; }
.daily-memo-footer { display: flex; align-items: center; justify-content: flex-end; gap: 12px; margin-top: 10px; }
.daily-memo-status { min-width: 170px; text-align: right; font-size: .92rem; color: #64748b; }
.daily-memo-status.is-saved { color: #067647; font-weight: 700; }
.daily-memo-status.is-error { color: #b42318; font-weight: 700; }
.daily-memo-status.is-pending, .daily-memo-status.is-saving { color: #b54708; }
.daily-memo-status.is-loaded { color: #175cd3; }

/* v1.5 student management form */
.student-management-grid { display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(280px, .75fr); gap: 20px; margin-bottom: 20px; }
.student-add-panel, .student-import-panel { margin-bottom: 0; }
.student-basic-fields { display: grid; grid-template-columns: minmax(120px, .7fr) minmax(240px, 1.7fr) minmax(250px, 1.25fr); gap: 16px; align-items: end; }
.student-basic-fields label, .student-gender-field legend { display: block; font-weight: 800; margin-bottom: 8px; color: #12233f; }
.student-gender-field { border: 0; padding: 0; margin: 0; min-width: 0; }
.segmented-control { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; }
.segmented-control label { margin: 0; cursor: pointer; }
.segmented-control input { position: absolute; opacity: 0; pointer-events: none; }
.segmented-control span { display: flex; min-height: 48px; align-items: center; justify-content: center; padding: 8px 12px; border: 1px solid #cbd8ea; border-radius: 11px; background: #f8fafc; color: #334155; font-weight: 800; transition: .16s ease; }
.segmented-control input:checked + span { background: #2864e8; border-color: #2864e8; color: #fff; box-shadow: 0 7px 18px rgba(40,100,232,.2); }
.segmented-control input:focus-visible + span { outline: 3px solid rgba(40,100,232,.22); }
.segmented-control.compact span { min-height: 38px; padding: 6px 8px; font-size: .88rem; }
.avatar-section { margin: 22px 0 18px; }
.avatar-section > label { display: block; font-weight: 800; margin-bottom: 10px; }
.avatar-category { display: grid; grid-template-columns: 68px 1fr; align-items: start; gap: 12px; margin: 10px 0; }
.avatar-category > strong { color: #64748b; padding-top: 11px; }
.avatar-category .avatar-picker { margin: 0; }
.student-add-panel .avatar-choice span { width: 52px; height: 52px; font-size: 27px; }
.student-import-panel input[type="file"] { width: 100%; }

/* v1.5 timer */
.timer-tool { max-width: 1050px; margin-inline: auto; }
.timer-title-field { max-width: 620px; margin: 16px auto 18px; }
.timer-title-field label, .timer-custom-row label { display: block; font-weight: 800; margin-bottom: 7px; }
.timer-quick-buttons { display: flex; flex-wrap: wrap; justify-content: center; gap: 9px; margin: 12px 0 18px; }
.timer-custom-row { display: flex; align-items: end; justify-content: center; gap: 10px; margin-bottom: 20px; }
.timer-custom-row input { width: 110px; text-align: center; font-size: 1.2rem; font-weight: 800; }
.timer-colon { font-size: 2rem; font-weight: 900; padding-bottom: 8px; }
.timer-stage { position: relative; overflow: hidden; border-radius: 28px; padding: 42px 24px 32px; text-align: center; background: linear-gradient(145deg,#11284d,#173a73); color: #fff; box-shadow: 0 22px 55px rgba(15,35,72,.24); }
.timer-stage-title { font-size: clamp(1.2rem,2.5vw,2rem); font-weight: 850; letter-spacing: .04em; }
.timer-display { font-variant-numeric: tabular-nums; font-size: clamp(5rem,16vw,11rem); line-height: 1; font-weight: 950; letter-spacing: -.055em; margin: 22px 0; text-shadow: 0 8px 26px rgba(0,0,0,.26); }
.timer-message { font-size: 1.15rem; font-weight: 800; opacity: .92; }
.timer-progress { height: 12px; max-width: 760px; margin: 24px auto 18px; overflow: hidden; border-radius: 999px; background: rgba(255,255,255,.18); }
.timer-progress span { display: block; height: 100%; width: 100%; border-radius: inherit; background: #62e6a5; transition: width .25s linear, background .2s ease; }
.timer-stage.is-warning { background: linear-gradient(145deg,#7a2e0d,#b54708); animation: timerPulse 1s ease-in-out infinite alternate; }
.timer-stage.is-warning .timer-progress span { background: #ffd166; }
.timer-stage.is-finished { background: linear-gradient(145deg,#9b1c1c,#d92d20); }
.timer-controls { display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; margin: 22px 0 8px; }
.btn-lg { min-height: 52px; padding: 12px 25px; font-size: 1.08rem; }
@keyframes timerPulse { from { box-shadow: 0 20px 50px rgba(181,71,8,.25); } to { box-shadow: 0 24px 65px rgba(217,45,32,.46); } }
.timer-stage:fullscreen { display: flex; min-width: 100vw; min-height: 100vh; border-radius: 0; flex-direction: column; align-items: center; justify-content: center; padding: 5vh 5vw; }
.timer-stage:fullscreen .timer-display { font-size: min(28vw, 18rem); }
.timer-dock { position: fixed; z-index: 900; right: 18px; bottom: 18px; display: flex; align-items: stretch; overflow: hidden; border-radius: 16px; background: #10264a; color: #fff; box-shadow: 0 16px 36px rgba(15,35,72,.32); }
.timer-dock[hidden] { display: none; }
.timer-dock-link { display: flex; align-items: center; gap: 12px; padding: 10px 14px; color: #fff; text-decoration: none; }
.timer-dock-link span { max-width: 150px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: .84rem; opacity: .8; }
.timer-dock-link strong { font-variant-numeric: tabular-nums; font-size: 1.35rem; }
.timer-dock button { width: 44px; border: 0; border-left: 1px solid rgba(255,255,255,.15); background: transparent; color: #fff; font-size: 1.08rem; cursor: pointer; }
.timer-dock button:hover { background: rgba(255,255,255,.12); }
.timer-alarm-overlay { position: fixed; inset: 0; z-index: 2000; display: grid; place-items: center; padding: 20px; background: rgba(5,15,35,.72); backdrop-filter: blur(5px); }
.timer-alarm-overlay[hidden] { display: none; }
.timer-alarm-card { width: min(560px,96vw); border-radius: 28px; padding: 40px; text-align: center; background: #fff; box-shadow: 0 28px 80px rgba(0,0,0,.35); animation: alarmPop .36s ease both; }
.timer-alarm-icon { font-size: 5rem; animation: alarmShake .6s ease-in-out infinite alternate; }
.timer-alarm-card h2 { font-size: clamp(2rem,6vw,3.5rem); color: #b42318; margin: 12px 0; }
@keyframes alarmPop { from { opacity: 0; transform: scale(.82); } to { opacity: 1; transform: scale(1); } }
@keyframes alarmShake { from { transform: rotate(-8deg); } to { transform: rotate(8deg); } }

/* v1.5 seat print/PDF */
.seat-print-page { margin: 0; background: #eef3f9; color: #10213f; }
.seat-print-toolbar { position: sticky; top: 0; z-index: 20; display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 13px 20px; background: #fff; border-bottom: 1px solid #d7e1ef; box-shadow: 0 5px 18px rgba(16,33,63,.08); }
.seat-print-toolbar > div:first-child { display: grid; gap: 2px; }
.seat-print-options { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 10px; }
.seat-print-options select { min-width: 125px; padding: 8px 10px; }
.seat-print-sheet { width: min(1400px,calc(100% - 34px)); margin: 24px auto; padding: 26px; background: #fff; border-radius: 18px; box-shadow: 0 14px 36px rgba(16,33,63,.12); }
.seat-print-document-title { display: flex; justify-content: space-between; align-items: end; gap: 16px; margin-bottom: 18px; }
.seat-print-document-title h1 { margin: 0 0 4px; font-size: 1.8rem; }
.seat-print-document-title p, .seat-print-date { margin: 0; color: #64748b; }
.print-seat-row-grid { display: grid; grid-template-columns: repeat(var(--seat-columns),minmax(0,1fr)); gap: 12px; }
.print-seat-slot { position: relative; min-height: 88px; padding: 26px 10px 10px; border: 1.5px solid #afbdd0; border-radius: 12px; background: #f9fbfd; break-inside: avoid; }
.print-position-label { position: absolute; top: 7px; left: 9px; font-size: .7rem; color: #7c8ba1; }
.print-student-card { display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 46px; text-align: center; }
.print-student-card strong { font-size: .94rem; }
.print-seat-empty { display: grid; place-items: center; min-height: 44px; color: #a0aec0; font-size: .84rem; }
.print-group-rows { display: grid; gap: 18px; }
.print-group-row { display: grid; grid-template-columns: repeat(var(--groups-in-row),minmax(0,1fr)); gap: 16px; width: min(100%,var(--print-row-max)); }
.print-group-align-left { margin-right: auto; }
.print-group-align-center { margin-left: auto; margin-right: auto; }
.print-group-align-right { margin-left: auto; }
.print-group-align-spread { width: 100%; }
.print-group-card { min-width: 0; padding: 12px; border: 2px solid #c6d3e3; border-radius: 16px; background: #f8fafc; break-inside: avoid; }
.print-group-card h2 { margin: 0 0 10px; text-align: center; font-size: 1.05rem; }
.print-group-slots { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 9px; }
.seat-print-page:not(.show-avatars) .print-avatar { display: none; }
.seat-print-page:not(.show-board) .print-board { display: none; }
.seat-print-page:not(.show-desk) .print-desk { display: none; }
.seat-print-page:not(.color-print) .seat-print-sheet, .seat-print-page:not(.color-print) .seat-print-sheet * { color: #000 !important; background: #fff !important; box-shadow: none !important; }
.pdf-help-modal { position: fixed; inset: 0; z-index: 100; display: grid; place-items: center; padding: 20px; background: rgba(5,15,35,.66); }
.pdf-help-modal[hidden] { display: none; }
.pdf-help-card { width: min(520px,95vw); padding: 28px; border-radius: 20px; background: #fff; box-shadow: 0 25px 70px rgba(0,0,0,.3); text-align: center; }

@media (max-width: 900px) {
  .student-management-grid { grid-template-columns: 1fr; }
  .student-basic-fields { grid-template-columns: 1fr 1.5fr; }
  .student-gender-field { grid-column: 1 / -1; }
  .seat-print-toolbar { align-items: flex-start; flex-direction: column; }
  /* 直排座位列印預覽也忠實保留座位表設定的每列人數，不因視窗變窄改成 2 欄。 */
  .print-seat-row-grid { grid-template-columns: repeat(var(--seat-columns),minmax(0,1fr)); }
  /* 分組列印預覽必須忠實保留教師設定的每列組數，不在窄視窗強制改成 2 欄。 */
  .print-group-row { width: min(100%,var(--print-row-max)); grid-template-columns: repeat(var(--groups-in-row),minmax(0,1fr)); }
}
@media (max-width: 600px) {
  .student-basic-fields { grid-template-columns: 1fr; }
  .student-gender-field { grid-column: auto; }
  .avatar-category { grid-template-columns: 1fr; gap: 3px; }
  .avatar-category > strong { padding-top: 0; }
  .daily-memo-footer { align-items: flex-start; flex-wrap: wrap; }
  .daily-memo-status { min-width: 0; flex: 1; text-align: left; }
  .timer-custom-row { flex-wrap: wrap; }
  .timer-display { font-size: 4.8rem; }
  .timer-dock { right: 9px; bottom: 9px; }
}

@media print {
  .seat-print-page { background: #fff !important; }
  .seat-print-sheet { width: 100%; margin: 0; padding: 0; border-radius: 0; box-shadow: none; }
  .seat-print-document-title { margin-bottom: 5mm; }
  .seat-print-document-title h1 { font-size: 18pt; }
  .classroom-board { margin: 4mm 0 6mm; padding: 4mm; }
  .teacher-desk { margin-top: 5mm; }
  .print-group-rows { gap: 4mm; }
  .print-group-row { gap: 4mm; }
  .print-group-card { padding: 3mm; border-width: 1pt; }
  .print-group-slots { gap: 2.5mm; }
  .print-seat-slot { min-height: 20mm; padding: 6mm 2.5mm 2.5mm; border-width: 1pt; }
  .print-avatar { font-size: 18pt; }
  .print-student-card strong { font-size: 9.5pt; }
  .print-position-label { font-size: 6.5pt; }
  .orientation-landscape .print-group-card { max-width: none; }
}

/* v1.6 class resource center */
.resource-tabs{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:18px}.resource-tab{display:inline-flex;align-items:center;gap:8px;padding:11px 16px;border:1px solid var(--line);border-radius:12px;background:#fff;color:#334155;font-weight:800;box-shadow:var(--shadow)}.resource-tab span{display:inline-flex;min-width:24px;height:24px;align-items:center;justify-content:center;border-radius:999px;background:#e9eef6;font-size:12px}.resource-tab.is-active{background:#12233f;color:#fff;border-color:#12233f}.resource-tab.is-active span{background:rgba(255,255,255,.16)}.resource-check-stack{display:flex;gap:14px;align-items:center;flex-wrap:wrap;padding-top:29px}.resource-card-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.resource-card{position:relative;overflow:hidden;border:1px solid var(--line);border-top:5px solid var(--resource-accent,#2563eb);border-radius:14px;background:#fff;padding:16px;box-shadow:0 7px 20px rgba(15,23,42,.06);display:flex;flex-direction:column;gap:12px}.resource-card.is-muted,.document-card.is-muted{opacity:.64;background:#f8fafc}.resource-card-head{display:flex;align-items:flex-start;gap:12px}.resource-icon{display:flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:13px;background:#eff6ff;background:color-mix(in srgb,var(--resource-accent,#2563eb) 12%,white);font-size:26px}.resource-card-title{font-size:18px;font-weight:850;color:#10213f}.resource-card-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:5px}.resource-url{font-size:13px;color:#64748b;word-break:break-all;padding:8px 10px;background:#f8fafc;border-radius:8px;border:1px dashed #cbd5e1}.resource-card-actions{margin-top:auto}.resource-edit{border-top:1px solid var(--line);padding-top:10px}.resource-edit summary{cursor:pointer;font-weight:750;color:#334155}.resource-edit-form{margin-top:12px;padding:14px;background:#f8fafc;border-radius:10px}.resource-danger-actions{margin-top:12px;padding-top:12px;border-top:1px dashed #f1a7a7}.resource-class-picker{display:flex;gap:12px;flex-wrap:wrap;padding:12px;border:1px solid #cbd5e1;border-radius:10px;background:#f8fafc}.resource-filter-bar{display:grid;grid-template-columns:minmax(240px,1fr) 220px auto auto;gap:10px;align-items:center;margin:12px 0 18px}.document-list{display:grid;gap:14px}.document-card{display:grid;grid-template-columns:72px minmax(0,1fr);gap:16px;padding:17px;border:1px solid var(--line);border-radius:14px;background:#fff}.document-icon{width:66px;height:78px;display:flex;align-items:center;justify-content:center;border-radius:10px;background:#fee2e2;color:#991b1b;font-weight:900;letter-spacing:.5px;border:1px solid #fecaca;position:relative}.document-icon:after{content:"";position:absolute;right:0;top:0;border-top:15px solid #fff;border-left:15px solid transparent}.document-main h3{margin:0;font-size:19px}.document-date{font-weight:750;color:#64748b;white-space:nowrap}.document-actions{margin-top:12px}.resource-qr-modal{position:fixed;inset:0;z-index:120;background:rgba(15,23,42,.68);display:grid;place-items:center;padding:18px}.resource-qr-modal[hidden]{display:none}.resource-qr-card{position:relative;width:min(440px,100%);background:#fff;border-radius:18px;padding:24px;text-align:center;box-shadow:0 25px 80px rgba(0,0,0,.35)}.resource-qr-close{position:absolute;right:12px;top:9px;border:0;background:transparent;font-size:30px;cursor:pointer;color:#64748b}.resource-qr-canvas{display:flex;justify-content:center;margin:10px auto}.resource-qr-canvas canvas{max-width:100%;height:auto;border:1px solid #e2e8f0}.resource-qr-url{font-size:12px;color:#64748b;word-break:break-all;padding:8px;background:#f8fafc;border-radius:8px}.public-resource-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.public-resource-card{border:1px solid var(--line);border-radius:12px;padding:14px;background:#fff}.public-resource-card h3{margin:0 0 6px}.public-resource-card .actions{margin-top:10px}input[type=color]{width:100%;height:43px;padding:3px;border:1px solid #bdc9da;border-radius:8px;background:#fff}
@media(max-width:950px){.resource-card-grid,.public-resource-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.resource-filter-bar{grid-template-columns:1fr 1fr}.resource-filter-bar .btn{width:100%}}
@media(max-width:650px){.resource-card-grid,.public-resource-grid{grid-template-columns:1fr}.document-card{grid-template-columns:1fr}.document-icon{width:58px;height:64px}.resource-filter-bar{grid-template-columns:1fr}.resource-check-stack{padding-top:0}.document-date{white-space:normal}.resource-tabs{display:grid;grid-template-columns:1fr 1fr}.resource-tab{justify-content:center;padding:10px}}
@media print{.resource-tabs,.resource-filter-bar,.resource-edit,.resource-card-actions,.document-actions{display:none!important}}

/* v1.7 teacher memo and daily homework */
.daily-notes-grid { display: grid; grid-template-columns: 1fr; gap: 0; }
.teacher-memo-panel { border-left-color: #8b5cf6; }
.homework-panel { border-left-color: #16a34a; }
.homework-panel .daily-memo-textarea:focus { outline-color: rgba(22,163,74,.16); border-color: #16a34a; }
.homework-heading { align-items: flex-start; }
.homework-publication-row { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin: -2px 0 12px; padding: 10px 12px; border-radius: 10px; background: #f8fafc; border: 1px solid #e2e8f0; }
.homework-state { display: inline-flex; align-items: center; border-radius: 999px; padding: 4px 10px; font-size: .86rem; font-weight: 850; }
.homework-state-draft { background: #eef2f6; color: #475569; }
.homework-state-published { background: #dcfce7; color: #166534; }
.homework-state-no_homework { background: #dbeafe; color: #1d4ed8; }
.homework-footer { flex-wrap: wrap; }
.homework-copy-classes { margin-top: 14px; border-top: 1px solid #e2e8f0; padding-top: 12px; }
.homework-copy-classes summary { cursor: pointer; color: #1d4ed8; font-weight: 800; }
.homework-copy-class-list { display: flex; flex-wrap: wrap; gap: 10px 18px; margin: 12px 0; padding: 12px; background: #f8fafc; border-radius: 10px; }
.homework-copy-class-list .check-label { min-width: 210px; }

.public-homework-panel { border: 2px solid #93c5fd; background: linear-gradient(145deg,#eff6ff,#ffffff); }
.public-homework-panel.is-no-homework { border-color: #86efac; background: linear-gradient(145deg,#f0fdf4,#ffffff); }
.public-homework-panel.is-unpublished { border-style: dashed; border-color: #cbd5e1; background: #f8fafc; }
.public-homework-title { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }
.public-homework-title h2 { margin: 0; font-size: 1.65rem; }
.public-homework-content { margin-top: 16px; padding: 18px 20px; border-radius: 12px; background: rgba(255,255,255,.86); border: 1px solid #dbeafe; white-space: pre-wrap; overflow-wrap: anywhere; font-size: 1.16rem; line-height: 1.85; font-weight: 650; color: #172554; }
.public-homework-empty { padding: 18px; text-align: center; color: #64748b; font-weight: 700; }
.public-homework-history { margin-top: 14px; }
.public-homework-history summary { cursor: pointer; color: #1d4ed8; font-weight: 800; }
.public-homework-history-list { display: grid; gap: 10px; margin-top: 12px; }
.public-homework-history-item { padding: 12px 14px; border: 1px solid #dbe3ef; border-radius: 10px; background: #fff; }
.public-homework-history-item strong { display: block; margin-bottom: 5px; color: #1e3a5f; }
.public-homework-history-item div { white-space: pre-wrap; overflow-wrap: anywhere; }

.homework-display-page { margin: 0; min-height: 100vh; background: #f5f7fb; color: #10213f; font-family: -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans TC",Arial,sans-serif; }
.homework-display-toolbar { position: fixed; z-index: 20; top: 14px; left: 50%; transform: translateX(-50%); display: flex; align-items: center; flex-wrap: wrap; justify-content: center; gap: 8px; padding: 9px 12px; border-radius: 14px; background: rgba(255,255,255,.94); border: 1px solid #d7e1ef; box-shadow: 0 10px 30px rgba(15,23,42,.16); backdrop-filter: blur(8px); }
.homework-display-stage { --homework-font-size: 52px; min-height: 100vh; display: flex; flex-direction: column; justify-content: center; padding: 92px 6vw 54px; background: #fff; transition: background .2s ease,color .2s ease; }
.homework-display-stage.is-board { background: #174b3a; color: #fffbea; }
.homework-display-stage.is-dark { background: #111827; color: #f8fafc; }
.homework-display-header { text-align: center; margin-bottom: 4vh; }
.homework-display-header h1 { margin: 0; font-size: clamp(2rem,5vw,4.6rem); letter-spacing: .04em; }
.homework-display-header p { margin: 10px 0 0; font-size: clamp(1rem,2vw,1.6rem); opacity: .78; }
.homework-display-content { width: min(1400px,100%); margin: 0 auto; text-align: center; white-space: pre-wrap; overflow-wrap: anywhere; font-size: var(--homework-font-size); line-height: 1.65; font-weight: 800; letter-spacing: .015em; }
.homework-display-empty { text-align: center; color: #64748b; }
.homework-display-stage.is-board .homework-display-empty,.homework-display-stage.is-dark .homework-display-empty { color: #e2e8f0; }
.homework-display-status { margin-top: 4vh; text-align: center; font-size: 1rem; opacity: .65; }
.homework-display-page:fullscreen .homework-display-stage { min-height: 100vh; }
@media(max-width:700px){
  .daily-memo-footer { align-items: flex-start; justify-content: flex-start; }
  .daily-memo-status { min-width: 0; text-align: left; }
  .homework-display-toolbar { width: calc(100% - 20px); top: 8px; }
  .homework-display-stage { --homework-font-size: 36px; padding: 100px 5vw 36px; }
}
@media print {
  .homework-display-toolbar { display: none!important; }
  .homework-display-stage { padding: 20px; min-height: auto; }
}

/* v1.7.1 PDF browser clarification and copy-link workflow */
.resource-edge-help{display:flex;gap:12px;align-items:flex-start;margin:12px 0 18px;padding:14px 16px;border:1px solid #bfdbfe;border-left:5px solid #2563eb;border-radius:12px;background:#eff6ff;color:#1e3a5f}.resource-edge-help-icon{font-size:26px;line-height:1}.resource-edge-help strong{display:block;margin-bottom:3px;color:#10213f}.resource-edge-help p{margin:0;font-size:14px;line-height:1.65}.document-actions button:disabled{opacity:.72;cursor:wait}
@media(max-width:650px){.resource-edge-help{padding:12px}.resource-edge-help-icon{font-size:22px}}

/* v1.8 ordinary grade management */
.grade-category-add{display:flex;gap:10px;align-items:center;margin-bottom:14px}.grade-category-add input{max-width:320px}.grade-category-list{display:flex;flex-wrap:wrap;gap:10px}.grade-category-chip{display:flex;align-items:center;gap:8px;padding:8px;border:1px solid var(--line);border-radius:11px;background:#f8fafc}.grade-category-chip input{width:150px;padding:7px 9px}.grade-category-chip.is-disabled{opacity:.62}.grade-category-chip.is-disabled input{background:#eef2f7}.grade-items-table{min-width:1100px}.grade-item-actions{min-width:280px}.inline-details{position:relative}.inline-details>summary{list-style:none}.inline-details>summary::-webkit-details-marker{display:none}.details-popover{position:absolute;z-index:20;right:0;top:calc(100% + 8px);width:min(520px,85vw);padding:14px;border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:0 18px 45px rgba(15,23,42,.2)}.row-muted td{background:#f8fafc;color:#64748b}.unlock-reason{width:130px!important;padding:6px 8px!important}.grade-entry-summary{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}.grade-batch-toolbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}.grade-entry-table{min-width:900px}.grade-entry-table .grade-score-input{min-width:100px}.grade-entry-table .grade-status-select{min-width:118px}.grade-save-bar{display:flex;justify-content:space-between;align-items:end;gap:18px;margin-top:16px;padding:14px;border:1px solid var(--line);border-radius:12px;background:#f8fafc}.grade-save-bar>div{flex:1}.grade-category-filter{display:flex;flex-wrap:wrap;gap:10px 20px;padding:12px;border:1px solid #cbd5e1;border-radius:10px;background:#f8fafc}.grade-detail-wrap{max-height:68vh}.grade-detail-table{min-width:max-content}.grade-detail-table th,.grade-detail-table td{min-width:125px}.grade-detail-table .sticky-col{position:sticky;left:0;z-index:3;min-width:180px;background:#fff;box-shadow:2px 0 0 #d7e1ef}.grade-detail-table thead .sticky-col{background:#eef3f9;z-index:4}.grade-status-text{font-size:12px;color:#64748b;white-space:nowrap}
@media(max-width:700px){.grade-category-chip{width:100%;flex-wrap:wrap}.grade-category-chip input{flex:1;width:auto}.grade-save-bar{align-items:stretch;flex-direction:column}.grade-save-bar .btn{width:100%}.details-popover{position:fixed;left:10px;right:10px;top:80px;width:auto;max-height:calc(100vh - 100px);overflow:auto}.grade-category-add{align-items:stretch;flex-direction:column}.grade-category-add input{max-width:none}}
@media print{.grade-batch-toolbar,.grade-save-bar,.grade-item-actions,.grade-category-add{display:none!important}}

/* v1.8.1 平時成績設定大型視窗 */
body.grade-modal-open{overflow:hidden}.grade-settings-modal{position:fixed;inset:0;z-index:220;display:grid;place-items:center;padding:24px;background:rgba(15,23,42,.68);backdrop-filter:blur(2px)}.grade-settings-modal[hidden]{display:none}.grade-settings-dialog{width:min(880px,100%);max-height:min(88vh,820px);display:flex;flex-direction:column;overflow:hidden;border:1px solid #d8e1ee;border-radius:18px;background:#fff;box-shadow:0 28px 90px rgba(15,23,42,.38)}.grade-settings-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:22px 24px 18px;border-bottom:1px solid var(--line);background:#f8fafc}.grade-settings-header h2{margin:0 0 4px;font-size:24px}.grade-settings-header p{margin:0}.grade-settings-close{flex:0 0 auto;width:42px;height:42px;border:0;border-radius:50%;background:#e9eef6;color:#334155;font-size:30px;line-height:1;cursor:pointer}.grade-settings-close:hover{background:#dbe4f0}.grade-settings-body{overflow:auto;padding:24px}.grade-settings-form{display:flex;min-height:0;flex-direction:column}.grade-settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.grade-settings-field{min-width:0}.grade-settings-wide{grid-column:1/-1}.grade-settings-field label{margin-bottom:7px}.grade-settings-field input,.grade-settings-field select,.grade-settings-field textarea{font-size:16px;padding:12px 13px}.grade-settings-field textarea{min-height:130px;resize:vertical}.grade-bonus-setting{display:grid;grid-template-columns:minmax(210px,.8fr) minmax(220px,1.2fr);gap:18px;align-items:end;padding:16px;border:1px solid #dbe4f0;border-radius:12px;background:#f8fafc}.grade-bonus-setting>.check-label{align-self:center;margin-bottom:11px}.grade-bonus-limit-wrap label{font-size:14px}.grade-settings-footer{position:sticky;bottom:-24px;display:flex;align-items:center;justify-content:space-between;gap:16px;margin:22px -24px -24px;padding:16px 24px;border-top:1px solid var(--line);background:#fff;box-shadow:0 -8px 18px rgba(15,23,42,.04)}.grade-settings-footer p{margin:0}.grade-settings-footer .actions{flex-wrap:nowrap}.grade-settings-footer .btn{min-width:108px}.grade-items-table td:last-child{min-width:390px}.grade-item-actions{min-width:360px;flex-wrap:nowrap}.grade-item-actions form{white-space:nowrap}
@media(max-width:900px){.grade-item-actions{min-width:300px;flex-wrap:wrap}.grade-items-table td:last-child{min-width:330px}}
@media(max-width:700px){.grade-settings-modal{align-items:stretch;padding:0}.grade-settings-dialog{width:100%;height:100%;max-height:none;border-radius:0}.grade-settings-header{padding:18px}.grade-settings-header h2{font-size:21px}.grade-settings-body{padding:18px}.grade-settings-grid{grid-template-columns:1fr}.grade-settings-wide{grid-column:auto}.grade-bonus-setting{grid-template-columns:1fr}.grade-settings-footer{bottom:-18px;flex-direction:column;align-items:stretch;margin:20px -18px -18px;padding:14px 18px}.grade-settings-footer .actions{display:grid;grid-template-columns:1fr 1fr}.grade-settings-footer .btn{width:100%;min-height:46px}.grade-settings-close{width:40px;height:40px}.grade-items-table td:last-child{min-width:260px}.grade-item-actions{min-width:230px;flex-wrap:wrap}}


/* v1.8.2 fixed short URLs and public page QR */
.class-public-box{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px;align-items:center;margin:16px 0;padding:16px;border:1px solid #bfdbfe;border-left:5px solid #2563eb;border-radius:12px;background:#eff6ff}.class-public-box .public-link{margin:7px 0 4px;background:#fff}.class-short-code-form{margin-top:14px;padding-top:14px;border-top:1px dashed #cbd5e1}.short-code-input{display:flex;align-items:stretch}.short-code-input span{display:flex;align-items:center;padding:0 11px;border:1px solid #bdc9da;border-right:0;border-radius:8px 0 0 8px;background:#eef2f7;color:#475569;white-space:nowrap}.short-code-input input{border-radius:0 8px 8px 0}.public-header-inner{width:min(1120px,100%);margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:28px;align-items:center}.public-header-main{text-align:center}.public-page-qr-card{padding:13px;border-radius:16px;background:#fff;color:#10213f;box-shadow:0 12px 34px rgba(0,0,0,.22);text-align:center}.public-page-qr-canvas{display:flex;justify-content:center;margin-bottom:7px}.public-page-qr-canvas canvas{display:block;width:132px;height:132px;max-width:100%;border:1px solid #e2e8f0}.public-short-url{display:block;margin-top:5px;color:#1d4ed8;font-size:12px;font-weight:750;word-break:break-all}.public-page-qr-actions{display:flex;gap:6px;justify-content:center;margin-top:9px}.public-page-qr-actions button{border:0;border-radius:8px;padding:6px 9px;background:#e9eef6;color:#24324a;font-weight:750;cursor:pointer;font-size:12px}
@media(max-width:760px){.class-public-box{grid-template-columns:1fr}.public-header-inner{grid-template-columns:1fr}.public-page-qr-card{width:min(260px,100%);margin:0 auto}.public-header{padding:28px 18px}.public-page-qr-canvas canvas{width:145px;height:145px}}
@media(max-width:600px){.short-code-input{display:block}.short-code-input span{border-right:1px solid #bdc9da;border-radius:8px 8px 0 0;padding:8px 10px}.short-code-input input{border-radius:0 0 8px 8px}.public-page-qr-actions{flex-wrap:wrap}}

/* v1.8.3 student public learning board responsive redesign */
.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}
.public-learning-page{overflow-x:hidden}.public-learning-header{padding:28px 20px}.public-learning-header .public-header-inner{grid-template-columns:minmax(0,1fr) 210px}.public-header-star{font-size:42px;line-height:1}.public-learning-header h1{font-size:clamp(1.9rem,4vw,2.7rem);margin:7px 0}.public-last-updated{opacity:.82;margin-top:6px}.public-learning-container{width:min(1160px,calc(100% - 24px));margin:20px auto 44px}.public-section-nav{width:min(1160px,calc(100% - 24px));margin:14px auto 0;display:flex;gap:9px;flex-wrap:wrap;justify-content:center}.public-section-nav a{display:inline-flex;align-items:center;justify-content:center;padding:8px 13px;border:1px solid #d6e1f0;border-radius:999px;background:#fff;color:#1e3a5f;font-weight:800;box-shadow:0 5px 16px rgba(15,23,42,.05)}.public-section-nav a:hover{text-decoration:none;background:#eff6ff}.public-section-icon{font-size:2rem}.public-panel-updated{margin-top:10px}.public-resources-panel{border-color:#ddd6fe;background:linear-gradient(145deg,#faf5ff,#fff)}.public-resources-heading p,.public-points-heading p{margin:3px 0 0}.public-resource-featured-grid,.public-resource-all-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.public-resource-card-compact{display:flex;flex-direction:column;justify-content:space-between;min-width:0;gap:13px;padding:15px}.public-resource-card-compact .resource-card-head{align-items:flex-start}.public-resource-card-copy{min-width:0}.public-resource-card-copy h3{overflow-wrap:anywhere;line-height:1.45}.public-resource-tags{display:flex;gap:5px;flex-wrap:wrap}.public-resource-unit{margin-top:6px}.public-resource-open{align-self:flex-start}.public-resource-card-actions{display:flex;gap:7px;flex-wrap:wrap}.public-resource-pdf-icon{display:inline-flex;align-items:center;justify-content:center;background:#fee2e2!important;color:#991b1b!important;font-size:12px!important;font-weight:900}.public-resource-more{margin-top:16px}.public-resource-more>summary{cursor:pointer;display:flex;align-items:center;justify-content:center;padding:10px 14px;border:1px dashed #a78bfa;border-radius:10px;background:#fff;color:#6d28d9;font-weight:850}.public-resource-more[open]>summary{margin-bottom:14px}.public-points-panel{border-color:#fde68a;background:linear-gradient(145deg,#fffbeb,#fff)}.public-points-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:16px 0}.public-points-search{flex:1;max-width:440px;margin:0}.public-points-search input{background:#fff}.public-view-switch{display:inline-flex;padding:3px;border:1px solid #cbd5e1;border-radius:10px;background:#eef2f7}.public-view-switch button{border:0;border-radius:7px;padding:7px 12px;background:transparent;color:#475569;font-weight:800;cursor:pointer}.public-view-switch button.is-active{background:#2563eb;color:#fff;box-shadow:0 3px 9px rgba(37,99,235,.25)}.public-points-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px}.public-student-card{min-width:0;padding:14px;border:1px solid #e4d79b;border-radius:13px;background:#fff;box-shadow:0 7px 20px rgba(120,83,16,.06)}.public-student-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:9px}.public-student-identity{display:flex;align-items:center;gap:10px;min-width:0}.public-student-identity strong{display:block;overflow-wrap:anywhere}.public-student-seat{font-size:12px;color:#64748b;font-weight:750}.public-rank-badge{flex:0 0 auto;font-size:12px;padding:4px 7px;border-radius:999px;background:#fef3c7;color:#92400e;font-weight:850}.public-current-points{display:flex;align-items:flex-end;justify-content:space-between;margin:14px 0 11px;padding:10px 11px;border-radius:10px;background:#fff7d6}.public-current-points span{font-size:13px;color:#786010;font-weight:800}.public-current-points strong{font-size:28px;line-height:1;color:#713f12}.public-point-breakdown{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}.public-point-breakdown span{display:block;padding:6px 5px;border-radius:7px;background:#f8fafc;color:#64748b;font-size:11px;text-align:center;white-space:nowrap}.public-point-breakdown strong{display:block;color:#1f2937;font-size:14px}.public-points-table-wrap{overflow:visible;border:1px solid #eadfae;border-radius:12px}.public-points-table{min-width:0;table-layout:fixed}.public-points-table th:first-child{width:39%}.public-points-table th:nth-child(2){width:43%}.public-points-table th:last-child{width:18%}.public-table-detail{color:#64748b;overflow-wrap:anywhere}.public-table-current{font-size:21px;color:#713f12}.public-student-empty{padding:24px;text-align:center;color:#64748b;font-weight:750}.public-readonly-note{margin-top:4px}.public-page-share-card{min-width:0}.public-qr-modal{position:fixed;inset:0;z-index:260;display:grid;place-items:center;padding:18px;background:rgba(15,23,42,.72);backdrop-filter:blur(3px)}.public-qr-modal[hidden]{display:none}.public-qr-dialog{position:relative;width:min(430px,100%);padding:26px;border-radius:20px;background:#fff;color:#10213f;text-align:center;box-shadow:0 28px 90px rgba(15,23,42,.45)}.public-qr-dialog h2{margin:0 0 14px}.public-qr-close{position:absolute;right:12px;top:10px;width:38px;height:38px;border:0;border-radius:50%;background:#e9eef6;color:#334155;font-size:27px;line-height:1;cursor:pointer}.public-page-qr-modal-canvas canvas{width:min(280px,70vw);height:auto}.public-short-url-large{font-size:15px;margin:10px 0;word-break:break-all}.public-page-qr-modal-actions{margin-top:14px}.public-modal-open{overflow:hidden}
@media(max-width:1050px){.public-points-cards{grid-template-columns:repeat(3,minmax(0,1fr))}.public-resource-featured-grid,.public-resource-all-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.public-learning-header .public-header-inner{grid-template-columns:1fr;gap:15px}.public-learning-header{padding:22px 14px}.public-header-star{font-size:34px}.public-page-share-card{width:min(520px,100%);padding:11px 13px}.public-page-qr-desktop{display:none}.public-qr-desktop-action{display:none}.public-short-url{font-size:14px;word-break:break-all}.public-page-qr-actions{margin-top:7px}.public-page-qr-actions button{font-size:13px;padding:7px 10px}.public-learning-container{width:calc(100% - 14px);margin-top:14px}.public-learning-container>.panel{padding:15px;border-radius:12px;margin-bottom:14px}.public-section-nav{width:calc(100% - 14px);justify-content:stretch;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.public-section-nav a{padding:8px 5px;font-size:13px}.public-resource-featured-grid,.public-resource-all-grid{grid-template-columns:1fr}.public-points-cards{grid-template-columns:repeat(2,minmax(0,1fr))}.public-points-toolbar{align-items:stretch;flex-direction:column}.public-points-search{max-width:none}.public-view-switch{align-self:flex-end}.public-points-table th:first-child{width:48%}.public-points-table th:nth-child(2){width:35%}.public-points-table th:last-child{width:17%}.public-points-table th,.public-points-table td{padding:9px 8px}.public-points-table .avatar{width:36px;height:36px;font-size:21px}.public-table-detail{font-size:12px}.public-homework-content{padding:15px;font-size:1.05rem}.public-homework-title h2{font-size:1.4rem}}
@media(max-width:520px){.public-learning-header h1{font-size:1.65rem}.public-learning-header .public-header-main>div:not(.public-header-star):not(.public-last-updated){font-size:14px}.public-last-updated{font-size:11px}.public-section-nav{grid-template-columns:1fr}.public-points-cards{grid-template-columns:1fr}.public-view-switch{display:none}.public-points-table-wrap{display:none!important}.public-points-cards[hidden]{display:grid!important}.public-student-card{padding:13px}.public-current-points{margin:11px 0 9px}.public-current-points strong{font-size:26px}.public-point-breakdown span{font-size:11px}.public-resource-card-compact{padding:13px}.public-resources-heading,.public-points-heading{align-items:flex-start}.public-resources-heading h2,.public-points-heading h2{font-size:1.32rem}.public-homework-title{align-items:flex-start}.public-page-qr-actions button{flex:1}.public-qr-dialog{padding:23px 16px}.public-qr-dialog h2{font-size:1.35rem}.public-page-qr-modal-actions{display:grid;grid-template-columns:1fr 1fr}.public-page-qr-modal-actions button:last-child{grid-column:1/-1}}
@media print{.public-section-nav,.public-points-toolbar,.public-page-share-card,.public-qr-modal{display:none!important}.public-points-cards{grid-template-columns:repeat(3,minmax(0,1fr))}.public-learning-container{width:100%}}

/* v1.8.4 Demo login and demo-mode safety */
.login-shell{max-width:560px;margin:42px auto;padding:0 12px}
.login-panel{padding:26px 28px}
.login-brand-row{display:flex;align-items:center;gap:12px;margin-bottom:2px}
.login-brand-row h1{margin:0;font-size:clamp(28px,5vw,38px);line-height:1.25;color:#10213f}
.login-brand-icon{width:74px;height:74px;flex:0 0 74px;display:grid;place-items:center;line-height:1;border-radius:18px;overflow:hidden;background:#fff;box-shadow:0 8px 22px rgba(15,23,42,.10);border:1px solid #dbe5f1}.login-brand-icon img{display:block;width:100%;height:100%;object-fit:cover}
.login-version{margin:12px 0 18px;font-size:16px}
.demo-login-card{margin:0 0 20px;padding:16px 17px;border:1px solid #bfdbfe;border-radius:13px;background:linear-gradient(145deg,#eff6ff,#f8fbff);box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.demo-login-heading{display:flex;align-items:center;gap:8px;color:#1e40af;font-size:18px;margin-bottom:5px}
.demo-login-card>p{margin:7px 0;color:#475569}
.demo-credential-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin:12px 0}
.demo-credential-grid>div{padding:10px 12px;border:1px solid #dbeafe;border-radius:9px;background:#fff}
.demo-credential-grid span{display:block;color:#64748b;font-size:12px;font-weight:750;margin-bottom:3px}
.demo-credential-grid strong{display:block;color:#0f2d5c;font-size:17px;word-break:break-all}
.demo-fill-btn{width:100%;margin-top:2px}
.demo-login-note{font-size:12px!important;line-height:1.55;color:#7c5f12!important;background:#fffbeb;border-radius:8px;padding:8px 10px;margin-top:11px!important}
.login-submit{min-width:150px}
.demo-mode-banner{border:1px solid #93c5fd;box-shadow:0 6px 18px rgba(30,64,175,.07)}
.demo-readonly-panel,.demo-sensitive-note{border-color:#bfdbfe;background:#f8fbff}
@media(max-width:620px){.login-shell{margin:18px auto}.login-panel{padding:20px 17px}.login-brand-icon{width:60px;height:60px;flex-basis:60px;border-radius:15px}.demo-credential-grid{grid-template-columns:1fr}.login-submit{width:100%}}

/* v1.8.5 正式教師帳號申請與審核 */
.formal-login-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:3px 0 12px}.formal-login-heading strong{font-size:17px}.formal-login-heading span{font-size:12px}.teacher-apply-card{margin-top:20px;padding:16px;border:1px solid #bbf7d0;border-radius:13px;background:linear-gradient(145deg,#f0fdf4,#fbfffc)}.teacher-apply-card p{margin:5px 0 12px;color:#475569}.teacher-apply-actions{display:flex;gap:8px;flex-wrap:wrap}.application-shell{width:min(920px,calc(100% - 26px));margin:28px auto 60px}.application-status-shell{max-width:780px}.application-brand{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;color:#64748b}.application-brand a{font-size:19px;font-weight:850;color:#12233f}.application-form-panel{padding:28px}.application-heading{margin-bottom:20px}.application-heading h1,.application-form-panel>h1{margin:5px 0 6px}.application-kicker{display:inline-block;color:#1d4ed8;font-weight:850}.application-form textarea{resize:vertical}.application-honeypot{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.application-terms{margin:18px 0;padding:14px;border:1px solid #dbe4ef;border-radius:10px;background:#f8fafc}.application-terms .check-label{align-items:flex-start;line-height:1.55}.application-submit-row{justify-content:flex-end}.application-status-link{text-align:center;color:#64748b}.application-success-card{text-align:center;max-width:650px;margin:55px auto}.application-success-icon{width:62px;height:62px;border-radius:50%;display:grid;place-items:center;margin:0 auto 12px;background:#dcfce7;color:#166534;font-size:34px;font-weight:900}.application-number{display:inline-flex;flex-direction:column;gap:3px;margin:12px 0 15px;padding:13px 25px;border-radius:12px;background:#eff6ff;border:1px solid #bfdbfe}.application-number span{font-size:12px;color:#64748b}.application-number strong{font-size:23px;letter-spacing:.8px;color:#1e3a8a}.application-center-actions{justify-content:center}.application-status-result{margin-top:22px;padding:19px;border:1px solid #dbe4ef;border-radius:13px;background:#fff}.application-status-grid,.application-review-grid,.account-credential-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:14px 0}.application-status-grid>div,.application-review-grid>div,.account-credential-grid>div{min-width:0;padding:10px 12px;border:1px solid #e2e8f0;border-radius:10px;background:#f8fafc}.application-status-grid span,.application-review-grid span,.account-credential-grid span{display:block;font-size:12px;color:#64748b;margin-bottom:2px}.application-status-grid strong,.application-review-grid strong,.account-credential-grid strong{display:block;overflow-wrap:anywhere}.application-admin-note,.application-purpose{margin:13px 0;padding:12px 14px;border-radius:10px;background:#f8fafc;border-left:4px solid #94a3b8}.application-admin-note p,.application-purpose p{margin:5px 0 0}.application-filter-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.application-filter-tabs a{padding:8px 12px;border-radius:999px;background:#eef2f7;color:#334155;font-weight:800}.application-filter-tabs a.is-active{background:#2563eb;color:#fff}.application-review-card h2{margin:7px 0 0}.application-review-form{border-top:1px solid #e2e8f0;margin-top:15px;padding-top:15px}.account-created-notice{border:2px solid #86efac;background:linear-gradient(145deg,#f0fdf4,#fff)}.account-created-notice h2{margin:5px 0}.account-notice-text{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:#fff}.account-table{min-width:1120px}.password-reset-details summary{cursor:pointer;color:#2563eb;font-size:13px;font-weight:750}.password-reset-inline{display:flex;gap:6px;margin-top:7px}.password-reset-inline input{min-width:160px;padding:6px 8px}.password-change-panel{max-width:620px;margin-left:auto;margin-right:auto}.password-change-form{display:grid;gap:16px}.account-expiry-banner{margin-bottom:16px}.account-summary-panel{border-color:#bfdbfe;background:linear-gradient(145deg,#eff6ff,#fff)}
@media(max-width:720px){.application-shell{width:min(100% - 16px,920px);margin:12px auto 40px}.application-form-panel{padding:20px 15px}.application-brand{padding:0 4px}.application-status-grid,.application-review-grid,.account-credential-grid{grid-template-columns:1fr}.application-submit-row{justify-content:stretch}.application-submit-row .btn{flex:1}.teacher-apply-actions{display:grid;grid-template-columns:1fr}.formal-login-heading{align-items:flex-start;flex-direction:column}.application-filter-tabs a{flex:1;text-align:center}.password-reset-inline{flex-direction:column}.password-reset-inline input{min-width:0}}

/* v1.9 課堂互動與班級經營整合版 */
.class-nav-v19{display:block;overflow:visible;white-space:normal;padding:10px 20px 12px}.class-nav-title{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:8px}.class-public-link{font-weight:800}.class-nav-groups{display:flex;gap:8px;flex-wrap:wrap}.class-nav-menu{position:relative}.class-nav-menu>summary{list-style:none;cursor:pointer;padding:7px 11px;border-radius:9px;background:#eef3f9;font-weight:800;color:#24324a}.class-nav-menu>summary::-webkit-details-marker{display:none}.class-nav-menu[open]>summary{background:#dbeafe;color:#1e40af}.class-nav-menu>div{display:flex;gap:7px;flex-wrap:wrap;padding-top:7px}.class-nav-menu a{display:inline-flex;padding:6px 9px;border-radius:8px;background:#fff;border:1px solid var(--line);font-size:13px;font-weight:700}.class-nav-menu a:hover{background:#f8fafc;text-decoration:none}
.attendance-summary{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin-top:15px}.attendance-kpi{padding:13px;border:1px solid var(--line);border-radius:12px;background:#f8fafc;text-align:center}.attendance-kpi strong{display:block;font-size:26px}.attendance-kpi span{font-size:13px;font-weight:800}.attendance-list{display:grid;gap:10px}.attendance-student-card{display:grid;grid-template-columns:minmax(190px,1fr) minmax(420px,2fr) minmax(160px,1fr);gap:12px;align-items:center;padding:12px;border:1px solid var(--line);border-radius:12px;background:#fff}.student-identity{display:flex;align-items:center;gap:10px}.student-identity small{display:block;color:var(--muted)}.attendance-status-buttons{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px}.attendance-status-choice{margin:0}.attendance-status-choice input{position:absolute;opacity:0}.attendance-status-choice span{display:block;text-align:center;padding:8px 4px;border:1px solid #cbd5e1;border-radius:9px;background:#fff;font-size:13px;cursor:pointer}.attendance-status-choice input:checked+span{background:#1d4ed8;color:#fff;border-color:#1d4ed8}.daily-student-absent td{background:#fff8e7!important}.daily-student-absent input[type=checkbox]{opacity:.45}
.homework-manager-grid{grid-template-columns:minmax(300px,.85fr) minmax(0,1.45fr);align-items:start}.form-section{margin-top:14px}.homework-assignment-list{display:grid;gap:8px;margin-top:16px}.homework-assignment-card{display:grid;gap:3px;padding:11px;border:1px solid var(--line);border-radius:10px;color:var(--text)}.homework-assignment-card:hover,.homework-assignment-card.is-active{background:#eef6ff;border-color:#93b4f5;text-decoration:none}.homework-assignment-card small,.homework-assignment-card span{color:var(--muted);font-size:13px}.homework-description{padding:12px 14px;background:#f8fafc;border-radius:10px;margin-bottom:12px;white-space:pre-wrap}.homework-bulk-actions{margin-bottom:12px}.homework-submission-list{display:grid;gap:8px}.homework-student-row{display:grid;grid-template-columns:minmax(180px,1fr) 130px minmax(150px,1fr);gap:10px;align-items:center;padding:9px;border:1px solid var(--line);border-radius:10px}.homework-student-row .avatar{width:34px;height:34px;font-size:20px}
.group-manager-grid{grid-template-columns:minmax(330px,.9fr) minmax(0,1.4fr);align-items:start}.group-participant-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;max-height:390px;overflow:auto}.group-session-list{display:grid;gap:7px}.group-session-link{display:grid;padding:10px;border:1px solid var(--line);border-radius:9px;color:var(--text)}.group-session-link small{color:var(--muted)}.group-session-link.is-active,.group-session-link:hover{background:#eef6ff;border-color:#93b4f5;text-decoration:none}.group-team-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.group-team-card{border:1px solid var(--line);border-radius:14px;padding:13px;background:#fff}.group-team-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.group-member-list{display:grid;gap:6px}.group-member{display:flex;align-items:center;gap:7px;padding:7px 8px;background:#f8fafc;border-radius:9px}.group-member.is-leader{background:#fff7d6}.group-member strong{flex:1}.group-leader-form{margin-left:auto}.icon-button{border:0;background:transparent;cursor:pointer;font-size:18px;color:#a16207}.group-session-actions{margin-top:14px}.group-display-page{background:#0f172a;color:#fff;padding:24px;min-height:100vh}.group-display-page header{text-align:center;margin-bottom:22px}.group-display-page h1{font-size:clamp(2rem,5vw,4rem);margin-bottom:0}.group-display-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}.group-display-grid section{background:#fff;color:#10213f;border-radius:18px;padding:18px}.group-display-grid h2{font-size:2rem;margin:0 0 10px}.group-display-member{font-size:1.35rem;padding:8px 0;border-bottom:1px solid #e5e7eb}.fullscreen-floating{position:fixed;right:18px;bottom:18px;padding:10px 14px;border:0;border-radius:10px;font-weight:800;cursor:pointer}
.competition-panel:fullscreen{overflow:auto;background:#f4f7fb;padding:24px}.competition-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.competition-team{position:relative;padding:18px;border:1px solid var(--line);border-radius:16px;background:#fff;text-align:center}.competition-rank{position:absolute;top:10px;right:10px;font-weight:900;color:#64748b}.competition-score{font-size:clamp(2.8rem,7vw,5rem);font-weight:900;line-height:1;margin:15px 0;color:#1d4ed8}.competition-controls{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.competition-controls button{padding:10px 3px;border:0;border-radius:9px;background:#e8eef7;font-weight:900;cursor:pointer}.competition-members{display:flex;flex-wrap:wrap;gap:5px;justify-content:center;margin:12px 0}.competition-members span{font-size:12px;background:#f1f5f9;border-radius:999px;padding:4px 7px}.competition-award{margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
.classroom-tool-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.tool-card{text-align:center;display:flex;flex-direction:column;gap:12px;align-items:stretch}.tool-big-result{font-size:clamp(2.8rem,7vw,5.5rem);font-weight:900;min-height:86px;display:grid;place-items:center}.tool-inline-inputs{display:flex;align-items:center;gap:8px}.stopwatch-display{font-variant-numeric:tabular-nums}.traffic-light{width:110px;margin:auto;background:#1f2937;padding:12px;border-radius:25px;display:grid;gap:9px}.traffic-light button{width:70px;height:70px;margin:auto;border:0;border-radius:50%;opacity:.22;cursor:pointer}.traffic-light button[data-light=red]{background:#ef4444}.traffic-light button[data-light=yellow]{background:#f59e0b}.traffic-light button[data-light=green]{background:#22c55e}.traffic-light button.is-on{opacity:1;box-shadow:0 0 22px currentColor}.command-overlay{position:fixed;inset:0;z-index:3000;background:#0b1730;color:#fff;padding:4vw}.command-overlay[hidden]{display:none}.command-overlay-inner{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:3vh}.command-overlay-text{font-size:clamp(2rem,6vw,5.6rem);font-weight:900;white-space:pre-wrap;max-width:1200px}.command-overlay-timer{font-size:clamp(4rem,12vw,10rem);font-weight:900;font-variant-numeric:tabular-nums}.command-overlay-actions{display:flex;gap:10px}.command-overlay-actions button{font-size:1.15rem;padding:10px 18px;border:0;border-radius:10px;font-weight:800;cursor:pointer}
.teaching-progress-grid{grid-template-columns:minmax(0,1.2fr) minmax(300px,.8fr);align-items:start}.progress-history{display:grid;gap:8px;margin-top:10px}.progress-history article{padding:10px;border-left:4px solid #93b4f5;background:#f8fafc;border-radius:8px}.progress-history article>div{margin-top:5px}.progress-overview-list{display:grid;gap:8px}.progress-overview-card{display:grid;gap:4px;padding:10px;border:1px solid var(--line);border-radius:10px;color:var(--text)}.progress-overview-card.is-active,.progress-overview-card:hover{background:#eef6ff;text-decoration:none}.progress-overview-card small{color:var(--muted)}
.announcement-grid{grid-template-columns:minmax(300px,.85fr) minmax(0,1.15fr);align-items:start}.announcement-list{display:grid;gap:10px}.announcement-card{padding:14px;border:1px solid var(--line);border-radius:12px;background:#fff}.announcement-card.is-inactive{opacity:.72;background:#f8fafc}.announcement-tags{display:flex;gap:5px;flex-wrap:wrap}.public-announcement-list{display:grid;gap:10px}.public-announcement-card{padding:14px;border:1px solid #dbe3ef;border-radius:12px;background:#f8fbff}.public-announcement-card.is-pinned{border-color:#e9c55c;background:#fffaf0}.public-announcement-head{display:flex;justify-content:space-between;gap:10px;align-items:center}.public-announcement-card h3{margin:0}.public-announcement-card small{display:block;color:#64748b;margin-top:8px}
@media(max-width:1050px){.competition-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.group-team-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.attendance-student-card{grid-template-columns:1fr}.attendance-status-buttons{grid-template-columns:repeat(3,minmax(0,1fr))}.homework-manager-grid,.group-manager-grid,.teaching-progress-grid,.announcement-grid{grid-template-columns:1fr}}
@media(max-width:760px){.class-nav-v19{padding:8px}.class-nav-title{align-items:flex-start}.class-nav-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.class-nav-menu>div{display:grid}.attendance-summary{grid-template-columns:repeat(3,minmax(0,1fr))}.attendance-status-buttons{grid-template-columns:repeat(2,minmax(0,1fr))}.attendance-student-card{padding:10px}.homework-student-row{grid-template-columns:1fr}.group-participant-grid{grid-template-columns:1fr}.group-team-grid,.competition-grid,.classroom-tool-grid{grid-template-columns:1fr}.competition-panel:fullscreen{padding:10px}.public-section-nav{grid-template-columns:repeat(2,minmax(0,1fr))!important}.public-announcement-head{align-items:flex-start;flex-direction:column}.command-overlay{padding:20px}.command-overlay-text{font-size:clamp(1.8rem,9vw,3.4rem)}.command-overlay-timer{font-size:clamp(4rem,20vw,7rem)}}
.seat-student-card.is-attendance-absent{opacity:.62;background:#fff7ed;border-color:#fdba74}.seat-attendance-badge{margin-left:auto;white-space:nowrap}

/* ===== v1.10 學期管理、教師工作台與個人課表 ===== */
.workbench-hero{display:flex;align-items:center;justify-content:space-between;gap:20px;background:linear-gradient(135deg,#f7fbff,#eef6ff)}
.workbench-hero h1{margin:4px 0 2px;font-size:clamp(1.65rem,3vw,2.35rem)}
.workbench-greeting{font-weight:900;color:#1d4ed8;font-size:1.05rem}
.workbench-focus-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:18px}
.workbench-focus-card{border:1px solid var(--line);border-radius:18px;padding:20px;background:#fff;box-shadow:0 9px 24px rgba(16,33,63,.07)}
.workbench-focus-card.is-current{border-color:#60a5fa;background:linear-gradient(145deg,#eff6ff,#fff)}
.workbench-focus-card.is-next{border-color:#c4b5fd;background:linear-gradient(145deg,#f5f3ff,#fff)}
.focus-kicker{font-weight:900;color:#475569}.focus-time{margin-top:6px;color:#64748b;font-weight:800}.workbench-focus-card h2{font-size:clamp(1.5rem,3vw,2.15rem);margin:8px 0}.workbench-focus-card p{margin:6px 0 14px}
.today-schedule-list{display:grid;gap:8px}.today-schedule-row{display:grid;grid-template-columns:150px minmax(0,1fr) auto;align-items:center;gap:14px;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:#fff}.today-schedule-row.is-exception{border-color:#f0c36b;background:#fffaf0}.today-period,.today-course{display:grid;gap:2px}.today-period small,.today-course small{color:var(--muted)}.today-course{grid-template-columns:auto 1fr;column-gap:8px}.today-course small{grid-column:1/-1}.today-course .badge{justify-self:start}
.workbench-reminders,.workbench-progress-list{display:grid;gap:8px}.workbench-reminders a,.workbench-progress-list a{display:grid;grid-template-columns:minmax(90px,.35fr) minmax(0,1fr);gap:10px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;color:var(--text)}.workbench-reminders a:hover,.workbench-progress-list a:hover{background:#f8fafc;text-decoration:none}.workbench-reminders span,.workbench-progress-list span{color:#526176}.workbench-kpis{margin-top:18px}

.term-manager-grid{align-items:start}.term-card-list{display:grid;gap:12px}.term-card{padding:16px;border:1px solid var(--line);border-radius:14px;background:#fff}.term-card.is-current{border-color:#60a5fa;background:#f7fbff}.term-card.is-archived{opacity:.72;background:#f8fafc}.term-card h3{margin:0}.term-settings{margin-top:12px;border-top:1px solid var(--line);padding-top:10px}.term-settings summary{cursor:pointer;font-weight:800;color:#475569}.class-term-filter .inline-filter,.schedule-toolbar .inline-filter{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.class-term-filter select,.schedule-toolbar select{min-width:260px}

.schedule-layout{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(300px,.55fr);gap:18px;align-items:start}.schedule-table-wrap{overflow:auto}.schedule-table{width:100%;min-width:850px;border-collapse:separate;border-spacing:8px}.schedule-table th{font-size:.86rem;color:#475569}.schedule-table thead th{text-align:center}.schedule-table tbody th{width:118px;text-align:left;vertical-align:middle}.schedule-table tbody th small{display:block;font-weight:500;color:#64748b;margin-top:3px}.schedule-table td{padding:0;vertical-align:stretch}.schedule-cell{min-height:74px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:8px;border:1px dashed #b7c4d5;border-radius:12px;color:#64748b;background:#fbfdff;text-align:center}.schedule-cell.has-entry{border-style:solid;border-color:#93b4f5;background:#eef6ff;color:#173b73}.schedule-cell:hover{background:#e8f2ff;text-decoration:none}.schedule-cell small{color:#64748b}.schedule-mobile-list{display:none}.schedule-editor{position:sticky;top:96px}.period-editor-list{display:grid;gap:8px}.period-editor-row{display:grid;grid-template-columns:minmax(90px,1fr) 110px 24px 110px auto;gap:7px;align-items:center}.exception-list{display:grid;gap:8px}.exception-list article{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px;border:1px solid var(--line);border-radius:10px}.exception-list article>div{display:grid;gap:2px}.exception-list span{color:var(--muted)}

.radio-card{display:flex;gap:10px;padding:12px;border:1px solid var(--line);border-radius:12px;margin:10px 0;background:#fff}.radio-card>span{display:grid;gap:3px}.radio-card small{color:var(--muted)}.check-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.check-grid label{display:flex;align-items:flex-start;gap:7px;padding:9px;border:1px solid var(--line);border-radius:10px;background:#f8fafc}.copy-class-list{display:grid;gap:10px}.copy-class-list article{display:grid;grid-template-columns:minmax(220px,.7fr) minmax(260px,1fr);gap:16px;align-items:end;padding:13px;border:1px solid var(--line);border-radius:12px}.copy-class-select{display:flex;align-items:center;gap:10px}.copy-class-select>span{display:grid}.copy-class-select small{color:var(--muted)}.copy-submit{display:flex;align-items:center;justify-content:space-between;gap:18px}.class-management-card.is-archived{background:#f8fafc}

@media(max-width:1100px){.schedule-layout{grid-template-columns:1fr}.schedule-editor{position:static}.workbench-focus-grid{grid-template-columns:1fr}}
@media(max-width:760px){
 .workbench-hero,.copy-submit{align-items:flex-start;flex-direction:column}.workbench-hero .actions{width:100%}.workbench-hero .actions .btn{flex:1}.today-schedule-row{grid-template-columns:92px minmax(0,1fr);gap:8px}.today-schedule-row>.actions{grid-column:1/-1}.today-course{grid-template-columns:1fr}.workbench-reminders a,.workbench-progress-list a{grid-template-columns:1fr;gap:3px}
 .schedule-table-wrap{display:none}.schedule-mobile-list{display:grid;gap:9px}.schedule-mobile-list details{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff}.schedule-mobile-list summary{padding:12px;font-weight:900;background:#f1f5f9;cursor:pointer}.schedule-mobile-row{display:grid;grid-template-columns:90px minmax(0,1fr);gap:10px;padding:11px 12px;border-top:1px solid var(--line);color:var(--text)}.schedule-mobile-row:hover{background:#f8fbff;text-decoration:none}.schedule-mobile-row>span:first-child{display:grid}.schedule-mobile-row small{color:var(--muted)}
 .period-editor-row{grid-template-columns:1fr 1fr}.period-editor-row span{display:none}.period-editor-row .btn{grid-column:1/-1}.check-grid{grid-template-columns:1fr}.copy-class-list article{grid-template-columns:1fr}.class-term-filter select,.schedule-toolbar select{min-width:0;width:100%}.schedule-toolbar .inline-filter{display:grid;grid-template-columns:1fr;width:100%}
}


/* ===== v1.10.1 新學期點數餘額延續 ===== */
.public-point-breakdown{grid-template-columns:repeat(4,minmax(0,1fr))}
.term-transfer-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.term-transfer-box{padding:14px;border:1px solid var(--line);border-radius:13px;background:#fbfdff}
.term-transfer-box h3{margin:0 0 6px}.term-transfer-box>p{margin:0 0 10px}
.term-transfer-modes{display:grid;gap:8px}.term-transfer-modes .radio-card{margin:0}
.transfer-preview{grid-column:1/-1;margin-top:12px;border-top:1px dashed #cbd5e1;padding-top:10px}
.transfer-preview summary{cursor:pointer;font-weight:850;color:#1d4ed8}
.transfer-student-table{margin-top:10px;overflow:auto;border:1px solid var(--line);border-radius:10px;background:#fff}
.transfer-student-table table{width:100%;min-width:620px;border-collapse:collapse}.transfer-student-table th,.transfer-student-table td{padding:8px 9px;border-bottom:1px solid #e5e7eb;text-align:left}.transfer-student-table th{background:#f8fafc;font-size:12px;color:#475569}.transfer-student-table input{min-width:96px}
.transfer-summary{display:flex;gap:7px;flex-wrap:wrap;margin-top:7px}.transfer-summary .badge{white-space:nowrap}
.term-transfer-box.is-disabled{opacity:.62}
@media(max-width:760px){.term-transfer-options{grid-template-columns:1fr}.public-point-breakdown{grid-template-columns:repeat(2,minmax(0,1fr))}.transfer-student-table{overflow:auto}}

/* ===== v1.11 正式多人服務與資料安全整合版 ===== */
.login-help-links{display:flex;gap:10px;justify-content:center;align-items:center;margin:14px 0 2px;font-size:14px}.login-help-links a{font-weight:700}.legal-shell{max-width:980px}.legal-panel{line-height:1.85}.legal-panel h1{margin-top:10px}.legal-panel p{color:#334155}.email-verify-banner a{font-weight:800;margin-left:8px}.issue-report-fab{position:fixed;right:18px;bottom:18px;z-index:55;background:#fff;border:1px solid #d7e1ef;box-shadow:0 10px 28px rgba(15,23,42,.14);border-radius:999px;padding:10px 14px;text-decoration:none;font-weight:800;color:#1e293b}.issue-report-fab:hover{transform:translateY(-1px)}.storage-meter{height:10px;background:#e2e8f0;border-radius:999px;overflow:hidden;margin-top:8px}.storage-meter>span{display:block;height:100%;background:linear-gradient(90deg,#3b82f6,#6366f1);border-radius:inherit}.storage-meter-large{height:14px;margin:16px 0 8px}.storage-number strong{font-size:30px}.storage-number span{color:#64748b}.storage-usage-compact{padding:14px 18px}.account-security-status{display:grid;grid-template-columns:1fr 1fr;gap:12px}.account-security-status>div{border:1px solid #e2e8f0;border-radius:12px;padding:12px}.account-security-status span{display:block;color:#64748b;font-size:13px;margin-bottom:4px}.danger-zone{border-color:#fecaca;background:#fffafa}.issue-report-list{display:grid;gap:12px}.issue-report-list article,.issue-admin-card{border:1px solid #e2e8f0;border-radius:14px;padding:14px}.issue-admin-reply{margin-top:10px;padding:10px 12px;background:#f8fafc;border-radius:10px}.admin-kpis .stat{font-size:30px}.admin-kpis .storage-stat{font-size:22px}.admin-alert-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.admin-alert-grid a{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100px;border:1px solid #dbe4f0;border-radius:14px;text-decoration:none}.admin-alert-grid strong{font-size:30px}.admin-alert-grid span{color:#64748b}.admin-list-row{display:flex;justify-content:space-between;gap:14px;padding:10px 0;border-bottom:1px solid #edf2f7}.admin-list-row:last-child{border-bottom:0}.admin-list-row small{display:block;color:#64748b;margin-top:3px}.admin-account-mini{display:grid;gap:8px;margin-top:8px}.teacher-apply-actions a,.legal-panel a{overflow-wrap:anywhere}
@media(max-width:760px){.issue-report-fab{right:12px;bottom:12px;font-size:13px;padding:9px 12px}.account-security-status{grid-template-columns:1fr}.admin-alert-grid{grid-template-columns:1fr 1fr}.admin-kpis{grid-template-columns:1fr 1fr}.admin-list-row{align-items:flex-start}.legal-panel{padding:18px}}

/* v1.12 PDF online annotation */
.pdf-annotator-body{margin:0;background:#e9eef5;color:#10213f;overflow:hidden}
.pdf-annotator-app{height:100dvh;display:flex;flex-direction:column;background:#eef3f9}
.pdf-annotator-header{position:relative;z-index:20;background:#fff;border-bottom:1px solid #d7e1ef;box-shadow:0 3px 14px rgba(16,33,63,.08);flex:0 0 auto}
.pdf-annotator-titlebar{display:flex;align-items:center;gap:14px;padding:10px 14px;border-bottom:1px solid #edf1f6}
.pdf-annotator-title{min-width:0;flex:1;display:flex;flex-direction:column;gap:2px}
.pdf-annotator-title strong{font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pdf-annotator-title span{font-size:12px;color:#66758c}
.pdf-save-status{font-size:12px;font-weight:700;color:#53627a;white-space:nowrap;padding:6px 9px;border-radius:999px;background:#f3f6fa}
.pdf-save-status.is-saved{color:#166534;background:#ecfdf3}.pdf-save-status.is-saving{color:#075985;background:#e0f2fe}.pdf-save-status.is-dirty{color:#92400e;background:#fff7ed}.pdf-save-status.is-error{color:#991b1b;background:#fef2f2}
.pdf-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px}
.pdf-toolbar-group{display:flex;align-items:center;gap:5px;padding-right:8px;border-right:1px solid #e4eaf2}.pdf-toolbar-group:last-child{border-right:0}
.pdf-tool{border:1px solid #cfd8e6;background:#fff;color:#18304f;border-radius:9px;padding:7px 9px;min-height:36px;cursor:pointer;font:inherit;font-size:13px;font-weight:650}
.pdf-tool:hover{background:#f5f8fc}.pdf-tool.is-active{background:#e8f0ff;border-color:#5b8def;color:#174ea6;box-shadow:inset 0 0 0 1px #5b8def}.pdf-tool:disabled{opacity:.4;cursor:not-allowed}
.pdf-ink-settings label{display:flex;align-items:center;gap:5px;font-size:12px;color:#53627a;white-space:nowrap}.pdf-ink-settings input[type=color]{width:32px;height:30px;padding:2px;border:1px solid #ccd6e4;border-radius:7px;background:#fff}.pdf-ink-settings input[type=range]{width:95px}
.pdf-touch-mode{font-size:12px}.pdf-toolbar-actions{margin-left:auto}.pdf-zoom-label{min-width:58px}
.pdf-annotator-hint{padding:5px 14px 8px;font-size:12px;color:#5b687b;background:#fbfcfe}
.pdf-viewer-shell{position:relative;flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;background:#cfd7e3;padding:22px 18px 80px}
.pdf-page-list{display:flex;flex-direction:column;align-items:center;gap:20px;min-width:max-content;margin:0 auto}
.pdf-page-wrap{position:relative;background:#fff;box-shadow:0 6px 24px rgba(22,35,55,.22);flex:0 0 auto}
.pdf-page-canvas,.pdf-ink-canvas,.pdf-live-ink-canvas{position:absolute;inset:0;display:block}.pdf-page-canvas{z-index:1}.pdf-ink-canvas{z-index:2;cursor:crosshair}.pdf-live-ink-canvas{z-index:3;pointer-events:none}
.pdf-page-number{position:absolute;z-index:4;right:8px;bottom:8px;background:rgba(17,24,39,.68);color:#fff;font-size:11px;padding:4px 7px;border-radius:999px;pointer-events:none}
.pdf-loading{position:absolute;z-index:8;left:50%;top:45px;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:8px;background:#fff;padding:20px 28px;border-radius:16px;box-shadow:0 10px 34px rgba(15,23,42,.18);text-align:center}.pdf-loading span{font-size:12px;color:#64748b}.pdf-loading[hidden]{display:none}
.spinner{width:28px;height:28px;border:3px solid #dbe4f0;border-top-color:#2563eb;border-radius:50%;animation:yll-spin .8s linear infinite}@keyframes yll-spin{to{transform:rotate(360deg)}}
.pdf-export-overlay{position:fixed;z-index:1000;inset:0;background:rgba(15,23,42,.55);display:grid;place-items:center;padding:20px}.pdf-export-overlay[hidden]{display:none}.pdf-export-card{background:#fff;border-radius:18px;box-shadow:0 20px 60px rgba(0,0,0,.28);padding:28px;max-width:420px;text-align:center}.pdf-export-card .spinner{margin:0 auto 12px}.pdf-export-card h2{margin:0 0 8px;font-size:20px}.pdf-export-card p{margin:0;color:#64748b}
.pdf-annotator-app:fullscreen{background:#cfd7e3}.pdf-annotator-app:fullscreen .pdf-annotator-titlebar{padding-top:max(8px,env(safe-area-inset-top))}.pdf-annotator-app:fullscreen .pdf-annotator-hint{display:none}
.document-actions .btn-write-pdf{background:#7c3aed;border-color:#7c3aed;color:#fff}.document-actions .btn-write-pdf:hover{background:#6d28d9;border-color:#6d28d9}
.annotation-status{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#6b21a8;background:#faf5ff;border:1px solid #e9d5ff;border-radius:999px;padding:3px 8px;margin-top:6px}
.resource-pdf-online-help{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border:1px solid #ddd6fe;background:#faf5ff;border-radius:14px;margin:12px 0 16px}.resource-pdf-online-help-icon{font-size:26px}.resource-pdf-online-help p{margin:4px 0 0;color:#5b6472}
@media (max-width:900px){
  .pdf-annotator-titlebar{gap:8px}.pdf-annotator-title span{display:none}.pdf-save-status{font-size:11px}.pdf-toolbar{gap:6px;padding:7px}.pdf-toolbar-group{padding-right:5px}.pdf-tool span{display:none}.pdf-ink-settings label{font-size:0}.pdf-ink-settings label::first-letter{font-size:12px}.pdf-touch-mode{width:100%;order:20;border:0}.pdf-toolbar-actions{margin-left:0;order:21;width:100%;border:0;overflow-x:auto;flex-wrap:nowrap;padding-bottom:2px}.pdf-toolbar-actions .btn{white-space:nowrap}.pdf-annotator-hint{display:none}.pdf-viewer-shell{padding:12px 8px 70px}.pdf-page-list{gap:12px}
}
@media (max-width:560px){
  .pdf-annotator-titlebar{padding:8px}.pdf-annotator-title strong{font-size:14px}.pdf-save-status{max-width:118px;overflow:hidden;text-overflow:ellipsis}.pdf-toolbar{max-height:176px;overflow:auto}.pdf-ink-settings input[type=range]{width:74px}.pdf-tool{padding:6px 8px;min-height:34px}.pdf-viewer-shell{padding-left:4px;padding-right:4px}
}

/* v1.12.1 PDF teacher annotation publishing */
.annotation-publish-box{margin-top:12px;padding:13px 14px;border:1px solid #dbe4f0;border-radius:12px;background:#f8fafc;display:grid;gap:10px}.annotation-publish-box.is-published{border-color:#86efac;background:#f0fdf4}.annotation-publish-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.annotation-publish-head .muted{margin-top:3px}.annotation-publish-form{display:flex;gap:10px;align-items:end;flex-wrap:wrap}.annotation-publish-form label{display:grid;gap:5px;min-width:250px;font-size:13px}.annotation-publish-form select{min-width:250px}.annotation-publish-warning{color:#92400e;background:#fff7ed;border:1px solid #fed7aa;border-radius:9px;padding:8px 10px}.annotation-unpublish-form{justify-self:start}.public-resource-annotated-card{border-color:#c4b5fd;background:linear-gradient(145deg,#faf5ff,#fff)}.public-resource-published-at{margin-top:4px}.public-resource-version-list{display:grid;gap:9px;margin-top:10px}.public-resource-version-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px;border:1px solid #e2e8f0;border-radius:10px;background:#fff}.public-resource-version-row.is-annotated{border-color:#ddd6fe;background:#faf5ff}.public-resource-version-row>div:first-child{display:flex;flex-direction:column;gap:2px}.public-resource-version-row span{font-size:12px;color:#64748b}.public-resource-version-row .public-resource-card-actions{margin:0;display:flex;gap:6px;flex-wrap:wrap}
@media(max-width:650px){.annotation-publish-head{display:grid}.annotation-publish-form{display:grid;grid-template-columns:1fr}.annotation-publish-form label,.annotation-publish-form select,.annotation-publish-form .btn{width:100%;min-width:0}.public-resource-version-row{align-items:flex-start;display:grid}.public-resource-version-row .public-resource-card-actions{width:100%}.public-resource-version-row .public-resource-card-actions .btn{flex:1}}

/* v1.12.2 iPad Apple Pencil interaction improvements */
.pdf-ink-canvas{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;cursor:crosshair}
.pdf-annotator-app[data-active-tool="pan"] .pdf-ink-canvas{cursor:grab}
.pdf-annotator-app.is-panning .pdf-ink-canvas{cursor:grabbing}
.pdf-input-mode-status{display:inline-flex;align-items:center;min-height:28px;padding:4px 8px;border-radius:999px;background:#eff6ff;color:#1e40af;font-size:11px;font-weight:750;white-space:nowrap}
.pdf-toolbar-collapse{display:none}
.pdf-toolbar-expand{display:none;position:absolute;z-index:45;top:max(10px,env(safe-area-inset-top));right:max(10px,env(safe-area-inset-right));border:1px solid #bfdbfe;background:rgba(255,255,255,.96);color:#1e3a8a;border-radius:999px;padding:9px 13px;box-shadow:0 8px 26px rgba(15,23,42,.22);font:inherit;font-size:13px;font-weight:800;cursor:pointer}
.pdf-page-list{transform-origin:50% 0;will-change:transform}
.pdf-annotator-app:fullscreen .pdf-annotator-header{position:absolute;z-index:40;top:max(8px,env(safe-area-inset-top));left:50%;transform:translateX(-50%);width:min(1180px,calc(100vw - 24px));border:1px solid rgba(203,213,225,.88);border-radius:14px;background:rgba(255,255,255,.96);box-shadow:0 12px 36px rgba(15,23,42,.25);overflow:hidden;backdrop-filter:blur(10px)}
.pdf-annotator-app:fullscreen .pdf-annotator-titlebar{display:none}
.pdf-annotator-app:fullscreen .pdf-toolbar{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;max-width:100%;padding:7px 9px}
.pdf-annotator-app:fullscreen .pdf-toolbar-group{flex:0 0 auto}
.pdf-annotator-app:fullscreen .pdf-toolbar-actions{margin-left:0}
.pdf-annotator-app:fullscreen .pdf-toolbar-collapse{display:inline-flex}
.pdf-annotator-app:fullscreen .pdf-viewer-shell{padding-top:76px}
.pdf-annotator-app:fullscreen.toolbar-collapsed .pdf-annotator-header{display:none}
.pdf-annotator-app:fullscreen.toolbar-collapsed .pdf-toolbar-expand{display:block}
.pdf-annotator-app:fullscreen.toolbar-collapsed .pdf-viewer-shell{padding-top:18px}
@media (max-width:900px){
  .pdf-touch-mode{display:flex;align-items:center;gap:7px;overflow-x:auto;white-space:nowrap}
  .pdf-input-mode-status{font-size:10px;flex:0 0 auto}
  .pdf-annotator-app:fullscreen .pdf-toolbar{max-height:none;overflow-x:auto;overflow-y:hidden;flex-wrap:nowrap}
  .pdf-annotator-app:fullscreen .pdf-touch-mode{width:auto;order:0;border-right:1px solid #e4eaf2}
  .pdf-annotator-app:fullscreen .pdf-toolbar-actions{width:auto;order:0;overflow:visible}
}
@media (orientation:landscape) and (max-height:900px){
  .pdf-annotator-hint{display:none}
  .pdf-toolbar{gap:5px;padding:6px 8px}
  .pdf-toolbar-group{gap:4px;padding-right:5px}
  .pdf-tool{min-height:32px;padding:5px 8px}
  .pdf-input-mode-status{display:none}
  .pdf-viewer-shell{padding-top:10px}
}

/* v1.12.2.1 Apple Pencil high-frequency ink and resume position */
.pdf-live-ink-canvas{touch-action:none;-webkit-user-select:none;user-select:none;contain:strict}


/* v1.12.2.2 iPad Safari native selection / callout suppression */
.pdf-viewer-shell,
.pdf-page-list,
.pdf-page-wrap,
.pdf-page-canvas,
.pdf-ink-canvas,
.pdf-live-ink-canvas{
  -webkit-user-select:none !important;
  user-select:none !important;
  -webkit-touch-callout:none !important;
  -webkit-user-drag:none !important;
}
.pdf-page-canvas,.pdf-live-ink-canvas{pointer-events:none}
.pdf-page-wrap{-webkit-tap-highlight-color:transparent}
.pdf-annotator-app.is-pen-active .pdf-viewer-shell,
.pdf-annotator-app.is-pen-active .pdf-page-list,
.pdf-annotator-app.is-pen-active .pdf-page-wrap{
  -webkit-user-select:none !important;
  user-select:none !important;
  -webkit-touch-callout:none !important;
}

/* v1.12.2.3 Apple Pencil focus-writing input shield */
.pdf-pencil-shield{
  position:absolute;
  inset:0;
  z-index:4;
  display:block;
  background:rgba(255,255,255,.001);
  touch-action:none;
  -ms-touch-action:none;
  -webkit-user-select:none !important;
  user-select:none !important;
  -webkit-touch-callout:none !important;
  -webkit-user-drag:none !important;
  -webkit-tap-highlight-color:transparent;
  cursor:crosshair;
  outline:none;
  caret-color:transparent;
}
.pdf-page-number{z-index:5}
.pdf-ink-canvas,.pdf-live-ink-canvas,.pdf-page-canvas{pointer-events:none !important}
.pdf-annotator-app[data-active-tool="pan"] .pdf-pencil-shield{cursor:grab}
.pdf-annotator-app.is-panning .pdf-pencil-shield{cursor:grabbing}
.pdf-annotator-app.focus-writing-mode .pdf-pencil-shield{
  background:rgba(255,255,255,.002);
  -webkit-user-select:none !important;
  user-select:none !important;
  -webkit-touch-callout:none !important;
}
.pdf-annotator-app.focus-writing-mode.focus-pencil-down .pdf-viewer-shell,
.pdf-annotator-app.focus-writing-mode.focus-pencil-down .pdf-page-list,
.pdf-annotator-app.focus-writing-mode.focus-pencil-down .pdf-page-wrap,
.pdf-annotator-app.focus-writing-mode.focus-pencil-down .pdf-pencil-shield{
  -webkit-user-select:none !important;
  user-select:none !important;
  -webkit-touch-callout:none !important;
  -webkit-user-drag:none !important;
}
.pdf-touch-mode .check-label{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
@media(max-width:900px){
  .pdf-touch-mode{scrollbar-width:none}
  .pdf-touch-mode::-webkit-scrollbar{display:none}
}

/* v1.12.3 PDF quick-start + Demo writing */
.btn-pdf-primary{background:#7c3aed!important;border-color:#7c3aed!important;color:#fff!important;box-shadow:0 5px 14px rgba(124,58,237,.18)}
.btn-pdf-primary:hover{background:#6d28d9!important;border-color:#6d28d9!important;color:#fff!important;text-decoration:none}
.class-nav-menu a.class-nav-pdf{background:#f5f3ff;border-color:#c4b5fd;color:#5b21b6;font-weight:900}
.pdf-quick-panel{border-color:#ddd6fe;background:linear-gradient(145deg,#faf5ff,#fff)}
.pdf-quick-hero{display:flex;align-items:center;justify-content:space-between;gap:24px}.pdf-quick-hero h2{margin:4px 0 7px;font-size:25px}.pdf-quick-hero p{margin:0;color:#586174;max-width:760px}.pdf-quick-eyebrow{font-size:12px;font-weight:900;color:#6d28d9;letter-spacing:.03em;text-transform:uppercase}
.demo-pdf-quick-panel{border-width:2px;border-color:#a78bfa;background:linear-gradient(135deg,#f5f3ff,#eff6ff 70%,#fff)}
.pdf-quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.pdf-quick-card{padding:14px;border:1px solid #e2e8f0;border-radius:13px;background:#fff;display:flex;flex-direction:column;gap:8px;min-width:0}.pdf-quick-card.is-primary{border-color:#a78bfa;background:linear-gradient(145deg,#faf5ff,#fff)}.pdf-quick-card-head{display:flex;justify-content:space-between;gap:8px;font-size:12px;color:#64748b}.pdf-quick-card-head span{font-weight:900;color:#6d28d9}.pdf-quick-card h3{margin:0;font-size:16px;line-height:1.35;overflow-wrap:anywhere}.pdf-quick-card p{margin:0;font-size:12px;line-height:1.5}.pdf-quick-card .btn{margin-top:auto}
.focus-pdf-material{display:grid;gap:2px;margin:8px 0 12px;padding:9px 11px;border:1px solid #ddd6fe;border-radius:10px;background:#faf5ff}.focus-pdf-material span{font-size:11px;color:#6d28d9;font-weight:900}.focus-pdf-material strong{font-size:14px}.focus-pdf-material small{color:#64748b}
.document-card:has(.badge-success){scroll-margin-top:110px}
@media(max-width:900px){.pdf-quick-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.pdf-quick-hero{align-items:flex-start;flex-direction:column}.pdf-quick-hero .btn{width:100%}}
@media(max-width:620px){.pdf-quick-grid{grid-template-columns:1fr}.pdf-quick-panel{padding:15px}.pdf-quick-hero h2{font-size:21px}.workbench-focus-card .actions .btn-pdf-primary{flex-basis:100%}}

/* v1.12.3.10 login introduction video + copyright */
.login-intro-video{margin:0 0 20px;padding:16px;border:1px solid #d8e3f1;border-radius:14px;background:linear-gradient(145deg,#f8fbff,#fff);box-shadow:0 7px 22px rgba(15,23,42,.045)}
.login-intro-video-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:6px}
.login-intro-video-heading h2{margin:3px 0 0;font-size:18px;line-height:1.4;color:#12233f}
.login-intro-kicker{display:block;color:#1d4ed8;font-size:12px;font-weight:900;letter-spacing:.02em}
.login-intro-youtube{flex:0 0 auto;display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;background:#fee2e2;color:#b91c1c;font-size:11px;font-weight:900}
.login-intro-copy{margin:0 0 11px;color:#526174;font-size:13px}
.login-video-frame{position:relative;width:100%;aspect-ratio:16/9;overflow:hidden;border-radius:12px;background:#071a3a;box-shadow:0 8px 24px rgba(15,23,42,.16)}
.login-video-cover{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;background:#071a3a;cursor:pointer;overflow:hidden;color:#fff}
.login-video-cover img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .22s ease,filter .22s ease}
.login-video-cover::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 52%,rgba(2,8,23,.42));pointer-events:none}
.login-video-cover:hover img{transform:scale(1.015);filter:brightness(.92)}
.login-video-play{position:absolute;z-index:2;left:50%;top:50%;transform:translate(-50%,-50%);display:grid;place-items:center;width:64px;height:64px;padding-left:5px;border-radius:50%;background:#ef4444;color:#fff;font-size:28px;box-shadow:0 8px 24px rgba(0,0,0,.32);transition:transform .18s ease,background .18s ease}
.login-video-cover:hover .login-video-play{transform:translate(-50%,-50%) scale(1.07);background:#dc2626}
.login-video-play-label{position:absolute;z-index:2;left:50%;bottom:12px;transform:translateX(-50%);padding:6px 11px;border-radius:999px;background:rgba(15,23,42,.78);font-size:12px;font-weight:850;white-space:nowrap;backdrop-filter:blur(5px)}
.login-video-iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:#000}
.login-copyright{width:min(560px,calc(100% - 24px));margin:-20px auto 34px;padding:18px 12px 0;border-top:1px solid #dbe4ef;text-align:center;color:#64748b;font-size:13px}
.login-copyright a{color:#2563eb;font-weight:800}
@media(max-width:620px){.login-intro-video{padding:13px}.login-intro-video-heading h2{font-size:16px}.login-intro-youtube{display:none}.login-video-play{width:54px;height:54px;font-size:23px}.login-video-play-label{bottom:8px}.login-copyright{margin-top:-10px}}

/* v1.12.4 快速臨時集點 */
.class-nav-quick-point{font-weight:800;color:#9a6700!important;background:#fff7d6!important}
.quick-point-control{overflow:visible}
.quick-point-toolbar{display:grid;grid-template-columns:minmax(220px,1fr) minmax(260px,1.4fr);gap:12px;align-items:end;margin-bottom:12px}
.quick-point-toolbar label{display:grid;gap:6px;font-weight:700}
.quick-point-preset-hint{grid-column:1/-1;color:#64748b;font-size:.9rem}
.quick-point-message{min-height:24px;margin:8px 0;font-weight:800}
.quick-point-message.is-success{color:#147a3d}.quick-point-message.is-error{color:#b42318}
.quick-point-bulkbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;border-radius:12px;background:#f8fafc;border:1px solid #dbe5f0;margin-bottom:14px}
.quick-point-bulkbar label{display:flex;align-items:center;gap:6px;margin:0}.quick-point-bulkbar input[type=number]{width:82px;padding:7px}
.quick-point-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.quick-student-card{position:relative;border:1px solid #d8e2ef;border-radius:16px;background:#fff;padding:14px;transition:.15s ease;box-shadow:0 3px 10px rgba(20,50,90,.04)}
.quick-student-card.is-highlighted{outline:3px solid #fbbf24;background:#fffbeb}.quick-student-card.is-quick-saving{opacity:.7}.quick-student-card.is-quick-success{transform:scale(1.018);box-shadow:0 0 0 3px rgba(34,197,94,.18)}
.quick-student-select{position:absolute;right:10px;top:8px;font-size:.78rem;color:#64748b;display:flex;gap:4px;align-items:center}
.quick-student-main{display:flex;align-items:center;gap:10px;padding-right:50px}.quick-student-main strong{display:block;font-size:1.05rem}.quick-student-main small{display:block;color:#64748b;margin-top:4px}
.quick-student-actions{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:12px}.quick-student-actions .btn{padding-left:6px;padding-right:6px}
.quick-preset-settings>summary{cursor:pointer;padding:4px 0}.quick-preset-list{display:grid;gap:8px;margin:14px 0}.quick-preset-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;border:1px solid #e1e8f0;border-radius:12px;background:#fff}
.seat-quick-actions{display:flex;gap:4px;margin-left:auto;align-self:center}.seat-quick-actions button{border:0;border-radius:8px;padding:5px 7px;background:#e9f8ed;color:#116b34;font-weight:900;cursor:pointer;line-height:1}.seat-quick-actions button:hover{background:#ccefd7}.seat-quick-actions button:disabled{opacity:.5;cursor:wait}.seat-student-card.is-quick-point-flash{box-shadow:0 0 0 4px rgba(34,197,94,.28);transform:scale(1.02)}
@media(max-width:980px){.quick-point-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.quick-point-toolbar{grid-template-columns:1fr}.quick-point-grid{grid-template-columns:1fr}.quick-student-actions{grid-template-columns:repeat(4,minmax(0,1fr))}.quick-preset-row{align-items:flex-start;flex-direction:column}.seat-quick-actions button{padding:6px 8px}}
/* v1.12.4 public point breakdown includes carryover/daily/exam/quick/used */
.public-point-breakdown{grid-template-columns:repeat(5,minmax(0,1fr))}
.quick-undo-last{margin:-2px 0 10px}
@media(max-width:760px){.public-point-breakdown{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:520px){.public-point-breakdown{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* v1.12.4.1 表單與學生編輯排版修正 */
.grade-create-form{display:grid;grid-template-columns:minmax(170px,.9fr) minmax(260px,1.45fr) minmax(230px,1.2fr) minmax(140px,.65fr);grid-template-areas:"date name category max" "missing bonus notes submit";gap:16px;align-items:end;margin-top:8px}
.grade-create-field{min-width:0}.grade-create-field>label{white-space:nowrap}.grade-create-date{grid-area:date}.grade-create-name{grid-area:name}.grade-create-category{grid-area:category}.grade-create-max{grid-area:max}.grade-create-missing{grid-area:missing}.grade-create-bonus{grid-area:bonus}.grade-create-notes{grid-area:notes}.grade-create-submit{grid-area:submit;align-self:end}.grade-create-submit .btn{width:100%;min-height:44px;white-space:nowrap}.grade-create-bonus-row{display:grid;grid-template-columns:auto minmax(92px,1fr);gap:10px;align-items:center}.grade-create-bonus-row .check-label{min-height:44px;padding:0 4px;white-space:nowrap}.grade-create-bonus-row input[type=number]{min-width:0}
.stage-item-add-form{display:grid;grid-template-columns:minmax(280px,1fr) minmax(150px,190px) auto;gap:14px;align-items:end;margin-top:16px;padding:14px;border:1px solid #e2e8f0;border-radius:12px;background:#f8fafc}.stage-item-add-form label{white-space:nowrap}.stage-item-add-name,.stage-item-add-points{min-width:0}.stage-item-add-submit .btn{min-height:44px;white-space:nowrap}
.student-list-table{min-width:760px;table-layout:auto}.student-list-table th:nth-child(1){width:76px}.student-list-table th:nth-child(2){width:72px}.student-list-table th:nth-child(4){width:78px}.student-list-table th:nth-child(5),.student-list-table th:nth-child(6){width:92px}.student-list-table th:last-child{width:150px}.student-row-actions{flex-wrap:nowrap}.student-row-actions .inline-form{display:inline-flex}
body.student-modal-open{overflow:hidden}.student-edit-modal{position:fixed;inset:0;z-index:230;display:grid;place-items:center;padding:24px;background:rgba(15,23,42,.68);backdrop-filter:blur(2px)}.student-edit-modal[hidden]{display:none}.student-edit-dialog{width:min(820px,100%);max-height:min(88vh,820px);display:flex;flex-direction:column;overflow:hidden;border:1px solid #d8e1ee;border-radius:18px;background:#fff;box-shadow:0 28px 90px rgba(15,23,42,.38)}.student-edit-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:22px 24px 18px;border-bottom:1px solid var(--line);background:#f8fafc}.student-edit-header h2{margin:0 0 4px;font-size:24px}.student-edit-header p{margin:0}.student-edit-close{flex:0 0 auto;width:42px;height:42px;border:0;border-radius:50%;background:#e9eef6;color:#334155;font-size:30px;line-height:1;cursor:pointer}.student-edit-close:hover{background:#dbe4f0}.student-edit-body{overflow:auto;padding:24px}.student-edit-form{display:flex;min-height:0;flex-direction:column}.student-edit-grid{display:grid;grid-template-columns:minmax(120px,.55fr) minmax(240px,1.45fr) minmax(260px,1.25fr);gap:18px;align-items:end}.student-edit-field{min-width:0}.student-edit-gender{border:0;padding:0;margin:0;min-width:0}.student-edit-gender legend{font-weight:700;margin-bottom:6px}.student-edit-avatar{grid-column:1/-1;padding-top:4px}.student-edit-avatar .avatar-picker{padding:14px;border:1px solid #e2e8f0;border-radius:13px;background:#f8fafc}.student-edit-avatar .avatar-choice span{width:50px;height:50px;font-size:27px}.student-edit-footer{position:sticky;bottom:-24px;display:flex;align-items:center;justify-content:space-between;gap:18px;margin:22px -24px -24px;padding:16px 24px;border-top:1px solid var(--line);background:#fff;box-shadow:0 -8px 18px rgba(15,23,42,.04)}.student-edit-footer .actions{flex-wrap:nowrap}.student-edit-footer .btn{min-width:108px}
@media(max-width:1050px){.grade-create-form{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:"date max" "name category" "missing bonus" "notes notes" "submit submit"}.grade-create-submit{justify-self:end}.grade-create-submit .btn{width:auto;min-width:150px}.stage-item-add-form{grid-template-columns:minmax(220px,1fr) 160px auto}}
@media(max-width:760px){.grade-create-form{grid-template-columns:1fr;grid-template-areas:"date" "name" "category" "max" "missing" "bonus" "notes" "submit"}.grade-create-submit{justify-self:stretch}.grade-create-submit .btn{width:100%}.grade-create-bonus-row{grid-template-columns:auto minmax(0,1fr)}.stage-item-add-form{grid-template-columns:1fr;padding:12px}.stage-item-add-submit .btn{width:100%}.student-list-table{min-width:680px}.student-edit-modal{align-items:stretch;padding:0}.student-edit-dialog{width:100%;height:100%;max-height:none;border-radius:0}.student-edit-header{padding:18px}.student-edit-header h2{font-size:21px}.student-edit-body{padding:18px}.student-edit-grid{grid-template-columns:1fr}.student-edit-avatar{grid-column:auto}.student-edit-footer{bottom:-18px;flex-direction:column;align-items:stretch;margin:20px -18px -18px;padding:14px 18px}.student-edit-footer .actions{display:grid;grid-template-columns:1fr 1fr}.student-edit-footer .btn{width:100%;min-height:46px}.student-edit-close{width:40px;height:40px}}


/* v1.12.4.2 每日集點新增項目排版修正 */
.daily-item-add-form{display:grid;grid-template-columns:minmax(360px,1fr) 150px auto;gap:14px;align-items:end;margin-top:14px}
.daily-item-add-name,.daily-item-add-points{min-width:0}
.daily-item-add-form label{white-space:nowrap}
.daily-item-add-points input{min-width:0;text-align:left}
.daily-item-add-submit{align-self:end}
.daily-item-add-submit .btn{min-height:44px;min-width:112px;white-space:nowrap}
@media(max-width:850px){.daily-item-add-form{grid-template-columns:minmax(0,1fr) 140px;grid-template-areas:"name points" "submit submit"}.daily-item-add-name{grid-area:name}.daily-item-add-points{grid-area:points}.daily-item-add-submit{grid-area:submit;justify-self:end}.daily-item-add-submit .btn{min-width:132px}}
@media(max-width:560px){.daily-item-add-form{grid-template-columns:1fr;grid-template-areas:"name" "points" "submit"}.daily-item-add-submit{justify-self:stretch}.daily-item-add-submit .btn{width:100%}.daily-item-add-points input{max-width:none}}

/* v1.12.4.3 全部教材檔案管理 */
.material-manager-filter{display:grid;grid-template-columns:minmax(260px,1fr) 220px auto;gap:14px;align-items:end}
.material-filter-actions{display:flex;gap:8px;align-items:center;padding-bottom:1px}
.material-file-list{display:flex;flex-direction:column;gap:10px}
.material-file-row{display:grid;grid-template-columns:minmax(0,1fr) 110px auto;gap:18px;align-items:center;padding:16px 18px;border:1px solid #dbe4f0;border-radius:14px;background:#fff}
.material-file-row.is-archived{opacity:.72;background:#f8fafc}
.material-file-title{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:7px}
.material-file-title strong{font-size:17px;color:#0f2747}
.material-file-size{text-align:right;white-space:nowrap;font-size:16px}
.material-file-actions{display:flex;gap:8px;justify-content:flex-end;align-items:center;flex-wrap:wrap}
@media(max-width:800px){.material-manager-filter{grid-template-columns:1fr}.material-filter-actions{padding:0}.material-file-row{grid-template-columns:1fr}.material-file-size{text-align:left}.material-file-actions{justify-content:flex-start}}
/* v1.12.4.6 全站共用版權 Footer */
.site-footer{width:min(1180px,calc(100% - 32px));margin:34px auto 24px;padding:20px 16px 0;border-top:1px solid #dbe4ef;text-align:center;color:#64748b;font-size:13px;line-height:1.7}
.site-footer a{color:#2563eb;font-weight:800;text-decoration:none}
.site-footer a:hover{text-decoration:underline}
.site-footer-meta{margin-top:3px;color:#94a3b8;font-size:12px}
@media(max-width:620px){.site-footer{width:calc(100% - 24px);margin:26px auto 18px;padding-top:16px;font-size:12.5px}}
@media print{.site-footer{display:none!important}}



/* v1.12.4.8 grouped seating readability + print layout fidelity */
.seat-student-text strong{display:flex;align-items:baseline;gap:5px;min-width:0}
.seat-student-number{flex:0 0 auto;font-weight:900}
.seat-student-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 分組卡片在同列 3 組時，快速集點另起一列，避免 +1/+2 把姓名擠掉。 */
.seat-group-slots .seat-student-card{display:grid;grid-template-columns:37px minmax(0,1fr);align-items:center;column-gap:8px;row-gap:6px;padding:7px 8px}
.seat-group-slots .seat-student-card>.avatar{grid-column:1;grid-row:1}
.seat-group-slots .seat-student-text{grid-column:2;grid-row:1;min-width:0}
.seat-group-slots .seat-student-text strong{font-size:13px;line-height:1.35}
.seat-group-slots .seat-student-text small{display:none}
.seat-group-slots .seat-attendance-badge{grid-column:1/-1;margin-left:0;justify-self:start}
.seat-group-slots .seat-quick-actions{grid-column:1/-1;width:100%;margin-left:0;justify-content:flex-end}
.seat-group-slots .seat-quick-actions button{min-width:35px;padding:5px 8px}

/* v1.20.1 全螢幕座位表：長姓名顯示完整，不再以省略號截斷。
   v1.22.4 再修正窄螢幕／高 DPI：快速集點不再與姓名搶同一列，避免中文逐字直排與英文被切碎。 */
.seat-row-grid .seat-student-card{
  display:grid;
  grid-template-columns:37px minmax(0,1fr);
  align-items:center;
  column-gap:8px;
  row-gap:5px;
  padding:7px 8px;
}
.seat-row-grid .seat-student-card>.avatar{grid-column:1;grid-row:1}
.seat-row-grid .seat-student-text{grid-column:2;grid-row:1;min-width:0}
.seat-row-grid .seat-attendance-badge{grid-column:1/-1;margin-left:0;justify-self:start}
.seat-row-grid .seat-quick-actions{grid-column:1/-1;grid-row:2;width:100%;margin-left:0;justify-content:flex-end}
.seat-row-grid .seat-quick-actions button{min-width:35px;padding:5px 8px}
.seat-stage:fullscreen .seat-student-text strong{align-items:flex-start;gap:4px}
.seat-stage:fullscreen .seat-student-name{
  min-width:0;
  max-width:100%;
  white-space:normal;
  overflow:hidden;
  text-overflow:clip;
  overflow-wrap:break-word;
  word-break:normal;
  line-break:strict;
  hyphens:none;
  line-height:1.28;
  display:-webkit-box;
  -webkit-box-orient:vertical;
  -webkit-line-clamp:2;
}
.seat-stage:fullscreen .seat-row-grid .seat-student-text strong{font-size:clamp(11px,.95vw,14px)}
.seat-stage:fullscreen .seat-row-grid .seat-student-text small{display:none}
.seat-stage:fullscreen .seat-group-slots .seat-student-text strong{font-size:clamp(11.5px,1.05vw,13px)}
/* 專用列印頁在螢幕預覽與真正列印時，都照 group_row_config 的每列組數，不自動重排。 */
.seat-print-page .print-group-row{grid-template-columns:repeat(var(--groups-in-row),minmax(0,1fr));width:min(100%,var(--print-row-max))}
@media print{
  .seat-print-page .print-group-row{grid-template-columns:repeat(var(--groups-in-row),minmax(0,1fr))!important;width:min(100%,var(--print-row-max))!important;break-inside:avoid}
  .seat-print-page .print-group-card{min-width:0}
  .seat-print-page .print-student-card{min-width:0}
  .seat-print-page .print-student-card strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:block}
}


/* v1.12.4.9 row seating print layout fidelity */
/* 直排座位的 column_count 就是螢幕上每列座位數；預覽與紙本都不得重新排成兩欄。 */
.seat-print-page.layout-rows .print-seat-row-grid{grid-template-columns:repeat(var(--seat-columns),minmax(0,1fr));width:100%}
.seat-print-page.layout-rows .print-seat-slot{min-width:0}
.seat-print-page.layout-rows .print-student-card{min-width:0;gap:6px}
.seat-print-page.layout-rows .print-student-card>div{min-width:0}
.seat-print-page.layout-rows .print-student-card strong{display:block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media print{
  .seat-print-page.layout-rows .print-seat-row-grid{grid-template-columns:repeat(var(--seat-columns),minmax(0,1fr))!important;gap:3mm!important;width:100%!important}
  .seat-print-page.layout-rows .print-seat-slot{min-width:0!important;min-height:18mm;padding:5.5mm 2mm 2mm!important;break-inside:avoid}
  .seat-print-page.layout-rows .print-student-card{min-width:0;gap:1.5mm}
  .seat-print-page.layout-rows .print-student-card strong{font-size:9pt;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .seat-print-page.layout-rows .print-avatar{flex:0 0 auto;font-size:17pt}
  .seat-print-page.layout-rows .print-position-label{font-size:6pt}
}

/* ===== v1.13 教師今日上課工作台 ===== */
.active-lesson-nav{background:#1d4ed8!important;color:#fff!important;padding:7px 11px;border-radius:999px;font-weight:900;box-shadow:inset 0 0 0 1px rgba(255,255,255,.18)}
.class-nav-workbench{font-weight:900!important;color:#1d4ed8!important;background:#eff6ff;border-radius:8px}
.v113-hero{border-color:#bfdbfe;background:linear-gradient(135deg,#f8fbff 0%,#edf6ff 55%,#f5f3ff 100%)}
.active-lesson-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:15px 18px;margin:0 0 18px;border:1px solid #86efac;border-radius:15px;background:linear-gradient(135deg,#ecfdf5,#f0fdf4);box-shadow:0 8px 24px rgba(22,101,52,.08)}
.active-lesson-banner>div{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.active-lesson-banner>div>span{font-weight:900;color:#15803d}.active-lesson-banner>div>strong{font-size:18px}.active-lesson-banner small{color:#64748b}
.workbench-primary-actions{margin-top:16px}.workbench-primary-actions .btn-lg{padding:12px 20px;font-size:16px}.compact-empty{padding:20px}
.today-task-list{display:grid;gap:8px}.today-task-list a{display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:10px;padding:11px 12px;border:1px solid var(--line);border-radius:12px;color:var(--text);background:#fff}.today-task-list a:hover{background:#f8fbff;text-decoration:none}.today-task-list .task-icon{display:grid;place-items:center;width:38px;height:38px;border-radius:10px;background:#f1f5f9;font-size:20px}.today-task-list a div{display:grid;gap:2px}.today-task-list a small{color:var(--muted)}.today-task-list a>b{color:#94a3b8}.v113-dashboard-grid{align-items:start}
.class-launch-card{display:flex;flex-direction:column}.class-launch-card>.actions{margin-top:auto}

.lesson-hero{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:16px;padding:22px 24px;border:1px solid #bfdbfe;border-radius:20px;background:linear-gradient(135deg,#eff6ff,#fff 58%,#f5f3ff);box-shadow:0 12px 34px rgba(37,99,235,.09)}
.lesson-hero.is-active{border-color:#86efac;background:linear-gradient(135deg,#ecfdf5,#fff 58%,#eff6ff)}.lesson-state-pill{display:inline-flex;padding:5px 10px;border-radius:999px;background:#dbeafe;color:#1d4ed8;font-size:13px;font-weight:900}.lesson-hero.is-active .lesson-state-pill{background:#dcfce7;color:#15803d}.lesson-class-line{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-top:5px}.lesson-class-line h1{font-size:clamp(28px,4vw,42px);margin:0}.lesson-class-line>span{color:#475569;font-weight:800}.lesson-hero-main p{margin:4px 0 0;color:#64748b}.lesson-hero-actions{display:flex;align-items:center;gap:12px}.lesson-elapsed{min-width:72px;text-align:center;padding:8px 12px;border-radius:13px;background:#fff;border:1px solid #bbf7d0}.lesson-elapsed strong{display:block;font-size:25px;line-height:1}.lesson-elapsed span{font-size:12px;color:#64748b}
.lesson-quickbar{position:sticky;top:8px;z-index:20;display:grid;grid-template-columns:repeat(8,minmax(92px,1fr));gap:8px;margin-bottom:20px;padding:10px;border:1px solid #dbe3ef;border-radius:17px;background:rgba(255,255,255,.96);box-shadow:0 12px 28px rgba(15,23,42,.10);backdrop-filter:blur(10px)}.lesson-quickbar a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:68px;border-radius:12px;color:#27364c;font-size:13px;text-decoration:none}.lesson-quickbar a:hover{background:#eff6ff;color:#1d4ed8}.lesson-quickbar a span{font-size:22px}.lesson-quickbar a strong{font-size:13px;white-space:nowrap}
.lesson-main-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(300px,.65fr);gap:18px;align-items:start}.lesson-material-panel{border-color:#c7d9f8}.lesson-eyebrow{display:block;color:#1d4ed8;font-size:13px;font-weight:900;margin-bottom:3px}.lesson-material-meta{display:flex;gap:7px;flex-wrap:wrap;margin:2px 0 14px}.lesson-material-start{display:grid;grid-template-columns:58px minmax(0,1fr) auto;align-items:center;gap:14px;padding:18px;border:1px solid #93c5fd;border-radius:16px;background:linear-gradient(135deg,#eff6ff,#fff);color:#10213f;text-decoration:none}.lesson-material-start:hover{background:#eaf3ff;text-decoration:none}.lesson-material-start>span{display:grid;place-items:center;width:54px;height:54px;border-radius:15px;background:#2563eb;color:#fff;font-size:28px}.lesson-material-start>div{display:grid;gap:3px}.lesson-material-start strong{font-size:19px}.lesson-material-start small{color:#64748b}.lesson-material-start>b{font-size:26px;color:#2563eb}.lesson-empty-cta{padding:18px;border:1px dashed #93c5fd;border-radius:14px;background:#f8fbff}.lesson-empty-cta p{margin-top:0;color:#526176}
.lesson-status-list{display:grid;gap:9px}.lesson-status-list a{display:grid;grid-template-columns:38px minmax(0,1fr);gap:9px;align-items:center;padding:10px;border:1px solid var(--line);border-radius:12px;color:var(--text);text-decoration:none}.lesson-status-list a>span{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;font-weight:900}.lesson-status-list a>div{display:grid;gap:2px}.lesson-status-list small{color:#64748b}.lesson-status-list .is-done>span{background:#dcfce7;color:#15803d}.lesson-status-list .is-pending>span{background:#fef3c7;color:#a16207}.lesson-status-list .is-warning>span{background:#fee2e2;color:#b91c1c}.lesson-status-list a:hover{background:#f8fafc}
.lesson-info-grid{align-items:start}.lesson-text-preview{min-height:94px;padding:14px;border-radius:12px;background:#f8fafc;border:1px solid #e2e8f0;font-size:17px;white-space:normal}.lesson-text-preview.is-empty{color:#94a3b8}.lesson-progress-box{display:grid;gap:6px;min-height:94px;padding:14px;border-radius:12px;background:#f8fafc;border:1px solid #e2e8f0}.lesson-progress-box span{font-size:12px;font-weight:900;color:#2563eb}.lesson-progress-box strong{font-size:17px}.lesson-announcement{display:grid;grid-template-columns:46px minmax(0,1fr) auto;gap:12px;align-items:center}.lesson-announcement>span{font-size:30px}.lesson-announcement p{margin:3px 0;color:#64748b}.lesson-more-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:9px;margin-top:12px}.lesson-more-grid a{padding:12px 10px;border:1px solid var(--line);border-radius:11px;background:#f8fafc;text-align:center;color:#334155;font-weight:800;text-decoration:none}.lesson-more-grid a:hover{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8}

@media(max-width:1100px){.lesson-quickbar{grid-template-columns:repeat(4,minmax(100px,1fr))}.lesson-main-grid{grid-template-columns:1fr}.lesson-more-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:760px){.active-lesson-banner,.lesson-hero{align-items:flex-start;flex-direction:column}.active-lesson-banner .btn,.lesson-hero-actions{width:100%}.lesson-hero-actions form,.lesson-hero-actions .btn{width:100%}.lesson-quickbar{position:static;grid-template-columns:repeat(4,minmax(0,1fr));padding:7px}.lesson-quickbar a{min-height:60px}.lesson-quickbar a strong{font-size:12px}.lesson-info-grid{grid-template-columns:1fr}.lesson-announcement{grid-template-columns:42px minmax(0,1fr)}.lesson-announcement .btn{grid-column:1/-1}.lesson-more-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:460px){.lesson-quickbar{grid-template-columns:repeat(2,minmax(0,1fr))}.lesson-class-line h1{font-size:30px}.lesson-more-grid{grid-template-columns:1fr}.lesson-material-start{grid-template-columns:48px minmax(0,1fr)}.lesson-material-start>span{width:46px;height:46px}.lesson-material-start>b{display:none}}

/* v1.13.1 PDF progressive loading / lazy page rendering */
.pdf-page-wrap.is-placeholder{background:#f8fafc;overflow:hidden}
.pdf-page-placeholder{position:absolute;inset:0;z-index:0;display:grid;place-content:center;gap:6px;text-align:center;color:#64748b;background:linear-gradient(110deg,#f8fafc 8%,#eef2f7 18%,#f8fafc 33%);background-size:220% 100%;animation:yll-pdf-placeholder 1.8s linear infinite}
.pdf-page-placeholder[hidden]{display:none}
.pdf-page-placeholder span{font-size:14px;font-weight:800;color:#475569}
.pdf-page-placeholder small{font-size:11px;color:#94a3b8}
.pdf-page-wrap.is-loading-page .pdf-page-placeholder small{color:#2563eb}
.pdf-page-wrap.has-page-error .pdf-page-placeholder{background:#fff7ed;animation:none}
.pdf-page-wrap.has-page-error .pdf-page-placeholder small{color:#b45309}
@keyframes yll-pdf-placeholder{to{background-position-x:-220%}}
@media (prefers-reduced-motion:reduce){.pdf-page-placeholder{animation:none}}

/* ===== v1.14 學生角色系統 ===== */
.role-kicker{display:inline-flex;align-items:center;gap:6px;font-size:.76rem;font-weight:900;letter-spacing:.12em;color:#6d5bd0;text-transform:uppercase}
.student-role-entry-panel{display:flex;justify-content:space-between;gap:18px;align-items:center;background:linear-gradient(135deg,#f7f5ff,#eef7ff)}
.student-role-entry-copy{display:flex;align-items:center;gap:14px}.role-entry-icon{font-size:2.2rem}.student-role-entry-copy h2{margin:0 0 4px}.student-role-entry-copy p{margin:0}
.role-manage-hero{display:flex;align-items:center;justify-content:space-between;gap:24px;background:linear-gradient(135deg,#f7f5ff 0%,#eef7ff 55%,#fff8ec 100%);border-color:#d9d1ff}.role-manage-hero h2{font-size:2rem;margin:6px 0}.role-manage-hero p{max-width:760px;margin:0;line-height:1.75}.role-code-card{min-width:220px;padding:18px;border-radius:18px;background:#fff;border:1px solid #ddd6fe;box-shadow:0 10px 30px rgba(80,60,170,.08);text-align:center}.role-code-card span,.role-code-card a{display:block}.role-code-card span{font-size:.78rem;color:#64748b;font-weight:700}.role-code-card strong{display:block;font-size:1.8rem;letter-spacing:.08em;margin:5px 0 10px}.role-code-card a{font-size:.86rem;font-weight:800}
.role-manage-actions{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(280px,.8fr);gap:18px}.role-stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:18px 0}.role-stat-row>div{padding:14px;border-radius:14px;background:#f8fafc;border:1px solid #e2e8f0;text-align:center}.role-stat-row span{display:block;color:#64748b;font-size:.82rem}.role-stat-row strong{display:block;font-size:1.55rem;margin-top:3px}.role-action-buttons{align-items:center}.role-action-buttons form{margin:0}.role-security-card ul{margin:8px 0 0;padding-left:1.2rem;line-height:1.8}.role-table-avatar{font-size:2rem}

/* 學生登入 */
.student-role-body{margin:0;min-height:100vh;background:radial-gradient(circle at 10% 0,#e9e2ff 0,transparent 30%),radial-gradient(circle at 90% 10%,#dff5ff 0,transparent 28%),#f6f8fc;color:#15213a}
.student-role-login-shell{min-height:calc(100vh - 90px);display:grid;place-items:center;padding:28px 18px}.student-role-login-card{width:min(460px,100%);background:rgba(255,255,255,.96);border:1px solid #e3e7f0;border-radius:26px;box-shadow:0 24px 70px rgba(30,42,75,.15);padding:32px}.student-role-login-icon{width:74px;height:74px;display:grid;place-items:center;border-radius:24px;background:linear-gradient(135deg,#ede9fe,#dbeafe);font-size:2.4rem;margin-bottom:14px}.student-role-login-card h1{font-size:2.2rem;margin:5px 0 6px}.student-role-login-card>p{margin:0 0 20px}.student-role-class-chip{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:2px 12px;padding:13px 15px;margin-bottom:16px;border:1px solid #dbe4f2;border-radius:14px;background:#f8fbff}.student-role-class-chip span{font-size:.75rem;color:#64748b;grid-row:1/3}.student-role-class-chip strong{font-size:1.05rem}.student-role-class-chip small{color:#64748b}.student-role-login-form{display:grid;gap:14px}.student-role-login-form label{display:grid;gap:6px;font-weight:800}.student-role-login-form input{font-size:1.05rem;padding:13px 14px}.student-role-login-form input[name=pin]{font-size:1.4rem;letter-spacing:.28em;text-align:center}.student-role-login-form .btn{width:100%;margin-top:4px}.student-role-login-help{text-align:center;color:#64748b;font-size:.85rem;margin-top:14px}.student-role-back-public{display:block;text-align:center;margin-top:14px;font-weight:800}

/* 學生角色首頁 */
.student-role-topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px max(18px,calc((100vw - 1180px)/2));background:rgba(255,255,255,.92);backdrop-filter:blur(12px);border-bottom:1px solid #e3e8f1}.student-role-brand{text-decoration:none;color:#17233d;font-size:1.12rem}.student-role-topbar>div{display:flex;align-items:center;gap:14px;font-size:.88rem}.student-role-topbar a{font-weight:800}.student-role-container{width:min(1180px,calc(100% - 28px));margin:26px auto 44px;display:grid;gap:18px}.student-role-hero-card{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:28px;padding:28px;border:1px solid #ded9ff;border-radius:26px;background:linear-gradient(135deg,#fff 0%,#f6f3ff 45%,#eef8ff 100%);box-shadow:0 16px 46px rgba(58,50,120,.1)}.student-role-avatar-wrap{text-align:center}.student-role-avatar{width:132px;height:132px;border-radius:38px;display:grid;place-items:center;background:#fff;border:1px solid #e3e8f2;box-shadow:0 12px 28px rgba(57,70,110,.12);font-size:4.8rem}.student-role-avatar-wrap>span{display:block;margin-top:8px;font-size:.82rem;color:#64748b;font-weight:800}.student-role-hero-copy h1{font-size:2.25rem;margin:4px 0 2px}.student-role-title{font-weight:900;color:#6d5bd0}.student-role-level-row{display:flex;justify-content:space-between;align-items:end;gap:12px;margin-top:17px}.student-role-level-row strong{font-size:1.55rem}.student-role-level-row span{font-weight:800;color:#64748b}.student-xp-track{height:14px;margin-top:8px;border-radius:999px;background:#dfe5ef;overflow:hidden}.student-xp-track span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#7564d8,#4aa6e8)}.student-xp-next{font-size:.82rem;color:#64748b;margin-top:6px}.student-role-badge-count{min-width:120px;text-align:center;padding:18px;border-radius:20px;background:#fff;border:1px solid #e6e9f0}.student-role-badge-count span{display:block;font-size:2rem}.student-role-badge-count strong{display:block;font-size:2rem}.student-role-badge-count small{color:#64748b}
.student-role-stat-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:12px}.student-role-stat-grid article{display:flex;align-items:center;gap:11px;padding:15px;border-radius:18px;background:#fff;border:1px solid #e2e8f0}.student-role-stat-grid article>span{font-size:1.65rem}.student-role-stat-grid small{display:block;color:#64748b}.student-role-stat-grid strong{font-size:1.25rem}.student-role-main-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:18px}.student-role-panel{background:#fff;border:1px solid #e2e8f0;border-radius:22px;padding:22px;box-shadow:0 8px 26px rgba(36,48,78,.05)}.student-role-panel h2{margin:0}.student-achievement-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.student-achievement{position:relative;display:grid;grid-template-columns:auto 1fr;column-gap:10px;align-items:center;padding:13px;border-radius:16px;border:1px solid #e4e8ef;background:#fbfcfe}.student-achievement>span{grid-row:1/4;font-size:2rem}.student-achievement strong{font-size:.94rem}.student-achievement small{color:#64748b}.student-achievement b{font-size:.72rem;color:#94a3b8}.student-achievement.is-locked{filter:grayscale(1);opacity:.55}.student-achievement.is-unlocked{background:linear-gradient(135deg,#fffbeb,#fff);border-color:#fde3a7}.student-role-history{display:grid;gap:4px}.student-role-history>div{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid #eef1f6}.student-role-history>div:last-child{border-bottom:0}.student-history-icon{width:30px;height:30px;display:grid;place-items:center;border-radius:50%;background:#f1f5f9;font-weight:900}.student-role-history strong,.student-role-history small{display:block}.student-role-history small{color:#64748b;font-size:.76rem;margin-top:2px}.student-role-history b{font-size:1rem}.student-role-history .is-plus{color:#15803d}.student-role-history .is-minus{color:#b42318}
.student-avatar-panel{overflow:hidden}.student-avatar-catalog{display:grid;gap:14px;margin:10px 0 18px}.student-avatar-category{padding:14px;border-radius:18px;background:#f8fafc;border:1px solid #edf0f5}.student-avatar-category h3{margin:0 0 10px;font-size:.95rem}.student-avatar-options{display:grid;grid-template-columns:repeat(8,minmax(78px,1fr));gap:8px}.student-avatar-option{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;padding:9px 5px;border-radius:14px;border:2px solid transparent;background:#fff;cursor:pointer;text-align:center}.student-avatar-option:has(input:checked){border-color:#6d5bd0;box-shadow:0 0 0 3px rgba(109,91,208,.1)}.student-avatar-option input{position:absolute;opacity:0;pointer-events:none}.student-avatar-option>span{font-size:2rem}.student-avatar-option strong{font-size:.74rem;white-space:nowrap}.student-avatar-option small{font-size:.66rem;color:#64748b}.student-avatar-option.is-locked{filter:grayscale(.85);opacity:.42;cursor:not-allowed}

/* 公開班級頁角色 CTA */
.public-role-nav{font-weight:900!important;color:#5b4fc4!important}.public-role-cta{display:grid;grid-template-columns:auto 1fr auto;gap:18px;align-items:center;padding:22px 24px;margin-bottom:18px;border-radius:22px;background:linear-gradient(135deg,#f5f1ff,#edf8ff);border:1px solid #ddd6fe}.public-role-cta-icon{width:64px;height:64px;display:grid;place-items:center;border-radius:18px;background:#fff;font-size:2.2rem;box-shadow:0 8px 20px rgba(69,64,130,.08)}.public-role-cta h2{margin:3px 0}.public-role-cta p{margin:0;color:#64748b}

/* 登入卡列印 */
.student-card-print-page{margin:0;background:#eef2f7}.student-card-print-toolbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 22px;background:#fff;border-bottom:1px solid #dce3ed;box-shadow:0 4px 18px rgba(40,50,70,.06)}.student-card-print-toolbar strong,.student-card-print-toolbar span{display:block}.student-card-print-toolbar span{font-size:.78rem;color:#64748b;margin-top:2px}.student-card-print-shell{width:min(1120px,calc(100% - 28px));margin:24px auto}.student-login-card-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.student-login-card{break-inside:avoid;background:#fff;border:1.5px solid #ccd6e5;border-radius:18px;padding:18px;min-height:250px;display:grid;gap:12px;box-shadow:0 8px 22px rgba(48,60,84,.06)}.student-login-card-head{display:flex;align-items:center;gap:10px}.student-login-card-head>span{font-size:2rem}.student-login-card-head strong,.student-login-card-head small{display:block}.student-login-card-head small{color:#64748b}.student-login-card-name{padding:10px 12px;border-radius:12px;background:#f7f8fc}.student-login-card-name span,.student-login-card-name strong{display:block}.student-login-card-name span{font-size:.76rem;color:#64748b}.student-login-card-name strong{font-size:1.18rem}.student-login-card-credentials{display:grid;grid-template-columns:1.2fr .7fr 1fr;gap:8px}.student-login-card-credentials>div{padding:9px 10px;border:1px solid #e2e8f0;border-radius:11px}.student-login-card-credentials span,.student-login-card-credentials strong{display:block;text-align:center}.student-login-card-credentials span{font-size:.68rem;color:#64748b}.student-login-card-credentials strong{font-size:1.15rem;margin-top:2px}.student-login-card-credentials .student-pin-box{border-color:#b9acf8;background:#f7f4ff}.student-login-card-credentials .student-pin-box strong{font-size:1.55rem;letter-spacing:.18em}.student-login-card-bottom{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:center}.student-login-card-qr canvas{display:block;width:78px;height:78px}.student-login-card-bottom span,.student-login-card-bottom small,.student-login-card-bottom b{display:block}.student-login-card-bottom span{font-size:.68rem;color:#64748b}.student-login-card-bottom small{font-size:.67rem;word-break:break-all}.student-login-card-bottom b{font-size:.72rem;color:#a04a13;margin-top:5px}

@media(max-width:960px){.role-manage-actions,.student-role-main-grid{grid-template-columns:1fr}.student-role-stat-grid{grid-template-columns:repeat(3,1fr)}.student-avatar-options{grid-template-columns:repeat(5,1fr)}}
@media(max-width:720px){.student-role-entry-panel,.role-manage-hero,.public-role-cta{display:flex;flex-direction:column;align-items:stretch}.role-code-card{min-width:0}.student-role-hero-card{grid-template-columns:1fr;text-align:center}.student-role-avatar-wrap{display:grid;justify-items:center}.student-role-badge-count{display:inline-grid;justify-self:center}.student-role-level-row{text-align:left}.student-role-stat-grid{grid-template-columns:repeat(2,1fr)}.student-achievement-grid{grid-template-columns:1fr}.student-avatar-options{grid-template-columns:repeat(4,1fr)}.student-role-topbar{align-items:flex-start}.student-role-topbar>div{flex-wrap:wrap;justify-content:flex-end}.student-login-card-grid{grid-template-columns:1fr}.student-card-print-toolbar{align-items:flex-start;flex-direction:column}}
@media(max-width:480px){.student-role-login-card{padding:24px 18px}.student-role-stat-grid{grid-template-columns:1fr 1fr}.student-role-avatar{width:112px;height:112px;font-size:4rem}.student-avatar-options{grid-template-columns:repeat(3,1fr)}.role-stat-row{grid-template-columns:1fr}.student-role-topbar>div>span{display:none}}

@media print{
  .student-card-print-page{background:#fff}.no-print,.student-card-print-toolbar{display:none!important}.student-card-print-shell{width:auto;margin:0}.student-login-card-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:7mm}.student-login-card{box-shadow:none;border:1px solid #8995a7;border-radius:4mm;padding:5mm;min-height:58mm;page-break-inside:avoid}.student-login-card-qr canvas{width:20mm;height:20mm}
}
@page{size:A4 portrait;margin:9mm}

/* v1.14.1 班級角色牆：老師設定 */
.role-wall-admin{scroll-margin-top:110px;background:linear-gradient(135deg,#fffdf7,#f7f5ff 48%,#eef8ff);border-color:#ddd8f4}.role-wall-admin-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,.9fr);gap:18px}.role-wall-share-card,.role-wall-setting-form{padding:18px;border-radius:18px;background:#fff;border:1px solid #e2e8f0}.role-wall-share-card>strong{display:block;margin-bottom:9px}.role-wall-url{display:grid;grid-template-columns:1fr auto;gap:8px}.role-wall-url input{min-width:0;font-size:.82rem}.role-wall-share-card .actions{margin-top:12px}.role-wall-setting-form{display:grid;gap:14px}.role-wall-master-toggle{display:flex;align-items:flex-start;gap:11px;padding:14px;border-radius:15px;background:#f8fafc;border:1px solid #dfe5ee;cursor:pointer}.role-wall-master-toggle input{margin-top:4px;transform:scale(1.15)}.role-wall-master-toggle strong,.role-wall-master-toggle small{display:block}.role-wall-master-toggle small{color:#64748b;margin-top:3px}.role-wall-option-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.role-wall-option-grid label{padding:10px 11px;border-radius:12px;border:1px solid #e4e8ef;background:#fff;cursor:pointer}.role-wall-privacy-option{grid-column:1/-1}.role-wall-privacy-option small{display:block;color:#b45309;margin-left:22px;margin-top:3px}.role-wall-privacy-note{font-size:.82rem;line-height:1.6;padding:11px 12px;border-radius:12px;background:#f6f8fb;color:#526078}.role-wall-privacy-note strong{margin-left:3px;color:#22314f}

/* v1.14.1 公開班級角色牆 */
.role-wall-body{margin:0;min-height:100vh;background:radial-gradient(circle at 8% 0,#eee9ff 0,transparent 30%),radial-gradient(circle at 92% 4%,#e1f5ff 0,transparent 28%),#f5f7fb;color:#17233d}.role-wall-topbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:12px max(18px,calc((100vw - 1320px)/2));background:rgba(255,255,255,.92);backdrop-filter:blur(14px);border-bottom:1px solid #e0e6ef}.role-wall-topbar>div{display:flex;align-items:center;gap:11px}.role-wall-brand{width:42px;height:42px;display:grid;place-items:center;border-radius:14px;background:linear-gradient(135deg,#fff5c7,#efe7ff);font-size:1.45rem}.role-wall-topbar strong,.role-wall-topbar small{display:block}.role-wall-topbar strong{font-size:1.08rem}.role-wall-topbar small{color:#64748b;font-size:.74rem}.role-wall-topbar nav{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.role-wall-topbar nav a{padding:8px 11px;border-radius:10px;text-decoration:none;font-size:.84rem;font-weight:850;color:#394866;background:#fff;border:1px solid #dfe5ee}.role-wall-container{width:min(1320px,calc(100% - 28px));margin:24px auto 44px;display:grid;gap:20px}.role-wall-preview-banner{padding:12px 16px;border-radius:14px;background:#fff7d6;border:1px solid #efd587;font-weight:800;color:#735b18}.role-wall-world{display:grid;grid-template-columns:auto 1fr;gap:22px;align-items:center;padding:24px 26px;border-radius:26px;background:linear-gradient(135deg,#ffffff,#f8f5ff 52%,#eefaff);border:1px solid #ddd9f4;box-shadow:0 14px 42px rgba(51,62,98,.08)}.role-world-current{display:flex;align-items:center;gap:14px;min-width:250px}.role-world-current>span{width:86px;height:86px;display:grid;place-items:center;border-radius:26px;background:#fff;border:1px solid #e5e9f0;box-shadow:0 10px 24px rgba(56,67,94,.09);font-size:3.2rem}.role-world-current small,.role-world-current strong,.role-world-current b{display:block}.role-world-current small{font-size:.72rem;color:#64748b;font-weight:800}.role-world-current strong{font-size:1.45rem;margin:2px 0}.role-world-current b{font-size:.84rem;color:#6d5bd0}.role-world-progress{min-width:0}.role-world-heading,.role-world-meta{display:flex;justify-content:space-between;gap:14px;align-items:center}.role-world-heading span{font-weight:900}.role-world-heading strong{color:#5f51b7}.role-world-track{height:18px;background:#dde4ef;border-radius:999px;overflow:hidden;margin:11px 0 7px}.role-world-track span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#7564d8,#4aa6e8,#56c6a6);box-shadow:0 0 14px rgba(83,129,220,.25)}.role-world-meta{font-size:.78rem;color:#64748b}.role-wall-section{padding:24px;border-radius:26px;background:#fff;border:1px solid #e0e6ef;box-shadow:0 10px 32px rgba(40,54,85,.05)}.role-wall-section-title{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:17px}.role-wall-section-title span{font-size:.68rem;letter-spacing:.16em;color:#7c6bd4;font-weight:900}.role-wall-section-title h1,.role-wall-section-title h2{margin:3px 0 0;font-size:1.75rem}.role-wall-section-title p{margin:5px 0 0;color:#64748b}.role-wall-page-indicator{font-weight:900;color:#64748b}.role-wall-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:13px}.role-wall-card{position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:center;min-height:285px;padding:18px 13px 15px;border-radius:22px;background:linear-gradient(180deg,#fbfcff,#fff);border:1px solid #e0e5ef;box-shadow:0 7px 18px rgba(45,58,88,.05);transition:transform .18s ease,box-shadow .18s ease}.role-wall-card:hover{transform:translateY(-3px);box-shadow:0 14px 30px rgba(45,58,88,.1)}.role-wall-card::before{content:"";position:absolute;inset:0 0 auto;height:5px;background:linear-gradient(90deg,#8b7ce5,#62a7e8,#58c9a8)}.role-wall-avatar{width:88px;height:88px;display:grid;place-items:center;border-radius:28px;background:#fff;border:1px solid #e4e9f1;box-shadow:0 9px 20px rgba(54,66,96,.09);font-size:3.35rem;margin-bottom:10px}.role-wall-card-name{text-align:center}.role-wall-card-name span{display:block;font-size:.7rem;color:#64748b;font-weight:800}.role-wall-card-name strong{display:block;font-size:1.08rem;margin-top:1px}.role-wall-level{display:flex;align-items:baseline;gap:7px;margin-top:9px}.role-wall-level b{font-size:1.15rem;color:#5c50b5}.role-wall-level span{font-size:.7rem;color:#64748b;font-weight:800}.role-wall-card-exp{width:100%;margin-top:8px}.role-wall-card-exp>div:first-child{display:flex;justify-content:space-between;gap:7px;align-items:center;font-size:.72rem}.role-wall-card-exp small{font-size:.62rem;color:#8793a5}.role-wall-mini-track{height:7px;border-radius:999px;background:#e5eaf2;margin-top:5px;overflow:hidden}.role-wall-mini-track span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#7868d7,#55a9e7)}.role-wall-badges{min-height:27px;display:flex;align-items:center;justify-content:center;gap:3px;margin-top:9px;flex-wrap:wrap}.role-wall-badges span{font-size:1.15rem}.role-wall-badges small{font-size:.68rem;color:#8a96a7}.role-wall-points{margin-top:auto;padding-top:8px;font-size:.72rem;font-weight:850;color:#637089}.role-wall-rank-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px}.role-rank-card{padding:16px;border-radius:18px;background:#f9fbfe;border:1px solid #e2e8f0}.role-rank-card h3{margin:0 0 10px;font-size:1rem}.role-rank-card ol{list-style:none;margin:0;padding:0;display:grid;gap:6px}.role-rank-card li{display:grid;grid-template-columns:30px 34px minmax(0,1fr) auto;gap:7px;align-items:center;padding:8px;border-radius:11px;background:#fff;border:1px solid #edf0f5}.role-rank-place{text-align:center;font-weight:900}.role-rank-avatar{font-size:1.35rem;text-align:center}.role-rank-card li strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.85rem}.role-rank-card li b{font-size:.75rem;color:#5c50b5;white-space:nowrap}.role-rank-empty{padding:18px 8px;text-align:center;color:#94a3b8;font-size:.82rem}.role-wall-privacy{display:flex;align-items:center;justify-content:center;gap:10px;padding:13px 16px;color:#708096;font-size:.78rem}.role-wall-privacy span{font-size:1.1rem}.role-wall-privacy p{margin:0}

/* 大螢幕展示：保留共同進度，隱藏非必要資訊，自動輪播角色 */
.role-wall-display{overflow-x:hidden}.role-wall-display .role-wall-topbar{position:relative;padding-top:8px;padding-bottom:8px}.role-wall-display .role-wall-container{width:min(1600px,calc(100% - 34px));margin-top:15px;gap:14px}.role-wall-display .role-wall-world{padding:16px 22px}.role-wall-display .role-world-current>span{width:68px;height:68px;font-size:2.65rem;border-radius:22px}.role-wall-display .role-wall-section{padding:19px}.role-wall-display .role-wall-section-title{margin-bottom:12px}.role-wall-display .role-wall-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:14px}.role-wall-display .role-wall-card{min-height:0;padding:14px 12px 13px}.role-wall-display .role-wall-avatar{width:78px;height:78px;font-size:3rem}.role-wall-display .role-wall-card-name strong{font-size:1.12rem}.role-wall-display .role-wall-privacy{display:none}.role-wall-display footer{display:none}.role-wall-card[hidden]{display:none!important}

@media(max-width:1100px){.role-wall-admin-grid{grid-template-columns:1fr}.role-wall-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.role-wall-rank-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.role-wall-display .role-wall-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:820px){.role-wall-world{grid-template-columns:1fr}.role-world-current{min-width:0}.role-wall-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.role-wall-display .role-wall-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.role-wall-topbar{align-items:flex-start}.role-wall-topbar nav{justify-content:flex-end}.role-wall-option-grid{grid-template-columns:1fr}.role-wall-privacy-option{grid-column:auto}}
@media(max-width:620px){.role-wall-container{width:min(100% - 18px,1320px);margin-top:12px}.role-wall-topbar{position:relative;display:grid;grid-template-columns:1fr}.role-wall-topbar nav{justify-content:flex-start}.role-wall-world,.role-wall-section{padding:17px;border-radius:20px}.role-world-current>span{width:70px;height:70px;font-size:2.7rem}.role-world-heading,.role-world-meta{align-items:flex-start;flex-direction:column;gap:3px}.role-wall-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.role-wall-card{padding:14px 8px;min-height:260px}.role-wall-avatar{width:74px;height:74px;font-size:2.8rem;border-radius:23px}.role-wall-card-name strong{font-size:.98rem}.role-wall-rank-grid{grid-template-columns:1fr}.role-wall-url{grid-template-columns:1fr}.role-wall-display .role-wall-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:390px){.role-wall-grid{grid-template-columns:1fr 1fr}.role-wall-card-exp>div:first-child{display:grid;text-align:center}.role-wall-badges span{font-size:1rem}}


/* ===== v1.15 20 角色美術包 ===== */
.avatar-art-image{display:block;width:100%;height:100%;object-fit:contain;object-position:center;user-select:none;-webkit-user-drag:none}
.avatar .avatar-art-image,.leaderboard-row .avatar-art-image,.student-identity .avatar-art-image{width:100%;height:100%;object-fit:contain}
.avatar-inline-art{border-radius:8px}
.student-role-avatar{overflow:hidden;padding:3px;background:linear-gradient(145deg,#fff,#f3f5ff)}
.student-role-avatar .student-role-avatar-art{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 9px 10px rgba(45,52,91,.13))}
.avatar-art-intro{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:13px 0 10px;padding:11px 14px;border-radius:14px;background:linear-gradient(90deg,#f4f0ff,#eff9ff);border:1px solid #ddd7ff}.avatar-art-intro strong{color:#594bb1}.avatar-art-intro span{color:#64748b;font-size:.8rem}
.student-avatar-filter{display:flex;gap:7px;flex-wrap:wrap;margin:8px 0 14px}.student-avatar-filter button{border:1px solid #dce2eb;background:#fff;color:#526078;border-radius:999px;padding:8px 12px;font-weight:850;cursor:pointer}.student-avatar-filter button.is-active{background:#6154bd;color:#fff;border-color:#6154bd;box-shadow:0 5px 14px rgba(97,84,189,.18)}
.student-avatar-category[hidden]{display:none!important}.student-avatar-category[data-avatar-category="girl"],.student-avatar-category[data-avatar-category="boy"]{background:linear-gradient(145deg,#fbfcff,#f5f3ff)}
.student-avatar-options{grid-template-columns:repeat(5,minmax(118px,1fr))}.student-avatar-option.is-art{padding:8px 7px 10px}.student-avatar-option-visual{width:96px;height:96px;display:grid;place-items:center;margin-bottom:4px}.student-avatar-option.is-art .student-avatar-option-visual{width:104px;height:104px}.student-avatar-choice-art{filter:drop-shadow(0 5px 6px rgba(40,48,78,.12))}.student-avatar-option em{font-style:normal;font-size:.64rem;color:#7c6bd4;font-weight:800}.student-avatar-option.is-locked .student-avatar-option-visual::after{content:"🔒";position:absolute;display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.92);box-shadow:0 3px 9px rgba(0,0,0,.13);font-size:.9rem}.student-avatar-option.is-locked .student-avatar-option-visual{position:relative}
.role-wall-avatar{width:132px;height:132px;padding:2px;overflow:hidden;border-radius:30px;background:linear-gradient(145deg,#fff,#f4f6ff)}.role-wall-avatar .role-wall-avatar-art{width:100%;height:100%;filter:drop-shadow(0 7px 7px rgba(45,58,88,.12))}.role-wall-card{min-height:330px}.role-rank-avatar{width:36px;height:36px;display:grid;place-items:center}.role-rank-avatar .role-rank-avatar-art{width:36px;height:36px;object-fit:contain}.role-rank-card li{grid-template-columns:30px 38px minmax(0,1fr) auto}
.draw-winner-avatar{width:72px;height:72px;display:grid;place-items:center;font-size:36px}.draw-winner-avatar img{width:72px;height:72px;object-fit:contain;filter:drop-shadow(0 5px 6px rgba(60,40,20,.15))}.participant-item .avatar,.draw-history-card .avatar{overflow:hidden;border-radius:9px}.participant-item .avatar-art-image,.draw-history-card .avatar-art-image{width:38px;height:38px}.seat-student-card .avatar{overflow:hidden;border-radius:9px}.seat-student-card .avatar-art-image{width:37px;height:37px}.print-avatar{overflow:hidden}.print-avatar .avatar-art-image{width:100%;height:100%;object-fit:contain}
.role-table-avatar{width:48px!important;height:48px!important;display:grid!important;place-items:center;overflow:hidden}.role-table-avatar .avatar-art-image{width:46px;height:46px}
.avatar-choice.is-art span{width:58px;height:58px;display:grid;place-items:center}.avatar-choice.is-art .avatar-picker-art{width:56px;height:56px;object-fit:contain}.avatar-choice.is-art{padding:2px}.student-list-table .avatar{overflow:hidden}.student-list-table .avatar-art-image{width:38px;height:38px}
@media(max-width:960px){.student-avatar-options{grid-template-columns:repeat(4,minmax(100px,1fr))}.role-wall-avatar{width:112px;height:112px}.role-wall-card{min-height:315px}}
@media(max-width:620px){.avatar-art-intro{align-items:flex-start;flex-direction:column}.student-avatar-options{grid-template-columns:repeat(2,minmax(0,1fr))}.student-avatar-option-visual,.student-avatar-option.is-art .student-avatar-option-visual{width:112px;height:112px}.role-wall-avatar{width:102px;height:102px}.role-wall-card{min-height:310px}}

/* v1.15.1：重新匯入名單角色處理／全班隨機角色 */
.student-import-avatar-options{margin:0 0 16px;padding:12px 14px;border:1px solid #d8e2f0;border-radius:12px;background:#f8fbff}.student-import-avatar-options legend{padding:0 6px;font-weight:850;color:#1e3a5f}.student-import-avatar-options>label{display:flex;align-items:flex-start;gap:9px;padding:9px 8px;border-radius:9px;cursor:pointer}.student-import-avatar-options>label:hover{background:#eef5ff}.student-import-avatar-options input{margin-top:3px}.student-import-avatar-options span{display:grid;gap:2px}.student-import-avatar-options small{color:#64748b;line-height:1.45}.student-import-avatar-options .student-import-level-check{margin-top:6px;border-top:1px dashed #cbd5e1;padding-top:12px}.role-randomize-form{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.role-randomize-form label{display:flex;align-items:center;gap:7px;font-weight:700}.public-student-identity .avatar,.public-points-table .avatar{overflow:hidden;flex:0 0 auto}.public-student-identity .avatar-art-image,.public-points-table .avatar-art-image{width:100%;height:100%;object-fit:contain}

/* ===== v1.15.2 學生選角操作修正 ===== */
.student-role-change-avatar{display:inline-flex;margin-top:10px;text-decoration:none}
.student-avatar-savebar{position:sticky;bottom:10px;z-index:12;display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:18px;padding:14px 16px;border:1px solid #d9d4ff;border-radius:16px;background:rgba(255,255,255,.96);box-shadow:0 12px 34px rgba(45,44,92,.16);backdrop-filter:blur(10px)}
.student-avatar-savebar>div{display:grid;gap:3px}.student-avatar-savebar strong{color:#312e81}.student-avatar-savebar small{color:#64748b;line-height:1.45}.student-avatar-savebar .btn{flex:0 0 auto;min-width:190px}
#student-avatar-picker{scroll-margin-top:86px}
@media(max-width:620px){.student-avatar-savebar{bottom:6px;align-items:stretch;flex-direction:column}.student-avatar-savebar .btn{width:100%;min-width:0}.student-role-change-avatar{width:100%;justify-content:center}}


/* ===== v1.16 40 角色＋進階覺醒 ===== */
.student-avatar-category[data-avatar-series="advanced"]{background:linear-gradient(145deg,#fbf8ff,#f4f0ff);border-color:#e4dafd}
.student-avatar-option.is-advanced{background:linear-gradient(180deg,#fff,#fbf8ff);box-shadow:inset 0 0 0 1px rgba(124,92,190,.05)}
.student-avatar-rarity{font-size:.61rem;font-weight:900;letter-spacing:.02em;line-height:1.2;white-space:nowrap}
.student-avatar-rarity.rarity-1,.student-avatar-rarity.rarity-2{color:#64748b}.student-avatar-rarity.rarity-3{color:#2563eb}.student-avatar-rarity.rarity-4{color:#7c3aed}.student-avatar-rarity.rarity-5{color:#b45309}
.role-wall-avatar-meta{display:flex;justify-content:center;align-items:center;gap:7px;flex-wrap:wrap;margin-top:-2px;font-size:.72rem;color:#64748b}.role-wall-avatar-meta b{font-size:.67rem;color:#7c3aed}
.student-avatar-option.is-advanced .student-avatar-option-visual{filter:drop-shadow(0 7px 10px rgba(92,63,155,.16))}

.student-role-current-rarity{font-weight:850;color:#7c3aed}.role-wall-card{min-height:345px}

/* ===== v1.16.1 三年等級成長系統 ===== */
.student-role-stat-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.student-role-avatar,.role-wall-avatar{position:relative;isolation:isolate}
.level-frame-badge{position:absolute;right:4px;bottom:4px;z-index:3;width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:#fff;border:2px solid rgba(255,255,255,.92);box-shadow:0 4px 12px rgba(22,31,55,.2);font-size:.9rem}
.level-frame-bronze{border:3px solid #b77936!important;box-shadow:0 0 0 4px rgba(183,121,54,.13),0 12px 28px rgba(57,70,110,.12)!important}
.level-frame-silver{border:3px solid #aeb8c6!important;box-shadow:0 0 0 4px rgba(174,184,198,.18),0 12px 28px rgba(57,70,110,.12)!important}
.level-frame-gold{border:3px solid #e5ae24!important;box-shadow:0 0 0 4px rgba(229,174,36,.18),0 12px 30px rgba(180,126,18,.2)!important}
.level-frame-legend{border:3px solid #7558d8!important;box-shadow:0 0 0 4px rgba(117,88,216,.16),0 0 28px rgba(117,88,216,.24),0 12px 32px rgba(57,70,110,.16)!important}
.level-frame-legend::after{content:"";position:absolute;inset:-7px;border-radius:inherit;border:2px solid rgba(117,88,216,.22);pointer-events:none}
.student-level-roadmap-panel{overflow:hidden}
.student-level-roadmap{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:9px;margin-top:12px}
.student-level-roadmap article{display:grid;justify-items:center;text-align:center;gap:3px;padding:12px 7px;border:1px solid #e4e8ef;border-radius:15px;background:#f8fafc;filter:grayscale(.8);opacity:.6}
.student-level-roadmap article.is-done{filter:none;opacity:1;background:linear-gradient(145deg,#fff9dd,#f7f4ff);border-color:#e5d58b}
.student-level-roadmap article>span{font-size:1.45rem}.student-level-roadmap article strong{font-size:.9rem}.student-level-roadmap article small{font-size:.68rem;color:#64748b;line-height:1.25}
.student-level-frame-note{margin-top:12px;padding:10px 12px;border-radius:12px;background:#f7f5ff;color:#5d558a;font-size:.8rem;font-weight:800;text-align:center}
.role-wall-level{flex-wrap:wrap;justify-content:center;text-align:center}.role-wall-level span{line-height:1.3}
@media(max-width:960px){.student-role-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.student-level-roadmap{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:620px){.student-level-roadmap{grid-template-columns:repeat(2,minmax(0,1fr))}.level-frame-badge{width:24px;height:24px;font-size:.78rem}}


/* v1.16.2 角色權限一致化：教師端未解鎖角色仍可預覽，但不可選取。 */
.teacher-avatar-level-note{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:8px 0 12px;padding:10px 12px;border:1px solid #dbe4f0;border-radius:11px;background:#f8fbff;color:#475569}.teacher-avatar-level-note strong{color:#15345c}.teacher-avatar-level-note.compact{margin:0 0 10px;font-size:13px}.student-avatar-auto-choice{display:flex;align-items:flex-start;gap:10px;margin:0 0 12px;padding:11px 13px;border:1px solid #bfdbfe;border-radius:11px;background:#eff6ff;cursor:pointer}.student-avatar-auto-choice input{margin-top:4px}.student-avatar-auto-choice>span{display:grid;gap:2px}.student-avatar-auto-choice small{font-weight:500;color:#64748b}.avatar-choice{position:relative}.avatar-choice.is-locked>span{cursor:not-allowed}.avatar-choice.is-locked .avatar-picker-art,.avatar-choice.is-locked .avatar-legacy-emoji{filter:grayscale(.86);opacity:.48}.avatar-choice.is-current-exception .avatar-picker-art,.avatar-choice.is-current-exception .avatar-legacy-emoji{filter:none;opacity:1}.teacher-avatar-lock{position:absolute;right:-4px;bottom:-5px;display:grid;place-items:center;min-width:29px;min-height:29px;padding:2px 4px;border-radius:999px;background:#fff;border:1px solid #cbd5e1;box-shadow:0 3px 9px rgba(15,23,42,.16);font-size:12px;line-height:1;color:#334155;pointer-events:none}.teacher-avatar-lock small{display:block;font-size:8px;font-weight:850;white-space:nowrap}.avatar-choice.is-current-exception .teacher-avatar-lock{background:#dcfce7;border-color:#86efac;color:#166534}.student-avatar-permission-fixed{display:flex;align-items:flex-start;gap:9px;padding:10px 12px;border-radius:10px;background:#f1f5f9;color:#334155}.student-avatar-permission-fixed>span{font-size:18px}.student-avatar-permission-fixed>div{display:grid;gap:2px}.student-avatar-permission-fixed small{font-weight:500;color:#64748b;line-height:1.4}.student-import-avatar-options .student-avatar-permission-fixed{margin-top:6px;border-top:1px dashed #cbd5e1;border-radius:0;background:transparent;padding-top:12px}.role-randomize-form .student-avatar-permission-fixed{flex:1 1 340px}


/* ===== v1.17 52 角色＋神話靈獸 ===== */
.student-avatar-category[data-avatar-series="mythic"]{background:linear-gradient(145deg,#fff9e8,#f6f1ff);border-color:#ead7a3;box-shadow:inset 0 0 0 1px rgba(188,142,42,.05)}
.student-avatar-option.is-mythic{background:linear-gradient(180deg,#fffdf7,#f8f4ff);box-shadow:inset 0 0 0 1px rgba(160,116,36,.09)}
.student-avatar-option.is-mythic .student-avatar-option-visual{filter:drop-shadow(0 8px 12px rgba(126,82,180,.2))}
.student-avatar-option.is-mythic .student-avatar-rarity{color:#9a6700}
.student-mythic-roadmap{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:12px 0 16px;padding:10px 12px;border:1px solid #ead8a5;border-radius:13px;background:linear-gradient(100deg,#fff9df,#f7f1ff);color:#54436f;font-size:.76rem}.student-mythic-roadmap>span{font-weight:950;color:#7c4d00}.student-mythic-roadmap b{padding:4px 7px;border-radius:999px;background:rgba(255,255,255,.78);border:1px solid rgba(179,147,77,.18);font-size:.7rem}.role-wall-avatar-meta b{max-width:100%;text-align:center}
@media(max-width:620px){.student-mythic-roadmap{align-items:stretch;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.student-mythic-roadmap>span{grid-column:1/-1}}


/* v1.18 角色圖鑑＋成就系統 */
.student-achievement-panel{grid-column:1/-1}.student-achievement-groups{display:grid;gap:18px}.student-achievement-group>h3{margin:0 0 9px;font-size:.9rem;color:#48556c}.student-achievement-progress{grid-column:2;height:5px;overflow:hidden;border-radius:999px;background:#e8edf4;margin-top:4px}.student-achievement-progress i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#7c6bd9,#55a8e7)}.student-achievement.tier-4.is-unlocked,.student-achievement.tier-5.is-unlocked{border-color:#ddc881;box-shadow:0 5px 16px rgba(154,116,22,.08)}.student-achievement.tier-5.is-unlocked{background:linear-gradient(135deg,#fff8d8,#fff,#f5eeff)}
.student-atlas-panel{overflow:hidden}.student-atlas-summary{display:grid;grid-template-columns:1.25fr repeat(3,1fr);gap:10px;margin:14px 0}.student-atlas-summary>div,.student-atlas-summary>article{padding:13px 14px;border:1px solid #e3e8f0;border-radius:15px;background:#f9fbfe}.student-atlas-summary strong,.student-atlas-summary span{display:block}.student-atlas-summary strong{font-size:1.05rem}.student-atlas-total strong{font-size:1.45rem;color:#5e50b9}.student-atlas-summary span{font-size:.72rem;color:#66758c;font-weight:800;margin-bottom:7px}.student-atlas-summary div>div,.student-atlas-summary article>div{height:6px;overflow:hidden;border-radius:999px;background:#e4e9f1}.student-atlas-summary i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#7765d7,#4ea8e7,#54c8a8)}.student-atlas-filter{display:flex;gap:7px;flex-wrap:wrap;margin:12px 0}.student-atlas-filter button{border:1px solid #dce3ee;background:#fff;color:#56647a;border-radius:999px;padding:7px 11px;font:inherit;font-size:.76rem;font-weight:850;cursor:pointer}.student-atlas-filter button.is-active{background:#6656c7;color:#fff;border-color:#6656c7}.student-atlas-grid{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:9px}.student-atlas-card{position:relative;display:flex;flex-direction:column;align-items:center;min-width:0;padding:9px 5px;border:1px solid #e2e7ef;border-radius:15px;background:#fff;text-align:center}.student-atlas-avatar{position:relative;width:78px;height:78px;display:grid;place-items:center}.student-atlas-art{width:100%;height:100%;object-fit:contain}.student-atlas-card>strong{font-size:.72rem;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.student-atlas-card>small{font-size:.64rem;color:#768399}.student-atlas-card>em{font-size:.59rem;color:#b27b12;font-style:normal}.student-atlas-card.is-locked .student-atlas-art{filter:grayscale(1) brightness(.12);opacity:.32}.student-atlas-card.is-locked{background:#f6f7f9}.student-atlas-lock{position:absolute;inset:0;display:grid;place-items:center;font-size:1.4rem;text-shadow:0 2px 5px #fff}.student-atlas-current{position:absolute;right:-3px;top:1px;padding:2px 5px;border-radius:999px;background:#6555c6;color:#fff;font-size:.55rem}.student-atlas-card.is-current{border-color:#7564d8;box-shadow:0 0 0 2px rgba(117,100,216,.12)}
.role-wall-badges span{display:grid;place-items:center;width:27px;height:27px;border-radius:50%;background:#fff9df;border:1px solid #eedb9b;box-shadow:0 3px 8px rgba(89,74,31,.08)}
@media(max-width:900px){.student-atlas-grid{grid-template-columns:repeat(6,minmax(0,1fr))}.student-atlas-summary{grid-template-columns:repeat(2,1fr)}.student-atlas-total{grid-column:1/-1}}
@media(max-width:620px){.student-atlas-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.student-atlas-avatar{width:66px;height:66px}.student-atlas-summary{grid-template-columns:1fr}.student-atlas-total{grid-column:auto}}
@media(max-width:390px){.student-atlas-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* ===== v1.19 彈性冒險任務＋班級合作挑戰 ===== */
.adventure-progress{height:8px;overflow:hidden;border-radius:999px;background:#e6ebf2}.adventure-progress i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#6f62d6,#4aa8de,#4fc39b)}
.adventure-teacher-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(320px,.85fr);gap:18px;align-items:start}.adventure-current-panel,.adventure-settings-panel{min-width:0}.adventure-task-list{display:grid;gap:10px;margin:14px 0}.adventure-task-list article{display:grid;grid-template-columns:46px minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 13px;border:1px solid #dfe6ef;border-radius:14px;background:#fbfcfe}.adventure-task-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:#f0edff;font-size:1.35rem}.adventure-task-list article>div{display:grid;gap:3px}.adventure-task-list strong{font-size:.93rem}.adventure-task-list small{color:#6b778b}.adventure-task-list label{display:flex;align-items:center;gap:7px;color:#5c687b;font-size:.76rem;font-weight:850}.adventure-task-list input{width:74px}.adventure-required-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:11px 12px;border-radius:12px;background:#f7f8fb}.adventure-required-row label{display:flex;align-items:center;gap:8px;font-weight:850}.adventure-required-row span{font-size:.78rem;color:#657187}.adventure-class-challenge{display:grid;grid-template-columns:48px minmax(0,1fr) auto;gap:13px;align-items:center;padding:14px;border:1px solid #dce4ef;border-radius:16px;background:linear-gradient(135deg,#f8fbff,#faf7ff)}.adventure-class-challenge>span{font-size:1.65rem}.adventure-class-challenge>div{display:grid;gap:5px}.adventure-class-challenge small{color:#6a778b}.adventure-class-challenge b{font-size:.8rem;color:#4e5d72}.adventure-class-challenge em{font-size:.7rem;color:#7b6d8d;font-style:normal}.adventure-class-challenge label{display:grid;gap:4px;color:#5f6b7e;font-size:.75rem;font-weight:850}.adventure-class-challenge label input{width:86px}.adventure-class-challenge.is-complete{border-color:#a7ddc0;background:linear-gradient(135deg,#f0fff7,#fbfffd)}.adventure-regenerate-form{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px;padding-top:12px;border-top:1px dashed #dbe2eb}.adventure-toggle{display:flex;align-items:flex-start;gap:10px;padding:12px;border:1px solid #dce4ee;border-radius:13px;background:#f8fbff}.adventure-toggle input{margin-top:4px}.adventure-toggle>span{display:grid;gap:2px}.adventure-toggle small{color:#718096}.adventure-settings-panel h3{margin:18px 0 8px;font-size:.9rem}.adventure-source-checks{display:grid;grid-template-columns:1fr 1fr;gap:8px}.adventure-source-checks label{padding:10px 11px;border:1px solid #e0e6ef;border-radius:11px;background:#fff;font-size:.82rem;font-weight:800}.adventure-group-note{margin-top:10px;font-size:.78rem}.adventure-setting-grid{grid-template-columns:1fr 1fr;margin:14px 0}.adventure-setting-grid>div{display:grid;gap:5px}.adventure-setting-grid label{font-size:.76rem;font-weight:850;color:#59667a}.input-suffix{display:grid;grid-template-columns:1fr auto;align-items:center;gap:7px}.adventure-rule-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.adventure-rule-grid article{padding:14px;border:1px solid #e1e7ef;border-radius:15px;background:#fafbfd}.adventure-rule-grid article>span{font-size:1.45rem}.adventure-rule-grid strong{display:block;margin:5px 0}.adventure-rule-grid p{margin:0;color:#657287;font-size:.8rem;line-height:1.6}.adventure-recent-note{margin:14px 0 0;padding:10px 12px;border-radius:11px;background:#f3f5ff;color:#5c557d;font-size:.8rem}
.student-adventure-panel{margin:16px 0}.student-adventure-panel.is-complete{border-color:#b8e3c9;background:linear-gradient(135deg,#fff,#f6fff9)}.student-adventure-tasks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.student-adventure-tasks article{display:grid;grid-template-columns:38px minmax(0,1fr);gap:9px;padding:11px;border:1px solid #e1e6ef;border-radius:14px;background:#fbfcfe}.student-adventure-tasks article>span{font-size:1.35rem}.student-adventure-tasks article>div{display:grid;gap:4px}.student-adventure-tasks strong{font-size:.8rem}.student-adventure-tasks small{font-size:.67rem;color:#748095;line-height:1.35}.student-adventure-tasks b{font-size:.69rem;color:#606e83}.student-adventure-tasks article.is-complete{border-color:#aaddbf;background:#f4fff8}.student-adventure-tasks article.is-complete b{color:#18794e}.student-class-adventure{display:grid;grid-template-columns:44px minmax(0,1fr);gap:10px;margin-top:11px;padding:12px;border-radius:14px;background:linear-gradient(120deg,#f7f3ff,#f4fbff);border:1px solid #ddd7f3}.student-class-adventure>span{font-size:1.5rem}.student-class-adventure>div{display:grid;gap:4px}.student-class-adventure small{font-size:.69rem;color:#6e7790}.student-class-adventure b{font-size:.72rem;color:#5e5878}.student-class-adventure.is-complete{background:#f3fff8;border-color:#a9dfc1}
.role-wall-adventure{display:grid;grid-template-columns:72px minmax(0,1fr);gap:16px;align-items:center;margin:16px 0;padding:17px 20px;border:1px solid #ded8f4;border-radius:22px;background:linear-gradient(110deg,#fbf8ff,#f3fbff);box-shadow:0 8px 22px rgba(55,65,105,.06)}.role-wall-adventure-icon{font-size:2.5rem;text-align:center}.role-wall-adventure>div{display:grid;gap:5px}.role-wall-adventure small{font-size:.66rem;font-weight:950;letter-spacing:.12em;color:#756a96}.role-wall-adventure strong{font-size:1.05rem}.role-wall-adventure p{margin:0;color:#68748a;font-size:.8rem}.role-wall-adventure b{font-size:.77rem;color:#5d567b}.role-wall-adventure.is-complete{border-color:#a6dbbe;background:linear-gradient(110deg,#f2fff7,#fbfffd)}
@media(max-width:980px){.adventure-teacher-grid{grid-template-columns:1fr}.adventure-rule-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.student-adventure-tasks{grid-template-columns:1fr}.adventure-settings-panel{order:-1}}
@media(max-width:620px){.adventure-task-list article,.adventure-class-challenge{grid-template-columns:42px minmax(0,1fr)}.adventure-task-list label,.adventure-class-challenge>label{grid-column:2}.adventure-source-checks,.adventure-setting-grid,.adventure-rule-grid{grid-template-columns:1fr}.role-wall-adventure{grid-template-columns:48px minmax(0,1fr);padding:14px}.role-wall-adventure-icon{font-size:2rem}}

/* ===== v1.20 升級動畫＋解鎖通知中心 ===== */
.student-role-top-actions{position:relative}.student-notification-anchor{position:relative;display:inline-flex;align-items:center}.student-notification-bell{position:relative;width:38px;height:38px;display:grid;place-items:center;border:1px solid #dfe5ee;border-radius:50%;background:#fff;color:#26324a;font:inherit;font-size:1.08rem;cursor:pointer;box-shadow:0 4px 12px rgba(39,51,83,.07)}.student-notification-bell:hover{background:#f8f6ff;border-color:#cfc8f3}.student-notification-bell>b{position:absolute;right:-5px;top:-6px;min-width:19px;height:19px;padding:0 5px;display:grid;place-items:center;border-radius:999px;background:#d92d20;color:#fff;border:2px solid #fff;font-size:.61rem;line-height:1;font-weight:950}.student-notification-drawer{position:absolute;right:0;top:calc(100% + 10px);z-index:120;width:min(390px,calc(100vw - 28px));max-height:min(610px,72vh);overflow:hidden;border:1px solid #dfe4ed;border-radius:20px;background:#fff;box-shadow:0 22px 60px rgba(26,35,62,.2);text-align:left}.student-notification-drawer[hidden]{display:none}.student-notification-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 15px;border-bottom:1px solid #edf0f5;background:linear-gradient(135deg,#fbf9ff,#f6fbff)}.student-notification-head>div{display:grid;gap:2px}.student-notification-head strong{font-size:.93rem}.student-notification-head small{font-size:.68rem;color:#718096;font-weight:700}.student-notification-head form{margin:0}.student-notification-head button{border:0;background:transparent;color:#6554c5;font:inherit;font-size:.7rem;font-weight:900;cursor:pointer;padding:6px}.student-notification-list{max-height:470px;overflow:auto}.student-notification-item{position:relative;display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:9px;padding:12px 14px;border-bottom:1px solid #eef1f5;background:#fff}.student-notification-item:last-child{border-bottom:0}.student-notification-item.is-unread{background:#fbfaff}.student-notification-item>span{width:38px;height:38px;display:grid;place-items:center;border-radius:12px;background:#f2f4f8;font-size:1.15rem}.student-notification-item.type-level_up>span{background:#f0ecff}.student-notification-item.type-achievement>span{background:#fff8df}.student-notification-item.type-glory_star>span{background:#fff5cc}.student-notification-item.type-adventure_complete>span{background:#ebfbf2}.student-notification-item.type-class_challenge>span{background:#eef8ff}.student-notification-item>div{display:grid;gap:2px;min-width:0}.student-notification-item small{font-size:.62rem;color:#8993a5}.student-notification-item strong{font-size:.79rem;color:#27334a}.student-notification-item p{margin:0;color:#667287;font-size:.68rem;line-height:1.45}.student-notification-empty{padding:30px 22px;text-align:center;color:#758196;font-size:.78rem}.student-notification-foot{margin:0;padding:9px 14px;border-top:1px solid #eef1f5;background:#fafbfc;color:#8992a3;font-size:.62rem;line-height:1.45}
.has-levelup-modal{overflow:hidden}.student-levelup-overlay{position:fixed;inset:0;z-index:500;display:grid;place-items:center;padding:22px;background:rgba(14,20,38,.72);backdrop-filter:blur(8px);animation:levelupOverlayIn .28s ease both}.student-levelup-overlay.is-hidden{display:none}.student-levelup-card{position:relative;z-index:2;width:min(620px,100%);max-height:min(840px,92vh);overflow:auto;padding:34px 34px 28px;border:1px solid rgba(255,255,255,.75);border-radius:30px;background:linear-gradient(145deg,#fff,#f6f3ff 55%,#edf8ff);box-shadow:0 30px 90px rgba(0,0,0,.34);text-align:center;animation:levelupCardIn .55s cubic-bezier(.18,.89,.32,1.28) both}.theme-bronze .student-levelup-card{background:linear-gradient(145deg,#fffaf3,#fff,#f5ede2)}.theme-mythic .student-levelup-card{background:radial-gradient(circle at 50% 0,#ede5ff 0,transparent 37%),linear-gradient(145deg,#fff,#f5f0ff 52%,#edf8ff)}.theme-gold .student-levelup-card{background:radial-gradient(circle at 50% 0,#fff1b6 0,transparent 42%),linear-gradient(145deg,#fffdf3,#fff,#f8f0dd)}.theme-legend .student-levelup-card,.theme-glory .student-levelup-card{background:radial-gradient(circle at 50% -8%,#fff0aa 0,transparent 38%),radial-gradient(circle at 0 100%,#e6ddff 0,transparent 33%),linear-gradient(145deg,#fff,#fff9e8 48%,#f0edff)}.student-levelup-later{position:absolute;right:16px;top:14px;width:36px;height:36px;border:0;border-radius:50%;background:rgba(255,255,255,.7);color:#657086;font-size:1.45rem;cursor:pointer}.student-levelup-kicker{font-size:.7rem;letter-spacing:.22em;font-weight:950;color:#7162c9}.theme-gold .student-levelup-kicker,.theme-legend .student-levelup-kicker,.theme-glory .student-levelup-kicker{color:#99720c}.student-levelup-emblem{width:94px;height:94px;margin:14px auto 8px;display:grid;place-items:center;border-radius:30px;background:rgba(255,255,255,.8);box-shadow:0 12px 30px rgba(76,62,142,.14);font-size:3.25rem;animation:levelupEmblem 1.35s ease-in-out infinite alternate}.student-levelup-card h1{margin:7px 0 7px;font-size:clamp(2rem,7vw,3.15rem);line-height:1.05;color:#252a3a}.student-levelup-message{margin:0 auto 17px;max-width:500px;color:#667187;line-height:1.65}.student-levelup-rewards{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin:13px 0 16px}.student-levelup-rewards span{display:inline-flex;align-items:center;gap:5px;padding:8px 11px;border:1px solid #ddd8ef;border-radius:999px;background:rgba(255,255,255,.75);font-size:.73rem;color:#5f687a}.student-levelup-rewards b{color:#3f3a64}.student-levelup-unlocks{padding:14px;border:1px solid #ded9ec;border-radius:20px;background:rgba(255,255,255,.7)}.student-levelup-unlocks>strong{display:block;margin-bottom:10px;font-size:.82rem;color:#4d486c}.student-levelup-unlocks>div{display:flex;justify-content:center;gap:8px;flex-wrap:wrap}.student-levelup-unlocks article{width:78px;display:grid;justify-items:center;gap:3px;padding:6px;border-radius:14px;background:#fff;border:1px solid #e6e4ed}.student-levelup-avatar{width:62px;height:62px;object-fit:contain}.student-levelup-unlocks article>span{max-width:68px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.62rem;color:#586476}.student-levelup-more{align-content:center;min-height:82px}.student-levelup-more b{font-size:1.25rem;color:#6755c8}.student-levelup-legend-note{margin:14px 0 0;padding:11px 13px;border-radius:14px;background:rgba(255,250,224,.78);border:1px solid #ead99b;color:#6c5a26;font-size:.74rem;line-height:1.55}.student-levelup-actions{display:flex;justify-content:center;gap:9px;flex-wrap:wrap;margin-top:20px}.student-levelup-confetti{position:absolute;inset:0;overflow:hidden;pointer-events:none}.student-levelup-confetti i{--x:50vw;--d:0s;--r:180deg;--s:1;position:absolute;left:var(--x);top:-28px;width:10px;height:18px;border-radius:3px;background:#f0c84c;transform:scale(var(--s));animation:levelupConfetti 3.6s var(--d) linear infinite}.student-levelup-confetti i:nth-child(3n+1){background:#8d79e8}.student-levelup-confetti i:nth-child(3n+2){background:#5ec4d9}.student-levelup-confetti i:nth-child(4n){width:14px;height:9px;border-radius:50%}
@keyframes levelupOverlayIn{from{opacity:0}to{opacity:1}}@keyframes levelupCardIn{from{opacity:0;transform:translateY(28px) scale(.88)}to{opacity:1;transform:none}}@keyframes levelupEmblem{from{transform:translateY(0) rotate(-2deg)}to{transform:translateY(-6px) rotate(2deg)}}@keyframes levelupConfetti{0%{transform:translateY(-20px) rotate(0) scale(var(--s));opacity:0}8%{opacity:1}100%{transform:translateY(110vh) rotate(var(--r)) scale(var(--s));opacity:.8}}
@media(max-width:720px){.student-notification-drawer{position:fixed;right:14px;top:66px;max-height:72vh}.student-levelup-card{padding:30px 17px 22px;border-radius:24px}.student-levelup-emblem{width:78px;height:78px;border-radius:24px;font-size:2.7rem}.student-levelup-unlocks article{width:70px}.student-levelup-avatar{width:55px;height:55px}}
@media(prefers-reduced-motion:reduce){.student-levelup-overlay,.student-levelup-card,.student-levelup-emblem,.student-levelup-confetti i{animation:none!important}}
.student-notification-read-one{align-self:center;margin:0}.student-notification-read-one button{width:28px;height:28px;display:grid;place-items:center;border:1px solid #d8d2f2;border-radius:50%;background:#fff;color:#6554c5;font:inherit;font-size:.7rem;font-weight:950;cursor:pointer}.student-notification-read-one button:hover{background:#f1edff}.student-notification-read-check{align-self:center;color:#b7c0cd;font-size:.72rem;font-style:normal}

/* v1.21 角色框＋背景＋光效 */
.student-role-current-look{display:block;margin-top:5px;color:#6b7280;font-size:.72rem;font-weight:800;line-height:1.45}
.student-cosmetic-stage{position:relative;display:grid;place-items:center;isolation:isolate;border-radius:34px;transition:background .2s ease,box-shadow .2s ease,filter .2s ease;overflow:hidden}
.student-cosmetic-stage-hero{width:174px;height:174px;margin:0 auto 6px;padding:14px}
.student-cosmetic-stage-preview{width:220px;height:220px;padding:28px;margin:8px auto 12px;border:1px solid rgba(148,163,184,.2);box-shadow:inset 0 0 0 1px rgba(255,255,255,.34)}
.role-wall-cosmetic-stage{width:154px;height:154px;padding:11px;margin:0 auto 8px;border-radius:31px}
.role-wall-cosmetic-stage .role-wall-avatar{margin-bottom:0}.role-wall-display .role-wall-cosmetic-stage{width:104px;height:104px;padding:7px;border-radius:25px}
.student-cosmetic-stage>*{position:relative;z-index:2}
.student-cosmetic-stage::before,.student-cosmetic-stage::after{position:absolute;pointer-events:none;z-index:1}
.student-cosmetic-stage::before{content:"";inset:0;border-radius:inherit;opacity:.9}
.student-cosmetic-stage::after{z-index:3}
.cosmetic-bg-plain{background:linear-gradient(145deg,#fff,#f4f7fb)}
.cosmetic-bg-forest{background:radial-gradient(circle at 18% 18%,rgba(187,247,208,.95) 0 11%,transparent 12%),radial-gradient(circle at 80% 27%,rgba(134,239,172,.72) 0 13%,transparent 14%),linear-gradient(145deg,#ecfdf5,#bbf7d0 54%,#86efac)}
.cosmetic-bg-forest::before{background:radial-gradient(circle at 22% 78%,rgba(21,128,61,.16) 0 18%,transparent 19%),radial-gradient(circle at 88% 82%,rgba(22,101,52,.13) 0 23%,transparent 24%)}
.cosmetic-bg-starry{background:radial-gradient(circle at 24% 22%,#fff 0 1.5px,transparent 2px),radial-gradient(circle at 72% 30%,#fef3c7 0 1.5px,transparent 2px),radial-gradient(circle at 45% 78%,#dbeafe 0 1.5px,transparent 2px),linear-gradient(145deg,#172554,#312e81 55%,#581c87)}
.cosmetic-bg-starry::before{background:radial-gradient(circle at 76% 72%,rgba(96,165,250,.35),transparent 26%),radial-gradient(circle at 28% 64%,rgba(192,132,252,.24),transparent 30%)}
.cosmetic-bg-skycity{background:radial-gradient(circle at 50% 84%,rgba(255,255,255,.88) 0 12%,transparent 13%),radial-gradient(circle at 25% 74%,rgba(255,255,255,.72) 0 14%,transparent 15%),radial-gradient(circle at 78% 70%,rgba(255,255,255,.72) 0 15%,transparent 16%),linear-gradient(180deg,#bae6fd,#e0f2fe 55%,#f8fafc)}
.cosmetic-bg-skycity::before{background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.45) 25% 31%,transparent 31% 48%,rgba(255,255,255,.45) 48% 55%,transparent 55%)}
.cosmetic-bg-flame{background:radial-gradient(circle at 50% 78%,rgba(254,215,170,.94),transparent 22%),radial-gradient(circle at 22% 35%,rgba(251,146,60,.45),transparent 28%),radial-gradient(circle at 82% 25%,rgba(239,68,68,.32),transparent 28%),linear-gradient(145deg,#fff7ed,#fed7aa 48%,#fdba74)}
.cosmetic-bg-flame::before{background:conic-gradient(from 180deg at 50% 92%,transparent 0 12%,rgba(249,115,22,.18) 13% 21%,transparent 22% 39%,rgba(239,68,68,.18) 40% 50%,transparent 51%)}
.cosmetic-bg-ice{background:radial-gradient(circle at 72% 20%,rgba(255,255,255,.9),transparent 16%),linear-gradient(145deg,#f0f9ff,#dbeafe 50%,#bfdbfe)}
.cosmetic-bg-ice::before{background:linear-gradient(125deg,transparent 0 18%,rgba(255,255,255,.5) 19% 23%,transparent 24% 48%,rgba(147,197,253,.28) 49% 55%,transparent 56%)}
.cosmetic-bg-glory{background:radial-gradient(circle at 50% 45%,rgba(255,255,255,.9),transparent 25%),conic-gradient(from 15deg,#fde68a,#fbcfe8,#ddd6fe,#bfdbfe,#bbf7d0,#fef3c7,#fde68a)}
.cosmetic-bg-glory::before{inset:7px;background:radial-gradient(circle,rgba(255,255,255,.44),transparent 64%);border:1px solid rgba(255,255,255,.75)}
.cosmetic-effect-none::after{content:""}
.cosmetic-effect-sparkle{box-shadow:0 0 20px rgba(250,204,21,.22)}
.cosmetic-effect-sparkle::after{content:"✦   ✧   ✦";inset:10px 8px auto;color:#fde047;font-size:1rem;letter-spacing:.35em;text-shadow:0 0 9px #fff,0 0 13px rgba(250,204,21,.9);animation:cosmeticTwinkle 2.2s ease-in-out infinite}
.cosmetic-effect-fire{box-shadow:0 0 24px rgba(249,115,22,.33),inset 0 0 20px rgba(251,146,60,.12)}
.cosmetic-effect-fire::after{content:"✦";right:10px;bottom:8px;color:#fb923c;font-size:1.35rem;text-shadow:-55px -12px 0 rgba(239,68,68,.8),-18px -92px 0 rgba(251,191,36,.75),0 0 13px #f97316;animation:cosmeticPulse 1.8s ease-in-out infinite}
.cosmetic-effect-ice{box-shadow:0 0 26px rgba(56,189,248,.28),inset 0 0 18px rgba(186,230,253,.2)}
.cosmetic-effect-ice::after{content:"❄";left:10px;top:8px;color:#e0f2fe;font-size:1.2rem;text-shadow:80px 28px 0 #bae6fd,30px 108px 0 #dbeafe,0 0 10px #38bdf8;animation:cosmeticFloat 2.8s ease-in-out infinite}
.cosmetic-effect-moon{box-shadow:0 0 28px rgba(139,92,246,.3),inset 0 0 18px rgba(196,181,253,.15)}
.cosmetic-effect-moon::after{content:"☾";right:9px;top:5px;color:#ede9fe;font-size:1.5rem;text-shadow:-82px 88px 0 rgba(221,214,254,.8),0 0 11px #8b5cf6;animation:cosmeticFloat 3s ease-in-out infinite}
.cosmetic-effect-lightning{box-shadow:0 0 30px rgba(59,130,246,.3),0 0 18px rgba(250,204,21,.2)}
.cosmetic-effect-lightning::after{content:"ϟ";left:9px;top:8px;color:#fef08a;font-size:1.6rem;font-weight:900;text-shadow:92px 85px 0 #93c5fd,0 0 12px #60a5fa;animation:cosmeticFlash 1.9s linear infinite}
.cosmetic-effect-rainbow{box-shadow:0 0 32px rgba(168,85,247,.3)}
.cosmetic-effect-rainbow::after{content:"";inset:4px;border-radius:inherit;border:3px solid transparent;background:conic-gradient(#f87171,#fbbf24,#4ade80,#38bdf8,#818cf8,#c084fc,#f87171) border-box;mask:linear-gradient(#000 0 0) padding-box,linear-gradient(#000 0 0);mask-composite:exclude;animation:cosmeticRainbow 4.8s linear infinite;opacity:.8}
@keyframes cosmeticTwinkle{0%,100%{opacity:.55;transform:scale(.95)}50%{opacity:1;transform:scale(1.06)}}
@keyframes cosmeticPulse{0%,100%{opacity:.55;transform:translateY(2px) scale(.92)}50%{opacity:1;transform:translateY(-3px) scale(1.08)}}
@keyframes cosmeticFloat{0%,100%{transform:translateY(0);opacity:.65}50%{transform:translateY(5px);opacity:1}}
@keyframes cosmeticFlash{0%,42%,54%,100%{opacity:.45}46%,50%{opacity:1}}
@keyframes cosmeticRainbow{to{transform:rotate(360deg)}}
.student-appearance-panel{overflow:hidden}.student-appearance-layout{display:grid;grid-template-columns:260px minmax(0,1fr);gap:22px;align-items:start}.student-appearance-preview{position:sticky;top:86px;padding:16px;border-radius:20px;background:#f8fafc;border:1px solid #e5eaf2;text-align:center}.student-appearance-preview>small{display:block;color:#64748b;font-weight:850}.student-appearance-preview>strong{display:block;font-size:1.05rem}.student-appearance-preview>span{display:block;margin-top:5px;color:#64748b;font-size:.75rem;line-height:1.45}.student-appearance-choices{display:grid;gap:14px}.student-cosmetic-group{min-width:0;margin:0;padding:14px;border:1px solid #e5eaf2;border-radius:18px;background:#fbfcff}.student-cosmetic-group legend{padding:0 7px;font-weight:950;color:#34415e}.student-cosmetic-options{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}.student-cosmetic-option{position:relative;display:grid;grid-template-columns:42px minmax(0,1fr);grid-template-rows:auto auto;column-gap:9px;align-items:center;padding:9px;border:2px solid transparent;border-radius:14px;background:#fff;cursor:pointer;min-width:0}.student-cosmetic-option:has(input:checked){border-color:#6d5bd0;box-shadow:0 0 0 3px rgba(109,91,208,.1)}.student-cosmetic-option input{position:absolute;opacity:0;pointer-events:none}.student-cosmetic-option strong{font-size:.76rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.student-cosmetic-option small{grid-column:2;font-size:.64rem;color:#64748b}.student-cosmetic-option.is-locked{filter:grayscale(.75);opacity:.42;cursor:not-allowed}.student-cosmetic-swatch{grid-row:1/3;width:42px;height:42px;display:grid;place-items:center;border-radius:12px;border:1px solid #dfe5ee;background:#f8fafc;font-size:1.35rem}.cosmetic-preview-background.cosmetic-preview-forest{background:linear-gradient(145deg,#dcfce7,#86efac)}.cosmetic-preview-background.cosmetic-preview-starry{background:linear-gradient(145deg,#172554,#581c87)}.cosmetic-preview-background.cosmetic-preview-skycity{background:linear-gradient(180deg,#bae6fd,#fff)}.cosmetic-preview-background.cosmetic-preview-flame{background:linear-gradient(145deg,#ffedd5,#fb923c)}.cosmetic-preview-background.cosmetic-preview-ice{background:linear-gradient(145deg,#f0f9ff,#93c5fd)}.cosmetic-preview-background.cosmetic-preview-glory{background:conic-gradient(#fde68a,#fbcfe8,#ddd6fe,#bfdbfe,#bbf7d0,#fde68a)}.cosmetic-preview-frame.cosmetic-preview-bronze{border:3px solid #b77936}.cosmetic-preview-frame.cosmetic-preview-silver{border:3px solid #aeb8c6}.cosmetic-preview-frame.cosmetic-preview-gold{border:3px solid #e5ae24}.cosmetic-preview-frame.cosmetic-preview-legend{border:3px solid #7558d8;box-shadow:0 0 9px rgba(117,88,216,.25)}.cosmetic-preview-effect.cosmetic-preview-sparkle{box-shadow:0 0 12px #fde047}.cosmetic-preview-effect.cosmetic-preview-fire{box-shadow:0 0 12px #f97316}.cosmetic-preview-effect.cosmetic-preview-ice{box-shadow:0 0 12px #38bdf8}.cosmetic-preview-effect.cosmetic-preview-moon{box-shadow:0 0 12px #8b5cf6}.cosmetic-preview-effect.cosmetic-preview-lightning{box-shadow:0 0 12px #60a5fa}.cosmetic-preview-effect.cosmetic-preview-rainbow{box-shadow:0 0 0 3px #c084fc,0 0 12px #38bdf8}.student-appearance-savebar{margin-top:16px}.student-levelup-cosmetics{margin-top:14px;padding:12px 14px;border-radius:16px;background:rgba(255,255,255,.72);border:1px solid rgba(255,255,255,.65)}.student-levelup-cosmetics>strong{display:block;margin-bottom:7px}.student-levelup-cosmetics>div{display:flex;justify-content:center;gap:7px;flex-wrap:wrap}.student-levelup-cosmetics span{padding:6px 9px;border-radius:999px;background:#fff;border:1px solid rgba(100,116,139,.18);font-size:.76rem;font-weight:850}
@media(max-width:960px){.student-appearance-layout{grid-template-columns:1fr}.student-appearance-preview{position:relative;top:auto}.student-cosmetic-options{grid-template-columns:repeat(3,minmax(0,1fr))}.role-wall-cosmetic-stage{width:132px;height:132px}.student-cosmetic-stage-hero{width:160px;height:160px}}
@media(max-width:620px){.student-cosmetic-options{grid-template-columns:repeat(2,minmax(0,1fr))}.student-cosmetic-stage-preview{width:190px;height:190px}.role-wall-cosmetic-stage{width:118px;height:118px;padding:8px}.student-cosmetic-stage-hero{width:144px;height:144px;padding:10px}}
@media(prefers-reduced-motion:reduce){.student-cosmetic-stage::after{animation:none!important}}

/* v1.22 教師成長分析 */
.growth-analysis-hero{overflow:hidden;background:linear-gradient(135deg,#f8fbff 0%,#ffffff 52%,#f4f8ff 100%)}
.growth-analysis-head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px}
.growth-analysis-head h2{margin:4px 0 8px;font-size:clamp(1.35rem,2vw,2rem);color:#102a52}.growth-analysis-head p{margin:0;max-width:760px;color:#5d6f89;line-height:1.8}
.growth-kicker{font-size:.74rem;letter-spacing:.14em;font-weight:800;color:#4f6f9e}
.growth-week-nav{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end}.growth-week-nav>div{min-width:132px;text-align:center;padding:7px 10px;border-radius:12px;background:#eef4fb;border:1px solid #d7e2f0}.growth-week-nav strong,.growth-week-nav small{display:block}.growth-week-nav small{margin-top:2px;color:#6e7e93;font-size:.74rem}.btn.is-disabled{pointer-events:none;opacity:.45}
.growth-kpi-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin:18px 0}.growth-kpi{display:flex;align-items:center;gap:12px;min-height:112px;padding:18px;border:1px solid #dbe5f2;border-radius:18px;background:#fff;box-shadow:0 8px 24px rgba(26,54,93,.05)}.growth-kpi>span{display:grid;place-items:center;width:44px;height:44px;border-radius:14px;background:#eef5ff;font-size:1.45rem;flex:0 0 auto}.growth-kpi div{min-width:0}.growth-kpi strong{display:block;font-size:1.65rem;line-height:1;color:#102a52}.growth-kpi b{display:block;margin-top:7px;color:#263b5a}.growth-kpi small{display:block;margin-top:5px;color:#728197;line-height:1.35}.growth-kpi.is-watch{border-color:#ffd18d;background:#fffaf1}.growth-kpi.is-danger{border-color:#f4b5b5;background:#fff7f7}
.growth-attention-panel .section-title{align-items:flex-start}.growth-attention-table td{vertical-align:middle;min-width:105px}.growth-attention-table td:nth-child(2){min-width:250px}.growth-attention-table td:nth-child(5){min-width:145px}.growth-attention-table small{display:block;margin-top:5px;color:#718096;line-height:1.45}.growth-row-danger{background:#fff8f8}.growth-row-warning{background:#fffaf2}.growth-row-watch{background:#fffdf4}
.growth-flag{display:inline-flex;align-items:center;gap:4px;padding:5px 9px;border-radius:999px;font-size:.79rem;font-weight:800;white-space:nowrap}.flag-danger{background:#ffe3e3;color:#a82727}.flag-warning{background:#ffefce;color:#9a5a00}.flag-watch{background:#fff7c9;color:#745f00}.flag-ok{background:#e7f7ed;color:#18733b}.flag-neutral{background:#eef2f6;color:#64748b}.growth-reason{max-width:380px}.growth-task-status{margin-top:7px!important;font-weight:700;color:#50647e!important}
.growth-spark{height:46px;display:flex;align-items:flex-end;gap:4px;padding:4px 5px;border-radius:9px;background:#f3f6fa}.growth-spark i{display:block;flex:1;min-width:8px;max-width:16px;border-radius:4px 4px 2px 2px;background:linear-gradient(180deg,#6f96d6,#315c9a);min-height:4px}
.growth-analysis-columns{display:grid;grid-template-columns:1fr 1fr;gap:16px}.growth-source-list,.growth-daily-items{display:grid;gap:11px}.growth-source-list article,.growth-daily-items article{display:grid;grid-template-columns:38px minmax(0,1fr) 52px;gap:10px;align-items:center;padding:12px;border-radius:14px;background:#f8fafc;border:1px solid #e2e9f2}.growth-source-list article>span,.growth-daily-items article>span{font-size:1.35rem;text-align:center}.growth-source-list article strong,.growth-daily-items article strong{display:block;color:#203857}.growth-source-list article small,.growth-daily-items article small{display:block;color:#748196;margin-top:5px}.growth-source-list article>b,.growth-daily-items article>b{text-align:right;color:#315b94}.growth-bar{height:7px;margin-top:7px;border-radius:99px;background:#e2e8f0;overflow:hidden}.growth-bar i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#6d93ce,#315d9d)}
.growth-highlight-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.growth-highlight-grid a{position:relative;display:grid;grid-template-columns:34px 1fr;grid-template-rows:auto auto;padding:13px 14px;border:1px solid #dce7d8;border-radius:15px;background:#fbfff9;color:inherit;text-decoration:none}.growth-highlight-grid a>span{grid-row:1/3;font-size:1.4rem}.growth-highlight-grid a strong{font-size:.92rem;color:#244725;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.growth-highlight-grid a small{color:#6f836d;margin-top:4px}.growth-highlight-grid a b{position:absolute;right:10px;top:10px;color:#268044;font-size:.78rem;background:#e7f8eb;padding:3px 6px;border-radius:999px}
.growth-all-details>summary{display:flex;align-items:center;justify-content:space-between;cursor:pointer;list-style:none;padding:3px 0;color:#243b5c}.growth-all-details>summary::-webkit-details-marker{display:none}.growth-all-details>summary span{font-size:.78rem;background:#eef3f9;padding:5px 9px;border-radius:999px;color:#667890}.growth-all-details[open]>summary{margin-bottom:14px}
@media(max-width:1180px){.growth-kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.growth-highlight-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:820px){.growth-analysis-head{display:block}.growth-week-nav{margin-top:16px;justify-content:flex-start}.growth-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.growth-analysis-columns{grid-template-columns:1fr}.growth-highlight-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.growth-attention-table td:nth-child(2){min-width:220px}}
@media(max-width:560px){.growth-kpi-grid{grid-template-columns:1fr}.growth-highlight-grid{grid-template-columns:1fr}.growth-week-nav .btn{padding-left:9px;padding-right:9px}.growth-week-nav>div{order:-1;width:100%}}


/* ===== v1.22.1 工作台角色舞台 ===== */
.lesson-role-stage[hidden]{display:none!important}.lesson-role-stage{margin:-2px 0 18px;border:1px solid #dddaf0;border-radius:22px;background:linear-gradient(135deg,#fbfaff,#f7fbff 58%,#f2fff8);box-shadow:0 10px 28px rgba(52,61,98,.07);overflow:hidden}.lesson-role-stage-toggle{white-space:nowrap}.lesson-role-stage-toggle.is-off{opacity:.72;background:#f8fafc;color:#64748b}.lesson-stage-main{display:grid;grid-template-columns:minmax(310px,.88fr) minmax(420px,1.12fr);gap:0}.lesson-stage-partner,.lesson-stage-mission{min-width:0;padding:15px 18px}.lesson-stage-partner{border-right:1px solid #e5e2f2}.lesson-stage-label{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:9px}.lesson-stage-label>span{font-size:.74rem;font-weight:950;color:#5b5479;letter-spacing:.02em}.lesson-stage-label button{border:1px solid #ddd9ef;border-radius:999px;background:#fff;color:#5f55a5;font:inherit;font-size:.68rem;font-weight:900;padding:5px 9px;cursor:pointer}.lesson-stage-label button:hover{background:#f3f0ff}.lesson-stage-partner-body{display:grid;grid-template-columns:86px minmax(0,1fr);gap:13px;align-items:center;min-height:88px}.lesson-stage-partner-avatar{width:84px;height:84px;padding:6px;border-radius:24px;display:grid;place-items:center;overflow:hidden;contain:layout paint}.lesson-stage-partner-art{position:relative;z-index:2;width:100%;height:100%;min-width:0;min-height:0;display:grid;place-items:center;overflow:hidden;line-height:1;font-size:2.2rem;filter:drop-shadow(0 5px 5px rgba(33,45,73,.13))}.lesson-stage-partner-art>img{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;object-position:center}.lesson-stage-partner-copy{display:grid;gap:2px;min-width:0}.lesson-stage-partner-copy>strong{font-size:1.05rem;color:#1e2f4a;white-space:normal;overflow-wrap:anywhere}.lesson-stage-partner-copy>span{font-size:.72rem;color:#718096}.lesson-stage-partner-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:4px}.lesson-stage-partner-meta b,.lesson-stage-partner-meta em{font-style:normal;padding:4px 7px;border-radius:999px;font-size:.66rem;font-weight:900}.lesson-stage-partner-meta b{background:#efedff;color:#5a4cb0}.lesson-stage-partner-meta em{background:#fff8dd;color:#7a5a0b}.lesson-stage-mission{display:grid;align-items:center}.lesson-stage-challenge{display:grid;gap:6px}.lesson-stage-challenge-head{display:grid;grid-template-columns:36px minmax(0,1fr) auto;gap:9px;align-items:center}.lesson-stage-challenge-head>span{width:34px;height:34px;display:grid;place-items:center;border-radius:11px;background:#eef5ff;font-size:1.15rem}.lesson-stage-challenge-head>div{display:grid;gap:1px;min-width:0}.lesson-stage-challenge-head small{font-size:.61rem;color:#778399;font-weight:900}.lesson-stage-challenge-head strong{font-size:.82rem;color:#29364e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson-stage-challenge-head>b{font-size:.72rem;color:#5a50a6;white-space:nowrap}.lesson-stage-progress{height:8px;border-radius:999px;background:#e9edf4;overflow:hidden}.lesson-stage-progress>span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#7b6bd5,#4fa8df,#48bd91);transition:width .35s ease}.lesson-stage-challenge p{margin:0;color:#728096;font-size:.67rem}.lesson-stage-challenge.is-complete .lesson-stage-challenge-head>span{background:#e7f9ee}.lesson-stage-challenge.is-complete .lesson-stage-challenge-head>b{color:#15803d}.lesson-stage-challenge.is-idle{opacity:.68}.lesson-stage-audience{display:grid;grid-template-columns:minmax(230px,.65fr) minmax(0,1.35fr);align-items:center;gap:14px;padding:10px 18px;border-top:1px solid #e7e4f1;background:rgba(255,255,255,.65)}.lesson-stage-audience>div:first-child{display:grid;gap:1px}.lesson-stage-audience strong{font-size:.75rem;color:#35415b}.lesson-stage-audience small{font-size:.61rem;color:#8893a5;line-height:1.35}.lesson-stage-audience-list{display:flex;justify-content:flex-end;align-items:center;gap:8px;min-width:0;min-height:58px;overflow:hidden;padding:5px 6px 7px}.lesson-stage-audience-avatar{position:relative;width:48px;height:48px;padding:3px;flex:0 0 48px;border-radius:15px;display:grid;place-items:center;overflow:visible;contain:layout}.lesson-stage-audience-art{position:relative;z-index:2;width:100%;height:100%;min-width:0;min-height:0;display:grid;place-items:center;overflow:hidden;border-radius:inherit;line-height:1;font-size:1.5rem}.lesson-stage-audience-art>img{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;object-position:center}.lesson-stage-audience-avatar>b{position:absolute;z-index:5;right:-4px;bottom:-4px;min-width:18px;height:18px;padding:0 4px;display:grid;place-items:center;border-radius:999px;background:#fff;border:1px solid #d9dfeb;color:#38465f;font-size:.56rem;box-shadow:0 2px 6px rgba(23,32,54,.12)}
.lesson-role-award-toast{position:fixed;z-index:460;right:22px;bottom:22px;width:min(370px,calc(100vw - 28px));display:grid;grid-template-columns:82px minmax(0,1fr);gap:13px;align-items:center;padding:13px 15px;border:1px solid rgba(208,211,232,.92);border-radius:22px;background:rgba(255,255,255,.96);box-shadow:0 22px 58px rgba(26,36,64,.22);backdrop-filter:blur(12px);opacity:0;transform:translateY(16px) scale(.96);pointer-events:none;transition:opacity .22s ease,transform .24s ease}.lesson-role-award-toast.is-visible{opacity:1;transform:translateY(0) scale(1)}.lesson-role-award-avatar{width:78px;height:78px;padding:6px;border-radius:22px;display:grid;place-items:center;overflow:hidden;contain:layout paint}.lesson-role-award-art{position:relative;z-index:2;width:100%;height:100%;min-width:0;min-height:0;display:grid;place-items:center;overflow:hidden;line-height:1;font-size:2rem;filter:drop-shadow(0 5px 6px rgba(38,49,80,.15))}.lesson-role-award-art>img{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;object-position:center}.lesson-role-award-toast>div:last-child{display:grid;gap:2px;min-width:0}.lesson-role-award-toast small{font-size:.62rem;color:#7568a4;font-weight:900}.lesson-role-award-toast strong{font-size:1rem;color:#1f2d46;white-space:normal;overflow-wrap:anywhere}.lesson-role-award-toast span{font-size:.72rem;color:#64748b;font-weight:800}
@media(max-width:900px){.lesson-stage-main{grid-template-columns:1fr}.lesson-stage-partner{border-right:0;border-bottom:1px solid #e5e2f2}.lesson-stage-audience{grid-template-columns:1fr}.lesson-stage-audience-list{justify-content:flex-start;overflow:hidden}.lesson-role-stage-toggle{width:auto!important}.lesson-hero-actions{flex-wrap:wrap}}
@media(max-width:620px){.lesson-role-stage{border-radius:17px}.lesson-stage-partner,.lesson-stage-mission{padding:13px}.lesson-stage-partner-body{grid-template-columns:72px minmax(0,1fr)}.lesson-stage-partner-avatar{width:70px;height:70px;border-radius:19px}.lesson-stage-audience{padding:10px 13px}.lesson-stage-audience small{display:none}.lesson-stage-audience-list{min-height:52px}.lesson-stage-audience-avatar{width:42px;height:42px;flex-basis:42px}.lesson-role-award-toast{right:14px;bottom:14px;grid-template-columns:68px minmax(0,1fr);padding:11px}.lesson-role-award-avatar{width:64px;height:64px;border-radius:18px}}
@media(prefers-reduced-motion:reduce){.lesson-role-award-toast,.lesson-stage-progress>span{transition:none!important}}


/* ===== v1.22.5 座位表雙視角 ===== */
.seat-view-bar{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;margin:-2px 0 18px;padding:9px 12px;border:1px solid #dbe4ef;border-radius:12px;background:#f8fafc}
.seat-view-label{font-size:12px;font-weight:900;color:#475569}.seat-view-toggle{display:inline-flex;gap:4px;padding:3px;border-radius:10px;background:#e9eef6}
.seat-view-toggle button{border:0;border-radius:8px;padding:7px 11px;background:transparent;color:#475569;font-weight:850;cursor:pointer}.seat-view-toggle button:hover{background:#fff}.seat-view-toggle button.is-active{background:#2563eb;color:#fff;box-shadow:0 3px 9px rgba(37,99,235,.22)}
.seat-view-hint{font-size:12px;color:#64748b}.seat-layout-content{min-width:0}.seat-front-zone{display:flex;flex-direction:column;align-items:center;width:100%}.seat-front-zone .classroom-board{width:min(760px,100%);margin:10px auto 8px}.seat-front-zone .teacher-desk{margin:0 auto 24px}.seat-front-zone.is-bottom{flex-direction:column-reverse}.seat-front-zone.is-bottom .teacher-desk{margin:24px auto 0}.seat-front-zone.is-bottom .classroom-board{margin:8px auto 0}
.seat-stage.is-reversed-view .seat-group-row.seat-group-align-left{margin-left:auto;margin-right:0}.seat-stage.is-reversed-view .seat-group-row.seat-group-align-right{margin-left:0;margin-right:auto}
.seat-stage:fullscreen .seat-view-bar{position:sticky;top:0;z-index:30;width:min(900px,96%);margin:0 auto 18px;background:rgba(248,250,252,.96);box-shadow:0 7px 20px rgba(15,23,42,.08);backdrop-filter:blur(8px)}
@media(max-width:700px){.seat-view-bar{align-items:stretch;flex-direction:column}.seat-view-toggle{display:grid;grid-template-columns:1fr 1fr}.seat-view-hint{text-align:center}}

.print-front-zone{display:flex;flex-direction:column;align-items:center;width:100%}.print-front-zone .print-board{width:min(760px,100%);margin:10px auto 7px}.print-front-zone .print-desk{margin:0 auto 18px}.print-front-zone.is-bottom{flex-direction:column-reverse}.print-front-zone.is-bottom .print-desk{margin:18px auto 0}.print-front-zone.is-bottom .print-board{margin:7px auto 0}.print-layout-content{min-width:0}
.seat-print-page.seat-view-reversed .print-group-align-left{margin-left:auto;margin-right:0}.seat-print-page.seat-view-reversed .print-group-align-right{margin-left:0;margin-right:auto}
@media print{.seat-front-zone,.print-front-zone{break-inside:avoid}.print-front-zone .print-board{margin:3mm auto 2mm}.print-front-zone .print-desk{margin:0 auto 4mm}.print-front-zone.is-bottom .print-desk{margin:4mm auto 0}.print-front-zone.is-bottom .print-board{margin:2mm auto 0}}

/* ===== v1.23 學期冒險回顧＋連續週數 ===== */
.student-term-review-teaser{display:flex;align-items:center;justify-content:space-between;gap:18px;background:linear-gradient(135deg,#fffdf4,#f7f4ff 55%,#eef8ff);border-color:#e6ddba}.student-term-review-teaser>div{display:flex;align-items:center;gap:13px}.student-term-review-teaser>div>span{font-size:2rem}.student-term-review-teaser strong{display:block;font-size:1.03rem}.student-term-review-teaser small{display:block;color:var(--muted);margin-top:2px}
.term-review-student-body{background:radial-gradient(circle at 50% -10%,#eef4ff 0,#f6f8fc 38%,#f2f5f9 100%)}.term-review-student-shell{width:min(1120px,calc(100% - 28px));margin:28px auto 60px;display:grid;gap:18px}.term-review-hero-card{position:relative;display:grid;grid-template-columns:210px minmax(0,1fr);gap:26px;align-items:center;min-height:260px;padding:28px 34px;border:1px solid #dfe6f0;border-radius:26px;background:#fff;overflow:hidden;box-shadow:0 20px 55px rgba(28,42,70,.10)}.term-review-hero-card:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.82),rgba(255,255,255,.35));pointer-events:none}.term-review-avatar-wrap,.term-review-hero-copy{position:relative;z-index:2}.term-review-avatar-wrap{display:grid;place-items:center;width:190px;height:190px;margin:auto;border-radius:34px;background:rgba(255,255,255,.55);overflow:hidden}.term-review-avatar-wrap .student-role-avatar{width:170px;height:170px}.term-review-avatar-wrap img{width:100%;height:100%;object-fit:contain}.term-review-kicker{display:block;font-size:.73rem;font-weight:950;letter-spacing:.14em;color:#6557a8}.term-review-hero-copy h1{margin:5px 0 2px;font-size:2rem}.term-review-hero-copy h2{margin:0;font-size:1.25rem}.term-review-hero-copy p{margin:5px 0 12px;color:#617089}.term-review-streak-chip{display:inline-flex;align-items:center;gap:5px;padding:6px 10px;border-radius:999px;background:#edf2f8;color:#42516a;font-size:.78rem;font-weight:900}.term-review-streak-chip.seed{background:#eaf8ef;color:#267145}.term-review-streak-chip.fire{background:#fff0df;color:#9a4c0e}.term-review-streak-chip.diamond{background:#eaf6ff;color:#17628c}.term-review-streak-chip.crown,.term-review-streak-chip.perfect{background:#fff5cf;color:#7a5700}
.term-review-kpis,.term-review-teacher-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}.term-review-kpis article,.term-review-teacher-kpis article{display:grid;grid-template-columns:auto 1fr;column-gap:9px;align-items:center;padding:15px;border:1px solid #e1e7f0;border-radius:17px;background:#fff;box-shadow:0 8px 24px rgba(28,42,70,.05)}.term-review-kpis article>span,.term-review-teacher-kpis article>span{grid-row:1/4;font-size:1.5rem}.term-review-kpis strong,.term-review-teacher-kpis strong{font-size:1.12rem}.term-review-kpis b,.term-review-teacher-kpis b{font-size:.72rem;color:#536177}.term-review-kpis small,.term-review-teacher-kpis small{font-size:.65rem;color:#8a95a7}.term-review-columns{display:grid;grid-template-columns:1fr 1fr;gap:18px}.term-review-card{padding:20px;border:1px solid #e0e6ef;border-radius:18px;background:#fff;box-shadow:0 8px 24px rgba(28,42,70,.05)}.term-review-card h2{margin:0}.term-review-streak-big{display:flex;align-items:center;gap:12px;margin:14px 0}.term-review-streak-big>span{font-size:2.5rem}.term-review-streak-big strong{font-size:2rem}.term-review-streak-big b{color:#6b7280}.term-review-streak-stats{display:flex;gap:8px;flex-wrap:wrap}.term-review-streak-stats span{padding:6px 9px;border-radius:10px;background:#f4f6fa;font-size:.76rem}.term-review-streak-stats .is-perfect{background:#fff5cf;color:#795800;font-weight:900}.term-review-highlight-list{display:grid;gap:9px;margin-top:12px}.term-review-highlight-list article{display:grid;grid-template-columns:40px minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;background:#f7f9fc}.term-review-highlight-list article>span{font-size:1.45rem}.term-review-highlight-list small{display:block;color:#8993a4}.term-review-highlight-list strong{display:block}.term-review-highlight-list b{font-size:.85rem}.term-review-week-chart{height:190px;display:flex;align-items:flex-end;gap:8px;padding:20px 6px 0;overflow-x:auto}.term-review-week-chart>div{height:100%;min-width:38px;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px}.term-review-week-chart i{display:block;width:24px;min-height:5px;border-radius:7px 7px 3px 3px;background:linear-gradient(180deg,#6e63d8,#6bb0df)}.term-review-week-chart b{font-size:.65rem}.term-review-week-chart small{font-size:.58rem;color:#8791a3}.term-review-footer-note{text-align:center;background:#fbfcfe}.term-review-footer-note p{margin-bottom:0;color:#7b879a}.term-review-print-btn{border:0;border-radius:8px;padding:7px 10px;background:#eef2f8;color:#32425d;font-weight:800;cursor:pointer}
.term-review-teacher-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;background:linear-gradient(135deg,#fcfbff,#f3f8ff)}.term-review-teacher-hero h2{font-size:1.55rem;margin:5px 0}.term-review-teacher-hero p{margin:0;color:#69788d}.term-review-teacher-kpis{grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:20px}.term-review-growth-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.term-review-growth-list article{display:grid;grid-template-columns:48px minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px;border:1px solid #e5e9f0;border-radius:13px;background:#fafcff}.term-review-mini-avatar{width:44px;height:44px;border-radius:12px;background:#f1f5fb;overflow:hidden}.term-review-mini-avatar img{width:100%;height:100%;object-fit:contain}.term-review-growth-list small,.term-review-class-table small{display:block;color:#8792a4}.term-review-growth-list>b{color:#16804a}.term-review-class-table{min-width:980px}.term-review-class-table td{vertical-align:middle}
.term-review-print-body{background:#eef1f5;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans TC",Arial,sans-serif;color:#1f2937}.term-review-print-toolbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:center;gap:12px;padding:10px;background:#17243b;color:#fff}.term-review-print-toolbar button{border:0;border-radius:8px;padding:8px 13px;font-weight:900;cursor:pointer}.term-review-print-grid{width:min(1100px,calc(100% - 24px));margin:18px auto;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.term-review-print-grid.is-single{grid-template-columns:minmax(0,175mm);justify-content:center}.term-review-print-card{min-height:475px;padding:18px;border-radius:18px;background:#fff;border:1px solid #dfe5ed;box-shadow:0 8px 24px rgba(20,30,50,.06);display:flex;flex-direction:column;page-break-inside:avoid}.term-review-print-card header{display:grid;grid-template-columns:105px minmax(0,1fr);gap:15px;align-items:center;padding-bottom:12px;border-bottom:1px solid #e6eaf0}.term-review-print-avatar{width:98px;height:98px;border-radius:22px;display:grid;place-items:center;overflow:hidden}.term-review-print-avatar .student-role-avatar{width:90px;height:90px}.term-review-print-avatar img{width:100%;height:100%;object-fit:contain}.term-review-print-card header span{font-size:.68rem;color:#6e62a9;font-weight:900}.term-review-print-card h1{font-size:1.2rem;margin:3px 0}.term-review-print-card header p{margin:0;color:#6f7c8f;font-size:.75rem}.term-review-print-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:14px 0}.term-review-print-stats div{padding:9px;border-radius:10px;background:#f6f8fb;text-align:center}.term-review-print-stats b{display:block;font-size:.92rem}.term-review-print-stats span{display:block;font-size:.62rem;color:#7a8799}.term-review-print-bottom{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:auto}.term-review-print-bottom>div{padding:11px;border:1px solid #e5e9ef;border-radius:11px}.term-review-print-bottom strong,.term-review-print-bottom span{display:block}.term-review-print-bottom strong{font-size:.78rem}.term-review-print-bottom span{font-size:.67rem;color:#768397;margin-top:3px}.term-review-print-card footer{margin-top:12px;padding-top:8px;border-top:1px dashed #dbe1e9;text-align:center;color:#929baa;font-size:.58rem}
@media(max-width:900px){.term-review-hero-card{grid-template-columns:150px minmax(0,1fr);padding:22px}.term-review-avatar-wrap{width:140px;height:140px}.term-review-avatar-wrap .student-role-avatar{width:125px;height:125px}.term-review-kpis,.term-review-teacher-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.term-review-columns,.term-review-growth-list{grid-template-columns:1fr}.term-review-teacher-hero{flex-direction:column}.term-review-print-grid{grid-template-columns:1fr}}
@media(max-width:620px){.student-term-review-teaser{align-items:stretch;flex-direction:column}.student-term-review-teaser .btn{width:100%}.term-review-hero-card{grid-template-columns:1fr;text-align:center}.term-review-avatar-wrap{width:130px;height:130px}.term-review-avatar-wrap .student-role-avatar{width:115px;height:115px}.term-review-hero-copy h1{font-size:1.45rem}.term-review-kpis,.term-review-teacher-kpis{grid-template-columns:1fr}.term-review-week-chart>div{min-width:34px}}
@media print{.no-print{display:none!important}.term-review-student-body,.term-review-print-body{background:#fff}.term-review-student-shell{width:100%;margin:0;gap:8mm}.term-review-hero-card,.term-review-card,.term-review-kpis article{box-shadow:none}.term-review-hero-card{break-inside:avoid}.term-review-print-grid{width:100%;margin:0;display:grid;grid-template-columns:1fr 1fr;gap:6mm}.term-review-print-card{min-height:132mm;padding:5mm;border-radius:4mm;box-shadow:none}.term-review-print-card:nth-child(4n+1){break-before:page}.term-review-print-card header{grid-template-columns:28mm 1fr}.term-review-print-avatar{width:26mm;height:26mm}.term-review-print-avatar .student-role-avatar{width:24mm;height:24mm}}


/* v1.24 教師快速操作優化 */
.lesson-class-switcher{display:flex;align-items:center;gap:6px;padding:5px 7px;border:1px solid #dbe5f3;border-radius:12px;background:rgba(255,255,255,.82)}
.lesson-class-switcher label{display:flex;align-items:center;gap:6px;margin:0}.lesson-class-switcher label>span{font-size:.76rem;color:#64748b;font-weight:800}.lesson-class-switcher select{width:auto;min-width:90px;max-width:150px;padding:7px 30px 7px 9px;border-radius:9px;font-weight:850;background:#fff}.lesson-class-arrow{width:30px;height:30px;display:grid;place-items:center;border-radius:9px;background:#eef4ff;color:#1d4ed8;font-weight:950;text-decoration:none}.lesson-class-arrow:hover{background:#dce9ff;text-decoration:none}
.lesson-unnoticed{border-radius:12px;border:1px solid #e2e8f0;background:#fff;overflow:hidden}.lesson-unnoticed summary{list-style:none;display:flex;align-items:center;gap:10px;padding:11px 12px;cursor:pointer}.lesson-unnoticed summary::-webkit-details-marker{display:none}.lesson-unnoticed summary>span{width:30px;height:30px;display:grid;place-items:center;border-radius:50%;background:#f1f5f9}.lesson-unnoticed summary>div{display:grid;gap:2px;min-width:0}.lesson-unnoticed summary small{color:#64748b}.lesson-unnoticed.is-watch{border-color:#fed7aa;background:#fffaf5}.lesson-unnoticed.is-watch summary>span{background:#ffedd5}.lesson-unnoticed.is-done{border-color:#bbf7d0;background:#f7fff9}.lesson-unnoticed.is-neutral{background:#f8fafc}.lesson-unnoticed-list{display:flex;flex-wrap:wrap;gap:7px;padding:0 12px 12px}.lesson-unnoticed-list a{display:flex;align-items:center;gap:5px;padding:5px 8px;border-radius:999px;background:#fff;border:1px solid #e2e8f0;color:#334155;text-decoration:none;font-size:.82rem}.lesson-unnoticed-list a b{color:#1d4ed8}.lesson-unnoticed-list a:hover{border-color:#93c5fd;background:#eff6ff;text-decoration:none}
.quick-undo-toast{position:fixed;z-index:3600;left:50%;bottom:22px;transform:translate(-50%,24px);opacity:0;display:flex;align-items:center;gap:18px;width:min(560px,calc(100vw - 28px));padding:13px 14px 13px 17px;border:1px solid #bfdbfe;border-radius:16px;background:rgba(15,23,42,.96);color:#fff;box-shadow:0 18px 55px rgba(15,23,42,.32);transition:.18s ease}.quick-undo-toast.is-visible{opacity:1;transform:translate(-50%,0)}.quick-undo-toast>div{display:grid;gap:2px;min-width:0;flex:1}.quick-undo-toast strong{font-size:.96rem}.quick-undo-toast small{color:#cbd5e1;line-height:1.35}.quick-undo-toast button{flex:0 0 auto;border:0;border-radius:11px;padding:9px 12px;background:#fff;color:#1e3a8a;font:inherit;font-weight:900;cursor:pointer}.quick-undo-toast button:disabled{opacity:.65;cursor:wait}
.lesson-tool-drawer-fab{position:fixed;right:18px;bottom:78px;z-index:1090;border:1px solid #bfdbfe;border-radius:999px;padding:10px 14px;background:#fff;color:#163a70;font:inherit;font-weight:900;box-shadow:0 10px 30px rgba(15,23,42,.18);cursor:pointer}.lesson-tool-drawer-fab:hover{background:#eff6ff}.lesson-tool-drawer{position:fixed;z-index:1110;top:0;right:0;width:min(390px,92vw);height:100dvh;padding:18px;background:#f8fbff;border-left:1px solid #dbe5f0;box-shadow:-22px 0 70px rgba(15,23,42,.22);transform:translateX(105%);transition:transform .22s ease;overflow:auto}.lesson-tool-drawer.is-open{transform:translateX(0)}.lesson-tool-drawer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:4px 2px 18px}.lesson-tool-drawer-head>div{display:grid;gap:2px}.lesson-tool-drawer-head small{color:#64748b;font-weight:800}.lesson-tool-drawer-head strong{font-size:1.25rem;color:#0f2b55}.lesson-tool-drawer-head button{width:38px;height:38px;border:0;border-radius:50%;background:#e8eef7;color:#334155;font-size:26px;cursor:pointer}.lesson-tool-drawer-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.lesson-tool-drawer-grid a{min-height:96px;display:grid;place-items:center;text-align:center;align-content:center;gap:6px;padding:12px;border:1px solid #dbe5f0;border-radius:15px;background:#fff;color:#163a70;text-decoration:none;box-shadow:0 5px 16px rgba(15,23,42,.05)}.lesson-tool-drawer-grid a:hover{border-color:#93c5fd;background:#f0f7ff;text-decoration:none}.lesson-tool-drawer-grid span{font-size:1.55rem}.lesson-tool-drawer-grid strong{font-size:.92rem}.lesson-tool-drawer>p{margin:16px 2px;color:#64748b;font-size:.84rem;line-height:1.55}.lesson-tool-drawer-backdrop{position:fixed;inset:0;z-index:1100;background:rgba(15,23,42,.25);backdrop-filter:blur(1px)}body.lesson-tool-drawer-open{overflow:hidden}
@media(max-width:900px){.lesson-class-switcher{order:10;width:100%;justify-content:flex-end}.lesson-class-switcher label{flex:1}.lesson-class-switcher select{max-width:none;width:100%}}
@media(max-width:640px){.quick-undo-toast{bottom:12px;gap:10px;padding:11px 12px}.quick-undo-toast small{display:none}.lesson-tool-drawer-fab{right:12px;bottom:70px;padding:10px 12px}.lesson-tool-drawer-fab span{display:none}.lesson-tool-drawer-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.lesson-unnoticed-list a span{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}


/* v1.24.1 工作台冒險任務整合 */
.lesson-stage-mission{align-items:stretch}.lesson-adventure-card{height:100%;display:grid;align-content:start;gap:9px;min-width:0}.lesson-adventure-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.lesson-adventure-head>div:first-child{display:grid;gap:1px;min-width:0}.lesson-adventure-head>div:first-child>span{font-size:.78rem;font-weight:950;color:#443c74}.lesson-adventure-head small{font-size:.61rem;color:#7b8698;font-weight:750}.lesson-adventure-actions{display:flex;gap:6px;flex:0 0 auto}.lesson-adventure-actions button{border:1px solid #dcd9ee;border-radius:999px;background:#fff;color:#5d52a5;font:inherit;font-size:.64rem;font-weight:900;padding:5px 8px;cursor:pointer}.lesson-adventure-actions button:hover{background:#f4f1ff}.lesson-adventure-expandable{display:grid;gap:9px}.lesson-adventure-card.is-collapsed .lesson-adventure-expandable{display:none}.lesson-adventure-section-title{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:5px}.lesson-adventure-section-title strong{font-size:.69rem;color:#3d4b63}.lesson-adventure-section-title span{font-size:.61rem;color:#6f7b8f;font-weight:850}.lesson-adventure-task-list{display:grid;gap:4px}.lesson-adventure-task{display:grid;grid-template-columns:23px minmax(0,1fr) auto;align-items:center;gap:6px;padding:4px 7px;border:1px solid #e5e7f0;border-radius:9px;background:rgba(255,255,255,.76)}.lesson-adventure-task>span{font-size:.85rem}.lesson-adventure-task>strong{font-size:.66rem;color:#2c3951;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson-adventure-task>b{font-size:.59rem;color:#5b6478;white-space:nowrap}.lesson-adventure-reward{display:grid;grid-template-columns:25px minmax(0,1fr);gap:7px;align-items:center;margin-top:5px;padding:5px 7px;border-radius:9px;background:#fff8dd;border:1px solid #f6e8a8}.lesson-adventure-reward>span{font-size:.9rem}.lesson-adventure-reward>div{display:grid;gap:0}.lesson-adventure-reward strong{font-size:.62rem;color:#755400}.lesson-adventure-reward small{font-size:.57rem;color:#897235;line-height:1.35}.lesson-adventure-reward.is-class{background:#effcf5;border-color:#ccefdc}.lesson-adventure-reward.is-class strong{color:#17603d}.lesson-adventure-reward.is-class small{color:#527663}.lesson-adventure-class{padding-top:7px;border-top:1px dashed #dedbea}.lesson-adventure-empty{display:grid;grid-template-columns:32px minmax(0,1fr) auto;align-items:center;gap:8px;padding:9px;border:1px dashed #d9dfeb;border-radius:11px;background:rgba(255,255,255,.65)}.lesson-adventure-empty>span{font-size:1.05rem}.lesson-adventure-empty>div{display:grid;gap:1px}.lesson-adventure-empty strong{font-size:.7rem;color:#4b5568}.lesson-adventure-empty small{font-size:.59rem;color:#7b8798}.lesson-adventure-empty a{font-size:.61rem;font-weight:900;color:#4f46e5;text-decoration:none}.lesson-adventure-card.is-collapsed .lesson-adventure-head{margin:auto 0}.lesson-adventure-card.is-collapsed{align-content:center}
.lesson-adventure-presenter[hidden]{display:none!important}.lesson-adventure-presenter{position:fixed;z-index:5000;inset:0;padding:clamp(18px,3vw,46px);display:grid;place-items:center;background:linear-gradient(135deg,rgba(20,31,55,.96),rgba(40,29,77,.97));overflow:auto}.lesson-adventure-presenter-shell{width:min(1180px,100%);min-height:min(760px,calc(100dvh - 70px));padding:clamp(24px,4vw,54px);border-radius:32px;background:linear-gradient(145deg,#fff,#f8fbff 55%,#f4fff8);box-shadow:0 28px 90px rgba(0,0,0,.34);display:flex;flex-direction:column;gap:20px}.lesson-adventure-presenter-top{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.lesson-adventure-presenter-top span{font-size:.82rem;color:#6b5ab1;font-weight:950;letter-spacing:.08em}.lesson-adventure-presenter-top h2{margin:3px 0 0;font-size:clamp(2rem,4vw,4rem);color:#142743}.lesson-adventure-presenter-top button{width:54px;height:54px;border:0;border-radius:50%;background:#e9eef7;color:#34435c;font-size:34px;line-height:1;cursor:pointer}.lesson-adventure-presenter-rule{padding:13px 18px;border-radius:16px;background:#ede9fe;color:#493c99;font-size:clamp(1rem,2vw,1.45rem)}.lesson-adventure-presenter-tasks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.lesson-adventure-presenter-tasks article{min-height:150px;display:grid;grid-template-columns:52px minmax(0,1fr);grid-template-rows:auto auto;gap:8px 13px;align-content:center;padding:18px;border:1px solid #dfe5ef;border-radius:20px;background:#fff;box-shadow:0 8px 22px rgba(34,48,78,.06)}.lesson-adventure-presenter-tasks article>span{grid-row:1/3;font-size:2rem}.lesson-adventure-presenter-tasks article>div{display:grid;gap:5px}.lesson-adventure-presenter-tasks strong{font-size:clamp(.98rem,1.7vw,1.28rem);color:#263653}.lesson-adventure-presenter-tasks small{font-size:.78rem;color:#768398;line-height:1.45}.lesson-adventure-presenter-tasks b{grid-column:2;color:#5a50a6;font-size:.82rem}.lesson-adventure-presenter-reward{display:grid;grid-template-columns:50px minmax(0,1fr);gap:12px;align-items:center;padding:15px 18px;border-radius:18px;background:#fff8db;border:1px solid #f3df86}.lesson-adventure-presenter-reward>span{font-size:2rem}.lesson-adventure-presenter-reward>div{display:grid;gap:3px}.lesson-adventure-presenter-reward strong{font-size:1.05rem;color:#704f00}.lesson-adventure-presenter-reward small{color:#8a7131}.lesson-adventure-presenter-class{display:grid;gap:10px;padding:18px;border-radius:20px;background:#f4f8ff;border:1px solid #d9e4f5}.lesson-adventure-presenter-class>div:first-child{display:grid;grid-template-columns:48px minmax(0,1fr) auto;gap:12px;align-items:center}.lesson-adventure-presenter-class>div:first-child>span{font-size:2rem}.lesson-adventure-presenter-class section{display:grid;gap:2px}.lesson-adventure-presenter-class section small{color:#687893;font-weight:900}.lesson-adventure-presenter-class section strong{font-size:1.2rem;color:#263653}.lesson-adventure-presenter-class section p{margin:0;color:#748198}.lesson-adventure-presenter-class>div:first-child>b{font-size:1rem;color:#5a50a6}.lesson-adventure-presenter-class.is-complete{background:#f0fff6;border-color:#bfe8d0}.lesson-adventure-presenter-class.is-complete>div:first-child>b{color:#15803d}.lesson-adventure-presenter-class footer{font-size:.82rem;color:#476557;font-weight:800}.lesson-adventure-presenter-foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:18px;padding-top:4px}.lesson-adventure-presenter-foot span{color:#6b778a}.lesson-adventure-presenter-foot button{border:0;border-radius:14px;padding:12px 20px;background:#2563eb;color:#fff;font:inherit;font-weight:950;cursor:pointer}body.lesson-adventure-presenter-open{overflow:hidden}
@media(max-width:1100px){.lesson-stage-main{grid-template-columns:minmax(270px,.72fr) minmax(460px,1.28fr)}.lesson-adventure-presenter-tasks{grid-template-columns:1fr}.lesson-adventure-presenter-shell{min-height:auto}.lesson-adventure-presenter-tasks article{min-height:0}}
@media(max-width:900px){.lesson-adventure-task>strong{white-space:normal}.lesson-adventure-presenter{padding:12px}.lesson-adventure-presenter-shell{border-radius:22px;padding:22px;gap:14px}.lesson-adventure-presenter-foot{flex-direction:column;align-items:stretch}.lesson-adventure-presenter-foot button{width:100%}}
@media(max-width:620px){.lesson-adventure-head{align-items:flex-start}.lesson-adventure-actions{flex-direction:column}.lesson-adventure-actions button{padding:4px 7px}.lesson-adventure-task{grid-template-columns:22px minmax(0,1fr)}.lesson-adventure-task>b{grid-column:2}.lesson-adventure-presenter-top h2{font-size:2rem}.lesson-adventure-presenter-top button{width:44px;height:44px;font-size:28px}.lesson-adventure-presenter-rule{font-size:.95rem}.lesson-adventure-presenter-tasks article{grid-template-columns:42px minmax(0,1fr);padding:14px}.lesson-adventure-presenter-class>div:first-child{grid-template-columns:40px minmax(0,1fr)}.lesson-adventure-presenter-class>div:first-child>b{grid-column:2}.lesson-adventure-presenter-reward{grid-template-columns:38px minmax(0,1fr)}}

/* v1.24.2 班級冒險獎勵：7 天限時角色牆背景＋工作台角色舞台特效 */
.adventure-week-reward{display:grid;grid-template-columns:42px minmax(0,1fr) minmax(145px,210px);align-items:center;gap:10px;margin:12px 0 4px;padding:11px 12px;border:1px solid #d9e5f1;border-radius:14px;background:linear-gradient(135deg,#f8fbff,#fffdf4)}.adventure-week-reward>span{font-size:1.7rem;text-align:center}.adventure-week-reward>div{display:grid;gap:2px}.adventure-week-reward strong{color:#253c5b}.adventure-week-reward p{margin:0;color:#68758a;font-size:.76rem;line-height:1.45}.adventure-week-reward label{display:grid;gap:4px;font-size:.7rem;color:#64748b;font-weight:850}.adventure-week-reward select{min-width:0;width:100%}.adventure-week-reward.is-active{border-color:#8ed6ae;background:linear-gradient(135deg,#effdf5,#f7fffb)}.adventure-reward-baseline .inline-form{display:inline-flex;margin:8px 0 0}.adventure-active-reward{display:flex;align-items:center;justify-content:space-between;gap:18px;overflow:hidden;position:relative}.adventure-active-reward>div{display:flex;align-items:center;gap:13px}.adventure-active-reward>div>span{font-size:2.2rem}.adventure-active-reward small{font-weight:950;color:#6b7280;letter-spacing:.05em}.adventure-active-reward h2{margin:2px 0;font-size:1.3rem}.adventure-active-reward p{margin:0;color:#667085}.adventure-active-reward>strong{white-space:nowrap;padding:8px 12px;border-radius:999px;background:rgba(255,255,255,.82);border:1px solid rgba(148,163,184,.28)}

.lesson-role-stage[class*="class-reward-theme-"]{position:relative;isolation:isolate}.lesson-role-stage[class*="class-reward-theme-"]>*{position:relative;z-index:2}.lesson-role-stage[class*="class-reward-theme-"]::before{content:"";position:absolute;z-index:0;inset:0;pointer-events:none;opacity:.95}.lesson-role-stage[class*="class-reward-theme-"]::after{position:absolute;z-index:1;left:-8%;top:12%;width:116%;pointer-events:none;text-align:center;white-space:nowrap;font-size:20px;letter-spacing:34px;opacity:.28;animation:classRewardDrift 8s ease-in-out infinite alternate}.lesson-role-stage.class-reward-theme-forest::before{background:radial-gradient(circle at 14% 15%,rgba(34,197,94,.18),transparent 28%),radial-gradient(circle at 90% 70%,rgba(132,204,22,.15),transparent 30%),linear-gradient(135deg,#f3fff6,#fbfff5)}.lesson-role-stage.class-reward-theme-forest::after{content:"🍃　🍂　🍃　🍃　🍂"}.lesson-role-stage.class-reward-theme-star::before{background:radial-gradient(circle at 15% 20%,rgba(99,102,241,.18),transparent 28%),radial-gradient(circle at 85% 12%,rgba(56,189,248,.15),transparent 30%),linear-gradient(135deg,#f5f4ff,#f2faff)}.lesson-role-stage.class-reward-theme-star::after{content:"✦　✧　✦　✧　✦";color:#5b5bd6;text-shadow:0 0 10px #fff}.lesson-role-stage.class-reward-theme-sky::before{background:radial-gradient(circle at 18% 20%,rgba(125,211,252,.2),transparent 28%),linear-gradient(180deg,#f0faff,#fff 76%)}.lesson-role-stage.class-reward-theme-sky::after{content:"☁　🪶　☁　🪶　☁"}.lesson-role-stage.class-reward-theme-fire::before{background:radial-gradient(circle at 12% 80%,rgba(251,146,60,.2),transparent 28%),radial-gradient(circle at 88% 16%,rgba(239,68,68,.12),transparent 30%),linear-gradient(135deg,#fff8ed,#fff)}.lesson-role-stage.class-reward-theme-fire::after{content:"✦　•　✦　•　✦";color:#ea580c;text-shadow:0 0 12px rgba(251,146,60,.75)}.lesson-role-stage.class-reward-theme-ice::before{background:radial-gradient(circle at 13% 18%,rgba(186,230,253,.35),transparent 30%),linear-gradient(135deg,#f0fbff,#f8f7ff)}.lesson-role-stage.class-reward-theme-ice::after{content:"❄　✦　❄　✦　❄";color:#38bdf8}.lesson-role-stage.class-reward-theme-glory::before{background:linear-gradient(120deg,rgba(254,249,195,.75),rgba(224,231,255,.72),rgba(240,253,250,.72),rgba(253,242,248,.72));background-size:220% 220%;animation:classRewardGlow 9s ease infinite}.lesson-role-stage.class-reward-theme-glory::after{content:"✦　✨　✦　✨　✦";color:#8b5cf6;text-shadow:0 0 14px #fff}.lesson-adventure-reward.is-class.is-active{box-shadow:0 0 0 2px rgba(34,197,94,.08),0 8px 18px rgba(22,101,52,.06)}.lesson-stage-audience small b{color:#5d50a5}

.role-wall-class-reward{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:14px;align-items:center;padding:15px 20px;border-radius:20px;border:1px solid rgba(255,255,255,.7);background:rgba(255,255,255,.86);box-shadow:0 10px 30px rgba(30,41,59,.1);backdrop-filter:blur(12px)}.role-wall-class-reward>span{font-size:2.4rem;text-align:center}.role-wall-class-reward>div{display:grid;gap:2px}.role-wall-class-reward small{font-size:.64rem;letter-spacing:.13em;font-weight:950;color:#6b7280}.role-wall-class-reward strong{font-size:1.1rem}.role-wall-class-reward p{margin:0;color:#64748b;font-size:.78rem}.role-wall-class-reward>b{white-space:nowrap;padding:7px 11px;border-radius:999px;background:#fff;border:1px solid #e2e8f0;color:#475569;font-size:.76rem}.role-wall-body[class*="class-reward-theme-"]{background-attachment:fixed}.role-wall-body[class*="class-reward-theme-"] .role-wall-world,.role-wall-body[class*="class-reward-theme-"] .role-wall-section,.role-wall-body[class*="class-reward-theme-"] .role-wall-adventure{background-color:rgba(255,255,255,.9);backdrop-filter:blur(7px)}.role-wall-body.class-reward-theme-forest{background:radial-gradient(circle at 8% 0,rgba(34,197,94,.28),transparent 34%),radial-gradient(circle at 92% 5%,rgba(163,230,53,.23),transparent 31%),linear-gradient(150deg,#eefcf1,#f9fff4 48%,#f0fff8)}.role-wall-body.class-reward-theme-star{background:radial-gradient(circle at 8% 0,rgba(99,102,241,.3),transparent 35%),radial-gradient(circle at 92% 6%,rgba(56,189,248,.25),transparent 32%),linear-gradient(145deg,#efefff,#f5f8ff 50%,#edfaff)}.role-wall-body.class-reward-theme-sky{background:radial-gradient(circle at 20% 8%,rgba(255,255,255,.9),transparent 18%),radial-gradient(circle at 82% 13%,rgba(255,255,255,.72),transparent 20%),linear-gradient(180deg,#dff5ff,#f5fbff 55%,#fff)}.role-wall-body.class-reward-theme-fire{background:radial-gradient(circle at 8% 10%,rgba(251,146,60,.32),transparent 33%),radial-gradient(circle at 92% 5%,rgba(248,113,113,.22),transparent 30%),linear-gradient(145deg,#fff3e7,#fff8f3 55%,#fff)}.role-wall-body.class-reward-theme-ice{background:radial-gradient(circle at 10% 0,rgba(125,211,252,.34),transparent 34%),radial-gradient(circle at 90% 5%,rgba(196,181,253,.24),transparent 32%),linear-gradient(145deg,#eafaff,#f4fbff 50%,#f8f6ff)}.role-wall-body.class-reward-theme-glory{background:linear-gradient(125deg,#fff8d7,#eeeaff,#e8fbff,#ecfff5,#fff0f8);background-size:250% 250%;animation:classRewardGlow 14s ease infinite}

@keyframes classRewardDrift{from{transform:translate3d(-1.5%,0,0)}to{transform:translate3d(1.5%,15px,0)}}@keyframes classRewardGlow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
@media(prefers-reduced-motion:reduce){.lesson-role-stage[class*="class-reward-theme-"]::after,.lesson-role-stage.class-reward-theme-glory::before,.role-wall-body.class-reward-theme-glory{animation:none!important}}
@media(max-width:760px){.adventure-week-reward{grid-template-columns:38px minmax(0,1fr)}.adventure-week-reward>label{grid-column:2}.adventure-active-reward{align-items:flex-start;flex-direction:column}.role-wall-class-reward{grid-template-columns:48px minmax(0,1fr)}.role-wall-class-reward>b{grid-column:2;justify-self:start}}


/* ===== v1.24.3 上課工作台快速返回 ===== */
.active-lesson-return-strip{position:sticky;top:0;z-index:840;background:linear-gradient(90deg,#ecfdf5,#eff6ff);border-bottom:1px solid #bfdbfe;box-shadow:0 6px 18px rgba(15,23,42,.06)}
.active-lesson-return-strip-inner{width:min(1180px,calc(100% - 32px));min-height:46px;margin:0 auto;display:flex;align-items:center;gap:10px;padding:6px 0}
.active-lesson-return-dot{width:10px;height:10px;flex:0 0 10px;border-radius:50%;background:#16a34a;box-shadow:0 0 0 5px rgba(22,163,74,.12);animation:active-lesson-pulse 1.9s ease-in-out infinite}
.active-lesson-return-copy{display:flex;align-items:baseline;gap:8px;min-width:0;flex:1}.active-lesson-return-copy strong{font-size:.88rem;color:#153b32;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.active-lesson-return-copy small{font-size:.72rem;color:#5a7180;white-space:nowrap}
.active-lesson-return-strip-link{display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;padding:7px 11px;border-radius:999px;background:#173f76;color:#fff!important;font-size:.78rem;font-weight:900;text-decoration:none}.active-lesson-return-strip-link:hover{background:#0f315f;text-decoration:none}.active-lesson-return-strip-link kbd{padding:1px 5px;border:1px solid rgba(255,255,255,.26);border-radius:5px;background:rgba(255,255,255,.1);font:inherit;font-size:.62rem;color:#dbeafe}
.active-lesson-return-fab{position:fixed;left:18px;bottom:18px;z-index:1085;display:flex;align-items:center;gap:9px;max-width:min(310px,calc(100vw - 36px));padding:9px 13px;border:1px solid #bbf7d0;border-radius:16px;background:rgba(255,255,255,.97);color:#14532d!important;box-shadow:0 12px 34px rgba(15,23,42,.2);text-decoration:none;backdrop-filter:blur(8px)}.active-lesson-return-fab:hover{background:#f0fdf4;text-decoration:none;transform:translateY(-1px)}.active-lesson-return-fab>span{font-size:1.2rem}.active-lesson-return-fab>div{display:grid;line-height:1.15;min-width:0}.active-lesson-return-fab strong{font-size:.78rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.active-lesson-return-fab small{font-size:.61rem;color:#648072;margin-top:3px}
.active-lesson-compact-return{display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:7px 10px;border:1px solid #bbf7d0;border-radius:9px;background:#f0fdf4;color:#166534!important;font-size:.78rem;font-weight:900;text-decoration:none;white-space:nowrap}.active-lesson-compact-return:hover{background:#dcfce7;text-decoration:none}
.active-lesson-fullscreen-return{position:absolute!important;z-index:99999!important;top:max(12px,env(safe-area-inset-top));left:max(12px,env(safe-area-inset-left));border:1px solid rgba(255,255,255,.5);border-radius:999px;padding:8px 12px;background:rgba(15,35,64,.88);color:#fff;font:inherit;font-size:.78rem;font-weight:900;box-shadow:0 8px 26px rgba(0,0,0,.22);cursor:pointer;backdrop-filter:blur(7px)}
.pdf-active-lesson-return{display:none}.pdf-annotator-app:fullscreen .pdf-active-lesson-return{display:block;position:absolute;left:max(12px,env(safe-area-inset-left));bottom:max(12px,env(safe-area-inset-bottom));z-index:10010}.pdf-annotator-app:fullscreen .pdf-active-lesson-return .active-lesson-compact-return{background:rgba(15,35,64,.9);border-color:rgba(255,255,255,.3);color:#fff!important;backdrop-filter:blur(8px)}
@keyframes active-lesson-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.86);opacity:.7}}
@media(max-width:760px){
  .active-lesson-return-strip{display:none}
  .active-lesson-return-fab{left:12px;right:12px;bottom:max(68px,calc(env(safe-area-inset-bottom) + 58px));max-width:none;min-height:50px;justify-content:center;border-radius:15px;padding:8px 12px}.active-lesson-return-fab>span{font-size:1.35rem}.active-lesson-return-fab>div{display:flex;align-items:baseline;gap:7px}.active-lesson-return-fab strong{font-size:.86rem}.active-lesson-return-fab small{font-size:.65rem;margin:0}  .homework-display-toolbar .active-lesson-compact-return{order:-1}
}

/* v1.24.4 每日集點課次化 */
.daily-lesson-settings-intro .section-title,
.daily-lesson-context-panel .section-title{align-items:flex-start;gap:14px}
.daily-lesson-scope-control{display:flex;flex-direction:column;gap:6px;min-width:130px;font-size:.92rem}
.daily-lesson-scope-control>span{display:flex;align-items:center;gap:6px}
.daily-lesson-scope-control select{width:auto;min-width:64px;padding:5px 7px}
.daily-lesson-picker{display:flex;align-items:end;gap:8px}
.daily-lesson-picker label{display:flex;flex-direction:column;gap:5px;font-weight:700}
.daily-lesson-picker select{min-width:180px}
.daily-item-scope-badges{display:flex;gap:5px;justify-content:center;flex-wrap:wrap;margin-top:5px}
.daily-dynamic-table th.is-lesson-scoped{background:linear-gradient(180deg,#f5f3ff 0%,#fff 100%)}
.daily-dynamic-table td.is-lesson-scoped{background:rgba(124,58,237,.035)}
.daily-box select{min-width:72px;padding:6px 8px;border-radius:8px;border:1px solid #cbd5e1;background:#fff;font-weight:700;text-align:center}
.daily-box select:disabled{opacity:.5;background:#f1f5f9}
@media(max-width:760px){
  .daily-lesson-context-panel .section-title{flex-direction:column}
  .daily-lesson-picker,.daily-lesson-picker label{width:100%}
  .daily-lesson-picker select{width:100%;min-width:0}
}
.daily-item-add-form{grid-template-columns:minmax(300px,1fr) 140px minmax(190px,230px) auto}
.daily-item-add-lesson{min-width:0;display:flex;flex-direction:column;gap:5px}
.daily-item-add-lesson .inline-label{display:flex;align-items:center;gap:6px;font-size:.9rem;color:#475569}
.daily-item-add-lesson select{width:auto;min-width:62px;padding:5px 7px}
@media(max-width:1000px){.daily-item-add-form{grid-template-columns:minmax(0,1fr) 130px minmax(180px,220px);grid-template-areas:"name points lesson" "submit submit submit"}.daily-item-add-name{grid-area:name}.daily-item-add-points{grid-area:points}.daily-item-add-lesson{grid-area:lesson}.daily-item-add-submit{grid-area:submit;justify-self:end}}
@media(max-width:700px){.daily-item-add-form{grid-template-columns:1fr 130px;grid-template-areas:"name name" "points lesson" "submit submit"}}
@media(max-width:560px){.daily-item-add-form{grid-template-columns:1fr;grid-template-areas:"name" "points" "lesson" "submit"}.daily-item-add-submit{justify-self:stretch}}


/* v1.25 系統健檢 */
.admin-health-shortcut{display:flex;justify-content:flex-end;margin:-8px 0 16px}
.health-summary{display:flex;justify-content:space-between;gap:20px;align-items:center;margin-bottom:18px}
.health-summary h2{margin:0 0 6px}.health-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:20px}
.health-card{display:flex;gap:12px;align-items:flex-start;padding:16px;border:1px solid #dbe4ef;border-radius:16px;background:#fff;box-shadow:0 8px 24px rgba(15,23,42,.04)}
.health-card strong,.health-card small{display:block}.health-card small{margin-top:4px;color:#64748b;overflow-wrap:anywhere}.health-icon{font-size:22px;line-height:1.2}
.health-ok{border-color:#bbf7d0;background:#f7fff9}.health-warning{border-color:#fde68a;background:#fffbeb}.health-danger{border-color:#fecaca;background:#fff7f7}
.health-detail-grid{align-items:start}.health-list{margin:0;padding-left:1.25rem;line-height:1.9}.health-log{margin-top:18px}.health-log summary{cursor:pointer}.health-log pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:420px;overflow:auto;background:#0f172a;color:#e2e8f0;padding:14px;border-radius:12px;font-size:12px;line-height:1.55}
@media(max-width:900px){.health-grid{grid-template-columns:1fr 1fr}.health-summary{align-items:flex-start;flex-direction:column}}
@media(max-width:620px){.health-grid{grid-template-columns:1fr}.admin-health-shortcut{justify-content:stretch}.admin-health-shortcut .btn{width:100%}}

/* ===== v1.25.1 RWD＋座位表壓力測試 =====
   目標：1366×768、Windows 125%/150%、iPad 橫直向與中英長姓名。
   原則：寧可在極窄手機提供水平捲動，也不把姓名壓成逐字直排。 */
@media(max-width:1100px){
  .topbar{flex-wrap:wrap;padding:10px 14px}.main-nav{flex-wrap:wrap;justify-content:flex-end;row-gap:8px}
}
@media(max-width:620px){
  .page-heading{align-items:flex-start;flex-direction:column;gap:10px}.page-heading>.actions{width:100%}
}
@media(pointer:coarse){
  .seat-quick-actions button{min-width:42px!important;min-height:40px;padding:7px 10px!important;touch-action:manipulation}
  .seat-view-toggle button{min-height:42px;touch-action:manipulation}
  .seat-lock-button{min-width:38px;min-height:38px;display:grid;place-items:center;touch-action:manipulation}
}

/* 125% / 150% DPI 時，提早把「尚未安排」移到下方，主座位區可取得完整寬度。 */
@media(max-width:1240px){
  .seat-app{grid-template-columns:minmax(0,1fr)}
  .seat-unassigned-panel{position:static}
  .seat-stage{min-width:0}
}

/* 直排座位：6 人一列時保留最低可讀寬度；極窄裝置改為座位區橫向捲動，不硬壓文字。 */
.seat-row-grid{
  min-width:max(620px,calc(var(--seat-columns) * 100px));
  gap:clamp(7px,1vw,16px);
}
.seat-slot,.seat-group-card{container-type:inline-size;min-width:0}
.seat-student-text,.seat-student-text strong,.seat-student-name{min-width:0;max-width:100%}
.seat-student-name{line-height:1.28;word-break:normal;overflow-wrap:normal;line-break:strict;hyphens:none}
.seat-stage[data-seat-density="compact"] .seat-row-grid{gap:8px}
.seat-stage[data-seat-density="compact"] .seat-slot{padding:22px 5px 6px;min-height:108px}
.seat-stage[data-seat-density="compact"] .seat-row-grid .seat-student-card{grid-template-columns:32px minmax(0,1fr);column-gap:6px;padding:6px}
.seat-stage[data-seat-density="compact"] .seat-row-grid .seat-student-card>.avatar{width:32px;height:32px;font-size:19px}
.seat-stage[data-seat-density="compact"] .seat-row-grid .seat-student-card .avatar-art-image{width:32px;height:32px}
.seat-stage[data-seat-density="compact"] .seat-row-grid .seat-student-text strong{font-size:12px;gap:3px}
.seat-stage[data-seat-density="compact"] .seat-row-grid .seat-quick-actions{gap:4px}
.seat-stage[data-seat-density="compact"] .seat-row-grid .seat-quick-actions button{min-width:32px;padding:4px 7px}
.seat-stage[data-seat-density="tight"] .seat-row-grid{gap:6px}
.seat-stage[data-seat-density="tight"] .seat-slot{padding:21px 4px 5px;min-height:104px}
.seat-stage[data-seat-density="tight"] .seat-row-grid .seat-student-card{grid-template-columns:29px minmax(0,1fr);column-gap:5px;row-gap:4px;padding:5px}
.seat-stage[data-seat-density="tight"] .seat-row-grid .seat-student-card>.avatar{width:29px;height:29px;font-size:17px}
.seat-stage[data-seat-density="tight"] .seat-row-grid .seat-student-card .avatar-art-image{width:29px;height:29px}
.seat-stage[data-seat-density="tight"] .seat-row-grid .seat-student-text strong{font-size:11px;gap:2px}
.seat-stage[data-seat-density="tight"] .seat-position-label{font-size:9px;max-width:calc(100% - 38px);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.seat-stage[data-seat-density="tight"] .seat-row-grid .seat-quick-actions button{min-width:30px;padding:4px 6px;font-size:12px}

/* 全螢幕優先利用整個 viewport；名字固定最多兩行，不使用 anywhere 逐字硬切。 */
.seat-stage:fullscreen{padding:clamp(8px,1.5vw,22px)}
.seat-stage:fullscreen .seat-row-grid{width:100%;min-width:max(600px,calc(var(--seat-columns) * 96px));gap:clamp(6px,1vw,14px)}
.seat-stage:fullscreen .seat-print-title{gap:8px;flex-wrap:wrap}
.seat-stage:fullscreen .seat-student-name{overflow-wrap:normal;word-break:normal;line-break:strict}

/* 分組：平板仍盡量忠實保留教師設定的同列組數；手機才改單欄。 */
@media(min-width:621px) and (max-width:1000px){
  .seat-group-rows{min-width:0}
  .seat-group-row{grid-template-columns:repeat(var(--groups-in-row),minmax(220px,1fr))!important;max-width:var(--group-row-max)!important;gap:12px}
  .seat-group-card{padding:9px}
  .seat-group-slots{grid-template-columns:repeat(2,minmax(88px,1fr));gap:7px}
  .seat-group-slots .seat-student-card{grid-template-columns:30px minmax(0,1fr);column-gap:5px;padding:5px}
  .seat-group-slots .seat-student-card>.avatar{width:30px;height:30px;font-size:18px}
  .seat-group-slots .seat-student-card .avatar-art-image{width:30px;height:30px}
  .seat-group-slots .seat-student-text strong{font-size:11.5px;gap:3px}
  .seat-group-slots .seat-quick-actions button{min-width:30px;padding:4px 6px;font-size:12px}
}
@media(max-width:620px){
  .seat-stage{padding-left:10px;padding-right:10px}
  .seat-row-grid{min-width:max(560px,calc(var(--seat-columns) * 92px))}
  .seat-group-row{grid-template-columns:1fr!important;max-width:none!important}
  .seat-group-rows{min-width:0}
  .seat-view-bar{position:sticky;left:0;right:0}
}

/* 工作台角色舞台：修正較晚宣告的 1100px 規則覆蓋 900px 單欄規則的情況。 */
@media(min-width:901px) and (max-width:1100px){
  .lesson-stage-main{grid-template-columns:minmax(245px,.75fr) minmax(0,1.25fr)!important}
  .lesson-stage-partner-body{grid-template-columns:74px minmax(0,1fr)}
  .lesson-stage-partner-avatar{width:72px;height:72px;border-radius:20px}
}
@media(max-width:900px){
  .lesson-stage-main{grid-template-columns:minmax(0,1fr)!important}
  .lesson-stage-partner{border-right:0;border-bottom:1px solid #e5e2f2}
  .lesson-stage-audience{grid-template-columns:minmax(0,1fr)!important}
}
@media(max-width:760px){
  .lesson-stage-challenge-head{grid-template-columns:32px minmax(0,1fr)}
  .lesson-stage-challenge-head>b{grid-column:2;justify-self:start}
  .lesson-stage-challenge-head strong{white-space:normal;overflow:visible;text-overflow:clip}
  .lesson-stage-partner-copy>strong,.lesson-role-award-toast strong{overflow-wrap:normal;word-break:normal}
}

/* 列印／PDF：長姓名允許兩行，6 人直排時不再用 ellipsis 切掉姓名。 */
.seat-print-page .print-student-card{min-width:0}
.seat-print-page .print-student-card>div{min-width:0}
.seat-print-page .print-student-card strong{
  max-width:100%;white-space:normal!important;overflow:hidden;text-overflow:clip!important;
  overflow-wrap:normal;word-break:normal;line-break:strict;line-height:1.18;
  display:-webkit-box!important;-webkit-box-orient:vertical;-webkit-line-clamp:2;
}
@media(max-width:760px){
  .seat-print-sheet{width:calc(100% - 16px);margin:10px auto;padding:14px}
  .seat-print-document-title{align-items:flex-start;flex-direction:column;gap:5px}
}
@media print{
  .seat-print-page.layout-rows .print-student-card strong{white-space:normal!important;text-overflow:clip!important;line-height:1.15;-webkit-line-clamp:2}
}


/* ===== v1.25.2 PDF 開啟速度優化 ===== */
.pdf-annotator-app.annotations-pending .pdf-pencil-shield{pointer-events:none!important}
.pdf-page-wrap{contain:layout style}
@media (prefers-reduced-motion:reduce){.pdf-loading .spinner{animation-duration:1.6s}}


/* ===== v1.25.3 全站穩定性收尾 ===== */
.yll-api-dialog-shade{position:fixed;inset:0;z-index:99999;display:grid;place-items:center;padding:20px;background:rgba(15,23,42,.58);backdrop-filter:blur(5px)}
.yll-api-dialog{width:min(440px,100%);padding:26px;border-radius:20px;background:#fff;box-shadow:0 28px 80px rgba(15,23,42,.28);text-align:center}.yll-api-dialog-icon{font-size:40px}.yll-api-dialog h2{margin:8px 0}.yll-api-dialog p{color:#475569;line-height:1.7}.yll-api-dialog .actions{justify-content:center}
.yll-api-reload-toast{position:fixed;right:18px;bottom:18px;z-index:99998;display:flex;align-items:center;gap:14px;max-width:min(520px,calc(100vw - 36px));padding:14px 16px;border:1px solid #fde68a;border-radius:16px;background:#fffbeb;box-shadow:0 18px 45px rgba(15,23,42,.18)}.yll-api-reload-toast strong,.yll-api-reload-toast small{display:block}.yll-api-reload-toast small{margin-top:3px;color:#785f12}
form.is-submitting{opacity:.78}.stability-check-list{display:grid;gap:8px}.stability-check-list .admin-list-row small{color:#64748b}
@media(max-width:620px){.yll-api-reload-toast{left:12px;right:12px;bottom:12px;align-items:stretch;flex-direction:column}.yll-api-reload-toast .btn{width:100%}}

/* v1.26.0 資料備份＋學期封存 */
.backup-top-grid{align-items:start}.backup-scope-list{display:grid;gap:12px}.backup-scope-list>div{display:grid;gap:5px;padding:14px;border:1px solid #dbe4f0;border-radius:14px;background:#f8fafc}.backup-sha{display:inline-block;max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.76rem}.archive-check-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.archive-check-list>div{padding:14px;border:1px solid #dbe4f0;border-radius:14px;background:#f8fafc;display:grid;gap:4px}.archive-check-list b{font-size:1.35rem;color:#17345f}.archive-check-list small{color:#64748b}.term-archive-hero.is-archived{border-color:#b9c8dc;background:linear-gradient(145deg,#f8fafc,#eef3f9)}.archive-confirm-check{display:flex;gap:10px;align-items:flex-start;margin:14px 0 18px;padding:14px;border:1px solid #f1c6c6;border-radius:12px;background:#fff7f7}.archive-confirm-check input{margin-top:4px;width:18px;height:18px}.admin-health-shortcut{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}
@media(max-width:760px){.archive-check-list{grid-template-columns:1fr}.backup-sha{max-width:120px}.backup-top-grid{grid-template-columns:1fr}}


/* v1.26.0.2 上課工作台：保留冒險舞台，補上投影捷徑與課堂即時紀錄。 */
.lesson-cockpit-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(320px,.95fr);gap:16px;margin:0 0 18px}
.lesson-display-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.lesson-display-grid a,.lesson-display-button{min-height:96px;display:grid;align-content:center;gap:4px;padding:14px 15px;border:1px solid #dbe5f0;border-radius:16px;background:linear-gradient(135deg,#fff,#f8fbff);color:#163a70;text-decoration:none;box-shadow:0 6px 18px rgba(15,23,42,.05)}
.lesson-display-grid a:hover,.lesson-display-button:hover{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8;text-decoration:none}
.lesson-display-grid span,.lesson-display-button span{font-size:1.45rem}
.lesson-display-grid strong,.lesson-display-button strong{font-size:.96rem;color:#19345f}
.lesson-display-grid small,.lesson-display-button small{font-size:.75rem;color:#64748b;line-height:1.45}
.lesson-display-button{width:100%;text-align:left;cursor:pointer;font:inherit}
.lesson-live-panel{display:grid;align-content:start;gap:10px}
.lesson-live-summary{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.lesson-live-summary small{color:#64748b;font-size:.78rem}
.lesson-live-status{min-height:0;font-size:.84rem;font-weight:800}
.lesson-live-status:empty{display:none}
.lesson-live-status.is-success{color:#15803d}
.lesson-live-status.is-error{color:#b91c1c}
.lesson-live-list{display:grid;gap:8px}
.lesson-live-item{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:11px 12px;border:1px solid #e2e8f0;border-radius:14px;background:#fff}
.lesson-live-item.is-reversed{background:#f8fafc;border-color:#e2e8f0;opacity:.82}
.lesson-live-copy{display:grid;gap:2px;min-width:0}
.lesson-live-copy strong{color:#1e293b;font-size:.92rem}
.lesson-live-copy small{color:#64748b;line-height:1.45}
.lesson-live-reversed-note{color:#b45309!important;font-weight:800}
.lesson-live-empty{display:grid;grid-template-columns:38px minmax(0,1fr);gap:10px;align-items:center;padding:12px 13px;border:1px dashed #cbd5e1;border-radius:14px;background:#f8fbff}
.lesson-live-empty span{display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:#eff6ff;font-size:1.1rem}
.lesson-live-empty strong{display:block;color:#1e3a8a}
.lesson-live-empty small{display:block;color:#64748b;line-height:1.45}
@media(max-width:1100px){.lesson-cockpit-grid{grid-template-columns:1fr}.lesson-display-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.lesson-display-grid{grid-template-columns:1fr}.lesson-live-item{grid-template-columns:1fr}.lesson-live-item .btn,.lesson-live-item .badge{justify-self:start}}

/* v1.26.0.3 本節課互動冒險團 */
.lesson-stage-audience.is-interaction-party{align-items:center}
.lesson-stage-audience.is-interaction-party .lesson-stage-audience-list{justify-content:flex-start;overflow-x:auto;overflow-y:hidden;min-height:74px;padding:9px 8px 12px;scrollbar-width:thin;scroll-behavior:smooth}
.lesson-stage-audience-avatar.is-interactive{width:54px;height:54px;flex:0 0 54px;margin-right:5px;border-radius:16px;background:rgba(255,255,255,.78);box-shadow:0 5px 14px rgba(30,41,59,.08)}
.lesson-stage-audience-avatar.is-interactive>b{right:-5px;bottom:-5px}
.lesson-stage-interaction-badge{position:absolute;z-index:7;right:-6px;top:-7px;min-width:23px;height:23px;padding:0 4px;display:grid;place-items:center;border-radius:999px;background:#fff;border:1px solid #dbe4ef;box-shadow:0 4px 10px rgba(15,23,42,.16);font-style:normal;font-size:.72rem;line-height:1}
.lesson-stage-interaction-count{position:absolute;z-index:7;left:-6px;top:-7px;min-width:23px;height:20px;padding:0 5px;display:grid;place-items:center;border-radius:999px;background:#eef2ff;border:1px solid #c7d2fe;color:#4338ca;box-shadow:0 3px 8px rgba(67,56,202,.1);font-style:normal;font-size:.54rem;font-weight:950;line-height:1}
.lesson-stage-audience-empty{width:100%;min-height:54px;display:grid;grid-template-columns:34px minmax(0,1fr);grid-template-rows:auto auto;column-gap:9px;align-content:center;padding:7px 9px;border:1px dashed #d7ddec;border-radius:13px;background:rgba(255,255,255,.55);color:#65738a}
.lesson-stage-audience-empty>span{grid-row:1/3;width:32px;height:32px;display:grid;place-items:center;border-radius:11px;background:#f3f0ff;font-size:1rem}
.lesson-stage-audience-empty>strong{font-size:.69rem;color:#46536a;align-self:end}
.lesson-stage-audience-empty>small{font-size:.59rem;color:#8792a4;align-self:start}
.lesson-stage-audience-avatar.is-new-interaction{animation:lessonInteractionJoin .82s ease both}
@keyframes lessonInteractionJoin{0%{transform:translateY(10px) scale(.75);opacity:.25}45%{transform:translateY(-5px) scale(1.12);opacity:1}72%{transform:translateY(1px) scale(.98)}100%{transform:none;opacity:1}}
@media(max-width:620px){.lesson-stage-audience.is-interaction-party .lesson-stage-audience-list{min-height:68px}.lesson-stage-audience-avatar.is-interactive{width:48px;height:48px;flex-basis:48px}.lesson-stage-audience-empty{min-width:320px}}
@media(prefers-reduced-motion:reduce){.lesson-stage-audience-avatar.is-new-interaction{animation:none!important}.lesson-stage-audience.is-interaction-party .lesson-stage-audience-list{scroll-behavior:auto}}

/* v1.26.0.4 每日集點 × 本節互動冒險團：大量完成不塞滿角色列。 */
.lesson-stage-batch-events{display:flex;gap:5px;flex-wrap:wrap;margin-top:5px}
.lesson-stage-batch-events:empty{display:none}
.lesson-stage-batch-chip{display:inline-flex;align-items:center;min-height:23px;padding:3px 8px;border:1px solid #dbeafe;border-radius:999px;background:#eff6ff;color:#31558a;font-size:.59rem;font-weight:900;line-height:1.25;white-space:nowrap}
.lesson-stage-batch-chip.is-complete{border-color:#bbf7d0;background:#ecfdf5;color:#15803d;box-shadow:0 3px 9px rgba(21,128,61,.08)}
.lesson-stage-audience-more{width:54px;height:54px;flex:0 0 54px;display:grid;place-items:center;align-content:center;gap:0;border:1px dashed #c7d2fe;border-radius:16px;background:#f5f7ff;color:#4f46e5;text-align:center}
.lesson-stage-audience-more strong{font-size:.78rem;color:#4338ca;line-height:1.05}
.lesson-stage-audience-more small{font-size:.49rem;color:#6366f1;line-height:1.1;white-space:nowrap}
.lesson-batch-toast{position:fixed;z-index:3650;right:22px;bottom:22px;width:min(420px,calc(100vw - 32px));display:grid;grid-template-columns:50px minmax(0,1fr);align-items:center;gap:12px;padding:14px 16px;border:1px solid #bfdbfe;border-radius:18px;background:rgba(255,255,255,.98);box-shadow:0 20px 60px rgba(15,23,42,.22);transform:translateY(18px);opacity:0;transition:.2s ease}
.lesson-batch-toast.is-visible{transform:translateY(0);opacity:1}
.lesson-batch-toast>span{width:48px;height:48px;display:grid;place-items:center;border-radius:15px;background:#eff6ff;font-size:1.55rem}
.lesson-batch-toast>div{display:grid;gap:3px}.lesson-batch-toast strong{color:#173a70;font-size:1rem}.lesson-batch-toast small{color:#64748b;line-height:1.4;font-size:.76rem}
.lesson-batch-toast.is-complete{border-color:#86efac;background:linear-gradient(135deg,#f0fdf4,#fff 72%)}
.lesson-batch-toast.is-complete>span{background:#dcfce7}.lesson-batch-toast.is-complete strong{color:#15803d}
@media(max-width:620px){.lesson-stage-batch-events{margin-top:4px}.lesson-stage-batch-chip{font-size:.55rem}.lesson-stage-audience-more{width:48px;height:48px;flex-basis:48px}.lesson-batch-toast{right:12px;bottom:12px;grid-template-columns:42px minmax(0,1fr);padding:11px 12px}.lesson-batch-toast>span{width:40px;height:40px;font-size:1.25rem}.lesson-batch-toast small{font-size:.7rem}}
@media(prefers-reduced-motion:reduce){.lesson-batch-toast{transition:none!important}}


/* v1.26.0.5 工作台主工具列：每日集點進度 */
.lesson-quickbar a small{display:block;margin-top:1px;font-size:10px;line-height:1.15;color:#64748b;font-weight:850;white-space:nowrap}
.lesson-quickbar a.lesson-quickbar-daily{position:relative}
.lesson-quickbar a.lesson-quickbar-daily.is-complete{background:#ecfdf5;color:#15803d;box-shadow:inset 0 0 0 1px #bbf7d0}
.lesson-quickbar a.lesson-quickbar-daily.is-complete small{color:#15803d}
@media(max-width:760px){.lesson-quickbar a small{font-size:9px}}

/* v1.26.0.6 座位表姓名可讀性：姓名成為座位卡主視覺，並提供教室投影大字模式。 */
.seat-student-text strong{font-weight:900;color:#10213f}
.seat-student-number{
  display:inline-grid;
  place-items:center;
  min-width:22px;
  height:22px;
  padding:0 5px;
  border-radius:999px;
  background:#eef2ff;
  color:#3347a5;
  font-size:12px;
  line-height:1;
  font-weight:950;
}
.seat-student-name{font-weight:950;letter-spacing:.01em}
.seat-group-slots .seat-student-text strong{font-size:17px;line-height:1.25;gap:6px}
.seat-row-grid .seat-student-text strong{font-size:17px;line-height:1.25;gap:6px}
.seat-group-slots .seat-student-card,.seat-row-grid .seat-student-card{min-height:54px}

.seat-large-text-toggle{
  border:1px solid #cbd5e1;
  border-radius:9px;
  padding:7px 11px;
  background:#fff;
  color:#334155;
  font:inherit;
  font-size:12px;
  font-weight:900;
  cursor:pointer;
  white-space:nowrap;
}
.seat-large-text-toggle:hover{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8}
.seat-large-text-toggle.is-active{border-color:#60a5fa;background:#dbeafe;color:#1d4ed8;box-shadow:0 3px 9px rgba(37,99,235,.14)}

/* 大字模式：適合 86 吋大螢幕／投影；不改列印輸出。 */
.seat-stage.is-large-text .seat-group-slots .seat-student-card,
.seat-stage.is-large-text .seat-row-grid .seat-student-card{
  grid-template-columns:42px minmax(0,1fr);
  column-gap:9px;
  row-gap:7px;
  padding:9px 10px;
  min-height:66px;
}
.seat-stage.is-large-text .seat-group-slots .seat-student-card>.avatar,
.seat-stage.is-large-text .seat-row-grid .seat-student-card>.avatar{
  width:42px;
  height:42px;
  font-size:24px;
}
.seat-stage.is-large-text .seat-group-slots .seat-student-card .avatar-art-image,
.seat-stage.is-large-text .seat-row-grid .seat-student-card .avatar-art-image{width:42px;height:42px}
.seat-stage.is-large-text .seat-group-slots .seat-student-text strong,
.seat-stage.is-large-text .seat-row-grid .seat-student-text strong{
  font-size:21px;
  line-height:1.22;
  gap:7px;
}
.seat-stage.is-large-text .seat-student-number{min-width:25px;height:25px;padding:0 6px;font-size:13px}
.seat-stage.is-large-text .seat-position-label{opacity:.62;font-size:9px}
.seat-stage.is-large-text .seat-group-slots .seat-quick-actions button,
.seat-stage.is-large-text .seat-row-grid .seat-quick-actions button{min-width:40px;padding:6px 10px;font-size:14px}
.seat-stage.is-large-text .seat-group-slots .seat-slot{min-height:126px}
.seat-stage.is-large-text .seat-row-grid .seat-slot{min-height:120px}

/* 直排座位在窄欄時仍尊重自動密度，避免大字把卡片擠爆。 */
.seat-stage:not(.is-large-text)[data-seat-density="compact"] .seat-row-grid .seat-student-text strong{font-size:14px}
.seat-stage:not(.is-large-text)[data-seat-density="tight"] .seat-row-grid .seat-student-text strong{font-size:12.5px}
.seat-stage:not(.is-large-text)[data-seat-density="compact"] .seat-student-number{min-width:20px;height:20px;font-size:11px}
.seat-stage:not(.is-large-text)[data-seat-density="tight"] .seat-student-number{min-width:18px;height:18px;padding:0 4px;font-size:10px}

@media(max-width:1000px){
  .seat-group-slots .seat-student-text strong{font-size:15px}
  .seat-stage.is-large-text .seat-group-slots .seat-student-text strong{font-size:18px}
}
@media(max-width:620px){
  .seat-large-text-toggle{width:100%}
  .seat-group-slots .seat-student-text strong{font-size:14px}
  .seat-stage.is-large-text .seat-group-slots .seat-student-text strong{font-size:17px}
  .seat-stage.is-large-text .seat-group-slots .seat-student-card,
  .seat-stage.is-large-text .seat-row-grid .seat-student-card{grid-template-columns:36px minmax(0,1fr);padding:7px}
  .seat-stage.is-large-text .seat-group-slots .seat-student-card>.avatar,
  .seat-stage.is-large-text .seat-row-grid .seat-student-card>.avatar,
  .seat-stage.is-large-text .seat-group-slots .seat-student-card .avatar-art-image,
  .seat-stage.is-large-text .seat-row-grid .seat-student-card .avatar-art-image{width:36px;height:36px}
}
@media print{.seat-large-text-toggle{display:none!important}}

/* v1.27.0 不中斷上課：工作台快速面板與內嵌頁。 */
.workbench-panel-modal[hidden]{display:none!important}.workbench-panel-modal{position:fixed;z-index:3800;inset:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(720px,1180px);align-items:stretch}.workbench-panel-backdrop{grid-column:1/-1;grid-row:1;position:absolute;inset:0;background:rgba(15,23,42,.38);backdrop-filter:blur(2px)}.workbench-panel-shell{grid-column:2;grid-row:1;position:relative;z-index:2;margin:14px 14px 14px 0;display:grid;grid-template-rows:auto auto minmax(0,1fr);min-width:0;border:1px solid #cbd5e1;border-radius:22px;background:#f8fbff;box-shadow:-24px 0 70px rgba(15,23,42,.24);overflow:hidden}.workbench-panel-head{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 16px;border-bottom:1px solid #dbe5f0;background:#fff}.workbench-panel-head>div:first-child{display:grid;gap:1px}.workbench-panel-head small{font-size:.72rem;color:#64748b;font-weight:850}.workbench-panel-head strong{font-size:1.12rem;color:#0f2b55}.workbench-panel-close{width:38px;height:38px;border:0;border-radius:50%;background:#e8eef7;color:#334155;font:inherit;font-size:25px;font-weight:700;cursor:pointer}.workbench-panel-close:hover{background:#dce7f5}.workbench-panel-status{min-height:0;padding:0 16px;font-size:.83rem;font-weight:850;transition:.15s}.workbench-panel-status:not(:empty){padding-top:8px;padding-bottom:8px;border-bottom:1px solid #e2e8f0}.workbench-panel-status.is-loading{color:#475569;background:#f8fafc}.workbench-panel-status.is-success{color:#166534;background:#f0fdf4}.workbench-panel-frame{display:block;width:100%;height:100%;min-height:0;border:0;background:#f5f8fc}body.workbench-panel-open{overflow:hidden}
body.workbench-embed{background:#f5f8fc}body.workbench-embed .topbar,body.workbench-embed .active-lesson-return-strip,body.workbench-embed .class-nav,body.workbench-embed .page-heading,body.workbench-embed .site-footer,body.workbench-embed .issue-report-fab,body.workbench-embed .active-lesson-return-fab,body.workbench-embed .demo-mode-banner,body.workbench-embed .account-expiry-banner,body.workbench-embed .email-verify-banner{display:none!important}body.workbench-embed .container{width:100%;max-width:none;margin:0;padding:14px 16px 24px}body.workbench-embed .panel{box-shadow:none}body.workbench-embed .daily-top-panel{margin-top:0}body.workbench-embed .daily-notes-grid.is-homework-only{grid-template-columns:1fr;max-width:920px;margin:0 auto}body.workbench-embed.workbench-panel-homework .homework-panel{margin-top:0}body.workbench-embed.workbench-panel-homework .homework-textarea{min-height:220px;font-size:1.05rem;line-height:1.65}body.workbench-embed.workbench-panel-daily .daily-table-wrap{max-height:calc(100dvh - 250px);overflow:auto}body.workbench-embed.workbench-panel-daily .daily-dynamic-table thead th{position:sticky;top:0;z-index:8;background:#f8fafc}body.workbench-embed.workbench-panel-attendance .attendance-list{gap:8px}body.workbench-embed.workbench-panel-attendance .attendance-student-card{padding:10px 12px}
@media(max-width:980px){.workbench-panel-modal{grid-template-columns:1fr}.workbench-panel-shell{grid-column:1;margin:8px;border-radius:18px}.workbench-panel-head .actions .btn{display:none}}
@media(max-width:640px){.workbench-panel-shell{margin:0;border-radius:0}.workbench-panel-modal{grid-template-columns:1fr}.workbench-panel-head{padding:10px 12px}.workbench-panel-frame{min-height:calc(100dvh - 62px)}body.workbench-embed .container{padding:10px}.workbench-panel-head strong{font-size:1rem}}
body.workbench-embed .timer-dock,body.workbench-embed .timer-alarm-overlay{display:none!important}body.workbench-embed.workbench-panel-daily .daily-top-panel>.section-title>.actions{display:none}body.workbench-embed.workbench-panel-daily .alert.alert-info{margin-top:8px}

/* v1.27.1 不中斷上課第二階段：快速加點／抽籤／計時器內嵌工作台。 */
.workbench-panel-modal[data-active-panel="timer"]{grid-template-columns:minmax(0,1fr) minmax(600px,860px)}
body.workbench-embed.workbench-panel-quickpoints .container>.alert.alert-info{display:none!important}
body.workbench-embed.workbench-panel-quickpoints .quick-point-control{margin:0;border:0;background:transparent;padding:0;box-shadow:none}
body.workbench-embed.workbench-panel-quickpoints .quick-point-control>.section-title .btn{display:none}
body.workbench-embed.workbench-panel-quickpoints .quick-point-control~.panel{display:none!important}
body.workbench-embed.workbench-panel-quickpoints .quick-point-grid{max-height:calc(100dvh - 285px);overflow:auto;padding:2px 4px 8px}
body.workbench-embed.workbench-panel-quickpoints .quick-student-card{padding:11px 12px}
body.workbench-embed.workbench-panel-quickpoints .quick-student-main strong{font-size:1rem}
body.workbench-embed.workbench-panel-quickpoints .quick-point-toolbar{position:sticky;top:0;z-index:12;background:#f5f8fc;padding-bottom:8px}
body.workbench-embed.workbench-panel-quickpoints .quick-point-bulkbar{position:sticky;top:95px;z-index:11;background:#fff}

body.workbench-embed.workbench-panel-timer .container{display:grid;place-items:start center;padding-top:16px}
body.workbench-embed.workbench-panel-timer .timer-tool{width:min(760px,100%);margin:0;box-shadow:none}
body.workbench-embed.workbench-panel-timer .timer-stage{margin-top:14px}
body.workbench-embed.workbench-panel-timer .timer-display{font-size:clamp(4rem,10vw,7rem)}
body.workbench-embed.workbench-panel-timer .help{margin-bottom:0}

body.workbench-embed.workbench-panel-draw .draw-app>.panel:last-of-type{display:none!important}
body.workbench-embed.workbench-panel-draw .draw-layout{gap:12px}
body.workbench-embed.workbench-panel-draw .draw-stage,body.workbench-embed.workbench-panel-draw .draw-sidebar{box-shadow:none}
body.workbench-embed.workbench-panel-draw .wheel-shell{width:min(58vh,580px,100%)}
body.workbench-embed.workbench-panel-draw .participant-list{max-height:calc(100dvh - 260px)}
body.workbench-embed.workbench-panel-draw .draw-stage-title p{display:none}
@media(max-width:1050px){body.workbench-embed.workbench-panel-draw .draw-sidebar{display:none}body.workbench-embed.workbench-panel-draw .wheel-shell{width:min(64vh,620px,96vw)}}
@media(max-width:760px){.workbench-panel-modal[data-active-panel="timer"]{grid-template-columns:1fr}body.workbench-embed.workbench-panel-quickpoints .quick-point-grid{max-height:none;overflow:visible}body.workbench-embed.workbench-panel-quickpoints .quick-point-toolbar,body.workbench-embed.workbench-panel-quickpoints .quick-point-bulkbar{position:static}}


/* v1.27.2 不中斷上課第三階段：座位表大型工作台視窗＋作業投影黑板預設。 */
.workbench-panel-modal[data-active-panel="seat"]{grid-template-columns:1fr}
.workbench-panel-modal[data-active-panel="seat"] .workbench-panel-shell{grid-column:1;margin:8px;border-radius:18px}
body.workbench-embed.workbench-panel-seat{background:#eef4fb}
body.workbench-embed.workbench-panel-seat .container{padding:10px 12px 18px}
body.workbench-embed.workbench-panel-seat .seat-create-panel,
body.workbench-embed.workbench-panel-seat .seat-layout-list-panel,
body.workbench-embed.workbench-panel-seat .seat-layout-config-panel{display:none!important}
body.workbench-embed.workbench-panel-seat .seat-app{grid-template-columns:minmax(0,1fr);gap:0}
body.workbench-embed.workbench-panel-seat .seat-unassigned-panel{display:none!important}
body.workbench-embed.workbench-panel-seat .seat-stage{margin:0;padding:14px;min-height:calc(100dvh - 76px);border-radius:18px;background:#fff}
body.workbench-embed.workbench-panel-seat .seat-view-bar{position:sticky;top:0;z-index:24;margin:-2px 0 12px;padding:9px 10px;border:1px solid #dbe5f0;border-radius:14px;background:rgba(255,255,255,.96);box-shadow:0 8px 22px rgba(15,23,42,.08);backdrop-filter:blur(8px)}
body.workbench-embed.workbench-panel-seat .seat-group-row{max-width:none}
body.workbench-embed.workbench-panel-seat .seat-group-card{min-width:0}
body.workbench-embed.workbench-panel-seat .seat-print-title{display:flex}
.seat-workbench-hint{display:grid;grid-template-columns:38px minmax(0,1fr);gap:9px;align-items:center;margin:0 0 9px;padding:9px 12px;border:1px solid #bfdbfe;border-radius:14px;background:#eff6ff;color:#1e3a8a}
.seat-workbench-hint>span{font-size:1.2rem}.seat-workbench-hint>div{display:grid;gap:1px}.seat-workbench-hint strong{font-size:.9rem}.seat-workbench-hint small{font-size:.72rem;color:#64748b;line-height:1.4}
@media(max-width:760px){.workbench-panel-modal[data-active-panel="seat"] .workbench-panel-shell{margin:0;border-radius:0}body.workbench-embed.workbench-panel-seat .container{padding:7px}body.workbench-embed.workbench-panel-seat .seat-stage{padding:9px;border-radius:12px}.seat-workbench-hint small{display:none}}

/* v1.27.3 下課前 30 秒檢查＋本節摘要 */
.lesson-end-modal[hidden]{display:none!important}.lesson-end-modal{position:fixed;z-index:3900;inset:0;display:grid;place-items:center;padding:18px}.lesson-end-backdrop{position:absolute;inset:0;background:rgba(15,23,42,.46);backdrop-filter:blur(3px)}.lesson-end-shell{position:relative;z-index:2;width:min(820px,96vw);max-height:min(880px,94dvh);display:grid;grid-template-rows:auto minmax(0,1fr) auto;border:1px solid #dbe5f0;border-radius:24px;background:#f8fbff;box-shadow:0 28px 90px rgba(15,23,42,.32);overflow:hidden}.lesson-end-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:20px 22px 16px;border-bottom:1px solid #dbe5f0;background:linear-gradient(135deg,#effcf5,#fff 55%,#eff6ff)}.lesson-end-head>div{display:grid;gap:3px}.lesson-end-head small{color:#15803d;font-size:.76rem;font-weight:950}.lesson-end-head h2{margin:0;color:#0f2b55;font-size:1.42rem}.lesson-end-head p{margin:2px 0 0;color:#64748b;font-size:.84rem}.lesson-end-close{width:40px;height:40px;border:0;border-radius:50%;background:#e8eef7;color:#334155;font:inherit;font-size:26px;font-weight:800;cursor:pointer}.lesson-end-close:hover{background:#dce7f5}.lesson-end-loading{display:flex;align-items:center;justify-content:center;gap:12px;min-height:330px;padding:30px;color:#475569}.lesson-end-loading>span{font-size:1.55rem}.lesson-end-loading>div{display:grid;gap:3px}.lesson-end-loading small{color:#64748b}.lesson-end-content{overflow:auto;padding:18px 22px 20px}.lesson-end-overview{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:16px}.lesson-end-overview>div{display:grid;grid-template-columns:auto auto;align-items:baseline;justify-content:center;column-gap:4px;row-gap:1px;padding:13px 10px;border:1px solid #dbe5f0;border-radius:16px;background:#fff;text-align:center}.lesson-end-overview strong{font-size:1.55rem;color:#0f2b55}.lesson-end-overview span{font-size:.78rem;color:#64748b;font-weight:850}.lesson-end-overview small{grid-column:1/-1;color:#64748b;font-size:.72rem}.lesson-end-checklist{display:grid;gap:9px}.lesson-end-checklist article{display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:12px;padding:12px 13px;border:1px solid #e2e8f0;border-radius:15px;background:#fff}.lesson-end-checklist article.is-complete{border-color:#bbf7d0;background:#f0fdf4}.lesson-end-checklist article.is-warning{border-color:#fde68a;background:#fffbeb}.lesson-end-checklist article.is-unavailable{opacity:.68;background:#f8fafc}.lesson-end-check-icon{width:40px;height:40px;display:grid;place-items:center;border-radius:12px;background:#eff6ff;font-size:1.1rem;font-weight:950}.lesson-end-checklist article.is-complete .lesson-end-check-icon{background:#dcfce7;color:#15803d}.lesson-end-checklist article>div{display:grid;gap:2px;min-width:0}.lesson-end-checklist strong{color:#1e293b}.lesson-end-checklist small{color:#64748b;line-height:1.4}.lesson-end-note{margin-top:14px;padding:11px 13px;border-radius:13px;background:#fff7ed;border:1px solid #fed7aa;color:#9a3412;font-size:.84rem;font-weight:800}.lesson-end-note.is-complete{background:#ecfdf5;border-color:#bbf7d0;color:#166534}.lesson-end-actions{display:flex;justify-content:flex-end;gap:10px;padding:14px 20px;border-top:1px solid #dbe5f0;background:#fff}.lesson-end-actions .btn-lg{min-width:190px}body.lesson-end-open{overflow:hidden}
@media(max-width:700px){.lesson-end-modal{padding:0}.lesson-end-shell{width:100vw;max-height:100dvh;height:100dvh;border-radius:0}.lesson-end-head{padding:14px 15px}.lesson-end-head h2{font-size:1.18rem}.lesson-end-head p{display:none}.lesson-end-content{padding:13px 14px 16px}.lesson-end-overview{grid-template-columns:repeat(2,minmax(0,1fr))}.lesson-end-checklist article{grid-template-columns:38px minmax(0,1fr)}.lesson-end-checklist article .btn{grid-column:2;justify-self:start}.lesson-end-actions{padding:10px 12px}.lesson-end-actions .btn{flex:1}.lesson-end-actions .btn-lg{min-width:0}}

/* v1.27.4 座位表學生快速卡 */
.seat-student-quick-trigger{cursor:pointer}
.seat-student-quick-trigger:focus-visible{outline:3px solid #60a5fa;outline-offset:2px;border-radius:10px}
.seat-student-card .seat-student-quick-trigger:hover .seat-student-name,.seat-student-card .seat-student-quick-trigger:hover.seat-student-text .seat-student-name{color:#1d4ed8;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.seat-student-quick-modal[hidden]{display:none!important}
.seat-student-quick-modal{position:fixed;z-index:3550;inset:0;display:grid;place-items:center;padding:18px;background:rgba(15,23,42,.42);backdrop-filter:blur(3px)}
.seat-student-quick-shell{width:min(650px,calc(100vw - 28px));max-height:min(780px,calc(100dvh - 28px));overflow:auto;border:1px solid #dbe5f0;border-radius:24px;background:#f8fbff;box-shadow:0 28px 90px rgba(15,23,42,.30);transform:translateY(10px) scale(.985);opacity:.2;transition:.16s ease}
.seat-student-quick-shell.is-open{transform:none;opacity:1}
.seat-student-quick-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:18px 20px;border-bottom:1px solid #e2e8f0;background:rgba(248,251,255,.96);backdrop-filter:blur(8px)}
.seat-student-quick-person{display:flex;align-items:center;gap:12px;min-width:0}
.seat-student-quick-avatar{width:62px;height:62px;display:grid;place-items:center;flex:0 0 62px;border-radius:18px;background:linear-gradient(135deg,#eef2ff,#eff6ff);overflow:hidden}
.seat-student-quick-avatar>.avatar{width:56px!important;height:56px!important;display:grid;place-items:center;border-radius:16px;overflow:hidden}
.seat-student-quick-avatar .avatar-art-image{width:56px!important;height:56px!important;object-fit:contain}
.seat-student-quick-person>div{display:grid;gap:2px;min-width:0}.seat-student-quick-person small{font-size:.72rem;color:#64748b;font-weight:850}.seat-student-quick-person strong{font-size:1.35rem;color:#172554;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.seat-student-quick-person>div>span{font-size:.78rem;color:#475569;font-weight:800}
.seat-student-quick-head>button{width:42px;height:42px;border:0;border-radius:50%;background:#e8eef7;color:#334155;font:inherit;font-size:28px;line-height:1;cursor:pointer}.seat-student-quick-head>button:hover{background:#dbe7f5}
.seat-student-quick-status{margin:14px 20px 0;padding:9px 11px;border-radius:11px;background:#eef4fb;color:#475569;font-size:.82rem;font-weight:800;line-height:1.45}.seat-student-quick-status:empty{display:none}.seat-student-quick-status.is-success{background:#dcfce7;color:#166534}.seat-student-quick-status.is-error{background:#fee2e2;color:#991b1b}.seat-student-quick-status.is-info{background:#eff6ff;color:#1e40af}
.seat-student-quick-section{padding:16px 20px 2px}.seat-student-quick-section-title{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:9px}.seat-student-quick-section-title strong{font-size:.93rem;color:#27364c}.seat-student-quick-section-title small{font-size:.7rem;color:#64748b}
.seat-student-quick-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.seat-student-quick-actions button{min-height:92px;display:grid;grid-template-columns:40px minmax(0,1fr);grid-template-rows:auto auto;align-items:center;column-gap:10px;text-align:left;padding:12px 13px;border:1px solid #dbe5f0;border-radius:16px;background:#fff;color:#1f365f;font:inherit;cursor:pointer;box-shadow:0 5px 16px rgba(15,23,42,.04)}.seat-student-quick-actions button>span{grid-row:1/3;display:grid;place-items:center;width:40px;height:40px;border-radius:12px;background:#eff6ff;font-size:1.25rem}.seat-student-quick-actions button>strong{align-self:end;font-size:.94rem}.seat-student-quick-actions button>small{align-self:start;color:#64748b;font-size:.7rem}.seat-student-quick-actions button:hover:not(:disabled){border-color:#93c5fd;background:#f8fbff;transform:translateY(-1px)}.seat-student-quick-actions button:disabled{cursor:not-allowed;opacity:.62}.seat-student-quick-actions button.is-achieved{border-color:#86efac;background:#f0fdf4;color:#166534;opacity:1}.seat-student-quick-actions button.is-achieved>span{background:#dcfce7}.seat-student-quick-actions button.is-achieved>small{color:#15803d;font-weight:900}
.seat-student-quick-actions.is-daily button{min-height:86px}
.seat-student-quick-foot{display:flex;justify-content:space-between;gap:10px;padding:18px 20px 20px;margin-top:10px;border-top:1px solid #e2e8f0}.seat-student-quick-foot .btn{min-width:145px}
body.seat-student-quick-open{overflow:hidden}
@media(max-width:620px){.seat-student-quick-modal{padding:8px}.seat-student-quick-shell{width:100%;max-height:calc(100dvh - 16px);border-radius:18px}.seat-student-quick-head{padding:14px}.seat-student-quick-section{padding:14px 14px 2px}.seat-student-quick-status{margin:12px 14px 0}.seat-student-quick-actions{grid-template-columns:1fr}.seat-student-quick-actions button{min-height:74px}.seat-student-quick-foot{padding:14px;flex-direction:column}.seat-student-quick-foot .btn{width:100%}}
@media(prefers-reduced-motion:reduce){.seat-student-quick-shell{transition:none}}

/* v1.27.5 工作台：任務展開時把左側升級為大型「本節冒險夥伴舞台」。 */
.lesson-stage-label>em{font-style:normal;padding:4px 8px;border-radius:999px;background:rgba(255,255,255,.66);border:1px solid #e5e2f2;color:#776fa0;font-size:.62rem;font-weight:900;letter-spacing:.04em}
.lesson-stage-partner-footer{display:flex;align-items:center;justify-content:flex-start;gap:10px;flex-wrap:wrap;margin-top:9px}
.lesson-stage-partner-footer button{border:1px solid #d8d5ec;border-radius:999px;background:#fff;color:#5f55a5;font:inherit;font-size:.7rem;font-weight:900;padding:7px 11px;cursor:pointer;box-shadow:0 4px 12px rgba(69,61,120,.05)}
.lesson-stage-partner-footer button:hover{background:#f3f0ff;border-color:#c8c2ea}
.lesson-stage-partner-footer>span{color:#8490a3;font-size:.62rem;font-weight:750;line-height:1.4}
.lesson-stage-partner-status{display:grid;gap:2px;margin-top:10px;padding:9px 11px;border:1px dashed #d9dfeb;border-radius:12px;background:rgba(255,255,255,.58)}
.lesson-stage-partner-status strong{font-size:.72rem;color:#526078}
.lesson-stage-partner-status small{font-size:.62rem;color:#8290a4;line-height:1.45}
.lesson-stage-partner-status.has-interaction{border-style:solid;border-color:#ccebdc;background:rgba(239,252,245,.82)}
.lesson-stage-partner-status.has-interaction strong{color:#17704a}
.lesson-stage-partner-status.has-interaction small{color:#557969}

@media(min-width:1101px){
  .lesson-role-stage.is-mission-expanded .lesson-stage-main{grid-template-columns:minmax(430px,.92fr) minmax(560px,1.08fr)}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner{display:grid;grid-template-rows:auto minmax(0,1fr) auto;padding:17px 22px 16px;background:radial-gradient(circle at 27% 48%,rgba(255,255,255,.82),rgba(255,255,255,0) 46%)}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-body{grid-template-columns:190px minmax(0,1fr);gap:22px;min-height:245px;align-items:center}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-avatar{width:180px;height:180px;padding:10px;border-radius:40px;transition:width .2s ease,height .2s ease,transform .2s ease}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-art{font-size:4.6rem;filter:drop-shadow(0 10px 12px rgba(33,45,73,.16))}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-copy{gap:4px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-copy>strong{font-size:1.35rem;line-height:1.25;color:#172b49}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-copy>span{font-size:.82rem}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-meta{gap:7px;margin-top:5px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-meta b,.lesson-role-stage.is-mission-expanded .lesson-stage-partner-meta em{padding:5px 9px;font-size:.72rem}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-status{margin-top:13px;padding:11px 12px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-status strong{font-size:.8rem}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-status small{font-size:.67rem}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-footer{margin-top:3px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-footer button{padding:8px 12px;font-size:.72rem}
}

/* 任務收合時回到精簡舞台，避免左側單獨撐高整個區塊。 */
.lesson-role-stage.is-mission-collapsed .lesson-stage-partner-body{grid-template-columns:86px minmax(0,1fr);gap:13px;min-height:88px}
.lesson-role-stage.is-mission-collapsed .lesson-stage-partner-avatar{width:84px;height:84px;padding:6px;border-radius:24px}
.lesson-role-stage.is-mission-collapsed .lesson-stage-partner-status{display:none}
.lesson-role-stage.is-mission-collapsed .lesson-stage-partner-footer{margin-top:7px}
.lesson-role-stage.is-mission-collapsed .lesson-stage-partner-footer>span{display:none}
.lesson-role-stage.is-mission-collapsed .lesson-stage-partner-footer button{padding:5px 9px;font-size:.66rem}

@media(min-width:901px) and (max-width:1100px){
  .lesson-role-stage.is-mission-expanded .lesson-stage-main{grid-template-columns:minmax(330px,.82fr) minmax(0,1.18fr)!important}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-body{grid-template-columns:138px minmax(0,1fr);gap:15px;min-height:190px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-avatar{width:132px;height:132px;padding:8px;border-radius:30px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-art{font-size:3.4rem}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-copy>strong{font-size:1.15rem}
}
@media(max-width:900px){
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-body{grid-template-columns:132px minmax(0,1fr);gap:16px;min-height:165px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-avatar{width:126px;height:126px;padding:8px;border-radius:29px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-copy>strong{font-size:1.15rem}
}
@media(max-width:620px){
  .lesson-stage-label>em{display:none}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-body{grid-template-columns:96px minmax(0,1fr);gap:11px;min-height:120px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-avatar{width:92px;height:92px;padding:6px;border-radius:23px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-copy>strong{font-size:1rem}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-status{margin-top:7px;padding:7px 8px}
  .lesson-role-stage.is-mission-expanded .lesson-stage-partner-status small{display:none}
  .lesson-stage-partner-footer>span{display:none}
}
@media(prefers-reduced-motion:reduce){.lesson-role-stage.is-mission-expanded .lesson-stage-partner-avatar{transition:none!important}}

/* v1.27.6 本節最近操作 */
.lesson-action-history .lesson-live-item{grid-template-columns:38px minmax(0,1fr) auto}
.lesson-live-icon{width:36px;height:36px;display:grid;place-items:center;border-radius:12px;background:#f1f5f9;font-size:1.05rem;align-self:start}
.lesson-action-history .lesson-live-item.is-reversed .lesson-live-icon{filter:grayscale(1);opacity:.62}
.lesson-action-history .lesson-live-copy strong{white-space:normal;overflow-wrap:anywhere}
@media(max-width:640px){.lesson-action-history .lesson-live-item{grid-template-columns:36px minmax(0,1fr)}.lesson-action-history .lesson-live-item>.btn,.lesson-action-history .lesson-live-item>.badge{grid-column:2;justify-self:start}}

/* v1.28.0 登入首頁重構：教師今日入口 */
.page-heading:has(+ .dashboard-today-hero){display:none}
.dashboard-today-hero{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:26px;margin-bottom:16px;padding:24px 26px;border:1px solid #bfdbfe;border-radius:22px;background:linear-gradient(135deg,#eff6ff 0%,#f7fbff 48%,#f5f3ff 100%);box-shadow:0 14px 34px rgba(37,99,235,.08)}
.dashboard-today-copy{display:grid;gap:8px;min-width:0}.dashboard-greeting{font-size:.92rem;font-weight:900;color:#1d4ed8}.dashboard-date-line{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}.dashboard-date-line strong{font-size:clamp(1.9rem,4vw,2.7rem);line-height:1.1;color:#13233e}.dashboard-date-line span{font-size:1.08rem;color:#526176;font-weight:800}
.dashboard-now-message{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-top:3px}.dashboard-now-message>span{padding:5px 9px;border-radius:999px;background:#e0e7ff;color:#4338ca;font-size:.76rem;font-weight:950}.dashboard-now-message>strong{font-size:1.15rem;color:#172b4d}.dashboard-now-message>small{color:#64748b;font-weight:750}.dashboard-now-message.is-live>span{background:#dcfce7;color:#15803d}.dashboard-now-message.is-current>span{background:#dbeafe;color:#1d4ed8}.dashboard-now-message.is-done>span{background:#dcfce7;color:#166534}.dashboard-now-message.is-rest>span{background:#ecfdf5;color:#047857}
.dashboard-next-day{font-size:.86rem;color:#64748b}.dashboard-next-day strong{color:#334155}.dashboard-next-day span{color:#1d4ed8;font-weight:900}.dashboard-term-label{font-size:.78rem;color:#7b8798}.dashboard-term-label span{display:inline-flex;margin-left:7px;padding:2px 7px;border-radius:999px;background:#dcfce7;color:#166534;font-size:.68rem;font-weight:900}.dashboard-hero-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;max-width:420px}
.dashboard-quick-launch{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin:0 0 18px;padding:10px;border:1px solid #dbe3ef;border-radius:18px;background:rgba(255,255,255,.92);box-shadow:0 10px 28px rgba(15,23,42,.07)}.dashboard-quick-launch a{min-width:0;min-height:88px;display:grid;place-items:center;align-content:center;text-align:center;gap:2px;padding:10px;border:1px solid transparent;border-radius:14px;color:#27364c;text-decoration:none}.dashboard-quick-launch a:hover{border-color:#bfdbfe;background:#f0f7ff;text-decoration:none}.dashboard-quick-launch a.is-primary{background:linear-gradient(145deg,#eff6ff,#f5f3ff);border-color:#bfdbfe}.dashboard-quick-launch a>span{font-size:1.45rem}.dashboard-quick-launch a>strong{font-size:.9rem}.dashboard-quick-launch a>small{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#7b8798;font-size:.68rem}
.dashboard-today-classes{padding:17px 18px}.dashboard-class-strip{display:flex;gap:9px;overflow-x:auto;padding-bottom:2px}.dashboard-class-strip>a{min-width:178px;display:grid;gap:2px;padding:11px 13px;border:1px solid #dbe3ef;border-radius:13px;background:#fff;color:#1f2f49;text-decoration:none}.dashboard-class-strip>a:hover{border-color:#93c5fd;background:#f8fbff;text-decoration:none}.dashboard-class-strip>a.is-current{border-color:#60a5fa;background:#eff6ff}.dashboard-class-strip span{font-size:.72rem;color:#64748b;font-weight:850}.dashboard-class-strip strong{font-size:.95rem}.dashboard-class-strip small{font-size:.68rem;color:#7b8798}
.dashboard-no-class-card{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px;padding:15px 18px;border:1px solid #d1fae5;border-radius:17px;background:linear-gradient(135deg,#f0fdf4,#fff);box-shadow:0 8px 22px rgba(15,118,110,.05)}.dashboard-no-class-card>div{display:grid;grid-template-columns:42px minmax(0,1fr);align-items:center;gap:10px}.dashboard-no-class-card>div>span{width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:#dcfce7;font-size:1.25rem}.dashboard-no-class-card section{display:grid;gap:1px}.dashboard-no-class-card strong{color:#14532d}.dashboard-no-class-card small{color:#64748b}
.dashboard-materials-panel{margin-bottom:18px}.dashboard-material-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.dashboard-classes-panel{margin-bottom:18px}.dashboard-class-cards{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.dashboard-class-cards article{min-width:0;display:grid;gap:8px;padding:13px;border:1px solid #dbe3ef;border-radius:14px;background:#fff}.dashboard-class-cards article>div:first-child{display:flex;align-items:center;justify-content:space-between;gap:7px}.dashboard-class-cards article>div:first-child strong{font-size:1.1rem;color:#162a49}.dashboard-class-cards article>div:first-child span{padding:2px 7px;border-radius:999px;background:#eef2f7;color:#526176;font-size:.69rem;font-weight:850}.dashboard-class-cards article>small{color:#64748b;font-size:.72rem}.dashboard-class-cards .actions{gap:5px}.dashboard-class-cards .btn{flex:1;white-space:nowrap}
.dashboard-secondary-grid{align-items:start}.dashboard-overview{padding:0;overflow:hidden}.dashboard-overview>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 18px;cursor:pointer;list-style:none;font-weight:900;color:#334155}.dashboard-overview>summary::-webkit-details-marker{display:none}.dashboard-overview>summary::after{content:'展開';margin-left:auto;padding:3px 8px;border-radius:999px;background:#eef2f7;color:#64748b;font-size:.68rem}.dashboard-overview[open]>summary::after{content:'收合'}.dashboard-overview>summary small{font-weight:650;color:#94a3b8}.dashboard-overview-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;padding:0 18px 18px}.dashboard-overview-grid>div{padding:12px;border:1px solid #e2e8f0;border-radius:12px;background:#f8fafc}.dashboard-overview-grid span{display:block;color:#64748b;font-size:.72rem;font-weight:800}.dashboard-overview-grid strong{display:block;margin-top:3px;font-size:1.45rem;color:#142640}
@media(max-width:1100px){.dashboard-today-hero{grid-template-columns:1fr}.dashboard-hero-actions{justify-content:flex-start;max-width:none}.dashboard-quick-launch{grid-template-columns:repeat(3,minmax(0,1fr))}.dashboard-material-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-class-cards{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:720px){.dashboard-today-hero{padding:18px}.dashboard-hero-actions{width:100%}.dashboard-hero-actions .btn{flex:1}.dashboard-quick-launch{grid-template-columns:repeat(2,minmax(0,1fr));padding:7px}.dashboard-quick-launch a{min-height:76px}.dashboard-material-grid{grid-template-columns:1fr}.dashboard-class-cards{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-no-class-card{align-items:flex-start;flex-direction:column}.dashboard-overview>summary{align-items:flex-start;flex-direction:column}.dashboard-overview>summary::after{position:absolute;right:24px}.dashboard-overview-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:460px){.dashboard-class-cards{grid-template-columns:1fr}.dashboard-date-line strong{font-size:1.8rem}.dashboard-overview-grid{grid-template-columns:1fr}}

/* v1.28.1 全站視覺一致化：導覽、卡片、按鈕、表單與 Toast */
:root{
  --bg:#f4f7fb;--panel:#fff;--text:#17233a;--muted:#65758b;--line:#dce5f0;
  --primary:#2563eb;--primary-dark:#1d4ed8;--success:#15803d;--danger:#b91c1c;--warning:#a16207;
  --radius-sm:10px;--radius-md:14px;--radius-lg:18px;--radius-xl:22px;
  --shadow-sm:0 5px 16px rgba(15,23,42,.05);--shadow:0 12px 32px rgba(15,23,42,.075);--shadow-hover:0 16px 38px rgba(15,23,42,.105)
}
html{scrollbar-gutter:stable}body{background:radial-gradient(circle at 12% 0,rgba(219,234,254,.32),transparent 28%),var(--bg);color:var(--text);font-size:15px;letter-spacing:.005em}
a{transition:color .16s ease,background-color .16s ease,border-color .16s ease,box-shadow .16s ease,transform .16s ease}
.topbar{min-height:68px;padding:8px max(22px,calc((100vw - 1280px)/2));gap:20px;background:linear-gradient(100deg,#10233f,#132b4c 68%,#17355b);border-bottom:1px solid rgba(255,255,255,.08);box-shadow:0 5px 18px rgba(15,23,42,.12)}
.brand{flex:0 0 auto;gap:10px;font-size:18px}.brand-mark{width:44px;height:44px;display:grid;place-items:center;border-radius:13px;overflow:hidden;background:#fff;box-shadow:0 4px 13px rgba(0,0,0,.18),inset 0 0 0 1px rgba(255,255,255,.14)}.brand-mark img{display:block;width:100%;height:100%;object-fit:cover}.brand-copy{display:grid;gap:0;line-height:1.15}.brand-copy strong{font-size:18px;white-space:nowrap}.brand-copy small{font-size:10px;color:#a9bdd9;font-weight:700;margin-top:3px}
.main-nav{min-width:0;display:flex;align-items:center;justify-content:flex-end;gap:4px}.main-nav-link,.main-nav-menu>summary{min-height:42px;display:inline-flex;align-items:center;gap:5px;padding:9px 11px;border:1px solid transparent;border-radius:12px;color:#dce8f8;font-size:13px;font-weight:780;line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer;list-style:none}.main-nav-menu>summary::-webkit-details-marker{display:none}.main-nav-link:hover,.main-nav-menu>summary:hover{background:rgba(255,255,255,.09);color:#fff;text-decoration:none}.main-nav-link.is-active,.main-nav-menu.is-active>summary{background:#fff;color:#163660;border-color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.12)}.active-lesson-nav{background:#dcfce7!important;color:#166534!important;border-color:#bbf7d0!important}.active-lesson-nav:hover{background:#bbf7d0!important}.main-nav-menu{position:relative}.main-nav-popover{position:absolute;z-index:2200;right:0;top:calc(100% + 8px);width:220px;display:grid;gap:3px;padding:8px;border:1px solid #dce5f0;border-radius:15px;background:#fff;box-shadow:0 20px 55px rgba(15,23,42,.2)}.main-nav-popover a{display:flex;align-items:center;min-height:38px;padding:8px 10px;border-radius:9px;color:#243650;font-size:13px;font-weight:720;text-decoration:none}.main-nav-popover a:hover{background:#eff6ff;color:#1d4ed8;text-decoration:none}.main-nav-account>summary{padding:5px 8px 5px 5px}.teacher-avatar{width:32px;height:32px;display:grid;place-items:center;border-radius:10px;background:linear-gradient(135deg,#e0e7ff,#dbeafe);color:#1e3a8a;font-weight:950}.nav-count{min-width:18px;height:18px;display:inline-grid;place-items:center;padding:0 4px;border-radius:999px;background:#fee2e2;color:#b91c1c;font-size:10px}.main-nav-account-popover{width:185px}
.class-nav{padding:9px max(18px,calc((100vw - 1280px)/2));gap:14px;background:rgba(255,255,255,.96);border-bottom-color:#e3eaf3;box-shadow:0 3px 12px rgba(15,23,42,.035);backdrop-filter:blur(10px)}.class-nav-title{display:flex;align-items:center;gap:8px;padding-right:5px}.class-nav-title strong{color:#183153;font-size:13px}.class-public-link{padding:5px 8px;border-radius:8px;background:#eff6ff;font-size:11px;font-weight:800}.class-nav-menu>summary{border-radius:10px}.class-nav-menu[open]>summary{box-shadow:0 0 0 2px rgba(37,99,235,.08)}
.container{width:min(1240px,calc(100% - 36px));margin:26px auto 64px}.page-heading{margin:0 0 18px}.page-heading h1{font-size:clamp(25px,2.4vw,32px);font-weight:900;letter-spacing:-.025em;color:#112744}
.panel,.card{border-color:var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow);background:rgba(255,255,255,.98)}.panel{padding:21px}.panel:hover{border-color:#d2deec}.panel h2,.panel h3,.card h2,.card h3{color:#172f50;letter-spacing:-.012em}.section-title h2,.section-title h3{margin-bottom:2px}.section-title .muted{font-size:13px}
.btn{min-height:39px;border-radius:11px;padding:9px 14px;font-weight:800;box-shadow:0 1px 0 rgba(15,23,42,.04);transition:transform .14s ease,box-shadow .14s ease,background-color .14s ease,border-color .14s ease}.btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 7px 16px rgba(15,23,42,.10)}.btn:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 7px rgba(15,23,42,.08)}.btn-primary{background:linear-gradient(180deg,#2f6df4,#2563eb)}.btn-secondary{background:#eef3f9;color:#253a57;border:1px solid #e0e7f0}.btn-secondary:hover{background:#e4ecf6}.btn-success{background:linear-gradient(180deg,#199447,#15803d)}.btn-danger{background:linear-gradient(180deg,#cf2f2f,#b91c1c)}.btn-warning{background:linear-gradient(180deg,#e18a10,#c56a05)}.btn-sm{min-height:32px;border-radius:9px;padding:6px 10px;font-size:12px}.btn-lg{border-radius:13px}
input[type=text],input[type=password],input[type=email],input[type=date],input[type=time],input[type=number],input[type=file],select,textarea{border-color:#c8d4e3;border-radius:10px;background:#fff;transition:border-color .14s ease,box-shadow .14s ease,background-color .14s ease}input:focus,select:focus,textarea:focus{outline:0;border-color:#6b9cf8;box-shadow:0 0 0 3px rgba(37,99,235,.11)}
.table-wrap{border-color:#dce5f0;border-radius:14px;background:#fff}.table th{background:#f3f6fa;color:#3b4b61;font-size:13px}.table tr:hover td{background:#f8fbff}.badge{border-radius:999px;font-weight:800}
.alert{border:1px solid transparent;border-radius:12px;padding:12px 14px;box-shadow:0 4px 14px rgba(15,23,42,.035)}.alert-success{border-color:#bbf7d0}.alert-danger{border-color:#fecaca}.alert-warning{border-color:#fde68a}.alert-info{border-color:#bfdbfe}
.empty{padding:34px 24px;border:1px dashed #cbd7e5;border-radius:14px;background:#f8fbff;color:#6b7b90}

/* 伺服器 flash 改成非阻塞式 Toast；沒有 JS 時仍保留原 alert。 */
.site-toast-stack{position:fixed;z-index:5200;right:18px;top:18px;width:min(390px,calc(100vw - 28px));display:grid;gap:10px;pointer-events:none}.site-toast{pointer-events:auto;display:grid;grid-template-columns:34px minmax(0,1fr) 28px;align-items:center;gap:9px;padding:12px 12px;border:1px solid #d8e3ef;border-radius:15px;background:rgba(255,255,255,.98);color:#20334f;box-shadow:0 18px 48px rgba(15,23,42,.2);opacity:0;transform:translateY(-8px) scale(.98);transition:opacity .18s ease,transform .18s ease}.site-toast.is-visible{opacity:1;transform:translateY(0) scale(1)}.site-toast-icon{width:34px;height:34px;display:grid;place-items:center;border-radius:10px;background:#eff6ff;font-size:16px}.site-toast-message{font-size:13px;font-weight:780;line-height:1.45}.site-toast-close{width:28px;height:28px;border:0;border-radius:8px;background:transparent;color:#64748b;font:inherit;font-size:19px;cursor:pointer}.site-toast-close:hover{background:#f1f5f9}.site-toast.is-success{border-color:#bbf7d0}.site-toast.is-success .site-toast-icon{background:#dcfce7;color:#166534}.site-toast.is-warning{border-color:#fde68a}.site-toast.is-warning .site-toast-icon{background:#fef3c7;color:#92400e}.site-toast.is-danger,.site-toast.is-error{border-color:#fecaca}.site-toast.is-danger .site-toast-icon,.site-toast.is-error .site-toast-icon{background:#fee2e2;color:#991b1b}.site-toast.is-info .site-toast-icon{background:#dbeafe;color:#1e40af}.site-flash.is-toast-source{display:none!important}

@media(max-width:1120px){.topbar{align-items:flex-start;flex-direction:column;padding:10px 16px}.main-nav{width:100%;justify-content:flex-start;overflow-x:auto;padding-bottom:2px}.main-nav-link,.main-nav-menu>summary{min-height:38px}.main-nav-menu{position:static}.main-nav-popover{position:fixed;left:12px;right:12px;top:116px;width:auto;max-height:calc(100dvh - 132px);overflow:auto}.class-nav{padding-left:14px;padding-right:14px}.container{width:min(100% - 22px,1240px)}}
@media(max-width:680px){body{font-size:14px}.topbar{gap:8px}.brand-mark{width:38px;height:38px;border-radius:11px}.brand-copy strong{font-size:16px}.main-nav-link,.main-nav-menu>summary{padding:8px 9px;font-size:12px}.main-nav-account>summary>span:last-child{display:none}.teacher-avatar{width:30px;height:30px}.container{margin-top:18px}.panel{padding:16px;border-radius:16px}.page-heading h1{font-size:24px}.site-toast-stack{top:10px;right:10px;width:calc(100vw - 20px)}}
@media(prefers-reduced-motion:reduce){a,.btn,.site-toast{transition:none!important}.btn:hover:not(:disabled){transform:none}}
.alert-error{background:#fee2e2;color:#991b1b;border-color:#fecaca}
.dashboard-quick-launch a,.dashboard-class-cards article,.pdf-quick-card{transition:transform .16s ease,border-color .16s ease,box-shadow .16s ease,background-color .16s ease}.dashboard-quick-launch a:hover,.dashboard-class-cards article:hover,.pdf-quick-card:hover{transform:translateY(-2px);border-color:#c4d8ee;box-shadow:var(--shadow-sm)}.dashboard-class-cards article:hover{background:#fbfdff}.pdf-quick-card.is-primary:hover{border-color:#8b5cf6}
@media(prefers-reduced-motion:reduce){.dashboard-quick-launch a,.dashboard-class-cards article,.pdf-quick-card{transition:none!important}.dashboard-quick-launch a:hover,.dashboard-class-cards article:hover,.pdf-quick-card:hover{transform:none}}

/* v1.28.1.1：頂部只在倒數進行中顯示計時狀態；帳號選單恢復有效期限資訊。 */
.topbar-timer-status{min-width:86px;justify-content:center;background:rgba(15,118,110,.18)!important;border-color:rgba(94,234,212,.36)!important;color:#d9fff7!important;font-variant-numeric:tabular-nums}
.topbar-timer-status[hidden]{display:none!important}
.topbar-timer-status strong{font-size:13px;letter-spacing:.02em}
.topbar-timer-status.is-warning{background:rgba(180,83,9,.28)!important;border-color:rgba(253,186,116,.52)!important;color:#fff7ed!important;animation:topbarTimerPulse 1.2s ease-in-out infinite}
@keyframes topbarTimerPulse{50%{box-shadow:0 0 0 4px rgba(251,146,60,.12)}}
.account-menu-chevron{font-size:12px;color:#b8c9e1;margin-left:1px;transition:transform .16s ease}
.main-nav-account[open] .account-menu-chevron{transform:rotate(180deg)}
.main-nav-account-popover{width:230px}
.account-menu-card{display:grid;gap:2px;margin:0 0 5px;padding:10px 11px 11px;border-bottom:1px solid #e6edf5;color:#1f334f}
.account-menu-card>strong{font-size:14px}
.account-menu-card>small{font-size:11px;color:#7b8ba2;font-weight:700}
.account-expiry-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:2px 8px;margin-top:8px;padding:8px 9px;border:1px solid #dbe7df;border-radius:10px;background:#f3fbf6}
.account-expiry-row>span{font-size:11px;color:#52677c;font-weight:800}
.account-expiry-row>strong{font-size:12px;color:#166534;font-variant-numeric:tabular-nums}
.account-expiry-row>small{grid-column:1/-1;font-size:10px;color:#64748b;font-weight:700}
.account-expiry-row.is-warning{border-color:#fde68a;background:#fffbeb}.account-expiry-row.is-warning>strong{color:#b45309}
.account-expiry-row.is-expired{border-color:#fecaca;background:#fff1f2}.account-expiry-row.is-expired>strong{color:#b91c1c}
.account-expiry-row.is-demo{grid-template-columns:1fr;border-color:#c7d2fe;background:#eef2ff}.account-expiry-row.is-demo>span{color:#4338ca}
@media(max-width:680px){.topbar-timer-status{min-width:78px}.main-nav-account-popover{width:auto}.account-menu-chevron{display:none}}
@media(prefers-reduced-motion:reduce){.topbar-timer-status.is-warning{animation:none!important}.account-menu-chevron{transition:none!important}}

/* v1.28.2 上課狀態與完成狀態強化 */
.active-lesson-mini-bar{background:linear-gradient(90deg,#f0fdf4,#eff6ff 60%,#f5f3ff);border-bottom-color:#d7e5ef;box-shadow:0 4px 14px rgba(15,23,42,.055)}
.active-lesson-mini-bar .active-lesson-return-strip-inner{min-height:40px;padding:4px 0;gap:9px}
.active-lesson-mini-bar .active-lesson-return-copy{gap:10px}.active-lesson-mini-bar .active-lesson-return-copy strong{display:inline-flex;align-items:center;gap:7px;font-size:.82rem}.active-lesson-mini-bar .active-lesson-return-copy small{font-size:.68rem}.active-lesson-mini-badge{display:inline-flex;align-items:center;padding:3px 7px;border-radius:999px;background:#dcfce7;color:#15803d;font-size:.62rem;font-weight:950;letter-spacing:.02em}
.active-lesson-mini-timer{display:inline-flex;align-items:center;gap:5px;flex:0 0 auto;padding:6px 9px;border:1px solid #99f6e4;border-radius:999px;background:#f0fdfa;color:#0f766e!important;font-size:.72rem;font-weight:950;text-decoration:none;font-variant-numeric:tabular-nums}.active-lesson-mini-timer[hidden]{display:none!important}.active-lesson-mini-timer:hover{background:#ccfbf1;text-decoration:none}.active-lesson-mini-timer.is-warning{border-color:#fdba74;background:#fff7ed;color:#c2410c!important;animation:topbarTimerPulse 1.2s ease-in-out infinite}
.active-lesson-return-strip-link{padding:6px 10px;font-size:.72rem}.active-lesson-return-strip-link kbd{font-size:.58rem}
/* 桌機只保留上方 Mini Bar；手機才用底部返回按鈕，避免兩個入口同時出現。 */
.active-lesson-return-fab{display:none}

.lesson-quickbar a.lesson-quickbar-status{position:relative}
.lesson-quickbar a.lesson-quickbar-status.is-complete{background:#ecfdf5;color:#15803d;box-shadow:inset 0 0 0 1px #bbf7d0}
.lesson-quickbar a.lesson-quickbar-status.is-complete small{color:#15803d}
.lesson-quickbar a.lesson-quickbar-status:not(.is-complete) small{color:#8a6a14}
.lesson-completion-strip{display:grid;grid-template-columns:auto repeat(4,minmax(0,1fr));gap:8px;align-items:stretch;margin:-8px 0 18px;padding:9px;border:1px solid #dfe7f0;border-radius:16px;background:linear-gradient(135deg,#fbfdff,#f8fbff);box-shadow:0 7px 20px rgba(15,23,42,.045)}
.lesson-completion-strip-title{display:grid;align-content:center;gap:0;padding:4px 10px 4px 4px;min-width:112px}.lesson-completion-strip-title>span{font-size:1.05rem}.lesson-completion-strip-title strong{font-size:.78rem;color:#31445f}.lesson-completion-strip-title small{font-size:.61rem;color:#8a98aa}
.lesson-completion-chip{min-width:0;display:grid;grid-template-columns:30px minmax(0,1fr);align-items:center;gap:7px;padding:8px 10px;border:1px solid #e1e8f0;border-radius:12px;background:#fff;color:#263a55;text-decoration:none}.lesson-completion-chip:hover{border-color:#bfdbfe;background:#f8fbff;text-decoration:none}.lesson-completion-chip>span{width:30px;height:30px;display:grid;place-items:center;border-radius:10px;background:#f1f5f9;font-size:.95rem}.lesson-completion-chip>div{display:grid;gap:1px;min-width:0}.lesson-completion-chip strong{font-size:.75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson-completion-chip small{font-size:.62rem;color:#8a6a14;font-weight:850;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson-completion-chip.is-complete{border-color:#bbf7d0;background:#f0fdf4}.lesson-completion-chip.is-complete>span{background:#dcfce7}.lesson-completion-chip.is-complete strong,.lesson-completion-chip.is-complete small{color:#15803d}.lesson-completion-chip.is-pending:hover{border-color:#fde68a;background:#fffbeb}
@media(max-width:1050px){.lesson-completion-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.lesson-completion-strip-title{grid-column:1/-1;display:flex;align-items:center;gap:7px;padding:2px 4px;min-width:0}.lesson-completion-strip-title small{margin-left:auto}}
@media(max-width:760px){.active-lesson-mini-bar{display:none}.active-lesson-return-fab{display:flex}.lesson-completion-strip{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:-5px}.lesson-completion-chip{padding:7px 8px}.lesson-completion-chip strong{font-size:.72rem}}
@media(max-width:440px){.lesson-completion-strip{grid-template-columns:1fr}.lesson-completion-strip-title{grid-column:auto}.lesson-completion-strip-title small{display:none}}
@media(prefers-reduced-motion:reduce){.active-lesson-mini-timer.is-warning{animation:none!important}}

/* v1.28.3 工作台個人化＋介面一致化 */
.lesson-quickbar-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:2px 2px 7px;padding:0 4px}
.lesson-quickbar-head>div{display:flex;align-items:center;gap:8px;min-width:0}.lesson-quickbar-head>div>span{font-size:1rem}.lesson-quickbar-head>div>div{display:grid;gap:0}.lesson-quickbar-head strong{font-size:.82rem;color:#334155}.lesson-quickbar-head small{font-size:.66rem;color:#94a3b8}
.lesson-quickbar-customize{border:1px solid #dbe5f0;border-radius:999px;background:#fff;color:#53657d;padding:6px 10px;font:inherit;font-size:.72rem;font-weight:850;cursor:pointer;white-space:nowrap}.lesson-quickbar-customize:hover,.lesson-quickbar-customize.is-active{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8}
.lesson-quickbar.is-reordering{outline:2px dashed #93c5fd;outline-offset:3px;background:#f8fbff}.lesson-quickbar.is-reordering a{position:relative;cursor:grab;user-select:none}.lesson-quickbar.is-reordering a:active{cursor:grabbing}.lesson-quickbar.is-reordering a::after{content:"⋮⋮";position:absolute;right:7px;top:5px;color:#7c93b3;font-size:.78rem;letter-spacing:-3px}.lesson-quickbar.is-reordering a.is-dragging{opacity:.42;transform:scale(.97);box-shadow:0 0 0 2px #93c5fd inset}
[data-workbench-collapsible]{transition:padding .18s ease,box-shadow .18s ease}.workbench-collapse-toggle{min-width:52px}.workbench-collapsed{padding-bottom:12px!important}.workbench-collapsed>.section-title{margin-bottom:0!important}.workbench-collapsed>:not(.section-title){display:none!important}.workbench-collapsed .section-title .muted{display:none}.workbench-collapsed .section-title{align-items:center}
.workbench-panel-heading{display:grid;gap:1px;min-width:0}.workbench-panel-heading>span{font-size:.72rem;color:#64748b;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.workbench-panel-head .actions{display:flex;align-items:center;gap:8px}
@media(max-width:760px){.lesson-quickbar-head small{display:none}.lesson-quickbar-customize{font-size:.68rem;padding:5px 9px}.workbench-panel-heading>span{font-size:.66rem}}
@media(max-width:520px){.lesson-quickbar-head{margin-top:0}.lesson-quickbar-head strong{font-size:.76rem}.lesson-quickbar-customize{padding:5px 8px}.workbench-collapse-toggle{min-width:auto}}

/* v1.28.4 系統管理員 Google Authenticator 雙重驗證 */
.login-two-factor-note{margin:10px 0 0;color:#64748b;font-size:.82rem;text-align:center}
.two-factor-shell{min-height:calc(100vh - 90px);display:grid;place-items:center;padding:32px 18px;background:radial-gradient(circle at 20% 10%,rgba(59,130,246,.08),transparent 32%),radial-gradient(circle at 90% 80%,rgba(16,185,129,.08),transparent 28%),#f5f8fc}
.two-factor-card{width:min(760px,100%);padding:30px;border-radius:24px;box-shadow:0 22px 65px rgba(15,23,42,.12)}
.two-factor-card.is-verify{width:min(560px,100%)}
.two-factor-brand{display:flex;align-items:center;gap:8px;color:#0f2b55;margin-bottom:16px}.two-factor-brand strong{font-size:1rem}
.two-factor-kicker{display:inline-flex;padding:6px 10px;border-radius:999px;background:#eef6ff;color:#1d4ed8;font-size:.8rem;font-weight:900}
.two-factor-card h1{margin:10px 0 6px;font-size:clamp(28px,5vw,40px);color:#10213f}
.two-factor-steps{display:grid;gap:9px;margin:20px 0;padding:0;list-style:none;counter-reset:tf}
.two-factor-steps li{counter-increment:tf;display:grid;grid-template-columns:34px minmax(0,1fr);gap:2px 10px;padding:11px 12px;border:1px solid #e2e8f0;border-radius:14px;background:#fbfdff}.two-factor-steps li::before{content:counter(tf);grid-row:1/3;width:30px;height:30px;display:grid;place-items:center;border-radius:50%;background:#1d4ed8;color:#fff;font-weight:900}.two-factor-steps strong{color:#1e293b}.two-factor-steps span{color:#64748b;font-size:.82rem}
.two-factor-setup-grid{display:grid;grid-template-columns:minmax(260px,.9fr) minmax(0,1.1fr);gap:22px;align-items:center;margin:18px 0 22px}.two-factor-qr-wrap{display:grid;place-items:center}.two-factor-qr{padding:12px;border:1px solid #dbe5f0;border-radius:20px;background:#fff;box-shadow:0 9px 25px rgba(15,23,42,.07)}.two-factor-qr canvas{display:block;max-width:100%;height:auto}
.two-factor-manual{display:grid;gap:8px;padding:16px;border:1px solid #dbe5f0;border-radius:16px;background:#f8fbff}.two-factor-manual>span{font-weight:800;color:#334155}.two-factor-manual code{display:block;padding:12px;border-radius:12px;background:#0f172a;color:#f8fafc;font-size:1rem;letter-spacing:.11em;overflow-wrap:anywhere}.two-factor-manual small{color:#64748b;line-height:1.45}
.two-factor-code-form{display:grid;gap:10px}.two-factor-code-form label{font-weight:900;color:#334155}.two-factor-code-form input[name=code]{font-size:2rem;letter-spacing:.22em;text-align:center;font-weight:900}.two-factor-code-form input[name=recovery_code]{font-size:1.25rem;letter-spacing:.08em;text-align:center;font-weight:850;text-transform:uppercase}.two-factor-code-form .btn{margin-top:4px}
.two-factor-foot{text-align:center;margin-top:18px}.two-factor-foot a,.two-factor-switch a,.link-button{color:#475569;font-weight:800}.link-button{border:0;background:transparent;font:inherit;cursor:pointer;text-decoration:underline}
.two-factor-account{display:grid;gap:2px;margin:18px 0;padding:14px 16px;border-radius:16px;background:#f8fbff;border:1px solid #dbe5f0}.two-factor-account span{font-size:.75rem;font-weight:850;color:#64748b}.two-factor-account strong{font-size:1.1rem;color:#10213f}.two-factor-account small{color:#64748b}
.two-factor-switch{text-align:center;margin:14px 0 0;font-size:.86rem}
.two-factor-recovery-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin:18px 0}.two-factor-recovery-grid code{display:block;padding:12px;border:1px solid #dbe5f0;border-radius:12px;background:#f8fafc;text-align:center;font-size:1rem;font-weight:900;letter-spacing:.08em}.two-factor-recovery-actions{justify-content:center}
.two-factor-account-panel .two-factor-status-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.two-factor-manage-grid{margin-top:16px}.two-factor-manage-grid details{padding:13px;border:1px solid #dbe5f0;border-radius:14px;background:#fbfdff}.two-factor-manage-grid summary{cursor:pointer;font-weight:900;color:#163a70}.two-factor-manage-form{display:grid;gap:8px;margin-top:12px}.two-factor-manage-form label{font-size:.82rem;font-weight:850;color:#475569}.two-factor-manage-form button{margin-top:4px}
@media(max-width:720px){.two-factor-card{padding:22px}.two-factor-setup-grid{grid-template-columns:1fr}.two-factor-recovery-grid{grid-template-columns:1fr}.two-factor-account-panel .two-factor-status-grid{grid-template-columns:1fr}.two-factor-manage-grid{grid-template-columns:1fr}}
@media print{.two-factor-shell{background:#fff;padding:0}.two-factor-card{box-shadow:none;border:0}.two-factor-recovery-actions,.two-factor-card form,.site-footer{display:none!important}}

/* v1.29.0 平行班同步＋跨班教學效率 */
.class-sync-hero{background:linear-gradient(135deg,#eff6ff,#fff 58%,#f0fdf4)}
.class-sync-source-picker{display:flex;align-items:end;gap:12px;flex-wrap:wrap;margin-top:14px}.class-sync-source-picker label{display:grid;gap:5px;min-width:220px;font-weight:850;color:#334155}.class-sync-source-picker input,.class-sync-source-picker select{min-width:0}
.class-sync-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,.82fr);gap:18px;margin-top:18px}.class-sync-layout>.panel{margin:0}
.class-sync-items{display:grid;gap:10px}.class-sync-item{display:grid;grid-template-columns:24px 44px minmax(0,1fr);align-items:start;gap:10px;padding:14px;border:1px solid #dbe5f0;border-radius:16px;background:#fff;cursor:pointer;transition:.16s ease}.class-sync-item:hover{border-color:#93c5fd;background:#f8fbff}.class-sync-item>input{margin-top:8px;width:18px;height:18px}.class-sync-item>span{width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:#eff6ff;font-size:1.25rem}.class-sync-item>div{display:grid;gap:3px;min-width:0}.class-sync-item strong{color:#163a70}.class-sync-item small{color:#64748b;font-weight:800}.class-sync-item p{margin:3px 0 0;color:#475569;font-size:.84rem;line-height:1.5}.class-sync-item.is-empty{opacity:.68;background:#f8fafc}
.class-sync-targets{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin:8px 0 14px}.class-sync-targets label{display:flex;align-items:center;gap:9px;padding:11px 12px;border:1px solid #dbe5f0;border-radius:13px;background:#fff;cursor:pointer}.class-sync-targets label:hover{border-color:#93c5fd;background:#f8fbff}.class-sync-targets input{width:18px;height:18px}.class-sync-targets span{display:grid;gap:1px}.class-sync-targets strong{color:#1e293b}.class-sync-targets small{font-size:.72rem;color:#64748b}.class-sync-warning{margin:12px 0 14px;padding:11px 12px;border:1px solid #fde68a;border-radius:12px;background:#fffbeb;color:#854d0e;font-size:.82rem;line-height:1.5}
.resource-primary-sync-panel{background:linear-gradient(135deg,#fff,#f8fbff)}.resource-primary-sync-form{display:grid;gap:12px}.resource-primary-current{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid #dbe5f0;border-radius:13px;background:#f8fbff}.resource-primary-current span{font-size:.78rem;font-weight:900;color:#5b50a6}.resource-primary-current strong{color:#163a70}
.teaching-progress-sync details{padding:11px 12px;border:1px solid #dbe5f0;border-radius:13px;background:#f8fbff}.teaching-progress-sync summary{cursor:pointer;font-weight:900;color:#163a70}.progress-sync-targets{display:flex;gap:10px 16px;flex-wrap:wrap;margin-top:10px}
.homework-copy-classes>.actions{margin-top:9px}.homework-copy-classes>p{margin:7px 0 9px}
@media(max-width:960px){.class-sync-layout{grid-template-columns:1fr}.class-sync-targets{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.class-sync-source-picker{display:grid}.class-sync-source-picker label{min-width:0}.class-sync-targets{grid-template-columns:1fr}.class-sync-item{grid-template-columns:22px 38px minmax(0,1fr);padding:11px}.class-sync-item>span{width:36px;height:36px}}

/* v1.29.1 課堂歷程＋上一節摘要 */
.lesson-previous-summary{margin:-2px 0 16px;padding:13px 16px;border:1px solid #cfe0f5;border-radius:18px;background:linear-gradient(135deg,#f8fbff,#fff 52%,#f4fff9);box-shadow:0 7px 22px rgba(15,23,42,.05)}
.lesson-previous-summary-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.lesson-previous-summary-head>div{display:grid;gap:2px}.lesson-previous-summary-head span{font-size:.73rem;color:#64748b;font-weight:900}.lesson-previous-summary-head strong{font-size:1rem;color:#17345e}
.lesson-previous-summary-metrics{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:9px}.lesson-previous-summary-metrics>span{padding:6px 9px;border:1px solid #e2e8f0;border-radius:999px;background:#fff;color:#475569;font-size:.75rem}.lesson-previous-summary-metrics b{color:#0f2b55}
.lesson-previous-summary-notes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px}.lesson-previous-summary-notes p{margin:0;padding:8px 10px;border-radius:11px;background:rgba(239,246,255,.68);color:#475569;font-size:.78rem;line-height:1.5}.lesson-previous-summary-notes b{color:#1e3a8a}.lesson-history-upgrade-note{margin-bottom:16px}
.dashboard-class-last-lesson{display:grid;gap:2px;margin:3px 0 2px;padding:7px 8px;border-radius:10px;background:#f8fbff;border:1px solid #e3edf8}.dashboard-class-last-lesson>span{font-size:.72rem;font-weight:900;color:#334155}.dashboard-class-last-lesson>small{font-size:.7rem;color:#64748b;line-height:1.35}
.lesson-history-hero{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:16px;padding:22px 24px;border:1px solid #bfdbfe;border-radius:22px;background:linear-gradient(135deg,#eff6ff,#fff 55%,#ecfdf5);box-shadow:0 12px 30px rgba(37,99,235,.08)}.lesson-history-hero>div{display:grid;gap:4px}.lesson-history-hero>div>span{font-size:.78rem;font-weight:950;color:#2563eb}.lesson-history-hero h1{margin:0;color:#0f2b55}.lesson-history-hero p{margin:0;color:#64748b}
.lesson-history-filter{margin-bottom:16px}.lesson-history-class-tabs{display:flex;gap:8px;flex-wrap:wrap}.lesson-history-class-tabs a{min-width:88px;display:grid;gap:1px;padding:9px 12px;border:1px solid #dbe5f0;border-radius:12px;background:#fff;color:#334155;text-decoration:none}.lesson-history-class-tabs a:hover,.lesson-history-class-tabs a.is-active{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8;text-decoration:none}.lesson-history-class-tabs strong{font-size:.92rem}.lesson-history-class-tabs small{font-size:.68rem;color:#64748b}
.lesson-history-list{display:grid;gap:14px}.lesson-history-card{margin:0}.lesson-history-card>header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding-bottom:12px;border-bottom:1px solid #edf2f7}.lesson-history-card>header>div{display:grid;gap:2px}.lesson-history-date{font-size:.72rem;color:#64748b;font-weight:850}.lesson-history-card h2{margin:0;color:#122b4d;font-size:1.15rem}.lesson-history-card>header small{color:#64748b}
.lesson-history-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin:12px 0}.lesson-history-metrics>div{display:grid;grid-template-columns:auto 1fr;column-gap:8px;row-gap:1px;align-items:center;padding:10px 11px;border:1px solid #e2e8f0;border-radius:13px;background:#fbfdff}.lesson-history-metrics>div>span{grid-row:1/4;font-size:1.2rem}.lesson-history-metrics small{font-size:.68rem;color:#64748b;font-weight:800}.lesson-history-metrics strong{font-size:.95rem;color:#0f2b55}.lesson-history-metrics em{font-style:normal;font-size:.66rem;color:#64748b}
.lesson-history-content-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.lesson-history-content-grid>section{display:grid;align-content:start;gap:5px;min-height:105px;padding:12px 13px;border-radius:14px;background:#f8fafc;border:1px solid #e5eaf1}.lesson-history-content-grid>section>span{font-size:.72rem;font-weight:900;color:#526176}.lesson-history-content-grid>section>strong{font-size:.86rem;color:#25354d;line-height:1.55}.lesson-history-content-grid>section>small{font-size:.73rem;color:#64748b;line-height:1.45}
.lesson-history-interactions{margin-top:10px;border:1px solid #e2e8f0;border-radius:12px;background:#fff}.lesson-history-interactions summary{padding:9px 11px;cursor:pointer;font-size:.78rem;font-weight:900;color:#334155}.lesson-history-interactions>div{display:flex;gap:6px;flex-wrap:wrap;padding:0 11px 11px}.lesson-history-interactions>div>span{display:flex;align-items:center;gap:4px;padding:5px 7px;border-radius:999px;background:#f1f5f9;color:#334155;font-size:.7rem}.lesson-history-interactions b{min-width:19px;height:19px;display:grid;place-items:center;border-radius:50%;background:#fff;border:1px solid #dbe3ef;font-size:.62rem}.lesson-history-interactions small{color:#4f46e5;font-weight:900}.lesson-history-empty{display:grid;place-items:center;text-align:center;gap:4px;min-height:220px}.lesson-history-empty>span{font-size:2rem}.lesson-history-empty p{margin:0;color:#64748b}
@media(max-width:900px){.lesson-history-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.lesson-history-content-grid,.lesson-previous-summary-notes{grid-template-columns:1fr}}
@media(max-width:640px){.lesson-history-hero,.lesson-previous-summary-head{align-items:flex-start;flex-direction:column}.lesson-history-hero .btn,.lesson-previous-summary-head .btn{width:100%}.lesson-history-metrics{grid-template-columns:1fr 1fr}.lesson-previous-summary-metrics{display:grid;grid-template-columns:1fr 1fr}.lesson-previous-summary-metrics>span{border-radius:11px}.lesson-history-card>header{align-items:flex-start}.lesson-history-card>header>.badge{white-space:nowrap}}

/* v1.29.2 學生教師備註＋待追蹤 */
.seat-teacher-record-section{padding-top:18px}
.seat-teacher-record-compose{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:end}
.seat-teacher-record-compose textarea{width:100%;min-height:68px;resize:vertical;border:1px solid #cbd5e1;border-radius:13px;padding:10px 11px;background:#fff;color:#1e293b;font:inherit;line-height:1.45}
.seat-teacher-record-compose textarea:focus{outline:3px solid rgba(96,165,250,.22);border-color:#60a5fa}
.seat-teacher-record-list{display:grid;gap:7px;margin-top:10px}
.seat-teacher-record-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;padding:9px 10px;border:1px solid #e2e8f0;border-radius:12px;background:#fff}
.seat-teacher-record-item.is-followup{border-color:#fde68a;background:#fffdf4}
.seat-teacher-record-item>div{display:grid;gap:2px;min-width:0}.seat-teacher-record-item strong{font-size:.82rem;color:#334155;white-space:normal;overflow-wrap:anywhere}.seat-teacher-record-item small{font-size:.67rem;color:#94a3b8}
.seat-record-mini-action{border:0;background:transparent;color:#64748b;font:inherit;font-size:.7rem;font-weight:850;cursor:pointer;padding:5px 7px;border-radius:8px}.seat-record-mini-action:hover{background:#f1f5f9;color:#b91c1c}
.lesson-followup-panel{margin:0 0 18px;padding:14px 16px;border:1px solid #f3d58c;border-radius:18px;background:linear-gradient(135deg,#fffdf4,#fff 65%,#f8fbff);box-shadow:0 8px 24px rgba(146,98,20,.06)}
.lesson-followup-panel.is-clear{border-color:#bbf7d0;background:linear-gradient(135deg,#f0fdf4,#fff)}
.lesson-followup-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.lesson-followup-head>div{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.lesson-followup-head span{font-weight:950;color:#7c5a16}.lesson-followup-head strong{font-size:.8rem;padding:3px 8px;border-radius:999px;background:#fef3c7;color:#92400e}.lesson-followup-panel.is-clear .lesson-followup-head strong{background:#dcfce7;color:#166534}.lesson-followup-head small{font-size:.7rem;color:#64748b}
.lesson-followup-list{display:grid;gap:7px;margin-top:10px}.lesson-followup-list article{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:8px 10px;border:1px solid #eceff4;border-radius:12px;background:rgba(255,255,255,.88)}.lesson-followup-list article>div{display:grid;grid-template-columns:28px minmax(0,1fr);align-items:center;gap:8px}.lesson-followup-list article b{width:28px;height:28px;display:grid;place-items:center;border-radius:9px;background:#fff7da;color:#7c5506;font-size:.74rem}.lesson-followup-list article span{display:grid;gap:1px;min-width:0}.lesson-followup-list article strong{font-size:.78rem;color:#334155}.lesson-followup-list article small{font-size:.7rem;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson-followup-empty{padding:7px 2px;color:#15803d;font-size:.8rem;font-weight:850}
.student-followup-hero{display:flex;align-items:center;justify-content:space-between;gap:18px;background:linear-gradient(135deg,#fff7df,#fff 52%,#eff6ff)}.student-followup-hero>div{display:grid;gap:4px}.student-followup-hero span{font-size:.75rem;font-weight:950;color:#9a670c}.student-followup-hero h1{margin:0;color:#172554}.student-followup-hero p{margin:0;color:#64748b}
.followup-filter-form{display:flex;gap:12px;flex-wrap:wrap}.followup-filter-form label,.followup-add-form label{display:grid;gap:5px;color:#475569;font-size:.78rem;font-weight:850}.followup-filter-form select,.followup-add-form select,.followup-add-form textarea{min-height:42px;border:1px solid #cbd5e1;border-radius:11px;padding:8px 10px;background:#fff;color:#1e293b;font:inherit}.followup-add-form{display:grid;grid-template-columns:minmax(160px,.7fr) minmax(150px,.55fr) minmax(0,1.75fr) auto;gap:12px;align-items:end}.followup-add-form .is-wide{min-width:0}.followup-add-form textarea{resize:vertical;min-height:66px}.followup-main-grid{align-items:start}.followup-list{display:grid;gap:9px}.followup-list article{display:grid;grid-template-columns:110px minmax(0,1fr) auto;gap:12px;align-items:center;padding:11px 12px;border:1px solid #e2e8f0;border-radius:14px;background:#fff}.followup-student{display:flex;align-items:center;gap:8px;min-width:0}.followup-student b{width:30px;height:30px;display:grid;place-items:center;border-radius:10px;background:#eff6ff;color:#1d4ed8}.followup-student strong{font-size:.86rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.followup-copy{display:grid;gap:3px;min-width:0}.followup-copy>strong{font-size:.84rem;color:#334155;line-height:1.5}.followup-copy small{font-size:.68rem;color:#94a3b8}.notes-list article{border-left:4px solid #bfdbfe}.completed-followups summary{display:flex;justify-content:space-between;gap:12px;align-items:center;cursor:pointer}.completed-followups summary small{color:#64748b;font-weight:500}.completed-followups .followup-list{margin-top:14px}
@media(max-width:760px){.seat-teacher-record-compose{grid-template-columns:1fr}.seat-teacher-record-compose .btn{width:100%}.lesson-followup-head{align-items:flex-start;flex-direction:column}.lesson-followup-list article{grid-template-columns:1fr}.lesson-followup-list article .btn{justify-self:start}.student-followup-hero{align-items:flex-start;flex-direction:column}.followup-add-form{grid-template-columns:1fr}.followup-main-grid{grid-template-columns:1fr}.followup-list article{grid-template-columns:1fr}.followup-list article form{justify-self:start}}
.dashboard-followup-badge{display:inline-flex;align-items:center;gap:4px;width:max-content;margin-top:5px;padding:4px 8px;border-radius:999px;background:#fff7da;color:#8a5d0a;font-size:.7rem;font-weight:900;text-decoration:none}.dashboard-followup-badge:hover{background:#fef3c7;color:#713f12;text-decoration:none}

/* v1.29.3 課堂歷程資料保存管理 */
.retention-hero{background:linear-gradient(135deg,#f8fbff,#fff 58%,#f4fff8)}
.retention-stats{margin-bottom:20px}.retention-stats .stat-card{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"icon label" "icon value" "icon meta";column-gap:12px;align-items:center;padding:16px 17px;border:1px solid #dbe5f0;border-radius:18px;background:#fff;box-shadow:0 7px 20px rgba(15,23,42,.05)}.retention-stats .stat-card>span{grid-area:icon;width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:#eff6ff;font-size:1.25rem}.retention-stats .stat-card>small{grid-area:label;color:#64748b;font-weight:800}.retention-stats .stat-card>strong{grid-area:value;font-size:1.25rem;color:#17345f;line-height:1.2;overflow-wrap:anywhere}.retention-stats .stat-card>em{grid-area:meta;font-style:normal;color:#94a3b8;font-size:.74rem}
.retention-preview .form-inline{display:flex;align-items:end;gap:10px;flex-wrap:wrap}.retention-preview .form-inline label{margin:0;min-width:260px}.retention-preview-grid{margin-top:16px}.retention-preview-grid>div{padding:14px 15px;border:1px solid #e2e8f0;border-radius:14px;background:#f8fafc;display:grid;gap:2px}.retention-preview-grid small{color:#64748b;font-weight:800}.retention-preview-grid strong{font-size:1.05rem;color:#1e3a8a}.retention-action-card form{display:grid;gap:10px;margin-top:16px}.retention-action-card.is-danger{border-color:#fecaca;background:#fffafa}.retention-action-card code{word-break:break-all}
@media(max-width:850px){.retention-stats{grid-template-columns:1fr}.retention-preview .form-inline{align-items:stretch}.retention-preview .form-inline label,.retention-preview .form-inline .btn{width:100%}}

/* v1.29.4 今日全部班級收尾總覽 */
.dashboard-closeout-panel{margin-bottom:18px;padding:18px;background:linear-gradient(145deg,#ffffff,#fbfdff 62%,#f7fbf8);border-color:#d9e7df}
.dashboard-closeout-title{align-items:flex-start}.dashboard-closeout-actions{align-items:center;flex-wrap:wrap;justify-content:flex-end}
.dashboard-closeout-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.dashboard-closeout-card{min-width:0;display:grid;gap:11px;padding:14px;border:1px solid #dbe3ef;border-radius:16px;background:#fff;box-shadow:0 5px 16px rgba(15,23,42,.04);transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}
.dashboard-closeout-card:hover{border-color:#bdd3e8;box-shadow:0 9px 24px rgba(15,23,42,.07);transform:translateY(-1px)}
.dashboard-closeout-card.is-complete{border-color:#bbebcd;background:linear-gradient(145deg,#fff,#f7fff9)}
.dashboard-closeout-card.is-incomplete{border-color:#f1d49c;background:linear-gradient(145deg,#fff,#fffdf7)}
.dashboard-closeout-card.is-waiting{background:#f8fafc;opacity:.82}
.dashboard-closeout-card>header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.dashboard-closeout-card>header>div{display:grid;gap:2px;min-width:0}.dashboard-closeout-class{font-size:1.06rem;font-weight:950;color:#17325b}.dashboard-closeout-card>header small{color:#738198;font-size:.72rem}.dashboard-closeout-card>header>.dashboard-closeout-state{flex:0 0 auto;padding:5px 8px;border-radius:999px;background:#fff3d9;color:#9a6200;font-size:.68rem;white-space:nowrap}.dashboard-closeout-card.is-complete>header>.dashboard-closeout-state{background:#dcfce7;color:#15803d}.dashboard-closeout-card.is-waiting>header>.dashboard-closeout-state{background:#e8eef6;color:#64748b}
.dashboard-closeout-checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.dashboard-closeout-checks>a{min-width:0;display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:7px;padding:8px 9px;border:1px solid #e2e8f0;border-radius:11px;background:#fff;color:#25364f;text-decoration:none}.dashboard-closeout-checks>a:hover{border-color:#93c5fd;background:#f7fbff;text-decoration:none}.dashboard-closeout-checks>a.is-complete{border-color:#d5ebdc;background:#f8fff9}.dashboard-closeout-checks>a.is-pending{border-color:#f1d49c;background:#fffdf8}.dashboard-closeout-checks>a>span{font-size:1rem}.dashboard-closeout-checks>a>div{display:grid;gap:1px;min-width:0}.dashboard-closeout-checks strong{font-size:.76rem}.dashboard-closeout-checks small{font-size:.63rem;color:#78869a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dashboard-closeout-checks>a>b{font-size:.62rem;color:#b45309;white-space:nowrap}.dashboard-closeout-checks>a.is-complete>b{color:#15803d}
.dashboard-closeout-card>footer{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-top:2px}.dashboard-closeout-card>footer span{min-width:0;color:#7b8798;font-size:.65rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dashboard-closeout-card>footer a{flex:0 0 auto;color:#2563eb;font-size:.68rem;font-weight:900;text-decoration:none}.dashboard-closeout-card>footer a:hover{text-decoration:underline}
.dashboard-closeout-empty{padding:18px;text-align:center;border:1px dashed #bbebcd;border-radius:14px;background:#f6fff9;color:#166534;font-weight:900}
.dashboard-closeout-panel.is-filtering .dashboard-closeout-card.is-complete,.dashboard-closeout-panel.is-filtering .dashboard-closeout-card.is-waiting{display:none}.dashboard-closeout-panel.is-filtering .dashboard-closeout-empty{display:none}
@media(max-width:1100px){.dashboard-closeout-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:720px){.dashboard-closeout-title{display:grid;gap:10px}.dashboard-closeout-actions{justify-content:flex-start}.dashboard-closeout-grid{grid-template-columns:1fr}.dashboard-closeout-card{padding:12px}.dashboard-closeout-checks{grid-template-columns:1fr}.dashboard-closeout-card>footer{align-items:flex-start;flex-direction:column}.dashboard-closeout-card>footer span{white-space:normal}}
@media(prefers-reduced-motion:reduce){.dashboard-closeout-card{transition:none!important}.dashboard-closeout-card:hover{transform:none}}


/* v1.30.0 本週教學總覽＋下一堂準備 */
.dashboard-teaching-overview-grid{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(340px,.82fr);gap:16px;margin:0 0 18px}.dashboard-week-overview-card,.dashboard-next-prep-card{min-width:0}.dashboard-week-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin:4px 0 12px}.dashboard-week-stats>div{display:grid;grid-template-columns:1fr auto;align-items:end;gap:1px 7px;padding:11px 12px;border:1px solid #e2e8f0;border-radius:14px;background:#f8fbff}.dashboard-week-stats span{grid-column:1/-1;color:#64748b;font-size:.73rem;font-weight:850}.dashboard-week-stats strong{font-size:1.45rem;color:#17345f;line-height:1}.dashboard-week-stats small{color:#7b8798;font-size:.68rem}.dashboard-week-stats .is-warning{background:#fffaf0;border-color:#fed7aa}.dashboard-week-stats .is-good{background:#f0fdf4;border-color:#bbf7d0}.dashboard-week-class-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.dashboard-week-class-strip a{display:grid;gap:2px;padding:10px 11px;border:1px solid #e2e8f0;border-radius:13px;background:#fff;text-decoration:none;color:#334155}.dashboard-week-class-strip a:hover{border-color:#93c5fd;background:#f8fbff}.dashboard-week-class-strip strong{color:#17345f}.dashboard-week-class-strip span,.dashboard-week-class-strip small{font-size:.72rem;color:#64748b}.dashboard-week-empty{padding:14px;border:1px dashed #cbd5e1;border-radius:13px;background:#f8fafc;color:#64748b}.dashboard-progress-hint{display:grid;gap:2px;margin-top:10px;padding:10px 12px;border:1px solid #ddd6fe;border-radius:13px;background:#faf7ff;text-decoration:none}.dashboard-progress-hint span{font-size:.69rem;font-weight:900;color:#6d5bb8}.dashboard-progress-hint strong{font-size:.83rem;color:#40386c}.dashboard-progress-hint small{font-size:.68rem;color:#766f91}.dashboard-next-prep-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:12px 13px;border-radius:15px;background:linear-gradient(135deg,#eff6ff,#f0fdf4);border:1px solid #dbeafe}.dashboard-next-prep-head>div{display:grid;gap:1px}.dashboard-next-prep-head span{font-size:.72rem;color:#64748b;font-weight:850}.dashboard-next-prep-head strong{font-size:1.12rem;color:#17345f}.dashboard-next-prep-head small{font-size:.72rem;color:#64748b}.dashboard-next-prep-head>b{font-size:.72rem;padding:5px 8px;border-radius:999px;background:#fff;color:#4b5563;white-space:nowrap}.dashboard-prep-list{display:grid;gap:0;margin:10px 0}.dashboard-prep-list>div{display:grid;grid-template-columns:88px minmax(0,1fr);gap:8px;padding:8px 2px;border-bottom:1px dashed #e2e8f0}.dashboard-prep-list span{font-size:.72rem;color:#64748b;font-weight:850}.dashboard-prep-list strong{font-size:.8rem;color:#334155;min-width:0;overflow-wrap:anywhere}.dashboard-prep-actions{margin-top:10px}
.teaching-overview-hero{display:flex;justify-content:space-between;align-items:flex-end;gap:18px;margin-bottom:16px;padding:20px 22px;border:1px solid #cbdcf3;border-radius:20px;background:linear-gradient(135deg,#eef6ff,#fff 55%,#f0fdf4);box-shadow:0 10px 30px rgba(15,23,42,.06)}.teaching-overview-hero>div:first-child{display:grid;gap:5px}.teaching-overview-hero>div:first-child>span{font-size:.74rem;font-weight:950;color:#48669d}.teaching-overview-hero h2{margin:0;color:#142f55;font-size:clamp(1.45rem,2.5vw,2rem);line-height:1.2}.teaching-overview-hero p{margin:0;color:#64748b}.teaching-overview-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.teaching-overview-stats article{display:grid;gap:3px;padding:16px;border:1px solid #dbe5f0;border-radius:17px;background:#fff;box-shadow:0 7px 20px rgba(15,23,42,.05)}.teaching-overview-stats span{font-size:.78rem;color:#64748b;font-weight:850}.teaching-overview-stats strong{font-size:1.8rem;color:#17345f;line-height:1.05}.teaching-overview-stats small{color:#7b8798}.teaching-overview-stats article.is-warning{background:#fffaf0;border-color:#fed7aa}.teaching-overview-stats article.is-good{background:#f0fdf4;border-color:#bbf7d0}.teaching-next-main{display:grid;grid-template-columns:minmax(190px,.58fr) minmax(0,1.42fr);gap:16px}.teaching-next-class{display:grid;align-content:center;gap:3px;padding:18px;border-radius:16px;background:linear-gradient(135deg,#eff6ff,#eefcf4);border:1px solid #dbeafe}.teaching-next-class>span{font-size:.72rem;font-weight:900;color:#64748b}.teaching-next-class>strong{font-size:1.35rem;color:#15325a}.teaching-next-class>small{color:#64748b}.teaching-next-details{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.teaching-next-details>div{display:grid;gap:2px;padding:11px 12px;border:1px solid #e2e8f0;border-radius:13px;background:#fff}.teaching-next-details span{font-size:.69rem;color:#64748b;font-weight:850}.teaching-next-details strong{font-size:.8rem;color:#334155}.teaching-class-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.teaching-class-card{display:grid;gap:10px;padding:14px;border:1px solid #dbe5f0;border-radius:17px;background:#fff;box-shadow:0 6px 18px rgba(15,23,42,.04)}.teaching-class-card header{display:flex;align-items:center;justify-content:space-between;gap:10px}.teaching-class-card header>div{display:flex;align-items:baseline;gap:7px}.teaching-class-card header strong{font-size:1.12rem;color:#16345d}.teaching-class-card header span{font-size:.72rem;color:#64748b}.teaching-class-card header>b{font-size:.72rem;color:#4f46e5;padding:4px 8px;border-radius:999px;background:#eef2ff}.teaching-class-lines{display:grid;gap:0}.teaching-class-lines>div{display:grid;grid-template-columns:82px minmax(0,1fr);gap:7px;padding:7px 0;border-bottom:1px dashed #e2e8f0}.teaching-class-lines span{font-size:.69rem;color:#64748b;font-weight:850}.teaching-class-lines strong{font-size:.77rem;color:#334155}.teaching-class-card footer{display:flex;gap:8px;justify-content:space-between;flex-wrap:wrap;font-size:.68rem;color:#64748b}.teaching-class-card footer .is-warning{color:#b45309;font-weight:850}.teaching-class-card footer .is-good{color:#15803d;font-weight:850}.teaching-progress-hints{display:grid;gap:9px}.teaching-progress-hints article{display:grid;grid-template-columns:38px minmax(0,1fr) auto;gap:10px;align-items:center;padding:11px 12px;border:1px solid #ddd6fe;border-radius:14px;background:#faf7ff}.teaching-progress-hints article>span{width:38px;height:38px;display:grid;place-items:center;border-radius:12px;background:#fff;font-size:1.15rem}.teaching-progress-hints article>div{display:grid;gap:2px}.teaching-progress-hints strong{color:#40386c}.teaching-progress-hints p{margin:0;color:#6b7280;font-size:.78rem}.teaching-progress-hints b{color:#6d5bb8;font-size:.78rem;white-space:nowrap}
@media(max-width:1120px){.dashboard-teaching-overview-grid{grid-template-columns:1fr}.teaching-class-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-week-class-strip{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.dashboard-week-stats,.teaching-overview-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.teaching-overview-hero{align-items:flex-start;flex-direction:column}.teaching-next-main{grid-template-columns:1fr}.teaching-next-details{grid-template-columns:1fr}.teaching-class-grid{grid-template-columns:1fr}}
@media(max-width:520px){.dashboard-week-class-strip{grid-template-columns:1fr}.dashboard-week-stats,.teaching-overview-stats{grid-template-columns:1fr}.dashboard-next-prep-head{flex-direction:column}.teaching-progress-hints article{grid-template-columns:34px minmax(0,1fr)}.teaching-progress-hints b{grid-column:2}}


/* v1.30.0.1 課堂歷程誤觸摘要清理 */
.lesson-history-card-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap}.lesson-history-card.is-suspected-accidental{border-color:#f6d88a;box-shadow:0 10px 28px rgba(180,120,20,.08)}.lesson-history-card.is-suspected-accidental>header{background:linear-gradient(90deg,rgba(255,251,235,.72),transparent);margin:-2px -2px 0;padding:2px 2px 12px}.lesson-history-delete-note{display:grid;grid-template-columns:38px minmax(0,1fr);gap:10px;align-items:center;margin:0 0 14px;padding:11px 13px;border:1px solid #dbe7f3;border-radius:14px;background:#f8fbff}.lesson-history-delete-note>span{width:38px;height:38px;display:grid;place-items:center;border-radius:12px;background:#eff6ff;font-size:1.05rem}.lesson-history-delete-note>div{display:grid;gap:2px}.lesson-history-delete-note strong{color:#1e3a8a;font-size:.86rem}.lesson-history-delete-note small{color:#64748b;line-height:1.5}.lesson-history-delete-form{margin:0}@media(max-width:640px){.lesson-history-card-actions{justify-content:flex-start}.lesson-history-card>header{display:grid}.lesson-history-delete-form,.lesson-history-delete-form .btn{width:100%}}

/* v1.30.0.2：準備課程與正式上課分流 */
.lesson-preparation-notice,.lesson-start-confirmation{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:0 0 18px;padding:15px 18px;border-radius:18px}
.lesson-preparation-notice{border:1px solid #bfdbfe;background:linear-gradient(135deg,#eff6ff,#f8fbff 58%,#f0fdf4)}
.lesson-start-confirmation{border:1px solid #fbbf24;background:linear-gradient(135deg,#fffbeb,#fff 58%,#fff7ed)}
.lesson-preparation-notice>div,.lesson-start-confirmation>div:first-child{display:grid;gap:3px;min-width:0}
.lesson-preparation-notice strong,.lesson-start-confirmation strong{font-size:1rem;color:#18365f}
.lesson-preparation-notice span,.lesson-start-confirmation span{color:#64748b;font-size:.86rem;line-height:1.55}
.lesson-start-confirmation .actions{margin:0;flex:0 0 auto;align-items:center}
.lesson-start-confirmation form{margin:0}
@media(max-width:760px){.lesson-preparation-notice,.lesson-start-confirmation{align-items:flex-start;flex-direction:column}.lesson-start-confirmation .actions{width:100%;flex-wrap:wrap}.lesson-start-confirmation .actions .btn,.lesson-start-confirmation .actions form,.lesson-start-confirmation .actions form .btn{width:100%}}

/* v1.30.1 教師週報＋學期趨勢 */
.dashboard-term-mini{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;margin:-2px 0 11px;padding:9px 11px;border:1px solid #dbeafe;border-radius:13px;background:linear-gradient(135deg,#f8fbff,#f5fbf7);text-decoration:none;color:#334155}.dashboard-term-mini:hover{border-color:#93c5fd;background:#f0f7ff;text-decoration:none}.dashboard-term-mini span{font-size:.7rem;font-weight:950;color:#5b6f94}.dashboard-term-mini strong{font-size:.78rem;color:#27405f}.dashboard-term-mini small{font-size:.68rem;color:#64748b;white-space:nowrap}
.teacher-report-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:16px;padding:21px 22px;border:1px solid #cbdcf3;border-radius:21px;background:linear-gradient(135deg,#eef6ff,#fff 56%,#effdf5);box-shadow:0 10px 30px rgba(15,23,42,.06)}.teacher-report-hero>div:first-child{display:grid;gap:5px;min-width:0}.teacher-report-hero>div:first-child>span{font-size:.74rem;font-weight:950;color:#48669d}.teacher-report-hero h1{margin:0;color:#142f55;font-size:clamp(1.55rem,2.8vw,2.15rem);line-height:1.15}.teacher-report-hero p{margin:0;color:#64748b}.teacher-report-actions{justify-content:flex-end;flex-wrap:wrap}
.teacher-report-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.teacher-report-stats article{display:grid;gap:3px;padding:16px;border:1px solid #dbe5f0;border-radius:17px;background:#fff;box-shadow:0 7px 20px rgba(15,23,42,.05)}.teacher-report-stats span{font-size:.77rem;color:#64748b;font-weight:850}.teacher-report-stats strong{font-size:1.8rem;color:#17345f;line-height:1.05}.teacher-report-stats small{font-size:.7rem;color:#7b8798;line-height:1.4}.teacher-report-stats .is-good{background:#f0fdf4;border-color:#bbf7d0}.teacher-report-stats .is-warning{background:#fffaf0;border-color:#fed7aa}
.teacher-report-section{margin-bottom:16px}.teacher-report-table td,.teacher-report-table th{vertical-align:top}.teacher-report-table td:nth-child(2),.teacher-report-table td:nth-child(3),.teacher-report-table td:nth-child(4),.teacher-report-table td:nth-child(5),.teacher-report-table td:nth-child(6),.teacher-report-table td:nth-child(7){white-space:nowrap}.teacher-report-table .points-warning{color:#b45309;font-weight:900}
.teacher-report-term-summary{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:9px;margin:4px 0 14px}.teacher-report-term-summary>div{display:grid;gap:2px;padding:12px;border:1px solid #e2e8f0;border-radius:14px;background:#f8fbff}.teacher-report-term-summary span{font-size:.7rem;color:#64748b;font-weight:850}.teacher-report-term-summary strong{font-size:1.05rem;color:#17345f}.teacher-report-term-summary small{font-size:.68rem;color:#7b8798}
.teacher-term-trend{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.teacher-term-trend article{display:grid;gap:8px;padding:13px;border:1px solid #e2e8f0;border-radius:15px;background:#fff}.teacher-term-trend header{display:flex;justify-content:space-between;gap:10px;align-items:baseline}.teacher-term-trend header strong{color:#17345f}.teacher-term-trend header span{font-size:.68rem;color:#64748b}.teacher-trend-line{display:grid;grid-template-columns:72px minmax(0,1fr) 40px;gap:8px;align-items:center}.teacher-trend-line>span{font-size:.68rem;color:#64748b;font-weight:850}.teacher-trend-line>div{height:8px;border-radius:999px;background:#e9eef5;overflow:hidden}.teacher-trend-line i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#6366f1,#38bdf8,#34d399)}.teacher-trend-line b{font-size:.68rem;text-align:right;color:#334155}
.teacher-term-class-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.teacher-term-class-grid article{display:grid;gap:7px;padding:13px;border:1px solid #dbe5f0;border-radius:15px;background:#fff}.teacher-term-class-grid header{display:flex;justify-content:space-between;align-items:baseline}.teacher-term-class-grid header strong{font-size:1.05rem;color:#17345f}.teacher-term-class-grid header span{font-size:.69rem;color:#64748b}.teacher-term-class-grid article>div{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;padding:5px 0;border-bottom:1px dashed #e2e8f0}.teacher-term-class-grid article>div span{font-size:.7rem;color:#64748b}.teacher-term-class-grid article>div b{font-size:.72rem;color:#334155}.teacher-term-class-grid footer{font-size:.7rem;color:#64748b;line-height:1.5}.teacher-report-footnote{margin:8px 0 18px;text-align:center;color:#7b8798;font-size:.7rem}
@media(max-width:1050px){.teacher-report-hero{align-items:flex-start;flex-direction:column}.teacher-report-actions{justify-content:flex-start}.teacher-report-term-summary{grid-template-columns:repeat(3,minmax(0,1fr))}.teacher-term-class-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:720px){.dashboard-term-mini{grid-template-columns:1fr}.dashboard-term-mini small{white-space:normal}.teacher-report-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.teacher-report-term-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.teacher-term-trend,.teacher-term-class-grid{grid-template-columns:1fr}.teacher-report-actions .btn{flex:1 1 auto}.teacher-report-table{min-width:840px}}
@media(max-width:480px){.teacher-report-stats,.teacher-report-term-summary{grid-template-columns:1fr}}
@media print{.site-header,.site-nav,.active-lesson-mini-bar,.no-print,.teacher-report-actions,.site-footer,.report-issue-fab{display:none!important}.container,.page-shell,main{max-width:none!important;width:100%!important;margin:0!important;padding:0!important}.teacher-report-hero,.teacher-report-stats article,.teacher-report-section,.teacher-term-trend article,.teacher-term-class-grid article{box-shadow:none!important;break-inside:avoid}.teacher-report-hero{padding:12px 0;border:0;border-bottom:1px solid #cbd5e1;border-radius:0}.teacher-report-section{border:0!important;padding:0!important}.teacher-report-stats{gap:6px}.teacher-report-stats article{padding:9px}.teacher-report-table{font-size:10pt}.teacher-term-trend{grid-template-columns:repeat(2,1fr)}.teacher-report-footnote{margin-top:12px}}

/* v1.31.0 新學期快速開學 */
.term-setup-hero{background:linear-gradient(135deg,#eff6ff,#fff 56%,#ecfdf5);border-color:#bfdbfe}.term-setup-hero h2{margin:.35rem 0 .2rem}.term-student-mode{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.term-setup-dialog{width:min(820px,calc(100vw - 28px));border:0;border-radius:24px;padding:0;box-shadow:0 28px 90px rgba(15,23,42,.28)}.term-setup-dialog::backdrop{background:rgba(15,23,42,.48);backdrop-filter:blur(3px)}.term-setup-dialog-card{padding:22px;background:#fff}.term-setup-preview-body{display:grid;gap:14px;margin:14px 0}.term-setup-preview-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.term-setup-preview-grid article,.term-setup-preview-settings{padding:14px;border:1px solid #dbe5f0;border-radius:15px;background:#f8fbff}.term-setup-preview-grid small{display:block;color:#64748b;font-weight:800}.term-setup-preview-grid strong{display:block;margin:3px 0;color:#0f2b55;font-size:1.08rem}.term-setup-preview-grid p,.term-setup-preview-settings p{margin:3px 0 0;color:#64748b}.term-setup-result-hero{background:linear-gradient(135deg,#f0fdf4,#fff 55%,#eff6ff);border-color:#bbf7d0}.term-setup-result-hero h1{margin:.4rem 0 0}.term-setup-kpis article{display:grid;gap:4px;align-content:start}.term-setup-kpis small{color:#64748b;font-weight:850}.term-setup-kpis strong{font-size:2rem;color:#0f2b55}.term-setup-kpis span{color:#64748b}.term-setup-summary-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.term-setup-summary-grid>div{padding:14px;border:1px solid #dbe5f0;border-radius:14px;background:#fbfdff}.term-setup-summary-grid strong{color:#18345f}.term-setup-summary-grid p{margin:5px 0 0;color:#64748b}.term-setup-checklist{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-bottom:14px}.term-setup-checklist label{display:flex;align-items:center;gap:9px;padding:12px;border:1px solid #dbe5f0;border-radius:13px;background:#fbfdff;font-weight:800}.term-setup-checklist input{width:18px;height:18px}.term-setup-rollback{display:grid;gap:12px;max-width:650px}.term-setup-rollback label{display:grid;gap:6px}.copy-submit{align-items:center}.copy-submit h2{margin:0 0 6px}.term-copy-form input:disabled{opacity:.55;cursor:not-allowed}
@media(max-width:780px){.term-student-mode,.term-setup-preview-grid,.term-setup-summary-grid,.term-setup-checklist{grid-template-columns:1fr}.term-setup-dialog-card{padding:16px}.term-setup-kpis{grid-template-columns:1fr!important}}


/* v1.31.1 新學期健檢 */
.term-health-hero{background:linear-gradient(135deg,#f0fdf4,#fff 56%,#eff6ff);border-color:#bbf7d0}
.term-health-hero h1{margin:.35rem 0 0}
.term-health-kpis{margin:16px 0}
.term-health-kpis article{display:grid;gap:2px;align-content:center;min-height:112px}
.term-health-kpis small{color:#64748b;font-weight:800}
.term-health-kpis strong{font-size:1.8rem;color:#163a70}
.term-health-kpis span{color:#64748b;font-size:.8rem}
.term-health-list{display:grid;gap:10px}
.term-health-item{display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:12px;align-items:center;padding:14px 15px;border:1px solid #e2e8f0;border-radius:16px;background:#fff}
.term-health-item.is-pass{border-color:#bbf7d0;background:#f7fff9}
.term-health-item.is-warn{border-color:#fde68a;background:#fffdf3}
.term-health-item.is-fail{border-color:#fecaca;background:#fff7f7}
.term-health-icon{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:#f8fafc;font-size:1.15rem}
.term-health-copy{min-width:0}
.term-health-copy strong{font-size:1rem;color:#1e293b}
.term-health-copy p{margin:3px 0 0;color:#64748b;line-height:1.5}
.term-health-ready{margin-top:16px}
@media(max-width:760px){.term-health-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.term-health-item{grid-template-columns:38px minmax(0,1fr)}.term-health-item .btn{grid-column:2;justify-self:start}}

/* v1.31.2 提醒中心 */
.main-nav-reminders{position:relative}.main-nav-reminders .nav-reminder-count{margin-left:1px;background:#fef3c7;color:#92400e}.main-nav-reminders.is-active .nav-reminder-count{background:#fee2e2;color:#b91c1c}
.reminder-center-hero{background:linear-gradient(135deg,#fff,#f8fbff 52%,#fff9ed);border-color:#dbe7f2}.reminder-center-hero h1{margin:8px 0 4px}.reminder-filter{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 18px}.reminder-filter a{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:8px 12px;border:1px solid #dbe5f0;border-radius:999px;background:#fff;color:#334155;text-decoration:none;font-size:.86rem;font-weight:850}.reminder-filter a:hover{border-color:#93c5fd;background:#eff6ff;text-decoration:none}.reminder-filter a.is-active{background:#163660;border-color:#163660;color:#fff}.reminder-filter b{min-width:20px;height:20px;padding:0 5px;display:inline-grid;place-items:center;border-radius:999px;background:#f1f5f9;color:#475569;font-size:.7rem}.reminder-filter a.is-active b{background:rgba(255,255,255,.18);color:#fff}
.reminder-list{display:grid;gap:12px;margin-bottom:18px}.reminder-item{display:grid;grid-template-columns:54px minmax(0,1fr) auto;align-items:center;gap:14px;margin:0;padding:16px 18px;border-left-width:5px}.reminder-item.is-danger{border-left-color:#ef4444;background:linear-gradient(90deg,#fff6f6,#fff 32%)}.reminder-item.is-warning{border-left-color:#f59e0b;background:linear-gradient(90deg,#fffaf0,#fff 32%)}.reminder-item.is-info{border-left-color:#3b82f6;background:linear-gradient(90deg,#f3f8ff,#fff 32%)}.reminder-item-icon{width:50px;height:50px;display:grid;place-items:center;border-radius:15px;background:#f8fafc;border:1px solid #e2e8f0;font-size:1.45rem}.reminder-item-copy{min-width:0}.reminder-item-copy h2{margin:3px 0 3px;font-size:1.05rem;color:#1e293b}.reminder-item-copy p{margin:0;color:#64748b;line-height:1.5}.reminder-item-meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;color:#64748b;font-size:.7rem;font-weight:850}.reminder-item-meta span,.reminder-item-meta b{padding:3px 7px;border-radius:999px;background:#f1f5f9;color:#64748b}.reminder-item.is-danger .reminder-item-meta b{background:#fee2e2;color:#b91c1c}.reminder-item.is-warning .reminder-item-meta b{background:#fef3c7;color:#92400e}.reminder-empty{text-align:center;padding:42px 24px}.reminder-empty-icon{font-size:3rem}.reminder-empty h2{margin:8px 0 4px}.reminder-how-it-works{margin-top:18px}.reminder-rule-grid article{display:grid;grid-template-columns:38px minmax(0,1fr);column-gap:10px;align-items:center;padding:12px;border:1px solid #e2e8f0;border-radius:14px;background:#fbfdff}.reminder-rule-grid article>span{grid-row:1/3;width:38px;height:38px;display:grid;place-items:center;border-radius:12px;background:#eff6ff;font-size:1.1rem}.reminder-rule-grid strong{font-size:.88rem;color:#1e3a8a}.reminder-rule-grid small{color:#64748b;line-height:1.4}
@media(max-width:780px){.reminder-item{grid-template-columns:44px minmax(0,1fr);align-items:start}.reminder-item-icon{width:42px;height:42px;border-radius:12px;font-size:1.2rem}.reminder-item>.btn{grid-column:2;justify-self:start}.reminder-filter{gap:6px}.reminder-filter a{padding:7px 10px}.main-nav-reminder-label{display:none}}

/* v1.31.4 PDF multi-pointer simultaneous writing */
.pdf-multi-write-toggle{border-radius:999px;padding:4px 8px;transition:background .15s,color .15s,border-color .15s}
.pdf-annotator-app.multi-write-mode .pdf-multi-write-toggle{background:#eef2ff;color:#3730a3;box-shadow:inset 0 0 0 1px #c7d2fe}
.pdf-annotator-app.multi-write-mode .pdf-pencil-shield{touch-action:none!important;-ms-touch-action:none!important}
.pdf-annotator-app.multi-write-mode .pdf-input-mode-status{background:#eef2ff;color:#3730a3}
.pdf-annotator-app.multi-write-mode[data-active-tool="pan"] .pdf-input-mode-status{background:#eff6ff;color:#1e40af}
.pdf-annotator-app.multi-write-mode input[data-pen-only]:disabled+*{opacity:.65}

/* v1.31.4.1 提醒中心可忽略＋個人提醒設定 */
.reminder-item-actions{display:flex;align-items:center;gap:8px;justify-content:flex-end}.reminder-more{position:relative}.reminder-more>summary{list-style:none;width:40px;height:40px;display:grid;place-items:center;border:1px solid #cbd5e1;border-radius:12px;background:#fff;color:#475569;font-weight:900;font-size:1.15rem;cursor:pointer;user-select:none}.reminder-more>summary::-webkit-details-marker{display:none}.reminder-more[open]>summary,.reminder-more>summary:hover{background:#f1f5f9;border-color:#94a3b8}.reminder-more-menu{position:absolute;right:0;top:46px;z-index:20;width:225px;padding:7px;border:1px solid #dbe5f0;border-radius:14px;background:#fff;box-shadow:0 16px 42px rgba(15,23,42,.16)}.reminder-more-menu form{margin:0}.reminder-more-menu button{width:100%;border:0;background:transparent;text-align:left;padding:10px 11px;border-radius:9px;color:#334155;font:inherit;font-size:.82rem;font-weight:780;cursor:pointer}.reminder-more-menu button:hover{background:#f1f5f9;color:#0f172a}.reminder-more-menu form+form{border-top:1px solid #f1f5f9}.reminder-settings-panel{margin-bottom:18px}.reminder-settings-form{display:grid;gap:16px}.reminder-setting-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.reminder-setting-group{border:1px solid #dbe5f0;border-radius:16px;background:#fbfdff;padding:14px}.reminder-setting-group h3{margin:0 0 10px;color:#1e3a8a;font-size:.95rem}.reminder-setting-row{display:grid;grid-template-columns:auto 36px minmax(0,1fr);align-items:center;gap:9px;padding:10px 8px;border-radius:12px;cursor:pointer}.reminder-setting-row:hover{background:#f1f5f9}.reminder-setting-row input{width:19px;height:19px}.reminder-setting-row>span:last-child{display:grid;gap:2px}.reminder-setting-row strong{font-size:.88rem;color:#1e293b}.reminder-setting-row small{font-size:.75rem;line-height:1.4;color:#64748b}.reminder-setting-icon{width:34px;height:34px;display:grid;place-items:center;border-radius:10px;background:#eff6ff;border:1px solid #dbeafe}.reminder-settings-actions{margin-top:2px}.reminder-inline-form{display:inline-block;margin-top:10px}.reminder-suppression-list{display:grid;gap:9px}.reminder-suppression-list article{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 12px;border:1px solid #e2e8f0;border-radius:13px;background:#fbfdff}.reminder-suppression-list article>div{display:grid;gap:3px}.reminder-suppression-list strong{font-size:.88rem;color:#1e293b}.reminder-suppression-list small{font-size:.75rem;color:#64748b}
@media(max-width:900px){.reminder-setting-grid{grid-template-columns:1fr}.reminder-item{grid-template-columns:44px minmax(0,1fr)}.reminder-item-actions{grid-column:2;justify-content:flex-start;flex-wrap:wrap}.reminder-more-menu{left:0;right:auto}.reminder-suppression-list article{align-items:flex-start;flex-direction:column}}

/* v1.31.4.2 上課彈窗大畫面／觸控捲動優化
   快速加點與每日集點在工作台內嵌時，控制列固定、學生區吃滿剩餘高度，
   並將捲動集中到單一學生區，改善 86 吋觸控螢幕只看到兩排與細捲軸難拖問題。 */
.workbench-panel-modal[data-active-panel="quickpoints"],
.workbench-panel-modal[data-active-panel="daily"]{grid-template-columns:minmax(0,1fr)}
.workbench-panel-modal[data-active-panel="quickpoints"] .workbench-panel-shell,
.workbench-panel-modal[data-active-panel="daily"] .workbench-panel-shell{
  grid-column:1;
  margin:8px 10px;
  border-radius:18px;
}
.workbench-panel-modal[data-active-panel="quickpoints"] .workbench-panel-head,
.workbench-panel-modal[data-active-panel="daily"] .workbench-panel-head{padding:9px 14px}
.workbench-panel-modal[data-active-panel="quickpoints"] .workbench-panel-close,
.workbench-panel-modal[data-active-panel="daily"] .workbench-panel-close{width:42px;height:42px}

body.workbench-embed.workbench-panel-quickpoints,
body.workbench-embed.workbench-panel-daily{height:100dvh;overflow:hidden}
body.workbench-embed.workbench-panel-quickpoints .container,
body.workbench-embed.workbench-panel-daily .container{
  height:100dvh;
  min-height:0;
  overflow:hidden;
  padding:8px 12px 10px;
}

/* 快速加點：上方操作固定，學生卡片區使用所有剩餘高度。 */
body.workbench-embed.workbench-panel-quickpoints .container{display:flex;flex-direction:column}
body.workbench-embed.workbench-panel-quickpoints .quick-point-control{
  flex:1 1 auto;
  min-height:0;
  display:flex;
  flex-direction:column;
  margin:0;
}
body.workbench-embed.workbench-panel-quickpoints .quick-point-control>.section-title{display:none}
body.workbench-embed.workbench-panel-quickpoints .quick-point-toolbar{
  position:static;
  flex:0 0 auto;
  grid-template-columns:minmax(240px,.9fr) minmax(300px,1.35fr);
  gap:8px 12px;
  margin:0 0 7px;
  padding:0;
  background:transparent;
}
body.workbench-embed.workbench-panel-quickpoints .quick-point-toolbar label{gap:3px;margin:0;font-size:.9rem}
body.workbench-embed.workbench-panel-quickpoints .quick-point-toolbar select,
body.workbench-embed.workbench-panel-quickpoints .quick-point-toolbar input{padding:8px 10px}
body.workbench-embed.workbench-panel-quickpoints .quick-point-preset-hint{display:none}
body.workbench-embed.workbench-panel-quickpoints .quick-point-message:empty{display:none}
body.workbench-embed.workbench-panel-quickpoints .quick-point-message{flex:0 0 auto;min-height:0;margin:2px 0 5px}
body.workbench-embed.workbench-panel-quickpoints .quick-undo-last{flex:0 0 auto;align-self:flex-start;margin:0 0 6px}
body.workbench-embed.workbench-panel-quickpoints .quick-point-bulkbar{
  position:static;
  flex:0 0 auto;
  gap:8px;
  margin:0 0 8px;
  padding:7px 9px;
  background:#fff;
}
body.workbench-embed.workbench-panel-quickpoints .quick-point-bulkbar .btn{min-height:40px}
body.workbench-embed.workbench-panel-quickpoints .quick-point-grid{
  flex:1 1 auto;
  min-height:0;
  max-height:none!important;
  overflow-x:hidden;
  overflow-y:auto;
  overscroll-behavior:contain;
  touch-action:pan-y;
  -webkit-overflow-scrolling:touch;
  scrollbar-gutter:stable;
  align-content:start;
  grid-auto-rows:min-content;
  gap:9px;
  padding:2px 7px 14px 2px;
}
body.workbench-embed.workbench-panel-quickpoints .quick-student-card{padding:9px 10px;border-radius:14px}
body.workbench-embed.workbench-panel-quickpoints .quick-student-main{gap:8px;padding-right:48px}
body.workbench-embed.workbench-panel-quickpoints .quick-student-main .avatar-lg{width:54px;height:54px;font-size:31px}
body.workbench-embed.workbench-panel-quickpoints .quick-student-main .avatar-lg .avatar-art-image{width:54px;height:54px}
body.workbench-embed.workbench-panel-quickpoints .quick-student-main strong{font-size:1rem;line-height:1.2}
body.workbench-embed.workbench-panel-quickpoints .quick-student-main small{margin-top:2px;font-size:.78rem}
body.workbench-embed.workbench-panel-quickpoints .quick-student-actions{gap:6px;margin-top:8px}
body.workbench-embed.workbench-panel-quickpoints .quick-student-actions .btn{min-height:42px;font-size:.9rem}
body.workbench-embed.workbench-panel-quickpoints .quick-student-select{top:7px;right:9px}

/* 每日集點：工作台內只保留必要課次/到課提示；表格成為唯一主要捲動區。 */
body.workbench-embed.workbench-panel-daily .container{display:flex;flex-direction:column;gap:0}
body.workbench-embed.workbench-panel-daily .daily-top-panel{display:none!important}
body.workbench-embed.workbench-panel-daily .daily-lesson-context-panel{
  flex:0 0 auto;
  margin:0 0 6px;
  padding:7px 10px;
  border-radius:12px;
}
body.workbench-embed.workbench-panel-daily .daily-lesson-context-panel .section-title{justify-content:flex-start;gap:8px}
body.workbench-embed.workbench-panel-daily .daily-lesson-context-panel .section-title>div:first-child{display:none}
body.workbench-embed.workbench-panel-daily .daily-lesson-picker{align-items:center}
body.workbench-embed.workbench-panel-daily .daily-lesson-picker label{flex-direction:row;align-items:center;gap:8px;margin:0;font-size:.86rem}
body.workbench-embed.workbench-panel-daily .daily-lesson-picker select{min-width:220px;padding:7px 9px}
body.workbench-embed.workbench-panel-daily .daily-lesson-context-panel>.alert{margin:6px 0 0;padding:7px 10px;font-size:.78rem;line-height:1.35}
body.workbench-embed.workbench-panel-daily .container>.alert.alert-info{
  flex:0 0 auto;
  margin:0 0 7px;
  padding:8px 11px;
  font-size:.82rem;
  line-height:1.35;
}
body.workbench-embed.workbench-panel-daily .container>form{
  flex:1 1 auto;
  min-height:0;
  display:flex;
  margin:0;
}
body.workbench-embed.workbench-panel-daily .container>form>.panel{
  flex:1 1 auto;
  min-height:0;
  width:100%;
  display:flex;
  flex-direction:column;
  margin:0;
  padding:11px 12px 10px;
  overflow:hidden;
}
body.workbench-embed.workbench-panel-daily .container>form>.panel>.section-title{
  flex:0 0 auto;
  margin:0 0 7px;
  align-items:center;
}
body.workbench-embed.workbench-panel-daily .container>form>.panel>.section-title h2{margin:0;font-size:1.08rem}
body.workbench-embed.workbench-panel-daily .container>form>.panel>.section-title p{display:none}
body.workbench-embed.workbench-panel-daily .container>form>.panel>.section-title .btn{min-height:42px}
body.workbench-embed.workbench-panel-daily .daily-table-wrap{
  flex:1 1 auto;
  min-height:0;
  max-height:none!important;
  overflow:auto;
  overscroll-behavior:contain;
  touch-action:pan-x pan-y;
  -webkit-overflow-scrolling:touch;
  scrollbar-gutter:stable both-edges;
  border-radius:12px;
}
body.workbench-embed.workbench-panel-daily .daily-dynamic-table thead th{
  position:sticky;
  top:0;
  z-index:10;
  padding-top:7px;
  padding-bottom:7px;
  background:#eef3f9;
}
body.workbench-embed.workbench-panel-daily .daily-dynamic-table thead .sticky-col{z-index:14}
body.workbench-embed.workbench-panel-daily .daily-dynamic-table tbody .sticky-col{z-index:3}
body.workbench-embed.workbench-panel-daily .daily-dynamic-table td{padding-top:8px;padding-bottom:8px}
body.workbench-embed.workbench-panel-daily .daily-dynamic-table .leaderboard-row{gap:9px}
body.workbench-embed.workbench-panel-daily .daily-dynamic-table .leaderboard-row .avatar{width:40px;height:40px}
body.workbench-embed.workbench-panel-daily .daily-dynamic-table .leaderboard-row .avatar .avatar-art-image{width:40px;height:40px}
body.workbench-embed.workbench-panel-daily .daily-item-scope-badges{margin-top:3px;gap:3px}
body.workbench-embed.workbench-panel-daily .daily-item-scope-badges .badge{padding:2px 6px;font-size:10px}
body.workbench-embed.workbench-panel-daily .daily-dynamic-table th .actions{margin-top:3px!important;gap:5px}
body.workbench-embed.workbench-panel-daily .daily-dynamic-table th .btn-sm{padding:5px 8px}

/* 86 吋觸控：捲軸刻意做粗，仍可直接在學生區用手指上下拖。 */
body.workbench-embed.workbench-panel-quickpoints .quick-point-grid,
body.workbench-embed.workbench-panel-daily .daily-table-wrap{scrollbar-width:auto;scrollbar-color:#8191a8 #e8eef6}
body.workbench-embed.workbench-panel-quickpoints .quick-point-grid::-webkit-scrollbar,
body.workbench-embed.workbench-panel-daily .daily-table-wrap::-webkit-scrollbar{width:18px;height:18px}
body.workbench-embed.workbench-panel-quickpoints .quick-point-grid::-webkit-scrollbar-track,
body.workbench-embed.workbench-panel-daily .daily-table-wrap::-webkit-scrollbar-track{background:#e8eef6;border-radius:999px}
body.workbench-embed.workbench-panel-quickpoints .quick-point-grid::-webkit-scrollbar-thumb,
body.workbench-embed.workbench-panel-daily .daily-table-wrap::-webkit-scrollbar-thumb{
  min-height:58px;
  border:3px solid #e8eef6;
  border-radius:999px;
  background:#8191a8;
}
body.workbench-embed.workbench-panel-quickpoints .quick-point-grid::-webkit-scrollbar-thumb:hover,
body.workbench-embed.workbench-panel-daily .daily-table-wrap::-webkit-scrollbar-thumb:hover{background:#64748b}

@media(max-width:980px){
  body.workbench-embed.workbench-panel-quickpoints .quick-point-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:760px){
  .workbench-panel-modal[data-active-panel="quickpoints"] .workbench-panel-shell,
  .workbench-panel-modal[data-active-panel="daily"] .workbench-panel-shell{margin:0;border-radius:0}
  body.workbench-embed.workbench-panel-quickpoints .container,
  body.workbench-embed.workbench-panel-daily .container{padding:7px}
  body.workbench-embed.workbench-panel-quickpoints .quick-point-toolbar{grid-template-columns:1fr}
  body.workbench-embed.workbench-panel-quickpoints .quick-point-grid{grid-template-columns:1fr;max-height:none;overflow-y:auto}
  body.workbench-embed.workbench-panel-daily .daily-lesson-picker,
  body.workbench-embed.workbench-panel-daily .daily-lesson-picker label{width:100%}
  body.workbench-embed.workbench-panel-daily .daily-lesson-picker label{align-items:stretch;flex-direction:column}
  body.workbench-embed.workbench-panel-daily .daily-lesson-picker select{width:100%;min-width:0}
}

/* v1.31.5 連堂／換班快速銜接＋上課狀態恢復 */
.lesson-handoff-banner,.lesson-recovery-banner{display:flex;align-items:center;gap:16px;margin:14px 0 18px;padding:16px 18px;border:1px solid #bfdbfe;border-radius:18px;background:linear-gradient(135deg,#eff6ff,#fff);box-shadow:0 8px 22px rgba(30,64,175,.08)}
.lesson-handoff-banner.is-same-class{border-color:#bbf7d0;background:linear-gradient(135deg,#f0fdf4,#fff)}
.lesson-handoff-icon,.lesson-recovery-icon{display:grid;place-items:center;flex:0 0 48px;width:48px;height:48px;border-radius:16px;background:#fff;font-size:1.55rem;box-shadow:0 4px 12px rgba(15,23,42,.08)}
.lesson-handoff-copy,.lesson-recovery-copy{display:grid;gap:3px;min-width:0;flex:1}.lesson-handoff-copy small,.lesson-recovery-copy small{font-weight:900;color:#2563eb}.lesson-handoff-banner.is-same-class .lesson-handoff-copy small{color:#15803d}.lesson-handoff-copy strong,.lesson-recovery-copy strong{font-size:1.04rem;color:#0f172a}.lesson-handoff-copy span,.lesson-recovery-copy span{color:#64748b;font-weight:700;line-height:1.5}
.lesson-handoff-time{display:grid;justify-items:center;gap:1px;padding:8px 12px;border-radius:14px;background:#fff;border:1px solid #dbeafe;white-space:nowrap}.lesson-handoff-time b{font-size:1.25rem;color:#1d4ed8}.lesson-handoff-time small{font-weight:800;color:#64748b}
.lesson-recovery-banner{border-color:#fcd34d;background:linear-gradient(135deg,#fffbeb,#fff)}.lesson-recovery-copy small{color:#b45309}.lesson-recovery-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.lesson-recovery-actions .btn{white-space:nowrap}
.lesson-end-next{display:flex;align-items:center;gap:10px;margin:0 20px 14px;padding:11px 13px;border:1px solid #dbeafe;border-radius:14px;background:#f8fbff}.lesson-end-next.is-consecutive{border-color:#bbf7d0;background:#f0fdf4}.lesson-end-next>span{font-size:1.35rem}.lesson-end-next>div{display:grid;gap:1px;min-width:0;flex:1}.lesson-end-next small{font-weight:800;color:#64748b}.lesson-end-next strong{color:#0f2b55}.lesson-end-next>b{font-size:1.05rem;color:#2563eb;white-space:nowrap}
@media(max-width:760px){.lesson-handoff-banner,.lesson-recovery-banner{align-items:flex-start;flex-wrap:wrap;padding:14px}.lesson-handoff-time{margin-left:64px}.lesson-recovery-actions{width:100%;justify-content:flex-start;margin-left:64px}.lesson-recovery-actions .btn{flex:1 1 auto}.lesson-end-next{margin-left:12px;margin-right:12px}}

/* v1.31.6 臨時白板＋86 吋大螢幕模式 */
.lesson-quickbar .lesson-quickbar-button{appearance:none;border:0;background:transparent;font:inherit;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:68px;border-radius:12px;color:#27364c;font-size:13px;text-decoration:none}
.lesson-quickbar .lesson-quickbar-button:hover{background:#eff6ff;color:#1d4ed8}.lesson-quickbar .lesson-quickbar-button span{font-size:22px}.lesson-quickbar .lesson-quickbar-button strong{font-size:13px;white-space:nowrap}.lesson-quickbar .lesson-quickbar-button small{display:block;margin-top:1px;font-size:10px;line-height:1.15;color:#64748b;font-weight:850;white-space:nowrap}
.lesson-quickbar.is-reordering .lesson-quickbar-button{position:relative;cursor:grab;user-select:none}.lesson-quickbar.is-reordering .lesson-quickbar-button:active{cursor:grabbing}.lesson-quickbar.is-reordering .lesson-quickbar-button::after{content:"⋮⋮";position:absolute;right:7px;top:5px;color:#7c93b3;font-size:.78rem;letter-spacing:-3px}.lesson-quickbar.is-reordering .lesson-quickbar-button.is-dragging{opacity:.42;transform:scale(.97);box-shadow:0 0 0 2px #93c5fd inset}
.lesson-tool-drawer-grid button{min-height:96px;display:grid;place-items:center;text-align:center;align-content:center;gap:6px;padding:12px;border:1px solid #dbe5f0;border-radius:15px;background:#fff;color:#163a70;font:inherit;cursor:pointer;box-shadow:0 5px 16px rgba(15,23,42,.05)}.lesson-tool-drawer-grid button:hover{border-color:#93c5fd;background:#f0f7ff}.lesson-tool-drawer-grid button span{font-size:1.55rem}.lesson-tool-drawer-grid button strong{font-size:.92rem}

.workbench-whiteboard[hidden]{display:none!important}.workbench-whiteboard{position:fixed;z-index:5200;inset:0;display:grid;grid-template-rows:auto minmax(0,1fr);background:#0f172a;color:#fff}.workbench-whiteboard:fullscreen{width:100%;height:100%;background:#0f172a}.workbench-whiteboard-open{overflow:hidden}
.whiteboard-toolbar{position:relative;z-index:5;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;padding:8px 10px;background:rgba(15,23,42,.98);border-bottom:1px solid rgba(148,163,184,.35);box-shadow:0 6px 24px rgba(0,0,0,.25)}.whiteboard-toolbar-title{display:flex;align-items:center;gap:9px;min-width:190px}.whiteboard-toolbar-title>span{font-size:1.55rem}.whiteboard-toolbar-title>div{display:grid}.whiteboard-toolbar-title strong{font-size:.98rem}.whiteboard-toolbar-title small{font-size:.67rem;color:#cbd5e1;white-space:nowrap}
.whiteboard-toolbar-tools{display:flex;align-items:center;justify-content:center;gap:7px;flex-wrap:wrap;min-width:0}.whiteboard-tool-group{display:flex;align-items:center;gap:4px;padding:3px;border-radius:10px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.08)}.whiteboard-tool,.whiteboard-bg{min-height:38px;border:0;border-radius:8px;padding:7px 9px;background:transparent;color:#e5edf7;font:inherit;font-weight:850;cursor:pointer;white-space:nowrap}.whiteboard-tool:hover,.whiteboard-tool.is-active,.whiteboard-bg:hover,.whiteboard-bg.is-active{background:#fff;color:#17345e}.whiteboard-tool:disabled{opacity:.38;cursor:not-allowed}.whiteboard-danger:hover{background:#fee2e2!important;color:#b91c1c!important}.whiteboard-zoom-label{min-width:58px}.whiteboard-colors{gap:7px;padding-inline:7px}.whiteboard-color{width:30px;height:30px;border-radius:50%;border:3px solid rgba(255,255,255,.55);background:var(--whiteboard-color);cursor:pointer;box-shadow:0 0 0 1px rgba(15,23,42,.5)}.whiteboard-color.is-active{outline:3px solid #60a5fa;outline-offset:2px}.whiteboard-width{display:flex;align-items:center;gap:5px;color:#e2e8f0;font-size:.68rem;font-weight:800}.whiteboard-width input{width:82px;accent-color:#60a5fa}.whiteboard-toolbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;min-width:210px}.whiteboard-save-state,.whiteboard-pointer-state{display:inline-flex;align-items:center;min-height:30px;padding:5px 8px;border-radius:999px;background:rgba(255,255,255,.08);color:#dbeafe;font-size:.66rem;font-weight:850;white-space:nowrap}.whiteboard-save-state.is-saving{color:#fde68a}.whiteboard-save-state.is-error{color:#fecaca}.whiteboard-close{width:42px;height:42px;border:0;border-radius:50%;background:#334155;color:#fff;font-size:27px;line-height:1;cursor:pointer}.whiteboard-close:hover{background:#475569}
.whiteboard-stage{position:relative;min-height:0;overflow:hidden;background:#111827;touch-action:none}.whiteboard-surface{position:absolute;left:50%;top:50%;transform-origin:center center;background:#fff;box-shadow:0 18px 60px rgba(0,0,0,.45);will-change:transform;overflow:hidden}.whiteboard-surface canvas{position:absolute;inset:0;display:block;width:100%;height:100%;touch-action:none;cursor:crosshair}.whiteboard-canvas-base{z-index:1}.whiteboard-canvas-live{z-index:2;pointer-events:none}.workbench-whiteboard.is-pan-tool .whiteboard-surface canvas{cursor:grab}.workbench-whiteboard.is-pan-tool .whiteboard-surface canvas:active{cursor:grabbing}.whiteboard-surface.is-white{background:#fff}.whiteboard-surface.is-black{background:#18231f}.whiteboard-surface.is-grid{background-color:#fff;background-image:linear-gradient(#dbe4ef 1px,transparent 1px),linear-gradient(90deg,#dbe4ef 1px,transparent 1px),linear-gradient(#9fb3c9 1px,transparent 1px),linear-gradient(90deg,#9fb3c9 1px,transparent 1px);background-size:40px 40px,40px 40px,200px 200px,200px 200px}.whiteboard-surface.is-axis{background-color:#fff;background-image:linear-gradient(#e2e8f0 1px,transparent 1px),linear-gradient(90deg,#e2e8f0 1px,transparent 1px),linear-gradient(#94a3b8 2px,transparent 2px),linear-gradient(90deg,#94a3b8 2px,transparent 2px);background-size:40px 40px,40px 40px,960px 540px,960px 540px;background-position:0 0,0 0,0 540px,960px 0}.whiteboard-stage-hint{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);z-index:3;pointer-events:none;padding:7px 12px;border-radius:999px;background:rgba(15,23,42,.78);color:#e2e8f0;font-size:.72rem;font-weight:800;white-space:nowrap;box-shadow:0 5px 18px rgba(0,0,0,.2)}
@media(max-width:1450px){.whiteboard-toolbar{grid-template-columns:auto minmax(0,1fr)}.whiteboard-toolbar-title{min-width:160px}.whiteboard-toolbar-actions{grid-column:1/-1;justify-content:center;min-width:0;padding-top:2px}.whiteboard-pointer-state{display:none}.whiteboard-tool span{display:none}}
@media(max-width:900px){.whiteboard-toolbar{grid-template-columns:1fr;gap:6px;padding:6px}.whiteboard-toolbar-title{display:none}.whiteboard-toolbar-tools{justify-content:flex-start;overflow-x:auto;flex-wrap:nowrap;padding-bottom:2px}.whiteboard-toolbar-actions{grid-column:auto;justify-content:flex-end}.whiteboard-save-state{margin-right:auto}.whiteboard-backgrounds{display:none}.whiteboard-stage-hint{display:none}.whiteboard-tool,.whiteboard-bg{min-height:42px}}

/* 86 吋／大型觸控顯示器：只放大高頻上課介面，避免一般管理頁整站膨脹。 */
body.classroom-large-ui .lesson-quickbar{grid-template-columns:repeat(auto-fit,minmax(124px,1fr));gap:10px;padding:11px;top:6px}
body.classroom-large-ui .lesson-quickbar a,body.classroom-large-ui .lesson-quickbar .lesson-quickbar-button{min-height:82px;border-radius:15px;font-size:15px}
body.classroom-large-ui .lesson-quickbar a>span,body.classroom-large-ui .lesson-quickbar .lesson-quickbar-button>span{font-size:29px}
body.classroom-large-ui .lesson-quickbar a strong,body.classroom-large-ui .lesson-quickbar .lesson-quickbar-button strong{font-size:15px}
body.classroom-large-ui .lesson-quickbar a small,body.classroom-large-ui .lesson-quickbar .lesson-quickbar-button small{font-size:11px}
body.classroom-large-ui .lesson-quickbar-customize{min-height:42px;padding:8px 14px;font-size:.82rem}
body.classroom-large-ui .lesson-tool-drawer{width:min(520px,94vw);padding:22px}body.classroom-large-ui .lesson-tool-drawer-grid{gap:12px}body.classroom-large-ui .lesson-tool-drawer-grid a,body.classroom-large-ui .lesson-tool-drawer-grid button{min-height:116px;border-radius:18px}body.classroom-large-ui .lesson-tool-drawer-grid span{font-size:2rem}body.classroom-large-ui .lesson-tool-drawer-grid strong{font-size:1.05rem}body.classroom-large-ui .lesson-tool-drawer-head button{width:50px;height:50px;font-size:31px}
body.classroom-large-ui .workbench-panel-shell{margin:6px;border-radius:18px}body.classroom-large-ui .workbench-panel-head{padding:12px 16px}body.classroom-large-ui .workbench-panel-head strong{font-size:1.28rem}body.classroom-large-ui .workbench-panel-close{width:52px;height:52px;font-size:30px}body.classroom-large-ui .workbench-panel-head .btn{min-height:48px;padding:10px 16px;font-size:.95rem}
body.classroom-large-ui.workbench-embed .btn{min-height:48px;padding:9px 15px;font-size:.95rem}body.classroom-large-ui.workbench-embed input,body.classroom-large-ui.workbench-embed select,body.classroom-large-ui.workbench-embed textarea{font-size:1rem}
body.classroom-large-ui.workbench-panel-quickpoints .quick-point-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}body.classroom-large-ui.workbench-panel-quickpoints .quick-point-card{min-height:126px}body.classroom-large-ui.workbench-panel-quickpoints .quick-point-actions .btn{min-width:58px;min-height:50px}
body.classroom-large-ui.workbench-panel-daily .daily-table-wrap{scrollbar-width:auto}body.classroom-large-ui.workbench-panel-daily .daily-table th,body.classroom-large-ui.workbench-panel-daily .daily-table td{padding-top:10px;padding-bottom:10px}body.classroom-large-ui.workbench-panel-daily .daily-table input[type="checkbox"]{width:28px;height:28px}
body.classroom-large-ui.workbench-panel-seat .seat-student-card,body.classroom-large-ui .seat-stage .seat-student-card{min-height:72px;padding:9px 10px;gap:10px;border-radius:13px}body.classroom-large-ui .seat-stage .seat-student-text strong{font-size:18px}body.classroom-large-ui .seat-stage .seat-student-text small{font-size:12px}body.classroom-large-ui .seat-stage .seat-student-card>.avatar{width:48px;height:48px;font-size:28px}body.classroom-large-ui .seat-stage .seat-student-card .avatar-art-image{width:48px;height:48px}body.classroom-large-ui .seat-stage .seat-slot{min-height:138px}
body.classroom-large-ui .timer-display{font-size:clamp(8rem,18vw,16rem);line-height:.95}body.classroom-large-ui .timer-controls{gap:16px}body.classroom-large-ui .timer-controls .btn{min-width:180px;min-height:70px;font-size:1.35rem}body.classroom-large-ui .timer-quick-buttons .btn{min-height:52px;font-size:1rem}body.classroom-large-ui .timer-custom-row input{min-height:52px;font-size:1.2rem}
body.classroom-large-ui .draw-result{min-height:150px}body.classroom-large-ui .draw-winner-card{padding:18px 24px;gap:18px;border-radius:20px}body.classroom-large-ui .draw-winner-card strong{font-size:32px}body.classroom-large-ui .draw-winner-avatar{font-size:52px}body.classroom-large-ui .wheel-spin-button{width:142px;height:142px;font-size:30px}body.classroom-large-ui .draw-controls .btn,body.classroom-large-ui .draw-controls select{min-height:50px;font-size:1rem}
body.classroom-large-ui.pdf-annotator-body .pdf-toolbar{gap:9px;padding:9px 12px}body.classroom-large-ui.pdf-annotator-body .pdf-toolbar-group{gap:6px}body.classroom-large-ui.pdf-annotator-body .pdf-tool{min-height:50px;min-width:52px;padding:9px 12px;font-size:1rem;border-radius:11px}body.classroom-large-ui.pdf-annotator-body .pdf-toolbar .btn{min-height:50px;padding:9px 14px;font-size:.95rem}body.classroom-large-ui.pdf-annotator-body .pdf-toolbar input[type="checkbox"]{width:24px;height:24px}body.classroom-large-ui.pdf-annotator-body .pdf-toolbar input[type="range"]{min-width:120px}
body.classroom-large-ui .whiteboard-toolbar{padding:10px 12px;gap:12px}body.classroom-large-ui .whiteboard-tool,body.classroom-large-ui .whiteboard-bg{min-height:50px;padding:10px 12px;font-size:.95rem}body.classroom-large-ui .whiteboard-color{width:38px;height:38px}body.classroom-large-ui .whiteboard-close{width:54px;height:54px;font-size:32px}body.classroom-large-ui .whiteboard-width input{width:120px}body.classroom-large-ui .whiteboard-save-state,body.classroom-large-ui .whiteboard-pointer-state{min-height:36px;padding:7px 10px;font-size:.76rem}
/* v1.31.6 大螢幕快速加點／每日集點實際元件名稱補強 */
body.classroom-large-ui.workbench-panel-quickpoints .quick-student-card{min-height:126px;padding:12px 14px}
body.classroom-large-ui.workbench-panel-quickpoints .quick-student-main strong{font-size:1.08rem}
body.classroom-large-ui.workbench-panel-quickpoints .quick-student-actions .btn{min-width:58px;min-height:50px}
body.classroom-large-ui.workbench-panel-daily .daily-dynamic-table th,body.classroom-large-ui.workbench-panel-daily .daily-dynamic-table td{padding-top:10px;padding-bottom:10px}
body.classroom-large-ui.workbench-panel-daily .daily-dynamic-table input[type="checkbox"]{width:28px;height:28px}
@media(min-width:1101px){.lesson-quickbar{grid-template-columns:repeat(9,minmax(86px,1fr))}}

/* v1.31.6.1 Android 手指書寫＋行動版白板相容性熱修 */
.whiteboard-stage,.whiteboard-surface,.whiteboard-surface canvas{
  -webkit-user-select:none;
  user-select:none;
  -webkit-touch-callout:none;
  -webkit-tap-highlight-color:transparent;
  overscroll-behavior:none;
}
.workbench-whiteboard.is-android-touch .whiteboard-stage,
.workbench-whiteboard.is-android-touch .whiteboard-surface,
.workbench-whiteboard.is-android-touch .whiteboard-surface canvas{
  touch-action:none!important;
}
.workbench-whiteboard.is-android-touch .whiteboard-surface{
  outline:2px solid rgba(148,163,184,.7);
  outline-offset:-2px;
}
@media(max-width:900px) and (orientation:portrait){
  .workbench-whiteboard.is-mobile-portrait .whiteboard-stage::before{
    content:"📱 手指可直接在中央白板書寫・橫向使用空間更大";
    position:absolute;
    z-index:4;
    left:50%;
    top:10px;
    transform:translateX(-50%);
    max-width:calc(100% - 24px);
    padding:6px 10px;
    border-radius:999px;
    background:rgba(15,23,42,.78);
    color:#dbeafe;
    font-size:.68rem;
    font-weight:850;
    line-height:1.25;
    white-space:nowrap;
    pointer-events:none;
  }
  .workbench-whiteboard.is-mobile-portrait .whiteboard-surface{
    box-shadow:0 10px 32px rgba(0,0,0,.55),0 0 0 1px rgba(148,163,184,.55);
  }
}

/* v1.31.6.2 Android 即時筆跡顯示＋Live Ink 熱修 */
.workbench-whiteboard.is-android-touch .whiteboard-surface{
  will-change:auto;
  backface-visibility:visible;
}
.workbench-whiteboard.is-android-touch .whiteboard-canvas-base,
.workbench-whiteboard.is-android-touch .whiteboard-canvas-live{
  transform:none;
  will-change:auto;
}
.whiteboard-canvas-live{contain:strict}
