/* Classroom design system: paper, dark teal, amber status; system Chinese text. */
:root{--ink:#193431;--muted:#667773;--line:#dce5df;--paper:#f4f6f1;--white:#fff;--brand:#146e5b;--brand-dark:#0e4b40;--warn:#88561c;--danger:#a73131;--radius:12px;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;color:var(--ink);background:var(--paper);font-size:16px;line-height:1.55}
*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer;border:1px solid var(--line);background:white;border-radius:8px;padding:10px 17px;color:var(--ink);min-height:44px;font-weight:600}button:hover{background:#eef5f0}button.primary{background:var(--brand);color:white;border-color:var(--brand)}button.primary:hover{background:var(--brand-dark)}button.danger{color:var(--danger);border-color:#debcbc}button:disabled{opacity:.5;cursor:not-allowed}button:focus-visible,a:focus-visible{outline:3px solid #d69639;outline-offset:3px}input,select,textarea{width:100%;padding:10px 12px;border:1px solid #becfc6;border-radius:7px;background:white;color:var(--ink);min-height:46px}input:focus,select:focus,textarea:focus{outline:2px solid var(--brand);outline-offset:1px}input[type=checkbox]{width:20px;min-height:20px;accent-color:var(--brand)}label{display:block;font-size:14px;font-weight:600;margin-bottom:12px}label input,label select,label textarea{margin-top:6px}h1,h2,h3,p{margin:0 0 12px}h1{font-size:28px;letter-spacing:-.6px}h2{font-size:21px}h3{font-size:17px}a{color:var(--brand)}small,.muted{color:var(--muted)}[hidden]{display:none!important}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.between{justify-content:space-between}.stack{display:grid;gap:18px}.card{background:white;border:1px solid var(--line);border-radius:var(--radius);padding:24px}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.badge{display:inline-block;padding:3px 9px;background:#e9f3eb;border-radius:5px;font-size:13px;color:var(--brand-dark)}.notice{padding:12px 16px;background:#fff6e6;border:1px solid #eddfc1;border-radius:8px;color:var(--warn);font-size:14px}.error{color:var(--danger);white-space:pre-wrap}.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:var(--ink);color:white;border-radius:8px;padding:14px 22px;z-index:50;max-width:90vw;box-shadow:0 4px 20px #0002}.login{max-width:450px;margin:10vh auto;padding:32px}.login .mark{width:48px;height:48px;display:grid;place-items:center;background:var(--brand);color:white;border-radius:12px;font-size:26px;margin-bottom:24px}.login h1{font-size:28px}.login button{width:100%}.login footer{font-size:13px;color:var(--muted);margin-top:22px}.topbar{height:76px;border-bottom:1px solid var(--line);background:white;padding:0 32px;display:flex;align-items:center;justify-content:space-between;gap:16px}.brand{font-weight:750;font-size:20px}.brand span{font-size:12px;background:var(--paper);padding:4px 7px;border-radius:4px;margin-left:8px;color:var(--muted)}.shell{max-width:1360px;margin:auto;display:grid;grid-template-columns:190px minmax(0,1fr);min-height:calc(100vh - 76px)}nav{padding:30px 20px;border-right:1px solid var(--line)}nav button{display:block;width:100%;text-align:left;margin-bottom:9px;background:transparent;border-color:transparent}nav button.active{background:var(--brand);color:white}main.admin{padding:30px;min-width:0}.section-title{margin-bottom:22px}.section-title p{color:var(--muted);font-size:14px}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;font-size:14px}th,td{text-align:left;vertical-align:top;padding:13px 10px;border-bottom:1px solid var(--line)}th{font-size:12px;color:var(--muted);background:#f7f9f5;white-space:nowrap}td button{min-height:34px;padding:5px 10px;font-size:13px}.empty{padding:32px;text-align:center;color:var(--muted)}.toolbar{margin-bottom:16px}.toolbar input{max-width:340px}.lesson{padding:20px;border:1px solid var(--line);border-radius:10px;margin-top:15px}.lesson header{margin-bottom:15px}.lesson .row button{font-size:14px}.lesson-controls{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}.linkbox{background:var(--paper);padding:10px;border-radius:6px;word-break:break-all;margin:12px 0;font-size:14px}.compact{font-size:13px}.checks{max-height:200px;overflow:auto;border:1px solid var(--line);border-radius:6px;padding:10px}.checks label{display:flex;align-items:center;gap:8px;margin:6px 0;font-weight:400}.checks label input{margin:0}.admin-chat{max-height:300px;overflow:auto;background:var(--paper);padding:12px;border-radius:8px}.admin-chat .item{border-bottom:1px solid var(--line);padding:8px 0}.admin-chat .item p{margin:0;overflow-wrap:anywhere}.admin-chat .item button{font-size:12px;padding:3px 8px;min-height:30px}dialog{border:1px solid var(--line);border-radius:14px;width:min(580px,94vw);max-height:90vh;padding:25px;color:var(--ink)}dialog::backdrop{background:#0d242a88}dialog header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}dialog h2{margin:0}.steps{padding-left:22px}.steps li{margin:12px 0}.keyvalue{display:grid;grid-template-columns:1fr 1fr;gap:15px}.metric strong{font-size:26px;display:block}.metric span{font-size:13px;color:var(--muted)}
/* Student view intentionally single column, readable at 360px. */
.student-body{background:#eaf0eb}.classroom{max-width:850px;margin:auto;background:white;min-height:100dvh;display:flex;flex-direction:column}.class-header{padding:14px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:10px}.class-header h1{font-size:19px;margin:0}.class-header small{font-size:13px}.class-header button{font-size:14px;white-space:nowrap;padding:6px 12px}.video-area{background:#132925;color:white;position:relative;aspect-ratio:16/9;display:grid;place-items:center}.video-area video{width:100%;height:100%;position:absolute;inset:0;background:#132925;object-fit:contain}.video-status{position:relative;text-align:center;padding:20px;z-index:1}.video-status h2{font-size:23px}.video-status p{color:#c3d3cb}.signal-label{padding:6px 16px;font-size:12px;background:#fff3d9;color:#7d5217}.class-meta{padding:10px 18px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);font-size:14px}.announcement{padding:12px 18px;background:#f1f6e9;border-bottom:1px solid var(--line);font-size:17px;overflow-wrap:anywhere}.chat-heading{font-size:17px;padding:14px 18px 5px;font-weight:700}.chat-list{height:clamp(150px,30dvh,360px);overflow-y:auto;padding:5px 18px 18px;flex:1;min-height:150px;background:#fbfcfa}.chat-line{padding:8px 0;font-size:19px;overflow-wrap:anywhere}.chat-line .name{color:var(--brand);margin-right:9px;font-size:16px;font-weight:600}.chat-line.teacher{background:#eff5e9;padding:10px;border-radius:6px}.composer{padding:12px 16px calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--line);position:sticky;bottom:0;background:white}.quick{display:flex;gap:8px;margin-bottom:10px}.quick button{flex:1;padding:8px 4px;font-size:17px}.compose-row{display:flex;gap:9px}.compose-row input{font-size:18px;min-width:0}.compose-row button{font-size:18px;white-space:nowrap}.student-login input{font-size:23px;letter-spacing:1px}.student-login button{font-size:21px;min-height:55px}.student-login p{font-size:17px}.student-login .error{font-size:16px;margin-top:16px}.classroom .error{padding:8px 18px}.new-messages{display:block;margin:5px auto;font-size:14px}.disconnected{padding:12px 18px;background:#fff0dc;color:#774912;font-size:15px}
@media(max-width:800px){.topbar{padding:12px 16px;height:auto}.brand{font-size:17px}.brand span{display:none}.shell{display:block}nav{display:flex;padding:10px;border-right:0;border-bottom:1px solid var(--line);overflow:auto;gap:6px}nav button{width:auto;white-space:nowrap;margin:0;padding:8px 12px}main.admin{padding:18px 12px}.grid{grid-template-columns:1fr}.card{padding:18px}.login{margin:5vh 16px;max-width:none}.keyvalue{grid-template-columns:1fr}h1{font-size:24px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}

