/* ==========================================================================
   韶钢倒班查询系统 · 视觉层（方案一「靛蓝胶囊」+ PC 双栏）
   --------------------------------------------------------------------------
   本文件为纯视觉层改造，不含任何 HTML / JS 改动。
   严格保留 daoban.js 依赖的全部类名与结构契约：
     #calendarBody / td#GD0-41 / .cell-date(#SD) / .cell-lunar(#LD) / .cell-shift(#DBD)
     .shift-night|day|mid|rest / .cell-night|day|mid|rest / .xiujia / .buban
     .day-tag.holiday|rest|work / .memo-tag / .memo-content
     .memo-dialog(#memo-dialog/#memo-text/#memo-date) / .memo-overlay
     .menu tbody td#menu1-4 .active / #yearSelect / #monthSelect / #bznumdiv(.sdatetext)
   旧文件已备份为 daoban.css.bak
   ========================================================================== */

body,div,h1,h2,h3,h4,h5,h5,p,ul,ol,li,dl,dt,dd {
    margin: 0;
    padding: 0
}
ul,ol {
    list-style-type: none
}

a {
    color: var(--text);
    text-decoration: none
}
a:hover {
    color: var(--brand)
}

.clearfix:after {
    content: "";
    display: table;
    clear: both
}

/* --------------------------------------------------------------------------
   1. 设计令牌
   -------------------------------------------------------------------------- */
:root {
    /* 品牌紫（全站统一 #957EDB，色相 255°） */
    --brand: #957EDB;
    --brand-dark: #7252D1;
    --brand-light: #B8A7EC;
    --brand-soft: rgba(149,126,219,.10);

    /* 中性色 */
    --bg: #EDEEF5;
    --surface: #fff;
    --surface-soft: #F8F9FD;
    --text: #2D3142;
    --text-soft: #6B7280;
    --text-mute: #9AA0AC;
    --border: #E7E9F3;
    --border-soft: #EFF1F8;

    /* 班次色（与页面内联写入的 bzcolor 对应，此处仅用于底色） */
    --shift-night: #0346FE;
    --shift-day: #66B133;
    --shift-mid: #0492CD;
    --shift-rest: #FB9902;

    /* 圆角 */
    --r-xl: 18px;
    --r-lg: 14px;
    --r-md: 10px;
    --r-sm: 8px;

    /* 阴影：只用在卡片上，绝不下放到 42 个单元格（重绘成本高） */
    --shadow-sm: 0 1px 2px rgba(17,24,39,.04), 0 1px 3px rgba(17,24,39,.05);
    --shadow-brand: 0 3px 10px rgba(149,126,219,.26);
}

/* --------------------------------------------------------------------------
   2. 页面骨架
   —— 不用 background-attachment:fixed（移动端滚动时会强制整屏重绘）
   -------------------------------------------------------------------------- */
html {
    background: var(--bg);
    -webkit-text-size-adjust: 100%;
}

body {
    font: 14px/1.45 -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei",
          "PingFang SC", "Hiragino Sans GB", Roboto, "Helvetica Neue", Arial, sans-serif;
    color: var(--text);
    background: linear-gradient(180deg, #F8F9FD 0%, #F2F3FA 60%, var(--bg) 100%) no-repeat;
    background-color: var(--bg);
    background-size: 100% 100vh;
    padding: 14px 12px 0;
    min-width: 300px;
    margin: 0 auto;
    -webkit-font-smoothing: antialiased;
    -webkit-tap-highlight-color: transparent;
}

.container-main {
    width: 100%;
    max-width: 1140px;
    margin: 0 auto;
    height: auto;
    background: transparent;
}

/* Logo 横幅卡片（base64 图原样置于此处） */
.logo {
    background-image: url("data:image/png;base64,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");
    background-repeat: no-repeat;
    background-position: center center;
    background-size: contain;
    background-color: var(--surface);
    height: 46px;
    border: 1px solid var(--border);
    border-radius: var(--r-lg);
    box-shadow: var(--shadow-sm);
    margin-bottom: 12px;
    text-align: center;
}

/* .content：手机端单列，PC 端双栏（见第 8 节） */
.content {
    border: 0 solid #ddd;
    margin: 0 auto;
    height: 100%;
}

/* --------------------------------------------------------------------------
   3. 日历卡片
   —— border-collapse:separate + border-spacing 让每个单元格变成独立圆角块
   -------------------------------------------------------------------------- */
.datetable {
    width: 100%;
    table-layout: fixed;              /* 7 列等宽，农历/节日文字不会撑破列 */
    border-collapse: separate;
    border-spacing: 5px;              /* 顺带充当卡片内边距 */
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--r-xl);
    box-shadow: var(--shadow-sm);
    height: auto;
    overflow: hidden;
}

.datetable thead {
    background: transparent;
}

.datetable thead td {
    border: 0 solid transparent;
    padding: 0;
    font: inherit;
    color: inherit;
    min-width: 0;
    width: auto;
    height: auto;
    overflow: visible;
}

.datetable thead td span {
    padding: 0
}

/* 3.1 月份导航 */
.month-header {
    padding: 10px 12px;
    text-align: center;
    background: #F7F6FE;
    border-radius: var(--r-lg);
}

.month-nav {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    margin: 0 auto;
    text-align: center;
}

.calendar-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    height: 32px;
    padding: 0 12px;
    margin: 0;
    font-size: 13px;
    font-weight: 500;
    color: var(--brand);
    background-color: var(--surface);
    border: 1px solid rgba(149,126,219,.18);
    border-radius: var(--r-md);
    text-decoration: none;
    cursor: pointer;
    vertical-align: middle;
    transition: background .18s ease, color .18s ease, transform .15s ease;
}
.calendar-btn b {
    font-weight: 500;
    color: inherit;
}
.calendar-btn:hover {
    background-color: var(--brand);
    border-color: var(--brand);
    color: #fff;
    transform: translateY(-1px);
}

.calendar-dropdown {
    width: auto;
    min-width: 76px;
    height: 32px;
    padding: 0 6px;
    font-size: 13px;
    font-weight: 500;
    text-align: center;
    color: var(--text);
    background-color: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--r-md);
    outline: none;
    cursor: pointer;
    margin: 0;
    transition: border-color .18s ease;
}
.calendar-dropdown:hover,
.calendar-dropdown:focus {
    border-color: var(--brand-light);
}

/* 当前班组（readonly input，被 JS 当作状态位使用，只改外观） */
.sdatetext {
    flex: 0 0 auto;
    width: 52px;
    height: 32px;
    padding: 0;
    font-size: 13px;
    font-weight: 700;
    text-align: center;
    color: var(--brand);
    background: var(--brand-soft);
    border: 0;
    border-radius: var(--r-md);
    box-shadow: none;
}

