/* ==========================================================================
   课迹 · Cozy Game 手账风样式
   奶油黄底 / 草绿 + 天空蓝功能色 / 粗棕描边 / 圆角卡片 / 轻拟物阴影 / 贴纸 UI
   ========================================================================== */

:root{
  /* 底色 */
  --cream:#FBF3E0;
  --cream-2:#F5E9D0;
  --card:#FFFCF3;
  --card-2:#FDF6E7;
  --paper:#FFFDF6;

  /* 墨色 */
  --ink:#4A3728;
  --ink-2:#7C6552;
  --ink-3:#A89484;

  /* 描边 */
  --line:#6B4F3A;
  --line-soft:#C9B49C;

  /* 功能色 */
  --green:#7CB342;
  --green-d:#5E8F2E;
  --green-soft:#E9F4D8;
  --sky:#5FA8D3;
  --sky-d:#3E86B4;
  --sky-soft:#DEEFF9;
  --amber:#E8A33D;
  --amber-soft:#FCEFD6;
  --pink:#E58C82;
  --pink-soft:#FBE3DF;
  --violet:#9B8AC4;
  --violet-soft:#EDE8F7;

  /* 阴影（轻拟物：硬边 + 柔散） */
  --sh-1:0 2px 0 rgba(107,79,58,.16);
  --sh-2:0 3px 0 rgba(107,79,58,.20), 0 8px 18px rgba(107,79,58,.10);
  --sh-3:0 4px 0 rgba(107,79,58,.24), 0 14px 28px rgba(107,79,58,.14);

  --r-s:10px; --r-m:16px; --r-l:22px; --r-xl:28px;
  --bw:2.5px;

  --topbar-h:56px;
  --tabbar-h:60px;

  --font:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB",
         "Noto Sans SC","Microsoft YaHei",system-ui,sans-serif;
}

*,*::before,*::after{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;height:100%}
html{-webkit-text-size-adjust:100%}

body{
  font-family:var(--font);
  color:var(--ink);
  background-color:var(--cream);
  /* 手账纸的隐约网格 */
  background-image:
    linear-gradient(rgba(107,79,58,.045) 1px,transparent 1px),
    linear-gradient(90deg,rgba(107,79,58,.045) 1px,transparent 1px);
  background-size:22px 22px;
  font-size:15px;
  line-height:1.5;
  overflow-x:hidden;
  overscroll-behavior-y:none;
}

button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:none;background:none;padding:0}
a{color:var(--sky-d);text-decoration:none}
h1,h2,h3,h4,p{margin:0}
ul,ol{margin:0;padding:0;list-style:none}

/* 滚动条（Mac 上别太抢眼） */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:var(--line-soft);border-radius:9px;border:2px solid var(--cream)}
::-webkit-scrollbar-track{background:transparent}

/* ========================= 通用元件 ========================= */

.card{
  background:var(--card);
  border:var(--bw) solid var(--line);
  border-radius:var(--r-l);
  box-shadow:var(--sh-2);
  padding:14px;
}
.card.tight{padding:10px}
.card.flat{box-shadow:var(--sh-1)}

/* 贴纸小标签 */
.sticker{
  display:inline-flex;align-items:center;gap:4px;
  padding:2px 9px;border-radius:8px;
  border:2px solid var(--line);
  font-size:11.5px;font-weight:700;letter-spacing:.3px;
  background:var(--cream-2);color:var(--ink);
  box-shadow:0 1.5px 0 rgba(107,79,58,.22);
}
.sticker.g{background:var(--green-soft);color:var(--green-d)}
.sticker.b{background:var(--sky-soft);color:var(--sky-d)}
.sticker.a{background:var(--amber-soft);color:#A96B12}
.sticker.p{background:var(--pink-soft);color:#B4574C}
.sticker.v{background:var(--violet-soft);color:#6A5A9B}

/* 纸胶带效果 */
.tape{
  position:absolute;top:-10px;left:50%;transform:translateX(-50%) rotate(-2.5deg);
  width:64px;height:17px;border-radius:2px;
  background:rgba(124,179,66,.55);
  border:1.5px solid rgba(107,79,58,.35);
  box-shadow:0 1px 3px rgba(107,79,58,.2);
  pointer-events:none;
}
.tape.blue{background:rgba(95,168,211,.5)}
.tape.pink{background:rgba(229,140,130,.5)}
.tape.amber{background:rgba(232,163,61,.5)}

/* 按钮 */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:42px;padding:0 15px;
  background:var(--card);color:var(--ink);
  border:var(--bw) solid var(--line);
  border-radius:var(--r-m);
  box-shadow:var(--sh-1);
  font-size:14px;font-weight:600;
  transition:transform .08s ease, box-shadow .08s ease, background .12s;
  user-select:none;white-space:nowrap;
}
.btn:active{transform:translateY(2px);box-shadow:none}
.btn.g{background:var(--green);color:#fff}
.btn.b{background:var(--sky);color:#fff}
.btn.a{background:var(--amber);color:#4A3728}
.btn.p{background:var(--pink);color:#fff}
.btn.ghost{background:var(--card-2)}
.btn.danger{background:var(--pink-soft);color:#A8402F;border-color:#C4735F}
.btn.sm{min-height:34px;padding:0 11px;font-size:13px;border-radius:12px;border-width:2px}
.btn.xs{min-height:28px;padding:0 9px;font-size:12px;border-radius:10px;border-width:2px}
.btn.block{width:100%}
.btn[disabled]{opacity:.45;pointer-events:none}
.btn .ico{font-size:15px;line-height:1}

/* 输入 */
.field{display:block;margin-bottom:10px}
.field > .lb{font-size:12.5px;font-weight:700;color:var(--ink-2);margin-bottom:4px;display:block}
.inp,textarea.inp,select.inp{
  width:100%;min-height:44px;padding:9px 12px;
  background:var(--paper);color:var(--ink);
  border:var(--bw) solid var(--line-soft);
  border-radius:var(--r-m);
  outline:none;transition:border-color .12s, box-shadow .12s;
  font-size:15px; /* iOS 不用 16px 也放大：见下方 iOS 修正 */
}
textarea.inp{min-height:96px;resize:vertical;line-height:1.55}
.inp:focus{border-color:var(--sky);box-shadow:0 0 0 3px var(--sky-soft)}
select.inp{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink-2) 50%),linear-gradient(135deg,var(--ink-2) 50%,transparent 50%);background-position:calc(100% - 17px) 19px,calc(100% - 12px) 19px;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:32px}

/* 开关 */
.switch{display:inline-flex;align-items:center;gap:8px;font-size:13.5px;font-weight:600;cursor:pointer}
.switch input{display:none}
.switch .track{width:44px;height:26px;border:2px solid var(--line);border-radius:14px;background:var(--cream-2);position:relative;transition:background .15s}
.switch .track::after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--card);border:2px solid var(--line);transition:transform .15s}
.switch input:checked + .track{background:var(--green-soft)}
.switch input:checked + .track::after{transform:translateX(18px);background:var(--green)}

/* 空状态 */
.empty{
  text-align:center;padding:34px 18px;color:var(--ink-3);
  border:2.5px dashed var(--line-soft);border-radius:var(--r-l);
  background:var(--card-2);
}
.empty .em{font-size:34px;display:block;margin-bottom:8px;opacity:.75}
.empty .t{font-size:14px;font-weight:700;color:var(--ink-2);margin-bottom:4px}
.empty .s{font-size:12.5px;line-height:1.6}

/* ========================= 顶部栏 ========================= */
#topbar{
  position:sticky;top:0;z-index:60;
  padding-top:env(safe-area-inset-top);
  background:linear-gradient(var(--cream) 72%,rgba(251,243,224,0));
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
}
#topbar .inner{
  display:flex;align-items:center;gap:10px;
  height:var(--topbar-h);padding:0 12px;
  max-width:1180px;margin:0 auto;
}
#topbar .brand{display:flex;align-items:center;gap:8px;font-size:18px;font-weight:800;letter-spacing:1px}
#topbar .brand .logo{
  width:30px;height:30px;border-radius:10px;display:grid;place-items:center;
  background:var(--green);border:2.5px solid var(--line);color:#fff;
  font-size:16px;box-shadow:0 2px 0 rgba(107,79,58,.25);
}
#topbar .page-title{font-size:15px;font-weight:700;color:var(--ink-2);margin-left:2px}
#topbar .spacer{flex:1}

/* 班级切换胶囊 */
.classbar{
  display:flex;gap:7px;overflow-x:auto;padding:0 12px 8px;
  max-width:1180px;margin:0 auto;scrollbar-width:none;
}
.classbar::-webkit-scrollbar{display:none}
.chip{
  flex:0 0 auto;display:inline-flex;align-items:center;gap:5px;
  min-height:34px;padding:0 12px;
  background:var(--card);border:2.5px solid var(--line);border-radius:13px;
  font-size:13.5px;font-weight:700;color:var(--ink-2);
  box-shadow:0 2px 0 rgba(107,79,58,.16);
}
.chip .n{font-size:11px;font-weight:600;color:var(--ink-3)}
.chip[aria-pressed="true"]{background:var(--green);color:#fff;border-color:var(--line)}
.chip[aria-pressed="true"] .n{color:rgba(255,255,255,.85)}
.chip.chip-add{background:var(--cream-2);color:var(--ink-2);border-style:dashed}

/* ========================= 主内容 ========================= */
#main{
  max-width:1180px;margin:0 auto;
  padding:2px 12px calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 30px);
}
#main.wide{max-width:1180px}

