/* 对象关系图（#/objects，web/object-map.js）。类名一律 om- 前缀。
 * 气质照国瓷 APS 平台的对象关系图（ontograph.css）：淡段底、段头色条、白底对象卡 + 左色边、
 * 没有数据的对象画虚框、实线 / 虚线、线上小标签白底描边、点亮一条业务线其余淡出。
 * 中性色（底、线、字）一律用工作台的 :root 变量，外壳以后做深色时跟着走；
 * 这里自己定的只有段色、连线灰和空表的琥珀色，都只用在描边、色条和很淡的底色上——字一律用工作台的字色。
 * 所有字号不小于 11px；画布 1:1 显示、不缩放（缩小了字就不到 11px 了），放不下就横向滚动。 */

:root {
  --om-s0: #b7802f;   /* 琥珀：常见是「物料与工艺」这类源头段 */
  --om-s1: #3f6f9a;   /* 钢蓝 */
  --om-s2: #2f7a5b;   /* 青绿 */
  --om-s3: #7a8a4f;   /* 橄榄 */
  --om-s4: #87507c;   /* 梅紫 */
  --om-s5: #8a5a3c;   /* 赭石 */
  --om-band: #7d8a83; /* 底栏「规则与依据」 */
  --om-edge: #a7b3c1; /* 没点亮的连线 */
  --om-empty: #c98a1c;/* 空表虚框 */
}
/* 深色：系统是深色且没被钉成浅色，或外壳显式切到深色。提亮一档，深底上看得清，白底上描边也仍然够 */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --om-s0: #d39a45; --om-s1: #5d8fbf; --om-s2: #3f9c76; --om-s3: #98aa62; --om-s4: #a8699b; --om-s5: #ad7650;
    --om-band: #97a59d; --om-edge: #6f7d8e; --om-empty: #e0a33a;
  }
}
:root[data-theme="dark"] {
  --om-s0: #d39a45; --om-s1: #5d8fbf; --om-s2: #3f9c76; --om-s3: #98aa62; --om-s4: #a8699b; --om-s5: #ad7650;
  --om-band: #97a59d; --om-edge: #6f7d8e; --om-empty: #e0a33a;
}

.om-s0 { --om-c: var(--om-s0); }
.om-s1 { --om-c: var(--om-s1); }
.om-s2 { --om-c: var(--om-s2); }
.om-s3 { --om-c: var(--om-s3); }
.om-s4 { --om-c: var(--om-s4); }
.om-s5 { --om-c: var(--om-s5); }
.om-sband { --om-c: var(--om-band); }

/* ---------------- 整页 ---------------- */
.om-root { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.om-eyebrow { font: 11px var(--mono); color: var(--faint); letter-spacing: .04em; }
.om-head h2.om-headline { margin: 4px 0 4px; font-size: 20px; line-height: 1.4; color: var(--ink); }
.om-summary { margin: 0; font-size: 13px; color: var(--muted); font-variant-numeric: tabular-nums; }
.om-meta { margin: 2px 0 0; font-size: 12px; color: var(--faint); }
.om-muted { color: var(--faint); }
.om-small { font-size: 12px; color: var(--faint); margin: 6px 0 0; line-height: 1.7; }
.om-action-link { font-size: 12.5px; text-decoration: none; padding: 5px 4px; align-self: center; }
.om-link { font-size: 13px; font-weight: 600; text-decoration: none; }

/* 初稿提示、生成状态、空状态 */
.om-draft { border: 1px solid var(--line); border-left: 4px solid var(--accent); border-radius: 10px; padding: 12px 16px;
  background: var(--panel); max-width: 860px; }
.om-draft > b { font-size: 14px; }
.om-draft p { margin: 4px 0 0; font-size: 13px; line-height: 1.75; color: var(--muted); }
.om-draft p.om-small { font-size: 12px; color: var(--faint); }
.om-draft-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 10px; }
.om-status { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; font-size: 13px;
  border: 1px solid var(--line); border-left: 4px solid var(--accent); border-radius: 8px; padding: 10px 14px; background: var(--panel); }
