/* ─────────────────────────────────────────────────────────────────────────────
   PMA 外观改版 · 新外观(v2)样式 —— 只在 <html data-ui="v2"> 下生效

   - 开关:ui_prefs 表 + cookie `pma_ui=v2`,at-prefs.js 在 head 同步阶段给 <html> 设 data-ui="v2"。
   - 本文件所有规则都以 [data-ui="v2"] 开头;旧外观(无 data-ui)下一条都不命中。
   - 规范来源:docs/plans/assets/ui-prototype/(tokens.css / components.css / components.html 组件卡)。
   - 第 3 段之后的通用组件由原型 components.css 移植(类名按组件卡),与现有类名冲突的处理:
       .at-page(现有 body 类)→ 页面容器改名 .at-pagewrap;.ai-card/.ai-sum → .at-ai-card/.at-ai-sum;
       .at-tabs → 排除旧 at_tabs 宏外壳(它带 data-active),写作 .at-tabs:not([data-active]);
       .at-seg → 加 body.at-page 前缀压过 at-theme.css 的分段控件规则;关键帧统一改名 atv2-*。
   - 内联样式压不住的外框元素(顶栏、模态外壳)用 !important,已在对应段落注明,后续抽 class 后清理。
   ───────────────────────────────────────────────────────────────────────────── */

/* ═════════ 0. Token(映射表见原型 tokens.css 顶部:保留现有名改值 + 新增 + 补齐未定义别名) ═════════ */
:root[data-ui="v2"] {
  color-scheme: light;

  /* 底色层级:side < page,group 比 page 深一档,elev 最亮 */
  --bg-side:      #EFEDE9;
  --bg-page:      #F8F7F4;
  --bg-group:     #F1EFEB;
  --bg-sunk:      var(--bg-group);
  --bg-elev:      #FFFFFF;
  --bg-group-ov:  #F6F4F0;
  --bg-raised:    #FFFFFF;
  --bg-hover:     #E8E5E0;
  --bg-active:    #E3E0DA;
  --bg-mask:      rgba(20, 18, 16, .32);
  --bg-inverse:   #1F1E1C;
  --ink-inverse:  #F8F7F4;
  --knob:         #FFFFFF;
  --on-media:     #FFFFFF;
  --media-scrim:  rgba(0, 0, 0, .42);

  --ink:          #1F1E1C;
  --ink-2:        #4A4844;
  --ink-3:        #6F6B66;
  --ink-4:        #8F8A84;

  --line-soft:    #F0EEEA;
  --line:         #ECEAE5;
  --line-2:       #E2DFD9;

  /* 强调色由 at-prefs.js 内联写入(默认强调色时换成下列 v2 值);这里是无 JS 时的兜底 */
  --accent:       #B4613F;
  --accent-2:     #9F5235;
  --accent-soft:  #F1E3DB;
  --accent-tint:  #F8F1ED;
  --accent-ink:   #FFFFFF;

  --success:      #3F7A5A;
  --success-soft: #E3EEE7;
  --warn:         #A8701F;
  --warn-soft:    #F5E9D6;
  --info:         #3D6A93;
  --info-soft:    #E2EAF2;
  --danger:       #B4443A;
  --danger-soft:  #F5E1DE;

  /* 补齐:页面在用但从未定义的旧名 */
  --bg:           var(--bg-page);
  --bg-elev-2:    var(--bg-group-ov);
  --warning:      var(--warn);
  --ink-1:        var(--ink);
  --warn-ink:     var(--warn);
  --warn-line:    var(--warn-soft);

  /* 字号 / 间距阶梯 */
  --fs-xs: 11.5px; --fs-sm: 12.5px; --fs-base: 14px; --fs-md: 15px;
  --fs-lg: 17px;  --fs-xl: 20px;   --fs-2xl: 24px;  --fs-3xl: 30px;
  --sp-1: 4px;  --sp-2: 8px;  --sp-3: 12px; --sp-4: 16px; --sp-5: 20px;
  --sp-6: 24px; --sp-7: 32px; --sp-8: 40px; --sp-9: 48px; --sp-10: 64px;

  /* 圆角(现有三档改值 + 新增) */
  --radius-xs:   6px;
  --radius-sm:   8px;
  --radius:      10px;
  --radius-md:   12px;
  --radius-lg:   16px;
  --radius-xl:   20px;
  --radius-pill: 999px;

  /* 阴影三档:只给「浮起来」的东西用 */
  --shadow-sm:    0 1px 2px rgba(30, 25, 20, .06);
  --shadow-pop:   0 12px 32px rgba(30, 25, 20, .12), 0 1px 3px rgba(30, 25, 20, .06);
  --shadow-modal: 0 24px 64px rgba(30, 25, 20, .14), 0 2px 6px rgba(30, 25, 20, .05);

  --ctl-sm: 28px; --ctl-md: 34px; --ctl-lg: 40px;
  --z-sticky: 20; --z-dropdown: 40; --z-drawer: 60; --z-modal: 70; --z-toast: 90;
  --dur: 160ms;
  --ease: cubic-bezier(.2, .7, .2, 1);

  --cov-1: #1E3540; --cov-2: #2C2A3E; --cov-3: #3A2C26; --cov-4: #22302B; --cov-5: #2B3035;
  --cov-1b: #0F1D24; --cov-2b: #15141F; --cov-3b: #1E1714; --cov-4b: #111A17; --cov-5b: #16191C;
  --chart-1: #B4613F; --chart-2: #6F6B66; --chart-3: #3D6A93; --chart-4: #3F7A5A; --chart-5: #C9A46B;

  /* 分组缝:页面上 = 页面底色;浮层里 = 浮层底色 */
  --seam: var(--bg-page);
}

:root[data-ui="v2"][data-theme="dark"] {
  color-scheme: dark;

  --bg-side:      #171716;
  --bg-page:      #212120;
  --bg-group:     #2A2928;
  --bg-elev:      #2A2928;
  --bg-group-ov:  #333230;
  --bg-raised:    #45443F;
  --bg-hover:     #333230;
  --bg-active:    #393836;
  --bg-mask:      rgba(0, 0, 0, .55);
  --bg-inverse:   #ECEAE6;
  --ink-inverse:  #1A1918;
  --knob:         #ECEAE6;

  --ink:          #ECEAE6;
  --ink-2:        #CFCBC4;
  --ink-3:        #A8A39C;
  --ink-4:        #77736D;

  --line-soft:    #262524;
  --line:         #302F2D;
  --line-2:       #3A3936;

  --accent:       #CF7B58;
  --accent-2:     #DB8C6B;
  --accent-soft:  #3B2A22;
  --accent-tint:  #2F2622;
  --accent-ink:   #1A1513;

  --success:      #7DB592;
  --success-soft: #24302A;
  --warn:         #D9A35B;
  --warn-soft:    #352C1F;
  --info:         #86AED6;
  --info-soft:    #222C36;
  --danger:       #E08277;
  --danger-soft:  #3A2523;

  --shadow-sm:    0 1px 2px rgba(0, 0, 0, .3);
  --shadow-pop:   0 12px 32px rgba(0, 0, 0, .45), 0 1px 3px rgba(0, 0, 0, .3);
  --shadow-modal: 0 24px 64px rgba(0, 0, 0, .5), 0 2px 6px rgba(0, 0, 0, .3);

  --chart-1: #CF7B58; --chart-2: #A8A39C; --chart-3: #86AED6; --chart-4: #7DB592; --chart-5: #D9B77E;
}

/* 浮层内部:分组块与悬停各提一档,避免与浮层同色 */
[data-ui="v2"] .on-overlay { --bg-group: var(--bg-group-ov); --bg-sunk: var(--bg-group-ov); --seam: var(--bg-elev); }
[data-ui="v2"][data-theme="dark"] .on-overlay { --bg-hover: #3B3A38; }

/* ═════════ 1. 基础:标题不再用衬线 / 焦点 / 隐藏 ═════════ */
[data-ui="v2"] body.at-page .at-serif { font-family: var(--font-sans); font-weight: 600; letter-spacing: -0.005em; }
/* 仪表盘卡片标题(at_dashboard.html 页内 .dash-card-title 写死衬线)→ 新外观无衬线 */
[data-ui="v2"] body.at-page .dash-card-title { font-family: var(--font-sans); font-weight: 600; letter-spacing: 0; }
[data-ui="v2"] [hidden] { display: none !important; }
/* 键盘焦点:全站统一淡灰描边,不用强调色外框;输入框另有自己的聚焦样式 */
[data-ui="v2"] body.at-page :focus { outline: none; }
[data-ui="v2"] body.at-page :focus-visible { outline: 1.5px solid var(--ink-4); outline-offset: -1.5px; }
/* 输入类控件不用焦点框:输入框 / 文本域 / 下拉在聚焦时一律只显示外层描边(.at-input:focus-within 或控件自身内描边),
   避免出现「外圈圆角 + 内层方框」两层框;全站统一,不再逐个页面修 */
[data-ui="v2"] body.at-page :is(input, textarea, select):focus,
[data-ui="v2"] body.at-page :is(input, textarea, select):focus-visible { outline: none !important; }
[data-ui="v2"] body.at-page .at-input :is(input, textarea, select) { box-shadow: none; border: 0; }
/* 自带外框的容器(.at-input / .at-tl-composer / 人员多选 .at-ps / 带 data-frame 的组合控件)里的输入框不再画内框,只由容器显示聚焦描边 */
[data-ui="v2"] body.at-page :is(input, textarea):not(.at-input *):not(.at-tl-composer *):not(.at-ps *):not([data-frame] *):not([type=checkbox]):not([type=radio]):focus {
  box-shadow: inset 0 0 0 1.5px var(--ink-2); }

/* ═════════ 2. 外框 ═════════ */

/* ── 2.1 侧栏(at_sidebar.html + at-sidebar.js 的 v2 分支):底色 --bg-side、默认展开、顶部折叠按钮 ── */
[data-ui="v2"] aside.at-sidebar { width: 248px; background: var(--bg-side); border-right: 0; transition: width 200ms var(--ease); }
[data-ui="v2"][data-sb="collapsed"] aside.at-sidebar { width: 64px; }
[data-ui="v2"] .at-sidebar .at-sidebar-panel { width: 100%; background: var(--bg-side); transition: none; }
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sidebar-panel { overflow: visible; }   /* 让用户菜单弹层不被 64px 裁掉 */

[data-ui="v2"] .at-sidebar .at-sb-brand { height: 60px; padding: 0 52px 0 18px; }
[data-ui="v2"] .at-sidebar .at-sb-logo { width: 28px; height: 28px; border-radius: var(--radius-sm); }
[data-ui="v2"] .at-sidebar .at-sb-brandtext { display: flex; }
[data-ui="v2"] .at-sidebar .at-sb-brandname { font-family: var(--font-sans); font-size: 14px; letter-spacing: 0; }
[data-ui="v2"] .at-sidebar .at-sb-brandsub { font-size: 10.5px; letter-spacing: .12em; }

/* 折叠按钮:放到侧栏顶部(品牌行右侧),图标 chev 朝左 = 收起;折叠后居中、朝右 = 展开 */
[data-ui="v2"] .at-sidebar .at-sb-pin { top: 16px; right: 12px; width: 28px; height: 28px; border: 0; border-radius: var(--radius-pill);
  background: transparent; box-shadow: none; color: var(--ink-3); transition: background var(--dur), color var(--dur); }
[data-ui="v2"] .at-sidebar .at-sb-pin:hover { background: var(--bg-hover); color: var(--ink); }
[data-ui="v2"] .at-sidebar .at-sb-pin svg { transform: rotate(180deg); transition: transform var(--dur); }
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-pin { right: auto; left: 18px; }
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-pin svg { transform: none; }

[data-ui="v2"] .at-sidebar .at-sb-nav { padding: 4px 10px 10px; gap: 2px; }
[data-ui="v2"] .at-sidebar .at-sb-link,
[data-ui="v2"] .at-sidebar .at-sb-gbtn { height: 36px; padding: 0 10px; border-radius: var(--radius-sm); color: var(--ink-3);
  font-size: 13.5px; flex: none; box-sizing: border-box; transition: background var(--dur), color var(--dur); }
[data-ui="v2"] .at-sidebar .at-sb-link:not(.is-active):hover,
[data-ui="v2"] .at-sidebar .at-sb-gbtn:hover { background: var(--bg-hover); color: var(--ink); }
/* 选中项:浅灰底 + 加粗 */
[data-ui="v2"] .at-sidebar .at-sb-link.is-active { background: var(--bg-active); color: var(--ink); font-weight: 600; }
[data-ui="v2"] .at-sidebar .at-sb-group:has(.at-sb-sublink.is-active) > .at-sb-gbtn { color: var(--ink); }
[data-ui="v2"] .at-sidebar .at-sb-label { display: inline-flex; }
[data-ui="v2"] .at-sidebar .at-sb-chev { display: inline-flex; margin-left: auto; opacity: .55; }
[data-ui="v2"] .at-sidebar .at-sb-sub { margin: 2px 0 6px 30px; padding-left: 0; border-left: 0; gap: 1px; }
[data-ui="v2"] .at-sidebar .at-sb-sublink { box-sizing: border-box; display: flex; align-items: center; height: 32px; padding: 0 10px; border-radius: var(--radius-sm);
  font-size: 13.5px; color: var(--ink-3); transition: background var(--dur), color var(--dur); }
[data-ui="v2"] .at-sidebar .at-sb-sublink:not(.is-active):hover { background: var(--bg-hover); color: var(--ink); }
[data-ui="v2"] .at-sidebar .at-sb-sublink.is-active { background: var(--bg-active); color: var(--ink); font-weight: 600; }

/* 账户底栏 + 弹出菜单 */
[data-ui="v2"] .at-sidebar .at-sb-user { padding: 10px; }
[data-ui="v2"] .at-sidebar .at-sb-me { padding: 8px; border-radius: var(--radius-sm); }
[data-ui="v2"] .at-sidebar .at-sb-me:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-sidebar .at-sb-mename { display: block; }
[data-ui="v2"] .at-sidebar .at-sb-mename-t { font-size: 13px; font-weight: 500; }
[data-ui="v2"] .at-sidebar .at-sb-mechev { display: inline-flex; }
[data-ui="v2"] .at-sidebar .at-sb-menu { left: 10px; right: 10px; bottom: calc(100% - 2px); border: 0; border-radius: var(--radius-md);
  background: var(--bg-elev); box-shadow: var(--shadow-pop); }
[data-ui="v2"] .at-sidebar .at-sb-mi { border-radius: var(--radius-sm); }
[data-ui="v2"] .at-sidebar .at-sb-mi:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-sidebar .at-sb-menusep { height: 6px; margin: 0; background: transparent; }   /* 不画分割线,用留白 */
/* 菜单开关:新外观尺寸(30×18)+ 关闭态轨道加深;颜色由 JS 内联写,关闭态需 !important 才压得住 */
[data-ui="v2"] .at-sidebar .at-sb-sw { width: 30px; height: 18px; }
[data-ui="v2"] .at-sidebar .at-sb-sw__knob { width: 14px; height: 14px; background: var(--knob); box-shadow: var(--shadow-sm); }
[data-ui="v2"] .at-sidebar [aria-checked="false"] > .at-sb-sw { background: var(--line-2) !important; }
[data-ui="v2"][data-theme="dark"] .at-sidebar [aria-checked="false"] > .at-sb-sw { background: var(--bg-active) !important; }

/* 折叠态:只留图标 */
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-logo,
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-brandtext,
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-label,
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-chev,
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-mename,
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-mechev { display: none; }
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-link,
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-gbtn,
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-me { justify-content: center; padding: 0; }
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-me { height: 44px; }
/* 折叠态看不到子菜单:当前页所在分组的图标按钮显示选中底色 */
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-group:has(.at-sb-sublink.is-active) > .at-sb-gbtn { background: var(--bg-active); color: var(--ink); }
[data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-menu { right: auto; width: 220px; }

@media (max-width: 1360px) {
  [data-ui="v2"] aside.at-sidebar { width: 224px; }
  [data-ui="v2"][data-sb="collapsed"] aside.at-sidebar { width: 64px; }
}

/* ── 2.2 顶栏(at_topbar.html):与主区同底、不画底线、搜索框胶囊。元素仍是内联样式 → 需 !important ── */
[data-ui="v2"] .at-topbar { background: var(--bg-page) !important; border-bottom: 0 !important; height: 60px !important; }
[data-ui="v2"] .at-topbar__search { height: 38px !important; border: 0 !important; border-radius: var(--radius-pill) !important;
  background: var(--bg-group) !important; color: var(--ink-4) !important; }
[data-ui="v2"] .at-topbar__search:hover { background: var(--bg-hover) !important; }
[data-ui="v2"] .at-topbar__search .at-mono { background: var(--bg-elev) !important; border: 0 !important; border-radius: var(--radius-xs) !important; box-shadow: var(--shadow-sm); }
[data-ui="v2"] .at-topbar__create { border-radius: var(--radius-pill) !important; background: var(--bg-inverse) !important; color: var(--ink-inverse) !important; box-shadow: none !important; }
[data-ui="v2"] .at-topbar__create:hover { opacity: .88; }
[data-ui="v2"] .at-topbar__ib { border-radius: var(--radius-pill) !important; width: 34px !important; height: 34px !important; color: var(--ink-3) !important; }
[data-ui="v2"] .at-topbar__ib:hover { background: var(--bg-hover) !important; color: var(--ink) !important; }
[data-ui="v2"] .at-topbar__sep { background: transparent !important; width: 8px !important; }
[data-ui="v2"] .at-topbar__menu { border: 0 !important; border-radius: var(--radius-md) !important; box-shadow: var(--shadow-pop) !important; }
[data-ui="v2"] .at-topbar__mi { border-radius: var(--radius-sm) !important; }
[data-ui="v2"] .at-topbar__mi:hover { background: var(--bg-hover) !important; }
/* 顶栏所在的外层列(各页内联 overflow-x:hidden,会成为滚动容器 → 顶栏 sticky 失效、随页面滚走)改 clip:
   同样裁掉横向溢出但不建滚动容器,顶栏像原型一样始终停在顶部。列表页整屏不滚,不受影响 */
[data-ui="v2"] body.at-page div:has(> .at-topbar) { overflow-x: clip !important; }

/* ── 2.3 列表骨架(at_list_layout.html):页头去衬线大字、标签行去上下线、表格容器改分组底色 ── */
/* 新外观顶栏统一用 at_topbar(60px,见 2.2);面包屑在页头标题上方(.at-ll__crumb = 原型 .at-ph__crumb),
   主区上内边距 28px 同原型 .at-page;整屏高 = 视口 − 顶栏 60px */
[data-ui="v2"] body.at-page .at-ll__main { padding: 28px 32px 24px; height: calc(100vh - 60px); }
/* 面包屑:各列表页 breadcrumb 块是内联样式(13px / 正文色)→ 新外观统一成原型的小号灰字 */
[data-ui="v2"] body.at-page .at-ph__crumb { line-height: 1.5; min-height: 19px; }   /* 部分页加载了 Tailwind 预置样式,行高统一成原型的 19px */
[data-ui="v2"] body.at-page .at-ph__crumb > * { font-size: inherit !important; color: inherit !important; display: inline-flex; align-items: center; }
[data-ui="v2"] body.at-page .at-ph__crumb > a:hover { color: var(--ink-2) !important; }
[data-ui="v2"] body.at-page .at-ph__crumb > :last-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 480px; display: inline-block; }
[data-ui="v2"] body.at-page .at-ll__ph { margin-bottom: var(--sp-6); }
[data-ui="v2"] body.at-page .at-ll__cat { display: none; }   /* 列表页眉题(如「CUSTOMER · 业务管理」)与面包屑重复,原型无 → 新外观隐藏 */
[data-ui="v2"] body.at-page .at-ll h1.at-ll__title { font-family: var(--font-sans); font-size: var(--fs-2xl); font-weight: 600; letter-spacing: .2px; line-height: 1.25; }
[data-ui="v2"] body.at-page .at-ll__desc { margin-top: 6px; }
[data-ui="v2"] body.at-page .at-ll__tabs { border-top: 0; border-bottom: 0; }
[data-ui="v2"] body.at-page .at-ll__tablebox { background: var(--bg-group); border: 0; border-radius: var(--radius-lg); }
[data-ui="v2"] body.at-page .at-ll__theadrow { background: var(--bg-group); }

/* ── 2.4 模态外壳(at_purchase_order.html 的 at_modal_shell):遮罩 / 圆角 / 阴影按新规范。内联样式 → !important ── */
[data-ui="v2"] .at-mshell { background: var(--bg-mask) !important; backdrop-filter: none !important; padding: 24px !important; }
[data-ui="v2"] .at-mshell__dlg { border-radius: var(--radius-xl) !important; box-shadow: var(--shadow-modal) !important; max-height: calc(100vh - 48px) !important; }
[data-ui="v2"] .at-mshell__hd { padding: 22px 26px 8px !important; }
[data-ui="v2"] .at-mshell__title { font-size: 19px !important; font-weight: 600 !important; letter-spacing: 0 !important; }
[data-ui="v2"] .at-mshell__ic { border-radius: 50% !important; background: var(--accent-soft) !important; }
[data-ui="v2"] .at-mshell__x { border-radius: var(--radius-pill) !important; width: 34px; height: 34px; display: inline-flex; align-items: center; justify-content: center; padding: 0 !important; }
[data-ui="v2"] .at-mshell__x:hover { background: var(--bg-hover); color: var(--ink) !important; }
[data-ui="v2"] .at-mshell__bd { padding: 10px 26px 6px !important; }
[data-ui="v2"] .at-mshell__ft { padding: 18px 26px 22px !important; }

/* ═════════ 3. 通用组件(由原型 components.css 移植,类名按组件卡) ═════════ */
/* 页面容器与页头 */
[data-ui="v2"] .at-pagewrap { max-width: 1240px; margin: 0 auto; padding: 28px 32px 72px; }
[data-ui="v2"] .at-pagewrap--wide { max-width: 1480px; }
[data-ui="v2"] .at-ph { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--sp-4); flex-wrap: wrap; margin-bottom: var(--sp-6); }
[data-ui="v2"] .at-ph__crumb { font-size: var(--fs-sm); color: var(--ink-4); margin-bottom: 6px; display: flex; align-items: center; gap: 6px; }
[data-ui="v2"] .at-ph__crumb a:hover { color: var(--ink-2); }
[data-ui="v2"] .at-ph h1 { font-size: var(--fs-2xl); letter-spacing: .2px; }
[data-ui="v2"] .at-ph p { margin-top: 6px; color: var(--ink-3); }
[data-ui="v2"] .at-ph__acts { display: flex; gap: var(--sp-2); flex-wrap: wrap; align-items: center; }
[data-ui="v2"] .at-sec { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); margin: var(--sp-7) 2px var(--sp-3); }
[data-ui="v2"] .at-sec:first-child { margin-top: 0; }
[data-ui="v2"] .at-sec h2 { font-size: 13px; font-weight: 600; color: var(--ink-3); }
[data-ui="v2"] .at-sec a, [data-ui="v2"] .at-sec .at-link { font-size: var(--fs-sm); color: var(--ink-4); }
/* ═════════ 2. 按钮 ═════════ */
/* 作用域:只命中新宏输出(总带 at-btn--变体);旧模板手写的 `at-btn at-btn-ghost at-btn-sm`(单横线、无样式定义)不被套新样式 */
[data-ui="v2"] .at-btn:where([class*="at-btn--"]) {
  --h: var(--ctl-md);
  height: var(--h); padding: 0 16px; border-radius: var(--radius-pill);
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  border: 1px solid transparent; background: transparent; color: var(--ink);
  font-weight: 500; font-size: 13.5px; white-space: nowrap; cursor: pointer;
  transition: background var(--dur), color var(--dur), border-color var(--dur), opacity var(--dur);
}
[data-ui="v2"] .at-btn .ic { width: 16px; height: 16px; }
[data-ui="v2"] .at-btn--sm { --h: var(--ctl-sm); padding: 0 12px; font-size: 12.5px; gap: 5px; }
[data-ui="v2"] .at-btn--sm .ic { width: 14px; height: 14px; }
[data-ui="v2"] .at-btn--lg { --h: var(--ctl-lg); padding: 0 20px; font-size: 14px; }
[data-ui="v2"] .at-btn--primary { background: var(--bg-inverse); color: var(--ink-inverse); }
[data-ui="v2"] .at-btn--primary:hover { opacity: .88; }
[data-ui="v2"] .at-btn--accent { background: var(--accent); color: var(--accent-ink); }
[data-ui="v2"] .at-btn--accent:hover { background: var(--accent-2); }
/* 弹窗主操作统一用强调色(设计规则「强调色只用于主要操作」):弹窗底栏里的墨色主按钮一律按强调色画,
   与 ATConfirm 的主按钮一致;危险操作用 --danger / --danger-solid,不受此条影响。墨色主按钮在深色下会变成浅底,不用于弹窗 */