/* 3.2 星期栏（.wk-pill 只有 my1/my0 有，其余页面直接是 <td>一</td>） */
.datetable thead .weekday-header td {
    background: transparent;
    text-align: center;
    height: 30px;
    font-size: 12px;
    font-weight: 500;
    color: var(--brand);
    border: 0;
    padding: 2px;
}

.datetable thead .weekday-header .wk-pill {
    display: inline-block;
    min-width: 24px;
    padding: 3px 8px;
    border-radius: var(--r-sm);
    background: var(--brand-soft);
    color: var(--brand);
    font-size: 12px;
    font-weight: 500;
}

/* 3.3 日期单元格 */
.datetable tbody td {
    height: 56px;
    padding: 2px;
    font-size: 12px;
    width: auto;
    text-align: center;
    vertical-align: middle;
    overflow: hidden;
    position: relative;
    border: 0 !important;             /* 抵消 daoban.js 给首列写入的 inline borderLeft */
    border-radius: var(--r-md);
    background: var(--surface-soft);
    background-image: none;
    transition: background .15s ease;
    cursor: pointer;
}

/* 空白格（JS 已把 textContent 置空）：不显示底色，日历只留下有日期的胶囊。
   height/padding 归零让"整行全空"的第 6 行自动塌陷，月末不再拖一条空带 */
.datetable tbody td:empty {
    background: transparent;
    box-shadow: none;
    cursor: default;
    height: 0;
    padding: 0;
}

/* 班次底色：极浅，主要靠胶囊标签显色，便于快速扫读又不花 */
.datetable tbody td.cell-night { background-color: rgba(3,70,254,.045); }
.datetable tbody td.cell-day   { background-color: rgba(102,177,51,.055); }
.datetable tbody td.cell-mid   { background-color: rgba(4,146,205,.045); }
.datetable tbody td.cell-rest  { background-color: rgba(251,153,2,.06); }

/* JS 会在单元格里插入 <br> 做换行，块级布局下只会多出一个空行 → 统一隐藏 */
.datetable tbody td br {
    display: none;
}

.cell-date {
    display: block;
    font-family: var(--font-sans);
    font-size: 16px;
    font-weight: 700;
    line-height: 1.15;
    text-align: center;
    color: var(--text);
}

.cell-lunar {
    display: block;
    font-family: inherit;
    font-size: 11px;
    line-height: 1.2;
    text-align: center;
    color: var(--text-mute);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    padding: 0 1px;
}

.cell-shift {
    display: block;
    text-align: center;
    line-height: 1;
    margin-top: 3px;
}
.cell-shift .shift-night,
.cell-shift .shift-day,
.cell-shift .shift-mid,
.cell-shift .shift-rest {
    display: inline-block;
    padding: 2px 7px;
    border-radius: 7px;
    font-size: 11px;
    font-weight: 700;
    line-height: 1.25;
    white-space: nowrap;
}
/* 文字色由 JS 按 bzcolor 内联写入，这里只负责底色 */
.cell-shift .shift-night { background: rgba(3,70,254,.13); }
.cell-shift .shift-day   { background: rgba(102,177,51,.17); }
.cell-shift .shift-mid   { background: rgba(4,146,205,.13); }
.cell-shift .shift-rest  { background: rgba(251,153,2,.17); }

/* 3.4 节假日标记（节 / 休 / 工），固定在格内右上角 */
.day-tag {
    position: absolute;
    top: 4px;
    right: 4px;
    font-size: 10px;
    font-weight: 700;
    line-height: 1;
    padding: 2px 5px;
    border-radius: 7px;
    display: inline-block;
    white-space: nowrap;
    overflow: hidden;
    text-align: center;
    z-index: 3;
}
.day-tag.holiday,
.day-tag.rest,
.day-tag.work {
    font-size: 10px;
}
.day-tag.holiday { background-color: #FFD86B; color: #4A3800; }
.day-tag.rest    { background-color: #22C55E; color: #fff; }
.day-tag.work    { background-color: #EF4444; color: #fff; }

td.xiujia,
td.buban {
    position: relative;
}

/* 3.5 备忘 */
.memo-tag {
    position: absolute;
    bottom: 3px;
    right: 3px;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background-color: var(--brand);
    z-index: 3;
}

.memo-content {
    font-size: 10px;
    line-height: 1.2;
    color: var(--text-mute);
    max-width: 100%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    text-align: center;
}

/* --------------------------------------------------------------------------
   4. 班组切换（表格结构不变，视觉上变成分段控件卡片）
   -------------------------------------------------------------------------- */
.menu {
    display: block;
    width: 100%;
    margin: 12px 0 0;
}

.menu tbody {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    padding: 12px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--r-xl);
    box-shadow: var(--shadow-sm);
}

.menu tbody::before {
    content: "当前班组";
    flex: 0 0 100%;
    font-size: 12px;
    font-weight: 500;
    color: var(--text-mute);
    letter-spacing: .3px;
    margin-bottom: 4px;
}

.menu tbody tr {
    display: flex;
    gap: 4px;
    flex: 1 1 100%;
}

.menu tbody td {
    flex: 1 1 0;
    min-width: 0;
    padding: 0;
    height: 38px;
    line-height: 38px;
    font-size: 14px;
    width: auto;
    overflow: hidden;
    text-align: center;
    color: var(--text-soft);
    background: var(--surface-soft);
    cursor: pointer;
    border-radius: var(--r-md);
    transition: background .18s ease, color .18s ease;
}

.menu tbody td:hover {
    background: var(--brand-soft);
    color: var(--brand);
}

.menu tbody td.active {
    background: linear-gradient(135deg, var(--brand) 0%, var(--brand-light) 100%);
    color: #fff;
    font-weight: 700;
    box-shadow: var(--shadow-brand);
}

/* --------------------------------------------------------------------------
   5. 页脚 / 快捷入口
   -------------------------------------------------------------------------- */
.footer-section {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 12px 0 26px;
    margin: 0;
    max-width: none;
    text-align: center;
}

.footer__nav {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-start;
    gap: 6px;
    padding: 12px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--r-xl);
    box-shadow: var(--shadow-sm);
    margin: 0;
    /* 吃掉 my2/4/6/8 里 <a> 之间的 "丨" 分隔符文本节点（它们是匿名 flex 项） */
    font-size: 0;
}

.footer__nav::before {
    content: "快捷入口";
    flex: 0 0 100%;
    font-size: 12px;
    font-weight: 500;
    color: var(--text-mute);
    letter-spacing: .3px;
    margin-bottom: 4px;
}

.footer__nav a,
.footer__nav .nav-chip {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    font-weight: 400;
    color: #71717A;
    padding: 6px 10px;
    border-radius: var(--r-md);
    background: #FAFAFB;
    white-space: nowrap;
    text-align: center;
    transition: background .18s ease, color .18s ease, transform .15s ease;
}

.footer__nav a b {
    font-weight: 700;
}

.footer__nav a:hover,
.footer__nav .nav-chip:hover {
    background: var(--brand);
    color: #fff;
    transform: translateY(-1px);
}

.footer__nav a.nav-primary {
    color: var(--brand-dark);
    background: var(--brand-soft);
    border: 1px solid var(--brand-line);
    font-weight: 600;
    box-shadow: none;
}
.footer__nav a.nav-primary:hover {
    background: #ECE5FA;
    transform: translateY(-1px);
}

.footer.footer-info {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 12px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--r-xl);
    box-shadow: var(--shadow-sm);
    text-align: center;
}