.section-head{display:flex;align-items:center;gap:8px;margin:14px 2px 9px}
.section-head h2{font-size:15px;font-weight:800;letter-spacing:.4px}
.section-head .sub{font-size:12px;color:var(--ink-3);font-weight:600}
.section-head .spacer{flex:1}

.grid{display:grid;gap:10px}
.grid.g2{grid-template-columns:repeat(2,1fr)}
.grid.g3{grid-template-columns:repeat(3,1fr)}
.grid.auto{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}

/* ========================= 底部标签栏 ========================= */
#tabbar{
  position:fixed;left:0;right:0;bottom:0;z-index:70;
  display:flex;
  background:var(--card);
  border-top:3px solid var(--line);
  padding-bottom:env(safe-area-inset-bottom);
  box-shadow:0 -4px 16px rgba(107,79,58,.10);
}
#tabbar button{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  height:var(--tabbar-h);color:var(--ink-3);
  font-size:10.5px;font-weight:700;letter-spacing:.2px;
  transition:color .12s,transform .08s;position:relative;
}
#tabbar button .ti{font-size:19px;line-height:1}
#tabbar button:active{transform:scale(.94)}
#tabbar button[aria-current="page"]{color:var(--green-d)}
#tabbar button[aria-current="page"]::before{
  content:"";position:absolute;top:0;left:50%;transform:translateX(-50%);
  width:34px;height:4px;border-radius:0 0 4px 4px;background:var(--green);
}
#tabbar button[aria-current="page"] .ti{transform:translateY(-1px)}

/* ========================= 首页 · 课程表 ========================= */
.todaycard{
  position:relative;overflow:hidden;
  background:linear-gradient(160deg,var(--green-soft),var(--card) 62%);
  border:var(--bw) solid var(--line);border-radius:var(--r-l);
  box-shadow:var(--sh-2);padding:14px;margin-top:12px;
}
.todaycard .hd{display:flex;align-items:baseline;gap:8px;margin-bottom:10px}
.todaycard .hd .d{font-size:16px;font-weight:800}
.todaycard .hd .w{font-size:12.5px;color:var(--ink-2);font-weight:600}
.todaycard .hd .spacer{flex:1}

