/* 立体空间模式（cabin-dim.js，html[data-skin="alice"][data-dim="space"]）：深空画布 + 有厚度的玻璃块 + 悬停倾斜浮起 + 模块从纵深飞入。
 * 只给「悬停的那一块」和「正在飞入的块」加 transform：常驻 transform 会让块变成 fixed 子元素的定位基准，
 * 弹出层 / 浮窗会跟着跑偏。飞入只动 transform 不动 opacity：祖先 opacity<1 会让里面卡片的玻璃不透壁纸。 */
#dim-space, #dim-space-gl { position: fixed; inset: 0; width: 100%; height: 100%; z-index: 0; pointer-events: none; display: none; }
html[data-skin="alice"][data-dim="space"] :is(#dim-space, #dim-space-gl) { display: block; }
html[data-skin="alice"][data-dim="space"][data-theme="light"] :is(#dim-space, #dim-space-gl) { opacity: .55; }
html[data-skin="alice"][data-dim="space"] .grid-bg { display: none; }

/* 玻璃块的厚度：底边叠两道错位的细亮边 + 一道落在「地面」上的长投影，块看起来是一块有厚度的板 */
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"] body:has(> .shell) :is(.card, .kpi, .cd-card, .cd-kpi, .cx-panel, .co-metric, .co-readiness, .co-activity, .co-stepper, .cx-revenue, .co-soc-panel) {
  transition: transform .5s cubic-bezier(.2, .8, .2, 1), box-shadow .5s ease !important;
  box-shadow: inset 0 1px 0 var(--glass-hi), inset 0 0 0 1px rgba(var(--fg-rgb), .02),
    0 2px 0 -1px rgba(var(--dim-cy-rgb), .14), 0 4px 0 -2px rgba(var(--dim-vi-rgb), .10),
    0 22px 44px -18px rgba(0, 0, 0, .55);
}
/* 悬停：跟着鼠标倾斜、向前浮起，边缘亮起一圈冷光 */
html[data-skin="alice"][data-dim="space"] .dim-hot {
  transform: perspective(1100px) rotateX(var(--dx, 0deg)) rotateY(var(--dy, 0deg)) translateZ(var(--dz, 0px));
  transition: transform .12s ease-out, box-shadow .3s ease !important;
  position: relative; z-index: 3;
  box-shadow: inset 0 1px 0 var(--glass-hi), 0 0 0 1px rgba(var(--dim-cy-rgb), .38),
    0 3px 0 -1px rgba(var(--dim-cy-rgb), .30), 0 6px 0 -2px rgba(var(--dim-vi-rgb), .20),
    0 0 34px -6px rgba(var(--dim-cy-rgb), .38), 0 38px 70px -22px rgba(0, 0, 0, .7);
}
/* 跟着光标走的高光（玻璃表面的反光）：.card 原本的渐变保留在下面一层 */
html[data-skin="alice"][data-dim="space"] .card.dim-hot {
  background-image: radial-gradient(420px circle at var(--mx, 50%) var(--my, 0%), rgba(255, 255, 255, .11), transparent 55%),
    linear-gradient(160deg, rgba(var(--fg-rgb), .10), rgba(var(--fg-rgb), .02));
}
html[data-skin="alice"][data-dim="space"] :is(.kpi, .cd-kpi, .co-metric).dim-hot {
  background-image: radial-gradient(160px circle at var(--mx, 50%) var(--my, 0%), rgba(255, 255, 255, .16), transparent 60%);
}
/* 太大的块（整页列表、终端区）不倾斜，只亮边：倾斜大面板读字会晃 */
html[data-skin="alice"][data-dim="space"] :is(.chart, .co-chart, .table-wrap, .table-scroll, .cd-station, .cx-stage, .cx-scene, .co-orbit, .drawer).dim-hot { transform: none; }

/* 模块进场：块从纵深处飞来（错峰见 cabin-dim.js 的 --dd），不动透明度 */
html[data-skin="alice"][data-dim="space"] #view { animation: none !important; }
html[data-skin="alice"][data-dim="space"] .dim-in { animation: dim-in .75s cubic-bezier(.16, .84, .24, 1) var(--dd, 0ms) backwards !important; }
@keyframes dim-in { from { transform: perspective(1200px) translate3d(0, 46px, -460px) rotateX(16deg); } }

@media (max-width: 819px), (pointer: coarse) { html[data-skin="alice"][data-dim="space"] .dim-hot { transform: none; } }

/* 让深空透出来：卡片玻璃更薄、模糊更浅，后面的星场 / 网格 / 超立方体看得见在动（暗色才这样，亮色保持原玻璃）。
 * 饱和度压到 1.1（平时 1.7）：动态背景本身色彩很浓（银河的紫、星云的粉、字符雨的绿），玻璃再放大饱和度，
 * 每块面板就染上身后那一片的颜色——同一屏里左边一栏发紫、右边一栏发蓝，像拼起来的（2026-10-31 用户指出）。
 * 面板底色统一压一层同色深蓝，让各块玻璃色相一致，背景只透出明暗和动感。 */
/* Alice dim.css:47–50。仅普通卡片消费空间 token；不改数据底片或 P5 的 AI 结构面。 */
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"]:not([data-theme="light"]) body :is(.card, .kpi, .cd-card, .cd-kpi, .cx-panel, .co-readiness, .co-activity, .co-stepper) {
  --ac-glass-blur-s: 10px;
  --ac-glass-sat: 1.1;
}
/* 侧栏 / 顶栏：模糊 22px 会把 1–2px 的星点、网格细线完全抹掉，两边看着像实心挡板、和中间通透的星空拼不到一起（2026-11-01 用户圈出）。
 * 截图实测（1600×900，超维网格）：模糊 7px 时细线依旧几乎看不见；2px 星点成柔光、网格线隐约透出、导航字照样清楚；0px 线条会切过文字。
 * 侧栏 → 2px + 底色 .45。顶栏不同：页面往上滚时卡片文字从它底下穿过，2–4px 会透出一层重影字（「晨报」叠在「总览」后面），
 * 所以顶栏取 8px + .55：滚动内容糊干净，星点仍有一点光晕。卡片照旧强模糊——字最密，读字优先。 */