.footer-info span,
.footer-copyright span {
    font-size: 12px;
    color: var(--text-mute);
}

/* --------------------------------------------------------------------------
   6. 备忘弹窗
   -------------------------------------------------------------------------- */
.memo-overlay {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(23,26,40,.45);
    z-index: 999;
}

.memo-dialog {
    display: none;
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background: var(--surface);
    padding: 20px;
    border-radius: var(--r-xl);
    box-shadow: 0 18px 48px rgba(17,24,39,.22);
    z-index: 1000;
    min-width: 300px;
    max-width: 90%;
    max-height: 70vh;
    overflow-y: auto;
}

.memo-dialog h3 {
    margin-top: 0;
    margin-bottom: 14px;
    font-size: 15px;
    font-weight: 700;
    color: var(--text);
}

.memo-dialog textarea {
    width: 100%;
    box-sizing: border-box;
    height: 100px;
    padding: 10px;
    font-family: inherit;
    font-size: 13px;
    color: var(--text);
    border: 1px solid var(--border);
    border-radius: var(--r-md);
    background: var(--surface-soft);
    resize: vertical;
    outline: none;
    margin-bottom: 14px;
    transition: border-color .18s ease;
}
.memo-dialog textarea:focus {
    border-color: var(--brand-light);
    background: var(--surface);
}

.memo-dialog-buttons {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}

.memo-dialog button {
    padding: 8px 18px;
    margin: 0;
    font-size: 13px;
    font-weight: 500;
    border: 1px solid transparent;
    border-radius: var(--r-md);
    cursor: pointer;
    transition: background .18s ease, color .18s ease;
}

.memo-save-btn {
    background-color: var(--brand);
    color: #fff;
}
.memo-save-btn:hover {
    background-color: var(--brand-dark);
}

.memo-cancel-btn {
    background-color: var(--surface-soft);
    color: var(--text-soft);
    border-color: var(--border);
}
.memo-cancel-btn:hover {
    background-color: #EEF0F7;
}

/* --------------------------------------------------------------------------
   7. 手机端（默认单列）
   -------------------------------------------------------------------------- */
@media (max-width: 768px) {
    body {
        padding: 10px 8px 0;
    }

    .logo {
        height: 40px;
        border-radius: var(--r-md);
        margin-bottom: 10px;
    }

    .datetable {
        border-spacing: 4px;
        border-radius: var(--r-lg);
    }

    /* 单元格紧凑，6 行日历一屏可见 */
    .datetable tbody td {
        height: 54px;
        padding: 1px;
        font-size: 11px;
    }

    .cell-date {
        font-size: 15px;
    }
    .cell-lunar {
        font-size: 11px;
    }
    .cell-shift {
        margin-top: 2px;
    }
    .cell-shift .shift-night,
    .cell-shift .shift-day,
    .cell-shift .shift-mid,
    .cell-shift .shift-rest {
        padding: 2px 6px;
        font-size: 11px;
    }

    .day-tag {
        top: 2px;
        right: 2px;
        padding: 1px 4px;
        font-size: 10px;
        border-radius: 6px;
    }

    /* 窄屏单元格只有 ~48px 宽，日期居中后会顶到右上角的"节/休/工"角标上。
       仅在有角标的格子里把日期左推 10px（:has 不支持时自动降级为原样，不会坏） */
    .datetable tbody td:has(.day-tag) .cell-date {
        padding-right: 12px;
    }

    /* 月份导航：五个控件压到一行 */
    .month-header {
        padding: 8px;
    }
    .month-nav {
        gap: 4px;
        flex-wrap: nowrap;
    }
    .calendar-btn {
        height: 30px;
        padding: 0 9px;
        font-size: 12px;
    }
    .calendar-dropdown {
        min-width: 62px;
        height: 30px;
        padding: 0 4px;
        font-size: 12px;
    }
    .sdatetext {
        width: 44px;
        height: 30px;
        font-size: 12px;
    }

    .menu tbody {
        padding: 10px;
        border-radius: var(--r-lg);
    }
    .menu tbody td {
        height: 40px;
        line-height: 40px;
        font-size: 14px;
    }

    .footer-section {
        gap: 8px;
        padding: 12px 0 22px;
    }
    .footer__nav {
        padding: 10px;
        border-radius: var(--r-lg);
    }
    .footer__nav a,
    .footer__nav .nav-chip {
        font-size: 12px;
        padding: 6px 9px;
    }
    .footer.footer-info {
        padding: 10px;
        border-radius: var(--r-lg);
    }
}

/* 超小屏（≤360px）：再收一档，保证不出现横向滚动 */
@media (max-width: 360px) {
    .datetable tbody td {
        height: 50px;
    }
    .cell-date {
        font-size: 14px;
    }
    .cell-lunar {
        font-size: 11px;
        letter-spacing: -0.2px;
    }
    .cell-shift .shift-night,
    .cell-shift .shift-day,
    .cell-shift .shift-mid,
    .cell-shift .shift-rest {
        padding: 1px 5px;
        font-size: 11px;
    }
    .calendar-dropdown {
        min-width: 56px;
    }
    .sdatetext {
        width: 40px;
    }
    /* 320~360px 一格只有 42px 宽，角标偏移量再加一档 */
    .datetable tbody td:has(.day-tag) .cell-date {
        padding-right: 16px;
    }
    .day-tag {
        padding: 1px 3px;
    }
}

/* --------------------------------------------------------------------------
   8. PC 端双栏：左侧日历主区 + 右栏（班组 / 快捷入口 / 版权）
   —— 仅用 grid 重排既有 DOM，不改结构
   -------------------------------------------------------------------------- */