[data-ui="v2"] :is(.at-dlg__ft, .at-mshell__ft) .at-btn--primary { background: var(--accent); color: var(--accent-ink); }
[data-ui="v2"] :is(.at-dlg__ft, .at-mshell__ft) .at-btn--primary:hover { background: var(--accent-2); opacity: 1; }
[data-ui="v2"] .at-btn--ghost { border-color: var(--line-2); }
[data-ui="v2"] .at-btn--ghost:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-btn--soft { background: var(--bg-group); }
[data-ui="v2"] .at-btn--soft:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-btn--bare { color: var(--ink-3); padding: 0 10px; }
[data-ui="v2"] .at-btn--bare:hover { color: var(--ink); background: var(--bg-hover); }
[data-ui="v2"] .at-btn--danger { color: var(--danger); border-color: var(--danger-soft); }
[data-ui="v2"] .at-btn--danger:hover { background: var(--danger-soft); }
[data-ui="v2"] .at-btn--danger-solid { background: var(--danger); color: var(--accent-ink); }
[data-ui="v2"] .at-btn--danger-solid:hover { opacity: .9; }
[data-ui="v2"] .at-btn--block { width: 100%; }
[data-ui="v2"] .at-btn:where([class*="at-btn--"]):disabled, [data-ui="v2"] .at-btn.is-disabled { opacity: .42; cursor: not-allowed; pointer-events: none; }
[data-ui="v2"] .at-btn.is-loading { pointer-events: none; color: transparent !important; position: relative; }
[data-ui="v2"] .at-btn.is-loading::after {
  content: ""; position: absolute; width: 14px; height: 14px; border-radius: 50%;
  border: 2px solid var(--ink-4); border-top-color: var(--ink); animation: atv2-spin .8s linear infinite;
}
[data-ui="v2"] .at-btn--accent.is-loading::after, [data-ui="v2"] .at-btn--primary.is-loading::after { border-color: var(--accent-soft); border-top-color: var(--ink-inverse); }
@keyframes atv2-spin { to { transform: rotate(360deg); } }
[data-ui="v2"] .at-ib {
  width: 34px; height: 34px; border-radius: var(--radius-pill); border: 0; background: transparent;
  display: inline-flex; align-items: center; justify-content: center; color: var(--ink-3); flex: none; position: relative;
  transition: background var(--dur), color var(--dur);
}
[data-ui="v2"] .at-ib:hover { background: var(--bg-hover); color: var(--ink); }
[data-ui="v2"] .at-ib--sm { width: 28px; height: 28px; }
[data-ui="v2"] .at-ib--sm .ic { width: 16px; height: 16px; }
[data-ui="v2"] .at-ib.on { background: var(--bg-active); color: var(--ink); }
[data-ui="v2"] .at-ib__dot { position: absolute; top: 7px; right: 7px; width: 7px; height: 7px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 2px var(--bg-page); }
[data-ui="v2"] .at-btn-group { display: inline-flex; gap: 2px; padding: 3px; background: var(--bg-group); border-radius: var(--radius-pill); }
[data-ui="v2"] .at-btn-group .at-btn { --h: 28px; border: 0; }
[data-ui="v2"] .at-btn-group .at-btn:hover { background: var(--bg-hover); }
[data-ui="v2"] body.at-page .at-seg { display: inline-flex; gap: 2px; padding: 3px; background: var(--bg-group); border-radius: var(--radius-pill); }
[data-ui="v2"] body.at-page .at-seg button { border: 0; background: transparent; border-radius: var(--radius-pill); height: 28px; padding: 0 14px; font-size: 13px; color: var(--ink-3); white-space: nowrap; }
[data-ui="v2"] body.at-page .at-seg button:hover { color: var(--ink); }
[data-ui="v2"] body.at-page .at-seg button.on { background: var(--bg-raised); color: var(--ink); box-shadow: var(--shadow-sm); font-weight: 500; }
[data-ui="v2"] body.at-page .at-group .at-seg, [data-ui="v2"] body.at-page .on-overlay .at-seg { background: var(--bg-hover); }
[data-ui="v2"] .at-link { color: var(--ink-3); border: 0; background: none; padding: 0; font-size: inherit; cursor: pointer; }
[data-ui="v2"] .at-link:hover { color: var(--ink); }
[data-ui="v2"] .at-link--accent { color: var(--accent); }
/* ═════════ 3. 胶囊 / 状态标签 / 筛选胶囊 / 计数 ═════════ */
[data-ui="v2"] .at-pill {
  --c: var(--ink-2); --b: var(--bg-active);
  display: inline-flex; align-items: center; gap: 6px; height: 24px; padding: 0 10px;
  border-radius: var(--radius-pill); background: var(--b); color: var(--c);
  font-size: 12px; font-weight: 500; white-space: nowrap; line-height: 1;
}
[data-ui="v2"] .at-pill--sm { height: 20px; padding: 0 8px; font-size: 11.5px; }
[data-ui="v2"] .at-pill--accent { --c: var(--accent);  --b: var(--accent-soft); }
[data-ui="v2"] .at-pill--success { --c: var(--success); --b: var(--success-soft); }
[data-ui="v2"] .at-pill--warn { --c: var(--warn);    --b: var(--warn-soft); }
[data-ui="v2"] .at-pill--danger { --c: var(--danger);  --b: var(--danger-soft); }
[data-ui="v2"] .at-pill--info { --c: var(--info);    --b: var(--info-soft); }
[data-ui="v2"] .at-pill--dot::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
[data-ui="v2"] .at-pill--btn { cursor: pointer; border: 0; font-family: inherit; }
[data-ui="v2"] .at-pill--btn:hover { filter: brightness(.97); }
[data-ui="v2"] .at-pill .ic { width: 12px; height: 12px; }
[data-ui="v2"] .at-chip {
  display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 14px;
  border-radius: var(--radius-pill); border: 0; background: transparent; color: var(--ink-3);
  font-size: 13.5px; white-space: nowrap;
}
[data-ui="v2"] .at-chip small { color: var(--ink-4); font-size: 12px; }
[data-ui="v2"] .at-chip:hover { background: var(--bg-hover); color: var(--ink); }
[data-ui="v2"] .at-chip.on { background: var(--bg-inverse); color: var(--ink-inverse); }
[data-ui="v2"] .at-chip.on small { color: inherit; opacity: .6; }
[data-ui="v2"] .at-chip--soft { background: var(--bg-group); }
[data-ui="v2"] .at-chip--removable { background: var(--bg-group); color: var(--ink-2); padding-right: 6px; height: 28px; font-size: 12.5px; }
[data-ui="v2"] .at-chip--removable button { border: 0; background: transparent; color: var(--ink-4); width: 18px; height: 18px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; padding: 0; }
[data-ui="v2"] .at-chip--removable button:hover { background: var(--bg-hover); color: var(--ink); }
[data-ui="v2"] .at-chip:disabled { opacity: .4; pointer-events: none; }
[data-ui="v2"] .at-chips { display: flex; gap: 4px; flex-wrap: wrap; align-items: center; }
[data-ui="v2"] .at-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: var(--radius-pill); background: var(--accent); color: var(--accent-ink); font-size: 11px; font-weight: 600; }
[data-ui="v2"] .at-badge--muted { background: var(--bg-hover); color: var(--ink-3); }
/* ═════════ 4. 标签页（胶囊） ═════════ */
/* 标签页与分段控件统一为「轨道 + 抬起白块」:灰轨道底,选中项为凸起的白色胶囊 */
[data-ui="v2"] .at-tabs:not([data-active]) { display: inline-flex; gap: 2px; align-items: center; padding: 3px; max-width: 100%;
  background: var(--bg-group); border-radius: var(--radius-pill); overflow-x: auto; scrollbar-width: none; }