.lessonrow{
  display:flex;align-items:center;gap:10px;
  padding:10px 11px;background:var(--paper);
  border:2.5px solid var(--line);border-radius:var(--r-m);
  box-shadow:0 2px 0 rgba(107,79,58,.14);
  margin-bottom:8px;
}
.lessonrow:last-child{margin-bottom:0}
.lessonrow .pno{
  flex:0 0 auto;width:34px;height:34px;border-radius:11px;display:grid;place-items:center;
  background:var(--sky-soft);border:2px solid var(--line);font-size:12px;font-weight:800;color:var(--sky-d);
}
.lessonrow .mid{flex:1;min-width:0}
.lessonrow .mid .c{font-size:14.5px;font-weight:700}
.lessonrow .mid .s{font-size:11.5px;color:var(--ink-3);margin-top:1px}
.lessonrow.done{background:var(--green-soft)}
.lessonrow.done .pno{background:var(--green);color:#fff}
.lessonrow.changed{background:var(--amber-soft)}
.lessonrow.off{background:var(--pink-soft)}

/* 周课表网格 */
.wkgrid{
  border:var(--bw) solid var(--line);border-radius:var(--r-l);
  background:var(--card);box-shadow:var(--sh-2);overflow:hidden;
}
.wkgrid .wkhead{display:grid;grid-template-columns:38px repeat(5,1fr);background:var(--cream-2);border-bottom:2.5px solid var(--line)}
.wkgrid .wkhead div{padding:7px 2px;text-align:center;font-size:11.5px;font-weight:800;color:var(--ink-2)}
.wkgrid .wkhead div.today{background:var(--green);color:#fff}
.wkgrid .wkbody{display:grid;grid-template-columns:38px repeat(5,1fr)}
.wkgrid .cellp{
  min-height:50px;border-right:1.5px dashed var(--line-soft);border-bottom:1.5px dashed var(--line-soft);
  padding:4px 3px;position:relative;
}
.wkgrid .cellp.pno{background:var(--cream-2);display:grid;place-items:center;font-size:11px;font-weight:800;color:var(--ink-2);border-right:2.5px solid var(--line)}
.wkgrid .cellp:nth-child(6n){border-right:none}
.wkgrid .slot{
  display:block;width:100%;height:100%;min-height:42px;
  border-radius:9px;border:2px solid var(--line);
  font-size:10.5px;font-weight:800;line-height:1.25;
  padding:3px 2px;text-align:center;
  box-shadow:0 1.5px 0 rgba(107,79,58,.18);
  overflow:hidden;
}
.wkgrid .slot.mine{background:var(--green);color:#fff}
.wkgrid .slot.other{background:var(--cream-2);color:var(--ink-3);border-color:var(--line-soft);box-shadow:none;font-weight:600}
.wkgrid .slot .t{display:block;font-size:11.5px}
.wkgrid .slot .b{display:block;font-size:9.5px;opacity:.9;font-weight:700}

/* ========================= 教学日历 ========================= */
.calhead{display:flex;align-items:center;gap:8px;margin:12px 0 9px}
.calhead .m{font-size:17px;font-weight:800;letter-spacing:.5px}
.calhead .spacer{flex:1}

.calwrap{
  border:var(--bw) solid var(--line);border-radius:var(--r-l);
  background:var(--card);box-shadow:var(--sh-2);padding:10px;
}
.calhd{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:5px}
.calhd div{text-align:center;font-size:11px;font-weight:800;color:var(--ink-3)}
.calgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.daycell{
  min-height:52px;border-radius:11px;border:2px solid transparent;
  padding:3px 2px;display:flex;flex-direction:column;align-items:center;gap:2px;
  background:transparent;position:relative;
}
.daycell.out{opacity:.28}
.daycell .dn{font-size:12.5px;font-weight:700;color:var(--ink-2)}
.daycell.today{border-color:var(--line);background:var(--cream-2)}
.daycell.today .dn{color:var(--ink);font-weight:800}
.daycell.sel{border-color:var(--green-d);background:var(--green-soft);box-shadow:0 2px 0 rgba(107,79,58,.2)}
.daycell .dots{display:flex;gap:2px;flex-wrap:wrap;justify-content:center}
.daycell .dot{width:6px;height:6px;border-radius:50%;border:1px solid var(--line)}
.dot.ok{background:var(--green)} .dot.off{background:var(--pink)}
.dot.swap{background:var(--amber)} .dot.extra{background:var(--sky)}

/* 日历当天的课 */
.calitem{
  display:flex;align-items:center;gap:9px;padding:9px 10px;margin-bottom:8px;
  background:var(--paper);border:2.5px solid var(--line);border-radius:var(--r-m);
  box-shadow:0 2px 0 rgba(107,79,58,.14);
}
.calitem:last-child{margin-bottom:0}
.calitem .tag{
  flex:0 0 auto;font-size:11px;font-weight:800;padding:3px 8px;border-radius:8px;
  border:2px solid var(--line);background:var(--green-soft);color:var(--green-d);
}
.calitem.st-off .tag{background:var(--pink-soft);color:#A8402F}
.calitem.st-swap .tag{background:var(--amber-soft);color:#A96B12}
.calitem.st-extra .tag{background:var(--sky-soft);color:var(--sky-d)}
.calitem.st-makeup .tag{background:var(--violet-soft);color:#6A5A9B}
.calitem .mid{flex:1;min-width:0}
.calitem .mid .c{font-size:14px;font-weight:700}
.calitem .mid .s{font-size:11.5px;color:var(--ink-3);margin-top:1px;word-break:break-all}

/* ========================= 班级进度 ========================= */
.unitcard{
  border:var(--bw) solid var(--line);border-radius:var(--r-l);
  background:var(--card);box-shadow:var(--sh-2);
  margin-bottom:11px;overflow:hidden;position:relative;
}
.unitcard .uhd{
  display:flex;align-items:center;gap:8px;padding:11px 12px;
  background:var(--cream-2);border-bottom:2.5px solid var(--line);
}
.unitcard .uhd .no{
  width:26px;height:26px;border-radius:9px;display:grid;place-items:center;
  background:var(--violet-soft);border:2px solid var(--line);font-size:12px;font-weight:800;color:#6A5A9B;
}
.unitcard .uhd .nm{font-size:14.5px;font-weight:800;flex:1;min-width:0;word-break:break-all}
.unitcard .uhd .mv{display:flex;gap:3px}
.unitcard .ubody{padding:10px 12px}

.itemrow{
  display:flex;align-items:center;gap:9px;padding:8px 9px;
  border:2px solid var(--line-soft);border-radius:13px;background:var(--paper);
  margin-bottom:7px;
}
.itemrow:last-child{margin-bottom:0}
.itemrow .kd{flex:0 0 auto;width:26px;height:26px;border-radius:9px;display:grid;place-items:center;font-size:13px;border:2px solid var(--line)}
.itemrow .kd.hw{background:var(--sky-soft)}
.itemrow .kd.pass{background:var(--green-soft)}
.itemrow .kd.map{background:var(--violet-soft)}
.itemrow .mid{flex:1;min-width:0}
.itemrow .mid .t{font-size:13.5px;font-weight:700;word-break:break-all}
.itemrow .mid .s{font-size:11.5px;color:var(--ink-3);margin-top:1px}
.bar{height:8px;border-radius:5px;background:var(--cream-2);border:1.5px solid var(--line-soft);overflow:hidden;margin-top:5px}
.bar > i{display:block;height:100%;background:var(--green)}

/* 打分格子 */
.cells{display:grid;gap:6px}
.cells.g3c{grid-template-columns:repeat(3,1fr)}
.cells.g4c{grid-template-columns:repeat(4,1fr)}
.cellbtn{
  position:relative;min-height:50px;padding:6px 7px;
  border:2.5px solid var(--line-soft);border-radius:13px;background:var(--paper);
  display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:1px;
  text-align:left;transition:transform .07s;
}
.cellbtn:active{transform:scale(.96)}
.cellbtn .nm{font-size:12.5px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.cellbtn .st{font-size:10.5px;font-weight:700;opacity:.8}
.cellbtn .sc{position:absolute;top:3px;right:3px;font-size:10px;font-weight:800;padding:0 4px;border-radius:6px;background:rgba(255,255,255,.8);border:1px solid rgba(107,79,58,.35);min-width:0}
.cellbtn .sc:empty{display:none}
.cellbtn .lg{position:absolute;bottom:3px;right:4px;font-size:9.5px;font-weight:800;padding:0 4px;border-radius:6px;background:var(--amber);color:#4A3728;border:1px solid var(--line)}
.cellbtn .lg:empty{display:none}
.cellbtn .ed{position:absolute;top:3px;left:3px;min-height:0;height:16px;padding:0 4px;font-size:10px;font-weight:800;line-height:1;border-radius:6px;background:rgba(255,255,255,.8);border:1px solid rgba(107,79,58,.35);color:#7C6552;opacity:.75}
.cellbtn .ed:active{opacity:1;background:#fff}
.cellbtn.s-ok{background:var(--green-soft);border-color:var(--green)}
.cellbtn.s-no{background:var(--pink-soft);border-color:var(--pink)}
.cellbtn.s-wait{background:var(--amber-soft);border-color:var(--amber)}
.cellbtn.s-good{background:var(--violet-soft);border-color:var(--violet)}
.cellbtn.s-none{background:var(--cream-2);border-style:dashed}

/* ========================= 学生管理 ========================= */
.sturow{
  display:flex;align-items:center;gap:10px;padding:9px 10px;
  background:var(--paper);border:2.5px solid var(--line-soft);border-radius:15px;
  margin-bottom:7px;transition:transform .07s;
}
.sturow:active{transform:scale(.99)}
.sturow .av{
  flex:0 0 auto;width:36px;height:36px;border-radius:12px;display:grid;place-items:center;
  border:2.5px solid var(--line);font-size:14px;font-weight:800;background:var(--sky-soft);color:var(--sky-d);
}
.sturow .av.girl{background:var(--pink-soft);color:#B4574C}
.sturow .mid{flex:1;min-width:0}
.sturow .mid .n{font-size:14.5px;font-weight:700}
.sturow .mid .m{font-size:11.5px;color:var(--ink-3);margin-top:1px}
.sturow .sn{
  flex:0 0 auto;min-width:30px;text-align:center;font-size:11px;font-weight:800;
  padding:2px 6px;border-radius:8px;background:var(--cream-2);border:1.5px solid var(--line-soft);color:var(--ink-2);
}

/* ========================= 备忘录 ========================= */
.memo{
  position:relative;border:2.5px solid var(--line);border-radius:15px;
  padding:11px 12px;background:var(--cream-2);box-shadow:var(--sh-1);
  margin-bottom:9px;
}
.memo.c1{background:var(--green-soft)}
.memo.c2{background:var(--sky-soft)}
.memo.c3{background:var(--amber-soft)}
.memo.c4{background:var(--pink-soft)}
.memo .txt{font-size:14px;white-space:pre-wrap;word-break:break-word;line-height:1.55}
.memo .ft{display:flex;align-items:center;gap:7px;margin-top:8px}
.memo .ft .dt{font-size:11px;color:var(--ink-3);flex:1}
.memo.done .txt{text-decoration:line-through;opacity:.55}
.memo .pin{position:absolute;top:-7px;right:12px;font-size:15px}

/* ========================= 底部抽屉 / 弹窗 ========================= */
#mask{
  position:fixed;inset:0;z-index:90;background:rgba(74,55,40,.42);
  opacity:0;pointer-events:none;transition:opacity .18s;
  backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);
}
#mask.on{opacity:1;pointer-events:auto}

.sheet{
  position:fixed;left:0;right:0;bottom:0;z-index:100;
  max-height:90vh;display:flex;flex-direction:column;
  background:var(--cream);
  border-top:3.5px solid var(--line);
  border-radius:26px 26px 0 0;
  box-shadow:0 -10px 40px rgba(74,55,40,.3);
  transform:translateY(102%);transition:transform .24s cubic-bezier(.22,.8,.3,1);
  padding-bottom:env(safe-area-inset-bottom);
}
.sheet.on{transform:translateY(0)}
.sheet .sh{
  display:flex;align-items:center;gap:8px;padding:12px 14px 9px;
  border-bottom:2.5px solid var(--line);flex:0 0 auto;
  background:var(--cream-2);border-radius:26px 26px 0 0;
}
.sheet .sh .ttl{font-size:16px;font-weight:800;flex:1;min-width:0;word-break:break-all}
.sheet .sh .x{
  width:32px;height:32px;border-radius:11px;display:grid;place-items:center;
  border:2.5px solid var(--line);background:var(--card);font-size:15px;font-weight:800;
  box-shadow:0 2px 0 rgba(107,79,58,.2);
}
.sheet .sb{padding:13px 14px 22px;overflow-y:auto;-webkit-overflow-scrolling:touch;flex:1}
.sheet.wide{max-width:560px;margin:0 auto}

/* toast */
#toast{
  position:fixed;left:50%;bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 18px);
  transform:translateX(-50%) translateY(14px);z-index:200;
  background:var(--ink);color:var(--cream);
  padding:10px 16px;border-radius:14px;border:2.5px solid var(--cream);
  font-size:13.5px;font-weight:600;box-shadow:0 6px 20px rgba(74,55,40,.35);
  opacity:0;pointer-events:none;transition:all .2s;max-width:86vw;text-align:center;
}
#toast.on{opacity:1;transform:translateX(-50%) translateY(0)}

/* 列表项操作条 */
.ops{display:flex;gap:6px;flex-wrap:wrap}

/* 关于同步状态的小药丸 */
.syncpill{
  display:inline-flex;align-items:center;gap:5px;
  padding:3px 9px;border-radius:11px;border:2px solid var(--line);
  font-size:11.5px;font-weight:700;background:var(--green-soft);color:var(--green-d);
}
.syncpill.local{background:var(--cream-2);color:var(--ink-2)}
.syncpill.err{background:var(--pink-soft);color:#A8402F}
.syncpill.busy{background:var(--amber-soft);color:#A96B12}

/* 提示条 */
.hint{
  font-size:12px;color:var(--ink-2);line-height:1.6;
  background:var(--card-2);border:2px dashed var(--line-soft);border-radius:13px;padding:9px 11px;
}
.hint.warn{background:var(--amber-soft);border-color:var(--amber);color:#8A5710}

.kv{display:flex;gap:8px;font-size:13px;padding:5px 0;border-bottom:1.5px dashed var(--line-soft)}
.kv:last-child{border-bottom:none}
.kv .k{color:var(--ink-3);flex:0 0 76px}
.kv .v{flex:1;font-weight:600;word-break:break-all}

.statmini{display:flex;gap:8px;flex-wrap:wrap}
.statbox{
  flex:1;min-width:88px;padding:9px 10px;border-radius:15px;
  border:2.5px solid var(--line);background:var(--card);box-shadow:var(--sh-1);text-align:center;
}
.statbox .v{font-size:20px;font-weight:800;line-height:1.15}
.statbox .k{font-size:11px;color:var(--ink-2);font-weight:700;margin-top:2px}
.statbox.g{background:var(--green-soft)}
.statbox.b{background:var(--sky-soft)}
.statbox.a{background:var(--amber-soft)}
.statbox.p{background:var(--pink-soft)}

.timeline{border-left:2.5px dashed var(--line-soft);margin-left:7px;padding-left:13px}
.tl{position:relative;padding:0 0 11px}
.tl::before{content:"";position:absolute;left:-19px;top:4px;width:10px;height:10px;border-radius:50%;background:var(--green);border:2px solid var(--line)}
.tl.no::before{background:var(--pink)}
.tl.wait::before{background:var(--amber)}
.tl .d{font-size:11.5px;color:var(--ink-3);font-weight:700}
.tl .t{font-size:13.5px;font-weight:700}

/* 打印 */
@media print{
  #topbar,#tabbar,.ops,.btn,.sheet,#mask,#toast,.classbar{display:none !important}
  body{background:#fff;font-size:12px}
  #main{padding:0}
  .card,.unitcard,.wkgrid,.calwrap{box-shadow:none;break-inside:avoid}
}

/* ========================= 响应式：大屏放大利用空间 ========================= */
@media (min-width:760px){
  :root{--tabbar-h:64px}
  body{font-size:15.5px}
  #main{padding:2px 22px calc(var(--tabbar-h) + 40px)}
  .grid.auto{grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}
  .cells.g4c{grid-template-columns:repeat(5,1fr)}
  .cells.g3c{grid-template-columns:repeat(4,1fr)}
  /* 大屏改成左侧竖排导航 + 右侧内容 */
  #tabbar{
    position:fixed;left:0;top:0;bottom:0;right:auto;width:96px;
    flex-direction:column;justify-content:center;gap:6px;
    border-top:none;border-right:3px solid var(--line);
    padding:0;box-shadow:4px 0 16px rgba(107,79,58,.10);
  }
  #tabbar button{height:66px;flex:0 0 auto;width:100%}
  #tabbar button[aria-current="page"]::before{
    top:50%;left:0;transform:translateY(-50%);width:4px;height:30px;border-radius:0 4px 4px 0;
  }
  #topbar .inner{padding-left:104px}
  .classbar{padding-left:104px}
  #main{padding-left:118px}
  #topbar,#main,.classbar{max-width:none;margin:0}
  #toast{bottom:26px;left:calc(50% + 48px)}
}
@media (min-width:1100px){
  .grid.auto{grid-template-columns:repeat(auto-fill,minmax(210px,1fr))}
}
/* 横屏手机：紧凑一点 */
@media (max-height:460px) and (orientation:landscape){
  .todaycard{padding:10px}
  #tabbar{--tabbar-h:52px}
}
/* iOS：输入字号 <16px 会被自动放大，规避掉 */
@supports (-webkit-touch-callout:none){
  .inp,textarea.inp,select.inp{font-size:16px}
}

@media (prefers-reduced-motion:reduce){
  *{transition:none !important;animation:none !important}
}

/* ==========================================================================
   登录门禁（cloud.js）—— 只在正式发布网址上出现，风格与手账风保持一致
   ========================================================================== */
#gate{
  position:fixed;inset:0;z-index:900;
  display:none;align-items:flex-start;justify-content:center;
  background-color:var(--cream);
  background-image:
    linear-gradient(rgba(107,79,58,.05) 1px,transparent 1px),
    linear-gradient(90deg,rgba(107,79,58,.05) 1px,transparent 1px);
  background-size:22px 22px;
  overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:calc(env(safe-area-inset-top) + 24px) 18px calc(env(safe-area-inset-bottom) + 28px);
}
#gate.on{display:flex}
.gatecard{
  width:100%;max-width:400px;
  background:var(--card);
  border:var(--bw) solid var(--line);
  border-radius:var(--r-xl);
  box-shadow:var(--sh-3);
  padding:20px 18px 18px;
}
.gatebrand{display:flex;align-items:center;gap:10px;margin-bottom:16px}
.gatebrand .logo{
  width:40px;height:40px;flex:0 0 auto;display:grid;place-items:center;
  border-radius:12px;background:var(--green);color:#fff;
  font-size:21px;font-weight:800;
  border:2px solid var(--line);box-shadow:var(--sh-1);
}
.gatebrand b{display:block;font-size:18px;letter-spacing:.02em;line-height:1.25}
.gatebrand span{display:block;font-size:11.5px;color:var(--ink-3)}

.gtabs{
  display:flex;gap:6px;padding:4px;margin-bottom:14px;
  background:var(--cream-2);border-radius:var(--r-m);
  border:1.5px solid var(--line-soft);
}
.gtab{
  flex:1;padding:8px 6px;font-size:13.5px;font-weight:700;font-family:inherit;
  color:var(--ink-2);background:transparent;border:none;border-radius:12px;cursor:pointer;
}
.gtab.on{
  background:var(--card);color:var(--ink);
  border:1.5px solid var(--line);box-shadow:var(--sh-1);
}

.gtitle{font-size:15px;font-weight:800;margin-bottom:6px}
.ghint{font-size:12px;color:var(--ink-2);line-height:1.55;margin-bottom:12px}

#gate .field{margin-bottom:11px}
#gate .btn.block{margin-top:4px}

.glinks{display:flex;justify-content:flex-end;margin-top:8px}
.gfoot{
  margin-top:14px;padding-top:12px;border-top:1.5px dashed var(--line-soft);
  font-size:12.5px;color:var(--ink-2);text-align:center;
}
.linkbtn{
  background:none;border:none;padding:2px 4px;cursor:pointer;
  font-family:inherit;font-size:12.5px;font-weight:800;
  color:var(--sky-d);text-decoration:underline;text-underline-offset:2px;
}

.gmsg{
  margin-top:12px;padding:9px 11px;border-radius:var(--r-s);
  font-size:12.5px;line-height:1.5;border:1.5px solid var(--line);
}
.gmsg.err{background:var(--pink-soft);color:#8C3B33}
.gmsg.info{background:var(--green-soft);color:var(--green-d)}

.gnote{
  margin-top:14px;font-size:11.5px;color:var(--ink-3);
  line-height:1.55;text-align:center;
}

#gate.busy .gatecard{opacity:.72;pointer-events:none}
#gate.busy .gatecard::after{
  content:"";position:absolute;
}

/* 大屏：卡片稍宽一点，别显得小气 */
@media (min-width:820px){
  .gatecard{max-width:430px;padding:26px 24px 22px}
}

/* ==========================================================================
   本轮优化新增组件
   首页整周课表 / 教学日历（今天圆点、事件标记）/ 班级进度（下一节、课时计划、历史）
   导出任务图片面板
   —— 全部沿用 Cozy Game 手账风：奶油黄底、粗棕描边、圆角卡片、贴纸感
   ========================================================================== */

/* ------------------------- 首页：整周网格 ------------------------- */
.wkbody .cellp.band{background:var(--cream-2)}
.wkbody .cellp.pno.band{border-radius:0 var(--r-s) var(--r-s) 0}
.slot.duty{
  background:var(--violet-soft);border-color:var(--line);
}
.slot.duty .s{color:var(--ink-2)}
.slot.duty .c{font-weight:800}

/* ------------------------- 教学日历 ------------------------- */
/* 今天：独立橙色小圆点（与「选中」完全分开，不用边框表达） */
.todaydot{
  position:absolute;right:3px;top:3px;
  width:8px;height:8px;border-radius:50%;
  background:var(--amber);
  border:1.5px solid var(--line);
  box-shadow:0 1px 0 rgba(107,79,58,.25);
  display:none;
}
.daycell.today .todaydot{display:block}
.todaydot.inline{
  position:static;display:inline-block;width:8px;height:8px;
  vertical-align:middle;margin-left:4px;box-shadow:none;
}
.dnwrap{position:relative;display:flex;align-items:center;justify-content:center;width:100%}

/* 日历格子里的标记与节数 */
.marks{display:flex;gap:2px;justify-content:center;flex-wrap:wrap;min-height:0}
.marks:empty{display:none}
.evtag{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:15px;height:15px;padding:0 3px;border-radius:5px;
  border:1.5px solid var(--line);
  font-size:9.5px;font-weight:800;line-height:1;
  background:var(--cream-2);color:var(--ink);
}
.evtag.e-holiday{background:var(--pink-soft);color:#A8402F}
.evtag.e-off{background:var(--pink-soft);color:#A8402F}
.evtag.e-makeup{background:var(--amber-soft);color:#8A5710}
.evtag.e-exam{background:var(--violet-soft);color:#5B4B8A}
.evtag.e-activity{background:var(--sky-soft);color:var(--sky-d)}
.evtag.e-adjust{background:var(--green-soft);color:var(--green-d)}
.daycell .cnt{
  font-size:9.5px;font-weight:800;color:var(--sky-d);
  background:var(--sky-soft);border-radius:6px;padding:0 4px;
  border:1px solid rgba(62,134,180,.35);
}
/* 日历圆点：计划中 / 已上 / 停课 / 调课 / 补课 / 加课 / 换班 */
.dot.plan{background:var(--cream-2);border-style:dashed}
.dot.makeup{background:var(--amber)}
.dot.ex{background:var(--violet)}
.dot.ok{background:var(--green)}
.dot.off{background:var(--pink)}
.dot.swap{background:var(--amber)}
.dot.extra{background:var(--sky)}

/* 图例 */
.callegend{
  display:flex;flex-wrap:wrap;gap:6px 12px;
  margin:9px 2px 0;padding:9px 11px;
  background:var(--card);border:2px dashed var(--line-soft);border-radius:var(--r-m);
  font-size:11.5px;color:var(--ink-2);font-weight:600;
}
.callegend span{display:inline-flex;align-items:center;gap:4px}
.callegend i.dot{width:8px;height:8px;border-radius:50%;border:1px solid var(--line);display:inline-block}

/* 日级事件列表 */
.evlist{display:flex;flex-direction:column;gap:7px;margin-bottom:9px}
.evlist .calitem{margin-bottom:0}
.calitem.clickable{cursor:pointer;transition:transform .06s}
.calitem.clickable:active{transform:scale(.99)}

/* ------------------------- 班级进度 ------------------------- */
/* 各班进度一览 */
.classprog{
  display:flex;gap:8px;overflow-x:auto;padding:2px 2px 8px;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;
}
.classprog::-webkit-scrollbar{display:none}
.cpcard{
  flex:0 0 auto;min-width:132px;
  display:flex;flex-direction:column;gap:2px;
  padding:9px 11px;text-align:left;
  background:var(--card);border:var(--bw) solid var(--line);
  border-radius:var(--r-m);box-shadow:var(--sh-1);
}
.cpcard:active{transform:translateY(2px);box-shadow:none}
.cpcard .nm{font-size:14px;font-weight:800}
.cpcard .pg{font-size:11.5px;font-weight:700;color:var(--green-d)}
.cpcard .nx{font-size:11px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}
.cpcard.on{background:var(--green-soft);border-color:var(--line);box-shadow:var(--sh-2)}
.cpcard.on .pg{color:var(--green-d)}

/* 下一节课大卡 */
.nextcard{
  margin-top:11px;padding:13px 14px;
  background:var(--card);border:var(--bw) solid var(--line);
  border-radius:var(--r-l);box-shadow:var(--sh-2);
}
.nextcard .hd{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.nextcard .hd .sub{font-size:11.5px;color:var(--ink-3);font-weight:600}
.nextcard .big{font-size:19px;font-weight:800;line-height:1.35;letter-spacing:.2px}
.nextcard .meta{font-size:12.5px;color:var(--ink-2);font-weight:600;margin-top:4px}
.nextcard .ops{display:flex;gap:7px;flex-wrap:wrap}

/* 未来课时：每条计划一行 */
.prow{
  display:flex;align-items:flex-start;gap:9px;
  padding:10px 11px;margin-bottom:8px;
  background:var(--card);border:var(--bw) solid var(--line);
  border-radius:var(--r-m);box-shadow:var(--sh-1);
}
.prow.first{background:var(--green-soft);box-shadow:var(--sh-2)}
.prow .idx{
  flex:0 0 auto;align-self:flex-start;
  padding:2px 8px;border-radius:8px;
  background:var(--cream-2);border:2px solid var(--line);
  font-size:11.5px;font-weight:800;white-space:nowrap;
}
.prow.first .idx{background:var(--green);color:#fff}
.prow .mid{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.prow .mid .ti{
  font-size:14.5px;font-weight:800;text-align:left;line-height:1.35;
  word-break:break-word;
}
.prow .mid .auto{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.prow .mid .nt{font-size:11.5px;color:var(--ink-3);word-break:break-word}
.prow .ops{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end;max-width:150px}
.autochip{
  display:inline-flex;align-items:center;gap:3px;
  padding:2px 7px;border-radius:8px;
  background:var(--sky-soft);color:var(--sky-d);
  border:1.5px solid rgba(62,134,180,.45);
  font-size:11px;font-weight:700;white-space:nowrap;
}
.utag{
  display:inline-flex;align-items:center;
  padding:1px 7px;border-radius:7px;
  background:var(--violet-soft);color:#5B4B8A;
  border:1.5px solid rgba(107,90,155,.4);
  font-size:10.5px;font-weight:800;
}

/* 单元下的课时条 */
.uplan{
  display:flex;flex-wrap:wrap;gap:5px;align-items:center;
  margin-bottom:8px;font-size:11.5px;color:var(--ink-2);font-weight:600;
}
.uplan .up{
  display:inline-flex;align-items:center;gap:3px;
  padding:2px 8px;border-radius:8px;
  background:var(--cream-2);border:1.5px solid var(--line-soft);
  font-size:11.5px;font-weight:700;color:var(--ink);
}
.uplan .up.done{background:var(--green-soft);border-color:rgba(94,143,46,.5);color:var(--green-d)}
.uplan .up i{font-style:normal;color:var(--ink-3);font-weight:600;font-size:10.5px}

/* 已上内容 / 历史记录 */
.histrow{
  display:flex;align-items:flex-start;gap:9px;
  padding:9px 11px;margin-bottom:7px;
  background:var(--card-2);border:2px solid var(--line-soft);
  border-radius:var(--r-m);
}
.histrow .dt{
  flex:0 0 auto;min-width:56px;
  font-size:11.5px;font-weight:800;color:var(--ink-2);line-height:1.4;
}
.histrow .dt i{font-style:normal;font-weight:600;color:var(--ink-3);font-size:10.5px}
.histrow .mid{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.histrow .mid .t{font-size:13.5px;font-weight:800;word-break:break-word}
.histrow .mid .s{font-size:11.5px;color:var(--ink-2);line-height:1.55;word-break:break-word}
.histrow .ops{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}

/* ------------------------- 导出任务图片 ------------------------- */
.picklist{
  display:flex;flex-direction:column;gap:7px;
  max-height:46vh;overflow-y:auto;
  padding:2px;margin-bottom:10px;
}
/* 勾选框与文字严格对齐：勾选列固定宽度、标题可换行 */
.pickrow{
  display:grid;grid-template-columns:26px minmax(0,1fr);
  align-items:start;gap:8px;
  padding:10px 11px;
  background:var(--card);border:var(--bw) solid var(--line);
  border-radius:var(--r-m);box-shadow:var(--sh-1);
  cursor:pointer;
}
.pickrow:active{transform:translateY(1px);box-shadow:none}
.pk-cb{
  appearance:none;-webkit-appearance:none;
  width:22px;height:22px;margin:0;
  border:2.5px solid var(--line);border-radius:7px;
  background:var(--cream-2);
  display:grid;place-items:center;
  cursor:pointer;flex:0 0 auto;
}
.pk-cb:checked{background:var(--green);border-color:var(--line)}
.pk-cb:checked::after{
  content:"✓";color:#fff;font-size:14px;font-weight:900;line-height:1;
}
.pk-body{display:flex;flex-direction:column;gap:3px;min-width:0}
.pk-title{
  font-size:14px;font-weight:800;line-height:1.4;
  word-break:break-word;overflow-wrap:anywhere;white-space:normal;
}
.pk-meta{font-size:11.5px;color:var(--ink-3);font-weight:600}

/* 状态档位 / 任务列：一排小圆按钮，点一下选中（选中＝实心绿）。
   左边的小圆点用状态本色，让老师一眼看出「绿的是已完成、红的是未完成」。 */
.frow{display:flex;flex-wrap:wrap;gap:7px}
.fbtn{
  appearance:none;-webkit-appearance:none;font-family:inherit;
  display:inline-flex;align-items:center;gap:6px;
  padding:7px 12px;
  background:var(--card);border:var(--bw) solid var(--line);
  border-radius:999px;box-shadow:var(--sh-1);
  font-size:12.5px;font-weight:800;color:var(--ink);line-height:1.25;
  cursor:pointer;word-break:break-word;text-align:left;
}
.fbtn:active{transform:translateY(1px);box-shadow:none}
.fbtn i{font-style:normal;font-weight:800;font-size:11px;color:var(--ink-3)}
.fbtn.on{background:var(--green);color:#fff}
.fbtn.on i{color:#fff;opacity:.92}
.fbtn.tone-ok::before,.fbtn.tone-no::before,
.fbtn.tone-wait::before,.fbtn.tone-good::before{
  content:"";width:9px;height:9px;border-radius:50%;flex:0 0 auto;
  border:1.5px solid var(--line);
}
.fbtn.tone-ok::before{background:var(--green-soft)}
.fbtn.tone-no::before{background:var(--pink-soft)}
.fbtn.tone-wait::before{background:var(--amber-soft)}
.fbtn.tone-good::before{background:var(--violet-soft)}

.expmsg{
  margin-top:10px;padding:0;border-radius:var(--r-s);
  font-size:12.5px;line-height:1.55;
}
.expmsg:empty{display:none}
.expmsg.err,.expmsg.ok,.expmsg.busy{padding:9px 11px;border:1.5px solid var(--line)}
.expmsg.err{background:var(--pink-soft);color:#8C3B33}
.expmsg.ok{background:var(--green-soft);color:var(--green-d)}
.expmsg.busy{background:var(--sky-soft);color:var(--sky-d)}

.exppage{
  margin-top:11px;padding:10px;
  background:var(--card);border:var(--bw) solid var(--line);
  border-radius:var(--r-m);box-shadow:var(--sh-1);
}
.exphd{display:flex;align-items:center;gap:7px;margin-bottom:8px;flex-wrap:wrap}
.exphd .sub{
  font-size:11.5px;color:var(--ink-3);font-weight:600;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:52%;
}
.exppage img{
  display:block;width:100%;height:auto;
  border:2px solid var(--line-soft);border-radius:var(--r-s);
  background:var(--paper);
  -webkit-user-select:none;user-select:none;
}

/* 课时格里的时间段：比学科/教室再淡一档，避免三行挤在一起 */
.slot .b.tm{font-size:9.5px;color:var(--ink-3);opacity:.95}
.slot.mine .t{font-weight:800}

/* ==========================================================================
   学生管理 · 表格版
   顶部 同步/数据/今 · 班级胶囊 + 名单/＋/↓ · 冻结学号姓名列的成绩表格
   ========================================================================== */

/* 顶部操作行 */
.stt-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:10px}
.stt-today{
  width:38px;height:38px;border-radius:12px;display:grid;place-items:center;
  background:var(--green);color:#fff;border:2.5px solid var(--line);
  font-size:15px;font-weight:800;box-shadow:var(--sh-1);
}
.stt-today:active{transform:translateY(2px);box-shadow:none}

/* 班级胶囊 + 名单工具行 */
.stt-bar{display:flex;align-items:center;gap:7px;padding:10px 0 4px}
.stt-chips{display:flex;align-items:center;gap:7px;overflow-x:auto;flex:1;min-width:0;scrollbar-width:none}
.stt-chips::-webkit-scrollbar{display:none}
.stt-tools{flex:0 0 auto;display:flex;align-items:center;gap:7px}
.stt-name{flex:0 0 auto;padding:4px 3px;font-size:13.5px;font-weight:800;color:var(--sky-d)}
.stt-sq{
  flex:0 0 auto;width:38px;height:38px;border-radius:12px;display:grid;place-items:center;
  border:2.5px solid var(--line);font-size:19px;font-weight:800;box-shadow:var(--sh-1);
}
.stt-sq.add{background:var(--sky);color:#fff}
.stt-sq.dl{background:var(--card);color:var(--ink)}
.stt-sq:active{transform:translateY(2px);box-shadow:none}

/* 筛选中提示条 */
.stt-fbar{
  display:flex;align-items:center;gap:8px;margin:4px 0 2px;padding:7px 10px;
  background:var(--sky-soft);border:2px dashed rgba(62,134,180,.5);border-radius:12px;
  font-size:12px;font-weight:700;color:var(--sky-d);
}
.stt-fbar span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 表格容器：横向滚动 + 冻结前两列 */
.stt-wrap{
  overflow:auto;max-height:calc(100vh - 262px);
  border:var(--bw) solid var(--line);border-radius:var(--r-l);
  background:var(--card);box-shadow:var(--sh-2);
  -webkit-overflow-scrolling:touch;margin-top:4px;
}
.stt{border-collapse:separate;border-spacing:0;min-width:100%}
.stt th,.stt td{
  border-right:1.5px dashed var(--line-soft);
  border-bottom:1.5px dashed var(--line-soft);
  padding:8px 9px;text-align:center;vertical-align:middle;
  background:var(--card);
}
.stt tr>*:last-child{border-right:none}
.stt thead th{
  position:sticky;top:0;z-index:20;background:var(--cream-2);
  min-width:96px;max-width:118px;
  border-bottom:2px solid var(--line);
}
.stt thead .tht{
  display:block;line-height:1.3;word-break:break-all;
  font-size:12.5px;font-weight:800;color:var(--ink);
}
/* 列名可点：点开这一列的设置（改名 / 换类型 / 挪位置 / 删掉） */
.stt thead .thb{
  display:flex;align-items:center;justify-content:center;gap:3px;width:100%;
  padding:3px 2px;border-radius:9px;
  line-height:1.3;font-size:12.5px;font-weight:800;color:var(--ink);
}
.stt thead .thb .ti{font-style:normal;font-size:11.5px;flex:0 0 auto;opacity:.85}
.stt thead .thb>span{word-break:break-all;text-decoration:underline dotted var(--line-soft);text-underline-offset:2px}
.stt thead .thb:active{background:var(--amber-soft)}
/* 表头右端「＋」：加一列新任务 */
.stt thead .thadd{
  display:inline-grid;place-items:center;width:30px;height:30px;
  border-radius:11px;border:2px dashed var(--line-soft);
  color:var(--ink-3);font-size:17px;font-weight:800;line-height:1;
}
.stt thead .thadd:active{background:var(--amber-soft);color:var(--ink)}
.stt .cadd{width:46px;min-width:46px;max-width:46px;padding:6px 4px}
.stt .sortb{
  display:inline-flex;align-items:center;gap:2px;margin-top:2px;
  font-size:10.5px;font-weight:700;color:var(--sky-d);
}
.stt .sortb i{font-style:normal;font-size:9.5px;line-height:1}
.stt .fb{
  display:inline-grid;place-items:center;width:26px;height:26px;margin-top:2px;
  border-radius:9px;border:2px solid transparent;color:var(--sky-d);
}
.stt .fb.on{background:var(--sky);color:#fff;border-color:var(--line)}
/* 冻结列 */
.stt .c1,.stt .c2{position:sticky;background:var(--cream-2)}
.stt .c1{left:0;min-width:52px;width:52px}
.stt .c2{left:52px;min-width:80px;width:80px}
.stt thead .c1,.stt thead .c2{z-index:30}
.stt tbody .c1{font-size:14px;font-weight:800}
.stt tbody tr:nth-child(even) td{background:var(--card-2)}
.stt tbody tr:nth-child(even) .c1,
.stt tbody tr:nth-child(even) .c2{background:var(--cream-2)}
.stt-namebtn{font-size:13.5px;font-weight:700;padding:2px 4px}

/* ---- 任务列 / 类型编辑器里的小控件 ---- */
.kindcap{
  font-size:11.5px;line-height:1.55;color:var(--ink-3);
  margin:-2px 0 10px;padding-left:2px;
}
.ckline{
  display:flex;align-items:flex-start;gap:8px;margin:2px 0 4px;
  font-size:12.5px;line-height:1.5;font-weight:700;color:var(--ink-2);
}
.ckline input{width:19px;height:19px;flex:0 0 auto;margin-top:1px;accent-color:var(--green)}
.icrow{display:flex;flex-wrap:wrap;gap:6px}
.icb{
  width:36px;height:36px;border-radius:12px;border:2px solid var(--line-soft);
  background:var(--card);font-size:17px;display:grid;place-items:center;
  box-shadow:var(--sh-1);
}
.icb.on{background:var(--amber-soft);border-color:var(--line);transform:scale(1.07)}
.optr{display:flex;align-items:center;gap:7px;margin-bottom:7px}
.optr .inp{flex:1;min-width:0}
.tones{display:flex;gap:4px;flex:0 0 auto}
.tn{width:21px;height:21px;border-radius:50%;border:2px solid rgba(107,79,58,.22)}
.tn.s-ok{background:#CFE6AE}
.tn.s-no{background:#F6C3B8}
.tn.s-wait{background:#F7DFB0}
.tn.s-good{background:#D9CFF0}
.tn.s-none{background:#E9DECB}
.tn.on{box-shadow:0 0 0 2.5px var(--ink);transform:scale(1.12)}
.opx{
  width:27px;height:27px;border-radius:9px;flex:0 0 auto;
  color:var(--ink-3);font-size:12.5px;font-weight:800;
}
.opx:active{background:var(--pink-soft);color:#A8402F}

/* 状态药丸 */
.stt-pill{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:62px;min-height:30px;padding:3px 10px;
  border-radius:999px;border:2px solid var(--line-soft);
  font-size:12px;font-weight:800;line-height:1.2;white-space:nowrap;
}
.stt-pill.st-ok{background:var(--green-soft);color:var(--green-d);border-color:rgba(94,143,46,.55)}
.stt-pill.st-no{background:var(--pink-soft);color:#A8402F;border-color:rgba(168,64,47,.5)}
.stt-pill.st-wait{background:var(--amber-soft);color:#8A5710;border-color:rgba(138,87,16,.45)}
.stt-pill.st-good{background:var(--violet-soft);color:#6A5A9B;border-color:rgba(107,90,155,.45)}
.stt-pill.st-none{background:var(--card-2);color:var(--ink-3);border-style:dashed}

/* 计数格（课堂抽问）：蓝色「N 次 ＋」+ 修改 */
.stt-cellbtn{display:flex;flex-direction:column;align-items:center}
.stt-count{
  display:inline-flex;align-items:center;justify-content:center;gap:3px;
  min-width:62px;min-height:30px;padding:3px 10px;
  border-radius:12px;border:2px solid rgba(62,134,180,.5);
  background:var(--sky-soft);color:var(--sky-d);
  font-size:12.5px;font-weight:800;white-space:nowrap;
}
.stt-count:active{transform:scale(.95)}
.stt-count i{font-style:normal;font-size:14px;font-weight:900;line-height:1}
.stt-mod{
  display:block;margin:4px auto 0;padding:1px 8px;
  font-size:11px;font-weight:700;color:var(--ink-3);
  background:var(--cream-2);border:1.5px solid var(--line-soft);border-radius:8px;
}

@media (min-width:760px){
  .stt-wrap{max-height:calc(100vh - 220px)}
  .stt thead th{min-width:120px}
}

/* ==========================================================================
   成绩录入与统计
   表格里的成绩格 / 成绩统计卡 / 拍照识别面板
   ========================================================================== */

/* 项目图标补齐 */
.itemrow .kd.sc{background:var(--amber-soft)}
.itemrow .kd.cnt{background:var(--sky-soft)}

/* ------------------------- 成绩格 ------------------------- */
.stt-score{
  display:inline-flex;align-items:baseline;justify-content:center;gap:2px;
  min-width:62px;min-height:34px;padding:3px 10px;
  border-radius:12px;border:2px solid var(--line-soft);
  background:var(--card-2);color:var(--ink);
  font-size:17px;font-weight:800;line-height:1;
}
.stt-score i{font-style:normal;font-size:10px;font-weight:700;opacity:.72}
.stt-score:active{transform:scale(.95)}
.stt-score.st-good{background:var(--violet-soft);color:#6A5A9B;border-color:rgba(107,90,155,.5)}
.stt-score.st-ok{background:var(--green-soft);color:var(--green-d);border-color:rgba(94,143,46,.5)}
.stt-score.st-wait{background:var(--amber-soft);color:#8A5710;border-color:rgba(138,87,16,.45)}
.stt-score.st-no{background:var(--pink-soft);color:#A8402F;border-color:rgba(168,64,47,.5)}
.stt-score.st-none{color:var(--ink-3);border-style:dashed;font-size:14px;font-weight:700}
/* 点一下就在原地变输入框：数字键盘、选好原值、回车跳到下一个人 */
.stt-sinp{
  width:100%;min-width:58px;height:32px;padding:2px 6px;
  border-radius:10px;border:2.5px solid var(--sky);background:#fff;
  font-family:inherit;font-size:15px;font-weight:800;color:var(--ink);
  text-align:center;outline:none;
  box-shadow:0 0 0 3px var(--sky-soft);
}
.stt-sinp::placeholder{color:var(--ink-3);font-weight:600}
@media (max-width:640px){.stt-sinp{height:36px;font-size:16px}}

/* ------------------------- 成绩统计 ------------------------- */
.sbcard{
  margin-top:11px;padding:12px;
  background:var(--card);border:var(--bw) solid var(--line);
  border-radius:var(--r-l);box-shadow:var(--sh-2);
}
.sbhd{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.sbhd .sub{font-size:11.5px;color:var(--ink-3);font-weight:600}

.sbrow{display:flex;align-items:center;gap:9px;margin-bottom:6px}
.sbrow:last-child{margin-bottom:0}
.sbrow .lb{flex:0 0 60px;font-size:11.5px;font-weight:700;color:var(--ink-2)}
.sbrow .bbar{
  flex:1;min-width:0;height:14px;border-radius:8px;overflow:hidden;
  background:var(--cream-2);border:1.5px solid var(--line-soft);
}
.sbrow .bbar i{display:block;height:100%;border-radius:0 6px 6px 0;min-width:2px}
.sbrow .bbar i.g{background:var(--green)}
.sbrow .bbar i.b{background:var(--sky)}
.sbrow .bbar i.v{background:var(--violet)}
.sbrow .bbar i.a{background:var(--amber)}
.sbrow .bbar i.p{background:var(--pink)}
.sbrow .nv{flex:0 0 48px;text-align:right;font-size:11.5px;font-weight:800;color:var(--ink-2)}

/* ------------------- 分档线（优秀 / 良好 / 及格，每次成绩自己定） -------------------
   以前写死「满分的 85% / 70% / 60%」，50 分卷就成了「43 分以上算优秀」。
   现在这三条线存在每一次成绩上，老师在设置里填，统计与分数格颜色当场跟着变。 */
.cutline{
  display:flex;align-items:center;gap:6px;flex-wrap:wrap;
  margin-top:10px;padding-top:9px;border-top:1.5px dashed var(--line-soft);
}
.cutline .ct{
  font-size:11.5px;font-weight:800;color:var(--ink-2);
  padding:2px 8px;border-radius:9px;
  background:var(--cream-2);border:1.5px solid var(--line-soft);
}
.cutline .ct:nth-child(1){background:var(--violet-soft);color:#6A5A9B;border-color:rgba(107,90,155,.42)}
.cutline .ct:nth-child(2){background:var(--sky-soft);color:var(--sky-d);border-color:rgba(62,134,180,.42)}
.cutline .ct:nth-child(3){background:var(--green-soft);color:var(--green-d);border-color:rgba(94,143,46,.42)}
.cutline .btn{margin-left:auto}

/* 设置面板里的三条线输入 */
.sublb{font-size:12.5px;font-weight:700;color:var(--ink-2);margin:2px 0 5px}
.cutsgrid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px}
@media (max-width:400px){.cutsgrid{grid-template-columns:1fr 1fr}}
.cutfield{
  display:flex;align-items:center;gap:3px;min-width:0;
  padding:5px 7px;background:var(--card-2);
  border:2px solid var(--line-soft);border-radius:12px;
}
.cutfield .lb{font-size:10.5px;font-weight:700;color:var(--ink-2);white-space:nowrap}
.cutfield .inp{
  width:100%;min-width:0;min-height:0;padding:0;border:0;background:transparent;
  box-shadow:none;text-align:center;font-size:15px;font-weight:800;color:var(--ink);
}
.cutfield .inp:focus{border:0;box-shadow:none;background:var(--sky-soft);border-radius:7px}
.cutfield .u{font-size:10.5px;font-weight:700;color:var(--ink-3)}

/* 文字链接式按钮（比如「按满分重算」） */
.lnk{
  display:inline;padding:0;margin:0 0 0 4px;border:0;background:none;
  font-family:inherit;font-size:12px;font-weight:800;color:var(--sky-d);
  text-decoration:underline;text-underline-offset:2px;cursor:pointer;
}
.lnk:active{opacity:.6}

.rklist{display:flex;flex-direction:column;gap:5px}
.rkrow{
  display:flex;align-items:center;gap:9px;padding:6px 9px;
  background:var(--paper);border:1.5px solid var(--line-soft);border-radius:11px;
}
.rkrow .no{
  flex:0 0 26px;height:26px;border-radius:9px;display:grid;place-items:center;
  font-size:11.5px;font-weight:800;background:var(--cream-2);border:1.5px solid var(--line-soft);color:var(--ink-2);
}
.rkrow .no.top{background:var(--amber);border-color:var(--line);color:#4A3728}
.rkrow .nm{flex:1;min-width:0;font-size:13.5px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rkrow .sc{
  flex:0 0 auto;min-width:54px;text-align:center;padding:2px 9px;
  border-radius:9px;font-size:13.5px;font-weight:800;
  background:var(--cream-2);border:1.5px solid var(--line-soft);color:var(--ink);
}
.rkrow .sc.st-good{background:var(--violet-soft);color:#6A5A9B}
.rkrow .sc.st-ok{background:var(--green-soft);color:var(--green-d)}
.rkrow .sc.st-wait{background:var(--amber-soft);color:#8A5710}
.rkrow .sc.st-no{background:var(--pink-soft);color:#A8402F}

/* ------------------------- 拍照识别面板 ------------------------- */
.ocrpick{
  display:flex;gap:7px;overflow-x:auto;padding:2px 2px 6px;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;
}
.ocrpick::-webkit-scrollbar{display:none}
.ocrcard{
  flex:0 0 auto;min-width:142px;display:flex;flex-direction:column;gap:2px;
  padding:9px 11px;text-align:left;
  background:var(--card);border:var(--bw) solid var(--line);
  border-radius:var(--r-m);box-shadow:var(--sh-1);
}
.ocrcard .t{font-size:13.5px;font-weight:800;word-break:break-all}
.ocrcard .s{font-size:11px;color:var(--ink-3);font-weight:600}
.ocrcard.on{background:var(--green-soft);box-shadow:var(--sh-2)}
.ocrcard:active{transform:translateY(1px);box-shadow:none}

.ocrthumbs{
  display:flex;gap:8px;overflow-x:auto;padding:2px 2px 8px;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;
}
.ocrthumbs::-webkit-scrollbar{display:none}
.ocrthumb{
  position:relative;flex:0 0 auto;width:102px;height:132px;
  border:2.5px solid var(--line);border-radius:14px;overflow:hidden;
  background:var(--paper);box-shadow:var(--sh-1);
}
.ocrthumb img{display:block;width:100%;height:100%;object-fit:cover}
.ocrthumb .n{
  position:absolute;left:5px;bottom:5px;padding:1px 7px;border-radius:7px;
  background:var(--ink);color:var(--cream);font-size:10.5px;font-weight:800;
}
.ocrthumb .x{
  position:absolute;right:5px;top:5px;width:26px;height:26px;border-radius:9px;
  display:grid;place-items:center;background:var(--card);border:2px solid var(--line);
  font-size:12px;font-weight:800;
}

.ocrstat{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:9px}
.ocrstat .pill{
  padding:2px 9px;border-radius:9px;border:2px solid var(--line);
  background:var(--cream-2);font-size:11.5px;font-weight:800;
}
.ocrstat .pill.g{background:var(--green-soft);color:var(--green-d)}
.ocrstat .pill.a{background:var(--amber-soft);color:#8A5710}
.ocrstat .pill.b{background:var(--sky-soft);color:var(--sky-d)}
.ocrstat .sub{font-size:11.5px;color:var(--ink-3);font-weight:600}

.ocrlist{display:flex;flex-direction:column;gap:8px}
.ocrrow{
  display:flex;flex-direction:column;gap:7px;padding:9px 10px;
  background:var(--card);border:2.5px solid var(--line-soft);border-radius:15px;
}
.ocrrow.bad{border-color:#C4735F;background:#FDF2F0}
.ocrrow .hd{display:flex;align-items:center;gap:8px;min-width:0}
.ocrrow .no{
  flex:0 0 auto;width:26px;height:26px;border-radius:9px;display:grid;place-items:center;
  background:var(--cream-2);border:1.5px solid var(--line-soft);
  font-size:11.5px;font-weight:800;color:var(--ink-2);
}
.ocrrow .src{
  flex:1;min-width:0;font-size:13px;font-weight:700;color:var(--ink-2);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.ocrrow .src b{color:var(--ink);font-weight:800}
.ocr-tag{
  flex:0 0 auto;padding:2px 8px;border-radius:8px;
  border:2px solid var(--line-soft);background:var(--cream-2);
  font-size:11px;font-weight:800;color:var(--ink-2);white-space:nowrap;
}
.ocr-tag.st-ok{background:var(--green-soft);color:var(--green-d);border-color:rgba(94,143,46,.5)}
.ocr-tag.st-wait{background:var(--amber-soft);color:#8A5710;border-color:rgba(138,87,16,.45)}
.ocr-tag.st-no{background:var(--pink-soft);color:#A8402F;border-color:rgba(168,64,47,.5)}
.ocrrow .ocr-x{
  flex:0 0 auto;width:30px;height:30px;border-radius:10px;display:grid;place-items:center;
  background:var(--card-2);border:2px solid var(--line-soft);
  font-size:12px;font-weight:800;color:var(--ink-2);
}
.ocrrow .ft{display:flex;align-items:center;gap:7px}
.ocrrow .ocrsel{flex:1;min-width:0;min-height:40px;padding:5px 26px 5px 9px;font-size:13px}
.ocrrow .ocrscore{
  flex:0 0 82px;min-height:40px;padding:5px 8px;
  text-align:center;font-size:16px;font-weight:800;
}
.ocrrow .ocr-note{font-size:11.5px;color:#A8402F;font-weight:600;line-height:1.5}

.ocrprog{
  margin-top:10px;padding:9px 11px;border-radius:var(--r-m);
  background:var(--sky-soft);border:1.5px solid var(--line);
  color:var(--sky-d);font-size:12.5px;font-weight:700;
}

/* 宽屏：一行放下「原文 → 选人 → 分数 → 标记 → 删」 */
@media (min-width:760px){
  .ocrrow{flex-direction:row;align-items:center;flex-wrap:wrap;padding:8px 10px}
  .ocrrow .hd{flex:0 1 auto;min-width:190px}
  .ocrrow .src{flex:0 1 auto;max-width:220px}
  .ocrrow .ft{flex:1 1 auto;min-width:260px}
  .ocrrow .ocr-note{flex:1 1 100%;padding-left:34px}
}

/* ==========================================================================
   双端适配打磨：iPhone 上的手指友好 / Mac 上的鼠标友好
   ========================================================================== */

/* --- 触屏设备：所有可点的地方至少 44px 高，且去掉 300ms 延迟与双击缩放 --- */
.btn,.chip,.daycell,.slot,.stt-pill,.stt-count,.stt-score,.stt .fb,.stt-sq,
.ocrcard,.ocrthumb .x,.ocr-x,.cpcard,.lessonrow,.calitem,.cellbtn,.pk-cb,.stt-today{
  touch-action:manipulation;
}
@media (hover:none) and (pointer:coarse){
  .btn.xs{min-height:34px;padding:0 11px;font-size:12.5px}
  .btn.sm{min-height:38px}
  .stt .fb{width:30px;height:30px}
  .stt thead th{min-width:104px}
  .stt-namebtn{padding:6px 6px}
  .sheet .sh .x{width:38px;height:38px}
  .memo .ft .btn.xs,.itemrow .ops .btn.xs,.histrow .ops .btn.xs{min-height:32px}
}

/* --- Mac / 桌面：悬停反馈、可选文字、更宽的内容区 --- */
@media (hover:hover) and (pointer:fine){
  .btn:hover{background:var(--cream-2);transform:translateY(-1px);box-shadow:var(--sh-2)}
  .btn.g:hover{background:var(--green-d)}
  .btn.b:hover{background:var(--sky-d)}
  .btn.a:hover{background:#DC962C}
  .btn.danger:hover{background:#F7D4CF}
  .chip:hover{border-color:var(--sky);color:var(--sky-d)}
  .slot:hover{filter:brightness(1.06)}
  .daycell:hover{background:var(--cream-2)}
  .itemrow:hover,.histrow:hover,.rkrow:hover,.ocrrow:hover{border-color:var(--line)}
  .stt tbody tr:hover td{background:var(--cream-2)}
  .stt tbody tr:hover .c1,.stt tbody tr:hover .c2{background:var(--cream-2)}
  .stt-namebtn:hover{color:var(--sky-d);text-decoration:underline;text-underline-offset:2px}
  .stt-score:hover,.stt-pill:hover,.stt-count:hover{filter:brightness(1.04)}
  .prow .mid .ti:hover{color:var(--sky-d)}
  .exppage img{cursor:zoom-in}
}

/* --- 抽屉：手机上加一条「抓手」，可以往下拖关闭 --- */
@media (max-width:759px){
  .sheet .sh{position:relative;padding-top:16px}
  .sheet .sh::before{
    content:"";position:absolute;left:50%;top:6px;transform:translateX(-50%);
    width:42px;height:5px;border-radius:3px;background:var(--line-soft);
  }
  .sheet{grip:none}
}
#sheet.dragging{transition:none}

/* --- 横屏 iPhone：左右安全区 ---
   注意：这条必须把宽屏的 118px 左边距一起写进去 —— 它在文件更靠后的位置，
   同优先级会把上面 @media(min-width:760px) 的 padding-left:118px 覆盖回 12px，
   导致 Mac 上整块内容都钻到左侧导航栏底下。 */
@supports (padding:max(0px)){
  #main{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}
  @media (min-width:760px){
    #main{padding-left:max(118px,env(safe-area-inset-left));padding-right:max(22px,env(safe-area-inset-right))}
  }
}

/* --- 快捷键提示（只在有键盘的设备上显示） --- */
.kbdhint{display:none}
@media (hover:hover) and (pointer:fine){
  .kbdhint{display:inline-flex;align-items:center;gap:3px;font-size:11px;color:var(--ink-3);font-weight:700}
  .kbdhint kbd{
    font-family:inherit;font-size:10.5px;font-weight:800;
    padding:1px 5px;border-radius:6px;background:var(--cream-2);
    border:1.5px solid var(--line-soft);color:var(--ink-2);
  }
}

/* ============ 装到手机：二维码卡片 + iPhone 顶部引导条 ============ */
.qrcard{
  display:flex;align-items:center;gap:14px;
  padding:12px;margin-bottom:4px;
  background:var(--card);
  border:var(--bw) solid var(--line);
  border-radius:var(--r-l);
  box-shadow:var(--sh-1);
}
.qrcard .qrimg{
  width:132px;height:132px;flex:0 0 auto;display:block;
  border:var(--bw) solid var(--line);border-radius:12px;
  background:#fff;
}
.qrcard .qrtxt{display:flex;flex-direction:column;gap:5px;min-width:0}
.qrcard .qrtxt b{font-size:14px;letter-spacing:.02em}
.qrcard .qrtxt span{font-size:12px;color:var(--ink-2);line-height:1.5}
.qrcard .qrtxt .qrurl{
  font-size:11px;color:var(--ink-3);word-break:break-all;
  font-variant-numeric:tabular-nums;
}

/* iPhone 上还在浏览器里、没装成 App 时，顶部的一条可关引导 */
#instbar{
  display:none;align-items:flex-start;gap:10px;
  margin:0;padding:9px 14px 9px calc(env(safe-area-inset-left) + 14px);
  background:var(--green-soft);
  border-bottom:var(--bw) solid var(--green);
  font-size:12.5px;line-height:1.5;color:#1F5C3D;
}
#instbar.on{display:flex}
#instbar .ic{flex:0 0 auto;font-size:16px;line-height:1.3}
#instbar .tx{flex:1;min-width:0}
#instbar .tx b{font-weight:800}
#instbar .x{
  flex:0 0 auto;background:none;border:none;cursor:pointer;
  font-size:15px;line-height:1.2;color:#1F5C3D;opacity:.65;padding:2px 4px;
  font-family:inherit;
}
#instbar .x:active{opacity:1}

/* 登录页上的装机 / 注册引导 */
.ginstall{
  margin:-4px 0 14px;padding:10px 12px;
  background:var(--green-soft);
  border:1.5px solid var(--green);
  border-radius:var(--r-m);
  font-size:12.5px;line-height:1.55;color:#1F5C3D;
}
.ginstall b{font-weight:800}
.ginstall span{display:block;margin-top:5px;font-size:12px;color:#2E6B4A}