@media (min-width: 1024px) {
    .content {
        display: grid;
        grid-template-columns: minmax(0, 1fr) 300px;
        grid-template-areas:
            "cal menu"
            "cal foot";
        /* 日历跨两行，若两行都参与"分摊多余高度"，右栏两张卡之间会被撑出大片空白。
           把第 1 行钉成 min-content、剩余高度全给第 2 行，卡片就会紧贴排布 */
        grid-template-rows: min-content 1fr;
        gap: 14px;
        align-items: start;
    }

    .datetable {
        grid-area: cal;
        border-spacing: 6px;
    }

    .datetable tbody td {
        height: 74px;
    }

    .cell-date {
        font-size: 18px;
    }
    .cell-lunar {
        font-size: 12px;
    }
    .cell-shift .shift-night,
    .cell-shift .shift-day,
    .cell-shift .shift-mid,
    .cell-shift .shift-rest {
        font-size: 12px;
        padding: 3px 9px;
    }
    .day-tag {
        font-size: 11px;
        top: 5px;
        right: 5px;
    }

    .menu {
        grid-area: menu;
        margin: 0;
    }

    .footer-section {
        grid-area: foot;
        padding: 0;
    }

    /* my7.html 没有 .footer-section 包裹，.footer-info 直接是 .content 子元素 */
    .content > .footer-info {
        grid-area: foot;
    }

    .month-header {
        padding: 12px 14px;
    }
    .calendar-btn {
        height: 34px;
        padding: 0 14px;
    }
    .calendar-dropdown {
        min-width: 84px;
        height: 34px;
    }
    .sdatetext {
        width: 58px;
        height: 34px;
    }

    .logo {
        height: 62px;
    }
}

/* 大屏：右栏略加宽，日历更舒展 */
@media (min-width: 1440px) {
    .container-main {
        max-width: 1240px;
    }
    .content {
        grid-template-columns: minmax(0, 1fr) 320px;
    }
}

/* ==========================================================================
   9. BENTO 视觉层（2026-09-18）
   --------------------------------------------------------------------------
   纯视觉覆盖，**不改任何 DOM 结构与 JS 逻辑**。
   只追加在本文件末尾，靠层叠覆盖上面的规则；
   顺序必须保持：基础 → min-width:1024 → max-width:768 → max-width:520 → max-width:360
   （否则基础规则会盖掉上面已有的媒体查询，因为同优先级下后者胜）
   ========================================================================== */

/* 9.1 设计令牌 */
:root {
    --bg: #FAFAFA;
    --surface: #fff;
    --surface-soft: #F7F7F9;
    --text: #18181B;
    --text-soft: #52525B;
    --text-mute: #A1A1AA;
    --border: #EFEFF1;
    --border-soft: #F4F4F5;
    --brand-line: #E6E0F7;

    /* 字体栈：取值与 body 的 font 简写（第 82 行）逐字一致。
       ⚠️ .cell-date / .cell-lunar 引用了 var(--font-sans)，但本变量此前**从未定义**，
       于是那几条 font-family 属于「无效值 → 回落成继承 body」，看着正常、实则空转。
       补上定义后渲染结果不变（因为值和 body 相同），但变量真正可用了：
       以后要换字体，只改这里 + body 简写两处即可。 */
    --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei",
                 "PingFang SC", "Hiragino Sans GB", Roboto, "Helvetica Neue", Arial, sans-serif;

    --r-xl: 24px;
    --r-lg: 19px;
    --r-md: 12px;
    --r-sm: 10px;
    --shadow-sm: 0 1px 2px rgba(0, 0, 0, .04), 0 8px 24px rgba(0, 0, 0, .06);
    --shadow-brand: 0 2px 8px rgba(149, 126, 219, .35);
}

body {
    background: #FAFAFA;
    padding: 20px 18px calc(36px + env(safe-area-inset-bottom));
}

.container-main {
    max-width: 1180px;
}

/* 9.2 顶栏：logo + 返回首页（.topbar 由页面新增，.logo 原样复用 base64 图） */
.topbar {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 11px 14px;
    margin-bottom: 16px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--r-xl);
    box-shadow: var(--shadow-sm);
}

.logo {
    flex: 1 1 auto;
    min-width: 0;
    height: 46px;
    margin: 0;
    border: 0;
    border-radius: 0;
    background-color: transparent;
    background-position: left center;
    box-shadow: none;
}

.back-pill {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 8px 15px;
    font-size: 12.5px;
    font-weight: 600;
    color: #fff;
    background: #18181B;
    border-radius: 999px;
    text-decoration: none;
    transition: background .2s ease, transform .2s ease;
}
.back-pill:hover {
    color: #fff;
    background: #3F3F46;
    transform: translateY(-1px);
}

/* 9.3 日历卡 */
.datetable {
    border-spacing: 9px;
    border: 1px solid var(--border);
    border-radius: var(--r-xl);
    box-shadow: var(--shadow-sm);
}

.month-header {
    padding: 10px 12px;
    background: #F6F6F8;
    border-radius: var(--r-lg);
}

.calendar-btn,
.calendar-dropdown {
    border-radius: var(--r-md);
}

.calendar-dropdown {
    -webkit-appearance: none;
    appearance: none;
    padding-right: 26px;
    text-align: left;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='none' stroke='%23957EDB' stroke-width='2' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 9px center;
    background-color: var(--surface);
}

.sdatetext {
    border-radius: 999px;
    background: rgba(149, 126, 219, .12);
}

.datetable thead .weekday-header td {
    height: 28px;
    font-size: 12px;
    font-weight: 600;
    color: var(--text-soft);
    background: #F6F6F8;
    border-radius: 9px;
}
.datetable thead .weekday-header .wk-pill {
    min-width: 0;
    padding: 0;
    font-size: inherit;
    font-weight: inherit;
    color: inherit;
    background: transparent;
    border-radius: 0;
}

/* 日期格：白底 + 发丝描边 + 大圆角。
   ⚠️ 绝对不能给 <td> 写 display:flex —— 那会让单元格脱离表格布局，7 列对齐会塌。
   纵向排布改用「日期/农历自然流 + 班次药丸绝对定位到底部」实现 */
.datetable tbody td {
    /* ⚠️ box-sizing 必须是 border-box。td 默认是 content-box，height 只约束「内容盒」，
       真实行高 = height + padding(9+30) + border(1+1)。原来写 height:96px 时
       实际每行 137px —— 这才是「倒班日期的高度太大」的真正原因。
       改成 border-box 后，height 就是整格高度。 */
    box-sizing: border-box;
    height: 86px;
    padding: 9px 10px 30px;
    position: relative;
    display: table-cell;
    /* ⚠️ 必须是 center：基础规则（3.3 节）就是 center，表头「一二三…」也是 center。
       这里一旦写 left，日期/农历/药丸会整体贴左边，看起来「没居中 + 宽度不协调」 */
    text-align: center;
    vertical-align: top;
    background: var(--surface);
    border: 1px solid var(--border) !important;   /* !important 用于压掉 JS 写入的 inline borderLeft */
    border-radius: 14px;
}

.datetable tbody td:empty {
    height: 0;
    padding: 0;
    border: 0 !important;
    background: transparent;
}

.cell-date {
    display: block;
    font-family: var(--font-sans);
    font-size: 22px;
    font-weight: 700;
    line-height: 1.15;
    letter-spacing: -.5px;
    text-align: center;
    color: var(--text);
    font-variant-numeric: tabular-nums;
}

.cell-lunar {
    display: block;
    font-size: 12px;
    line-height: 1.3;
    text-align: center;
    color: var(--text-mute);
}