[data-ui="v2"] .at-tabs:not([data-active])::-webkit-scrollbar { display: none; }
[data-ui="v2"] .at-tab {
  height: 30px; padding: 0 14px; border-radius: var(--radius-pill); border: 0; background: transparent; flex: none;
  color: var(--ink-3); display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; font-size: 13.5px;
  transition: background var(--dur), color var(--dur);
}
[data-ui="v2"] .at-tab small { font-size: 12px; color: var(--ink-3); font-variant-numeric: tabular-nums; }   /* 计数用 --ink-3(--ink-4 对比度仅约 2.5) */
[data-ui="v2"] .at-tab:hover { color: var(--ink); }
[data-ui="v2"] .at-tab.on { background: var(--bg-raised); color: var(--ink); font-weight: 500; box-shadow: var(--shadow-sm); }
/* 放在分组块 / 浮层里:轨道换成再深一档,避免和块底色融在一起 */
[data-ui="v2"] .at-group .at-tabs:not([data-active]), [data-ui="v2"] .on-overlay .at-tabs:not([data-active]) { background: var(--bg-active); }
[data-ui="v2"] .at-tab.on small { color: var(--ink-3); }
/* 键盘焦点:淡灰内描边,不用强调色外框 */
[data-ui="v2"] .at-tab:focus-visible, [data-ui="v2"] body.at-page .at-seg button:focus-visible { outline: none; box-shadow: inset 0 0 0 1.5px var(--ink-4); }
[data-ui="v2"] .at-tab.on:focus-visible, [data-ui="v2"] body.at-page .at-seg button.on:focus-visible { box-shadow: var(--shadow-sm), inset 0 0 0 1.5px var(--ink-4); }
[data-ui="v2"] .at-tab.is-off { opacity: .45; pointer-events: none; }
/* ═════════ 5. 输入 / 表单行 ═════════ */
[data-ui="v2"] .at-input {
  display: flex; align-items: center; gap: 8px; height: var(--ctl-md); padding: 0 12px;
  border-radius: var(--radius); background: var(--bg-elev); color: var(--ink);
  box-shadow: inset 0 0 0 1px var(--line-2); transition: box-shadow var(--dur), background var(--dur);
}
[data-ui="v2"] .at-input:hover { box-shadow: inset 0 0 0 1px var(--ink-4); }
[data-ui="v2"] .at-input:focus-within { box-shadow: inset 0 0 0 1.5px var(--ink-2); }
[data-ui="v2"] .at-input input, [data-ui="v2"] .at-input textarea, [data-ui="v2"] .at-input select { flex: 1; min-width: 0; border: 0; outline: 0; background: transparent; color: var(--ink); padding: 0; }
[data-ui="v2"] .at-input ::placeholder { color: var(--ink-4); }
[data-ui="v2"] .at-input > .ic { color: var(--ink-4); width: 16px; height: 16px; }
[data-ui="v2"] .at-input__affix { color: var(--ink-4); font-size: 13px; white-space: nowrap; }
[data-ui="v2"] .at-input__clear { border: 0; background: var(--bg-hover); color: var(--ink-3); width: 18px; height: 18px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; padding: 0; }
[data-ui="v2"] .at-input--pill { border-radius: var(--radius-pill); background: var(--bg-group); box-shadow: none; }
[data-ui="v2"] .at-input--pill:hover { box-shadow: none; background: var(--bg-hover); }
[data-ui="v2"] .at-input--pill:focus-within { background: var(--bg-elev); box-shadow: inset 0 0 0 1.5px var(--ink-2); }
[data-ui="v2"] .at-input--num input { text-align: right; font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
[data-ui="v2"] .at-input--area { height: auto; padding: 10px 12px; align-items: flex-start; }
[data-ui="v2"] .at-input--area textarea { resize: vertical; min-height: 72px; line-height: 1.6; }
[data-ui="v2"] .at-input.is-error { box-shadow: inset 0 0 0 1.5px var(--danger); }
[data-ui="v2"] .at-input.is-disabled { background: var(--bg-group); box-shadow: none; color: var(--ink-4); }
[data-ui="v2"] .at-input.is-disabled input { color: var(--ink-4); cursor: not-allowed; }
[data-ui="v2"] .at-input.is-readonly { background: transparent; box-shadow: none; padding-left: 0; }
[data-ui="v2"] .at-input--sm { height: var(--ctl-sm); font-size: 13px; }
[data-ui="v2"] .at-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
[data-ui="v2"] .at-field__label { font-size: 13px; font-weight: 500; color: var(--ink-2); display: flex; align-items: center; gap: 4px; }
[data-ui="v2"] .at-field__label .req { color: var(--ink-4); }
[data-ui="v2"] .at-field__help { font-size: 12px; color: var(--ink-4); }
[data-ui="v2"] .at-field__err { font-size: 12px; color: var(--danger); }
[data-ui="v2"] .at-form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px 16px; }
[data-ui="v2"] .at-form-grid .span-2 { grid-column: span 2; }
/* ═════════ 6. 分组 / 设置行 / 卡片 ═════════ */
[data-ui="v2"] .at-group { background: var(--bg-group); border-radius: var(--radius-lg); overflow: hidden; }
[data-ui="v2"] .at-group--pad { padding: var(--sp-5); }
[data-ui="v2"] .at-group__hd { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 16px 18px 6px; }
[data-ui="v2"] .at-group__hd h3 { font-size: 14px; font-weight: 600; }
[data-ui="v2"] .at-group__hd small { color: var(--ink-4); font-size: 12px; font-weight: 400; margin-left: 6px; }
[data-ui="v2"] .at-group__bd { padding: 6px 18px 18px; }
/* 设置行（ChatGPT 设置页式：左名称右控件） */
[data-ui="v2"] .at-srow { display: flex; align-items: center; gap: var(--sp-4); min-height: 54px; padding: 10px 18px; }
[data-ui="v2"] .at-srow + .at-srow { box-shadow: inset 0 1px 0 var(--seam); }
[data-ui="v2"] .at-srow__lab { flex: 1; min-width: 0; }
[data-ui="v2"] .at-srow__lab small { display: block; font-size: 12px; color: var(--ink-4); margin-top: 1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
[data-ui="v2"] .at-srow__val { color: var(--ink-2); display: flex; align-items: center; gap: 8px; justify-content: flex-end; min-width: 0; }
[data-ui="v2"] .at-srow--link { cursor: pointer; }
[data-ui="v2"] .at-srow--link:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-srow--link .at-srow__val::after { content: "›"; color: var(--ink-4); font-size: 16px; margin-left: 2px; }
[data-ui="v2"] .at-srow--danger .at-srow__lab { color: var(--danger); }
[data-ui="v2"] .at-more { display: inline-flex; align-items: center; gap: 6px; margin: var(--sp-5) 2px var(--sp-2); color: var(--ink-3); font-size: 13.5px; cursor: pointer; border: 0; background: none; padding: 0; }
[data-ui="v2"] .at-more::after { content: "›"; font-size: 16px; transition: transform var(--dur); }
[data-ui="v2"] .at-more.is-open::after { transform: rotate(90deg); }
[data-ui="v2"] .at-more:hover { color: var(--ink); }
/* 卡片（白底，抬起一档；用于可点的对象卡，比如课程卡、看板卡） */
[data-ui="v2"] .at-card { background: var(--bg-elev); border-radius: var(--radius-lg); padding: var(--sp-5); }
[data-ui="v2"] .at-card--hover { cursor: pointer; transition: transform var(--dur), box-shadow var(--dur); }
[data-ui="v2"] .at-card--hover:hover { transform: translateY(-1px); box-shadow: var(--shadow-pop); }
/* 统计卡 */
[data-ui="v2"] .at-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; }
[data-ui="v2"] .at-stat { background: var(--bg-group); border-radius: var(--radius-lg); padding: 16px 18px; min-width: 0; }
[data-ui="v2"] .at-stat__lab { font-size: 12.5px; color: var(--ink-3); }
[data-ui="v2"] .at-stat__val { font-size: 24px; font-weight: 600; margin-top: 6px; font-variant-numeric: tabular-nums; letter-spacing: -.01em; white-space: nowrap; }
[data-ui="v2"] .at-stat__val small { font-size: 13px; font-weight: 500; color: var(--ink-3); margin-left: 3px; }
[data-ui="v2"] .at-stat__sub { font-size: 12px; color: var(--ink-4); margin-top: 2px; }
[data-ui="v2"] .at-delta-up { color: var(--success); }
[data-ui="v2"] .at-delta-down { color: var(--danger); }
/* 键值信息 */
[data-ui="v2"] .at-kv { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 10px 14px; font-size: 13.5px; }
[data-ui="v2"] .at-kv dt { color: var(--ink-3); }
[data-ui="v2"] .at-kv dd { margin: 0; color: var(--ink); min-width: 0; display: flex; align-items: center; gap: 6px; }
[data-ui="v2"] .at-kv dd.is-empty { color: var(--ink-4); }
/* 列表行（非表格） */
[data-ui="v2"] .at-list { padding: 6px; }
[data-ui="v2"] .at-li { display: flex; align-items: center; gap: 14px; padding: 11px 12px; border-radius: var(--radius-md); min-width: 0; }
[data-ui="v2"] .at-li:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-li__main { flex: 1; min-width: 0; }
[data-ui="v2"] .at-li__main b { display: block; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
[data-ui="v2"] .at-li__main small { display: block; color: var(--ink-4); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
[data-ui="v2"] .at-li__side { flex: none; text-align: right; font-size: 12.5px; color: var(--ink-3); }
/* ═════════ 7. 选择 / 浮层 / 菜单 ═════════ */
[data-ui="v2"] .at-select {
  display: inline-flex; align-items: center; gap: 8px; height: var(--ctl-md); padding: 0 12px 0 14px;
  border-radius: var(--radius-pill); background: var(--bg-group); border: 0; color: var(--ink); white-space: nowrap; max-width: 100%;
}
[data-ui="v2"] .at-select:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-select__ph { color: var(--ink-4); }
[data-ui="v2"] .at-select::after { content: ""; width: 6px; height: 6px; border-right: 1.5px solid var(--ink-3); border-bottom: 1.5px solid var(--ink-3); transform: rotate(45deg) translateY(-2px); margin-left: 2px; flex: none; }
[data-ui="v2"] .at-select--block { display: flex; width: 100%; border-radius: var(--radius); background: var(--bg-elev); box-shadow: inset 0 0 0 1px var(--line-2); justify-content: space-between; }
[data-ui="v2"] .at-select--block:hover { background: var(--bg-elev); box-shadow: inset 0 0 0 1px var(--ink-4); }
[data-ui="v2"] .at-select--sm { height: var(--ctl-sm); font-size: 13px; }
[data-ui="v2"] .at-select-native { appearance: none; -webkit-appearance: none; height: var(--ctl-md); padding: 0 32px 0 14px; border-radius: var(--radius-pill); border: 0; background: var(--bg-group); color: var(--ink); }
[data-ui="v2"] .at-pop-anchor { position: relative; display: inline-block; }
[data-ui="v2"] .at-pop {
  position: absolute; top: calc(100% + 6px); left: 0; z-index: var(--z-dropdown);
  min-width: 220px; background: var(--bg-elev); border-radius: var(--radius-md); box-shadow: var(--shadow-pop); padding: 6px;
}
[data-ui="v2"] .at-pop--right { left: auto; right: 0; }
[data-ui="v2"] .at-pop--static { position: static; box-shadow: var(--shadow-pop); }
[data-ui="v2"] .at-pop__search { display: flex; align-items: center; gap: 8px; height: 34px; padding: 0 10px; margin-bottom: 4px; border-radius: var(--radius-sm); background: var(--bg-group); color: var(--ink-4); }
[data-ui="v2"] .at-pop__search input { flex: 1; min-width: 0; border: 0; outline: 0; background: transparent; color: var(--ink); }
[data-ui="v2"] .at-pop__group { font-size: 11.5px; color: var(--ink-4); padding: 8px 10px 4px; }
[data-ui="v2"] .at-pop__body { max-height: 280px; overflow: auto; }
[data-ui="v2"] .at-pop__foot { display: flex; justify-content: flex-end; gap: 6px; padding: 8px 4px 2px; }
[data-ui="v2"] .at-opt { display: flex; align-items: center; gap: 10px; min-height: 34px; padding: 6px 10px; border-radius: var(--radius-sm); cursor: pointer; color: var(--ink); white-space: nowrap; }
[data-ui="v2"] .at-opt:hover, [data-ui="v2"] .at-opt.is-hl { background: var(--bg-hover); }
[data-ui="v2"] .at-opt.on { font-weight: 500; }
[data-ui="v2"] .at-opt.on::after { content: ""; margin-left: auto; width: 10px; height: 5px; border-left: 1.6px solid var(--accent); border-bottom: 1.6px solid var(--accent); transform: rotate(-45deg) translateY(-2px); }
[data-ui="v2"] .at-opt small { color: var(--ink-4); font-size: 12px; margin-left: auto; }
[data-ui="v2"] .at-opt--danger { color: var(--danger); }
[data-ui="v2"] .at-opt .ic { width: 16px; height: 16px; color: var(--ink-3); }
[data-ui="v2"] .at-opt--danger .ic { color: var(--danger); }
[data-ui="v2"] .at-pop__gap { height: 6px; }
[data-ui="v2"] .at-pop__state { padding: 18px 10px; text-align: center; color: var(--ink-4); font-size: 12.5px; }
[data-ui="v2"] .at-menu { position: absolute; z-index: var(--z-dropdown); top: calc(100% + 6px); right: 0; min-width: 200px; background: var(--bg-elev); border-radius: var(--radius-md); box-shadow: var(--shadow-pop); padding: 6px; }
/* 人员 */
[data-ui="v2"] .at-avatar {
  --s: 28px; width: var(--s); height: var(--s); border-radius: 50%; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--bg-active); color: var(--ink-2); font-size: calc(var(--s) * .42); font-weight: 500;
}
[data-ui="v2"] .at-avatar--xs { --s: 20px; }
[data-ui="v2"] .at-avatar--sm { --s: 24px; }
[data-ui="v2"] .at-avatar--lg { --s: 40px; }
[data-ui="v2"] .at-avatar--a { background: var(--accent-soft); color: var(--accent); }
[data-ui="v2"] .at-avatar--b { background: var(--info-soft); color: var(--info); }
[data-ui="v2"] .at-avatar--c { background: var(--success-soft); color: var(--success); }
[data-ui="v2"] .at-avatar--d { background: var(--warn-soft); color: var(--warn); }
[data-ui="v2"] .at-person { display: inline-flex; align-items: center; gap: 8px; min-width: 0; }
[data-ui="v2"] .at-person small { color: var(--ink-4); font-size: 12px; }
[data-ui="v2"] .at-avatars { display: inline-flex; }
[data-ui="v2"] .at-avatars .at-avatar { box-shadow: 0 0 0 2px var(--bg-group); }
[data-ui="v2"] .at-avatars .at-avatar + .at-avatar { margin-left: -6px; }
/* 复选 / 单选 / 开关 */
[data-ui="v2"] .at-check, [data-ui="v2"] .at-radio { position: relative; display: inline-flex; align-items: center; gap: 8px; cursor: pointer; user-select: none; }
[data-ui="v2"] .at-check input, [data-ui="v2"] .at-radio input { position: absolute; opacity: 0; pointer-events: none; }
[data-ui="v2"] .at-check__box { width: 16px; height: 16px; border-radius: 5px; box-shadow: inset 0 0 0 1.5px var(--ink-4); background: var(--bg-elev); display: inline-flex; align-items: center; justify-content: center; flex: none; transition: background var(--dur), box-shadow var(--dur); }
[data-ui="v2"] .at-check input:checked + .at-check__box, [data-ui="v2"] .at-check.is-mixed .at-check__box { background: var(--bg-inverse); box-shadow: none; }
[data-ui="v2"] .at-check input:checked + .at-check__box::after { content: ""; width: 8px; height: 4px; border-left: 1.8px solid var(--ink-inverse); border-bottom: 1.8px solid var(--ink-inverse); transform: rotate(-45deg) translate(1px, -1px); }
[data-ui="v2"] .at-check.is-mixed .at-check__box::after { content: ""; width: 8px; height: 1.8px; background: var(--ink-inverse); border-radius: 2px; }
[data-ui="v2"] .at-radio__dot { width: 16px; height: 16px; border-radius: 50%; box-shadow: inset 0 0 0 1.5px var(--ink-4); background: var(--bg-elev); flex: none; display: inline-flex; align-items: center; justify-content: center; }
[data-ui="v2"] .at-radio input:checked + .at-radio__dot { box-shadow: inset 0 0 0 5px var(--bg-inverse); }
[data-ui="v2"] .at-check.is-disabled, [data-ui="v2"] .at-radio.is-disabled { opacity: .45; pointer-events: none; }
[data-ui="v2"] .at-switch { width: 38px; height: 22px; border-radius: var(--radius-pill); background: var(--line-2); position: relative; border: 0; padding: 0; flex: none; transition: background var(--dur); }
[data-ui="v2"][data-theme="dark"] .at-switch { background: var(--bg-active); }
[data-ui="v2"] .at-switch::after { content: ""; position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--knob); box-shadow: var(--shadow-sm); transition: left var(--dur) var(--ease); }
[data-ui="v2"] .at-switch.on, [data-ui="v2"][data-theme="dark"] .at-switch.on { background: var(--accent); }
[data-ui="v2"] .at-switch.on::after { left: 18px; }
[data-ui="v2"] .at-switch--sm { width: 30px; height: 18px; }
[data-ui="v2"] .at-switch--sm::after { width: 14px; height: 14px; }
[data-ui="v2"] .at-switch--sm.on::after { left: 14px; }
[data-ui="v2"] .at-switch:disabled { opacity: .4; cursor: not-allowed; }
/* 树形多选 */
[data-ui="v2"] .at-tree-row { display: flex; align-items: center; gap: 8px; min-height: 32px; padding: 4px 8px; border-radius: var(--radius-sm); }
[data-ui="v2"] .at-tree-row:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-tree-row .tw { width: 14px; color: var(--ink-4); display: inline-flex; }
[data-ui="v2"] .at-tree-row small { margin-left: auto; color: var(--ink-4); font-size: 12px; }
[data-ui="v2"] .at-tree-l1 { padding-left: 26px; }
[data-ui="v2"] .at-tree-l2 { padding-left: 48px; }
/* 日期 */
[data-ui="v2"] .at-cal { width: 264px; padding: 8px 6px 4px; }
[data-ui="v2"] .at-cal__hd { display: flex; align-items: center; justify-content: space-between; padding: 0 4px 8px; font-weight: 500; }
[data-ui="v2"] .at-cal__grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; text-align: center; font-size: 12.5px; }
[data-ui="v2"] .at-cal__grid span { height: 32px; display: flex; align-items: center; justify-content: center; border-radius: var(--radius-pill); }
[data-ui="v2"] .at-cal__grid .wk { color: var(--ink-4); font-size: 11.5px; height: 24px; }
[data-ui="v2"] .at-cal__grid .d { cursor: pointer; }
[data-ui="v2"] .at-cal__grid .d:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-cal__grid .out { color: var(--ink-4); }
[data-ui="v2"] .at-cal__grid .today { color: var(--accent); font-weight: 600; }
[data-ui="v2"] .at-cal__grid .sel { background: var(--bg-inverse); color: var(--ink-inverse); }
[data-ui="v2"] .at-cal__grid .rng { background: var(--bg-group); border-radius: 0; }
[data-ui="v2"] .at-cal__grid .rng-s { background: var(--bg-inverse); color: var(--ink-inverse); border-radius: var(--radius-pill) 0 0 var(--radius-pill); }
[data-ui="v2"] .at-cal__grid .rng-e { background: var(--bg-inverse); color: var(--ink-inverse); border-radius: 0 var(--radius-pill) var(--radius-pill) 0; }
[data-ui="v2"] .at-cal__foot { display: flex; justify-content: space-between; padding: 8px 4px 2px; font-size: 12.5px; }
[data-ui="v2"] .at-months { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; width: 240px; padding: 6px; }
[data-ui="v2"] .at-months span { height: 34px; display: flex; align-items: center; justify-content: center; border-radius: var(--radius-pill); cursor: pointer; font-size: 13px; }
[data-ui="v2"] .at-months span:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-months .sel { background: var(--bg-inverse); color: var(--ink-inverse); }
[data-ui="v2"] .at-times { display: flex; gap: 4px; padding: 4px; }
[data-ui="v2"] .at-times > div { width: 64px; max-height: 196px; overflow: auto; }
[data-ui="v2"] .at-times span { display: block; text-align: center; height: 30px; line-height: 30px; border-radius: var(--radius-sm); font-size: 13px; cursor: pointer; font-variant-numeric: tabular-nums; }
[data-ui="v2"] .at-times span:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-times .sel { background: var(--bg-inverse); color: var(--ink-inverse); }
/* ═════════ 8. 数据表格 / 筛选 / 分页 ═════════ */
[data-ui="v2"] .at-toolbar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: var(--sp-4); }
[data-ui="v2"] .at-toolbar .at-input { width: 280px; }
[data-ui="v2"] .at-table-wrap { background: var(--bg-group); border-radius: var(--radius-lg); overflow: auto; }
[data-ui="v2"] .at-table { width: 100%; font-size: 13.5px; }
[data-ui="v2"] .at-table th {
  text-align: left; font-weight: 500; font-size: 12px; color: var(--ink-3); padding: 12px 14px 10px; white-space: nowrap;
  position: sticky; top: 0; background: var(--bg-group); z-index: 1;
}
[data-ui="v2"] .at-table td { padding: 0 14px; height: var(--row-h); white-space: nowrap; vertical-align: middle; }
[data-ui="v2"] .at-table tbody tr { box-shadow: inset 0 1px 0 var(--seam); transition: background var(--dur); }
[data-ui="v2"] .at-table tbody tr:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-table tbody tr.is-sel { background: var(--accent-tint); }
[data-ui="v2"] .at-table .r { text-align: right; }
[data-ui="v2"] .at-table .c { text-align: center; }
[data-ui="v2"] .at-table .w-check { width: 44px; padding-right: 0; }
[data-ui="v2"] .at-table .w-act { width: 48px; }
[data-ui="v2"] .at-table td .t-main { font-weight: 500; }
[data-ui="v2"] .at-table td .t-sub { display: block; font-size: 12px; color: var(--ink-4); }
[data-ui="v2"] .at-table a.t-main:hover { color: var(--accent); }
[data-ui="v2"] .at-th-sort { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; border: 0; background: none; padding: 0; color: inherit; font: inherit; }
[data-ui="v2"] .at-th-sort::after { content: "↕"; font-size: 10px; opacity: .45; }
[data-ui="v2"] .at-th-sort.is-asc::after { content: "↑"; opacity: 1; color: var(--ink); }
[data-ui="v2"] .at-th-sort.is-desc::after { content: "↓"; opacity: 1; color: var(--ink); }
[data-ui="v2"] .at-th-sort.is-asc, [data-ui="v2"] .at-th-sort.is-desc { color: var(--ink); }
[data-ui="v2"] .at-row-act { opacity: 0; transition: opacity var(--dur); }
[data-ui="v2"] tr:hover .at-row-act, [data-ui="v2"] .at-row-act.is-open, [data-ui="v2"] .at-row-act:focus-visible { opacity: 1; }
[data-ui="v2"] .at-table .w-act { width: 44px; padding-left: 0; padding-right: 8px; text-align: right; }
[data-ui="v2"] .at-row-menu { position: fixed; right: auto; min-width: 168px; z-index: 60; }
@media (hover: none) {
[data-ui="v2"] .at-row-act { opacity: 1; }
}
/* 触屏无悬停:常显 */
[data-ui="v2"] .at-table--mini td { height: 44px; font-size: 13px; }
[data-ui="v2"] .at-table--mini th { padding-top: 8px; }
/* 可编辑明细表 */
[data-ui="v2"] .at-table--edit td { padding: 0 6px; }
[data-ui="v2"] .at-table--edit td:first-child { padding-left: 14px; }
[data-ui="v2"] .at-cell-input { width: 100%; height: 30px; border: 0; border-radius: var(--radius-sm); background: transparent; padding: 0 8px; color: var(--ink); outline: 0; }
[data-ui="v2"] .at-cell-input:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-cell-input:focus { background: var(--bg-elev); box-shadow: inset 0 0 0 1.5px var(--ink-2); }
[data-ui="v2"] .at-cell-input.r { text-align: right; font-family: var(--font-mono); }
/* 批量操作条 */
[data-ui="v2"] .at-batchbar {
  position: sticky; bottom: 20px; margin: 16px auto 0; width: max-content; max-width: 100%;
  display: flex; align-items: center; gap: 6px; padding: 6px 6px 6px 18px; border-radius: var(--radius-pill);
  background: var(--bg-inverse); color: var(--ink-inverse); box-shadow: var(--shadow-modal); z-index: var(--z-sticky); font-size: 13px;
}
[data-ui="v2"] .at-batchbar .at-btn { color: var(--ink-inverse); --h: 30px; }
[data-ui="v2"] .at-batchbar .at-btn:hover { background: color-mix(in srgb, var(--ink-inverse) 14%, transparent); }
[data-ui="v2"] .at-batchbar .sep { width: 10px; }
/* 筛选面板 */
[data-ui="v2"] .at-filter-pop { width: 340px; padding: 14px; }
[data-ui="v2"] .at-filter-pop .at-field + .at-field { margin-top: 14px; }
[data-ui="v2"] .at-applied { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin: -6px 0 var(--sp-4); font-size: 12.5px; color: var(--ink-4); }
/* 分页 */
[data-ui="v2"] .at-pager { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 4px 0; font-size: 12.5px; color: var(--ink-3); flex-wrap: wrap; }
[data-ui="v2"] .at-pager__nav { display: flex; align-items: center; gap: 4px; }
[data-ui="v2"] .at-pager__nav .at-ib { width: 30px; height: 30px; }
[data-ui="v2"] .at-pager__nav span { padding: 0 8px; font-variant-numeric: tabular-nums; color: var(--ink-2); }
[data-ui="v2"] .at-loadmore { display: flex; justify-content: center; padding: 16px 0 0; }
/* 空状态 */
[data-ui="v2"] .at-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; padding: 48px 20px; color: var(--ink-4); text-align: center; }
[data-ui="v2"] .at-empty .ic { width: 34px; height: 34px; stroke-width: 1.2; margin-bottom: 8px; }
[data-ui="v2"] .at-empty b { color: var(--ink); font-weight: 500; font-size: 15px; }
[data-ui="v2"] .at-empty .at-btn { margin-top: 12px; }
[data-ui="v2"] .at-empty--sm { padding: 24px 12px; }
[data-ui="v2"] .at-empty--sm .ic { width: 24px; height: 24px; margin-bottom: 2px; }
[data-ui="v2"] .at-empty--sm b { font-size: 13.5px; }
/* 骨架屏 / 加载 */
[data-ui="v2"] .at-skel { display: block; height: 12px; border-radius: var(--radius-xs); background: linear-gradient(90deg, var(--bg-hover) 0%, var(--bg-active) 50%, var(--bg-hover) 100%); background-size: 200% 100%; animation: atv2-shimmer 1.4s ease-in-out infinite; }
@keyframes atv2-shimmer { from { background-position: 100% 0; } to { background-position: -100% 0; } }
[data-ui="v2"] .at-spinner { width: 18px; height: 18px; border-radius: 50%; border: 2px solid var(--bg-active); border-top-color: var(--ink-2); animation: atv2-spin .8s linear infinite; display: inline-block; }
/* 进度条 */
[data-ui="v2"] .at-progress { height: 4px; border-radius: 4px; background: var(--bg-active); overflow: hidden; width: 100%; }
[data-ui="v2"] .at-progress > i { display: block; height: 100%; background: var(--ink); border-radius: 4px; transition: width 300ms var(--ease); }
[data-ui="v2"] .at-progress--accent > i { background: var(--accent); }
[data-ui="v2"] .at-progress--ok > i { background: var(--success); }
[data-ui="v2"] .at-progress--warn > i { background: var(--warn); }
[data-ui="v2"] .at-progress--lg { height: 8px; }
/* ═════════ 9. 弹窗 / 抽屉 / Toast ═════════ */
[data-ui="v2"] .at-mask {
  position: fixed; inset: 0; background: var(--bg-mask); z-index: var(--z-modal);
  display: flex; align-items: center; justify-content: center; padding: 24px;
  animation: atv2-fade var(--dur) var(--ease);
}
@keyframes atv2-fade { from { opacity: 0; } }
@keyframes atv2-rise { from { opacity: 0; transform: translateY(8px) scale(.985); } }
@keyframes atv2-slide { from { transform: translateX(24px); opacity: 0; } }
[data-ui="v2"] .at-dlg {
  width: 100%; max-width: 580px; max-height: calc(100vh - 48px); display: flex; flex-direction: column;
  background: var(--bg-elev); border-radius: var(--radius-xl); box-shadow: var(--shadow-modal);
  animation: atv2-rise 200ms var(--ease);
}
[data-ui="v2"] .at-dlg--sm { max-width: 420px; }
[data-ui="v2"] .at-dlg--lg { max-width: 800px; }
[data-ui="v2"] .at-dlg--xl { max-width: 1040px; }
[data-ui="v2"] .at-dlg__hd { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 22px 26px 8px; flex: none; }
[data-ui="v2"] .at-dlg__hd h3 { font-size: 19px; font-weight: 600; }
[data-ui="v2"] .at-dlg__hd p { font-size: 13px; color: var(--ink-3); margin-top: 2px; }
[data-ui="v2"] .at-dlg__bd { padding: 10px 26px 6px; overflow: auto; flex: 1; min-height: 0; }
[data-ui="v2"] .at-dlg__ft { display: flex; align-items: center; justify-content: flex-end; gap: 8px; padding: 18px 26px 22px; flex: none; }
[data-ui="v2"] .at-dlg__ft .note { margin-right: auto; font-size: 12.5px; color: var(--ink-4); }
[data-ui="v2"] .at-dlg__sec { margin: 20px 2px 8px; font-size: 13px; font-weight: 600; color: var(--ink-3); }
[data-ui="v2"] .at-dlg__sec:first-child { margin-top: 4px; }
[data-ui="v2"] .at-confirm { text-align: left; }
[data-ui="v2"] .at-confirm__icon { width: 40px; height: 40px; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-bottom: 14px; background: var(--accent-soft); color: var(--accent); }
[data-ui="v2"] .at-confirm__icon--danger { background: var(--danger-soft); color: var(--danger); }
[data-ui="v2"] .at-confirm__icon--warn { background: var(--warn-soft); color: var(--warn); }
[data-ui="v2"] .at-confirm h3 { font-size: 17px; }
[data-ui="v2"] .at-confirm p { color: var(--ink-3); margin-top: 6px; }
/* ATConfirm(at-confirm.js)新外观输出:浮在其他弹窗之上;说明文字保留 \n 换行;可选输入区 / 勾选区 */
[data-ui="v2"] .at-confirm-mask { z-index: 10000; }
[data-ui="v2"] .at-confirm-mask .at-confirm { padding-top: 26px; }
[data-ui="v2"] .at-confirm-mask .at-confirm p { white-space: pre-line; line-height: 1.6; }
[data-ui="v2"] .at-confirm__field { margin-top: 16px; }
[data-ui="v2"] .at-confirm__chk { margin-top: 12px; font-size: 13px; color: var(--ink-2); }
[data-ui="v2"] .at-drawer-mask { position: fixed; inset: 0; background: var(--bg-mask); z-index: var(--z-drawer); animation: atv2-fade var(--dur); }
[data-ui="v2"] .at-drawer {
  position: fixed; top: 8px; right: 8px; bottom: 8px; width: 480px; max-width: calc(100vw - 16px); z-index: calc(var(--z-drawer) + 1);
  background: var(--bg-elev); border-radius: var(--radius-xl); box-shadow: var(--shadow-modal);
  display: flex; flex-direction: column; animation: atv2-slide 220ms var(--ease);
}
[data-ui="v2"] .at-drawer--lg { width: 640px; }
[data-ui="v2"] .at-toasts { position: fixed; top: 16px; left: 50%; transform: translateX(-50%); z-index: var(--z-toast); display: flex; flex-direction: column; gap: 8px; align-items: center; pointer-events: none; }
[data-ui="v2"] .at-toast {
  display: flex; align-items: flex-start; gap: 10px; min-width: 260px; max-width: 440px; padding: 11px 16px 11px 14px;
  border-radius: var(--radius-md); background: var(--bg-inverse); color: var(--ink-inverse); box-shadow: var(--shadow-pop);
  font-size: 13.5px; pointer-events: auto; animation: atv2-rise 200ms var(--ease);
}
[data-ui="v2"] .at-toast small { display: block; opacity: .7; font-size: 12.5px; margin-top: 1px; }
[data-ui="v2"] .at-toast__ic { width: 18px; height: 18px; border-radius: 50%; flex: none; display: flex; align-items: center; justify-content: center; margin-top: 1px; }
[data-ui="v2"] .at-toast--success .at-toast__ic { color: var(--success); }
[data-ui="v2"] .at-toast--info .at-toast__ic { color: var(--info); }
[data-ui="v2"] .at-toast--warn .at-toast__ic { color: var(--warn); }
[data-ui="v2"] .at-toast--error .at-toast__ic { color: var(--danger); }
[data-ui="v2"][data-theme="dark"] .at-toast--success .at-toast__ic { color: var(--success-soft); }
[data-ui="v2"][data-theme="dark"] .at-toast--info .at-toast__ic { color: var(--info-soft); }
[data-ui="v2"][data-theme="dark"] .at-toast--warn .at-toast__ic { color: var(--warn-soft); }
[data-ui="v2"][data-theme="dark"] .at-toast--error .at-toast__ic { color: var(--danger-soft); }
[data-ui="v2"] .at-toast.is-static { animation: none; }
/* at-toast.js 的 v2 分支:正文 + 关闭按钮(堆叠容器沿用 #at-toast-stack,加 .at-toasts 类;z-index 压过弹窗) */
[data-ui="v2"] #at-toast-stack.at-toasts { z-index: 9999; }
[data-ui="v2"] .at-toast__main { flex: 1; min-width: 0; line-height: 1.45; }
[data-ui="v2"] .at-toast__x { flex: none; border: 0; background: transparent; color: inherit; opacity: .55; cursor: pointer;
  width: 20px; height: 20px; margin: -1px -6px 0 0; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; padding: 0; }
