/* 三维查看器：工具条分行、单位、画面上的灯位标记 */
.toolbar { --row-label: 40px; --row-h: 28px; gap: 4px; padding: 5px 10px 6px; }
html[lang="en"] .toolbar { --row-label: 80px; }
.toolbar > .group { flex: 1 0 100%; gap: 2px 18px; min-width: 0; }
.toolbar select, .toolbar input[type="number"], .toolbar .tool { height: 24px; }
.toolbar .cluster { padding: 1px 0; gap: 2px 8px; }
.menu { padding-top: 6px; }
.menu button { height: 28px; }
#viewer { container-type: inline-size; }
/* 宽屏两列固定分区：显示菜单左列为色标与模型，右列为视图与画面；图层菜单测点、钻井并排，范围、地表独占一行 */
@container (min-width: 820px) {
  #viewer:is([data-menu="show"], [data-menu="layer"]) .toolbar {
    display: grid;
    grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
    grid-auto-flow: row dense;
    align-items: start;
    column-gap: 20px;
  }
  #viewer[data-menu="show"] .toolbar > .group:is([data-row="color"], [data-row="cmapedit"], [data-row="data"], [data-row="look"]) { grid-column: 1; }
  #viewer[data-menu="show"] .toolbar > .group:is([data-row="camera"], [data-row="scene"]) { grid-column: 2; }
  #viewer[data-menu="layer"] .toolbar > .group:is([data-row="box"], [data-row="imagery"]) { grid-column: 1 / -1; }
  /* 测线切片、预览图无右列，色标行不必折半 */
  #viewer[data-menu="show"]:is([data-tab="line"], [data-tab="sheets"], [data-tab="points"]) .toolbar { display: flex; }
}
#viewer.menu-folded .toolbar { display: none; }
.menu .menu-fold {
  height: 26px;
  padding: 0 10px;
  margin-left: 6px;
  border: 1px solid var(--border-color);
  border-radius: 999px;
  background: #fff;
  color: var(--text-muted);
  font-size: 12px;
}
.menu .menu-fold:hover { border-color: #c7d2fe; color: var(--primary-color); }
.menu .menu-fold { margin-left: auto; }
#viewer.menu-folded .menu { padding-bottom: 6px; border-bottom: 1px solid var(--border-color); }
.toolbar .row-name {
  flex: 0 0 auto;
  min-width: 2.6em;
  font-size: 12px;
  font-weight: 600;
  color: var(--text-secondary);
  letter-spacing: 0.04em;
}
/* 行名占固定左列，控件换行后仍与首行对齐 */
.toolbar > .group:has(> .row-name):not(.slice-panel):not(.line-panel),
.toolbar > .group[data-row="cmapedit"] {
  position: relative;
  padding-left: calc(var(--row-label) + 6px);
}
.toolbar > .group:has(> .row-name):not(.slice-panel):not(.line-panel) > .row-name,
.toolbar > .group[data-row="cmapedit"] .cmap-edit > .row-name {
  position: absolute;
  left: 0;
  top: 0;
  width: var(--row-label);
  height: var(--row-h);
  display: flex;
  align-items: center;
}
.toolbar > .group[data-row="cmapedit"] .cmap-edit > .row-name { height: 24px; }
.toolbar .cluster { box-sizing: border-box; min-height: var(--row-h); }
.toolbar > .group[data-row="cmapedit"]:not(:has(.cmap-edit:not([hidden]))) { display: none; }
.toolbar > .group[data-row="imagery"]:not(:has(> .cluster label:not([hidden]))) { display: none; }
.toolbar > .group[data-row="wells"]:not(:has(> .cluster :is(label, button.tool):not([hidden]):not([hidden] *))) { display: none; }
.toolbar .tool-pop { position: relative; display: inline-flex; }
.toolbar .tool-pop[hidden] { display: none; }
.toolbar .tool-pop.open > .pop-btn { border-color: #c7d2fe; color: var(--primary-color); background: #eef2ff; }
.toolbar .tool-pop > .pop-body {
  display: none;
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  z-index: 20;
  width: max-content;
  max-width: min(360px, 80vw);
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 10px;
  padding: 8px 10px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  background: #fff;
  box-shadow: var(--shadow-sm, 0 4px 12px rgba(15, 23, 42, 0.12));
}
.toolbar .tool-pop.open > .pop-body { display: flex; }
.toolbar .tool-pop > .litho-colors { gap: 4px 6px; padding: 8px; }
.toolbar .litho-colors label {
  gap: 5px;
  height: 22px;
  padding: 0 8px 0 3px;
  border: 1px solid #e7edf6;
  border-radius: 11px;
  background: #fff;
  color: var(--text-secondary);
}
.toolbar .litho-colors input[type="color"] {
  width: 16px;
  height: 16px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: none;
  cursor: pointer;
}
.toolbar .litho-colors input[type="color"]::-webkit-color-swatch-wrapper { padding: 0; }
.toolbar .litho-colors input[type="color"]::-webkit-color-swatch { border: 1px solid rgba(15, 23, 42, 0.2); border-radius: 50%; }
.toolbar .litho-colors input[type="color"]::-moz-color-swatch { border: 1px solid rgba(15, 23, 42, 0.2); border-radius: 50%; }
.toolbar > .group[data-row="print"]:not(:has(> .cluster label:not([hidden]))) { display: none; }
.toolbar .unit {
  min-width: 0;
  color: var(--text-muted);
  font-size: 12px;
  font-variant-numeric: tabular-nums;
}
.toolbar .unit:empty { display: none; }
.menu { align-items: center; }
.menu button[hidden] { display: none; }
/* 色标行开头的着色属性：各页共用，突出显示 */
.toolbar .prop-pick { font-weight: 600; color: var(--text-secondary); }
.toolbar .prop-pick[hidden] { display: none; }
.toolbar .prop-pick select {
  min-width: 7.5em;
  border: 1px solid #c7d2fe;
  border-radius: 7px;
  background: #fff;
  color: var(--primary-color);
  font-weight: 600;
}
.toolbar .dash { color: var(--text-muted); padding: 0 1px; }

.lamp-mark {
  position: absolute;
  left: 0;
  top: 0;
  z-index: 1;
  width: 1px;
  height: 1px;
  pointer-events: none;
  transition: transform 0.25s ease;
}
.lamp-mark[hidden] { display: none; }
.lamp-mark svg { display: block; overflow: visible; }
.lamp-mark .g0 { stop-color: #fff8e1; stop-opacity: 0.85; }
.lamp-mark .g1 { stop-color: #ffd27a; stop-opacity: 0.32; }
.lamp-mark .g2 { stop-color: #ffb84d; stop-opacity: 0; }
.lamp-mark .o0 { stop-color: #ffffff; }
.lamp-mark .o1 { stop-color: #fff2cc; }
.lamp-mark .o2 { stop-color: #ffc861; }
.lamp-mark .b0 { stop-color: #ffe6a8; stop-opacity: 0.34; }
.lamp-mark .b1 { stop-color: #ffd98a; stop-opacity: 0.12; }
.lamp-mark .b2 { stop-color: #ffd27a; stop-opacity: 0; }
.lamp-mark .lamp-halo { fill: url(#lamp-glow); }
.lamp-mark .lamp-beam { fill: url(#lamp-beam); filter: url(#lamp-soft); }
.lamp-mark .lamp-beam.core { opacity: 0.75; }
.lamp-mark .lamp-ring { fill: none; stroke: rgba(255, 236, 190, 0.5); stroke-width: 1; }
.lamp-mark .lamp-tip { fill: rgba(255, 236, 190, 0.85); }
.lamp-mark .lamp-orb {
  fill: url(#lamp-orb);
  stroke: rgba(255, 255, 255, 0.7);
  stroke-width: 0.8;
  filter: drop-shadow(0 0 6px rgba(255, 210, 120, 0.95));
}

.view.paper .lamp-mark .g0 { stop-color: #ffe9a8; stop-opacity: 0.9; }
.view.paper .lamp-mark .g1 { stop-color: #f7b733; stop-opacity: 0.3; }
.view.paper .lamp-mark .g2 { stop-color: #f59e0b; stop-opacity: 0; }
.view.paper .lamp-mark .o1 { stop-color: #ffe08a; }
.view.paper .lamp-mark .o2 { stop-color: #f2a516; }
.view.paper .lamp-mark .b0 { stop-color: #f6ad2b; stop-opacity: 0.3; }
.view.paper .lamp-mark .b1 { stop-color: #f6ad2b; stop-opacity: 0.1; }
.view.paper .lamp-mark .b2 { stop-color: #f6ad2b; stop-opacity: 0; }
.view.paper .lamp-mark .lamp-ring { stroke: rgba(196, 128, 16, 0.55); }
.view.paper .lamp-mark .lamp-tip { fill: rgba(196, 128, 16, 0.8); }
.view.paper .lamp-mark .lamp-orb { stroke: rgba(196, 128, 16, 0.6); filter: drop-shadow(0 0 4px rgba(227, 154, 18, 0.7)); }
.view.gray .lamp-mark .b0 { stop-opacity: 0.42; }
.view.gray .lamp-mark .b1 { stop-opacity: 0.16; }

/* 坐标轴、刻度和数字画在三维画布上面的这张透明画布上，不挡鼠标 */
.view .axis-layer {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.view .axis-layer[hidden] { display: none; }

.view .well-labels {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 2;
}
.view .well-labels[hidden] { display: none; }

/* 视窗右下角的色标 */
.view .legend-box {
  position: absolute;
  right: 14px;
  bottom: 14px;
  z-index: 1;
  pointer-events: none;
  box-shadow: 0 1px 4px rgba(15, 23, 42, 0.18);
  border-radius: 6px;
}
.view .legend-box[hidden] { display: none; }

.view .loading {
  inset: auto;
  left: 50%;
  bottom: 16px;
  z-index: 6;
  display: block;
  width: max-content;
  max-width: min(440px, calc(100% - 200px));
  padding: 6px 14px;
  border-radius: 999px;
  background: rgba(15, 23, 42, 0.86);
  color: #f8fafc;
  font-size: 13px;
  line-height: 1.45;
  text-align: center;
  pointer-events: none;
  transform: translateX(-50%);
}
.view .loading[hidden] { display: none; }
.view.light .loading,
.view.paper .loading {
  background: rgba(255, 255, 255, 0.94);
  color: #1e293b;
}

/* 预览图总览：自适应列数，点开进入测线切片 */
.view .gallery {
  grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
  grid-auto-rows: max-content;
  align-content: start;
  gap: 12px;
}
.view .gallery .sheet, .view .gallery a {
  display: block;
  width: 100%;
  padding: 0;
  font: inherit;
  text-align: left;
  cursor: pointer;
  transition: border-color 0.12s, box-shadow 0.12s, transform 0.12s;
}
.view .gallery .sheet canvas { width: 100%; aspect-ratio: 100 / 46; height: auto; background: #f8fafc; }
.view .gallery .sheet.ready canvas { background: #fff; }
.view .gallery .sheet:hover, .view .gallery a:hover {
  border-color: #818cf8;
  box-shadow: 0 4px 14px rgba(79, 70, 229, 0.16);
  transform: translateY(-1px);
}
.view .gallery .sheet:focus-visible, .view .gallery a:focus-visible {
  outline: 2px solid #4f46e5;
  outline-offset: 2px;
  border-color: #4f46e5;
}

/* 三维右上角的方向指示：东、北、上，点球沿该轴看 */
.view .orient-box {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 96px;
  height: 96px;
  z-index: 2;
  border-radius: 50%;
}
.view .orient-box[hidden] { display: none; }
.view .orient-box:hover { background: rgba(255, 255, 255, 0.07); }

/* 测线切片页：二维剖面图（坐标轴、标题、测点、色标都画在这张画布上） */
.view .sect-canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  background: #ffffff;
  cursor: crosshair;
}
.view .sect-canvas[hidden] { display: none; }

/* 测点页右下角的实测、推估图例 */
.view .pts-key {
  position: absolute;
  right: 14px;
  bottom: 14px;
  z-index: 1;
  display: flex;
  gap: 14px;
  padding: 6px 12px;
  border-radius: 6px;
  background: rgba(255, 255, 255, 0.92);
  box-shadow: 0 1px 4px rgba(15, 23, 42, 0.18);
  font-size: 13px;
  color: #1e293b;
  pointer-events: none;
}
.view .pts-key[hidden] { display: none; }
.view .pts-key span { display: inline-flex; align-items: center; gap: 6px; }
.view .pts-key i { width: 11px; height: 11px; border-radius: 50%; display: inline-block; }
.view .pts-key i.m { background: rgb(79, 69, 230); }
.view .pts-key i.e { background: rgb(245, 158, 10); }
.view .pts-key span[hidden] { display: none; }
.view .pts-key i.w { box-sizing: border-box; background: radial-gradient(circle, #0f172a 0 2px, #fff 2.5px); border: 1.6px solid #0f172a; }

.toolbar a.tool { display: inline-flex; align-items: center; text-decoration: none; color: inherit; }
.toolbar label.tool { display: inline-flex; align-items: center; }
.toolbar a.tool[hidden], .toolbar .line-now[hidden] { display: none; }
.toolbar .line-now { font-size: 12px; font-weight: 600; color: var(--text-secondary); padding: 0 4px; }
.toolbar label.file-btn { display: inline-flex; align-items: center; gap: 6px; position: relative; cursor: pointer; }
.toolbar label.file-btn[hidden] { display: none; }
.toolbar label.file-btn input[type="file"] { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.toolbar .file-pick {
  flex: none; display: inline-flex; align-items: center; height: 24px; padding: 0 10px;
  border: 1px solid #c7d2fe; border-radius: 7px; background: #fff;
  color: var(--primary-dark); font-size: 12px; font-weight: 600;
}
.toolbar label.file-btn:hover .file-pick { background: #eef2ff; }
.toolbar label.file-btn:focus-within .file-pick { outline: 2px solid var(--primary-color); outline-offset: 1px; }
.toolbar .file-name { max-width: 12em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; color: var(--text-muted); }
.toolbar label.file-btn.picked .file-name { color: #047857; }
.toolbar .well-note { font-size: 12px; color: var(--text-secondary); max-width: 360px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: help; }
.toolbar .well-note.bad { color: #b91c1c; }
.toolbar .well-note:empty, .toolbar .well-note[hidden] { display: none; }

/* 测线切片、水平切片、垂直切片：逐张添加 */
.toolbar .pick-box {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 210px;
  padding: 5px 6px 6px;
  border: 1px solid var(--border-color, #e2e8f0);
  border-radius: 8px;
  background: #fff;
}
.toolbar .pick-box[hidden], .toolbar select#line[hidden] { display: none; }
.toolbar .pick-head { display: flex; align-items: center; gap: 6px; font-size: 12px; }
.toolbar .pick-name { font-weight: 600; color: var(--text-secondary); }
.toolbar .pick-count { flex: 1 1 auto; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.toolbar .tool.mini { height: 22px; padding: 0 8px; font-size: 12px; }
.toolbar .tool.mini[hidden] { display: none; }
.toolbar .pick-list {
  display: grid;
  /* 列宽按最长的线名（分段的线形如 L52.5_P110-155），免得名字压到下一列 */
  font-size: 12px;
  grid-template-columns: repeat(auto-fill, minmax(max(96px, calc(var(--pick-ch, 4) * 1ch + 60px)), 1fr));
  gap: 2px 4px;
  max-height: 108px;
  overflow-y: auto;
  padding-right: 2px;
  overscroll-behavior: contain;
}
.toolbar .pick-item {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 2px 5px;
  border-radius: 5px;
  font-size: 12px;
  cursor: pointer;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.toolbar .pick-item:hover { background: #f1f5f9; }
.toolbar .pick-item.on { background: #eef2ff; color: var(--primary-color); }
.toolbar .pick-item input { margin: 0; }
.toolbar .pick-item small { margin-left: auto; color: var(--text-muted); font-size: 11px; }
.toolbar .deck-list { display: flex; flex-direction: column; grid-template-columns: none; max-height: 132px; }
.toolbar .deck-item { display: flex; align-items: center; gap: 6px; font-size: 12px; padding: 1px 0; }
.toolbar .deck-item .deck-no {
  flex: 0 0 18px;
  height: 18px;
  border-radius: 50%;
  background: #eef2ff;
  color: var(--primary-color);
  font-weight: 600;
  text-align: center;
  line-height: 18px;
}
.toolbar .deck-item input[type="range"] { flex: 1 1 140px; min-width: 110px; }
.toolbar .deck-item .num { width: 68px; }
.toolbar .deck-item select { flex: 1 1 120px; min-width: 96px; height: 26px; }
.toolbar .deck-item .deck-lab { color: var(--text-muted); }
.toolbar .deck-item .deck-read {
  flex: 0 0 4.8em;
  text-align: right;
  font-variant-numeric: tabular-nums;
  color: var(--text-secondary);
}
/* 三维的切片菜单：每项一张卡片，标题就是开关，勾上才展开 */
.toolbar > .group.slice-panel { flex-wrap: nowrap; align-items: flex-start; gap: 6px; }
.toolbar > .group.slice-panel > .row-name { display: flex; align-items: center; gap: 4px; margin-top: 6px; }
.toolbar > .group:is([data-row="slices"], [data-row="cuts"]):not(:has(.slice-head > label:not([hidden]))) { display: none; }
.slice-stack { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.slice-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 6px; }
.toolbar .slice-card .deck-item { gap: 5px; }
.toolbar .slice-card .deck-item input[type="range"] { flex: 1 1 80px; min-width: 48px; }
.toolbar .slice-card .deck-item .num { width: 60px; }
.toolbar .slice-card .deck-item .deck-read { flex-basis: 4.4em; }
.slice-grid:not(:has(> .slice-card > .slice-head > label:not([hidden]))) { display: none; }
/* 等值面、阈值图层：每层一行，「范围」展开本层范围设置 */
.toolbar .slice-card .layer-list { max-height: 420px; gap: 2px; }
.toolbar .layer-item { display: flex; flex-direction: column; gap: 3px; }
.toolbar .slice-card .layer-item .deck-item .num { width: 64px; min-width: 0; flex: 0 1 64px; }
.toolbar .slice-card .layer-item .deck-item input[type="checkbox"] { margin: 0; }
.toolbar .layer-item .tool.mini.push { margin-left: auto; }
.toolbar .layer-item .layer-fade { padding-left: 23px; }
.toolbar .layer-item .layer-fade input[type="range"] { min-width: 40px; }
.toolbar .layer-item .tool.mini.on { border-color: #f59e0b; color: #b45309; }
.toolbar .layer-item .tool.mini.open { background: #fef3c7; border-color: #f59e0b; color: #92400e; }
.toolbar .layer-range {
  display: flex;
  flex-direction: column;
  gap: 3px;
  margin: 0 0 4px 23px;
  padding: 4px 6px;
  border-left: 2px solid #f59e0b;
  background: #fffbeb;
  border-radius: 0 6px 6px 0;
  font-size: 12px;
}
.toolbar .layer-range .range-head { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; }
.toolbar .layer-range .range-head label { display: inline-flex; align-items: center; gap: 4px; }
.toolbar .layer-range select { height: 24px; max-width: 120px; }
.toolbar .layer-range .range-slide { display: grid; grid-template-columns: 3.4em minmax(0, 1fr) 76px; align-items: center; gap: 6px; }
html[lang="en"] .toolbar .layer-range .range-slide { grid-template-columns: 5.6em minmax(0, 1fr) 76px; }
.toolbar .layer-range .range-slide > span { white-space: nowrap; }
.toolbar .layer-range .range-slide input[type="range"] { width: 100%; min-width: 0; }
.toolbar .layer-range .range-slide .num { width: 76px; }
.cut-row { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 6px; }
.cut-row:not(:has(.slice-head > label:not([hidden]))) { display: none; }
.slice-side { flex: 1 1 230px; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.slice-side:not(:has(.slice-head > label:not([hidden]))) { display: none; }
.cut-card { flex: 2 1 460px; }
.slice-card {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 3px 8px;
  border: 1px solid var(--border-color, #e2e8f0);
  border-radius: 8px;
  background: #fff;
}
.slice-card:not(:has(> .slice-head > label:not([hidden]))) { display: none; }
.slice-card:has(> .slice-head > label > input:checked) { border-color: #c7d2fe; background: #fbfcff; }
.slice-head { display: flex; align-items: center; gap: 6px; min-height: 26px; }
.toolbar .slice-head > label:first-child { font-weight: 600; color: var(--text-secondary); }
.toolbar .slice-head .pick-count { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.toolbar .slice-head .pick-count[hidden] { display: none; }
.toolbar .slice-push { margin-left: auto; }
.slice-row { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; padding-bottom: 3px; }
.slice-row[hidden] { display: none; }
.toolbar .slice-card .pick-list { padding-bottom: 3px; }
.toolbar .slice-card .pick-list[hidden] { display: none; }
.clip-body { display: flex; flex-direction: column; gap: 5px; padding-bottom: 4px; }
.clip-body[hidden] { display: none; }
.clip-body .clip-block { flex: none; min-width: 0; display: grid; grid-template-columns: 3.6em minmax(0, 1fr); align-items: start; gap: 0 6px; }
.clip-body .clip-name { font-weight: 400; color: var(--text-muted); line-height: 24px; }
/* 切开：起、止成对一行，每项为名称、滑块、数值框 */
.clip-body .clip-grid { grid-template-columns: repeat(auto-fill, minmax(max(210px, calc(50% - 7px)), 1fr)); grid-auto-flow: row; gap: 4px 14px; }
.toolbar .clip-body .clip-grid label { gap: 4px; }
.toolbar .clip-body .clip-grid label:has(input[type="range"]) { display: grid; grid-template-columns: 3.4em minmax(0, 1fr) 80px; }
html[lang="en"] .toolbar .clip-body .clip-grid label:has(input[type="range"]) { grid-template-columns: 4.4em minmax(0, 1fr) 80px; }
.toolbar .clip-body .clip-grid input[type="range"] { width: 100%; min-width: 36px; }
.toolbar .clip-body .clip-grid input.clip-num { width: 80px; font-variant-numeric: tabular-nums; }
.toolbar > .group:is([data-row="crosspage"], [data-row="freepage"]) input[type="range"] { width: 140px; }
.toolbar > .group[data-row="levelpage"]:not(:has(> .cluster label:not([hidden]))) { display: none; }
.toolbar > .group[data-row="crosspage"]:not(:has(> .cluster label:not([hidden]))) { display: none; }
.toolbar > .group[data-row="freepage"]:not(:has(> .cluster label:not([hidden]))) { display: none; }
.toolbar > .group[data-row="pagelook"]:not(:has(> .cluster label:not([hidden]))) { display: none; }
.toolbar > .group[data-row="planscope"]:not(:has(> .cluster label:not([hidden]))) { display: none; }
.toolbar .page-keep { color: var(--text-muted); white-space: nowrap; }
.toolbar .page-keep[hidden] { display: none; }
.toolbar output { min-width: 4.8em; text-align: right; font-variant-numeric: tabular-nums; color: var(--text-secondary); }
.toolbar > .group[data-row="linepage"]:not(:has(> .line-picker:not([hidden]))) { display: none; }

/* 测线切片页：选测线 */
.toolbar .line-panel { align-items: flex-start; }
.toolbar .line-panel > .row-name { padding-top: 8px; }
.toolbar .line-picker {
  flex: 1 1 560px;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 6px 8px 8px;
  border: 1px solid var(--border-color, #e2e8f0);
  border-radius: 10px;
  background: #fff;
}
.toolbar .line-picker[hidden], .toolbar .line-map[hidden], .toolbar .line-none[hidden], .toolbar .line-chip[hidden] { display: none; }
.toolbar .line-bar { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.toolbar .line-step {
  width: 30px;
  height: 30px;
  padding: 0;
  justify-content: center;
  font-size: 20px;
  line-height: 1;
  border-radius: 8px;
}
.toolbar .line-step:disabled { opacity: 0.4; cursor: default; }
.toolbar .line-cur {
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-width: 150px;
  padding: 0 4px;
  line-height: 1.2;
}
.toolbar .line-cur strong { font-size: 15px; font-weight: 700; color: var(--primary-color, #4f46e5); white-space: nowrap; }
.toolbar .line-cur small { font-size: 11px; color: var(--text-muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.toolbar .line-scrub { flex: 1 1 160px; min-width: 110px; accent-color: var(--primary-color, #4f46e5); }
.toolbar .line-find {
  flex: 0 1 150px;
  min-width: 110px;
  height: 28px;
  padding: 0 8px;
  border: 1px solid var(--border-color, #e2e8f0);
  border-radius: 7px;
  font-size: 12px;
  background: #f8fafc;
}
.toolbar .line-find:focus { outline: none; border-color: var(--primary-color, #4f46e5); background: #fff; box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.12); }
.toolbar .line-body { display: flex; gap: 8px; align-items: stretch; min-width: 0; }
.toolbar .line-map {
  flex: 0 0 170px;
  width: 170px;
  height: 104px;
  border: 1px solid var(--border-color, #e2e8f0);
  border-radius: 8px;
  background: #f8fafc;
  cursor: pointer;
}
.toolbar .line-chips {
  flex: 1 1 auto;
  min-width: 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(76px, 1fr));
  grid-auto-rows: 26px;
  gap: 4px;
  max-height: 86px;
  overflow-y: auto;
  padding: 1px 2px 1px 1px;
  overscroll-behavior: contain;
  scrollbar-width: thin;
}
.toolbar .line-chip {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 3px;
  min-width: 0;
  padding: 0 6px;
  border: 1px solid var(--border-color, #e2e8f0);
  border-radius: 999px;
  background: #fff;
  color: var(--text-secondary);
  font: inherit;
  font-size: 12px;
  white-space: nowrap;
  cursor: pointer;
  font-variant-numeric: tabular-nums;
  transition: background 0.12s, border-color 0.12s, color 0.12s;
}
.toolbar .line-chip b { font-weight: 600; }
.toolbar .line-chip small { font-size: 10px; color: var(--text-muted); overflow: hidden; text-overflow: ellipsis; }
.toolbar .line-chip:hover, .toolbar .line-chip.near { border-color: #a5b4fc; background: #eef2ff; color: var(--primary-color, #4f46e5); }
.toolbar .line-chip.on { border-color: var(--primary-color, #4f46e5); background: var(--primary-color, #4f46e5); color: #fff; box-shadow: 0 1px 3px rgba(79, 70, 229, 0.35); }
.toolbar .line-chip.on small { color: rgba(255, 255, 255, 0.8); }
.toolbar .line-chip:focus-visible { outline: 2px solid #a5b4fc; outline-offset: 1px; }
.toolbar .line-none { grid-column: 1 / -1; align-self: center; font-size: 12px; color: var(--text-muted); padding: 4px 2px; }
@media (max-width: 720px) {
  .toolbar .line-body { flex-direction: column; }
  .toolbar .line-map { width: 100%; flex-basis: 104px; }
}
/* 左侧：计算时切好的测线剖面，逐条或成批下载 */
.side .line-dl { display: flex; flex-direction: column; gap: 6px; margin-top: 12px; }
.side .line-dl-head { display: flex; align-items: center; gap: 6px; font-size: 13px; }
.side .line-dl-tools { display: flex; align-items: center; gap: 8px; font-size: 12px; }
.side .line-dl-tools label { display: flex; align-items: center; gap: 4px; cursor: pointer; }
.side .line-dl-count { flex: 1 1 auto; color: var(--text-muted); }
.side .line-dl-tools .tool {
  height: 26px;
  padding: 0 10px;
  border: 1px solid #c7d2fe;
  border-radius: 7px;
  background: var(--primary-color, #4f46e5);
  color: #fff;
  font-size: 12px;
  cursor: pointer;
}
.side .line-dl-tools .tool:disabled { background: #e2e8f0; border-color: #e2e8f0; color: #94a3b8; cursor: default; }
.side .line-dl-list {
  max-height: 300px;
  overflow-y: auto;
  border: 1px solid var(--border-color, #e2e8f0);
  border-radius: 8px;
  overscroll-behavior: contain;
}
.side .line-dl-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 4px 8px;
  font-size: 12px;
  border-bottom: 1px solid #f1f5f9;
  font-variant-numeric: tabular-nums;
}
.side .line-dl-row:last-child { border-bottom: 0; }
.side .line-dl-row:hover { background: #f8fafc; }
.side .line-dl-row label { flex: 1 1 auto; display: flex; align-items: center; gap: 5px; cursor: pointer; }
.side .line-dl-row small { margin-left: auto; color: var(--text-muted); }
.side .line-dl-row a { color: var(--primary-color); text-decoration: none; }
.side .line-dl-row a:hover { text-decoration: underline; }
.side .side-more { margin-top: 10px; font-size: 12px; color: var(--text-muted); line-height: 1.8; }
.side .side-more a { color: var(--primary-color); text-decoration: none; }
.recut-note { margin: 10px 0; padding: 8px 10px; border-radius: 8px; background: #fff7e6; border: 1px solid #f3d19e; color: #7a4b00; font-size: 12.5px; line-height: 1.55; }
.recut-note.done { background: #eefaf1; border-color: #a9dcb8; color: #1f6b3a; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.recut-note .btn { padding: 3px 10px; font-size: 12px; }