/* ⚠️ daoban.js 在每个日期格内层套了一层 <div style="position:relative">（第 445 行）。
   这层 div 的高度只有「日期+农历」那么高，于是绝对定位的 .cell-shift 会以它
   为基准 → 班次药丸贴着农历跑，永远到不了格子底部。
   把它改回 static，药丸的基准就落回 <td>（已 position:relative）。 */
.datetable tbody td > div {
    position: static !important;
}

/* 日期与农历之间那枚 <br>：两者都已是 block，br 只会多撑出一行空白 */
.datetable tbody td > div > br,
.cell-shift br {
    display: none;
}

.cell-shift {
    position: absolute;
    left: 10px;
    bottom: 9px;
    right: 10px;
    margin: 0;
    /* 与日期/农历同为 center：药丸与上面的日期同轴，格子才不会「左重右虚」 */
    text-align: center;
    white-space: nowrap;
}
.cell-shift .shift-night,
.cell-shift .shift-day,
.cell-shift .shift-mid,
.cell-shift .shift-rest {
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 12.5px;
    font-weight: 600;
    line-height: 1.35;
}

/* ⚠️ 日期改成居中后，「20」这类两位数会横移到格子中间，和右上角「节/休/工」
   标签同处一行（格子高度不够，纵向上无处可让）。所以把标签往角上收 3px：
   right 8→6、左右 padding 2px 6px→2px 5px。实测最窄净间距由 -0.4px 变为 +2.6px。 */
.day-tag {
    top: 8px;
    right: 6px;
    padding: 2px 5px;
    font-size: 10px;
    border-radius: 7px;
}
.day-tag.holiday,
.day-tag.rest,
.day-tag.work {
    font-size: 10px;
}

.memo-content {
    text-align: left;
}

/* 9.4 当前班组卡（分段控件外观） */
.menu tbody {
    padding: 16px;
    border-radius: var(--r-xl);
    border: 1px solid var(--border);
    box-shadow: var(--shadow-sm);
}

.menu tbody::before {
    content: "当前班组";
    margin-bottom: 10px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 1.2px;
    color: var(--text-mute);
}

.menu tbody tr {
    gap: 3px;
    padding: 4px;
    background: #F4F4F6;
    border-radius: 999px;
}

.menu tbody td {
    height: 38px;
    line-height: 38px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--text-soft);
    background: transparent;
    border-radius: 999px;
}
.menu tbody td:hover {
    background: rgba(255, 255, 255, .75);
    color: var(--brand-dark);
}
.menu tbody td.active {
    background: linear-gradient(140deg, var(--brand) 0%, var(--brand-dark) 100%);
    color: #fff;
    font-weight: 700;
}

/* 9.4b 当前班组卡补充块（由 daoban-extra.js 注入：今日班次 + 本月统计） */
.team-extra {
    flex: 1 1 100%;
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin-top: 14px;
}
.team-extra .now {
    display: flex;
    align-items: baseline;
    gap: 8px;
}
.team-extra .now b {
    font-size: 26px;
    font-weight: 700;
    letter-spacing: -1px;
    color: var(--brand-dark);
}
.team-extra .now span {
    font-size: 11.5px;
    color: var(--text-soft);
}
.team-extra .sum {
    font-size: 11.5px;
    line-height: 1.6;
    color: var(--text-soft);
}

/* 9.5 快捷入口卡 */
.footer-section {
    gap: 12px;
    padding: 0;
}

.footer__nav {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 16px;
    border-radius: var(--r-xl);
    border: 1px solid var(--border);
    box-shadow: var(--shadow-sm);
    font-size: 0;
}

.footer__nav::before {
    content: "快捷入口";
    margin: 0 0 2px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 1.2px;
    color: var(--text-mute);
}

.footer__nav a,
.footer__nav .nav-chip {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12.5px;
    font-weight: 500;
    color: #71717A;
    padding: 9px 14px;
    border: 1px solid #F2F2F4;
    border-radius: 999px;
    background: #FAFAFB;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    text-align: center;
    transition: background .2s ease, border-color .2s ease, color .2s ease, transform .15s ease;
}
.footer__nav a:hover,
.footer__nav .nav-chip:hover {
    background: var(--brand-soft);
    border-color: var(--brand-line);
    color: var(--brand-dark);
    transform: translateY(-1px);
}
.footer__nav a.nav-primary {
    color: var(--brand-dark);
    background: var(--brand-soft);
    border: 1px solid var(--brand-line);
    font-weight: 600;
    box-shadow: none;
}
.footer__nav a.nav-primary:hover {
    background: #ECE5FA;
    color: var(--brand-dark);
    transform: translateY(-1px);
}

/* 9.6 页脚卡（深色）：小标签 + 发丝分隔线 + 键值行 */
.footer.footer-info {
    display: flex;
    flex-direction: column;
    gap: 0;
    padding: 16px 18px;
    text-align: center;
    color: #fff;
    background: #18181B;
    border: 0;
    border-radius: var(--r-xl);
    box-shadow: none;
}

.footer-info .fsec {
    padding-top: 12px;
    border-top: 1px solid rgba(255, 255, 255, .09);
}
.footer-info .fsec:first-child {
    padding-top: 0;
    border-top: 0;
}

/* 页脚两行：字体/字号/字重/行高/数字宽度全部统一（用户要求「字体统一」）
   第一行  粤ICP备…  |  v3.0  |  稳定运行 X年X天X时X分
   第二行  人力资源部 · 黎佐洋 · AI  |  Copyright © 2019-2030 */
.footer-info .frow {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: 0 9px;
    font-size: 12.5px;
    font-weight: 500;
    line-height: 1.8;
    letter-spacing: .2px;
    color: rgba(255, 255, 255, .58);
    font-variant-numeric: tabular-nums;
}
.footer-info .frow + .frow {
    margin-top: 2px;
}
/* 基础规则（第 5 节）给 .footer-info span 写死了 12px + 浅色主题的灰字，
   在深色卡上会发灰发暗 —— 这里交还给继承，由下面的类各自定色 */
.footer-info .frow span {
    font-size: inherit;
    color: inherit;
}

/* 配色统一取品牌色系：ICP 号/运行时长用亮紫，分隔符最淡，版权最弱 */
.footer-info .fsep {
    color: rgba(255, 255, 255, .2);
}
.footer-info .icp {
    font-size: inherit;
    color: var(--brand-light);
    text-decoration: none;
    transition: color .18s ease;
}
.footer-info .icp:hover {
    color: #fff;
}
.footer-info .fver {
    font-weight: 600;
    color: rgba(255, 255, 255, .86);
}
.footer-info .frun b {
    font-weight: 600;
    color: var(--brand-light);
}
.footer-info .fcop {
    color: rgba(255, 255, 255, .38);
}

/* ==========================================================================
   9.7 断点（顺序不能乱）
   ========================================================================== */
