/* 日程时间轴组件样式 AgendaGrid（老师端「我的日程」与家长端共用，账本 老师端与企微应用-132，PM 11-02）。
   配 agenda-grid.js。规则从 index.html 的 agenda-css 原样搬来、顺序不变（同优先级靠先后定胜负，别随手调顺序）。
   设计变量都带缺省值 var(--x,缺省)：老师页 :host 里有定义就用老师页的（含深色模式）；家长端没定义就用缺省（浅色）。
   随上下文的变量不带缺省：--subj / --subj-soft（课程颜色，由 .ct-* / .cat-* 颜色类给）、--m / --m-soft（老师页专注模式色）、--cg（虚线块组色）。
   老师页专用的状态类（.tgt / .off / .sel / .flt-* / .in-mode / .t-tablet）家长端不会出现，留在这里是为了老师页和组件同一份。 */
/* 组件自带盒模型（老师页的 * 已是 border-box，这条对老师页不起变化；家长端页面没设也照样按宽度排） */
.grid-wrap,.grid-wrap *{box-sizing:border-box}
/* 课程类型色板（一门课一种颜色，按课程不按科目；个辅按科目各一色 --ct-tutor-<科目>，科目认不出的 --ct-tutor：PM 11-03，⑧ seq3754 / 总协调 11-07；类型判定在 agenda-grid.js courseType，键 = 这里的 --ct-<key>）。
   原在老师页 index.html :host（v32 之前），挪进组件：老师页（组件样式进 Shadow DOM → :host）和家长端（页面 → :root；时间轴 Shadow DOM → :host）读同一份。
   高对比：浅色模式白字 ≥5:1，深色模式深字 ≥7:1。--cat-* 是老师端「全部」视图按大类上色的类别色，一并在此。 */