.om-status.om-failed { border-left-color: var(--warn); }
.om-status details { flex-basis: 100%; font-size: 12px; }
.om-status pre { white-space: pre-wrap; overflow-wrap: anywhere; font-size: 11px; margin: 6px 0 0; }
.om-why { font-size: 12.5px; color: var(--muted); line-height: 1.7; }
.om-empty { border: 1px dashed var(--line); border-radius: 10px; padding: 18px 20px; background: var(--panel); max-width: 720px; }
.om-empty p { margin: 6px 0 10px; font-size: 13px; line-height: 1.8; color: var(--muted); }

/* ---------------- 看一条业务线 ---------------- */
.om-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.om-bar-l { font-size: 12px; color: var(--faint); margin-right: 4px; }
button.om-chip { min-height: 30px; padding: 4px 12px; font-size: 12.5px; border-radius: 999px; background: var(--panel);
  border: 1px solid var(--line); color: var(--ink); }
button.om-chip:hover { border-color: var(--accent); color: var(--accent); background: var(--panel); }
button.om-chip.on, button.om-chip.on:hover { background: var(--accent); border-color: var(--accent); color: #fff; }
button.om-chip.om-chip-empty:not(.on) { border-style: dashed; }
button.om-chip:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

/* ---------------- 画布 + 右侧详情 ---------------- */
.om-stage { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; align-items: start; }
.om-stage.om-has-side { grid-template-columns: minmax(0, 1fr) 320px; }
.om-maincol { min-width: 0; display: flex; flex-direction: column; gap: 8px; }
.om-canvas { overflow-x: auto; overflow-y: hidden; border: 1px solid var(--line); border-radius: 10px;
  background: linear-gradient(180deg, var(--panel2), var(--panel) 70%); }
.om-canvas:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.om-svg { display: block; margin: 0 auto; font-family: inherit; user-select: none; -webkit-user-select: none; }
.om-scrollhint { margin: 0; font-size: 12px; color: var(--faint); }

/* SVG：段 */
.om-bg { fill: transparent; }
.om-secbg { fill: var(--om-c); fill-opacity: .045; stroke: var(--om-c); stroke-opacity: .12; pointer-events: none; }
.om-sec-t { font-size: 14.5px; font-weight: 600; fill: var(--ink); }
.om-sec-v { font-size: 12px; fill: var(--muted); }
.om-sec-bar { fill: var(--om-c); fill-opacity: .75; }
.om-sep { stroke: var(--line); stroke-dasharray: 4 4; }

/* SVG：连线。实线＝直接存编号，虚线＝按取值对应；点亮时实线上有流动的亮点，虚线本身流动 */
.om-eg { transition: opacity .25s cubic-bezier(.2, 0, 0, 1); }
.om-e { fill: none; stroke: var(--om-edge); stroke-width: 1.3; transition: stroke .2s; }
.om-soft .om-e { stroke-dasharray: 4 4; }
.om-hit { fill: none; stroke: transparent; stroke-width: 12; cursor: pointer; pointer-events: stroke; }
.om-eg:hover .om-e { stroke: var(--accent); stroke-width: 1.8; }
.om-eg.on .om-e { stroke: var(--accent); stroke-width: 2; }
.om-eg.on.om-soft .om-e { stroke-dasharray: 3 3; animation: om-flow 1.2s linear infinite; }
.om-f { fill: none; stroke: var(--panel); stroke-width: 1.2; stroke-linecap: round; stroke-dasharray: 3 21; opacity: 0; pointer-events: none; }
.om-eg.on .om-f { opacity: .95; animation: om-flow 1.2s linear infinite; }
.om-eg.pick .om-e { stroke-width: 2.8; }
@keyframes om-flow { to { stroke-dashoffset: -24; } }
/* 底栏的隐含关系（对象 → 规则、表 → 资料）：平时不画，点亮时才出现，点线 */
.om-eg.om-vlink { opacity: 0; }
.om-eg.om-vlink .om-e { stroke-dasharray: 1.5 4; stroke-linecap: round; }
.om-eg.om-vlink:not(.on) .om-hit { pointer-events: none; }
.om-svg.om-focus .om-eg.om-vlink:not(.on) { opacity: 0; }
.om-eg.om-vlink.on { opacity: 1; }
.om-eg.om-vlink.on .om-e { stroke-dasharray: 1.5 4; animation: none; }
.om-ah { fill: var(--om-edge); }
.om-ah.om-ah-on { fill: var(--accent); }
/* 线上标签：白底描边，线从字后面穿过去也读得清 */
.om-el { font-size: 11.5px; font-weight: 600; fill: var(--accent); paint-order: stroke; stroke: var(--panel); stroke-width: 4px;
  stroke-linejoin: round; pointer-events: none; transition: opacity .2s; }

/* SVG：对象卡 */
.om-n { cursor: pointer; transition: opacity .25s cubic-bezier(.2, 0, 0, 1); }
.om-n:focus { outline: none; }
.om-card { fill: var(--panel); stroke: var(--om-c); stroke-opacity: .5; stroke-width: 1.2; transition: fill .2s, stroke-width .2s, stroke-opacity .2s; }
.om-cbar { fill: var(--om-c); }
.om-n:hover .om-card, .om-n:focus-visible .om-card, .om-n.on .om-card { stroke-opacity: 1; }
.om-n:hover .om-card, .om-n:focus-visible .om-card { stroke-width: 1.8; }
.om-t { font-size: 13.5px; font-weight: 600; fill: var(--ink); }
.om-c { font-size: 13px; fill: var(--muted); font-variant-numeric: tabular-nums; }
.om-tag { font-size: 13px; fill: var(--faint); }
.om-tag.om-tag-warn { fill: var(--warn); font-weight: 600; }
.om-raw .om-t { font-style: italic; }
.om-n.om-empty .om-card { stroke: var(--om-empty); stroke-opacity: 1; stroke-dasharray: 4 3; fill: color-mix(in srgb, var(--om-empty) 6%, var(--panel)); }
.om-n.om-empty .om-cbar { fill: var(--om-empty); fill-opacity: .6; }
.om-n.om-empty .om-c { fill: var(--warn); }
.om-n.om-more .om-card { stroke-dasharray: 3 3; fill: var(--panel2); }
.om-n.om-more .om-t { fill: var(--accent); }
.om-halo { fill: none; stroke: var(--accent); stroke-opacity: 0; stroke-width: 2; transition: stroke-opacity .2s; }
.om-n.sel .om-halo { stroke-opacity: .35; }
.om-n.sel .om-card { fill: var(--accent-soft); stroke-width: 2; }
/* 点亮一条线：其余淡出，标签只留点亮的 */
.om-svg.om-focus .om-n:not(.on):not(.om-more) { opacity: .38; }
.om-svg.om-focus .om-eg:not(.on) { opacity: .15; }
.om-svg.om-focus .om-el:not(.on), .om-el.om-vl:not(.on) { opacity: 0; }

/* ---------------- 右侧详情（抽屉） ---------------- */
.om-side { border: 1px solid var(--line); border-radius: 10px; background: var(--panel); padding: 12px 14px; font-size: 13px;
  position: sticky; top: 64px; max-height: calc(100vh - 84px); overflow-y: auto; min-width: 0; }
.om-side:focus { outline: none; }
.om-dh { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin-bottom: 4px; }
.om-dh > b { font-size: 15px; font-weight: 600; color: var(--ink); overflow-wrap: anywhere; }
.om-dbar { width: 3px; height: 16px; border-radius: 2px; background: var(--om-c, var(--accent)); }
.om-pill { font-size: 11.5px; padding: 1px 8px; border-radius: 5px; background: var(--panel2); color: var(--muted); white-space: nowrap; }
.om-pill.om-pill-warn { background: color-mix(in srgb, var(--om-empty) 14%, var(--panel)); color: var(--warn); }
.om-pill.om-pill-info { background: var(--accent-soft); color: var(--accent); }
.om-pill.om-pill-soft { background: var(--panel2); color: var(--muted); border: 1px dashed var(--line); }
.om-count { margin: 0 0 6px; font-size: 12.5px; color: var(--muted); font-variant-numeric: tabular-nums; }
.om-desc { margin: 2px 0 8px; color: var(--muted); line-height: 1.7; font-size: 13px; }
.om-kv { display: flex; gap: 10px; padding: 6px 0; border-top: 1px solid var(--line2); }
.om-k { flex: 0 0 5.2em; color: var(--faint); font-size: 12px; padding-top: 2px; }
.om-v { flex: 1; min-width: 0; line-height: 1.65; overflow-wrap: anywhere; }
.om-rels { display: flex; flex-wrap: wrap; gap: 6px; }
button.om-rel { display: inline-flex; align-items: baseline; gap: 6px; min-height: 28px; padding: 3px 9px; font-size: 12px;
  border-radius: 6px; background: var(--panel); color: var(--ink); border: 1px solid var(--line); white-space: normal; text-align: left; }
button.om-rel b { font-weight: 600; }
button.om-rel span { color: var(--muted); }
button.om-rel:hover { border-color: var(--accent); color: var(--accent); background: var(--panel); }
button.om-rel.om-soft, button.om-rel.om-rel-empty { border-style: dashed; }
.om-dir { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px; }
button.om-a { min-height: 0; padding: 0 2px; border: 0; background: none; color: var(--accent); font-weight: 600; font-size: 13px;
  text-decoration: underline; text-underline-offset: 2px; cursor: pointer; white-space: normal; }
.om-vias { display: flex; flex-wrap: wrap; gap: 6px; }
.om-code { font-size: 12px; background: var(--panel2); border: 1px solid var(--line2); border-radius: 5px; padding: 1px 7px; }
.om-act { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
button.om-go { background: var(--accent); color: #fff; border-color: var(--accent); }
button.om-go:hover { background: var(--accent); opacity: .9; }

/* ---------------- 图下：路线说明卡、图例与计数、文字版、提示 ---------------- */
.om-routecard { border: 1px solid var(--line); border-left: 3px solid var(--accent); border-radius: 0 10px 10px 0;
  background: var(--panel); padding: 10px 14px; font-size: 13px; }
.om-rt-title { display: block; font-size: 14px; font-weight: 600; color: var(--ink); margin-bottom: 2px; }
.om-hint { margin: 0; color: var(--muted); font-size: 12.5px; line-height: 1.7; }
.om-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; font-size: 12px; }
.om-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; align-items: center; color: var(--muted); }
.om-lg { display: inline-flex; align-items: center; gap: 6px; }
.om-lg-line { display: inline-block; width: 24px; height: 0; border-top: 1.6px solid var(--om-edge); }
.om-lg-line.om-lg-soft { border-top-style: dashed; }
.om-lg-box { display: inline-block; width: 16px; height: 11px; border: 1.4px dashed var(--om-empty); border-radius: 3px;
  background: color-mix(in srgb, var(--om-empty) 6%, var(--panel)); }
.om-count-line { color: var(--faint); }
.om-textlist { border: 1px solid var(--line); border-radius: 8px; padding: 8px 14px; background: var(--panel); font-size: 13px; }
.om-textlist summary { cursor: pointer; color: var(--muted); }
.om-tl-sec { margin: 10px 0 4px; padding-left: 10px; border-left: 3px solid var(--om-c); }
.om-tl-sec ul { margin: 4px 0 0 18px; padding: 0; line-height: 1.8; color: var(--muted); }
.om-warns { font-size: 12px; color: var(--faint); }
.om-warns summary { cursor: pointer; }
.om-warns ul { margin: 6px 0 0 18px; padding: 0; line-height: 1.8; }

/* ---------------- 窄屏：详情落到图下面，图照样横向滚 ---------------- */
@media (max-width: 1100px) {
  .om-stage.om-has-side { grid-template-columns: minmax(0, 1fr); }
  .om-side { position: static; max-height: none; }
}
@media (max-width: 700px) {
  .om-head h2.om-headline { font-size: 17px; }
  .om-kv { flex-direction: column; gap: 2px; }
  .om-k { flex: none; }
  .om-draft { padding: 10px 12px; }
}

@media (prefers-reduced-motion: reduce) {
  .om-root *, .om-root *::before, .om-root *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; }
}