@media (min-width: 1024px) {
    .content {
        gap: 16px;
        grid-template-rows: min-content 1fr;
    }
    .datetable {
        border-spacing: 9px;
    }
    .datetable tbody td {
        height: 86px;
    }
}

@media (max-width: 1023px) {
    .content {
        display: flex;
        flex-direction: column;
        gap: 12px;
    }
    .menu,
    .footer-section {
        margin: 0;
        padding: 0;
    }
}

@media (max-width: 768px) {
    body {
        padding: 12px 12px calc(28px + env(safe-area-inset-bottom));
    }
    .topbar {
        padding: 9px 12px;
        margin-bottom: 12px;
        border-radius: var(--r-lg);
    }
    .logo {
        height: 36px;
    }
    .back-pill {
        padding: 7px 13px;
        font-size: 12px;
    }
    .datetable {
        border-spacing: 4px;
        border-radius: var(--r-lg);
    }
    .datetable tbody td {
        height: 72px;
        padding: 7px 8px 26px;
        border-radius: 11px;
    }
    .cell-shift {
        left: 8px;
        right: 8px;
        bottom: 7px;
    }
    .cell-date {
        font-size: 18px;
        letter-spacing: -.3px;
    }
    .cell-lunar {
        font-size: 10.5px;
    }
    .cell-shift .shift-night,
    .cell-shift .shift-day,
    .cell-shift .shift-mid,
    .cell-shift .shift-rest {
        padding: 2.5px 7px;
        font-size: 11px;
    }
    .day-tag {
        top: 6px;
        right: 4px;
        padding: 1px 3px;
        font-size: 9.5px;
    }
    .day-tag.holiday,
    .day-tag.rest,
    .day-tag.work {
        font-size: 9.5px;
    }
    .menu tbody,
    .footer__nav {
        padding: 13px;
        border-radius: var(--r-lg);
    }
    .footer.footer-info {
        padding: 15px;
        border-radius: var(--r-lg);
    }
    .team-extra {
        margin-top: 12px;
    }
    .team-extra .now b {
        font-size: 24px;
    }
}

@media (max-width: 520px) {
    body {
        padding: 10px 10px calc(26px + env(safe-area-inset-bottom));
    }
    .topbar {
        padding: 8px 10px;
        gap: 10px;
        margin-bottom: 10px;
    }
    .logo {
        height: 32px;
    }
    .content {
        gap: 10px;
    }
    .datetable {
        border-spacing: 3px;
    }
    .datetable tbody td {
        height: 66px;
        padding: 6px 6px 23px;
        border-radius: 10px;
    }
    .cell-shift {
        left: 6px;
        right: 6px;
        bottom: 6px;
    }
    .cell-date {
        font-size: 17px;
    }
    .cell-lunar {
        font-size: 10px;
    }
    .cell-shift .shift-night,
    .cell-shift .shift-day,
    .cell-shift .shift-mid,
    .cell-shift .shift-rest {
        padding: 2px 6px;
        font-size: 10.5px;
    }
    .day-tag {
        top: 5px;
        right: 4px;
        padding: 1px 2px;
        font-size: 9px;
    }
    .day-tag.holiday,
    .day-tag.rest,
    .day-tag.work {
        font-size: 9px;
    }
    .menu tbody,
    .footer__nav {
        padding: 12px;
    }
    .footer.footer-info {
        padding: 14px;
    }
}

@media (max-width: 360px) {
    .datetable tbody td {
        height: 62px;
        padding: 5px 5px 21px;
    }
    .cell-shift {
        left: 5px;
        right: 5px;
        bottom: 5px;
    }
    .cell-date {
        font-size: 16px;
    }
    .cell-lunar {
        font-size: 9.5px;
        letter-spacing: -.2px;
    }
    .cell-shift .shift-night,
    .cell-shift .shift-day,
    .cell-shift .shift-mid,
    .cell-shift .shift-rest {
        padding: 1px 5px;
        font-size: 10px;
    }
    .calendar-dropdown {
        min-width: 56px;
    }
    .sdatetext {
        width: 40px;
    }
}

/* ==========================================================================
   9.8 补充（与 9.1~9.7 同一批，放在最后以便压住上面的媒体查询）
   ========================================================================== */

/* 顶栏「返回首页」胶囊里的箭头 */
.back-pill svg {
    width: 14px;
    height: 14px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2.1;
    stroke-linecap: round;
    stroke-linejoin: round;
}


/* ==========================================================================
   9.10 页脚通栏 + 窄屏拆行
   --------------------------------------------------------------------------
   问题：PC 双栏时版权被塞在右栏（第 8 节的 grid-area:foot 只占第 2 列），
        而这一行的自然宽是 351px，右栏只有 284px 可用
        （icp 129 + "|" 4 + v3.0 24 + "|" 4 + 稳定运行 155 + 4×9px 间距 36）
        → 折成 4 行，且「|」孤零零挂在行尾。
   修法：**只改 grid 摆放，不动 DOM** ——
        把 .footer-section 设成 display:contents，让它不再生成盒子，
        它的两个孩子直接落进 .content 的网格：
            row1  cal  | menu      （当前班组）
            row2  cal  | nav       （快捷入口，位置与改动前完全一致）
            row3  foot | foot      （版权，通栏独占一行）
        ⚠️ 不能简单地把 .footer-section 改成 grid-column:1/-1 放在第 2 行 ——
           日历跨越第 1~2 行，两者会落在同一网格单元里**互相重叠**
           （实测：页脚深色卡把日历最后一行的 28/29/30 压掉了）。
   ========================================================================== */
@media (min-width: 1024px) {
    .content {
        grid-template-areas:
            "cal menu"
            "cal nav"
            "foot foot";
        grid-template-rows: min-content 1fr auto;
    }
    /* 不生成盒子 → 其子元素成为 .content 的网格项 */
    .footer-section {
        display: contents;
    }
    .footer-section > .footer__nav {
        grid-area: nav;
    }
    /* 版权：通栏独占第 3 行 */
    .footer-section > .footer-info,
    .content > .footer-info {
        grid-area: foot;
    }
}

/* 实测自然宽度（headless Chromium，12.5px/500）：
       第 1 行 粤ICP备… | v3.0 | 稳定运行 …  ≈ 351px
       第 2 行 人力资源部 · 黎佐洋 · AI | Copyright © …  ≈ 296px
       inner = 视口 - 48px（body 10×2 + 卡片 14×2）
   → 视口 < 399px 第 1 行放不下；< 353px 第 2 行也放不下。留余量取 440 / 370。 */
@media (max-width: 440px) {
    /* 拆行处的那根竖线不要了，免得「|」独占一行或悬在行尾 */
    .footer-info .fver + .fsep {
        display: none;
    }
    /* 撑满一行 → 强制换行 */
    .footer-info .frun {
        flex-basis: 100%;
        text-align: center;
    }
}