/* 与 cabin.css 的材质前缀对齐，空间覆盖才能胜出；仅限定导航结构面，不改变数据卡片材质。 */
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"]:not([data-theme="light"]) body .sidebar {
  background: rgba(9, 14, 31, .45);
  -webkit-backdrop-filter: blur(2px) saturate(1.1); backdrop-filter: blur(2px) saturate(1.1);
}
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"]:not([data-theme="light"]) body .topbar {
  /* alice.css 的共享吸顶规则含 ID 选择器；在顶栏本身提供变量，不影响正文吸顶筛选条。 */
  --sticky-blur: blur(8px) saturate(1.1);
  -webkit-backdrop-filter: blur(8px) saturate(1.1); backdrop-filter: blur(8px) saturate(1.1);
}
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"]:not([data-theme="light"]) body .topbar::before {
  /* Alice app.css 的 inset 铺满顶栏；撤掉旧接缝规则遗留的固定 height，避免滚动正文透字。 */
  height: auto;
  background: linear-gradient(180deg, rgba(9, 14, 31, .55), rgba(10, 15, 34, .35));
}
html[data-skin="alice"][data-dim="space"] .aurora { opacity: .8; }
/* Alice theme.css 的场景色回退；外观材质提供同名 RGB 时自动沿用。 */
html[data-skin="alice"][data-dim="space"] {
  --dim-cy-rgb: var(--ac-cy-rgb, 34,211,238);
  --dim-vi-rgb: var(--ac-vi-rgb, 167,139,250);
  --dim-pk-rgb: var(--ac-pk-rgb, 244,114,182);
}
/* Flux 的静态网格对应 Alice .grid-bg；只在空间模式撤掉，保留既有色雾。 */
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"] body:has(> .shell) .backdrop::before { display: none; }
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"] body:has(> .shell) .backdrop { opacity: .8; }
/* cabin-atmosphere 的 1px 顶边背景尺寸不能裁掉 Alice 的整块反光。 */
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"] body:has(> .shell) .dim-hot {
  transition: transform .12s ease-out, box-shadow .3s ease !important;
  box-shadow: inset 0 1px 0 var(--glass-hi), 0 0 0 1px rgba(var(--dim-cy-rgb), .38),
    0 3px 0 -1px rgba(var(--dim-cy-rgb), .30), 0 6px 0 -2px rgba(var(--dim-vi-rgb), .20),
    0 0 34px -6px rgba(var(--dim-cy-rgb), .38), 0 38px 70px -22px rgba(0, 0, 0, .7);
}
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"] body:has(> .shell) .card.dim-hot {
  background-image: radial-gradient(420px circle at var(--mx, 50%) var(--my, 0%), rgba(255,255,255,.11), transparent 55%),
    linear-gradient(160deg, rgba(var(--fg-rgb), .10), rgba(var(--fg-rgb), .02));
  background-size: auto; background-position: 0 0;
}
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"] body:has(> .shell) :is(.kpi, .cd-kpi, .co-metric).dim-hot {
  background-image: radial-gradient(160px circle at var(--mx, 50%) var(--my, 0%), rgba(255,255,255,.16), transparent 60%);
  background-size: auto; background-position: 0 0;
}
/* 坐标敏感内容的整个祖先卡片也保持平面，避免只禁用内层仍移动图表 / 表格。 */
html[data-skin="alice"][data-dim="space"] :is(.dim-hot, .dim-in):has(:is(.chart, .co-chart, [_echarts_instance_], .table-wrap, .table-scroll, .tbl, .ex-grid, .cd-station, .cx-stage, .cx-scene, .co-orbit, .drawer, .modal, .menu, [data-dim-static])),
html[data-skin="alice"][data-dim="space"] :is(.drawer, .modal, .menu) :is(.dim-hot, .dim-in) { transform: none; animation: none !important; }
/* Alice 明确不跟随系统 reduce：用户选平面即关闭；手机只取消倾斜，背景与飞入保留。 */