:root,:host{
  --ct-zh:#2E7D32;--ct-vocab:#1565C0;--ct-nce:#6A1B9A;--ct-tutor:#00727F;--ct-eve:#5D4037;--ct-makeup:#C62828;
  --ct-tutor-en:#AD1457;--ct-tutor-math:#A84300;--ct-tutor-zh:#B71C1C;
  --ct-s1:#283593;--ct-s2:#33691E;--ct-s3:#00695C;--ct-s4:#37474F;--ct-s5:#7A5C00;--ct-s6:#8E24AA;
  --on-ct:#FFFFFF;
  --cat-teach:#1565C0;--cat-research:#6A1B9A;--cat-admin:#5D4037;--cat-pickup:#00695C;--cat-market:#AD1457;--cat-eve:#8A5A00}
@media (prefers-color-scheme:dark){:root,:host{
  --ct-zh:#81C784;--ct-vocab:#64B5F6;--ct-nce:#CE93D8;--ct-tutor:#80DEEA;--ct-eve:#BCAAA4;--ct-makeup:#EF9A9A;
  --ct-tutor-en:#F48FB1;--ct-tutor-math:#FFB74D;--ct-tutor-zh:#EF9A9A;
  --ct-s1:#9FA8DA;--ct-s2:#AED581;--ct-s3:#80CBC4;--ct-s4:#B0BEC5;--ct-s5:#E6C35C;--ct-s6:#E1A3EE;
  --on-ct:#1A1918;
  --cat-teach:#64B5F6;--cat-research:#CE93D8;--cat-admin:#BCAAA4;--cat-pickup:#80CBC4;--cat-market:#F48FB1;--cat-eve:#FFCC80}}
.grid .gh.day-sum{flex-direction:row;gap:var(--sp2,8px);justify-content:flex-start;padding-left:var(--sp3,12px);font-size:var(--fs-tag,13px);color:var(--ink,#1F1E1B);font-weight:600}
.grid .gh.day-sum small{font-weight:400;color:var(--muted,#5E5D59);font-size:var(--fs-foot,12px)}
.grid-wrap{overflow-x:auto;background:var(--paper,#FFFFFF);border-radius:var(--r-lg,16px);box-shadow:var(--shadow,0 1px 2px rgba(31,30,27,.04),0 8px 24px rgba(31,30,27,.05))}
.grid{display:grid;grid-template-columns:44px repeat(var(--cols),minmax(var(--colmin),1fr));min-width:calc(44px + var(--cols) * var(--colmin))}
.grid .gh{position:sticky;top:0;z-index:3;background:var(--paper,#FFFFFF);border-bottom:1px solid var(--line,#E4E1D8);display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:48px;font-size:var(--fs-foot,12px);color:var(--muted,#5E5D59)}
.grid .gh b{font-size:var(--fs-sub,15px);color:var(--ink,#1F1E1B)}
.grid .corner{position:sticky;top:0;left:0;z-index:4;background:var(--paper,#FFFFFF);border-bottom:1px solid var(--line,#E4E1D8)}
.axis{position:relative;border-right:1px solid var(--line,#E4E1D8)}
.axis span{position:absolute;right:6px;transform:translateY(-50%);font-size:var(--fs-foot,12px);color:var(--muted,#5E5D59)}
.axis span:first-child{transform:none}
.col{position:relative;border-right:1px solid var(--line,#E4E1D8)}
.col:last-child{border-right:0}
.slot{position:absolute;left:0;right:0;border-top:1px solid var(--line,#E4E1D8)}
.slot.half{border-top-style:dashed;border-top-color:color-mix(in srgb,var(--line,#E4E1D8) 60%,transparent)}
.slot.hit{cursor:pointer}
.slot.hit:hover,.slot.hit:focus-visible{background:var(--m-soft);outline:0}
.slot.hit:hover::after,.slot.hit:focus-visible::after{content:"+ " attr(data-hint);position:absolute;left:4px;top:2px;font-size:var(--fs-foot,12px);font-weight:600;color:var(--m)}
/* 当前时刻只标在时间轴上（PM 11-02）：品牌色小胶囊 + 指向课表的小三角；上完的课大部分去色（留一点原色，好认课型），正在上的按进度从上往下同样去色 */
.axis .now-mark{right:0;padding:1px 5px;border-radius:var(--r-full,999px);background:var(--brand,#E6600C);color:var(--paper,#FFFFFF);font-weight:700;z-index:3;transform:translateY(-50%)!important}
.axis .now-mark::after{content:"";position:absolute;right:-5px;top:50%;margin-top:-4px;border:4px solid transparent;border-left:5px solid var(--brand,#E6600C);border-right:0}
.blk.past{filter:grayscale(.75);opacity:.7}
.blk.live::after{content:"";position:absolute;left:0;right:0;top:0;height:var(--done,0%);background:rgba(240,238,230,.4);-webkit-backdrop-filter:grayscale(.75);backdrop-filter:grayscale(.75);pointer-events:none}
.blk{position:absolute;z-index:1;display:flex;flex-direction:column;align-items:flex-start;gap:0;padding:4px 6px;border-radius:var(--r-sm,4px);text-align:left;overflow:hidden;background:var(--subj-soft);border-left:3px solid var(--subj);font-size:var(--fs-foot,12px);line-height:1.35;color:var(--ink,#1F1E1B)}
.blk b{font-size:var(--fs-tag,13px);font-weight:700;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:100%}
.blk small{font-size:var(--fs-foot,12px);color:var(--muted,#5E5D59);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.blk .st{display:inline-block;margin-top:2px;padding:0 6px;border-radius:var(--r-full,999px);background:var(--paper,#FFFFFF);font-size:var(--fs-foot,12px);font-weight:600;color:var(--muted,#5E5D59)}
.blk.pending{border:1.5px dashed var(--muted,#5E5D59);border-left-width:3px;border-left-style:solid}
.blk.wide b{font-size:var(--fs-sub,15px)}
.blk.wide small{font-size:var(--fs-tag,13px)}
.in-mode .blk{--subj:var(--line,#E4E1D8);--subj-soft:var(--wash,#F0EEE6)}
.in-mode .blk.off{opacity:.45}
.blk.tgt{background:var(--paper,#FFFFFF);box-shadow:inset 0 0 0 2px var(--m);border-left-color:var(--m);opacity:1;z-index:2}
.badge{position:absolute;top:0;right:0;display:grid;place-items:center;min-width:20px;height:20px;padding:0 4px;border-radius:0 var(--r-sm,4px) 0 var(--r-sm,4px);background:var(--m);color:var(--paper,#FFFFFF);font-size:var(--fs-foot,12px);font-weight:700;line-height:1}
.blk.tgt b{padding-right:20px}
.blk .badge{color:var(--paper,#FFFFFF)}
.shortc{font-style:normal;font-weight:700;margin-right:3px}
.blk.cx{opacity:.5;text-decoration:line-through}
.blk.flt-off{opacity:.22!important}
.blk.flt-on{box-shadow:0 0 0 2px var(--ink,#1F1E1B);z-index:3}
.blk.flt-on.tgt{box-shadow:inset 0 0 0 2px var(--m),0 0 0 2px var(--ink,#1F1E1B)}
.grid .gh.day-sum{flex-wrap:wrap;row-gap:2px;padding-right:var(--sp2,8px)}
.grid .gh.day-sum>*{white-space:nowrap}
.col[data-today="true"]{background:transparent}
.grid .gh[data-today="true"] b{display:inline-grid;place-items:center;min-width:26px;height:26px;padding:0 4px;border-radius:50%;background:var(--brand-ink,#B24A10);color:var(--paper,#FFFFFF)}
.blk b.cname{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.blk{min-width:0}
.grid .gh{position:sticky}
.t-tablet .blk{padding:3px 4px}
.t-tablet .blk .st{font-size:10px;padding:0 3px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:transparent}
.t-tablet .blk small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.pay{position:absolute;right:4px;bottom:3px;font-size:10px;font-weight:700;color:var(--ink,#1F1E1B);background:var(--paper,#FFFFFF);border-radius:var(--r-sm,4px);padding:0 4px;line-height:16px;pointer-events:none}
.pay.est{color:var(--muted,#5E5D59);background:transparent;font-weight:600}
.blk.wide .pay{font-size:var(--fs-foot,12px);line-height:18px}
.ct-zh{--subj:var(--ct-zh,#2E7D32)}
.ct-vocab{--subj:var(--ct-vocab,#1565C0)}
.ct-nce{--subj:var(--ct-nce,#6A1B9A)}
.ct-tutor{--subj:var(--ct-tutor,#00727F)}
.ct-tutor-en{--subj:var(--ct-tutor-en,#AD1457)}
.ct-tutor-math{--subj:var(--ct-tutor-math,#A84300)}
.ct-tutor-zh{--subj:var(--ct-tutor-zh,#B71C1C)}
.ct-eve{--subj:var(--ct-eve,#5D4037)}
.ct-makeup{--subj:var(--ct-makeup,#C62828)}
.ct-zh,.ct-vocab,.ct-nce,.ct-tutor,.ct-tutor-en,.ct-tutor-math,.ct-tutor-zh,.ct-eve,.ct-makeup{--subj-soft:color-mix(in srgb,var(--subj) 16%,var(--paper,#FFFFFF))}
/* 家长端科目色（⑧ seq3629，品牌色见 handoff/全局规范/⑧.md）：引宿主品牌变量 --en/--zh/--plum/--ochre，深色由宿主改变量值 */
.subj-en{--subj:var(--en,#2F5C8A)}
.subj-zh{--subj:var(--zh,#3F6B4A)}
.subj-math{--subj:var(--plum,#6B5185)}
.subj-care{--subj:var(--ochre,#86652A)}
.subj-en,.subj-zh,.subj-math,.subj-care{--subj-soft:color-mix(in srgb,var(--subj) 16%,var(--paper,#FFFFFF))}
.ct-mixed{--subj:var(--muted,#5E5D59);--subj-soft:var(--paper,#FFFFFF)}
.blk.sh-solo{border-radius:10px}
.blk.sh-trio{border-left-style:double;border-left-width:6px}
.blk.sh-class{background-image:repeating-linear-gradient(135deg,transparent 0 8px,color-mix(in srgb,var(--subj) 12%,transparent) 8px 10px)}
.in-mode .blk.sh-class{background-image:none}
.shp{display:inline-block;flex:none;vertical-align:0;margin-right:4px;width:9px;height:9px;background:var(--subj,var(--ink,#1F1E1B))}
.shp-solo{border-radius:2px}
.shp-trio{width:13px;background:radial-gradient(circle,var(--subj,var(--ink,#1F1E1B)) 1.6px,transparent 2px) 0 0/4.4px 9px repeat-x}
.shp-class{width:12px;border-radius:2px;background:repeating-linear-gradient(135deg,var(--subj,var(--ink,#1F1E1B)) 0 2px,transparent 2px 4px);box-shadow:inset 0 0 0 1px var(--subj,var(--ink,#1F1E1B))}
/* ---------- 小样块 .ag-sw（PM 11-03「以日程当中的这个样式为准」，⑧ seq3801）：课块（柱子）的缩小版，配 agenda-grid.js swatch ----------
   同一个颜色类给 --subj / --subj-soft → 浅底 + 左侧色条；形状同课块：sh-solo 圆角、sh-trio 双色条、sh-class（小班课 / 看护）135° 斜纹（小尺寸斜纹加深才看得见）。
   图例色块、筛选按钮、日期条 / 月格色点（.sm）、件数圆标（.cbadge.ag-sw）、老师端类别条都是它。放在 .cbadge 尺寸规则之前：尺寸由各处盖，颜色形状由这里给。 */
.ag-sw{display:inline-grid;place-items:center;flex:none;box-sizing:border-box;vertical-align:-2px;width:18px;height:13px;padding:0;border-radius:2px;background-color:var(--subj-soft,var(--wash,#F0EEE6));background-image:none;border:0;border-left:3px solid var(--subj,var(--muted,#5E5D59));color:var(--ink,#1F1E1B);font-style:normal;line-height:1}
.ag-sw.sh-solo{border-radius:5px}
.ag-sw.sh-trio{border-left:5px double var(--subj,var(--muted,#5E5D59))}
.ag-sw.sh-class{background-image:repeating-linear-gradient(135deg,transparent 0 3px,color-mix(in srgb,var(--subj,var(--muted,#5E5D59)) 42%,transparent) 3px 4.5px)}
.ag-sw.sm{width:11px;height:8px;border-left-width:2px;border-radius:1.5px}
.ag-sw.sm.sh-solo{border-radius:3px}
.ag-sw.sm.sh-trio{border-left:3px double var(--subj,var(--muted,#5E5D59))}
.ag-sw.sm.sh-class{background-image:repeating-linear-gradient(135deg,transparent 0 2px,color-mix(in srgb,var(--subj,var(--muted,#5E5D59)) 55%,transparent) 2px 3px)}
.ag-sw.neutral{--subj:var(--muted,#5E5D59);--subj-soft:var(--wash,#F0EEE6);width:24px;height:15px}
.ag-sw .shp{margin:0}
.ag-sw.ct-mixed{background-color:var(--paper,#FFFFFF);background-image:none;border:1px solid var(--muted,#5E5D59)}
.grid .gh[data-today="true"] b{display:inline-block;min-width:0;height:auto;padding:0 2px;border-radius:0;background:none!important;color:var(--brand-ink,#B24A10)!important;box-shadow:inset 0 -3px 0 var(--brand-ink,#B24A10)}
.blk .paybasis{margin-top:2px;font-weight:700;color:var(--ink,#1F1E1B)}
.blk.wide .pay{display:none}
.sname{white-space:nowrap;flex-shrink:0}
.blk.cand{background:color-mix(in srgb,var(--cg,var(--muted,#5E5D59)) 10%,var(--paper,#FFFFFF));border:2px dashed var(--cg,var(--muted,#5E5D59));border-left-width:2px;box-shadow:none}
.blk.cand b{color:var(--ink,#1F1E1B)}
.blk.cand b.cname::before{content:"";display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:4px;background:var(--cg)}
.blk.cand.tgt{outline:none;box-shadow:0 0 0 1px var(--cg)}
.blk.cand .badge{background:var(--cg);color:var(--on-ct,#FFFFFF)}
.blk.cand b.cname::before{display:none}
.blk.cand .badge{top:auto;bottom:0;border-radius:var(--r-sm,4px) 0 0 0}
.blk.cand b.cname{overflow:visible;text-overflow:clip}
.cat-teach{--subj:var(--cat-teach,#1565C0)}
.cat-research{--subj:var(--cat-research,#6A1B9A)}
.cat-admin{--subj:var(--cat-admin,#5D4037)}
.cat-pickup{--subj:var(--cat-pickup,#00695C)}
.cat-market{--subj:var(--cat-market,#AD1457)}
.cat-teach,.cat-research,.cat-admin,.cat-pickup,.cat-market{--subj-soft:color-mix(in srgb,var(--subj) 16%,var(--paper,#FFFFFF))}
.blk.ag .kids{white-space:normal}
.blk b.one{-webkit-line-clamp:1;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.blk.ag{justify-content:flex-start}
.blk .clash{position:absolute;right:2px;bottom:2px;z-index:2}
.blk:has(.clash){outline:2px solid #c0392b;outline-offset:-2px}
.ct-s1{--subj:var(--ct-s1,#283593)}
.ct-s2{--subj:var(--ct-s2,#33691E)}
.ct-s3{--subj:var(--ct-s3,#00695C)}
.ct-s4{--subj:var(--ct-s4,#37474F)}
.ct-s5{--subj:var(--ct-s5,#7A5C00)}
.ct-s6{--subj:var(--ct-s6,#8E24AA)}
.ct-s1,.ct-s2,.ct-s3,.ct-s4,.ct-s5,.ct-s6{--subj-soft:color-mix(in srgb,var(--subj) 16%,var(--paper,#FFFFFF))}
.grid .ad-l{position:static;display:flex;align-items:center;justify-content:center;min-height:40px;font-size:var(--fs-foot,12px);color:var(--muted,#5E5D59);border-bottom:1px solid var(--line,#E4E1D8);border-right:1px solid var(--line,#E4E1D8);background:var(--paper,#FFFFFF)}
.grid .ad-cell{display:flex;flex-direction:column;gap:3px;min-width:0;padding:3px;border-bottom:1px solid var(--line,#E4E1D8);border-right:1px solid var(--line,#E4E1D8)}
.grid .ad-cell:last-child{border-right:0}
.cat-eve{--subj:var(--cat-eve,#8A5A00);--subj-soft:color-mix(in srgb,var(--subj) 16%,var(--paper,#FFFFFF))}
.bdg{display:inline-block;position:relative}
.bdg.num{min-width:18px;height:18px;padding:0 5px;display:inline-grid;place-items:center;border-radius:9px;background:var(--alert,#D93025);color:#fff;font-size:11px;font-weight:700;line-height:1;box-shadow:0 0 0 2px var(--wash,#F0EEE6)}
@media (prefers-color-scheme:dark){.bdg.num{color:#1A1918}}
.blk.sel{box-shadow:inset 0 0 0 2px var(--m);outline:2px solid var(--m);outline-offset:-2px}
.blk .bdg.pend{position:absolute;top:2px;right:2px;z-index:3}
.blk.cand .bdg.pend{top:2px;bottom:auto}
.blk .st+.bdg.pend{top:2px}
.slot.hit{display:block;width:100%;padding:0;background:transparent;text-align:left}
.blk.cand.cx{background:var(--wash,#F0EEE6);border-color:var(--line,#E4E1D8)}
/* 取消的课的画法（PM 11-02，老师 / 家长自己选；grid opts.cxStyle → .grid-wrap.cx-<key>；缺省 = 上面 .blk.cx 的划线） */
.cx-blank .blk.cx,.cx-ribbon .blk.cx,.cx-row .blk.cx,.cx-frost .blk.cx,.cx-fold .blk.cx{text-decoration:none;opacity:1}
.cx-blank .blk.cx{background:var(--paper,#FFFFFF);background-image:none;border:1px solid var(--line,#E4E1D8);border-left:3px solid color-mix(in srgb,var(--subj) 35%,var(--paper,#FFFFFF))}
.cx-blank .blk.cx b,.cx-blank .blk.cx small{color:var(--muted,#5E5D59);opacity:.75}
.cx-blank .blk.cx .st{background:var(--wash,#F0EEE6)}
.cx-ribbon .blk.cx>*{opacity:.45}
.cx-ribbon .blk.cx .st{display:none}
.cx-ribbon .blk.cx::after{content:"取消";position:absolute;top:10px;right:-26px;width:96px;transform:rotate(35deg);text-align:center;background:var(--muted,#5E5D59);color:var(--paper,#FFFFFF);font-size:11px;font-weight:700;letter-spacing:2px;line-height:18px;pointer-events:none}
.cx-row .blk.cx{height:22px!important;flex-direction:row;align-items:center;gap:6px;padding:0 8px;background:var(--wash,#F0EEE6);background-image:none;border-left-color:var(--line,#E4E1D8);border-radius:var(--r-full,999px)}
.cx-row .blk.cx b{flex:1;min-width:0;font-size:var(--fs-foot,12px);font-weight:600;color:var(--muted,#5E5D59);-webkit-line-clamp:1}
.cx-row .blk.cx small{display:none}
.cx-row .blk.cx .st{flex:none;margin:0 0 0 auto;padding:0;background:none;white-space:nowrap;color:var(--muted,#5E5D59)}
.cx-frost .blk.cx>*{filter:blur(1.2px);opacity:.6}
.cx-frost .blk.cx .st{display:none}
.cx-frost .blk.cx::after{content:"已取消";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);padding:2px 10px;border-radius:var(--r-full,999px);background:var(--paper,#FFFFFF);color:var(--muted,#5E5D59);font-size:var(--fs-foot,12px);font-weight:700;white-space:nowrap;pointer-events:none}
.cx-fold .blk.cx{background:var(--wash,#F0EEE6);background-image:none;border-left-color:var(--line,#E4E1D8);clip-path:polygon(0 0,calc(100% - 18px) 0,100% 18px,100% 100%,0 100%)}
.cx-fold .blk.cx b,.cx-fold .blk.cx small{color:var(--muted,#5E5D59)}
.cx-fold .blk.cx::after{content:"";position:absolute;top:0;right:0;width:18px;height:18px;background:linear-gradient(225deg,transparent 50%,var(--line,#E4E1D8) 50%);pointer-events:none}
/* ---------- 外壳（v2，PM 11-03）：翻页条 .nav、日期条 .days、月格 .month / .mday、图例 .legend、件数角标 .cbadge / .pip / .dots ----------
   从老师页 agenda-css 原样搬来、顺序不变（同优先级靠先后定胜负），设计变量补了缺省值；--m / --m-soft（老师页专注模式色）缺省取「只看日程」的品牌色。
   不写按屏宽的 @media（小程序转不了）：老师页按屏宽的微调（≥760 月格放大、≤640 翻页条收紧等）留在老师页；.t-phone / .t-tablet 是老师页根上的档位类，家长端不加就不生效。
   宿主要有按钮复位（button{font:inherit;color:inherit;background:none;border:0;padding:0}）和 .wide-only（窄屏藏）的定义。 */
.nav{display:flex;align-items:center;gap:var(--sp2,8px);flex-wrap:wrap;margin:var(--sp2,8px) 0}
.nav .week{display:flex;align-items:center;gap:4px}
.nav .week button{width:36px;height:36px;border-radius:var(--r-md,8px);background:var(--wash,#F0EEE6);font-size:var(--fs-body,16px)}
.nav .week button:disabled{opacity:.35;cursor:default}
.nav .week b{font-size:var(--fs-sub,15px);padding:0 var(--sp1,4px);white-space:nowrap}
.nav .spacer{flex:1}
.mini-seg{display:flex;gap:2px;padding:3px;background:var(--wash,#F0EEE6);border-radius:var(--r-md,8px)}
.mini-seg button{min-height:30px;padding:0 10px;border-radius:var(--r-sm,4px);font-size:var(--fs-tag,13px);font-weight:600;color:var(--muted,#5E5D59)}
.mini-seg button[aria-pressed="true"]{background:var(--ink,#1F1E1B);color:var(--bg,#FAF9F5)}
/* 日条（日视图） */
.days{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:var(--sp2,8px)}
.days button{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:52px;border-radius:var(--r-md,8px);font-size:var(--fs-foot,12px);color:var(--muted,#5E5D59)}
.days button b{font-size:var(--fs-body,16px);color:var(--ink,#1F1E1B)}
.days button[aria-pressed="true"]{background:var(--ink,#1F1E1B);color:var(--paper,#FFFFFF)}
.days button[aria-pressed="true"] b{color:var(--paper,#FFFFFF)}
.days button[data-today="true"]:not([aria-pressed="true"]) b{color:var(--brand-ink,#B24A10)}
.days .pip{position:absolute;top:3px;right:3px;min-width:16px;height:16px;padding:0 4px;border-radius:var(--r-full,999px);background:var(--m,var(--brand-ink,#B24A10));color:var(--paper,#FFFFFF);font-size:var(--fs-foot,12px);font-weight:700;line-height:16px;text-align:center}
.grid .gh .pip{margin-top:2px;min-width:16px;height:16px;padding:0 4px;border-radius:var(--r-full,999px);background:var(--m,var(--brand-ink,#B24A10));color:var(--paper,#FFFFFF);font-size:var(--fs-foot,12px);font-weight:700;line-height:16px}
/* 色例 */
.legend{display:flex;flex-wrap:wrap;gap:var(--sp1,4px) var(--sp3,12px);margin:var(--sp2,8px) 0 0;font-size:var(--fs-foot,12px);color:var(--muted,#5E5D59)}
.legend span{display:inline-flex;align-items:center;gap:4px}
.legend i:not(.ag-sw){display:inline-grid;place-items:center;width:16px;height:16px;border-radius:var(--r-sm,4px);background:var(--m,var(--brand-ink,#B24A10));color:var(--paper,#FFFFFF);font-style:normal;font-weight:700;font-size:var(--fs-foot,12px)}
/* 月视图 */
.month{margin-top:var(--sp2,8px);background:var(--paper,#FFFFFF);border-radius:var(--r-lg,16px);box-shadow:var(--shadow,0 1px 2px rgba(31,30,27,.04),0 8px 24px rgba(31,30,27,.05));padding:var(--sp2,8px)}
.mhead,.mgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.mhead span{text-align:center;font-size:var(--fs-foot,12px);color:var(--muted,#5E5D59);padding:4px 0}
.mday{position:relative;min-height:64px;border-radius:var(--r-md,8px);background:var(--bg,#FAF9F5);display:flex;flex-direction:column;align-items:flex-start;padding:6px;text-align:left}
.mday.blank{background:transparent}
.mday:disabled{opacity:.45;cursor:default}
.mday .d{font-size:var(--fs-tag,13px);font-weight:600}
.mday .mshort{margin-top:auto;font-size:var(--fs-tag,13px);font-weight:700;line-height:1.2;letter-spacing:1px;word-break:break-all}
.mday.today{box-shadow:inset 0 0 0 2px var(--brand-ink,#B24A10)}
.mday .todo{position:absolute;top:4px;right:4px;min-width:18px;height:18px;border-radius:var(--r-full,999px);background:var(--m,var(--brand-ink,#B24A10));color:var(--paper,#FFFFFF);font-size:var(--fs-foot,12px);font-weight:700;display:grid;place-items:center;padding:0 4px}
.mlegend{margin-top:var(--sp2,8px)}
.legend i.todo-dot{display:inline-block;width:12px;height:12px;border-radius:50%;background:var(--m,var(--brand-ink,#B24A10))}
.nav{position:relative;flex-wrap:nowrap;gap:6px}
.nav .week button{width:32px;height:32px}
.mday.today{box-shadow:none}
.mday.today .d{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--brand-ink,#B24A10);color:var(--paper,#FFFFFF)}
/* 日历：日期数字为主体，课数 = 右上角带颜色的小圆角标 */
.cbadge{position:absolute;top:3px;right:3px;display:grid;place-items:center;min-width:20px;height:20px;padding:0 5px;border-radius:var(--r-full,999px);background:var(--subj-soft);box-shadow:inset 0 0 0 1.5px var(--subj);color:var(--ink,#1F1E1B);font-size:var(--fs-foot,12px);font-weight:700;line-height:1}
.cbadge.ct-mixed{background:var(--paper,#FFFFFF);box-shadow:inset 0 0 0 1px var(--muted,#5E5D59)}
.grid .gh .cbadge{top:4px;right:6px}
.days button{position:relative}
.days .pip{top:auto;bottom:3px;right:50%;transform:translateX(50%)}
.days button[aria-pressed="true"] .cbadge{box-shadow:inset 0 0 0 1.5px var(--subj),0 0 0 1.5px var(--ink,#1F1E1B)}
.mday{align-items:center;justify-content:center}
.mday .d{font-size:var(--fs-sub,15px);font-weight:600}
.mday .cbadge{top:4px;right:4px}
.mday .todo{top:auto;bottom:4px;right:4px}
.days button{min-height:60px;padding-top:6px}
.days .cbadge{top:2px;right:2px;min-width:18px;height:18px;padding:0 4px}
.days .pip{top:2px;left:2px;right:auto;bottom:auto;transform:none}
.days button[data-today="true"]:not([aria-pressed="true"]) b{display:inline-grid;place-items:center;min-width:26px;height:26px;border-radius:50%;background:var(--brand-ink,#B24A10);color:var(--paper,#FFFFFF)}
.days button{min-height:70px;padding-top:20px}
.days .wd{font-size:var(--fs-foot,12px)}
.t-phone .nav .week button,.t-tablet .nav .week button{width:44px;height:44px}
.t-phone .mini-seg,.t-tablet .mini-seg{min-height:44px;align-items:stretch}
.t-tablet .grid .gh .cbadge{min-width:16px;height:16px;font-size:10px;top:2px;right:2px;padding:0 3px}
/* 课数角标 = 写着件数的小样块（.ag-sw，PM 11-03 同柱子）：浅底 + 左色条 + 正文色字；多类（ct-mixed）白底细边 */
.cbadge{width:auto;background-color:var(--subj-soft);border-radius:3px;color:var(--ink,#1F1E1B);box-shadow:none}
.cbadge.ct-mixed{background:var(--paper,#FFFFFF);color:var(--ink,#1F1E1B);box-shadow:none;border:1px solid var(--muted,#5E5D59)}
.days button[aria-pressed="true"] .cbadge{box-shadow:0 0 0 2px var(--paper,#FFFFFF)}
/* 角标形状同课块（在 .ag-sw.sh-* 里）：1对1 圆角、1对3 双色条、小班课 / 看护 斜纹；斜纹在数字底下调淡一点，数字好认 */
.cbadge.sh-solo{border-radius:6px}
.cbadge.ag-sw.sh-class{background-image:repeating-linear-gradient(135deg,transparent 0 4px,color-mix(in srgb,var(--subj,var(--muted,#5E5D59)) 26%,transparent) 4px 6px)}
.legend .shp{--subj:var(--ink,#1F1E1B)}
.legend .lg-sep{width:1px;height:14px;background:var(--line,#E4E1D8)}
/* 今天：日期数字下一条短横（不用实心圆，避免和课数角标混淆） */
.days button[data-today="true"]:not([aria-pressed="true"]) b,.mday.today .d{display:inline-block;min-width:0;height:auto;padding:0 2px;border-radius:0;background:none!important;color:var(--brand-ink,#B24A10)!important;box-shadow:inset 0 -3px 0 var(--brand-ink,#B24A10)}
.today-mark{font-style:normal;font-weight:700;color:var(--brand-ink,#B24A10);box-shadow:inset 0 -3px 0 var(--brand-ink,#B24A10);padding:0 2px}
.legend i.today-mark{background:none;width:auto;height:auto;display:inline-block}
.mday .todo{bottom:auto;top:auto}
.mday .todo{position:absolute;bottom:4px;right:4px}
.legend i.shp{display:inline-block;height:9px;border-radius:0;color:transparent}
.legend i.shp-solo{width:9px;border-radius:2px;background:var(--ink,#1F1E1B)}
.legend i.shp-trio{width:13px;background:radial-gradient(circle,var(--ink,#1F1E1B) 1.6px,transparent 2px) 0 0/4.4px 9px repeat-x}
.legend i.shp-class{width:12px;border-radius:2px;background:repeating-linear-gradient(135deg,var(--ink,#1F1E1B) 0 2px,transparent 2px 4px);box-shadow:inset 0 0 0 1px var(--ink,#1F1E1B)}
.legend i.today-mark{color:var(--brand-ink,#B24A10);background:none;font-size:var(--fs-foot,12px);width:auto;height:auto;border-radius:0}
.mini-seg button[aria-pressed="true"]{background:var(--m-soft,var(--brand-soft,#F8E4D6));color:var(--ink,#1F1E1B);box-shadow:inset 0 0 0 2px var(--m,var(--brand-ink,#B24A10));font-weight:700}
.m-browse .mini-seg button[aria-pressed="true"]{color:var(--brand-ink,#B24A10)}
.mini-seg button{color:var(--ink,#1F1E1B)}
.mini-seg button:disabled{color:var(--muted,#5E5D59);opacity:.45}
/* 日期条：选中 = 描边 + 浅底，数字保持正文色；今天 = 数字下短横（选中时也保留） */
.days button[aria-pressed="true"]{background:var(--m-soft,var(--brand-soft,#F8E4D6));color:var(--ink,#1F1E1B);box-shadow:inset 0 0 0 2px var(--m,var(--brand-ink,#B24A10))}
.days button[aria-pressed="true"] b{color:var(--ink,#1F1E1B)}
.days button[data-today="true"] b{display:inline-block;padding:0 2px;background:none!important;color:var(--brand-ink,#B24A10)!important;box-shadow:inset 0 -3px 0 var(--brand-ink,#B24A10)}
.days button[aria-pressed="true"] .cbadge{box-shadow:0 0 0 2px var(--m-soft,var(--brand-soft,#F8E4D6))}
/* 外壳 v2 新加（老师端不出现，家长端用）：「今天」按钮、色点、可点的图例（筛选）、月格选中那天 */
.nav .today-btn{flex:none;min-height:32px;padding:0 12px;border-radius:var(--r-md,8px);background:var(--wash,#F0EEE6);font-size:var(--fs-tag,13px);font-weight:600;white-space:nowrap;color:var(--brand-ink,#B24A10)}
.dots{display:flex;justify-content:center;gap:2px;margin-top:3px;height:8px}
.mday .dots{margin-top:auto}
.legend.filter button{display:inline-flex;align-items:center;gap:4px;min-height:28px;padding:0 10px;border-radius:var(--r-full,999px);background:var(--paper,#FFFFFF);box-shadow:inset 0 0 0 1px var(--line,#E4E1D8);font-size:var(--fs-foot,12px);color:var(--ink,#1F1E1B)}
.legend.filter button{opacity:.45}
.legend.filter button[aria-pressed="true"]{opacity:1}
.legend.filter button.lg-all[aria-pressed="true"]{box-shadow:inset 0 0 0 1.5px var(--ink,#1F1E1B);font-weight:700}
.mday.sel{box-shadow:inset 0 0 0 2px var(--m,var(--brand-ink,#B24A10))}
/* 周视图手机一屏放下七天（grid opts.fit，PM 11-03「显示不全」；原家长端 web/app.js GRID_PAGE_CSS）：七列均分、时间轴 36px、课块字小一号、名字可折三行 */
.grid-wrap.fit .grid{grid-template-columns:36px repeat(var(--cols),minmax(0,1fr))}
.grid-wrap.fit .axis span{right:3px;font-size:11px}
.grid-wrap.fit .blk{padding:3px 3px 3px 4px}
.grid-wrap.fit .blk b,.grid-wrap.fit .blk b.cname{font-size:12px;white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;text-overflow:clip;word-break:break-all}
.grid-wrap.fit .blk .st{padding:0 3px;font-size:11px}
.grid-wrap.fit .gh b{font-size:14px}
/* fit 下列宽约 50px：列头件数圆标改成排在日期下面的小号（不再压住「周一」）；课块不写副行（教室等，家长端周视图本来就不写），只留名字和课酬 */
.grid-wrap.fit .grid .gh .cbadge{position:static;min-width:16px;height:16px;padding:0 3px;margin-top:2px;font-size:10px}
.grid-wrap.fit .blk small{display:none}
.grid-wrap.fit .pay{right:2px;padding:0 2px;white-space:nowrap}
/* ---------- 详情卡（v3，PM 11-03）：抽屉头 .sheet-h + 卡体 .sheet-b（块 .sec、行 .info-row、标签 .tag），配 agenda-grid.js 的 sheetHead / sheetBody / sheet ----------
   原 index.html 的抽屉头、块、行、标签样式，顺序不变；都收在 .sheet-h / .sheet-b 下（家长端 .sec 是小标题、不同物，别串）。外框（底部弹层 / 右栏）归宿主。
   宿主要给：按钮复位（font:inherit;background:none;border:0;padding:0）、h2 / h3 / p 的 margin:0（老师页 h1,h2,h3,p{margin:0}）。 */
.sheet-h{display:flex;align-items:flex-start;gap:var(--sp2,8px);padding:var(--sp4,16px) var(--sp4,16px) var(--sp3,12px);border-bottom:1px solid var(--line,#E4E1D8)}
.sheet-h .tt{flex:1;min-width:0}
.sheet-h h2{font:700 var(--fs-h2,18px)/1.35 var(--serif,"Songti SC","STSong","Source Han Serif SC","Noto Serif SC","Noto Serif CJK SC","SimSun",serif)}
.sheet-h p{font-size:var(--fs-tag,13px);color:var(--muted,#5E5D59)}
.sheet-h button{flex:none;min-width:44px;min-height:36px;border-radius:var(--r-md,8px);background:var(--wash,#F0EEE6);font-size:var(--fs-tag,13px);font-weight:600}
.sheet-b{flex:1;overflow:auto;padding:var(--sp3,12px) var(--sp4,16px) var(--sp5,24px)}
.sheet-b .sec{background:var(--paper,#FFFFFF);border-radius:var(--r-lg,16px);padding:var(--sp2,8px) var(--sp4,16px);margin-bottom:var(--sp3,12px);box-shadow:var(--shadow,0 1px 2px rgba(31,30,27,.04),0 8px 24px rgba(31,30,27,.05))}
.sheet-b .sec>h3{font-size:var(--fs-tag,13px);color:var(--muted,#5E5D59);font-weight:600;padding:var(--sp2,8px) 0 var(--sp1,4px)}
.sheet-h .tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.sheet-h .tag{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;border-radius:var(--r-full,999px);font-size:var(--fs-tag,13px);font-weight:700;background:var(--wash,#F0EEE6);color:var(--muted,#5E5D59)}
.sheet-b .info-row{display:flex;justify-content:space-between;gap:var(--sp3,12px);padding:var(--sp2,8px) 0;border-bottom:1px solid var(--line,#E4E1D8);font-size:var(--fs-sub,15px)}
.sheet-b .info-row:last-child{border-bottom:0}
.sheet-b .info-row>:first-child{color:var(--muted,#5E5D59);flex:none}
.sheet-b .info-row>:last-child{text-align:right;font-weight:600;min-width:0}
.sheet-b .info-row a{color:var(--brand-ink,#B24A10);font-weight:600;text-decoration:none;cursor:pointer}
.sheet-b .blk-kicker{font-size:var(--fs-foot,12px);font-weight:700;color:var(--muted,#5E5D59);letter-spacing:.05em;margin:var(--sp2,8px) 0 var(--sp1,4px)}
.sheet-h .tag.warn{background:var(--ochre-soft,#F1E7D3);color:var(--ochre,#86652A)}
.sheet-b .info-row span small{display:block;font-weight:400;color:var(--muted,#5E5D59);font-size:var(--fs-foot,12px)}