/* 本体里的对象条目（2026-10-17）：状态看卡片样式，不再每张都印字。
 * 待确认 = 灰色虚框 + 右上角小点；已确认 = 实线（段色）；不采用 = 默认不画，打开「显示不采用」后淡灰、删除线。 */
.om-n.om-inferred .om-c { fill: var(--muted); }
.om-n.om-pending .om-card { stroke: var(--faint); stroke-opacity: 1; stroke-dasharray: 4 3; fill: var(--panel); }
.om-n.om-pending .om-cbar { fill: var(--faint); fill-opacity: .7; }
.om-n.om-pending:hover .om-card, .om-n.om-pending.on .om-card { stroke: var(--om-c); }
.om-dot { fill: var(--faint); }
.om-n.om-ok .om-card { stroke-opacity: .85; stroke-dasharray: none; }
.om-n.om-rejected { opacity: .7; }
.om-n.om-rejected .om-card { stroke: var(--line); stroke-dasharray: 2 3; fill: var(--panel2); }
.om-n.om-rejected .om-t { text-decoration: line-through; fill: var(--muted); }
.om-n.om-rejected .om-cbar { fill: var(--line); }
.om-n.om-nosrc .om-tag { fill: var(--warn); font-weight: 600; }
/* 只看待确认：其余淡出（不挪位置） */
.om-svg.om-only-pending .om-n.om-np:not(.om-ghost):not(.om-more) { opacity: .2; }
.om-svg.om-only-pending .om-eg.om-np { opacity: .1; }
.om-lg-box.om-lg-pending { border: 1.4px dashed var(--faint); background: var(--panel); position: relative; }
.om-lg-box.om-lg-pending::after { content: ""; position: absolute; right: 2px; top: 2px; width: 3px; height: 3px; border-radius: 50%; background: var(--faint); }
.om-lg-box.om-lg-ok { border: 1.4px solid var(--om-s1); background: var(--panel); }
.om-lg-box.om-lg-rej { border: 1.4px dotted var(--line); background: var(--panel2); }

