/* 墨蓝·朱印 —— 全站令牌 + 组件换肤。加载顺序：classroom.css → ykt-tokens.css → ykt-components.css → site-tokens.css
   只覆盖变量和视觉属性，不改布局/结构/JS 钩子。回滚 = 删掉这一行 <link>。 */
@font-face{font-family:"Loohcs Serif";src:url(/fonts/loohcs-serif-subset.woff2) format("woff2");font-weight:700;font-display:swap}
:root{
  /* 新令牌 */
  --ink-950:#081221;--ink-900:#0C1A2E;--ink-800:#13253F;--ink-700:#1C3557;--ink-600:#2A4A73;
  --mist:#C9D3E0;--mist-2:#8FA0B6;
  --paper-bg:#F6F3EC;--paper-2:#EDE7DB;--line-2:#D3CAB8;
  --text:#121C2B;--text-2:#475263;--text-3:#646B75;
  --seal:#B3361E;--seal-600:#962C18;--seal-50:#FBEDE8;
  --brass:#C9A45C;--brass-ink:#7A5A1E;
  --font-sans:-apple-system,"PingFang SC","HarmonyOS Sans SC","MiSans","Noto Sans SC","Noto Sans CJK SC","Source Han Sans SC","Microsoft YaHei",system-ui,sans-serif;
  --font-serif:"Iowan Old Style","Palatino Linotype","Book Antiqua",Georgia,"Loohcs Serif","Songti SC","Noto Serif SC","Noto Serif CJK SC","Source Han Serif SC","STSong",serif;
  --font-num:"SF Pro Display","DIN Alternate",Bahnschrift,Roboto,var(--font-sans);
  /* 映射到已上线的 ykt 变量（名字不变，JS/HTML 无需改） */
  --brand:#1C3557;--brand-600:#0C1A2E;--brand-50:#EEF1F6;--brand-100:#DCE3EE;
  --ink:#121C2B;--ink-2:#475263;--ink-3:#646B75;
  --line:#E2DBCC;--bg:#F6F3EC;--card:#FFFFFF;--panel:#FFFFFF;
  --ok:#1E7350;--ok-ink:#17603F;--ok-50:#E6F2EC;--warn:#A8530A;--warn-ink:#8A4508;--warn-50:#FBF0E3;
  --star:#C98A00;--danger:#B3361E;--danger-50:#FBEDE8;
  --stage:#081221;--stage-2:#13253F;
  --r-sm:8px;--r:14px;--r-lg:22px;
  --shadow:0 1px 2px rgba(12,26,46,.06),0 4px 14px rgba(12,26,46,.06);
  --shadow-lg:0 18px 48px rgba(8,18,33,.22);
  --font:var(--font-sans);--sans:var(--font-sans);--serif:var(--font-serif);
  /* 旧 classroom.css 语义：--paper=正文色，--gold=强调色 */
  --paper:#121C2B;--gold:#1C3557;--muted:#475263;
}
body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3,.brand,.page-head h1,.page-head h2,.la-project h2{font-family:var(--font-serif);font-weight:700;letter-spacing:0}
.stat b,.y-stat b{font-weight:700;color:var(--text)}
.stat b,.y-stat b,.card-number,.y-code b,.la-code,.qr-body .code{font-family:var(--font-num);font-variant-numeric:tabular-nums}
.eyebrow{color:var(--seal);font-weight:700;letter-spacing:.16em;font-size:11px}