@media (max-width: 370px) {
    /* 再窄连版权行也放不下 → 同样主动拆行（否则必然出现悬空的「|」） */
    .footer-info .frow + .frow .fsep {
        display: none;
    }
    .footer-info .frow + .frow .fcop {
        flex-basis: 100%;
        text-align: center;
    }
}

/* 字体：日期数字此前单独写了一套 Arial 栈，与正文不一致 → 统一继承 */
.cell-date,
.cell-lunar {
    font-family: var(--font-sans);
}

/* ==========================================================================
   9.11 备注卡（R9）
   --------------------------------------------------------------------------
   原来「备忘」是点日期格弹一个居中模态框（daoban.js 的 .memo-dialog）。
   R9 要求：把备注信息与修改放到「快捷入口」**上方**，样式跟「当前班组」那块协调。
   做法：不改 daoban.js —— daoban-extra.js 在 .footer__nav 前面插一张 .memo-card，
        并在 .datetable 上用捕获阶段拦截单元格点击（挡住原来弹窗的冒泡委托），
        把该日期的备注直接灌进卡片里的 textarea。

   视觉口径（刻意与既有两块对齐，不自创新样式）：
   · 卡片外壳 = .menu tbody / .footer__nav 同款（白底 + 描边 + --r-xl + --shadow-sm）
   · 「备注」小标题 = .menu tbody::before「当前班组」/ .footer__nav::before「快捷入口」同字号同色
   · 日期行 = .team-extra .now 同一套（26px 品牌深紫 + 11.5px 灰）

   ⚠️ 只追加在本文件末尾、靠层叠覆盖；不动任何既有选择器。
   ========================================================================== */
.memo-card {
    display: flex;
    flex-direction: column;
    align-items: center;          /* R11：框内整体居中（与下方快捷入口同口径） */
    gap: 10px;
    padding: 12px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--r-xl);
    box-shadow: var(--shadow-sm);
    text-align: center;
}

/* 小标题：与 .menu tbody::before「当前班组」/ .footer__nav::before「快捷入口」逐字同款
   （注意：§9.4/§9.5 把这两处从基础段的 12px/500 改成了 10.5px/700/1.2px，这里跟的是改后的值） */
.memo-card__title {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 1.2px;
    color: var(--text-mute);
    margin-bottom: -2px;
}

/* 日期：与 .team-extra .now 同一套口径，但刻意压低字号/色阶（R11：不抢当前班组风头） */
.memo-card__now {
    display: flex;
    align-items: baseline;
    justify-content: center;
    gap: 8px;
}

.memo-card__now b {
    font-size: 21px;
    font-weight: 700;
    letter-spacing: -1px;
    line-height: 1.1;
    color: var(--brand-dark);
}

.memo-card__now span {
    font-size: 11.5px;
    color: var(--text-mute);
}

.memo-card__input {
    width: 100%;
    min-height: 62px;
    padding: 10px 12px;
    font-family: inherit;
    font-size: 13px;
    line-height: 1.6;
    text-align: center;
    color: var(--text);
    background: var(--surface-soft);
    border: 1px solid var(--border);
    border-radius: var(--r-md);
    outline: none;
    resize: vertical;
    box-sizing: border-box;
    transition: background .2s ease, border-color .2s ease;
}

.memo-card__input:focus {
    background: #fff;
    border-color: var(--brand-line);
}

.memo-card__input:disabled {
    color: var(--text-mute);
    cursor: not-allowed;
}

.memo-card__input::placeholder {
    color: var(--text-mute);
}

.memo-card__acts {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
}

.memo-card__acts button {
    padding: 8px 18px;
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text-soft);
    background: #F6F6F8;
    border: 1px solid var(--border);
    border-radius: 999px;
    cursor: pointer;
    transition: background .2s ease, border-color .2s ease, color .2s ease, transform .15s ease;
}

/* R11：保存按钮去掉紫渐变+投影，改浅色扁平，避免抢了当前班组（班制切换）的风头 */
.memo-card__acts .memo-card__save {
    color: var(--brand-dark);
    background: var(--brand-soft);
    border: 1px solid var(--brand-line);
    box-shadow: none;
}

.memo-card__acts .memo-card__save:hover {
    background: #ECE5FA;
    transform: translateY(-1px);
}

.memo-card__acts .memo-card__del:hover {
    color: #DC2626;
    background: #FEF2F2;
    border-color: #FCA5A5;
}

.memo-card__acts button:disabled {
    opacity: .45;
    cursor: not-allowed;
    box-shadow: none;
    transform: none;
}

/* 保存/删除后的轻提示（右侧淡入淡出，不占额外行高） */
.memo-card__tip {
    margin-left: auto;
    font-size: 11.5px;
    font-weight: 500;
    color: var(--brand-dark);
    line-height: 1;
    opacity: 0;
    transition: opacity .2s ease;
}

.memo-card__tip.on {
    opacity: 1;
}

/* ---- ≥1024px：右栏多插一行 memo -------------------------------
   .footer-section 在这一档是 display:contents（见 9.10），它的子元素直接落进 .content 的网格。
   原来右栏是 menu / nav / foot 三行，备注卡插在 menu 与 nav 之间 →
   网格必须多给一行，否则它会和 nav 抢同一个格子（重叠）。
   顺序保持：当前班组 → 备注 → 快捷入口 → 页脚。 */
@media (min-width: 1024px) {
    .content {
        grid-template-areas:
            "cal menu"
            "cal memo"
            "cal nav"
            "foot foot";
        grid-template-rows: min-content min-content 1fr auto;
    }

    .footer-section > .memo-card {
        grid-area: memo;
    }
}

/* 窄屏：内边距/圆角跟着 .menu tbody、.footer__nav 一起收（见 max-width:768 段） */
@media (max-width: 768px) {
    .memo-card {
        padding: 13px;
        border-radius: var(--r-lg);
    }
}

/* ==========================================================================
   9.12 R10（2026-09-18）：日历格备注 + 快捷入口两列 + 页脚字色
   --------------------------------------------------------------------------
   ① 日历格备注：修 R8 遗留的定位 bug
      §9.3 那条 `.datetable tbody td > div { position: static !important }`
      本意只治 daoban.js 给内层 wrapper 写的 inline `position:relative`，
      但 .memo-tag / .memo-content 同样是 `td > div`，被这条 !important 一起
      打成 static → 两大掉进文字流，后果：
        · 每有一条备注，该行就从 86px 被撑到约 100px（截图里第 1/2/4 行就比
          第 3/5 行高，网格是歪的）；
        · 6px 紫点飘到农历下面、还压住班次药丸。
      修法：两条 !important 之间**不看权重、只看先后** → 本文件末尾这条必胜；
           选择器再多带一个类做双保险。形态再按断点各自给。

   ② 快捷入口：≥1024px 改两列（甲乙 / 丙丁 / 年历通栏）
      实测单列 5 行 = 282px，比右栏可用高度多出约 90px，把右栏顶到日历之外。
      两列后卡片约 185px，而 .content 第 3 行本来就是 1fr → 右栏会自动被拉到
      与日历底部齐平，日历宽度一行都不用改。

   ③ 页脚：统一白阶，品牌紫只留 ICP 一处
      （原先「紫 ICP + 紫数字 + 4 档不同白」混在一起显花，且 .38 那档对比度只有 3.6:1）
   ========================================================================== */