/* ---------------- 直接改：✎、连线圆点、空白卡、改名框、连线选择框、段操作、提示条 ---------------- */
.om-pen { font-size: 13px; fill: var(--accent); opacity: 0; cursor: text; transition: opacity .15s; }
.om-n:hover .om-pen, .om-n.om-picked .om-pen, .om-n:focus-visible .om-pen { opacity: 1; }
.om-port { fill: var(--panel); stroke: var(--accent); stroke-width: 1.6; opacity: 0; pointer-events: none; cursor: crosshair; }
.om-n.om-picked .om-port { opacity: 1; pointer-events: all; }
.om-n.om-over .om-card { stroke: var(--accent); stroke-width: 2.4; stroke-opacity: 1; }
.om-linkline { fill: none; stroke: var(--accent); stroke-width: 1.6; stroke-dasharray: 4 3; pointer-events: none; }
.om-n.om-ghost .om-card { fill: transparent; stroke: var(--om-c); stroke-opacity: .55; stroke-dasharray: 5 4; }
.om-n.om-ghost .om-t { fill: var(--muted); font-weight: 500; }
.om-n.om-ghost:hover .om-card, .om-n.om-ghost:focus-visible .om-card { stroke-opacity: 1; fill: var(--panel); }
.om-n.om-ghost:hover .om-t { fill: var(--accent); }
.om-plane { position: relative; margin: 0 auto; }
.om-svgwrap { position: relative; }
.om-over { position: absolute; left: 0; top: 0; right: 0; bottom: 0; pointer-events: none; }
.om-over > * { pointer-events: auto; max-width: none; }
.om-canvas.om-busy { cursor: progress; }
.om-canvas.om-busy .om-svg { opacity: .8; transition: opacity .2s; }
input.om-rename { position: absolute; z-index: 3; height: 26px; min-height: 0; line-height: 20px; box-sizing: border-box; padding: 2px 6px; font-size: 13.5px; font-weight: 600;
  border: 1.5px solid var(--accent); border-radius: 6px; background: var(--panel); color: var(--ink); }