/* 按钮：默认 48px 胶囊；primary=墨蓝；结束/危险=朱砂 */
.btn,.y-btn{min-height:48px;border-radius:999px;font-weight:600;transition:background .15s,border-color .15s,transform .1s}
.btn:active,.y-btn:active{transform:translateY(1px)}
.btn{background:#fff;color:var(--text);border:1px solid var(--line-2)}
.btn:hover{border-color:var(--ink-600);background:#fff}
.btn.primary,.y-btn.primary,.y-btn.y-primary,.la-go{background:var(--ink-900);border-color:var(--ink-900);color:#fff}
.btn.primary:hover{background:var(--ink-800)}
.btn.y-end,.y-btn.y-danger,.y-btn.y-plus{background:var(--seal);border-color:var(--seal);color:#fff}
.btn.small{min-height:40px}
input,select,textarea{min-height:48px;font-size:16px;background:#fff;color:var(--text);border:1px solid var(--line-2);border-radius:12px}
input:focus,select:focus,textarea:focus{border-color:var(--ink-700);box-shadow:0 0 0 4px rgba(28,53,87,.12);outline:0}

/* 卡片/面板 */
.card,.y-card,.panel,.stat,.y-stat,.y-side,.y-stage .la-main,.y-phone .la-card{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
dialog{border-radius:var(--r-lg);box-shadow:var(--shadow-lg)}
dialog::backdrop{background:rgba(8,18,33,.55)}
.toast{background:var(--ink-900);color:#fff}
.notice{background:var(--paper-2);border-left:3px solid var(--seal);color:var(--text)}

/* 标志：墨蓝方印 + 朱点（原创，非校徽） */
.mark,.y-logo b{position:relative;background:var(--ink-900);color:#F6F3EC;border:0;border-radius:10px;width:36px;height:36px;display:grid;place-items:center;font:700 20px var(--font-serif)}
.mark::after,.y-logo b::after{content:"";position:absolute;right:5px;bottom:5px;width:7px;height:7px;border-radius:2px;background:var(--seal)}

/* 老师端外壳：墨蓝侧栏 */
.sidebar{background:var(--ink-900);color:var(--mist);border:0}
.sidebar .brand,.sidebar .side-item.active{color:#fff}
.side-item{min-height:44px;border-radius:12px;color:var(--mist)}
.side-item:hover{background:rgba(255,255,255,.06)}
.side-item.active{background:rgba(255,255,255,.08);color:#fff;box-shadow:inset 3px 0 0 var(--seal);border-color:transparent}
.topbar{background:rgba(246,243,236,.86);backdrop-filter:saturate(1.4) blur(12px);-webkit-backdrop-filter:saturate(1.4) blur(12px);border-bottom:1px solid var(--line)}

/* 登录页 */
.login-intro{background:radial-gradient(ellipse at 20% 0%,#1F3B63 0%,transparent 55%),linear-gradient(170deg,var(--ink-900),var(--ink-950));color:#fff}
.login-intro h1 span{color:var(--brass)}
.login-intro .lede,.login-intro .intro-foot,.login-intro .intro-foot span{color:var(--mist)}
.login-intro .eyebrow{color:var(--brass)}
.login-orbit:before,.login-orbit:after{border-color:rgba(201,164,92,.28)}
.login-side{background:var(--bg)}
.login-card{background:#fff;border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow);padding:32px;position:relative;z-index:1;width:min(100%,420px)}
.login-card label,.login-card .muted{color:var(--text-2)}
.login-intro .brand small{color:var(--mist-2)}
.top-actions .btn{border-radius:999px;min-height:40px;padding:0 16px}
.role-tabs{background:var(--paper-2);border-radius:999px;padding:4px;display:grid;grid-template-columns:1fr 1fr;gap:4px;border:0}
.role-tabs button{min-height:44px;border-radius:999px;border:0;color:var(--text-2);font-weight:600}
.role-tabs .active{background:#fff;color:var(--text);box-shadow:0 1px 3px rgba(12,26,46,.12)}
@media (max-width:760px){
  .login-layout{grid-template-columns:1fr}
  .login-intro{padding:calc(24px + env(safe-area-inset-top)) 24px 72px;min-height:auto}
  .login-intro .brand{position:static;margin-bottom:24px}
  .login-intro h1{font-size:38px;line-height:1.2}
  .login-orbit,.intro-foot{display:none}
  .login-side{margin-top:-48px;padding:0 16px 24px;background:transparent;position:relative;z-index:1}
  .login-card{padding:24px 20px}
}

/* 雨课堂式三端（保留结构，只换色） */
.y-top{background:rgba(246,243,236,.9);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.y-code{background:#fff;border:1px solid var(--line)}.y-code b{color:var(--text);font-size:20px}
.y-thumb{border-radius:10px;border:2px solid transparent}
.y-thumb.on{border-color:var(--seal);background:#fff;box-shadow:0 0 0 4px var(--seal-50)}
.la-switch button.on,.y-phase button.on{background:var(--ink-900);border-color:var(--ink-900);color:#fff}
.y-tag{background:var(--brand-50);color:var(--ink-700)}
.y-switch.on{background:var(--ink-700)}
.y-newq{background:var(--ink-900);border:0;color:#fff}
.y-phone .la-choice{min-height:56px;border:1px solid var(--line-2);border-radius:14px}
.y-phone .la-choice.on{background:var(--brand-50);border-color:var(--ink-700);color:var(--text)}
.y-phone .la-choice.on b{background:var(--ink-900);color:#fff}
/* classroom.css 的 #b4d7bd、#f3c18e、#f3e7c7 是深色底上的浅色。名册和题目卡现在是白纸，这里改成同一套墨蓝纸底里的深色。 */
.status{color:var(--ok-ink)}
.status.late{color:var(--warn-ink)}
.y-phone .la-frame{color:var(--brass-ink)}
.y-phone .la-saved,.y-phone .la-winner,.y-stage .la-winner{color:var(--text)}
.y-phone .la-result.true{color:var(--ok-ink)}
.y-phone .la-result.lie{color:var(--seal-600)}
.y-checkin,.qr-dialog{background:radial-gradient(ellipse at 15% 10%,#1F3B63,transparent 55%),var(--ink-950);color:#fff}
.y-checkin .la-kicker,.qr-dialog .eyebrow{color:var(--brass)}
.y-bars .la-bar em{background:linear-gradient(90deg,var(--ink-700),var(--brass))}
.la-cloud small{color:var(--seal)}
#liveBoard.y-student-board{background:rgba(246,243,236,.94);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
/* 窄屏遥控不再改成深色。真实 DOM 里 .y-qbar.y-card、.y-phase button、.y-thumb 和问卷投屏的 .y-card 仍是白底，
   若 .y-stage 把 color 设成白色，这些卡片会变成白字白底。遥控和问卷投屏保持浅色。 */
.qr-dialog .modal-head,.qr-dialog h2,.qr-dialog .gold,.qr-body .code{color:#fff}
.qr-dialog .muted,.qr-dialog .tiny{color:var(--mist)}
.qr-dialog .btn:not(.primary){color:var(--text)}
:focus-visible{outline:3px solid var(--brass);outline-offset:2px}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
