/* 本原型新增的样式（base.css 是定稿原型的逐段复制）。
   一、评审控制带与状态说明（产品框外，照定稿原型评审带用深底黄字，一眼看出不是产品界面）；
   二、四档网格；三、会议卡的头条、列表、时间轴、横排；四、详情层补充；五、窄屏（390）。 */

:root { --rb-h: 0px; --hdr-h: 64px; --rv-bg: #1E2126; --rv-ink: #E4E6EA; --rv-ink-2: #B9BDC4; --rv-ink-3: #9CA1AA; --rv-hl: #FFD27A; }

/* ============ 一、评审控制带 ============ */
.rv-bar { position: sticky; top: 0; z-index: 30; background: var(--rv-bg); color: var(--rv-ink); box-shadow: 0 6px 18px -10px rgba(0, 0, 0, .45); }
.rv-in { display: flex; align-items: center; gap: 14px; max-width: 1440px; margin: 0 auto; padding: 10px 32px; }
.rv-b { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 36px; padding: 0 12px; border: 0; border-radius: 8px; background: rgba(255, 255, 255, .08); color: var(--rv-ink); font: 600 13px/1 var(--font-sans); white-space: nowrap; cursor: pointer; }
.rv-b:hover { background: rgba(255, 255, 255, .14); }
.rv-b.on { background: var(--rv-hl); color: #1E2126; }
.rv-b .ico { width: 15px; height: 15px; }
.rv-b:focus-visible, .rv-sel:focus-visible, .rv-ck input:focus-visible, .rv-mk:focus-visible { outline: 2px solid var(--rv-hl); outline-offset: 2px; }
.rv-now { display: flex; flex-direction: column; flex: none; min-width: 112px; line-height: 1.2; }
.rv-now b { font: 700 26px/1.1 var(--font-num); font-variant-numeric: tabular-nums; color: #FFFFFF; }
.rv-now span { font-size: 12px; color: var(--rv-ink-3); white-space: nowrap; }
.rv-now span.bad { color: var(--rv-hl); }
.rv-slider { position: relative; flex: 1; min-width: 0; height: 40px; }
.rv-slider input { position: absolute; inset: 0; width: 100%; height: 40px; margin: 0; background: none; accent-color: var(--rv-hl); cursor: pointer; }
.rv-ticks { position: absolute; left: 8px; right: 8px; top: 0; bottom: 0; pointer-events: none; }
.rv-ticks i { position: absolute; top: 4px; width: 2px; height: 8px; margin-left: -1px; border-radius: 1px; background: var(--rv-hl); opacity: .85; }
.rv-ticks i.out { background: #E07A6A; top: auto; bottom: 4px; height: 6px; width: auto; margin: 0; border-radius: 2px; opacity: .7; }
.rv-ticks em { position: absolute; bottom: 0; font: 600 10px/1 var(--font-mono); font-style: normal; color: var(--rv-ink-3); transform: translateX(-50%); white-space: nowrap; }
.rv-sel { min-height: 36px; padding: 0 8px; border: 0; border-radius: 8px; background: rgba(255, 255, 255, .08); color: var(--rv-ink); font: 500 13px var(--font-sans); }
.rv-sel option { color: #1F1E1B; }
.rv-more { position: relative; z-index: 2; background: #262A30; color: var(--rv-ink); }
.rv-more-in { display: flex; flex-direction: column; gap: 8px; max-width: 1440px; margin: 0 auto; padding: 10px 32px 12px; }
.rv-marks { display: flex; flex-wrap: wrap; gap: 6px; }
.rv-mk { display: inline-flex; align-items: center; gap: 6px; min-height: 30px; padding: 0 10px; border: 0; border-radius: 6px; background: rgba(255, 255, 255, .07); color: var(--rv-ink-2); font: 500 12px/1 var(--font-sans); cursor: pointer; white-space: nowrap; }
.rv-mk b { font: 600 12px/1 var(--font-mono); color: var(--rv-hl); }
.rv-mk span { font-family: var(--font-num); font-variant-numeric: tabular-nums; }
.rv-mk:hover { background: rgba(255, 255, 255, .14); color: #FFFFFF; }
.rv-mk.on { background: rgba(255, 210, 122, .2); color: #FFFFFF; box-shadow: inset 0 0 0 1px var(--rv-hl); }
.rv-opts { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 16px; font-size: 13px; color: var(--rv-ink-2); }
.rv-ck { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; cursor: pointer; }
.rv-ck input { width: 16px; height: 16px; margin: 0; accent-color: var(--rv-hl); }
.rv-lab { display: inline-flex; align-items: center; gap: 8px; }
.rv-mo { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; font-size: 13px; color: var(--rv-ink-2); }
.rv-mo-l { color: var(--rv-hl); font-weight: 600; }
.rv-mo-g { display: inline-flex; align-items: center; gap: 2px; }
.rv-mo-g > span { margin-right: 6px; }
.rv-mo-b { min-width: 30px; min-height: 30px; padding: 0 8px; border: 0; border-radius: 6px; background: rgba(255, 255, 255, .07); color: var(--rv-ink-2); font: 600 12px/1 var(--font-mono); cursor: pointer; }
.rv-mo-b:hover { background: rgba(255, 255, 255, .14); color: #FFFFFF; }
.rv-mo-b.on { background: var(--rv-hl); color: #1E2126; }
.rv-mo-b:focus-visible { outline: 2px solid var(--rv-hl); outline-offset: 2px; }
.rv-mo .rv-b { min-height: 30px; text-decoration: none; }
.rv-hint { margin: 0; min-height: 18px; font-size: 13px; line-height: 1.5; color: var(--rv-hl); }
.rv-hint b { font-family: var(--font-mono); }

/* 评审注：深底黄字，标在卡片上沿，写给评审看的尺寸说明，不是产品文案 */
.sz-note { position: absolute; line-height: 1.2 !important; top: -10px; left: 16px; z-index: 3; display: inline-flex; align-items: center; height: 20px; padding: 0 8px; border-radius: 6px; background: var(--rv-bg); color: var(--rv-hl); font: 600 12px/1 var(--font-mono); white-space: nowrap; pointer-events: none; }

/* ============ 二、四档网格（照定稿原型桌面：最宽 1440、左右各留 32、间距 18） ============
   同一档宽高固定，不随内容变（白晨 10-21 定；尺寸表见 designing-module-loops 技能 card-sizes.md）：
   行高定死 292（手机一行＝小卡的宽，app.js setRowH 写 --row-h），大卡＝两行加一个行距；卡身 overflow: hidden，
   放不下的列表写「还有 N 场会议」点开详情层，连续内容（大卡时间轴、整行横排）在卡内滚动（data-scroll） */
.desk-h { display: flex; align-items: baseline; flex-wrap: wrap; gap: 6px 16px; margin: 4px 4px 22px; }
.desk-h .hello { margin: 0; }
.desk-h span { font-size: 12px; color: var(--ink-3); }
.mgrid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); grid-auto-rows: var(--row-h, 292px); gap: var(--grid-gap); align-items: stretch; }
.mgrid > .card { padding: 16px 18px 18px; display: flex; flex-direction: column; min-width: 0; min-height: 0; align-self: stretch; }
.mgrid > .card > .ch, .mgrid > .card > .card-foot { flex: none; }
.sz-half { grid-column: 1 / span 2; grid-row: 1; }
.sz-tall { grid-column: 3 / span 2; grid-row: 1 / span 2; }
/* 大卡＝半宽两行：时间轴在卡内滚动 */
.sz-tall .tl { flex: 1 1 0; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding-right: 4px; -webkit-mask-image: linear-gradient(to bottom, transparent, #000 14px, #000 calc(100% - 18px), transparent); mask-image: linear-gradient(to bottom, transparent, #000 14px, #000 calc(100% - 18px), transparent); }
.sz-small.s1 { grid-column: 1; grid-row: 2; }
.sz-small.s2 { grid-column: 2; grid-row: 2; }
.sz-full { grid-column: 1 / -1; grid-row: 3; }

/* ============ 三、会议卡 ============ */
.ch .rf { margin-left: auto; width: 32px; height: 32px; padding: 0; border-radius: 50%; background: transparent; color: var(--ink-2); }
.ch .rf:hover { background: var(--fc-plate); }
.ch .rf .ico { width: 17px; height: 17px; }
.ch .tag.conn { flex: none; }
.ch .dot { margin-left: -2px; }
.card-body { display: flex; flex-direction: column; flex: 1; min-width: 0; min-height: 0; overflow: hidden; }

/* 头条 */
.hl { display: flex; flex-direction: column; min-width: 0; }
.hl-t { display: block; width: 100%; margin: 0 0 2px; padding: 0; border: 0; background: none; color: var(--ink); font: 700 var(--fs-h2)/1.35 var(--font-sans); text-align: left; cursor: pointer; }
.hl-t:hover { text-decoration: underline; text-decoration-color: var(--accent-line); text-underline-offset: 4px; }
.hl-t.static { cursor: default; text-decoration: none; }
.hl .mt-s { display: block; font-size: 13px; line-height: 1.5; }
.hl .acts { margin-top: 12px; }
.hl .bar { margin-top: 10px; }
.sz-small .hl-t { font-size: var(--fs-h2); }
.sz-small .card-body > .hl { flex: 1 0 auto; }   /* 小卡：按钮贴卡底，格子里不留一块空白 */
.sz-small .hl .mt-s { font-size: 12px; }
.sz-small .hl .acts { margin-top: auto; padding-top: 12px; }
.sz-small .card-body { justify-content: flex-start; }

/* 中卡（宽屏）：头条文字在左、按钮在右，省出两行列表的高度；中屏、手机照常上下排（第六节） */
.sz-half .hl { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 16px; align-items: center; }
.sz-half .hl > .hl-t, .sz-half .hl > .mt-s, .sz-half .hl > .bar { grid-column: 1; }
.sz-half .hl > .acts { grid-column: 2; grid-row: 1 / span 3; margin-top: 0; flex-wrap: nowrap; }
.sz-half .hl-t { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.sz-half .ml { margin-top: 12px; padding-top: 4px; }
/* 「另有 N 场会议待处理」「还有 N 场会议」：点了打开「今天的会议」详情层，不在卡里就地展开 */
.hl-more { display: inline; padding: 0; border: 0; background: none; color: inherit; font: inherit; text-decoration: underline; text-decoration-color: var(--accent-line); text-underline-offset: 3px; cursor: pointer; }
.hl-more:hover { color: var(--ink); }
.ml-more { display: inline-flex; align-items: center; gap: 4px; align-self: flex-start; min-height: 28px; margin: 2px -8px 0; padding: 0 8px; border: 0; border-radius: var(--radius-sm); background: none; color: var(--ink-2); font: 600 12px/1 var(--font-sans); cursor: pointer; white-space: nowrap; }
.ml-more .ico { width: 14px; height: 14px; }
.ml-more:hover { background: var(--surface-2); color: var(--ink); }
.ly-ml { margin-top: 0; padding-top: 0; border-top: 0; }
/* 加载中（ui=loading）：灰条占位，同一个框 */
.sk { display: flex; flex-direction: column; gap: 10px; padding-top: 4px; }
.sk i { display: block; height: 14px; border-radius: 7px; background: var(--surface-2); }
.sk i:nth-child(1) { width: 62%; height: 20px; } .sk i:nth-child(2) { width: 44%; } .sk i:nth-child(3) { width: 86%; margin-top: 8px; } .sk i:nth-child(4) { width: 70%; }
/* 固定外框里的整卡状态（未连接、后端失败）：竖直居中，不留定稿空态的大内距 */
.mgrid .card-body > .empty { flex: 1; justify-content: center; padding: 0 8px; }

/* 今日概览（小卡第二种内容） */
.ov { display: flex; flex-direction: column; gap: 10px; flex: 1; }
.ov-big { display: flex; align-items: baseline; gap: 6px; }
.ov-big b { font: 650 40px/1.2 var(--font-num); font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
.ov-big span { font-size: 14px; color: var(--ink-2); }
.ov-rows { display: flex; flex-direction: column; gap: 4px; margin-top: auto; padding-top: 10px; border-top: 1px solid var(--line); }
.ov-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 13px; color: var(--ink-2); }
.ov-row b { font: 650 16px/1.3 var(--font-num); color: var(--ink); font-variant-numeric: tabular-nums; }
.ov-row.wait b { color: var(--wait-ink); }

/* 编辑桌面：小卡切换内容 */
.seg { display: inline-flex; gap: 2px; margin: -4px 0 10px; padding: 3px; border-radius: var(--radius-pill); background: var(--surface-2); box-shadow: var(--shadow-inset); }
.seg button { min-height: 30px; padding: 0 12px; border: 0; border-radius: var(--radius-pill); background: none; color: var(--ink-2); font-size: 12px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.seg button.on { background: var(--surface); color: var(--ink); box-shadow: 0 1px 2px rgba(90, 60, 40, .12); }
.card.is-edit { box-shadow: 0 0 0 2px var(--ink-3), var(--shadow-card); }

/* 列表行（中卡两行、大卡时间轴、整行横排共用一句结论） */
.ml { display: flex; flex-direction: column; margin-top: 14px; padding-top: 8px; border-top: 1px solid var(--line); }
.ml-row { display: flex; align-items: center; gap: 8px; min-height: 44px; margin: 0 -8px; padding: 2px 8px; border-radius: var(--radius-sm); }
.ml-row:hover { background: var(--surface-2); }
.ml-open { display: flex; align-items: flex-start; gap: 12px; flex: 1; min-width: 0; padding: 6px 0; border: 0; background: none; color: var(--ink); text-align: left; cursor: pointer; }
.ml-time { flex: none; width: 46px; padding-top: 1px; font: 600 14px/1.45 var(--font-num); font-variant-numeric: tabular-nums; color: var(--ink-2); }
.ml-time.wide { width: auto; min-width: 46px; }
.ml-main { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 10px; flex: 1; min-width: 0; }
.ml-name { font-size: 14px; font-weight: 600; line-height: 1.45; }
.ml-s { font-size: 12px; line-height: 1.5; color: var(--ink-2); }
.ml-s.quiet { color: var(--ink-3); }
.ml-s.wait { color: var(--wait-ink); }
.ml-s.today { color: var(--today-ink); }
.ml-s.done { color: var(--done-ink); }
.ml-s.del { color: var(--ink-3); }
/* 已取消：名字一道删除线（用底图画，方便从左到右画出来）、整行淡到 0.55（派单 10-21 动效 3A） */
.ml-row.is-cancel, .fr-tile.is-cancel { opacity: .55; }
.is-cancel .ml-name { color: var(--ink-3); text-decoration: none; background: linear-gradient(currentColor, currentColor) no-repeat 0 58% / 100% 1.5px; }
.ml-row .btn.xs { flex: none; }
.cf { display: inline-flex; align-items: center; gap: 4px; height: 20px; padding: 0 8px; border-radius: var(--radius-pill); background: var(--wait-bg); color: var(--wait-ink); font-size: 12px; font-weight: 500; white-space: nowrap; }
.ml-k { margin: 6px 0 2px; font-size: 12px; color: var(--ink-3); }

/* 大卡：今天全部会议的时间轴 */
.tl { position: relative; display: flex; flex-direction: column; margin-top: 14px; padding-top: 6px; border-top: 1px solid var(--line); }
.tl .ml-row { position: relative; }
.tl .ml-open { padding-left: 18px; }
.tl .ml-open::before { content: ""; position: absolute; left: 12px; top: 0; bottom: 0; width: 2px; background: var(--surface-3); }
.tl .ml-open::after { content: ""; position: absolute; left: 8px; top: 15px; width: 10px; height: 10px; border-radius: 50%; background: var(--surface); box-shadow: inset 0 0 0 2px var(--quiet-dot); }
.tl .ml-row.k-live .ml-open::after, .tl .ml-row.k-soon .ml-open::after { box-shadow: inset 0 0 0 5px var(--today-dot); }
.tl .ml-row.k-wait .ml-open::after { box-shadow: inset 0 0 0 5px var(--wait-dot); }
.tl .ml-row.k-done .ml-open::after { box-shadow: inset 0 0 0 5px var(--done-dot); }
.tl .ml-row.k-busy .ml-open::after { box-shadow: inset 0 0 0 2px var(--ink-2); }
.tl-now { position: relative; display: flex; align-items: center; gap: 8px; height: 22px; margin: 2px 0; padding-left: 4px; color: var(--today-ink); font: 600 12px/1.2 var(--font-num); font-variant-numeric: tabular-nums; }
.tl > *, .card-body > .hl { flex-shrink: 0; }
.tl-now::after { content: ""; flex: 1; height: 2px; border-radius: 1px; background: var(--today-dot); }
.tl-sep { margin: 10px 0 2px; font-size: 12px; color: var(--ink-3); }

/* 整行：左头条，右横排 */
.fr { display: grid; grid-template-columns: minmax(240px, 32%) minmax(0, 1fr); gap: 22px; flex: 1; min-width: 0; min-height: 0; }
.fr-l { min-width: 0; min-height: 0; overflow: hidden; }
.fr-r { display: flex; gap: 10px; min-width: 0; min-height: 0; overflow-x: auto; overflow-y: hidden; padding: 2px 2px 8px; scroll-snap-type: x proximity; }
.fr-tile { display: flex; flex-direction: column; gap: 4px; flex: 0 0 156px; min-height: 0; padding: 10px 12px; border: 0; border-radius: var(--radius-ctl); background: var(--surface-2); color: var(--ink); text-align: left; cursor: pointer; scroll-snap-align: start; }
.fr-tile:hover { background: var(--surface-3); }
.fr-tile .ml-time { width: auto; font-size: 13px; }
.fr-tile .ml-name { font-size: 14px; }
.fr-tile .cf { align-self: flex-start; margin-top: auto; }
.fr-tile.k-live, .fr-tile.k-soon { background: var(--today-bg); box-shadow: inset 0 0 0 1.5px var(--today-dot); }
.fr-tile.k-wait { background: var(--wait-bg); }
.fr-tile .btn.xs { align-self: flex-start; margin-top: auto; }
.fr-past { flex: 0 0 auto; display: flex; align-items: center; padding: 0 6px; font-size: 12px; color: var(--ink-3); writing-mode: vertical-rl; letter-spacing: .1em; }

/* 卡底说明（调用次数用完、暂时连不上）。冻结不是要你处理的事，不用待定橙，用墨色（状态色只表示状态） */
.card-foot .ico { width: 14px; height: 14px; color: var(--ink-3); }
.card-foot .cf-msg { display: inline-flex; align-items: flex-start; gap: 6px; }
.card-foot .cf-msg .ico { margin-top: 3px; }
.card-foot.is-frz { color: var(--ink-2); }
.mgrid .empty b { max-width: 26ch; }

/* ============ 动效（motion.js）用到的样式 ============ */
/* 替身、下划线、删除线都是绝对定位在这些块里 */
.hl, .ml-row, .fr-tile, .ml, .fr-r { position: relative; }
.ml-row.mo-lift, .fr-tile.mo-lift { z-index: 2; background: var(--surface); box-shadow: 0 6px 16px -8px rgba(90, 60, 40, .28); }
.mo-ul { position: absolute; z-index: 3; height: 2px; border-radius: 1px; transform-origin: 0 50%; pointer-events: none; }
.mo-strike { position: absolute; left: -2px; right: -2px; top: 50%; height: 1.5px; margin-top: -1px; border-radius: 1px; background: var(--ink-2); transform-origin: 0 50%; }
/* 拖滑块时直接到位：连 CSS 过渡也关掉一帧（app.js update） */
body.mo-still .mgrid *, body.mo-still .mgrid { transition: none !important; }
/* 即将开始的蓝条：宽度由 motion.js 跟时间走，不再叠 CSS 过渡 */
.hl .bar.soon i { transition: none; }
/* 正在获取的进度（方案 4A 墨色不定流动条＝定稿 .bar.busy；4B 墨色确定进度条） */
.fx-bar { display: block; flex-basis: 100%; width: 100%; max-width: 220px; height: 3px; margin: 3px 0 2px; border-radius: 2px; background: var(--surface-3); overflow: hidden; }
.fx-bar i { display: block; height: 100%; border-radius: 2px; background: var(--ink-2); }
.fx-bar.busy i { width: 40%; }
.fr-tile .fx-bar { flex: none; max-width: none; }
/* 冻结（方案 5A 降饱和、降到 0.8 不透明；5B 卡头灰色小标签） */
.card.is-frz.fz-a > .card-body { filter: saturate(.35); opacity: .8; }
.tag.frz { flex: none; height: 20px; background: var(--fc-plate); color: var(--ink-3); }
.sz-small .tag.frz { padding: 0 7px; }

/* 会前横幅：原型里顶上是评审控制带，横幅落在控制带下面（app.js ntfTop 写 --ntf-top），不盖住开关 */
.ntf { top: var(--ntf-top, calc(var(--hdr-h) + 12px)); }

/* ============ 四、详情层补充 ============ */
.ly-note.is-warn { box-shadow: inset 0 0 0 1px rgba(217, 138, 43, .35); background: var(--wait-bg); color: var(--wait-ink); }
.pv-paste { display: flex; flex-direction: column; gap: 8px; margin-top: 16px; }
.pv-paste textarea { width: 100%; min-height: 140px; padding: 12px; border: 0; border-radius: var(--radius-ctl); background: var(--surface); box-shadow: inset 0 0 0 1px var(--line-strong); font-size: 14px; line-height: 1.6; resize: vertical; }
.pv-paste textarea:focus { outline: 2px solid var(--ink); outline-offset: 1px; }
.pv-paste .acts { margin-top: 0; justify-content: flex-end; }
.mm-src { padding: 12px 14px; border-radius: var(--radius-ctl); background: var(--surface-2); font-size: 13px; line-height: 1.6; color: var(--ink-2); white-space: pre-wrap; word-break: break-word; }
.mm-mine .mm-st .tag.ok { color: var(--done-ink); }
.ly-b .ly-p.lead { max-width: 60ch; }
.file-in { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }

/* ============ 五、状态说明（产品框外） ============ */
.panel { margin-top: 30px; padding: 18px 20px 20px; border-radius: 16px; background: var(--rv-bg); color: var(--rv-ink); font-size: 13px; line-height: 1.55; }
.panel h2 { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 12px; margin: 0 0 10px; font-size: 16px; font-weight: 700; color: #FFFFFF; }
.panel h2 small { font-size: 12px; font-weight: 500; color: var(--rv-ink-3); }
.panel h3 { margin: 18px 0 8px; font-size: 13px; font-weight: 650; color: var(--rv-hl); }
.facts { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 4px 14px; margin: 0; }
.facts dt { color: var(--rv-ink-3); }
.facts dd { margin: 0; color: var(--rv-ink); }
.facts dd b { color: var(--rv-hl); font-weight: 600; }
.st-tab { width: 100%; border-collapse: collapse; }
.st-tab th, .st-tab td { padding: 8px 10px; border-top: 1px solid rgba(255, 255, 255, .08); text-align: left; vertical-align: top; }
.st-tab th { color: var(--rv-ink-3); font-weight: 500; font-size: 12px; }
.st-tab td:first-child { white-space: nowrap; }
.st-tab td b { color: #FFFFFF; font-weight: 600; }
.st-ph { display: inline-block; padding: 1px 8px; border-radius: 5px; background: rgba(255, 255, 255, .1); color: #FFFFFF; font-weight: 600; white-space: nowrap; }
.st-ph.k-live, .st-ph.k-soon { background: rgba(60, 127, 192, .35); }
.st-ph.k-wait { background: rgba(217, 138, 43, .38); }
.st-ph.k-done { background: rgba(56, 154, 96, .32); }
.st-ph.k-busy { background: rgba(255, 255, 255, .16); }
.st-ph.k-quiet { background: rgba(255, 255, 255, .06); color: var(--rv-ink-2); }
.st-raw { margin: 0; padding: 0; list-style: none; font: 12px/1.5 var(--font-mono); color: var(--rv-ink-2); }
.st-sub { color: var(--rv-ink-3); font-size: 12px; }
.st-log { max-height: 320px; margin: 0; padding: 0 4px 0 0; overflow: auto; list-style: none; }
.st-log li { display: flex; gap: 10px; padding: 3px 0; border-top: 1px solid rgba(255, 255, 255, .05); }
.st-log time { flex: none; font: 600 12px/1.55 var(--font-mono); color: var(--rv-ink-3); }
.st-log li.k-sync span { color: var(--rv-ink); }
.st-log li.k-warn span { color: var(--rv-hl); }
.st-log li.k-user span { color: #9FD0FF; }
.st-log li span { color: var(--rv-ink-2); }

/* ============ 六、窄屏 ============ */
@media (max-width: 1100px) {
  .rv-in, .rv-more-in { padding-left: 16px; padding-right: 16px; }
  /* 中屏：仍是 4 列，小卡与中卡同宽（占 2 列）；整行仍左头条、右横排 */
  .sz-small.s1 { grid-column: 1 / span 2; grid-row: 2; }
  .sz-small.s2 { grid-column: 1 / span 2; grid-row: 3; }
  .sz-full { grid-row: 4; }
  .sz-half .hl { display: flex; align-items: stretch; }
  .sz-half .hl > .acts { margin-top: 10px; flex-wrap: wrap; }
}
@media (max-width: 760px) {
  .rv-in { flex-wrap: wrap; gap: 6px 10px; padding: 8px 12px; }
  .rv-now { min-width: 0; flex: 1; }
  .rv-now span { white-space: normal; }
  .rv-now b { font-size: 22px; }
  .rv-slider { order: 5; flex-basis: 100%; }
  .rv-b, .rv-sel { min-height: 40px; }
  .rv-more-in { padding: 8px 12px 12px; }
  .rv-marks { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 4px; }
  .rv-mk { min-height: 40px; flex: none; }
  .rv-mo { gap: 4px 10px; }
  .rv-mo-b { min-height: 40px; min-width: 40px; }
  .rv-mo .rv-b { min-height: 40px; }
  .rv-opts { flex-direction: column; align-items: stretch; gap: 2px; }
  .rv-ck, .rv-lab { min-height: 40px; }
  .rv-lab .rv-sel { flex: 1; }
  .rv-opts .rv-b { width: 100%; }
  /* 手机：2 列、列距 12，一行高＝小卡的宽（--row-h），小卡、大卡是正方形；中卡、整行只有 177 高（390 宽时），只放头条与「还有 N 场会议」 */
  .mgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .mgrid > .card { padding: 14px; }
  .mgrid .ch { margin-bottom: 10px; }
  .desk { padding: 14px 12px 40px; }
  .hello { font-size: 22px; }
  .sz-half, .sz-full { grid-column: 1 / -1; grid-row: auto; }
  .sz-tall { grid-column: 1 / -1; grid-row: auto / span 2; }
  .sz-small.s1 { grid-column: 1; grid-row: auto; }
  .sz-small.s2 { grid-column: 2; grid-row: auto; }
  .sz-half { order: 1; } .sz-small.s1 { order: 2; } .sz-small.s2 { order: 3; } .sz-tall { order: 4; } .sz-full { order: 5; }
  .sz-small .ch .ch-t { margin-right: 0; }
  .ch { flex-wrap: wrap; row-gap: 4px; }
  .ch .ch-t { white-space: nowrap; }
  /* 手机小卡挂小标签（已暂停同步、可能不是最新）时，卡头只留图标、小标签与刷新，不另起一行 */
  .sz-small.has-tag .ch-t, .sz-small.has-tag .ch > .dot { display: none; }
  .sz-small.has-tag .ch { flex-wrap: nowrap; gap: 6px; }
  .sz-small.is-edit .card-body > :not(.seg) { display: none; }   /* 编辑桌面时手机小卡只放内容切换，格子不变 */
  .sz-small.has-tag .tag.frz { padding: 0 6px; }
  .mgrid .card-body > .empty > .ico { display: none; }   /* 手机上整卡状态（未连接、后端失败）不放图标，字和按钮放得下 */
  .mgrid .card-body > .empty { gap: 4px; }
  .mgrid .card-body > .empty b { line-height: 1.4; }
  .mgrid .card-body > .empty .btn { margin-top: 2px; }
  /* 从没连过（cfg=never）的手机中卡、整行：宽而矮，主句与「连接腾讯会议」同一行、说明句在下（换版式，engine.js MB.wholeFit 按 m 现算放不放得下） */
  .mgrid .card-body > .empty.row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-content: center; align-items: center; justify-items: start; column-gap: 12px; row-gap: 4px; text-align: left; }
  .mgrid .card-body > .empty.row > b { grid-column: 1; grid-row: 1; }
  .mgrid .card-body > .empty.row > .btn { grid-column: 2; grid-row: 1; margin-top: 0; }
  .mgrid .card-body > .empty.row > span { grid-column: 1 / -1; grid-row: 2; max-width: none; line-height: 1.5; }
  .mgrid .sk i:nth-child(4) { display: none; }
  /* 手机小卡的头条：状态词单独一行（今天蓝／待定橙），会名一行超长省略，副行不接「另有 N 场」、不画即将开始的进度条 */
  .sz-small .hl-st { display: block; margin-bottom: 1px; font-size: 12px; font-weight: 600; line-height: 1.45; color: var(--ink-2); }
  .sz-small .hl[data-kind="live"] .hl-st, .sz-small .hl[data-kind="soon"] .hl-st { color: var(--today-ink); }
  .sz-small .hl[data-kind="pastPend"] .hl-st, .sz-small .hl[data-kind="pend"] .hl-st { color: var(--wait-ink); }
  .sz-small .hl-c, .sz-small .hl-also, .sz-small .hl .bar { display: none; }
  .sz-small .hl-n { display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
  .sz-small .hl .mt-s { line-height: 1.4; }
  .sz-small .ov { gap: 6px; }
  .sz-small .ov-rows { gap: 2px; padding-top: 6px; }
  .sz-small .ov-row b { line-height: 1.3; }
  /* 手机中卡、整行：会名一行超长省略，「还有 N 场会议」贴卡底 */
  .sz-half .hl-t, .sz-full .hl-t { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
  .sz-half .hl .mt-s, .sz-full .hl .mt-s { line-height: 1.45; }
  .sz-half .ml, .sz-full .ml { margin-top: auto; padding-top: 2px; }
  .sz-half .ml-more, .sz-full .ml-more { min-height: 26px; }
  .sz-note .szd { display: none; }
  .sz-small .ch-ic { width: 30px; height: 30px; }
  .sz-small .hl-t { font-size: 16px; }
  .ov-big b { font-size: 32px; }
  .ch .rf { width: 40px; height: 40px; margin-right: -6px; }
  .btn, .btn.sm, .btn.xs, .seg button { min-height: 40px; }
  .ml-row { min-height: 48px; }
  .ml-open { min-height: 44px; }
  .hl-t { min-height: 40px; }
  .sz-small .hl-t, .sz-half .hl-t, .sz-full .hl-t { min-height: 0; }
  .fr-tile { flex-basis: 148px; }
  .ly-x { width: 40px; height: 40px; }
  .ly-split { grid-template-columns: minmax(0, 1fr); gap: 4px; } /* 同定稿原型 app.css:712 */
  .mm-tsb { min-height: 40px; min-width: 52px; }
  .mm-dec, .mm-fold { min-height: 44px; }
  .panel { padding: 14px; }
  .facts { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .facts dd { margin-bottom: 6px; }
  .st-tab, .st-tab tbody, .st-tab tr, .st-tab td { display: block; width: 100%; }
  .st-tab thead { display: none; }
  .st-tab tr { padding: 10px 0; border-top: 1px solid rgba(255, 255, 255, .1); }
  .st-tab td { padding: 2px 0; border: 0; }
  .st-tab td[data-l]::before { content: attr(data-l) "："; color: var(--rv-ink-3); font-size: 12px; }
  .st-tab td:first-child { white-space: normal; }
}

/* ============ 七、只画一张卡（地址参数 frame=，说明页用 iframe 嵌入；见 app.js 开头 SOLO 与 README「只画一张卡」） ============ */
/* 不加 .solo 时这里一条都不生效。卡片仍在同一张四档网格里按 --solo-w 宽排好（几何与完整原型相同），其余卡只是看不见 */
html.solo, html.solo body { background: transparent; overflow: hidden; }
html.solo body { min-height: 0; }
html.solo .backdrop, html.solo .rv-bar, html.solo .rv-more, html.solo .desk-h, html.solo .panel, html.solo .ntf, html.solo .toasts, html.solo #layerRoot, html.solo .sz-note { display: none; }
html.solo .app { position: absolute; left: 0; top: 0; width: var(--solo-w, 1440px); }
html.solo .desk { margin: 0; }
html.solo .mgrid > .card, html.solo .mgrid > .card * { cursor: default; }
html.solo .mgrid { pointer-events: none; }   /* 只是画面：没有悬停、点击 */
/* frame=banner：只画会前横幅那一摞，放在左上角（余量同卡片） */
html.solo-bn .ntf { display: block; position: absolute; top: 10px; left: 12px; right: auto; width: min(400px, calc(var(--solo-w, 1440px) - 24px)); }
html.solo-bn .ntf, html.solo-bn .ntf * { pointer-events: none; }
html.solo .solo-empty { position: absolute; top: 10px; left: 12px; display: flex; align-items: center; justify-content: center; width: min(400px, calc(var(--solo-w, 1440px) - 24px)); height: 131px; border-radius: 20px; box-shadow: inset 0 0 0 1.5px var(--line-strong); color: var(--ink-3); font: 500 13px/1 var(--font-sans); }   /* 评审用的占位，不是产品界面：此刻没有横幅 */
html.solo .solo-empty[hidden] { display: none; }
