  .seg button.on{background:var(--accent);color:#0b0d12;box-shadow:0 3px 9px rgba(20,214,255,.28)}
  /* ---------- v71：地图绘制窗口 ---------- */
  /* v371：必须**连写 `.modal.map-win`（0,2,0）** —— 单类 `.map-win` 与 `.modal` 同权重（各 0,1,0），
     而 `.modal` 定义在样式表**更靠后** ⇒ 原来的 max-width:640px 被 `.modal` 的 400px 整条压掉
     （v368 子画布 400px 同族；地图配置窗此前一直是 400px 宽）。 */
  .modal.map-win{max-width:640px}
  .map-cfg{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;margin:0 0 10px}
  .map-cfg label{display:flex;flex-direction:column;gap:5px;font-size:11.5px;color:var(--text-3)}
  .map-cfg input{
    width:90px;padding:8px 10px;border:1px solid var(--line-strong);border-radius:9px;
    font:inherit;font-size:13px;outline:none;background:#fff;color:var(--text);
  }
  .map-cfg input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
  .map-echo{font-size:12px;color:var(--text);font-weight:600;margin:0 0 12px;font-variant-numeric:tabular-nums}
  /* v175：PS「画布大小」同款九宫格锚点 —— 3×3 圆点，选中高亮；面板本体不写字，提示只在 title 里 */
  .anchor175{display:grid;grid-template-columns:repeat(3,15px);grid-template-rows:repeat(3,15px);gap:1px;padding:6px;border:1px solid var(--line-strong);border-radius:10px;background:#fff;margin-left:auto;align-self:center}
  .anchor175[hidden]{display:none}
  .anchor175 button{width:15px;height:15px;padding:0;border:0;background:transparent;cursor:pointer;position:relative}
  .anchor175 button::after{content:'';position:absolute;left:50%;top:50%;width:5px;height:5px;margin:-2.5px 0 0 -2.5px;border-radius:50%;background:#c9ccd8}
  .anchor175 button:hover::after{background:var(--accent);transform:scale(1.3)}
  .anchor175 button.on::after{background:var(--accent);transform:scale(1.9)}
  #askOverlay{z-index:90}
  #askMsg{white-space:pre-line}
  /* ---------- v78：地图浮层（素材栏 + 生成地图）—— 网格直接画在主画布上，无容器框 ---------- */
  #mapBar{
    position:fixed;left:50%;bottom:14px;transform:translateX(-50%);z-index:33;
    display:flex;flex-direction:column;gap:14px;max-width:min(1060px,calc(100vw - 60px));
    padding:10px 14px;
    background:rgba(255,255,255,.97);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
    border-radius:14px;box-shadow:0 10px 30px rgba(20,22,35,.14);
  }
  #mapBar[hidden]{display:none}
  /* v87/v89：控制排 —— 左侧 随机旋转 / 隐藏网格 / 一键铺满，右侧 新建地图，单独一行摆在素材上面 */
  .map-bar-top{display:flex;align-items:center;gap:18px;flex:0 0 auto}
  .map-bar-left{display:flex;align-items:center;gap:18px;flex:0 0 auto}
  .map-bar-top .spacer{flex:1;min-width:0}
  /* v81：只展示素材图片（无标题 / 无提示 / 无按钮），缩略图 64px */
  /* v173：素材栏布局改造 —— 由「单行横向左右滚动」改成「网格自动换行 + 垂直上下滚动」。
     素材卡片尺寸一个字不动（仍 64px），切换 1 / 2 / 3 排只改容器高度（见下面三档 .rows*-173）。
     scrollbar-gutter:stable 是让滚动条槽一直占着位置 —— 不然素材一多，滚动条一冒出来
     可用宽度就变窄、每排能放几张跟着跳，切档时会看见卡片重排抖动。 */
  .map-asset-list{
    display:grid;grid-template-columns:repeat(auto-fill,64px);grid-auto-rows:64px;gap:8px;align-content:start;
    overflow-x:hidden;overflow-y:auto;scrollbar-gutter:stable;
    /* v109：宽度固定 —— 素材再多也只在容器内部滚动（不再把浮层撑宽）；上留白给小叉 */
    flex:0 0 auto;width:min(860px,62vw);padding:14px 12px;   /* v136：右侧 12px 给最后一张的小叉（原 4px 会被裁掉） */
    scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent;
  }
  /* v173：三档高度 = 上下留白 28 + N 排 ×64 + (N-1)×8 —— 上限锁死 3 排，免得素材栏把画布挡严实 */
  .map-asset-list.rows1-173{height:92px}
  .map-asset-list.rows2-173{height:164px}
  .map-asset-list.rows3-173{height:236px}
  .map-asset-list::-webkit-scrollbar{width:8px}
  .map-asset-list::-webkit-scrollbar-track{background:transparent}
  .map-asset-list::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:4px}
  .map-asset-list::-webkit-scrollbar-thumb:hover{background:var(--text-3)}
  /* v109：图片与外框尺寸一致（去掉内边距）；四角由内层 .map-shot 按外框倒角做视觉裁剪（纯视觉，像素绘制不变） */
  .map-asset{position:relative;width:64px;height:64px;flex:0 0 64px;border:2px solid var(--line);border-radius:10px;padding:0;cursor:pointer;background:#fff}
  .map-shot{width:100%;height:100%;border-radius:8px;overflow:hidden}
  .map-asset canvas{width:100%;height:100%;display:block;image-rendering:pixelated}
  /* v110：选中边框加重（3px 实色 + 4px 光晕），辨识度拉满 */
  .map-asset.on{border:3px solid var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
  /* v83：选中素材右上角的小叉（删除该素材，格子引用跟着重排） */
  .map-asset-x{
    position:absolute;top:-9px;right:-9px;width:20px;height:20px;border-radius:50%;
    border:1px solid var(--line);background:#fff;color:var(--text-2);
    font-size:11px;line-height:1;cursor:pointer;display:none;place-items:center;padding:0;z-index:2;
  }
  /* v90：小叉悬浮 / 选中时出现（每个素材都带一个，不再只渲染选中的那个） */
  /* v110：小叉只跟随悬浮（选中态不再常驻，免得满屏叉） */
  .map-asset:hover .map-asset-x{display:grid}
  .map-asset-x:hover{color:#d33;border-color:#d33}
  /* v83：素材末尾永久保留的加号空位（点击回工作流加素材） */
  .map-asset.map-add{
    display:grid;place-items:center;font-size:24px;color:var(--text-3);
    border-style:dashed;background:transparent;user-select:none;
  }
  .map-asset.map-add:hover{color:var(--accent);border-color:var(--accent)}
  /* v109：多选改全局开关（左上角勾选框撤掉）—— 池里选中的卡片照旧高亮 */
  .map-asset.multi{border:3px solid var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
  /* v157：素材分类切换 —— 分段高亮胶囊，与随机旋转等 .mini-btn 功能按钮明显区分 */
  /* v315：与视频生成选项按钮同款三态（原 accent 实线分段退役） */
  .map-cat{display:flex;flex:0 0 auto;gap:6px}
  .map-cat-btn{appearance:none;border:1px solid var(--line);background:var(--card);color:var(--text);
    font:500 12.5px/1 var(--sans);padding:9px 14px;border-radius:10px;cursor:pointer;white-space:nowrap;transition:.15s}
  .map-cat-btn:hover{border-color:var(--accent);color:var(--accent)}
  .map-cat-btn.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
  html[data-theme="dark"] .map-cat-btn{background:#232631;border-color:transparent;color:#e8eaf1}
  html[data-theme="dark"] .map-cat-btn:hover{background:#262a35;color:var(--accent)}
  html[data-theme="dark"] .map-cat-btn.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
  /* v157：工作流【添加】渐变悬浮菜单 —— v159 起弹出层挂 body 用 fixed 定位
     （.sheet 的 overflow:hidden + will-change:transform 会把 absolute 弹层整块裁掉），JS 摆到按钮上方；点窗外关闭、窗内点击不关 */
  .add-wrap157{position:relative;display:inline-flex}
  .add-menu157{position:fixed;z-index:400;
    display:flex;flex-direction:column;gap:6px;min-width:176px;padding:8px;
    border:1px solid var(--line);border-radius:12px;
    background:#fff;                       /* v166：纯白（v160 那条渐变撤掉） */
    box-shadow:0 10px 28px rgba(20,24,40,.18)}
  .add-menu157[hidden]{display:none}
  .add-opt157{appearance:none;border:0;border-radius:9px;background:transparent;
    color:var(--text);font:500 13px system-ui,sans-serif;padding:9px 12px;cursor:pointer;
    text-align:left;white-space:nowrap}
  .add-opt157:hover{color:var(--accent);background:var(--accent-soft)}
  /* v166：地图【随机】设置窗 —— 与【添加】同一套弹层口径（挂 body + fixed 摆到按钮上方；
     点窗外关闭、窗内点击不关），底色纯白；随机旋转单选 / 随机翻转复选 */
  .rand-menu166{position:fixed;z-index:400;
    display:flex;flex-direction:column;gap:4px;min-width:190px;padding:8px;
    border:1px solid var(--line);border-radius:12px;
    background:#fff;
    box-shadow:0 10px 28px rgba(20,24,40,.18)}
  .rand-menu166[hidden]{display:none}
  .rand-cap166{color:var(--text-3);font:600 11px system-ui,sans-serif;padding:4px 8px 2px}
  .rand-opt166{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:9px;
    color:var(--text);font:500 13px system-ui,sans-serif;cursor:pointer;white-space:nowrap}
  .rand-opt166:hover{color:var(--accent);background:var(--accent-soft)}
  .rand-opt166 input{accent-color:var(--accent);width:14px;height:14px;margin:0;flex:0 0 14px}
  /* v172：【变化】按钮 = 图标 + 文字（本体还是 .mini-btn，跟【随机】同一套样式）。
     ⚠️ [hidden] 必须显式压回 none —— .mini-btn 一旦带上 display:inline-flex，
     属性选择器 [hidden] 的优先级就盖不住它（装饰模式下按钮要跟着藏）。 */
  .mini-btn.with-ico172{display:inline-flex;align-items:center;gap:5px}
  .mini-btn[hidden]{display:none}
  .mini-btn.with-ico172 svg{width:12px;height:12px;flex:0 0 12px;fill:none;stroke:currentColor;
    stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
  /* v173：素材栏右上角那颗「展示行数」按钮 —— 纯图标、界面里没有任何文字，
     几排只看小矩形里有几条横线；文字只活在 title 悬浮提示里。 */
  .mini-btn.ico-only173{display:inline-flex;align-items:center;justify-content:center;padding:5px 7px}
  .mini-btn.ico-only173 svg{width:14px;height:14px;flex:0 0 14px;fill:none;stroke:currentColor;
    stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
  /* v180：【隐藏网格】/【吸附】用 .ico-only173 这套纯图标按钮 —— 必须显式把 [hidden] 压回 none：
     .mini-btn.ico-only173 的 display:inline-flex 定义在上面那条 .mini-btn[hidden] 之后，
     所以【吸附】在「地块绘制」模式下藏不掉。 */
  .mini-btn.ico-only173[hidden]{display:none}
  /* v180：【吸附】设置窗里的步长输入框（只收正整数；1 = 关闭吸附） */
  .snap-inp180{width:100%;box-sizing:border-box;margin:2px 0 4px;padding:7px 9px;
    border:1px solid var(--line);border-radius:9px;
    background:#fff;color:var(--text);font:600 13px system-ui,sans-serif;outline:none}
  .snap-inp180:focus{border-color:var(--accent)}
  /* v109：开着的【多选】按钮（aria-pressed 不用 disabled —— 沙箱与真浏览器都不吞点击） */
  .mini-btn[aria-pressed="true"]{border-color:var(--accent);background:var(--accent);color:#0b0d12}
  /* v90：拖拽排序（拖动中半透明；落点目标虚线高亮） */
  .map-asset.dragging{opacity:.4}
  .map-asset.drag-over{border-style:dashed;border-color:var(--accent)}
  .modal .spacer{flex:1;min-width:0}