.om-pick { position: absolute; z-index: 4; width: 292px; box-sizing: border-box; padding: 10px 12px; border: 1px solid var(--line);
  border-radius: 10px; background: var(--panel); box-shadow: 0 6px 24px rgba(0, 0, 0, .14); font-size: 13px; }
.om-pick-h { margin: 0 0 8px; font-weight: 600; color: var(--ink); line-height: 1.5; }
.om-pick-row { display: flex; flex-wrap: wrap; gap: 6px; }
.om-pick-row button { font-size: 13px; min-height: 28px; padding: 3px 10px; }
.om-pick-ev { display: flex; align-items: center; gap: 6px; margin-top: 8px; color: var(--faint); }
.om-pick-ev input { flex: 1; min-width: 0; font-size: 13px; padding: 3px 6px; }
.om-pick .om-small { margin-top: 6px; font-size: 13px; }
.om-segacts { position: relative; height: 34px; }
button.om-segbtn { position: absolute; top: 4px; min-height: 26px; padding: 2px 10px; font-size: 13px; border-radius: 999px;
  border: 1px solid var(--accent); background: var(--panel); color: var(--accent); white-space: nowrap; }
button.om-segbtn:hover { background: var(--accent-soft); }
.om-ask { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 8px 12px; font-size: 13px;
  border: 1px solid var(--accent); border-radius: 8px; background: var(--accent-soft); color: var(--ink); }
