
/* ============================================================
   Holo-Lab 设计令牌(深色默认 + 浅色)
   ============================================================ */
:root, :root[data-theme="dark"]{
  --bg-0:#0A0E16; --bg-1:#0F1420;
  --bg-grad:
    radial-gradient(ellipse 1400px 700px at 75% -8%, rgba(56,189,248,.10), transparent 60%),
    radial-gradient(ellipse 900px 600px at 8% 105%, rgba(124,92,255,.08), transparent 60%),
    linear-gradient(160deg,#0A0E16,#0F1420 60%,#0A0E16);
  --grid-line:rgba(124,150,200,.04);
  --surface-1:rgba(22,28,42,.72); --surface-2:rgba(30,38,56,.85); --surface-raised:#1A2234;
  --border:rgba(124,150,200,.14); --border-strong:rgba(124,150,200,.26); --hairline:rgba(56,189,248,.18);
  --text:#E6EDF7; --text-muted:#8A97AD; --text-dim:#5A6678; --text-on-accent:#04121C;
  --accent:#38BDF8; --accent-2:#7C5CFF;
  --accent-grad:linear-gradient(135deg,#38BDF8 0%,#7C5CFF 100%);
  --accent-glow:rgba(56,189,248,.30);
  --ok:#2DD4A7; --ok-bg:rgba(45,212,167,.12);
  --warn:#F5B544; --warn-bg:rgba(245,181,68,.12);
  --idle:#5A6678; --idle-bg:rgba(90,102,120,.12);
  --danger:#FF5A6E; --danger-bg:rgba(255,90,110,.12); --danger-glow:rgba(255,90,110,.45);
  --info:#8B9DC3; --info-bg:rgba(139,157,195,.10);
  --font-sans:"Inter var",-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  --font-mono:"JetBrains Mono","SF Mono","Cascadia Mono",Menlo,monospace;
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:24px; --sp-6:32px; --sp-8:48px;
  --r-sm:8px; --r-md:12px; --r-lg:16px; --r-pill:999px; --r-card:16px;
  --sh-1:0 1px 0 rgba(255,255,255,.04) inset, 0 8px 24px rgba(0,0,0,.35);
  --sh-card:0 0 0 1px var(--border), 0 12px 40px rgba(0,0,0,.40);
  --sh-glow:0 0 0 1px var(--hairline), 0 0 24px var(--accent-glow);
  --sh-danger:0 0 0 1px rgba(255,90,110,.4), 0 0 28px var(--danger-glow);
  --ease:cubic-bezier(.2,.7,.3,1); --dur:.18s;
  --fs-h1:30px; --fs-h2:24px; --fs-h3:19px; --fs-body:16px; --fs-sm:14px; --fs-xs:13px;
}
:root[data-theme="light"]{
  --bg-0:#F4F7FB; --bg-1:#EAF0F8;
  --bg-grad:
    radial-gradient(ellipse 1300px 680px at 78% -10%, rgba(14,165,233,.12), transparent 58%),
    radial-gradient(ellipse 1000px 640px at 3% 112%, rgba(109,93,246,.07), transparent 60%),
    linear-gradient(160deg,#F4F7FB 0%,#EAF0F8 58%,#ECF2FB 100%);
  --grid-line:rgba(15,23,42,.042);
  --surface-1:rgba(255,255,255,.78); --surface-2:rgba(255,255,255,.92); --surface-raised:#FFFFFF;
  --border:rgba(15,23,42,.10); --border-strong:rgba(15,23,42,.18); --hairline:rgba(14,165,233,.25);
  --text:#0F1A2E; --text-muted:#5A6B85; --text-dim:#8A97AD; --text-on-accent:#FFFFFF;
  --accent:#0EA5E9; --accent-2:#6D5DF6;
  --accent-grad:linear-gradient(135deg,#0EA5E9 0%,#6D5DF6 100%);
  --accent-glow:rgba(14,165,233,.25);
  --ok:#0EA371; --ok-bg:rgba(14,163,113,.10);
  --warn:#D98A00; --warn-bg:rgba(217,138,0,.10);
  --idle:#94A3B8; --idle-bg:rgba(148,163,184,.12);
  --danger:#E11D48; --danger-bg:rgba(225,29,72,.08); --danger-glow:rgba(225,29,72,.35);
  --info:#64748B; --info-bg:rgba(100,116,139,.08);
  --sh-card:0 0 0 1px var(--border), 0 8px 28px rgba(15,23,42,.10);
}

/* ============================================================
   背景质感 + 基础排版
   ============================================================ */
.rmp-scope{ color:var(--text); font:var(--fs-body)/1.55 var(--font-sans); -webkit-font-smoothing:antialiased; }
body.rmp-scope{ background:var(--bg-grad) fixed; min-height:100vh; margin:0; }
body.rmp-scope::before{ content:""; position:fixed; inset:0; z-index:-1; pointer-events:none;
  background:
    linear-gradient(var(--grid-line) 1px, transparent 1px) 0 0/34px 34px,
    linear-gradient(90deg, var(--grid-line) 1px, transparent 1px) 0 0/34px 34px;
  -webkit-mask:linear-gradient(180deg,#000 0%,rgba(0,0,0,.45) 42%,transparent 78%);
          mask:linear-gradient(180deg,#000 0%,rgba(0,0,0,.45) 42%,transparent 78%); }
.rmp-scope h1,.rmp-scope h2,.rmp-scope h3{ color:var(--text); margin:0; font-weight:650; }
.rmp-scope a{ color:var(--accent); text-decoration:none; }
.rmp-mono,.mono{ font-family:var(--font-mono); font-variant-numeric:tabular-nums; }
.rmp-hero-title{ font-size:var(--fs-h1); line-height:1.2; letter-spacing:-.01em; font-weight:700;
  background:var(--accent-grad); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }
.rmp-label{ display:inline-flex; align-items:center; font-size:13px; line-height:1.2; letter-spacing:.08em; text-transform:uppercase; color:var(--text-muted); }
.rmp-wrap{ max-width:1180px; margin:0 auto; padding:var(--sp-5) var(--sp-4) var(--sp-8); }

/* ============================================================
   图标 + LED
   ============================================================ */
.icon{ display:inline-block; flex:0 0 auto; vertical-align:-.14em; line-height:0; }
.icon--glow{ filter:drop-shadow(0 0 6px var(--accent-glow)); }
.icon--ok{ color:var(--ok); } .icon--warn{ color:var(--warn); }
.icon--danger{ color:var(--danger); } .icon--idle{ color:var(--idle); }
.icon--accent{ color:var(--accent); }
.led{ display:inline-flex!important; align-items:center; justify-content:center; width:1em; height:1em;
  line-height:0; vertical-align:-.12em; flex:0 0 auto; }
.led svg{ display:block; width:1em; height:1em; overflow:visible; }
.led--ok{ color:var(--ok); } .led--warn{ color:var(--warn); }
.led--danger{ color:var(--danger); } .led--info{ color:var(--info); }
.led--idle{ color:var(--idle); opacity:.6; }
.led--ok svg, .led--danger svg{ animation:led-pulse 2s var(--ease) infinite; }
@keyframes led-pulse{ 0%,100%{ filter:drop-shadow(0 0 0 transparent); } 50%{ filter:drop-shadow(0 0 6px currentColor); } }

/* ============================================================
   顶栏
   ============================================================ */
.rmp-topbar{ position:sticky; top:0; z-index:40; display:flex; align-items:center; gap:var(--sp-4);
  padding:var(--sp-3) var(--sp-4); background:var(--surface-1); backdrop-filter:blur(16px) saturate(160%);
  border-bottom:1px solid var(--border); }
.rmp-topbar .tb-brand{ display:flex; align-items:center; gap:var(--sp-2); font-weight:650; color:var(--text); }
.rmp-topbar .tb-brand .icon{ color:var(--accent); }
.rmp-topbar .tb-spacer{ flex:1; }
.rmp-topbar .tb-link{ display:inline-flex; align-items:center; gap:6px; padding:6px 10px; border-radius:var(--r-md);
  color:var(--text-muted); font-size:var(--fs-sm); transition:all var(--dur) var(--ease); }
.rmp-topbar .tb-link:hover{ color:var(--text); background:var(--surface-2); }
.rmp-topbar .tb-dev{ border:1px solid var(--border); color:var(--text-dim); }

/* ============================================================
   卡片族
   ============================================================ */
.rmp-card{ position:relative; background:var(--surface-1); backdrop-filter:blur(16px) saturate(160%);
  border-radius:var(--r-card); box-shadow:var(--sh-card); padding:var(--sp-5);
  transition:box-shadow var(--dur) var(--ease), transform var(--dur) var(--ease); }
.rmp-card::before{ content:""; position:absolute; inset:0 0 auto 0; height:1px;
  background:linear-gradient(90deg,transparent,var(--hairline),transparent); border-radius:var(--r-card) var(--r-card) 0 0; }
.rmp-card:hover{ box-shadow:var(--sh-glow); transform:translateY(-1px); }
.card--accent{ border-left:3px solid var(--accent); }
.card--danger{ background:var(--danger-bg); box-shadow:var(--sh-danger); }
.card--muted{ box-shadow:0 0 0 1px var(--info-bg); opacity:.92; }
.card-head{ display:flex; align-items:center; gap:var(--sp-2); margin-bottom:var(--sp-3); }
.card-head .icon{ color:var(--accent); }
.card-head h3{ font-size:var(--fs-h3); }
.card-body{ color:var(--text-muted); font-size:var(--fs-body); }

.module-card{ display:flex; flex-direction:column; gap:var(--sp-2); text-decoration:none; cursor:pointer; }
.module-card .mc-icon{ color:var(--accent); margin-bottom:var(--sp-1); transition:filter var(--dur) var(--ease); }
.module-card:hover .mc-icon{ filter:drop-shadow(0 0 8px var(--accent-glow)); }
.module-card .mc-name{ font-size:var(--fs-h3); font-weight:650; color:var(--text); }
.module-card .mc-meta{ font-size:var(--fs-sm); color:var(--text-muted); }

/* ============================================================
   按钮
   ============================================================ */
.btn{ display:inline-flex; align-items:center; justify-content:center; gap:8px; min-height:50px; padding:0 24px;
  border-radius:10px; background:var(--surface-2); border:1px solid var(--border); color:var(--text);
  font:500 15px/1 var(--font-sans); cursor:pointer; transition:all var(--dur) var(--ease); touch-action:manipulation; }
.btn:hover{ box-shadow:var(--sh-glow); border-color:var(--border-strong); transform:translateY(-1px); }
.btn:active{ transform:translateY(0); }
.btn--primary{ background:var(--accent-grad); color:var(--text-on-accent); border:0;
  box-shadow:0 1px 0 rgba(255,255,255,.25) inset, 0 4px 16px var(--accent-glow); }
.btn--primary:hover{ box-shadow:0 1px 0 rgba(255,255,255,.3) inset, 0 6px 22px var(--accent-glow); }
.btn--danger{ background:transparent; border:1px solid var(--danger); color:var(--danger); }
.btn--danger:hover{ background:var(--danger-bg); box-shadow:var(--sh-danger); }
.btn--ghost{ background:transparent; }
.btn--chip{ min-height:44px; padding:0 20px; border-radius:var(--r-pill); font-size:var(--fs-body); }
.btn--chip.is-active{ background:var(--accent-grad); color:var(--text-on-accent); border:0; }
.btn--icon{ width:46px; min-height:46px; padding:0; }
.btn--sm{ min-height:42px; font-size:var(--fs-sm); padding:0 18px; }
.btn--lg{ min-height:58px; font-size:16px; }
.btn[disabled]{ cursor:not-allowed; border-style:dashed; color:var(--text-dim); box-shadow:none; transform:none; }
.btn[disabled]:hover{ box-shadow:none; transform:none; }
.btn--danger[disabled]{ border-color:var(--idle); color:var(--idle); }
.btn--gated .lock-reason{ display:none; font-size:13px; color:var(--warn); margin-left:4px; }
.btn-row{ display:flex; flex-wrap:wrap; gap:var(--sp-2); }
@media (max-width:640px){ .btn--gated[disabled] .lock-reason{ display:inline; } }

/* ============================================================
   状态徽章
   ============================================================ */
.badge{ display:inline-flex; align-items:center; justify-content:center; gap:4px; padding:2px 10px; border-radius:var(--r-pill);
  font:600 var(--fs-xs)/1.2 var(--font-sans); min-height:22px; vertical-align:middle; white-space:nowrap; }
.badge .icon,.badge .led,.badge svg{ flex:0 0 auto; }
.badge--ok{ color:var(--ok); background:var(--ok-bg); }
.badge--warn{ color:var(--warn); background:var(--warn-bg); }
.badge--idle{ color:var(--idle); background:var(--idle-bg); }
.badge--danger{ color:var(--danger); background:var(--danger-bg); }
.badge--info{ color:var(--info); background:var(--info-bg); border:1px dashed var(--info); }

/* Inline state normalizer: scattered legacy pages define badge/pill classes locally.
   Keep all icon + text status chips on one optical center line. */
.rmp-scope :where(.badge,.pill,.badge-st,.badge-status,.badge-stat,.badge-soon,
  .agent-pill,.mc-pill,.role-pill,.audit-status,.skill-status,.vhud-chip,.vhud-status,
  .br-chip,.vl-chip,.devview-tag){
  display:inline-flex!important; align-items:center!important; justify-content:center;
  gap:4px; line-height:1.2; vertical-align:middle; white-space:nowrap;
}
.rmp-scope :where(.badge,.pill,.badge-st,.badge-status,.badge-stat,.badge-soon,
  .agent-pill,.mc-pill,.role-pill,.audit-status,.skill-status,.vhud-chip,.vhud-status,
  .br-chip,.vl-chip,.devview-tag) :where(.icon,.led,svg){
  flex:0 0 auto; vertical-align:middle;
}

/* ============================================================
   状态条
   ============================================================ */
.statusbar{ display:flex; flex-wrap:wrap; gap:var(--sp-4); align-items:stretch; padding:var(--sp-3) var(--sp-4);
  background:var(--surface-1); border-radius:var(--r-md); box-shadow:var(--sh-card);
  transition:box-shadow var(--dur) var(--ease), background var(--dur) var(--ease); }
.sb-item{ display:flex; flex-direction:column; gap:2px; min-width:0; }
.sb-item .sb-main{ display:flex; align-items:center; gap:6px; font:600 var(--fs-body) var(--font-sans); color:var(--text); }
.sb-item .sb-sub{ font:var(--fs-xs) var(--font-mono); color:var(--text-dim); }
.statusbar.is-danger{ box-shadow:var(--sh-danger); background:var(--danger-bg); }

/* ============================================================
   模态 / 进度 / Toast / 列表 / 网格 / 反馈
   ============================================================ */
.modal-mask{ position:fixed; inset:0; background:rgba(10,14,22,.66); backdrop-filter:blur(4px);
  display:grid; place-items:center; z-index:100; padding:var(--sp-4); }
.modal{ background:var(--surface-raised); border-radius:var(--r-lg); box-shadow:var(--sh-card);
  width:min(480px,94vw); padding:var(--sp-5); color:var(--text); }
.modal--danger{ box-shadow:var(--sh-danger); }
.modal-actions{ display:flex; justify-content:flex-end; gap:var(--sp-2); margin-top:var(--sp-4); }
.phys-readout{ list-style:none; padding:0; margin:var(--sp-3) 0; display:grid; gap:6px; }
.phys-readout code{ font-family:var(--font-mono); color:var(--accent); }
.warn-line{ color:var(--warn); display:flex; align-items:center; gap:6px; }
.progress{ height:6px; border-radius:var(--r-pill); background:var(--surface-2); overflow:hidden; }
.progress>i{ display:block; height:100%; background:var(--accent-grad); box-shadow:0 0 12px var(--accent-glow);
  transition:width var(--dur) var(--ease); }
.toast{ position:fixed; top:var(--sp-5); left:50%; transform:translateX(-50%) translateY(-160%);
  background:var(--surface-raised); border:1px solid var(--hairline); border-radius:var(--r-pill);
  padding:var(--sp-2) var(--sp-4); box-shadow:var(--sh-glow); z-index:200; color:var(--text);
  display:flex; align-items:center; gap:6px; transition:transform .24s var(--ease); }
.toast.show{ transform:translateX(-50%) translateY(0); }
.toast--ok{ color:var(--ok); } .toast--danger{ color:var(--danger); }
.grid{ display:grid; gap:var(--sp-4); grid-template-columns:repeat(auto-fill,minmax(240px,1fr)); }
.result-box{ border-radius:var(--r-md); padding:var(--sp-4); margin-top:var(--sp-3); display:none;
  font-size:var(--fs-sm); color:var(--text-muted); }
.result-box.is-loading{ display:block; box-shadow:var(--sh-glow); }
.result-box.is-success{ display:block; box-shadow:0 0 0 1px var(--ok-bg); background:var(--ok-bg); color:var(--text); }
.result-box.is-error{ display:block; box-shadow:0 0 0 1px var(--danger-bg); background:var(--danger-bg); color:var(--text); }
.skeleton{ background:linear-gradient(90deg,var(--surface-1),var(--surface-2),var(--surface-1));
  background-size:200% 100%; animation:sk 1.2s linear infinite; border-radius:var(--r-sm); min-height:14px; }
@keyframes sk{ to{ background-position:-200% 0; } }
.empty-state{ display:flex; flex-direction:column; align-items:center; gap:var(--sp-2); padding:var(--sp-6);
  color:var(--text-muted); text-align:center; }
.empty-state .icon{ color:var(--text-dim); }
details.rmp-fold{ border-radius:var(--r-md); }
details.rmp-fold>summary{ cursor:pointer; color:var(--text-muted); font-size:var(--fs-sm); list-style:none;
  display:flex; align-items:center; gap:6px; padding:var(--sp-2) 0; }
details.rmp-fold>summary::-webkit-details-marker{ display:none; }
details.rmp-fold>summary .icon{ transition:transform var(--dur) var(--ease); }
details.rmp-fold[open]>summary .icon{ transform:rotate(90deg); }

.section-nav{ display:flex; flex-wrap:wrap; gap:var(--sp-2); padding:var(--sp-2) 0; position:sticky; top:56px; z-index:20; }
.hud-scan{ position:relative; overflow:hidden; }
.hud-scan::after{ content:""; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(180deg,transparent,var(--accent-glow),transparent) 0 -100%/100% 30% no-repeat;
  animation:hud-scan 2.5s var(--ease) infinite; }
@keyframes hud-scan{ to{ background-position:0 200%; } }

/* 右下浮窗 */
.status-dock{ position:fixed; right:var(--sp-4); bottom:var(--sp-4); z-index:30; display:flex; align-items:center; gap:var(--sp-3);
  background:var(--surface-1); backdrop-filter:blur(16px); border:1px solid var(--border); border-radius:var(--r-pill);
  padding:8px 14px; box-shadow:var(--sh-card); font-size:var(--fs-xs); color:var(--text-muted); }
.status-dock .sd-num{ font-family:var(--font-mono); font-variant-numeric:tabular-nums; color:var(--text); }

@media (prefers-reduced-motion:reduce){ *{ animation:none!important; transition:none!important; } }
@media (max-width:640px){ .rmp-wrap{ padding:var(--sp-4) var(--sp-3) var(--sp-6); } .statusbar{ gap:var(--sp-3); } }

/* ============================================================
   iPad 平板响应式(min-width:768px + 触控设备)— 大按钮 HIG 适配
   ============================================================ */
@media (min-width:768px) and (pointer:coarse){
  /* 基础触控目标最小 44pt */
  .btn{ min-height:52px; padding:0 var(--sp-5); font-size:16px; border-radius:var(--r-lg); gap:8px; }
  .btn--chip{ min-height:44px; padding:0 var(--sp-4); font-size:15px; }
  .btn--sm{ min-height:44px; font-size:15px; padding:0 var(--sp-4); }
  .btn--lg{ min-height:60px; font-size:18px; }
  .btn--icon{ width:52px; min-height:52px; }
  .btn-row{ gap:var(--sp-3); }
  /* 首页模块网格:4 列宽卡片 */
  .module-grid{ grid-template-columns:repeat(3,1fr)!important; gap:var(--sp-5)!important; }
  .module-card{ padding:var(--sp-5)!important; gap:var(--sp-3)!important; min-height:160px; }
  .module-card .mc-icon{ margin-bottom:var(--sp-2)!important; }
  .module-card .mc-icon svg{ width:40px!important; height:40px!important; }
  .module-card .mc-name{ font-size:18px!important; }
  .module-card .mc-meta{ font-size:14px!important; }
  /* 输入框 / textarea */
  input:not([type=checkbox]):not([type=radio]):not([type=range]),
  textarea, select{
    min-height:48px; font-size:16px!important; padding:10px 14px!important;
    border-radius:var(--r-md)!important;
  }
  /* 顶栏链接加大触控区 */
  .rmp-topbar .tb-link{ padding:10px 16px; font-size:15px; }
  /* 状态条数据项间距 */
  .statusbar{ gap:var(--sp-5); padding:var(--sp-4) var(--sp-5); }
  /* 模态弹窗 */
  .modal{ width:min(560px,90vw); padding:var(--sp-6); }
  .modal-actions{ gap:var(--sp-3); margin-top:var(--sp-5); }
}

/* iPad 四列(横屏宽屏) */
@media (min-width:1024px) and (pointer:coarse){
  .module-grid{ grid-template-columns:repeat(4,1fr)!important; }
}

/* 手动「平板视图」:点右下浮动按钮 → <html class=tablet-preview>,任意设备(含桌面 Chrome)强制大按钮,方便预览/演示/触屏外接 */
html.tablet-preview .btn{ min-height:52px; padding:0 var(--sp-5); font-size:16px; border-radius:var(--r-lg); gap:8px; }
html.tablet-preview .btn--chip{ min-height:44px; padding:0 var(--sp-4); font-size:15px; }
html.tablet-preview .btn--sm{ min-height:44px; font-size:15px; padding:0 var(--sp-4); }
html.tablet-preview .btn--lg{ min-height:60px; font-size:18px; }
html.tablet-preview .btn--icon{ width:52px; min-height:52px; }
html.tablet-preview .btn-row{ gap:var(--sp-3); }
html.tablet-preview .module-grid{ grid-template-columns:repeat(3,1fr)!important; gap:var(--sp-5)!important; }
html.tablet-preview .module-card{ padding:var(--sp-5)!important; gap:var(--sp-3)!important; min-height:160px; }
html.tablet-preview .module-card .mc-icon svg{ width:40px!important; height:40px!important; }
html.tablet-preview .module-card .mc-name{ font-size:18px!important; }
html.tablet-preview .module-card .mc-meta{ font-size:14px!important; }
html.tablet-preview input:not([type=checkbox]):not([type=radio]):not([type=range]),
html.tablet-preview textarea, html.tablet-preview select{ min-height:48px; font-size:16px!important; padding:10px 14px!important; border-radius:var(--r-md)!important; }
html.tablet-preview .rmp-topbar .tb-link{ padding:10px 16px; font-size:15px; }
html.tablet-preview .statusbar{ gap:var(--sp-5); padding:var(--sp-4) var(--sp-5); }
html.tablet-preview .vl-btn,html.tablet-preview .song-chip,html.tablet-preview .vl-chip{ min-height:44px; font-size:15px; }
.tablet-toggle-fab{ position:fixed; right:16px; bottom:16px; z-index:99999; min-height:44px; padding:0 16px; max-width:calc(100vw - 32px);
  display:inline-flex; align-items:center; gap:6px; border-radius:999px; cursor:pointer; border:none;
  background:var(--accent,#38BDF8); color:#06121f; font-size:14px; font-weight:700; white-space:nowrap;
  box-shadow:0 4px 16px rgba(0,0,0,.28); -webkit-tap-highlight-color:transparent; }
html.tablet-preview .tablet-toggle-fab{ background:var(--accent-2,#7C5CFF); color:#fff; }
/* ── 移动端通用(所有触屏:手机+平板)── 触控目标≥44pt(Apple HIG) + 防 iOS 输入聚焦缩放 ── */
@media (pointer:coarse){
  .btn{ min-height:44px; }
  .vl-btn,.song-chip,.vl-chip,.btn--chip,.btn--sm{ min-height:40px; }
  input:not([type=checkbox]):not([type=radio]):not([type=range]),
  textarea,select{ font-size:16px!important; min-height:44px; }
  a,button,[role=button],[onclick]{ -webkit-tap-highlight-color:rgba(56,189,248,.22); }
}
/* ── 手机小屏(≤640px)── 单列/紧凑/防横向溢出,保证各模块页在手机上正常显示 ── */
@media (max-width:640px){
  html.rmp-scope,body.rmp-scope{ overflow-x:hidden; }
  .rmp-wrap{ padding-left:var(--sp-3); padding-right:var(--sp-3); }
  .module-grid{ grid-template-columns:1fr!important; }
  .btn-row{ flex-wrap:wrap; }
  .statusbar{ flex-wrap:wrap; gap:var(--sp-2); }
  .rmp-card{ padding:var(--sp-3); }
  /* 视频流/地图/表格/代码块不超出屏宽 */
  img,canvas,video,table,pre,svg{ max-width:100%!important; height:auto; }
  .vl-chat,.vl-input,.result-box,.vc-bubble{ max-width:100%; }
  .rmp-topbar{ flex-wrap:wrap; gap:6px; padding:8px 10px; }
	  .tablet-toggle-fab{ right:10px; bottom:10px; font-size:13px; padding:0 12px; max-width:calc(100vw - 20px); }
}
@media print{ .tablet-toggle-fab{ display:none; } }

/* PWA standalone 全屏安全区适配 */
@media (display-mode:standalone){
  body.rmp-scope{ padding-top:env(safe-area-inset-top,0px); }
  .rmp-topbar{
    padding-top:calc(var(--sp-3) + env(safe-area-inset-top,0px));
    padding-left:max(var(--sp-4), env(safe-area-inset-left,0px));
    padding-right:max(var(--sp-4), env(safe-area-inset-right,0px));
  }
  .rmp-wrap{
    padding-bottom:calc(var(--sp-8) + env(safe-area-inset-bottom,0px));
    padding-left:max(var(--sp-4), env(safe-area-inset-left,0px));
    padding-right:max(var(--sp-4), env(safe-area-inset-right,0px));
  }
}

/* ===== 深色主题:各页 inline 硬编码浅色 → 深色映射(属性选择器集中覆盖,不改各页 inline) =====
   用 background:/color: 前缀精确匹配(避免误伤 color:#fff 白字按钮);彩色规则置于中性后,
   以覆盖 #fff⊂#fffbeb 这类子串匹配;仅 [data-theme=dark] 生效,浅色态零影响 */
[data-theme="dark"] [style*="background:#fff"],[data-theme="dark"] [style*="background: #fff"],
[data-theme="dark"] [style*="background:#f8fafc"],[data-theme="dark"] [style*="background:#f9fafb"],
[data-theme="dark"] [style*="background:#fafafa"],[data-theme="dark"] [style*="background:#fafbfc"],
[data-theme="dark"] [style*="background:#f3f4f6"],[data-theme="dark"] [style*="background:#f1f5f9"],
[data-theme="dark"] [style*="background:#f5f5f5"],[data-theme="dark"] [style*="background:#eef2ff"],
[data-theme="dark"] [style*="background:#f8fafd"],[data-theme="dark"] [style*="background:#f4f7fb"]
{ background-color:var(--surface-2,#161c28)!important; border-color:var(--border,rgba(124,150,200,.16))!important; }
[data-theme="dark"] [style*="background:#eff6ff"],[data-theme="dark"] [style*="background:#f0f9ff"],
[data-theme="dark"] [style*="background:#dbeafe"],[data-theme="dark"] [style*="background:#e0f2fe"],[data-theme="dark"] [style*="background:#e0e7ff"]
{ background-color:rgba(56,189,248,.13)!important; border-color:rgba(56,189,248,.30)!important; }
[data-theme="dark"] [style*="background:#ecfdf5"],[data-theme="dark"] [style*="background:#d1fae5"],
[data-theme="dark"] [style*="background:#f0fdf4"],[data-theme="dark"] [style*="background:#dcfce7"]
{ background-color:rgba(34,197,94,.13)!important; border-color:rgba(34,197,94,.30)!important; }
[data-theme="dark"] [style*="background:#fffbeb"],[data-theme="dark"] [style*="background:#fef3c7"],
[data-theme="dark"] [style*="background:#fef9c3"],[data-theme="dark"] [style*="background:#fffaf0"]
{ background-color:rgba(245,158,11,.13)!important; border-color:rgba(245,158,11,.30)!important; }
[data-theme="dark"] [style*="background:#fef2f2"],[data-theme="dark"] [style*="background:#fee2e2"],
[data-theme="dark"] [style*="background:#fff1f2"]
{ background-color:rgba(239,68,68,.13)!important; border-color:rgba(239,68,68,.32)!important; }
[data-theme="dark"] [style*="color:#111827"],[data-theme="dark"] [style*="color:#1f2937"],
[data-theme="dark"] [style*="color:#0f172a"],[data-theme="dark"] [style*="color:#374151"],
[data-theme="dark"] [style*="color:#1e293b"],[data-theme="dark"] [style*="color:#334155"],
[data-theme="dark"] [style*="color:#1f2a37"],[data-theme="dark"] [style*="color:#0f1a2e"]
{ color:var(--text,#e6edf7)!important; }
[data-theme="dark"] [style*="color:#6b7280"],[data-theme="dark"] [style*="color:#64748b"],
[data-theme="dark"] [style*="color:#9ca3af"],[data-theme="dark"] [style*="color:#94a3b8"],
[data-theme="dark"] [style*="color:#666"],[data-theme="dark"] [style*="color:#888"],
[data-theme="dark"] [style*="color:#475569"],[data-theme="dark"] [style*="color:#4b5563"],[data-theme="dark"] [style*="color:#cbd5e1"]
{ color:var(--text-muted,#9fb0c8)!important; }
[data-theme="dark"] [style*="color:#dc2626"],[data-theme="dark"] [style*="color:#991b1b"],[data-theme="dark"] [style*="color:#b91c1c"]{ color:#f87171!important; }
[data-theme="dark"] [style*="color:#b45309"],[data-theme="dark"] [style*="color:#92400e"],[data-theme="dark"] [style*="color:#a16207"]{ color:#fbbf24!important; }
[data-theme="dark"] [style*="color:#075985"],[data-theme="dark"] [style*="color:#0369a1"],[data-theme="dark"] [style*="color:#0c4a6e"],[data-theme="dark"] [style*="color:#1e40af"]{ color:#7dd3fc!important; }
[data-theme="dark"] [style*="color:#15803d"],[data-theme="dark"] [style*="color:#166534"],[data-theme="dark"] [style*="color:#0a8a3a"],[data-theme="dark"] [style*="color:#065f46"]{ color:#4ade80!important; }
[data-theme="dark"] input:not([type=checkbox]):not([type=radio]):not([type=range]),
[data-theme="dark"] textarea,[data-theme="dark"] select
{ background-color:var(--surface-2,#161c28)!important; color:var(--text,#e6edf7)!important; border-color:var(--border,rgba(124,150,200,.18))!important; }
[data-theme="dark"] .stat-cell,[data-theme="dark"] .status-dock{ background-color:var(--surface-1)!important; color:var(--text-muted)!important; }
[data-theme="dark"] input[type=range]{ background:transparent!important; accent-color:var(--accent); }