/* ---- 9.12.1 备注元素回到绝对定位（盖过 §9.3 的 `td > div` !important） ---- */
.datetable tbody td > .memo-tag,
.datetable tbody td > .memo-content {
    position: absolute !important;
}

/* ---- 9.12.2 <1024px：格子只有 44~120px 宽、62~72px 高，塞不下文字
       改成一枚贴在格子左边缘的品牌紫竖条 —— 任何尺寸都不会和日期/农历/班次药丸打架
       （竖条落在格子内边距里，被 td 自己的 border-radius 裁圆） ---- */
@media (max-width: 1023px) {
    .datetable tbody td > .memo-tag {
        left: 0;
        right: auto;
        top: 7px;
        bottom: 7px;
        width: 3px;
        height: auto;
        border-radius: 0 3px 3px 0;
        background: var(--brand);
        z-index: 3;
    }
    .datetable tbody td > .memo-content {
        display: none;
    }
}

/* ---- 9.12.3 ≥1024px：格内一行品牌紫药丸 ----------------------------------
   格子**统一**从 86px 加到 99px。必须所有格子一起留白：HTML 表格的行高由该行
   最高的格子决定，只给有备注的格子留空间，那一行立刻比邻居高（就是上面那个 bug）。
   留出的这一条卡在「农历」与「班次药丸」之间，竖向账目（vw=1180 实测）：
       7px 上留白 │ 日期 25.3 │ 农历 15.6 │ 3.0 │ 备注药丸 14.1 │ 3.1 │ 班次药丸 22.9 │ 7px = 99px
   ⚠️ 班次药丸的 bottom 必须从 9px 收到 7px —— 否则「农历→药丸」只有 16.2px，
      塞不下 14.1px 的备注药丸 + 两条间距。 */
@media (min-width: 1024px) {
    .datetable tbody td {
        height: 99px;
        padding: 7px 10px 30px;
    }

    .cell-shift {
        bottom: 7px;
    }

    /* 药丸形态不再需要那枚游离的紫点 */
    .datetable tbody td > .memo-tag {
        display: none;
    }

    .datetable tbody td > .memo-content {
        left: 10px;
        right: 10px;
        top: auto;
        bottom: 33px;
        display: block;
        padding: 1px 6px;
        font-size: 10.5px;
        font-weight: 600;
        line-height: 1.15;
        letter-spacing: .2px;
        color: var(--brand-dark);
        background: var(--brand-soft);
        border-radius: 6px;
        text-align: center;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        box-sizing: border-box;
    }
}

/* ---- 9.12.4 快捷入口：≥1024px 两列（甲乙 / 丙丁 / 年历通栏） ---- */
@media (min-width: 1024px) {
    .footer__nav {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        /* 小标题单独占第 1 行（min-content），下面 3 行入口均分剩余高度 */
        grid-template-rows: min-content;
        grid-auto-rows: 1fr;
        gap: 8px;
        /* ⚠️ §9.10 给这档的 .content 写了 `align-items: start` —— 网格项默认不再拉伸，
           于是第 3 行（1fr，实测 223px）比卡片本身（190px）高，右栏底部就比日历短一截。
           这里把它拉回来，卡片才会填满，底部才和日历齐平。 */
        align-self: stretch;
    }

    /* 小标题通栏。基础段给它写的是 `flex: 0 0 100%`，在网格里被忽略 → 要改网格写法 */
    .footer__nav::before {
        grid-column: 1 / -1;
    }

    /* 第 5 项「倒班表(年历)」通栏吃满一整行 */
    .footer__nav > a,
    .footer__nav > .nav-chip {
        min-width: 0;
        padding: 9px 8px;
        text-align: center;
    }

    .footer__nav > a:last-child,
    .footer__nav > .nav-chip:last-child {
        grid-column: 1 / -1;
    }
}

/* ---- 9.12.5 页脚：统一白阶，品牌紫只留 ICP 一处 --------------------------
   ⚠️ 必须写成 `.frow .fsep` 三节：§9.6 有一条
      `.footer-info .frow span { font-size: inherit; color: inherit }`（0,2,1），
      它比 `.footer-info .fsep`（0,2,0）**权重更高** —— 原先那两条 .fsep/.ver/.fcop
      其实一直没生效，全都继承成行色了。 */
.footer-info .frow {
    color: rgba(255, 255, 255, .72);
}
.footer-info .frow .fsep {
    color: rgba(255, 255, 255, .28);
}
.footer-info .frow .fver {
    color: #fff;
}
.footer-info .frow .fcop {
    color: rgba(255, 255, 255, .52);
}
.footer-info .icp {
    color: var(--brand-light);
}
.footer-info .icp:hover {
    color: #fff;
}
/* 运行时长数字不再带紫 —— 页脚的紫色只留 ICP 这一个落点 */
.footer-info .frun b {
    color: #fff;
}

/* ==========================================================================
   9.13 R11（2026-09-18）：当前班制放大 + 快捷入口缩小（仅 PC ≥1024）
   --------------------------------------------------------------------------
   · 当前班组（.menu tbody）= 用户说的「当前班制的选择框」，是右栏的视觉主角。
     R11 要求 PC 端把它「大一点」，并明确「备注卡不要抢它的风头」——
     所以这里放大 .menu tbody，而 §9.11 的备注卡同时被压低字号/色阶/改浅色按钮。
   · 快捷入口（.footer__nav）= 用户要求「缩小尺寸」—— 收 padding / gap / 字号。
   ⚠️ 这两条都只作用于 ≥1024；窄屏沿用基础段口径，不在此改。
   ⚠️ 与 §9.4 / §9.10 / §9.12 同权（0,1,1），但写在文件最末尾 → 源顺序在后胜出。
   ========================================================================== */
@media (min-width: 1024px) {
    /* 9.13.1 当前班制（选择框）放大 */
    .menu tbody {
        padding: 20px;
    }
    .menu tbody td {
        height: 46px;
        line-height: 46px;
        font-size: 15px;
    }
    .team-extra .now b {
        font-size: 30px;
    }

    /* 9.13.2 快捷入口缩小（在 §9.12.4 两列基础上再收一圈） */
    .footer__nav {
        gap: 6px;
    }
    .footer__nav > a,
    .footer__nav > .nav-chip {
        padding: 7px 6px;
        font-size: 12px;
    }
    .footer__nav::before {
        font-size: 10px;
        margin-bottom: 2px;
    }
}