/* Alice dim.css:77 的深蓝色阶只下沉到控件，避免改变 --cabin-data-surface 的底色。 */
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"]:not([data-theme="light"]) body :is(input, textarea, select, .seg) {
  --ac-s-020617: 2,6,23;
  --ac-s-0b1226: 11,18,38;
}
/* Alice app.css:531–535 的面板；仅空间模式，modal/menu 的防透字修补不参与。
 * cabin.css 的共享 :is 含 #cabin-status-popup；保留 #view 分支权重以覆盖其材质。 */
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"] body :is(.drawer, #view .drawer) {
  background: var(--ac-glass-1);
  -webkit-backdrop-filter: blur(var(--ac-drawer-blur, 30px)) saturate(var(--ac-glass-sat));
  backdrop-filter: blur(var(--ac-drawer-blur, 30px)) saturate(var(--ac-glass-sat));
  box-shadow: -30px 0 80px -30px rgba(var(--ac-shadow-rgb), calc(.8 * var(--ac-shadow-k)));
}
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"]:not([data-theme="light"]) body :is(.drawer, #view .drawer) {
  -webkit-backdrop-filter: blur(var(--ac-drawer-blur, 30px)) saturate(1.1);
  backdrop-filter: blur(var(--ac-drawer-blur, 30px)) saturate(1.1);
}
/* Alice app.css:610–612 + dim.css:48；不改变 toast 的字色与层级。 */
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"] body :is(.toast, #view .toast) {
  background: var(--ac-glass-3);
  -webkit-backdrop-filter: blur(var(--ac-glass-blur-s)) saturate(var(--ac-glass-sat));
  backdrop-filter: blur(var(--ac-glass-blur-s)) saturate(var(--ac-glass-sat));
  box-shadow: inset 0 1px 0 var(--ac-glass-hi), var(--ac-sh);
}
:root[data-skin="alice"][data-theme][data-palette][data-dim="space"]:not([data-theme="light"]) body :is(.toast, #view .toast) {
  -webkit-backdrop-filter: blur(10px) saturate(1.1);
  backdrop-filter: blur(10px) saturate(1.1);
}