[data-ui="v2"] .at-toast__x:hover { opacity: 1; background: color-mix(in srgb, var(--ink-inverse) 14%, transparent); }
/* 提示气泡 */
[data-ui="v2"] .at-tip { position: relative; display: inline-flex; }
[data-ui="v2"] .at-tip::after {
  content: attr(data-tip); position: absolute; bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%) translateY(4px);
  background: var(--bg-inverse); color: var(--ink-inverse); font-size: 12px; padding: 5px 9px; border-radius: var(--radius-sm);
  white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity var(--dur), transform var(--dur); z-index: var(--z-dropdown);
}
[data-ui="v2"] .at-tip:hover::after { opacity: 1; transform: translateX(-50%); }
/* 朝下的气泡(顶栏图标等贴顶元素);键盘聚焦同样显示。新外观悬停提示一律用 .at-tip,不用浏览器原生 title */
[data-ui="v2"] .at-tip--below::after { bottom: auto; top: calc(100% + 8px); transform: translateX(-50%) translateY(-4px); }
[data-ui="v2"] .at-tip:focus-visible::after { opacity: 1; transform: translateX(-50%); }
/* 全站统一悬停提示(at-ui-v2.js §14 把原生 title 换成这个浮动气泡;样式同 .at-tip) */
.at-tipfloat { position: fixed; z-index: 2147483000; max-width: 280px; padding: 5px 9px; border-radius: var(--radius-sm);
  background: var(--bg-inverse); color: var(--ink-inverse); font-size: 12px; line-height: 1.45; white-space: pre-line; word-break: break-word;
  pointer-events: none; opacity: 0; transform: translateY(2px); transition: opacity var(--dur), transform var(--dur); }