.om-ask[hidden] { display: none; }
.om-bar-sep { flex: 0 0 1px; height: 18px; background: var(--line); margin: 0 4px; }
button.om-chip.om-toggle:not(.on) { border-style: dashed; }
.om-progress { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; margin: 4px 0 0; font-size: 13px; color: var(--muted); }
.om-progress b { color: var(--ink); font-variant-numeric: tabular-nums; }
.om-pbar { display: inline-block; width: 140px; height: 6px; border-radius: 3px; background: var(--panel2); overflow: hidden; border: 1px solid var(--line2); }
.om-pfill { display: block; height: 100%; background: var(--ok, var(--accent)); }
.om-decide { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 8px 0 6px; padding: 8px 10px; border-radius: 8px;
  background: var(--panel2); border: 1px solid var(--line2); }
.om-decide button { font-size: 13.5px; min-height: 32px; padding: 4px 16px; }
.om-decide .om-small { flex-basis: 100%; margin: 0; font-size: 13px; }
button.om-no-btn { color: var(--warn); border-color: var(--line); background: var(--panel); }
.om-facts { border-bottom: 1px solid var(--line2); margin-bottom: 4px; }
.om-edgeedit { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--line2); }
.om-erow { display: flex; align-items: center; gap: 8px; }
.om-esel { font-size: 13px; padding: 3px 6px; }
.om-edgeedit .om-small { flex-basis: 100%; margin: 0; font-size: 13px; }
.om-cardslot { margin-top: 10px; padding-top: 6px; border-top: 1px solid var(--line); }
a.om-go.om-atlas-link { display: inline-block; text-decoration: none; border: 1px solid var(--accent); color: var(--accent); border-radius: 6px; padding: 5px 12px; font-size: 13px; }
.om-toast { position: fixed; left: 50%; bottom: 20px; transform: translateX(-50%); z-index: 60; display: flex; align-items: center; gap: 12px;
  padding: 8px 14px; border-radius: 8px; background: var(--ink); color: var(--panel); font-size: 13.5px; box-shadow: 0 6px 24px rgba(0, 0, 0, .2); }
.om-toast[hidden] { display: none; }
button.om-undo { min-height: 26px; padding: 2px 10px; font-size: 13px; background: transparent; color: var(--panel); border: 1px solid currentColor; }
/* 右栏放了维护卡：放宽到 440（靠 om-has-side，不按子元素选父元素） */
.om-stage.om-has-side { grid-template-columns: minmax(0, 1fr) 440px; }
@media (max-width: 1100px) { .om-stage.om-has-side { grid-template-columns: minmax(0, 1fr); } }
a.om-go.om-sap-link { display: inline-block; text-decoration: none; background: var(--accent); color: #fff; border: 1px solid var(--accent); border-radius: 6px; padding: 5px 12px; font-size: 13px; }
a.om-go.om-sap-link:hover { opacity: .9; }