.at-tipfloat.is-on { opacity: 1; transform: none; }
/* ═════════ 10. 文件 ═════════ */
[data-ui="v2"] .at-drop { border: 1.5px dashed var(--line-2); border-radius: var(--radius-lg); padding: 48px 24px; text-align: center; cursor: pointer; transition: background var(--dur), border-color var(--dur); }
[data-ui="v2"] .at-drop:hover, [data-ui="v2"] .at-drop.is-over { border-color: var(--accent); background: var(--accent-tint); }
[data-ui="v2"] .at-drop b { font-size: 18px; font-weight: 600; display: block; }
[data-ui="v2"] .at-drop b span { color: var(--accent); }
[data-ui="v2"] .at-drop small { display: block; margin-top: 8px; font-size: 12.5px; color: var(--ink-4); letter-spacing: .3px; }
[data-ui="v2"] .at-file { display: flex; align-items: center; gap: 14px; padding: 12px 14px; border-radius: var(--radius-md); background: var(--bg-group); min-width: 0; }
[data-ui="v2"] .at-file + .at-file { margin-top: 6px; }
[data-ui="v2"] .at-file__ic { width: 36px; height: 36px; border-radius: 9px; background: var(--bg-elev); flex: none; display: flex; align-items: center; justify-content: center; font-size: 10.5px; font-weight: 600; color: var(--ink-3); letter-spacing: .3px; }
[data-ui="v2"] .on-overlay .at-file__ic { background: var(--bg-elev); }
[data-ui="v2"] .at-file__main { flex: 1; min-width: 0; }
[data-ui="v2"] .at-file__main b { display: block; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
[data-ui="v2"] .at-file__main small { font-size: 12.5px; color: var(--ink-3); }
[data-ui="v2"] .at-file__main .at-progress { margin-top: 6px; }
[data-ui="v2"] .at-file.is-error small { color: var(--danger); }
[data-ui="v2"] .at-preview { display: grid; grid-template-columns: minmax(0, 1fr) 260px; gap: 0; height: min(68vh, 620px); }
[data-ui="v2"] .at-preview__stage { background: var(--bg-group); border-radius: var(--radius-lg); display: flex; align-items: center; justify-content: center; overflow: hidden; }
[data-ui="v2"] .at-preview__page { width: 62%; aspect-ratio: 1 / 1.414; background: var(--bg-elev); border-radius: var(--radius-sm); box-shadow: var(--shadow-pop); padding: 8%; display: flex; flex-direction: column; gap: 10px; }
[data-ui="v2"] .at-preview__page i { display: block; height: 7px; border-radius: 3px; background: var(--bg-active); }
[data-ui="v2"] .at-preview__side { padding: 4px 0 0 20px; display: flex; flex-direction: column; gap: 12px; font-size: 13px; }
/* ═════════ 11. 审批 / 阶段 / 时间线 ═════════ */
[data-ui="v2"] .at-tl { position: relative; }
[data-ui="v2"] .at-tl__item { position: relative; display: flex; gap: 12px; padding-bottom: 18px; }
[data-ui="v2"] .at-tl__item:last-child { padding-bottom: 0; }
[data-ui="v2"] .at-tl__item::before { content: ""; position: absolute; left: 11px; top: 26px; bottom: 2px; width: 2px; border-radius: 2px; background: var(--bg-active); }
[data-ui="v2"] .at-tl__item:last-child::before { display: none; }
[data-ui="v2"] .at-tl__dot { width: 24px; height: 24px; border-radius: 50%; flex: none; display: flex; align-items: center; justify-content: center; background: var(--bg-active); color: var(--ink-3); position: relative; z-index: 1; }
[data-ui="v2"] .at-tl__dot .ic { width: 13px; height: 13px; stroke-width: 2.2; }
[data-ui="v2"] .at-tl__item.is-done .at-tl__dot { background: var(--success-soft); color: var(--success); }
[data-ui="v2"] .at-tl__item.is-done::before { background: var(--success-soft); }
[data-ui="v2"] .at-tl__item.is-rejected .at-tl__dot { background: var(--danger-soft); color: var(--danger); }
[data-ui="v2"] .at-tl__item.is-current .at-tl__dot { background: var(--accent); color: var(--accent-ink); box-shadow: 0 0 0 4px var(--accent-soft); animation: atv2-pulse 2s ease-in-out infinite; }
@keyframes atv2-pulse { 50% { box-shadow: 0 0 0 7px var(--accent-tint); } }
[data-ui="v2"] .at-tl__body { flex: 1; min-width: 0; padding-top: 2px; }
[data-ui="v2"] .at-tl__title { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-weight: 500; }
[data-ui="v2"] .at-tl__meta { font-size: 12px; color: var(--ink-4); margin-top: 2px; }
[data-ui="v2"] .at-tl__note { margin-top: 8px; padding: 10px 12px; border-radius: var(--radius-md); background: var(--bg-elev); font-size: 13px; color: var(--ink-2); }
[data-ui="v2"] .on-overlay .at-tl__note, [data-ui="v2"] .at-group .at-tl__note { background: var(--bg-page); }
[data-ui="v2"] .at-tl__acts { display: flex; gap: 6px; margin-top: 10px; }
/* 阶段进度条:首尾节点贴两侧(space-between),节点等宽 → 圆心等距;
   底轨与进度线由容器伪元素绘制,进度长度 = 跨度 × k/(n-1)(--n 节点数、--k 当前节点序号,由 shell.js 自动写入) */
[data-ui="v2"] .at-stage { --dot: 40px; --node: 60px; --px: 16px; --py: 16px;
  position: relative; display: flex; justify-content: space-between; align-items: flex-start;
  background: var(--bg-group); border-radius: var(--radius-lg); padding: var(--py) var(--px) 12px; overflow-x: auto; }
[data-ui="v2"] .at-stage::before, [data-ui="v2"] .at-stage::after { content: ""; position: absolute; height: 2px; border-radius: 2px;
  top: calc(var(--py) + var(--dot) / 2 - 1px); left: calc(var(--px) + var(--node) / 2); }
[data-ui="v2"] .at-stage::before { right: calc(var(--px) + var(--node) / 2); background: var(--bg-active); }
[data-ui="v2"] .at-stage::after { background: var(--bg-inverse); transition: width .4s cubic-bezier(.3,.7,.2,1);
  width: calc((100% - 2 * var(--px) - var(--node)) * var(--k, 0) / (var(--n, 2) - 1)); }
[data-ui="v2"] .at-stage__n { flex: 0 0 var(--node); position: relative; z-index: 1; display: flex; flex-direction: column; align-items: center; gap: 4px;
  font-size: 12px; color: var(--ink-4); white-space: nowrap; }
[data-ui="v2"] .at-stage__d { width: var(--dot); height: var(--dot); border-radius: 50%; background: var(--bg-active); color: var(--ink-4);
  display: flex; align-items: center; justify-content: center; margin-bottom: 4px; }
[data-ui="v2"] .at-stage__d .ic { width: 20px; height: 20px; }
[data-ui="v2"] .at-stage__n small { font-size: 10.5px; color: var(--ink-4); font-family: var(--font-mono); line-height: 1.2; }
[data-ui="v2"] .at-stage__n.is-done { color: var(--ink-2); }
[data-ui="v2"] .at-stage__n.is-done .at-stage__d { background: var(--bg-inverse); color: var(--ink-inverse); }
[data-ui="v2"] .at-stage__n.is-current { color: var(--ink); font-weight: 600; }
[data-ui="v2"] .at-stage__n.is-current .at-stage__d { background: var(--accent); color: var(--accent-ink); box-shadow: 0 0 0 5px var(--accent-soft); }
[data-ui="v2"] .at-stage__n.is-clickable { cursor: pointer; }
/* 深色:已完成节点 / 进度线不用反色(--bg-inverse 在深色下是近白,整条刺眼),改中性一档 —— 节点用 --bg-raised、进度线用 --ink-4 */
[data-ui="v2"][data-theme="dark"] .at-stage::after { background: var(--ink-4); }
[data-ui="v2"][data-theme="dark"] .at-stage__n.is-done .at-stage__d { background: var(--bg-raised); color: var(--ink-2); }
[data-ui="v2"][data-theme="dark"] .at-stage__n.is-clickable:hover .at-stage__d { background: var(--bg-hover); color: var(--ink); }
[data-ui="v2"] .at-stage__n.is-clickable:hover .at-stage__d { background: var(--bg-hover); color: var(--ink); }
/* 审批下拉（状态胶囊 → 浮层时间线） */
[data-ui="v2"] .at-appr-pop { width: 340px; padding: 16px; }
/* ═════════ 12. 其他 ═════════ */
[data-ui="v2"] .at-banner { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-radius: var(--radius-lg); background: var(--warn-soft); color: var(--warn); font-size: 13.5px; }
[data-ui="v2"] .at-banner b { font-weight: 600; }
[data-ui="v2"] .at-banner span { color: var(--ink-2); }
[data-ui="v2"] .at-banner--danger { background: var(--danger-soft); color: var(--danger); }
[data-ui="v2"] .at-banner--info { background: var(--info-soft); color: var(--info); }
[data-ui="v2"] .at-banner--accent { background: var(--accent-tint); color: var(--accent); }
[data-ui="v2"] .at-banner .at-btn { margin-left: auto; }
[data-ui="v2"] .at-star { border: 0; background: transparent; color: var(--ink-4); display: inline-flex; align-items: center; gap: 6px; padding: 0 10px; height: var(--ctl-sm); border-radius: var(--radius-pill); font-size: 12.5px; }
[data-ui="v2"] .at-star:hover { background: var(--bg-hover); color: var(--ink); }
[data-ui="v2"] .at-star.on, [data-ui="v2"] .at-star[data-fav-on="1"] { color: var(--warn); }
[data-ui="v2"] .at-star.on .ic { fill: currentColor; }
/* 选中白块滑动指示器(shell.js 注入 .seg-ind)。容器需相对定位;选中项背景交给指示块绘制 */
[data-ui="v2"] .at-tabs:not([data-active]).has-ind, [data-ui="v2"] body.at-page .at-seg.has-ind { position: relative; }
[data-ui="v2"] .has-ind > .seg-ind { position: absolute; left: 0; top: 0; z-index: 0; pointer-events: none; border-radius: var(--radius-pill);
  background: var(--bg-raised); box-shadow: var(--shadow-sm);
  transition: transform .28s cubic-bezier(.3,.7,.2,1), width .28s cubic-bezier(.3,.7,.2,1), opacity .15s; }
[data-ui="v2"] .has-ind > button, [data-ui="v2"] .has-ind > a { position: relative; z-index: 1; }
[data-ui="v2"] .has-ind > .on { background: transparent !important; box-shadow: none !important; }
[data-ui="v2"] .has-ind > .on:focus-visible { box-shadow: inset 0 0 0 1.5px var(--ink-4) !important; }
@media (prefers-reduced-motion: reduce) {
[data-ui="v2"] .has-ind > .seg-ind { transition: none; }
}
/* AI 网络调研卡(客户详情 / 项目详情共用):标题行 + 四格摘要 */
[data-ui="v2"] .at-ai-card { display: flex; align-items: center; gap: 14px; padding: 16px 18px; }
[data-ui="v2"] .at-ai-card .ic-wrap { width: 36px; height: 36px; border-radius: 50%; background: var(--accent-soft); color: var(--accent); display: flex; align-items: center; justify-content: center; flex: none; }
[data-ui="v2"] .at-ai-sum { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; padding: 0 18px 18px; }
[data-ui="v2"] .at-ai-sum > div { background: var(--bg-elev); border-radius: var(--radius-md); padding: 12px 14px; min-width: 0; }
[data-ui="v2"] .at-ai-sum h4 { font-size: 12.5px; font-weight: 600; color: var(--ink-2); margin-bottom: 6px; display: flex; align-items: center; gap: 6px; }
[data-ui="v2"] .at-ai-sum p, [data-ui="v2"] .at-ai-sum li { font-size: 12.5px; color: var(--ink-3); line-height: 1.65; }
[data-ui="v2"] .at-ai-sum ul { margin: 0; padding-left: 16px; list-style: disc; }
/* 真实调研内容比原型长得多:每格限高、格内滚动(设计规则「内容多时卡内滚动,不撑高整行」) */
[data-ui="v2"] .at-ai-card__detail .at-ai-sum > div { max-height: 240px; overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; }
[data-ui="v2"] .at-ai-sum h4 svg { flex: none; color: var(--ink-3); }
/* 公告上下轮播(data-cmp="notice-bar",shell.js 渲染):一次一条完整显示,上移切换 */
[data-ui="v2"] .at-notice { display: flex; align-items: center; gap: 12px; height: 40px; padding: 0 16px; border-radius: var(--radius-pill);
  background: var(--accent-tint); color: var(--ink-2); font-size: 13px; overflow: hidden; }
[data-ui="v2"] .at-notice__ic { display: inline-flex; color: var(--accent); flex: none; }
[data-ui="v2"] .at-notice__lab { color: var(--accent); font-weight: 600; flex: none; }
[data-ui="v2"] .at-notice__view { flex: 1; min-width: 0; height: 20px; overflow: hidden; position: relative; }
[data-ui="v2"] .at-notice__track { transition: transform .45s cubic-bezier(.2,.7,.2,1); }
[data-ui="v2"] .at-notice__item { display: block; height: 20px; line-height: 20px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: inherit; cursor: pointer; }
[data-ui="v2"] .at-notice__item:hover { color: var(--ink); }
[data-ui="v2"] .at-notice__idx { flex: none; font-size: 12px; color: var(--ink-4); font-variant-numeric: tabular-nums; }
@media (prefers-reduced-motion: reduce) {
[data-ui="v2"] .at-notice__track { transition: none; }
}

/* 迷你柱状图 / 漏斗条(原型 components.css .at-bars / .at-funnel;仪表盘植入趋势、销售漏斗首用) */
[data-ui="v2"] .at-bars { display: flex; align-items: flex-end; gap: 8px; height: 120px; }
[data-ui="v2"] .at-bars > div { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: 6px; height: 100%; font-size: 11px; color: var(--ink-4); }
[data-ui="v2"] .at-bars i { display: block; width: 100%; max-width: 22px; border-radius: 5px 5px 2px 2px; background: var(--bg-active); }
[data-ui="v2"] .at-bars i.is-hl { background: var(--accent); }
[data-ui="v2"] .at-funnel > div { display: flex; align-items: center; gap: 10px; font-size: 12.5px; padding: 4px 0; }
[data-ui="v2"] .at-funnel span:first-child { width: 48px; flex: none; color: var(--ink-3); }
[data-ui="v2"] .at-funnel i { display: block; height: 18px; border-radius: 6px; background: var(--bg-active); }
[data-ui="v2"] .at-funnel i.is-hl { background: var(--accent); opacity: .85; }
[data-ui="v2"] .at-funnel b { font-weight: 500; font-variant-numeric: tabular-nums; margin-left: auto; color: var(--ink-2); }

/* ═════════ 4. components/ui.html 宏的补充样式 ═════════ */
/* AI 网络调研卡:标题行(图标 + 标题/徽章/上次时间 + 操作)+ 说明 + 展开详情 */
[data-ui="v2"] .at-ai-card__main { flex: 1; min-width: 0; }
[data-ui="v2"] .at-ai-card__title { display: flex; align-items: center; gap: 8px; font-weight: 600; font-size: 14px; }
[data-ui="v2"] .at-ai-card__sub { display: block; margin-top: 2px; font-size: 12px; color: var(--ink-4); font-family: var(--font-mono); }
[data-ui="v2"] .at-ai-card__acts { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
[data-ui="v2"] .at-ai-card__desc { margin: 0; padding: 0 18px 14px; font-size: 12.5px; color: var(--ink-3); line-height: 1.6; }
[data-ui="v2"] .at-ai-card__detail { padding: 0 18px 18px; font-size: 12.5px; color: var(--ink-2); line-height: 1.6; }
[data-ui="v2"] .at-ai-card__loading { color: var(--ink-4); padding: 8px 0; }
/* 阶段条:审批前置时整体变淡 */
[data-ui="v2"] .at-stage.is-dimmed { opacity: .55; }
/* 状态胶囊按钮:末尾箭头 */
[data-ui="v2"] .at-pill--btn svg:last-child { opacity: .7; margin-right: -2px; }

/* ═════════ 5. 列表页(at_list_layout 通用骨架 + customer/at_list) ═════════
   通用部分对 12 个 at_list_layout 列表页都生效;它们的表头 / 单元格多为内联样式(含共用宏 at_sort_th),
   只有这几项用 !important 压住:表头底色 / 字号 / 大写 / 底线、单元格底线(改为行间底色缝)。 */
[data-ui="v2"] body.at-page .at-ll__tabs { gap: 12px; margin-bottom: 16px; }
[data-ui="v2"] body.at-page .at-ll__total { flex-shrink: 0; white-space: nowrap; }
[data-ui="v2"] body.at-page .at-ll__tabs > .at-tabs { flex: 0 1 auto; min-width: 0; }
[data-ui="v2"] body.at-page .at-ll__table { font-size: 13.5px; }
[data-ui="v2"] body.at-page .at-ll__table > thead th {
  padding: 12px 14px 10px !important; font-size: 12px !important; font-weight: 500 !important; letter-spacing: 0 !important;
  text-transform: none !important; background: var(--bg-group) !important; border-bottom: 0 !important; }
[data-ui="v2"] body.at-page .at-ll__table > tbody > tr > td { border-bottom: 0 !important; }
[data-ui="v2"] body.at-page .at-ll__table > tbody > tr + tr { box-shadow: inset 0 1px 0 var(--seam); }
/* 行操作「⋯」列(at-ui-v2.js 自动补):列表骨架的表不是 .at-table,单独给列宽 */
[data-ui="v2"] body.at-page .at-ll__table .w-act { width: 44px; padding: 0 8px 0 0 !important; text-align: right; }
/* 列多、屏窄(1280)时表格在 tablebox 内横滚:「⋯」列钉在右侧,始终可点(Mac 隐藏滚动条,否则用户看不到菜单) */
[data-ui="v2"] body.at-page .at-ll__table :is(th, td).w-act { position: sticky; right: 0; z-index: 1; background: var(--bg-group); }
[data-ui="v2"] body.at-page .at-ll__table tbody tr:hover td.w-act { background: var(--bg-hover); }
[data-ui="v2"] body.at-page .at-ll__td { padding: 0 14px; }
[data-ui="v2"] body.at-page .at-ll__row { height: var(--row-h, 52px); }
[data-ui="v2"] body.at-page .at-ll__empty { padding: 56px 16px; color: var(--ink-4); }
/* 筛选行:搜索胶囊 + 柔和「筛选」按钮 + 「仅看关注」 */
[data-ui="v2"] body.at-page .at-ll__filters { gap: 8px; margin-bottom: var(--sp-4); }
[data-ui="v2"] body.at-page .at-ll__search { width: 300px; }
[data-ui="v2"] body.at-page .at-ll__search .at-input__clear { display: none; }
[data-ui="v2"] body.at-page .at-ll__search:has(input:not(:placeholder-shown)) .at-input__clear { display: inline-flex; }
[data-ui="v2"] .at-filter-pop .at-field + .at-field { margin-top: 14px; }
[data-ui="v2"] .at-filter-pop__foot { margin-top: 12px; }
[data-ui="v2"] .at-star .ic, [data-ui="v2"] .at-star svg { flex: none; }
/* 分页:图标按钮(上一页用右箭头镜像) */
[data-ui="v2"] body.at-page .at-ll__pager { padding: 14px 4px 0; font-size: 12.5px; color: var(--ink-3); }
[data-ui="v2"] .at-pager__nav .at-ib.is-off { opacity: .35; pointer-events: none; }
[data-ui="v2"] .at-flipx { display: inline-flex; transform: scaleX(-1); }

/* 客户列表专属(customer/at_list.html 的 .cl-* 单元格类):关注列收进行菜单,所属人前加首字头像 */
[data-ui="v2"] body.at-page .at-ll__table .cl-favcol,
[data-ui="v2"] body.at-page .at-ll__table .cl-fav,
[data-ui="v2"] body.at-page .at-ll__table .pl-favcol,
[data-ui="v2"] body.at-page .at-ll__table .pl-fav { display: none; }
[data-ui="v2"] body.at-page .at-ll__table .cl-name__t,
[data-ui="v2"] body.at-page .at-ll__table .pl-name__t { font-size: 13.5px; }
[data-ui="v2"] body.at-page .at-ll__table .cl-name__code,
[data-ui="v2"] body.at-page .at-ll__table .pl-name__code { font-size: 12px; letter-spacing: 0; }
[data-ui="v2"] body.at-page .at-ll__table .cl-name__pc { font-size: 12px; }
[data-ui="v2"] body.at-page .at-ll__table .cl-txt2,
[data-ui="v2"] body.at-page .at-ll__table .cl-txt3,
[data-ui="v2"] body.at-page .at-ll__table .pl-txt2,
[data-ui="v2"] body.at-page .at-ll__table .pl-txt3 { font-size: 13.5px; color: var(--ink-2); }
[data-ui="v2"] body.at-page .at-ll__table .cl-city { color: var(--ink-2); }
[data-ui="v2"] body.at-page .at-ll__table .cl-date,
[data-ui="v2"] body.at-page .at-ll__table .pl-date { font-size: 12.5px; color: var(--ink-4); }
[data-ui="v2"] body.at-page .at-ll__table .cl-owner[data-initial]::before,
[data-ui="v2"] body.at-page .at-ll__table .pl-owner[data-initial]::before {
  content: attr(data-initial); display: inline-flex; align-items: center; justify-content: center; vertical-align: middle;
  width: 24px; height: 24px; margin: -2px 8px 0 0; border-radius: 50%; background: var(--accent-soft); color: var(--accent);
  font-size: 11px; font-weight: 500; }

/* 5.x 原型逐项对照(customers.html / projects.html,列表型页面通用)
   - 页头不放英文眉题(面包屑在标题上方,顶栏是全局 at_topbar);「共 N 条」放筛选行右端(at_list_layout .at-ll__frow);已筛选条在筛选行下一行
   - 排序表头:箭头一律在文字后,未排序 ↕ 淡灰,当前排序 ↓/↑ 与文字同为正文色(不用强调色)
   - 负责人首字头像按人分 4 种淡底(data-tone a/b/c/d,同时间线头像),不再一律强调色
   - 日期列:正文字号等宽、说明灰(--ink-3);数字列右对齐,0 淡灰 */
/* 原型全局 border-box;真实页面只有加载 Tailwind forms 的页才是 border-box(报价 / 报销列表搜索框因此宽 24px)→ 原型控件类统一 */
[data-ui="v2"] :is(.at-input, .at-btn, .at-pill, .at-tab, .at-chip, .at-select, .at-ib, .at-avatar, .at-star, .at-badge) { box-sizing: border-box; }
[data-ui="v2"] body.at-page .at-ll__cat { display: none; }
[data-ui="v2"] body.at-page .at-ll__frow { display: flex; align-items: center; flex-wrap: wrap; gap: 0 12px; margin-bottom: var(--sp-4); flex-shrink: 0; }
[data-ui="v2"] body.at-page .at-ll__frow > .at-ll__filters { flex: 1 1 0%; min-width: 0; margin-bottom: 0; }
/* 其他列表页的筛选行是内联样式 div(带 margin-bottom:18px):行距统一由 .at-ll__frow 给,「共 N 条」才能与搜索框垂直居中 */
[data-ui="v2"] body.at-page .at-ll__frow > :not(.at-ll__total):not(.at-applied) { margin-bottom: 0 !important; }
[data-ui="v2"] body.at-page .at-ll__frow > .at-ll__total { margin-left: auto; order: 2; font-size: var(--fs-sm); color: var(--ink-4); gap: 6px; }
[data-ui="v2"] body.at-page .at-ll__frow > .at-ll__total .at-ll__totalsep { opacity: .6; }
[data-ui="v2"] body.at-page .at-ll__frow > .at-applied { order: 3; flex-basis: 100%; margin: 10px 0 -2px; }
[data-ui="v2"] .at-chip--removable a { color: var(--ink-4); width: 18px; height: 18px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; }
[data-ui="v2"] .at-chip--removable a:hover { background: var(--bg-hover); color: var(--ink); }
[data-ui="v2"] body.at-page th.at-sortth a { flex-direction: row !important; }
[data-ui="v2"] body.at-page th.at-sortth .at-sortth__ic { display: none; }
[data-ui="v2"] body.at-page th.at-sortth a::after { content: "↕"; font-size: 10px; opacity: .45; }
[data-ui="v2"] body.at-page th.at-sortth.is-desc a::after { content: "↓"; opacity: 1; }
[data-ui="v2"] body.at-page th.at-sortth.is-asc a::after { content: "↑"; opacity: 1; }
[data-ui="v2"] body.at-page th.at-sortth.is-asc, [data-ui="v2"] body.at-page th.at-sortth.is-desc { color: var(--ink) !important; }
[data-ui="v2"] body.at-page .at-ll__table [data-initial][data-tone="b"]::before { background: var(--info-soft) !important; color: var(--info) !important; }
[data-ui="v2"] body.at-page .at-ll__table [data-initial][data-tone="c"]::before { background: var(--success-soft) !important; color: var(--success) !important; }
[data-ui="v2"] body.at-page .at-ll__table [data-initial][data-tone="d"]::before { background: var(--warn-soft) !important; color: var(--warn) !important; }
[data-ui="v2"] body.at-page .at-ll__table :is(.cl-txt2, .cl-txt3, .cl-city) { color: var(--ink); }
[data-ui="v2"] body.at-page .at-ll__table .cl-date,
[data-ui="v2"] body.at-page .at-ll__table .pl-date { font-size: 13px; color: var(--ink-3); }
[data-ui="v2"] body.at-page .at-ll__table :is(.cl-numcol, .cl-num) { text-align: right !important; }
[data-ui="v2"] body.at-page .at-ll__table .cl-num { font-size: 13.5px; color: var(--ink); }
[data-ui="v2"] body.at-page .at-ll__table .cl-num.is-zero { color: var(--ink-4); }
/* 筛选行「· 总额 ¥…」:强调色只给主操作与状态 → 改中性(at_total_amount 内联强调色用 !important 压住) */
[data-ui="v2"] body.at-page .at-ll__total .at-total-amt { color: var(--ink-2) !important; font-weight: 500 !important; }
[data-ui="v2"] body.at-page .at-ll__table .pl-txt2 { color: var(--ink); }

/* ═════════ 6. 详情页(at_detail.html 通用卡片 + customer/at_view.html 三栏骨架) ═════════ */
/* 通用:档案信息行 / 卡片头计数 / 卡内列表(对所有用 at_detail_styles 的详情页生效) */
[data-ui="v2"] body.at-page .at-section-h .at-section-count { font-size: 12px; color: var(--ink-4); margin-left: -6px; }   /* 原型 h3 small:紧跟标题 6px */
/* 档案信息行 = 原型 .at-kv:标签列 96px、列距 14px、行距 10px、13.5px;值可换行(地址等长文本不再省略号截断) */
[data-ui="v2"] body.at-page .at-info-row { padding: 5px 0; font-size: 13.5px; gap: 14px; line-height: 1.45; }
[data-ui="v2"] body.at-page .at-info-row dt { width: 96px; color: var(--ink-3); }
[data-ui="v2"] body.at-page .at-info-row dd { color: var(--ink); white-space: normal; overflow: visible; overflow-wrap: anywhere; }

/* 客户详情:页头(眉题 / 标题下元信息行隐藏,信息见左栏档案)+ 三栏 stretch 底部对齐 */
[data-ui="v2"] body.at-page .at-cv__main { padding: 28px 32px 40px; }   /* 上内边距同原型 .at-page(顶栏下 28px 是面包屑) */
[data-ui="v2"] body.at-page .at-cv__crumb { color: var(--ink-4); }
[data-ui="v2"] body.at-page .at-cv__crumb:hover { color: var(--ink-2); }
[data-ui="v2"] body.at-page .at-cv__eyebrow,
[data-ui="v2"] body.at-page .at-cv__meta { display: none; }
[data-ui="v2"] body.at-page .at-cv__head { align-items: center; margin-bottom: 20px; }
[data-ui="v2"] body.at-page .at-cv__titlerow { align-items: center; gap: 10px; }
[data-ui="v2"] body.at-page h1.at-cv__title { font-size: var(--fs-2xl); font-weight: 600; letter-spacing: .2px; line-height: 1.25; }
[data-ui="v2"] body.at-page .at-cv__grid { grid-template-columns: minmax(240px, 1fr) minmax(0, 2fr) minmax(260px, 1fr);
  gap: 16px; align-items: stretch; }
[data-ui="v2"] body.at-page .at-cv__left,
[data-ui="v2"] body.at-page .at-cv__right { position: static; }
[data-ui="v2"] body.at-page .at-cv__left,
[data-ui="v2"] body.at-page .at-cv__mid,
[data-ui="v2"] body.at-page .at-cv__right { gap: 16px; min-width: 0; }
[data-ui="v2"] body.at-page .at-cv__grid .at-section,
[data-ui="v2"] body.at-page .at-cv__grid .at-group { margin-bottom: 0; display: flex; flex-direction: column; min-height: 0; flex: none; }
/* 吃掉本栏剩余高度的卡:联系人(左)/ 关联记录(中)/ 跟进记录(右) */
[data-ui="v2"] body.at-page .at-cv__left > .at-contacts,
[data-ui="v2"] body.at-page .at-cv__mid > .at-cv__rel,
[data-ui="v2"] body.at-page .at-cv__right > .at-timeline { flex: 1 1 auto; }

/* 联系人列表(at_contact_list 新外观分支):只显示 姓名 / 主 / 职位,卡内滚动 */
[data-ui="v2"] .at-contacts__list { padding: 0 6px 6px; max-height: 320px; overflow-y: auto; scrollbar-width: thin; }
[data-ui="v2"] .at-contacts__list .at-li { padding: 10px 12px; color: inherit; text-decoration: none; }
[data-ui="v2"] .at-contact b { display: flex; align-items: center; gap: 6px; min-width: 0; }
[data-ui="v2"] .at-contact b em { font-style: normal; font-weight: 400; color: var(--ink-3); font-size: 12px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 关联小表 = 原型 .at-table--mini:行高 44、13px;表头上内边距 8;金额列正文色 */
[data-ui="v2"] body.at-page :is(.at-cv__relscroll, .qv-rel__scroll, .at-ev__relscroll) .at-mini-table { font-size: 13px; }
[data-ui="v2"] body.at-page :is(.at-cv__relscroll, .qv-rel__scroll, .at-ev__relscroll) .at-mini-table td { height: 44px; padding: 0 14px; }
[data-ui="v2"] body.at-page :is(.at-cv__relscroll, .qv-rel__scroll, .at-ev__relscroll) .at-mini-table th { padding: 8px 14px 6px; }
[data-ui="v2"] body.at-page :is(.at-cv__relscroll, .qv-rel__scroll, .at-ev__relscroll) .at-mini-table td:last-child.at-mono { color: var(--ink) !important; }
[data-ui="v2"] .at-mini-table .at-mini-main { font-weight: 500; color: var(--ink); max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
[data-ui="v2"] .at-mini-table .at-mini-date { color: var(--ink-3); white-space: nowrap; }
[data-ui="v2"] .at-pv__relpad { height: 8px; flex: none; }
/* 共享设置卡:标题不换行,说明单行省略(原型 .at-srow__lab) */
[data-ui="v2"] [data-cmp="share-card"] .at-srow__lab { white-space: nowrap; }
/* AI 调研卡:已完成时不再显示「自动从公开来源…」说明(原型已完成态只有标题行 + 摘要) */
[data-ui="v2"] .at-ai-research[data-ai-status="completed"] .at-ai-card__desc { display: none; }
/* 关联记录卡:胶囊标签 + 「+」新建 + 定高面板(data-pane-hold)+ 面板内滚动 + 底部说明 */
[data-ui="v2"] .at-cv__relhd { padding-bottom: 10px; }
[data-ui="v2"] .at-cv__relhd .at-tabs { flex: 0 1 auto; min-width: 0; flex-wrap: nowrap; }
[data-ui="v2"] .at-cv__relhd .at-tab { padding: 0 11px; }
[data-ui="v2"] .at-cv__relbody { flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; }
[data-ui="v2"] .at-cv__relbody > [data-pane-hold] { flex: 1 1 auto; }
[data-ui="v2"] .at-cv__relscroll { max-height: 340px; overflow-y: auto; scrollbar-width: thin; }
[data-ui="v2"] .at-cv__relscroll .at-mini-table thead th { position: sticky; top: 0; z-index: 1; background: var(--bg-group); }
[data-ui="v2"] .at-cv__relfoot { margin-top: auto; padding: 8px 18px 12px; font-size: 12px; color: var(--ink-4); }

/* 跟进记录卡:滚动区吃满卡片剩余高度(行高由左 / 中栏决定),内联 max-height 用 !important 解除 */
[data-ui="v2"] .at-timeline > .at-section-body { flex: 1 1 0; height: 0; min-height: 320px; display: flex; flex-direction: column; padding: 6px 18px 18px; }
[data-ui="v2"] .at-timeline .at-tl-scroll { flex: 1 1 0; min-height: 0; max-height: none !important; }
[data-ui="v2"] .at-timeline .at-reply-panel { border-left: 0 !important; padding: 10px 12px !important; border-radius: var(--radius-md); background: var(--bg-elev); }

/* AI 调研卡:四格摘要放在展开区内(区块自身已有左右内边距) */
[data-ui="v2"] .at-ai-card__detail .at-ai-sum { padding: 0; }
[data-ui="v2"] .at-ai-sum__wide { grid-column: 1 / -1; }
[data-ui="v2"] .at-ai-sum__tags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 8px; }
/* 长业务标签(整句经营范围)允许折行,不撑出卡片 */
[data-ui="v2"] .at-ai-sum__tags .at-pill { height: auto; min-height: 20px; max-width: 100%; white-space: normal; line-height: 1.45; padding-block: 2px; overflow-wrap: anywhere; }
[data-ui="v2"] .at-ai-sum .is-empty { color: var(--ink-4); }
[data-ui="v2"] .at-ai-sum li small { color: var(--ink-4); margin-left: 4px; }

/* 审批状态胶囊按钮的流程浮层(at_approval_dropdown,内联样式 → !important) */
[data-ui="v2"] [data-at-approval-panel] { border: 0 !important; border-radius: var(--radius-md) !important; box-shadow: var(--shadow-pop) !important; }
[data-ui="v2"] [data-at-approval-chip].at-pill { height: 24px; }
/* 深色下 --bg-elev 与 --bg-group 同值:四格摘要改用 --bg-group-ov 抬一档,保持「底色分层」 */
[data-ui="v2"][data-theme="dark"] .at-ai-sum > div { background: var(--bg-group-ov); }
/* 更换归属人弹窗:人员下拉是绝对定位浮层,弹窗正文不裁切 */
[data-ui="v2"] #atOwnerModal .at-dlg, [data-ui="v2"] #atOwnerModal .at-dlg__bd { overflow: visible; }


/* ═════════ 7. 第二批:跟进记录时间线 / 项目详情 / 项目列表 ═════════ */
/* 7.1 跟进记录(ui.timeline = at_action_timeline 新外观分支;客户 / 联系人 / 项目详情等所有调用页同一组件、同一套规则,
   一律对齐项目原型 project.html):卡头下「添加跟进…」输入条;姓名 / 「时间 · 关联对象」;正文浅底块;「回复 · N 条回复」;阶段事件两行。
   卡片吃满本栏剩余高度(见 6. .at-timeline > .at-section-body),记录区卡内滚动;正文浅底块超 5 行折叠(at-clamp-expand.js) */
[data-ui="v2"] .at-timeline .at-tl-scroll { overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; padding: 4px 4px 0 0; }
[data-ui="v2"] .at-tl--feed .at-tl__item { scroll-margin-top: 80px; border-radius: var(--radius-md); }
[data-ui="v2"] .at-tl--feed .at-tl__title { font-size: 13px; line-height: 1.5; flex-wrap: nowrap; }   /* 行高写死:各页 body 行高不一(Tailwind 预置 1.5 / 无),同一组件要同高 */
[data-ui="v2"] .at-tl--feed .at-tl__meta { line-height: 1.5; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
[data-ui="v2"] .at-tl--feed .at-tl__note { margin-top: 8px; padding: 10px 12px 0; border-radius: var(--radius-md); background: var(--bg-page);
  font-size: 13px; color: var(--ink-2); line-height: 1.6; white-space: pre-wrap; word-break: break-word;
  display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical; overflow: hidden; }
[data-ui="v2"] .at-tl--feed .at-expand-toggle { margin-top: 4px; }
/* 折叠正文:底部留白改用透明下边框(overflow 只裁到 padding 边,padding-bottom 会露出半行字);
   有折叠按钮时下边框加高,箭头上移放进浅底块右下角,不再孤立在卡片下方 */
[data-ui="v2"] .at-tl--feed .at-tl__note { border-bottom: 10px solid transparent; }
[data-ui="v2"] .at-tl--feed .at-tl__note[data-clamp-wired] { border-bottom-width: 26px; }
[data-ui="v2"] .at-tl--feed .at-tl__note[data-clamp-wired] + .at-expand-toggle {
  position: relative; display: flex; justify-content: flex-end; align-items: center; height: 22px; margin-top: -24px; padding-right: 10px; }
/* 「回复 · N 条回复」:点开回复列表 + 回复框(交互沿用 at-action-replies.js) */
[data-ui="v2"] .at-tl__rt { display: inline-flex; align-items: center; gap: 4px; margin-top: 6px; padding: 2px 0; border: 0; background: none;
  color: var(--ink-3); font-size: 12px; cursor: pointer; }
[data-ui="v2"] .at-tl__rt:hover { color: var(--ink-2); }
[data-ui="v2"] .at-tl__rt .at-tl__rtn { color: var(--ink-4); }
[data-ui="v2"] .at-tl--feed .at-reply-panel { margin-top: 8px; padding: 10px 12px !important; border-radius: var(--radius-md); background: var(--bg-elev); }
[data-ui="v2"] .at-tl--feed .at-reply-list { display: flex; flex-direction: column; gap: 8px; }
[data-ui="v2"] .at-tl--feed .at-reply-list:empty { display: none; }
[data-ui="v2"] .at-tl--feed .at-reply-compose { display: flex; align-items: flex-end; gap: 6px; margin-top: 8px; padding: 3px 3px 3px 12px;
  border-radius: var(--radius-md); background: var(--bg-elev); box-shadow: inset 0 0 0 1px var(--line-2); }
[data-ui="v2"] body.at-page .at-tl--feed .at-reply-input,
[data-ui="v2"] body.at-page .at-tl--feed .at-reply-input:focus { outline: none; box-shadow: none; border: 0; }   /* 压住 Tailwind forms 的输入框描边 / 蓝色聚焦环 */
[data-ui="v2"] .at-tl--feed .at-reply-compose:focus-within { box-shadow: inset 0 0 0 1.5px var(--ink-4); }
[data-ui="v2"] .at-tl--feed .at-reply-input { flex: 1; min-width: 0; min-height: 28px; padding: 5px 0; border: 0; outline: 0; resize: none;
  background: transparent; color: var(--ink); font: inherit; font-size: 13px; }
/* 回复区:白底一行一条,回复框常显(单独的「回复」按钮不再出现) */
[data-ui="v2"] .at-tl__r { position: relative; padding-right: 22px; font-size: 12.5px; color: var(--ink-2); line-height: 1.55; white-space: pre-wrap; word-break: break-word; }
[data-ui="v2"] .at-tl__r b { font-weight: 500; color: var(--ink); margin-right: 6px; }
[data-ui="v2"] .at-tl__r small { color: var(--ink-4); margin-left: 6px; font-size: 11.5px; }
/* 删除图标绝对定位在行尾,不占排版(原先隐形图标会单独折一行 → 每条回复多出一行空白) */
[data-ui="v2"] .at-tl__r .at-reply-del { position: absolute; top: 1px; right: 0; display: inline-flex; border: 0; background: none; padding: 2px; color: var(--ink-4); cursor: pointer; opacity: 0; }
[data-ui="v2"] .at-tl__r:hover .at-reply-del { opacity: 1; }
[data-ui="v2"] .at-tl__r .at-reply-del:hover { color: var(--danger); }
[data-ui="v2"] .at-tl--feed .at-tl__radd { display: none; }
/* 跟进记录删除(自己发的 / 管理员):条目右上角(与姓名同行),悬停整条才出现 */
[data-ui="v2"] .at-tl--feed .at-tl__item { position: relative; }
[data-ui="v2"] .at-tl__del { position: absolute; top: 0; right: 0; display: inline-flex; align-items: center; justify-content: center;
  width: 24px; height: 24px; padding: 0; border: 0; border-radius: var(--radius-sm); background: none;
  color: var(--ink-4); cursor: pointer; opacity: 0; transition: opacity .12s; }
[data-ui="v2"] .at-tl__item:hover .at-tl__del, [data-ui="v2"] .at-tl__del:focus-visible { opacity: 1; }
[data-ui="v2"] .at-tl__del:hover { color: var(--danger); background: var(--bg-hover); }
[data-ui="v2"] .at-tl--feed .at-reply-compose[hidden] { display: flex !important; }
[data-ui="v2"] .at-tl--feed .at-reply-list:empty + .at-tl__radd + .at-reply-compose { margin-top: 0; }
/* 卡头下「添加跟进…」输入条 */
[data-ui="v2"] .at-tl-composer { display: flex; align-items: center; gap: 8px; height: 44px; margin: 4px 18px 10px; padding: 0 6px 0 16px;
  border-radius: var(--radius-pill); background: var(--bg-elev); flex: none; transition: box-shadow var(--dur); }
[data-ui="v2"] .at-tl-composer.is-focus { box-shadow: inset 0 0 0 1.5px var(--ink-4); }
[data-ui="v2"] body.at-page .at-tl-composer input { flex: 1; min-width: 0; height: 100%; border: 0; outline: 0; box-shadow: none; padding: 0;
  background: transparent; color: var(--ink); font: inherit; font-size: 13.5px; }
[data-ui="v2"] .at-tl-composer input::placeholder { color: var(--ink-4); }
/* 系统事件(项目阶段变更):小图标 + 两行(「阶段 植入 → 标前」常规字重 /「08-02 · 变更人」) */
[data-ui="v2"] .at-tl__item--event .at-tl__dot { color: var(--ink-3); }
[data-ui="v2"] .at-tl__title--ev { font-weight: 400; color: var(--ink); }

/* 7.2 项目详情(project/at_view.html;复用客户详情 .at-cv 三栏骨架与关联卡类名) */
[data-ui="v2"] body.at-page h1.at-pv__title { max-width: min(100%, 720px); }
[data-ui="v2"] .at-pv__trophy { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; padding: 0;
  border: 0; border-radius: 50%; background: var(--success-soft); color: var(--success); cursor: pointer; }
[data-ui="v2"] .at-pv__stagebox { margin-bottom: 16px; }
[data-ui="v2"] .at-pv__stagebox.is-abnormal { pointer-events: none; }
[data-ui="v2"] .at-pv__banner { margin-bottom: 12px; }
[data-ui="v2"] .at-pv__desc { margin: 12px 0 0; font-size: 12.5px; color: var(--ink-3); line-height: 1.6; white-space: pre-wrap; word-break: break-word; }
/* 左栏:关联客户卡吃掉剩余高度,列表卡内滚动;移除按钮悬停显示 */
[data-ui="v2"] body.at-page .at-cv__left > .at-pv__cos { flex: 1 1 auto; }
[data-ui="v2"] .at-pv__cos .at-list { padding: 0 6px 6px; max-height: 260px; overflow-y: auto; scrollbar-width: thin; }
[data-ui="v2"] .at-pv__cos .at-li { padding: 8px 12px; gap: 10px; }
[data-ui="v2"] .at-pv__cos .at-li:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-pv__cos .at-li__main { color: inherit; text-decoration: none; }
[data-ui="v2"] .at-pv__cos .at-pv__rm { opacity: 0; color: var(--danger); transition: opacity var(--dur); }
[data-ui="v2"] .at-pv__cos .at-li:hover .at-pv__rm, [data-ui="v2"] .at-pv__cos .at-pv__rm:focus-visible { opacity: 1; }
/* 中栏:关联记录卡(复用 .at-cv__relhd / relbody / relscroll / relfoot)+ AI 调研 + 项目资料卡(吃掉剩余高度) */
[data-ui="v2"] body.at-page .at-cv__mid > .at-pv__docs { flex: 1 1 auto; }
[data-ui="v2"] .at-pv__docsbody { flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; padding: 0 12px 12px; }
[data-ui="v2"] .at-pv__docsbody > [data-pane-hold] { flex: 1 1 auto; }
[data-ui="v2"] .at-pv__docscroll { max-height: 280px; overflow-y: auto; scrollbar-width: thin; }
[data-ui="v2"] .at-pv__docs .at-file { background: var(--bg-page); padding: 10px 12px; gap: 12px; }
[data-ui="v2"] .at-pv__docs .at-file__ic { background: var(--bg-group); color: var(--ink-3); text-transform: uppercase; }
[data-ui="v2"] .at-pv__docs .at-file__main a, [data-ui="v2"] .at-pv__docs .at-file__main button {
  display: block; max-width: 100%; padding: 0; border: 0; background: none; font: inherit; font-weight: 500; text-align: left;
  color: var(--ink); text-decoration: none; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
[data-ui="v2"] .at-pv__docs .at-file__main a:hover, [data-ui="v2"] .at-pv__docs .at-file__main button:hover { color: var(--accent); }
[data-ui="v2"] .at-pv__docs .at-file .at-ib:hover.is-danger { color: var(--danger); }
/* 右栏:跟进记录(规则见 7.1 / 6.)*/

/* 7.3 项目列表(project/at_list.html):阶段标签较多 → 轨道不换行、横向滚动 */
[data-ui="v2"] body.at-page [data-cmp="project-stage-tabs"] { flex-wrap: nowrap; }
/* 项目详情弹窗:更换人员下拉是绝对定位浮层(正文不裁切);搁置 / 失败理由标签与输入框间距 */
[data-ui="v2"] #atPersonnelModal .at-dlg, [data-ui="v2"] #atPersonnelModal .at-dlg__bd { overflow: visible; }
[data-ui="v2"] #atHoldModal .at-field__label { margin-bottom: 6px; }


/* ═════════ 8. 单据型详情骨架(ui.doc_detail / ui.doc_section;组件卡「单据型详情骨架」) ═════════
   单据型对象(报价 / 报销,后续批价单 / 客户订单 / 采购单 / 发货单)以明细为中心:
     标题行 .at-doc__head(单号 / 主题 + 状态胶囊 + 锁定 | 右侧操作)
     关键信息行 .at-doc__keyline(项目 · 客户 · 负责人 …… 右端大字合计 .at-doc__total)
     主区 .at-doc__main ≈72%(明细 + 小计 / 税金 / 合计)| 侧栏 .at-doc__side ≈28%(辅助信息卡 .at-doc-sec,可折叠并记忆)
   宽度:侧栏 = 28%,夹在 300–380px;≤1280 宽 280px;≤1100 宽落到主区下方(单列)。主区与侧栏顶部对齐、不强制底部对齐;
   侧栏整体 sticky 跟随滚动,超出视口时自身滚动。档案型对象(客户 / 项目)仍用 .at-cv 三栏骨架(见 6.)。 */
[data-ui="v2"] body.at-page { --doc-top: 72px; }
/* 外层列(内联 overflow-x:hidden 会让它成为滚动容器 → 侧栏 sticky 失效)改 clip:同样裁掉横向溢出,但不建滚动容器 */
[data-ui="v2"] body.at-page div:has(> main > .at-doc) { overflow-x: clip !important; }
[data-ui="v2"] .at-doc { display: flex; flex-direction: column; min-width: 0; }
[data-ui="v2"] .at-doc__head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px 16px; margin-bottom: 10px; }
[data-ui="v2"] .at-doc__titlerow { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; flex: 1 1 auto; min-width: 0; }
[data-ui="v2"] body.at-page h1.at-doc__title { margin: 0; min-width: 0; font-family: var(--font-sans); font-size: var(--fs-2xl); font-weight: 600;
  letter-spacing: .2px; line-height: 1.25; color: var(--ink); overflow-wrap: anywhere; }
[data-ui="v2"] .at-doc__acts { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
/* 关键信息一行:键值以「·」相隔,右端大字合计;窄时合计折到下一行仍靠右 */
[data-ui="v2"] .at-doc__keyline { display: flex; align-items: flex-end; justify-content: space-between; flex-wrap: wrap; gap: 8px 24px;
  margin-bottom: 18px; }
[data-ui="v2"] .at-doc__keys { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 0; min-width: 0; flex: 1 1 360px;
  font-size: 13.5px; color: var(--ink-2); }
[data-ui="v2"] .at-doc__key { display: inline-flex; align-items: baseline; gap: 6px; min-width: 0; max-width: 100%; }
[data-ui="v2"] .at-doc__key + .at-doc__key::before { content: "·"; margin: 0 10px; color: var(--ink-4); }
[data-ui="v2"] .at-doc__key > small { flex: none; font-size: 12.5px; color: var(--ink-4); }
[data-ui="v2"] .at-doc__key > span, [data-ui="v2"] .at-doc__key > a { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 360px; }
[data-ui="v2"] .at-doc__key > a { color: var(--ink); text-decoration: none; }
[data-ui="v2"] .at-doc__key > a:hover { color: var(--accent); }
[data-ui="v2"] .at-doc__total { display: flex; align-items: baseline; gap: 10px; margin-left: auto; white-space: nowrap; }
[data-ui="v2"] .at-doc__total > small { font-size: 13px; color: var(--ink-3); }
[data-ui="v2"] .at-doc__total > b { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: var(--fs-3xl); font-weight: 600;
  line-height: 1.1; letter-spacing: -.01em; color: var(--ink); }
/* 主区 + 侧栏 */
[data-ui="v2"] .at-doc__body { display: grid; grid-template-columns: minmax(0, 1fr) clamp(300px, 28%, 380px); gap: 16px; align-items: start; }
[data-ui="v2"] .at-doc--noside .at-doc__body { grid-template-columns: minmax(0, 1fr); }
[data-ui="v2"] .at-doc__main { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
[data-ui="v2"] .at-doc__side { position: sticky; top: var(--doc-top); display: flex; flex-direction: column; gap: 12px; min-width: 0;
  max-height: calc(100vh - var(--doc-top) - 16px); overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; }
[data-ui="v2"] .at-doc__main > .at-section, [data-ui="v2"] .at-doc__side > .at-section,
[data-ui="v2"] .at-doc__main > .at-group, [data-ui="v2"] .at-doc__side > .at-group { margin: 0; flex: none; }
@media (max-width: 1280px) {
  [data-ui="v2"] .at-doc__body { grid-template-columns: minmax(0, 1fr) 280px; }
}
@media (max-width: 1100px) {
  [data-ui="v2"] .at-doc__body { grid-template-columns: minmax(0, 1fr); }
  [data-ui="v2"] .at-doc__side { position: static; max-height: none; overflow: visible; }
}
/* 8.1 详情页标题行吸顶([data-sticky-head]:单据骨架 .at-doc__head 自带;客户 / 联系人 / 项目的 .at-cv__head 新外观下加)
   面包屑照常滚走;标题 + 标签 + 右侧操作贴在顶栏(60px)下方。滚动后 at-ui-v2.js(13.)加 .is-stuck 收成细条:
   标题字号降到 --fs-lg、上下内边距收窄、单行省略;底色 = 页面底色(::before 向两侧铺满本列,外层列 overflow-x: clip 裁掉),
   吸顶统一规范(同顶栏与仪表盘):底色 = 页面底色,不画分隔线、不加阴影,正文直接从下方滚入。z-index 30:低于顶栏(40)与正文里的下拉 / 日期 / 行菜单浮层(≥ 40),
   标题行自己的下拉(审批流程 / 「⋯」)在本层内照常盖住正文。关键信息行(合计大字)不吸顶。 */
[data-ui="v2"] .at-sticky-sentinel { height: 1px; margin-bottom: -1px; flex: none; pointer-events: none; }
[data-ui="v2"] body.at-page [data-sticky-head] { position: sticky; top: var(--at-sticky-top, 60px); z-index: 30; }
[data-ui="v2"] body.at-page [data-sticky-head]::before { content: ""; position: absolute; inset: 0 -100vmax; z-index: -1; pointer-events: none;
  background: var(--bg-page); opacity: 0; transition: opacity var(--dur); }
[data-ui="v2"] body.at-page [data-sticky-head].is-stuck::before { opacity: 1; }
[data-ui="v2"] body.at-page [data-sticky-head].is-stuck { padding-block: 6px; flex-wrap: nowrap; align-items: center; gap: 16px; }
[data-ui="v2"] body.at-page [data-sticky-head].is-stuck :is(.at-cv__headl, .at-cv__titlerow, .at-doc__titlerow) { flex-wrap: nowrap; min-width: 0; }
[data-ui="v2"] body.at-page [data-sticky-head].is-stuck :is(.at-cv__titlerow, .at-doc__titlerow) > :not(h1):not(input) { flex: none; }
[data-ui="v2"] body.at-page [data-sticky-head].is-stuck :is(h1.at-cv__title, h1.at-doc__title) { flex: 0 1 auto; font-size: var(--fs-lg); line-height: 1.5;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; overflow-wrap: normal; word-break: normal; }
[data-ui="v2"] body.at-page [data-sticky-head].is-stuck #expTitle.at-ev__titleinp { height: 32px; min-width: 200px; font-size: var(--fs-lg); }
[data-ui="v2"] body.at-page [data-sticky-head].is-stuck :is(.at-cv__acts, .at-doc__acts, .qv-grp) { flex: none; flex-wrap: nowrap; }
/* 单据侧栏 sticky 让到吸顶条下方 */
[data-ui="v2"] body.at-page:has([data-sticky-head]) { --doc-top: calc(var(--at-sticky-top, 60px) + var(--at-sticky-h, 0px) + 12px); }

/* 侧栏卡片:标题行整行可点(展开 / 收起),状态按「模块 + 卡片」记忆(at-ui-v2.js);data-collapsed = 收起 */
[data-ui="v2"] .at-doc-sec { display: flex; flex-direction: column; min-width: 0; }
[data-ui="v2"] .at-doc-sec__hd { display: flex; align-items: center; gap: 8px; padding: 6px 8px 0 6px; }
[data-ui="v2"] .at-doc-sec__h { flex: 1 1 auto; min-width: 0; margin: 0; font: inherit; }
[data-ui="v2"] .at-doc-sec__tg { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 38px; padding: 6px 10px 6px 12px; border: 0;
  border-radius: var(--radius-md); background: transparent; color: var(--ink); font: inherit; text-align: left; cursor: pointer; }
[data-ui="v2"] .at-doc-sec__tg:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-doc-sec__tg .at-section-title { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
[data-ui="v2"] .at-doc-sec__tg .at-section-count { font-size: 12px; color: var(--ink-4); }
[data-ui="v2"] .at-doc-sec__chev { display: inline-flex; margin-left: auto; color: var(--ink-4); transition: transform var(--dur) var(--ease); }
[data-ui="v2"] .at-doc-sec[data-collapsed] .at-doc-sec__chev { transform: rotate(-90deg); }
[data-ui="v2"] .at-doc-sec__acts { display: inline-flex; align-items: center; gap: 6px; flex: none; }
[data-ui="v2"] .at-doc-sec__bd { padding: 6px 18px 16px; min-width: 0; }
[data-ui="v2"] .at-doc-sec__bd--flush { padding: 4px 6px 8px; }
[data-ui="v2"] .at-doc-sec[data-collapsed] > .at-doc-sec__bd { display: none; }
[data-ui="v2"] .at-doc-sec[data-collapsed] > .at-doc-sec__hd { padding-bottom: 6px; }
/* 侧栏里的键值行(ui.kv_rows):标签窄一点,值可折行 */
[data-ui="v2"] body.at-page .at-doc__side .at-info-row dt { width: 72px; }
[data-ui="v2"] body.at-page .at-doc__side .at-info-row dd { white-space: normal; overflow-wrap: anywhere; overflow: visible; }
@media (prefers-reduced-motion: reduce) { [data-ui="v2"] .at-doc-sec__chev { transition: none; } }

/* 单据型骨架 · 通栏区(ui.doc_detail 的 full 插槽):主区 + 侧栏下方占满整行 */
[data-ui="v2"] .at-doc__full { margin-top: 16px; display: flex; flex-direction: column; gap: 16px; min-width: 0; }
[data-ui="v2"] .at-doc__full > .at-section, [data-ui="v2"] .at-doc__full > .at-group { margin: 0; }

/* 必填标记(定稿:乙方案):星号浅灰、略小,不用强调色 —— 统一覆盖 .req / .at-req / .at-create-req(旧外观的内联色在 v2 下压掉) */
[data-ui="v2"] .req, [data-ui="v2"] .at-req, [data-ui="v2"] .at-create-req {
  color: var(--ink-4) !important; font-size: .85em; font-weight: 400; margin-left: 2px; }
/* 漏填变红:ATUiV2.markInvalid(el, msg) 给所在字段加 .is-error 并在下方插入提示;输入后自动清除 */
[data-ui="v2"] .is-error > .at-field__label, [data-ui="v2"] .is-error > label:first-child { color: var(--danger) !important; }
[data-ui="v2"] .is-error .req, [data-ui="v2"] .is-error .at-req { color: var(--danger) !important; }
[data-ui="v2"] .is-error .at-input,
[data-ui="v2"] .is-error :is(input:not([type=checkbox]):not([type=radio]):not([type=hidden]), select, textarea):not(.at-input *) {
  box-shadow: inset 0 0 0 1.5px var(--danger) !important; }
[data-ui="v2"] .at-field__err { margin-top: 6px; font-size: 12px; color: var(--danger); }

/* 统一下拉(ATUiV2.enhanceSelect):原生 select 隐藏承载取值,.at-select--block 触发器 + .at-pop 浮层(fixed 定位) */
[data-ui="v2"] .at-selx { position: relative; display: block; min-width: 0; }
[data-ui="v2"] .at-selx .at-select { width: 100%; font: inherit; font-size: 13.5px; cursor: pointer; text-align: left; }
[data-ui="v2"] .at-selx .at-select--sm { font-size: 13px; padding: 0 10px; }
[data-ui="v2"] .at-selx__lab { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
[data-ui="v2"] .at-selx .at-select.is-empty .at-selx__lab { color: var(--ink-4); }
[data-ui="v2"] .at-selx.is-open .at-select { box-shadow: inset 0 0 0 1.5px var(--ink-2); }
[data-ui="v2"] .at-selx.is-disabled .at-select { background: var(--bg-group); box-shadow: none; color: var(--ink-4); cursor: not-allowed; }
[data-ui="v2"] .at-selx__pop { z-index: var(--z-modal); max-width: 360px; }
[data-ui="v2"] .at-selx__pop .at-opt { font-size: 13px; min-height: 32px; }
[data-ui="v2"] .at-selx__pop .at-opt.is-off { opacity: .45; pointer-events: none; }
[data-ui="v2"] .is-error .at-selx .at-select, [data-ui="v2"] .is-error .at-dp--field .at-dp-trigger { box-shadow: inset 0 0 0 1.5px var(--danger) !important; }
/* 统一日期(ATUiV2.enhanceDate → AtDatePicker.attach):触发器同 .at-input,月历同 .at-cal */
[data-ui="v2"] .at-dp--field { display: flex; width: 100%; min-width: 0; }
[data-ui="v2"] body.at-page .at-dp--field .at-dp-trigger {
  width: 100%; height: var(--ctl-md); padding: 0 12px; gap: 8px; border: 0; border-radius: var(--radius);
  background: var(--bg-elev); box-shadow: inset 0 0 0 1px var(--line-2); color: var(--ink); font-size: 13.5px;
  transition: box-shadow var(--dur); white-space: nowrap; }
[data-ui="v2"] body.at-page .at-dp--field.at-dp--sm .at-dp-trigger { height: var(--ctl-sm); padding: 0 10px; font-size: 13px; font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
[data-ui="v2"] body.at-page .at-dp--field .at-dp-trigger:hover { box-shadow: inset 0 0 0 1px var(--ink-4); }
[data-ui="v2"] body.at-page .at-dp--field.is-open .at-dp-trigger { box-shadow: inset 0 0 0 1.5px var(--ink-2); }
[data-ui="v2"] body.at-page .at-dp--field.is-disabled .at-dp-trigger { background: var(--bg-group); box-shadow: none; color: var(--ink-4); cursor: not-allowed; }
[data-ui="v2"] .at-dp--field .at-dp-ph { font-family: var(--font-sans, inherit); }
[data-ui="v2"] .at-dp--field .at-dp-menu { z-index: var(--z-modal); width: 264px; padding: 10px 8px 6px; border: 0; border-radius: var(--radius-md); box-shadow: var(--shadow-pop); }
[data-ui="v2"] .at-dp--field .at-dp-head { padding: 0 4px; font-weight: 500; }
[data-ui="v2"] body.at-page .at-dp--field .at-dp-nav button { border: 0; background: transparent; border-radius: var(--radius-pill); color: var(--ink-3); }
[data-ui="v2"] body.at-page .at-dp--field .at-dp-day { border-radius: var(--radius-pill); }
[data-ui="v2"] body.at-page .at-dp--field .at-dp-day.on { background: var(--bg-inverse); color: var(--ink-inverse); }
[data-ui="v2"] body.at-page .at-dp--field .at-dp-foot button { border: 0; background: var(--bg-group); border-radius: var(--radius-pill); padding: 4px 12px; color: var(--ink-2); }
[data-ui="v2"] body.at-page .at-dp--field .at-dp-foot button:hover { background: var(--bg-hover); }
/* 按钮加载态叠加 disabled(防重复提交)时不再半透明 */
[data-ui="v2"] .at-btn.is-loading:disabled { opacity: 1; }

/* 列表名称下的灰色信息行(组件:名称信息行 .at-namemeta,客户 / 项目列表共用):编号 · N 个项目 · ●N 天未跟进
   全部灰色小字,未跟进只用一个小橙点;新外观下隐藏各列表旧的 [N] / 编号行 / 橙色未跟进 */
[data-ui="v2"] body.at-page .at-ll__table :is(.cl-name__pc, .cl-name__code, .cl-name__due--solo, .pl-name__code, .pl-name__due--solo) { display: none !important; }
[data-ui="v2"] body.at-page .at-ll__table .at-namemeta { display: flex !important; align-items: center; gap: 6px; flex-wrap: wrap;
  margin-top: 2px; font-size: 12px; color: var(--ink-4); }
[data-ui="v2"] body.at-page .at-ll__table .at-namemeta i { font-style: normal; opacity: .7; }
[data-ui="v2"] body.at-page .at-ll__table .at-namemeta__due { display: inline-flex; align-items: center; gap: 5px; }
[data-ui="v2"] body.at-page .at-ll__table .at-namemeta__due::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--warn); flex: none; }

/* 项目列表报价额(新外观):金额常规色,确认状态用金额后小圆点,质量得分灰色小标签 */
[data-ui="v2"] body.at-page .at-ll__table .pl-amt__v { font-size: 13px; color: var(--ink); }
[data-ui="v2"] body.at-page .at-ll__table .pl-amt__v.is-zero { color: var(--ink-4); }
[data-ui="v2"] body.at-page .at-ll__table .pl-qs { font-size: 11px; color: var(--ink-4); background: var(--bg-hover); border-radius: var(--radius-pill); padding: 1px 7px; white-space: nowrap; }
[data-ui="v2"] body.at-page .at-ll__table .pl-cf { width: 6px; height: 6px; border-radius: 50%; flex: none; }
[data-ui="v2"] body.at-page .at-ll__table .pl-cf--confirmed { background: var(--success); }
[data-ui="v2"] body.at-page .at-ll__table .pl-cf--reconfirm { background: var(--warn); }

/* 关注按钮:两种状态同宽(「关注 / 已关注」切换不挤动旁边按钮),颜色与底色平滑过渡,关注时星标轻弹一下 */
[data-ui="v2"] .at-star { min-width: 86px; justify-content: center; transition: background .2s ease, color .2s ease; }
[data-ui="v2"] .at-star svg path { transition: fill .2s ease; }
[data-ui="v2"] .at-star[data-fav-on="1"] svg { animation: atStarPop .32s cubic-bezier(.3,.7,.2,1); }
@keyframes atStarPop { 0% { transform: scale(1); } 45% { transform: scale(1.28); } 100% { transform: scale(1); } }
@media (prefers-reduced-motion: reduce) { [data-ui="v2"] .at-star[data-fav-on="1"] svg { animation: none; } }

/* 列表局部刷新(at-ui-v2.js §12):请求超过 150ms 才把表格区淡一点,快速返回时无任何闪动 */
[data-ui="v2"] body.at-page .at-ll__tablebox { transition: opacity .15s ease; }
[data-ui="v2"] body.at-page .at-ll__main.is-ll-loading .at-ll__tablebox { opacity: .55; transition-delay: .15s; }

/* ═════════ 审批流程浮层 + 提交审批 / 技术确认弹窗(at-approval-dropdown.js 新外观分支) ═════════
   浮层:标题与操作区不用分割线,操作区靠底色分层;按钮由 JS 输出 .at-btn 类。
   提交弹窗:.at-mask > .at-dlg 外壳,候选人列表为分组底色上的单选行,摘要为浅底 KV 块。 */
[data-ui="v2"] [data-at-approval-actions] { border-top: 0 !important; background: var(--bg-group) !important; padding: 10px 14px !important; }
[data-ui="v2"] .at-appr-submit__step + .at-appr-submit__step { margin-top: 16px; }
[data-ui="v2"] .at-appr-submit__desc { font-size: 13px; color: var(--ink-3); margin: 2px 2px 8px; }
[data-ui="v2"] .at-appr-submit__cands { background: var(--bg-group); border-radius: var(--radius-md); padding: 4px; }
[data-ui="v2"] .at-appr-submit__cands.is-error { box-shadow: inset 0 0 0 1.5px var(--danger); }
[data-ui="v2"] .at-appr-submit__cand { display: flex; gap: 12px; padding: 11px 12px; border-radius: var(--radius-md); }
[data-ui="v2"] .at-appr-submit__cand:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-appr-submit__name { flex: 1; min-width: 0; font-size: 14px; font-weight: 500; color: var(--ink); }
[data-ui="v2"] .at-appr-submit__name em { font-style: normal; font-weight: 400; font-size: 12px; color: var(--ink-4); margin-left: 6px; }
[data-ui="v2"] .at-appr-submit__role { font-size: 12px; color: var(--ink-4); white-space: nowrap; }
[data-ui="v2"] .at-appr-submit__none { padding: 20px; text-align: center; font-size: 13px; color: var(--danger); }
[data-ui="v2"] .at-appr-submit__sum { margin-top: 16px; background: var(--bg-group); border-radius: var(--radius-md); padding: 8px 14px; }
[data-ui="v2"] .at-appr-submit__kv { display: flex; justify-content: space-between; gap: 12px; padding: 4px 0; font-size: 13px; }
[data-ui="v2"] .at-appr-submit__kv span { color: var(--ink-3); }
[data-ui="v2"] .at-appr-submit__kv b { font-weight: 500; color: var(--ink); text-align: right; min-width: 0; overflow-wrap: anywhere; }
[data-ui="v2"] .at-appr-submit__comment { margin-top: 16px; }
[data-ui="v2"] .at-appr-submit .at-dlg__bd > :first-child { margin-top: 0; }

/* ═════════ 联系人详情(customer/at_contact_view.html;复用客户详情 .at-cv 三栏骨架与关联卡类名) ═════════ */
[data-ui="v2"] .at-ctv__notes { margin-top: 8px; padding: 10px 12px; border-radius: var(--radius-md); background: var(--bg-page); }
[data-ui="v2"] .at-ctv__notes span { display: block; font-size: 12px; color: var(--ink-3); margin-bottom: 4px; }
[data-ui="v2"] .at-ctv__notes p { margin: 0; font-size: 13px; line-height: 1.6; color: var(--ink-2); white-space: pre-wrap; word-break: break-word; }
[data-ui="v2"] .at-ctv__co .at-list { padding: 0 6px 6px; }
[data-ui="v2"] .at-ctv__co .at-li { padding: 8px 12px; gap: 10px; color: inherit; text-decoration: none; }
[data-ui="v2"] .at-ctv__co .at-li > .ic, [data-ui="v2"] .at-ctv__co .at-li > svg { color: var(--ink-4); flex: none; }

/* 关联客户弹窗(at_add_customer_modal + at-add-customer.js):结果区去四边描边与行分割线,层级靠底色 */
[data-ui="v2"] .at-addcust__results { border: 0 !important; border-radius: var(--radius-md) !important; background: var(--bg-group) !important; padding: 4px; }
[data-ui="v2"] .at-addcust__item { border: 0 !important; border-radius: var(--radius-md); }

/* ═════════ 表单弹窗外壳(ui.form_modal / form_field / form_row / ctl / form_check;components/ui.html 同名段) ═════════
   客户 / 项目 / 跟进 / 联系人 / 共享 5 个共用表单弹窗:外壳 = ui.modal(.at-mask / .at-dlg),主体 .at-fbody 纵向排字段行(.at-field),
   多列 .at-frow;文本框 / 文本域 .at-fctl(与 .at-input 同一外观:只显示外框,聚焦加深,不出焦点框);只读 / 禁用灰底无框。
   层级用底色深浅(AI 面板 / 右侧信息栏 / 人员列表 = --bg-group),不用分割线;强调色只给底部主按钮。 */
[data-ui="v2"] .at-fbody { display: flex; flex-direction: column; gap: 18px; min-width: 0; }
[data-ui="v2"] .at-dlg__bd > .at-fbody { padding-bottom: 4px; }
[data-ui="v2"] .at-frow { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px 16px; }
[data-ui="v2"] .at-frow--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 640px) { [data-ui="v2"] .at-frow, [data-ui="v2"] .at-frow--3 { grid-template-columns: minmax(0, 1fr); } }
[data-ui="v2"] .at-fctl {
  display: block; width: 100%; box-sizing: border-box; height: var(--ctl-md); padding: 0 12px; margin: 0;
  border: 0; border-radius: var(--radius); background: var(--bg-elev); color: var(--ink); font: inherit; font-size: 13.5px;
  box-shadow: inset 0 0 0 1px var(--line-2); outline: none; transition: box-shadow var(--dur), background var(--dur);
}
[data-ui="v2"] .at-fctl::placeholder { color: var(--ink-4); }
[data-ui="v2"] .at-fctl:hover { box-shadow: inset 0 0 0 1px var(--ink-4); }
[data-ui="v2"] .at-fctl:focus { box-shadow: inset 0 0 0 1.5px var(--ink-2); outline: none; }
[data-ui="v2"] .at-fctl--area { height: auto; min-height: 88px; padding: 10px 12px; line-height: 1.6; resize: vertical; }
[data-ui="v2"] .at-fctl:disabled, [data-ui="v2"] .at-fctl[readonly] { background: var(--bg-group); box-shadow: none; color: var(--ink-3); cursor: default; }
[data-ui="v2"] .at-fbody .at-field > small { font-size: 12px; color: var(--ink-4); }
/* 控件 + 右侧按钮(企业 / 项目名称 + AI、地址 + 地图定位) */
[data-ui="v2"] .at-fline { display: flex; gap: 8px; align-items: center; position: relative; }
[data-ui="v2"] .at-fline__main { position: relative; flex: 1; min-width: 0; }
[data-ui="v2"] .at-fline > .at-fctl { flex: 1; min-width: 0; }
[data-ui="v2"] .at-fib { width: var(--ctl-md); padding: 0; flex: none; color: var(--ink-3); }
[data-ui="v2"] .at-fib:hover { color: var(--ink); }
[data-ui="v2"] .at-fai { flex: none; }
[data-ui="v2"] .at-fai .ic, [data-ui="v2"] .at-fai svg { width: 15px; height: 15px; }
/* 查重下拉 / AI 建议面板(ai-form-enrich.js 注入的 Tailwind 类名,统一按 token 着色) */
[data-ui="v2"] .at-fsimilar { position: absolute; top: calc(100% + 6px); left: 0; right: 0; z-index: var(--z-dropdown);
  max-height: 220px; overflow-y: auto; padding: 6px; font-size: 12.5px; background: var(--bg-elev); border-radius: var(--radius-md); box-shadow: var(--shadow-pop); }
[data-ui="v2"] .at-fsimilar.hidden, [data-ui="v2"] .at-faipanel.hidden { display: none; }
[data-ui="v2"] .at-fsimilar > a, [data-ui="v2"] .at-fsimilar > div { display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 7px 10px; border-radius: var(--radius-sm); border: 0 !important; color: var(--ink); text-decoration: none; }
[data-ui="v2"] .at-fsimilar > a:hover { background: var(--bg-hover) !important; }
[data-ui="v2"] .at-fsimilar :is(.text-slate-500, .text-slate-400) { color: var(--ink-4); }
[data-ui="v2"] .at-fsimilar .text-red-500 { color: var(--danger); }
[data-ui="v2"] .at-fsimilar .text-yellow-500 { color: var(--warn); }
[data-ui="v2"] .at-faipanel { margin-top: 10px; padding: 12px 14px; border-radius: var(--radius-md); background: var(--bg-group); }
[data-ui="v2"] .at-faipanel #atCreateCustomerModal__aiClose, [data-ui="v2"] .at-faipanel button[id$="__aiClose"] { color: var(--ink-3) !important; }
[data-ui="v2"] .at-faipanel :is(button.bg-primary, button[id^="_aiApplyBtn"]) { background: var(--accent) !important; color: var(--accent-ink) !important; border-radius: var(--radius-pill) !important; }
[data-ui="v2"] .at-faipanel :is(button.bg-primary, button[id^="_aiApplyBtn"]):hover { background: var(--accent-2) !important; }
[data-ui="v2"] .at-faipanel input[type="radio"] { accent-color: var(--ink); }
/* 复选框行(ui.form_check) */
[data-ui="v2"] .at-fcheck { align-items: flex-start; gap: 10px; }
[data-ui="v2"] .at-fcheck .at-check__box { margin-top: 2px; }
[data-ui="v2"] .at-fcheck__t { display: flex; flex-direction: column; gap: 2px; font-size: 13.5px; color: var(--ink); }
[data-ui="v2"] .at-fcheck__t small { font-size: 12px; color: var(--ink-4); }
/* 跟进弹窗:左表单 + 右信息栏(at-action-modal.js 注入内联样式的小标题 / 标签,这里压成常规字重与 token 色) */
[data-ui="v2"] .at-fsplit { display: grid; grid-template-columns: minmax(0, 1fr) 220px; gap: 20px; align-items: start; }
@media (max-width: 720px) { [data-ui="v2"] .at-fsplit { grid-template-columns: minmax(0, 1fr); } }
[data-ui="v2"] .at-fside { flex-direction: column; gap: 14px; padding: 16px; border-radius: var(--radius-md); background: var(--bg-group); font-size: 12.5px; color: var(--ink); }
[data-ui="v2"] .at-fside h4 { text-transform: none !important; letter-spacing: 0 !important; font-size: 13px !important; color: var(--ink-2) !important; }
[data-ui="v2"] .at-fside .at-dim { color: var(--ink-4) !important; font-size: 11.5px !important; }
/* 共享弹窗:搜索 / 已选胶囊(中性)/ 人员列表(分组块,行间 1px 底色缝,无分割线) */
[data-ui="v2"] .at-fshare { margin-top: 2px; }
[data-ui="v2"] .at-fshare__search { margin-bottom: 12px; }
[data-ui="v2"] .at-fshare__sel { margin-bottom: 12px; }
[data-ui="v2"] .at-fshare__sel .at-dim { color: var(--ink-4) !important; font-size: 12px !important; }
[data-ui="v2"] .at-fshare .at-share-chip { display: inline-flex; align-items: center; gap: 6px; height: 24px; padding: 0 6px 0 10px;
  border-radius: var(--radius-pill); background: var(--bg-group); color: var(--ink-2); font-size: 12px; }
[data-ui="v2"] .at-fshare .at-share-chip button { border: 0; background: transparent; color: var(--ink-4); cursor: pointer; padding: 0 2px; font-size: 12px; line-height: 1; }
[data-ui="v2"] .at-fshare .at-share-chip button:hover { color: var(--ink); }
[data-ui="v2"] .at-fshare__list { max-height: 360px; overflow-y: auto; padding: 4px; border-radius: var(--radius-md); background: var(--bg-group); display: flex; flex-direction: column; gap: 1px; }
[data-ui="v2"] .at-fshare__list > div:not(.at-share-row) { color: var(--ink-4) !important; }
[data-ui="v2"] .at-fshare .at-share-row { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: var(--radius-sm); cursor: pointer; color: var(--ink); transition: background var(--dur); }
[data-ui="v2"] .at-fshare .at-share-row:hover { background: var(--bg-hover); }
[data-ui="v2"] .at-fshare .at-share-row.is-selected { background: var(--bg-elev); }
[data-ui="v2"] .at-fshare .at-share-row .at-check { pointer-events: none; }
[data-ui="v2"] .at-share-row__t { flex: 1; min-width: 0; font-size: 13px; }
[data-ui="v2"] .at-share-row__t small { display: block; font-size: 11.5px; color: var(--ink-4); }

/* 地图选点弹窗(components/tw_map_picker.html 旧 Tailwind 写法,dark: 变体只认 .dark 类):新外观下底色 / 文字 / 按钮跟随 token,
   深色模式不再整块白底;地图画布本身保持服务商配色 */
[data-ui="v2"] #mapPickerModal > .fixed { background: var(--bg-mask); backdrop-filter: none; }
[data-ui="v2"] #mapPickerModal .max-w-2xl { background: var(--bg-elev); color: var(--ink); border-radius: var(--radius-xl); box-shadow: var(--shadow-modal); }
[data-ui="v2"] #mapPickerModal .max-w-2xl > div:first-child { padding: 20px 22px 6px; }
[data-ui="v2"] #mapPickerModal #map-picker-title { color: var(--ink); font-size: 19px; font-weight: 600; }
[data-ui="v2"] #mapPickerModal .max-w-2xl > div:first-child > button { color: var(--ink-3); border-radius: var(--radius-pill); }
[data-ui="v2"] #mapPickerModal .max-w-2xl > div:first-child > button:hover { background: var(--bg-hover); color: var(--ink); }
[data-ui="v2"] #mapPickerModal .border-b { border-bottom: 0; padding: 6px 22px 14px; }
[data-ui="v2"] #mapPickerModal #mapSearchInput { background: var(--bg-elev); color: var(--ink); border: 0; border-radius: var(--radius);
  box-shadow: inset 0 0 0 1px var(--line-2); outline: none; }
[data-ui="v2"] #mapPickerModal #mapSearchInput:focus { box-shadow: inset 0 0 0 1.5px var(--ink-2); }
[data-ui="v2"] #mapPickerModal #mapSearchInput::placeholder { color: var(--ink-4); }
[data-ui="v2"] #mapPickerModal #mapSearchSuggestions { background: var(--bg-elev); color: var(--ink); border: 0; box-shadow: var(--shadow-pop); }
[data-ui="v2"] #mapPickerModal #mapContainer { background: var(--bg-group); }
[data-ui="v2"] #mapPickerModal :is(#mapLoading, #mapError) p { color: var(--ink-3); }
[data-ui="v2"] #mapPickerModal :is(#mapLoading, #mapError) svg { color: var(--ink-4); }
[data-ui="v2"] #mapPickerModal #mapError button { background: var(--bg-inverse); color: var(--ink-inverse); border-radius: var(--radius-pill); }
[data-ui="v2"] #mapPickerModal #locateCurrentBtn { background: var(--bg-elev); box-shadow: var(--shadow-pop); }
[data-ui="v2"] #mapPickerModal #locateCurrentBtn svg { color: var(--ink-2); }
[data-ui="v2"] #mapPickerModal .max-w-2xl > .px-4.py-3:not(.bg-slate-50):not(:first-child) { padding: 14px 22px 4px; }
[data-ui="v2"] #mapPickerModal .max-w-2xl > .px-4.py-3:not(.bg-slate-50):not(:first-child) svg { color: var(--ink-4); }
[data-ui="v2"] #mapPickerModal #selectedAddress { color: var(--ink); }
[data-ui="v2"] #mapPickerModal #selectedCoords { color: var(--ink-4); font-family: var(--font-mono); }
[data-ui="v2"] #mapPickerModal .bg-slate-50 { background: transparent; padding: 16px 22px 20px; gap: 8px; }
[data-ui="v2"] #mapPickerModal .bg-slate-50 > button { height: var(--ctl-md); padding: 0 16px; border-radius: var(--radius-pill); font-size: 13.5px; }
[data-ui="v2"] #mapPickerModal .bg-slate-50 > button:first-child { background: transparent; color: var(--ink); border: 1px solid var(--line-2); }
[data-ui="v2"] #mapPickerModal .bg-slate-50 > button:first-child:hover { background: var(--bg-hover); }
[data-ui="v2"] #mapPickerModal #confirmLocationBtn { background: var(--accent); color: var(--accent-ink); border: 0; }
[data-ui="v2"] #mapPickerModal #confirmLocationBtn:hover:not(:disabled) { background: var(--accent-2); }

/* ═════════ 收尾:浮层 / 预览框去四边描边,改底色分层(审计 L8) ═════════
   筛选浮层里的搜索下拉框(at_searchable_select)、人员 / 搜索下拉面板、项目「锁定理由」浮层、文件预览框均为内联描边,
   新外观下去掉描边:浮层靠阴影浮起,浮层内控件用分组底色;旧外观不受影响。 */
[data-ui="v2"] .at-filter-pop .at-ss-input-wrap { border: 0 !important; background: var(--bg-group-ov) !important; }
[data-ui="v2"] .at-ss-panel { border: 0 !important; box-shadow: var(--shadow-pop) !important; }
[data-ui="v2"] #wlPop { border: 0 !important; box-shadow: var(--shadow-pop) !important; }
[data-ui="v2"] #atFilePreviewBody .at-fp-list { border-right: 0 !important; }
[data-ui="v2"] #atFilePreviewBody :is(.at-fp-frame, .at-fp-bar, .at-fp-notes) { border: 0 !important; background: var(--bg-group-ov) !important; }
/* 报销「多张发票」合并弹窗(JS 挂到 body,页面无 preflight,h3 / p 带浏览器默认外边距):
   清掉标题 / 副标题默认外边距,× 与标题首行对齐(原为整块垂直居中,比标题低半行;审计 L10) */
[data-ui="v2"] .at-ev__mmask .at-dlg__hd { align-items: flex-start; }
[data-ui="v2"] .at-ev__mmask .at-dlg__hd h3 { margin: 0; line-height: 26px; }
[data-ui="v2"] .at-ev__mmask .at-dlg__hd p { margin: 2px 0 0; }
[data-ui="v2"] .at-ev__mmask .at-dlg__hd > .at-ib { margin-top: -1px; flex: none; }
/* 项目详情失败 / 搁置横幅(project/at_view.html .at-pv__abn,内联样式 → !important):
   改为浅底提示条 —— 中性分组底、无描边,图标去掉实心色块只保留状态色(失败 --danger / 搁置 --warn) */
[data-ui="v2"] .at-pv__abn { background: var(--bg-group) !important; border: 0 !important; border-radius: var(--radius-lg) !important; padding: 12px 16px !important; }
[data-ui="v2"] .at-pv__abn .at-pv__abn-ic { width: 20px !important; height: 20px !important; background: transparent !important; color: var(--warn) !important; align-self: flex-start; margin-top: 1px; }
[data-ui="v2"] .at-pv__abn--lost .at-pv__abn-ic { color: var(--danger) !important; }
[data-ui="v2"] .at-pv__abn #failDetailPanel { border: 0 !important; background: var(--bg-elev) !important; border-radius: var(--radius-md) !important; }

/* 顶栏 / 页标题细节对齐原型:创建按钮无下拉箭头、任务与语言之间无分隔线;页标题行高 1.5(原型 36px) */
[data-ui="v2"] .at-topbar__chev, [data-ui="v2"] .at-topbar__sep { display: none !important; }
[data-ui="v2"] body.at-page .at-ll h1.at-ll__title,
[data-ui="v2"] body.at-page h1.at-cv__title,
[data-ui="v2"] body.at-page h1.at-doc__title { line-height: 1.5; }

/* ═════════ 9. 手机宽度(≤768px) · 只作用于新外观,老 AT 页面不受影响 ═════════
   9.1 外壳:侧栏变左侧抽屉(<html data-sbm="open">,at-sidebar.js bindMobileDrawer),顶栏加菜单按钮、收成图标 */
[data-ui="v2"] .at-topbar__menu-btn { display: none !important; }
[data-ui="v2"] .at-sb-backdrop { display: none; }
@media (max-width: 768px) {
  [data-ui="v2"] aside.at-sidebar,
  [data-ui="v2"][data-sb="collapsed"] aside.at-sidebar {
    position: fixed; top: 0; left: 0; bottom: 0; width: min(280px, 84vw); height: 100dvh; z-index: 65;
    transform: translateX(-100%); transition: transform 220ms var(--ease); box-shadow: none; }
  [data-ui="v2"][data-sbm="open"] aside.at-sidebar { transform: none; box-shadow: var(--shadow-modal); }
  [data-ui="v2"][data-sbm="open"] .at-sb-backdrop { display: block; position: fixed; inset: 0; z-index: 64; background: var(--bg-mask); }
  [data-ui="v2"][data-sbm="open"] body { overflow: hidden; }
  [data-ui="v2"] .at-sidebar .at-sb-pin { display: none !important; }
  /* 抽屉里一律按展开态显示(忽略桌面折叠记忆) */
  [data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-logo { display: block; }
  [data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-brandtext { display: flex; }
  [data-ui="v2"][data-sb="collapsed"] .at-sidebar :is(.at-sb-label, .at-sb-chev, .at-sb-mechev) { display: inline-flex; }
  [data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-mename { display: block; }
  [data-ui="v2"][data-sb="collapsed"] .at-sidebar :is(.at-sb-link, .at-sb-gbtn) { justify-content: flex-start; padding: 0 10px; }
  [data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-me { justify-content: flex-start; padding: 8px; height: auto; }
  [data-ui="v2"][data-sb="collapsed"] .at-sidebar .at-sb-menu { right: 10px; width: auto; }
  [data-ui="v2"] .at-sidebar .at-sb-brand { padding-right: 18px; }

  /* 顶栏:菜单按钮 + 图标化搜索 / 创建,图标按钮收紧 */
  [data-ui="v2"] .at-topbar { padding: 0 10px !important; gap: 6px !important; height: 56px !important; }
  [data-ui="v2"] .at-topbar__menu-btn { display: inline-flex !important; align-items: center; justify-content: center; flex: none; margin-right: auto;
    border: 0; background: transparent; cursor: pointer; padding: 0; }
  [data-ui="v2"] .at-topbar > div:has(> .at-topbar__search) { flex: 0 0 auto !important; }
  [data-ui="v2"] .at-topbar__search { width: 34px !important; max-width: 34px !important; height: 34px !important; padding: 0 !important; }
  [data-ui="v2"] .at-topbar__search > span:not(:first-child) { display: none !important; }
  [data-ui="v2"] .at-topbar__search > span:first-child { left: 50% !important; transform: translate(-50%, -50%) !important; }
  [data-ui="v2"] .at-topbar__create { width: 34px !important; height: 34px !important; padding: 0 !important; justify-content: center; font-size: 0 !important; gap: 0 !important; }
  [data-ui="v2"] .at-topbar__ib { width: 32px !important; height: 32px !important; }
  [data-ui="v2"] .at-topbar > div:last-child { gap: 0 !important; }
  [data-ui="v2"] .at-topbar > div:last-child > span[style*="width:10px"] { display: none; }
  [data-ui="v2"] #atQuickCreateMenu { position: fixed !important; top: 60px !important; right: 10px !important; left: 10px !important; width: auto !important; }
}

/* 9.2 页面:内边距收窄、页头上下堆叠、详情单栏、标签轨道 / 表格横滑、弹窗变底部抽屉、右侧抽屉全屏 */
@media (max-width: 768px) {
  [data-ui="v2"] body.at-page :is(.at-ll__main, .at-cv__main, .at-pagewrap) { padding: 16px 16px 64px !important; }
  [data-ui="v2"] body.at-page main.dash-main { padding: 16px 16px 64px !important; }
  [data-ui="v2"] body.at-page .at-ll__main { height: auto; }
  [data-ui="v2"] body.at-page :is(h1.at-ll__title, h1.at-cv__title, h1.at-doc__title, .at-ph h1) { font-size: 22px !important; line-height: 1.35; }

  /* 页头:标题一行,操作另起一行(不再和标题抢宽度,避免标题被挤成竖排) */
  [data-ui="v2"] body.at-page :is(.at-cv__head, .at-doc__head, .at-ph) { flex-direction: column; align-items: stretch !important; gap: 10px; }
  [data-ui="v2"] body.at-page :is(.at-cv__headl, .at-cv__titlerow, .at-doc__titlerow) { flex-wrap: wrap; min-width: 0; }
  [data-ui="v2"] body.at-page :is(.at-cv__acts, .at-doc__acts, .at-ph__acts) { flex-wrap: wrap; justify-content: flex-start; }
  /* 吸顶标题行在手机上占屏太多,取消吸顶 */
  [data-ui="v2"] body.at-page [data-sticky-head] { position: static; }
  [data-ui="v2"] body.at-page [data-sticky-head]::before { display: none; }

  /* 详情:三栏 / 主侧两栏 → 单栏 */
  [data-ui="v2"] body.at-page .at-cv__grid { grid-template-columns: minmax(0, 1fr) !important; }
  [data-ui="v2"] .at-doc__body { grid-template-columns: minmax(0, 1fr) !important; }
  [data-ui="v2"] .at-form-grid { grid-template-columns: minmax(0, 1fr); }

  /* 标签轨道:放不下时横向滑动,不换行不溢出页面 */
  [data-ui="v2"] .at-tabs { max-width: 100%; overflow-x: auto; flex-wrap: nowrap; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  [data-ui="v2"] .at-tabs::-webkit-scrollbar { display: none; }
  [data-ui="v2"] .at-tabs > .at-tab { flex: none; }

  /* 列表:搜索框独占一行,表格在圆角容器内横滑(「⋯」列已在 §5 钉右侧) */
  [data-ui="v2"] body.at-page .at-ll__frow { gap: 10px; }
  [data-ui="v2"] body.at-page .at-ll__frow > .at-ll__filters { flex-basis: 100%; flex-wrap: wrap; }
  [data-ui="v2"] body.at-page .at-ll__filters .at-input { flex: 1 1 100%; width: auto !important; }
  [data-ui="v2"] body.at-page .at-ll__tablebox { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  [data-ui="v2"] .at-pager { flex-wrap: wrap; gap: 8px; }

  /* 详情里的小表格(产品明细 / 报销明细等):自身横滑 */
  [data-ui="v2"] :is(.at-mini-table, .at-ev__dt) { display: block; max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }

  /* 弹窗 → 底部抽屉;右侧抽屉 → 全屏 */
  [data-ui="v2"] .at-mask { align-items: flex-end !important; padding: 0 !important; }
  [data-ui="v2"] .at-dlg { max-width: none !important; max-height: 92dvh; border-radius: var(--radius-xl) var(--radius-xl) 0 0; }
  [data-ui="v2"] .at-dlg__hd { padding: 18px 18px 6px; }
  [data-ui="v2"] .at-dlg__bd { padding: 8px 18px 6px; }
  [data-ui="v2"] .at-dlg__ft { padding: 14px 18px calc(16px + env(safe-area-inset-bottom)); }
  [data-ui="v2"] .at-mshell { padding: 0 !important; align-items: flex-end !important; }
  [data-ui="v2"] .at-mshell__dlg { width: 100% !important; max-width: none !important; max-height: 92dvh !important; border-radius: var(--radius-xl) var(--radius-xl) 0 0 !important; }
  [data-ui="v2"] :is(.at-drawer, .at-drawer--lg) { top: 0; right: 0; bottom: 0; width: 100vw; max-width: none; border-radius: 0; }
  [data-ui="v2"] .at-toast { min-width: 0; max-width: calc(100vw - 32px); }
  /* 面包屑:各级不折成两行,最后一级省略号 */
  [data-ui="v2"] body.at-page :is(.at-cv__crumbs, .at-ph__crumb, .at-ll__crumb, .at-doc__crumb) { display: flex; align-items: center; flex-wrap: nowrap; min-width: 0; overflow: hidden; }
  [data-ui="v2"] body.at-page :is(.at-cv__crumbs, .at-ph__crumb, .at-ll__crumb, .at-doc__crumb) > * { flex: none; white-space: nowrap; }
  [data-ui="v2"] body.at-page :is(.at-cv__crumbs, .at-ph__crumb, .at-ll__crumb, .at-doc__crumb) > :last-child { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
  /* 项目阶段条:7 个节点放不下 → 卡内横滑 */
  [data-ui="v2"] body.at-page .at-stage { overflow-x: auto; scrollbar-width: none; }
  /* 小源(course-buddy.css .cb-wrap 96px)在手机上缩到 64px,提示气泡可换行、不超出屏幕;位置仍由 course-buddy.js 用 right/bottom 写 */
  [data-ui="v2"] .cb-wrap { width: 64px; height: 64px; }
  [data-ui="v2"] .cb-wrap .cb-bubble { bottom: 60px; white-space: normal; width: max-content; max-width: 58vw; font-size: 12.5px; padding: 6px 11px; }
  [data-ui="v2"] .cb-side-right .cb-bubble { right: 34px; }
  [data-ui="v2"] .cb-side-left .cb-bubble { left: 34px; }
}
