/* 选址分析公共样式（spec 20260930-mapstudio-trade-area-online design §7）。
   开店选址 / 商圈分析 / 员工住宿三助手共用；只用 tokens.css 与 city-workspace.css 的令牌别名，
   不写十六进制色值。三页原内联样式（T4-07）已并入：开店选址的 .ssw- 作为公共基线，
   员工住宿的差异挂在根修饰符 .ssw--dorm 下，商圈分析沿用 .taw- 前缀。
   三页主色统一为 --brand（原开店选址蓝 / 员工住宿青 / 商圈分析紫各自为政）。 */

/* 左栏头部：面包屑一行 + 页面动作一行（余额、跨工具深链） */
.site-workbench-nav { display: flex; flex-direction: column; align-items: stretch; gap: 8px; padding: 10px 16px; border-bottom: 1px solid var(--border-color); background: var(--bg-card); }
.site-workbench-nav__actions { display: flex; min-width: 0; align-items: center; justify-content: space-between; gap: 8px; }
.site-workbench-nav__actions > :only-child { margin-left: auto; }

.site-crumb { display: flex; min-width: 0; align-items: center; gap: 6px; font-size: .84rem; line-height: 1.4; }
.site-crumb__home { display: inline-flex; align-items: center; gap: 6px; color: var(--text-muted); text-decoration: none; white-space: nowrap; }
.site-crumb__home:hover { color: var(--brand); text-decoration: none; }
.site-crumb__home i { font-size: .78rem; }
.site-crumb__sep { color: var(--text-muted); opacity: .6; }
.site-crumb__here { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; color: var(--text-primary); }

/* ── 页面骨架：左栏向导 + 右侧地图 / 结果抽屉 ── */
body { height: 100dvh; overflow: hidden; }
/* 独立产品壳下顶部导航占 --dtb-nav-h（56px）；wb-shell 下变量缺省为 0px，两壳通用 */
.ssw, .taw { height: calc(100dvh - var(--dtb-nav-h, 0px)); min-height: 0; display: flex; background: var(--bg-main); }
.ssw__side, .taw__side { width: 400px; max-width: 44vw; flex-shrink: 0; display: flex; flex-direction: column; background: var(--bg-card); border-right: 1px solid var(--border-color); overflow-y: auto; }
.ssw__main, .taw__main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
#ssw-map, #taw-map, #dsw-map { flex: 1; min-height: 0; }
.ssw__results, .taw__results { flex-shrink: 0; max-height: 42%; overflow-y: auto; border-top: 1px solid var(--border-color); background: var(--bg-card); padding: 14px 16px; display: none; }
.taw__results { max-height: 44%; }
.ssw__results.show, .taw__results.show { display: block; }

/* ── 余额芯片 ── */
.ssw-balance, .taw-balance { font-size: .84rem; color: var(--text-secondary); background: var(--bg-soft); border: 1px solid var(--border-color); border-radius: 8px; padding: 5px 10px; cursor: pointer; }
.ssw-balance b, .taw-balance b { color: var(--brand-heavy); }

/* ── 步骤手风琴 ── */
.ssw-step, .taw-step { border-bottom: 1px solid var(--border-color); }
.ssw-step__head, .taw-step__head { display: flex; align-items: center; gap: 10px; padding: 14px 16px; cursor: pointer; }
.ssw-step__num, .taw-step__num { width: 26px; height: 26px; border-radius: 50%; background: var(--bg-soft); color: var(--text-muted); display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: .85rem; flex-shrink: 0; border: 1px solid var(--border-color); }
.ssw-step.is-done .ssw-step__num, .taw-step.is-done .taw-step__num { background: var(--success); color: var(--surface); border-color: var(--success); }
.ssw-step.is-active .ssw-step__num, .taw-step.is-active .taw-step__num { background: var(--brand); color: var(--surface); border-color: var(--brand); }
.ssw-step__t, .taw-step__t { font-weight: 600; font-size: .95rem; color: var(--text-primary); }
.ssw-step__sub, .taw-step__sub { font-size: .78rem; color: var(--text-muted); }
.ssw-step__body, .taw-step__body { padding: 0 16px 16px; display: none; }
.ssw-step.is-active .ssw-step__body, .taw-step.is-active .taw-step__body { display: block; }

/* ── 分段页签 ── */
.ssw-tabs, .taw-tabs, .dsw-tabs { display: flex; gap: 4px; background: var(--bg-base); padding: 3px; border-radius: 9px; border: 1px solid var(--border-color); margin-bottom: 12px; }
.ssw-tab, .taw-tab, .dsw-tab { flex: 1; padding: 6px 8px; border: 0; border-radius: 7px; background: transparent; color: var(--text-muted); font-size: .82rem; font-weight: 600; cursor: pointer; }
.ssw-tab.is-active, .taw-tab.is-active, .dsw-tab.is-active { background: var(--brand-action); color: var(--surface); }
.ssw-pane, .taw-pane, .dsw-pane { display: none; }
.ssw-pane.is-active, .taw-pane.is-active, .dsw-pane.is-active { display: block; }

/* ── 表单件 ── */
.ssw-drop, .taw-drop { border: 2px dashed var(--border-color); border-radius: 12px; padding: 20px; text-align: center; color: var(--text-muted); font-size: .86rem; cursor: pointer; }
.taw-drop { padding: 18px; }
.ssw-drop:hover, .taw-drop:hover { border-color: var(--brand); color: var(--brand-heavy); }
.ssw-field { margin-bottom: 12px; }
.ssw-field label { display: block; font-size: .82rem; color: var(--text-secondary); margin-bottom: 4px; font-weight: 600; }
.ssw-field select, .ssw-field input, .ssw-field textarea { width: 100%; padding: 8px 10px; border: 1px solid var(--border-color); border-radius: 8px; background: var(--bg-base); color: var(--text-primary); font-size: .86rem; }
.ssw-hint, .taw-hint { font-size: .78rem; color: var(--text-muted); margin-top: 6px; }
.ssw-ok, .taw-ok { font-size: .82rem; color: var(--success-dark); }
.ssw-warn, .taw-warn { font-size: .8rem; color: var(--warning-dark); }
.ssw-err, .taw-err { font-size: .82rem; color: var(--danger-dark); }
.site-text-success { color: var(--success-dark); }
.site-text-danger { color: var(--danger-dark); }

.ssw-slider { margin-bottom: 10px; }
.ssw-slider label { display: flex; justify-content: space-between; font-size: .82rem; color: var(--text-secondary); margin-bottom: 2px; }
.ssw-slider label b { color: var(--brand-heavy); }
.ssw-slider input[type=range] { width: 100%; }
.ssw-wtotal { font-size: .8rem; color: var(--text-muted); text-align: right; }

.ssw-actions, .taw-actions { display: flex; gap: 8px; margin-top: 12px; }
.ssw-ptools { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.ssw-ptools .btn { white-space: nowrap; }
.ssw-ptools #pickBtn.is-active, .ssw-ptools .btn.is-active { background: var(--info); border-color: var(--info); color: var(--surface); }
.ssw-search { display: flex; flex: 1; min-width: 170px; }
.ssw-search input { flex: 1; min-width: 0; padding: 6px 10px; border: 1px solid var(--border-color); border-right: 0; border-radius: 8px 0 0 8px; background: var(--bg-base); color: var(--text-primary); font-size: .83rem; }
.ssw-search .btn { border-radius: 0 8px 8px 0; }
.site-pick-hint { color: var(--info); }
#pasteBox textarea { width: 100%; padding: 8px 10px; border: 1px solid var(--border-color); border-radius: 8px; background: var(--bg-base); color: var(--text-primary); font-size: .83rem; }

/* ── 候选点行 ── */
.ssw-cand-row { display: flex; align-items: center; gap: 6px; padding: 5px 8px; border: 1px solid var(--border-color); border-radius: 8px; margin-bottom: 5px; font-size: .83rem; }
.ssw-cand-row.is-hi { border-color: var(--info); background: var(--info-bg); }
.ssw-cand-row .no { width: 20px; height: 20px; line-height: 20px; text-align: center; border-radius: 50%; background: var(--info); color: var(--surface); font-size: .7rem; font-weight: 600; flex-shrink: 0; }
.ssw-cand-row input.nm { flex: 1; min-width: 0; border: 0; background: transparent; color: var(--text-primary); font-size: .83rem; }
.ssw-cand-row .ll { color: var(--text-muted); font-size: .72rem; white-space: nowrap; }
.ssw-cand-row .del, .taw-blist .del { color: var(--danger); background: none; border: 0; cursor: pointer; flex-shrink: 0; }
.ssw-radios { display: flex; gap: 6px; flex-wrap: wrap; }
.ssw-radios label { flex: 1; text-align: center; padding: 7px; border: 1px solid var(--border-color); border-radius: 8px; font-size: .84rem; cursor: pointer; color: var(--text-secondary); }
.ssw-radios input { display: none; }
.ssw-radios input:checked + span { color: var(--brand-heavy); font-weight: 600; }
.ssw-radios label:has(input:checked) { border-color: var(--brand); background: var(--brand-soft); }

/* ── 结果：KPI / 排名表 / 小结 ── */
table.ssw-rank, table.taw-tbl { width: 100%; border-collapse: collapse; font-size: .82rem; }
table.ssw-rank th, table.ssw-rank td, table.taw-tbl th, table.taw-tbl td { padding: 6px 8px; border-bottom: 1px solid var(--border-color); text-align: left; white-space: nowrap; }
table.ssw-rank th, table.taw-tbl th { color: var(--text-muted); font-weight: 600; }
table.ssw-rank tr.is-top td { background: var(--success-bg); }
.ssw-kpis, .taw-kpis { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.ssw-kpi, .taw-kpi { background: var(--bg-soft); border: 1px solid var(--border-color); border-radius: 10px; padding: 8px 14px; }
.ssw-kpi .k, .taw-kpi .k { font-size: .74rem; color: var(--text-muted); }
.ssw-kpi .v, .taw-kpi .v { font-size: 1.2rem; font-weight: 600; color: var(--text-primary); }
.ssw-summary { white-space: pre-wrap; background: var(--bg-base); border: 1px solid var(--border-color); border-radius: 10px; padding: 12px; font-size: .83rem; color: var(--text-secondary); margin-top: 12px; }
.ssw-layers { display: flex; gap: 8px; flex-wrap: wrap; margin: 10px 0; font-size: .8rem; }
.ssw-layers label { display: flex; align-items: center; gap: 4px; color: var(--text-secondary); cursor: pointer; }
.cand-badge { display: inline-block; width: 22px; height: 22px; line-height: 22px; text-align: center; border-radius: 50%; color: var(--surface); font-size: .72rem; font-weight: 600; }

/* 提示条 / 在线地图结果条 */
.site-note { margin: 10px 16px 0; padding: 9px 12px; border-radius: 9px; background: var(--brand-soft); border: 1px solid var(--brand-line); font-size: .82rem; color: var(--text-secondary); }
.site-note > i { color: var(--brand-heavy); }
.site-share-result { margin-bottom: 8px; padding: 8px 12px; border: 1px solid var(--success-line); background: var(--success-bg); border-radius: 9px; font-size: .83rem; }
.site-share-result > i { color: var(--success-dark); }
.site-desktop-hint { padding: 12px 16px; font-size: .76rem; color: var(--text-muted); }

/* ── 商圈分析专属 ── */
.taw-blist { list-style: none; padding: 0; margin: 8px 0; }
.taw-blist li { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border: 1px solid var(--border-color); border-radius: 8px; margin-bottom: 6px; font-size: .84rem; }
.taw-blist input { flex: 1; border: 0; background: transparent; color: var(--text-primary); }
.taw-blist .area { font-size: .76rem; color: var(--text-muted); }
.taw-sel { padding: 7px 8px; border: 1px solid var(--border-color); border-radius: 8px; background: var(--bg-base); color: var(--text-primary); font-size: .82rem; }
.taw-cats { max-height: 160px; overflow-y: auto; border: 1px solid var(--border-color); border-radius: 8px; padding: 6px; }
.taw-cat { display: flex; align-items: center; gap: 8px; font-size: .82rem; padding: 3px 4px; }
.taw-cat .nm { flex: 1; }
.taw-cat .cnt { color: var(--text-muted); font-size: .76rem; }

/* ── 员工住宿差异（根 .ssw.ssw--dorm）── */
.ssw--dorm .ssw__side { width: 410px; max-width: 46vw; }
.ssw--dorm .ssw__results { max-height: 46%; }
.ssw--dorm .ssw-sec { font-weight: 600; font-size: .85rem; margin: 14px 0 6px; color: var(--text-primary); }
.ssw--dorm .ssw-sec:first-child { margin-top: 0; }
.ssw--dorm .ssw-drop { padding: 16px; font-size: .85rem; }
.ssw--dorm .ssw-field { margin-bottom: 10px; }
.ssw--dorm .ssw-slider { margin-bottom: 8px; }
.ssw--dorm .ssw-actions { flex-wrap: wrap; }
.ssw--dorm .ssw-search { min-width: 150px; }
.ssw--dorm .ssw-cand-row .no { background: var(--brand-action); }
.ssw--dorm .ssw-cand-row input.nm { min-width: 60px; }
.ssw--dorm .ssw-cand-row input.mc { width: 74px; border: 1px solid var(--border-color); border-radius: 6px; padding: 2px 6px; background: var(--bg-base); color: var(--text-primary); font-size: .76rem; }
.ssw--dorm .ssw-check { display: flex; align-items: center; gap: 8px; font-size: .84rem; color: var(--text-secondary); margin-bottom: 8px; }
.ssw--dorm .ssw-check input[type=checkbox] { width: auto; }
.ssw--dorm .ssw-check input[type=number] { width: 76px; padding: 4px 8px; }
.ssw--dorm table.ssw-rank { font-size: .8rem; }
.ssw--dorm .ssw-kpi .v { font-size: 1.15rem; }
.ssw--dorm .ssw-reco { background: var(--brand-soft); border: 1px solid var(--brand-line); border-radius: 10px; padding: 12px; font-size: .86rem; color: var(--text-primary); white-space: pre-wrap; margin-bottom: 12px; }
.ssw--dorm .ssw-tbl-wrap { overflow-x: auto; margin-bottom: 12px; }
.ssw--dorm .dsw-tabs { margin-bottom: 10px; }
.ssw--dorm .dsw-tab { padding: 5px 8px; font-size: .8rem; }

/* ── 第二批公共组件（spec 20260930 T6-03 / 06 / 08 / 10 / 13）── */
/* 圆角切换：灰轨道 + 白滑块，包住内容不铺满（FR-6.2） */
.site-seg { display: inline-flex; width: fit-content; max-width: 100%; flex-wrap: wrap; gap: 2px; padding: 3px; border-radius: 10px; background: var(--bg-soft); border: 1px solid var(--border-color); }
.site-seg__item { border: 0; background: transparent; color: var(--text-secondary); font-size: 13px; font-weight: 600; padding: 5px 12px; border-radius: 8px; cursor: pointer; white-space: nowrap; }
.site-seg__item:hover { color: var(--text-primary); }
.site-seg__item.is-active { background: var(--bg-card); color: var(--text-primary); box-shadow: 0 1px 3px rgba(0, 0, 0, .12); }
.site-seg__item:focus-visible { outline: 2px solid var(--brand-action); outline-offset: 1px; }
.site-seg__item[hidden] { display: none; }

/* 字段确认卡 */
.site-fields-box { border: 1px solid var(--border-color); border-radius: 10px; padding: 12px; background: var(--bg-card); }
.site-fields { display: flex; flex-direction: column; gap: 8px; font-size: 13px; }
.site-fields__row { display: grid; grid-template-columns: 96px 1fr; align-items: center; gap: 8px; margin: 0; }
.site-fields__row[hidden] { display: none; }
.site-fields__label { color: var(--text-secondary); font-weight: 600; }
.site-fields__label em { color: var(--danger-dark); font-style: normal; }
.site-fields__row select { width: 100%; padding: 6px 8px; border: 1px solid var(--border-color); border-radius: 8px; background: var(--bg-base); color: var(--text-primary); font-size: 13px; }
.site-fields__row.is-missing select { border-color: var(--danger); background: var(--danger-bg); }
.site-fields__modes { display: inline-flex; gap: 12px; }
.site-fields__modes label { display: inline-flex; align-items: center; gap: 4px; color: var(--text-secondary); }
.site-fields__levels summary, .site-fields__trace summary { cursor: pointer; color: var(--text-secondary); font-weight: 600; }
.site-fields__levels .site-fields__row { margin-top: 6px; }
.site-fields__apply { display: flex; justify-content: flex-end; }
.site-fields__stats { display: flex; flex-wrap: wrap; gap: 6px 14px; color: var(--text-secondary); }
.site-fields__stats b { color: var(--text-primary); }
.site-fields__muted { color: var(--text-muted); font-size: 12px; }
.site-fields__trace ul { list-style: none; margin: 6px 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.site-fields__trace code { font-size: 12px; }
.site-fields__sample table { border-collapse: collapse; font-size: 12px; }
.site-fields__sample th, .site-fields__sample td { border: 1px solid var(--border-color); padding: 3px 6px; white-space: nowrap; text-align: left; }
.site-fields__scroll { overflow-x: auto; margin-top: 4px; }

/* 常显费用卡 */
.site-cost { display: flex; flex-direction: column; gap: 2px; border: 1px solid var(--border-color); border-radius: 10px; padding: 10px 12px; background: var(--bg-soft); font-size: 13px; color: var(--text-primary); }
.site-cost[data-state="short"], .site-cost[data-state="limit"] { border-color: var(--danger-line); background: var(--danger-bg); }
.site-cost[data-state="free"] { border-color: var(--success-line); background: var(--success-bg); }
.site-cost__muted { color: var(--text-muted); font-size: 12px; }

/* 我的数据列表 */
.site-ds { list-style: none; margin: 6px 0; padding: 0; max-height: 220px; overflow-y: auto; }
.site-ds__row { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; padding: 6px 8px; border: 1px solid var(--border-color); border-radius: 8px; margin-bottom: 4px; font-size: 13px; }
.site-ds__row label { display: flex; align-items: center; gap: 6px; flex: 1; min-width: 0; cursor: pointer; }
.site-ds__row.is-disabled { opacity: .6; }
.site-ds__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.site-ds__meta { color: var(--text-muted); font-size: 12px; }

.site-share-result__url { word-break: break-all; }
.site-share-result__btn { padding: 1px 8px; font-size: 12px; margin-left: 4px; }
.site-share-result[hidden] { display: none; }

/* ── 商圈分析 v2（.taw--v2）── */
.taw--v2 .taw__side { overflow: hidden; }
.ta-rail-links { display: inline-flex; gap: 12px; font-size: 13px; }
.ta-link { background: none; border: 0; padding: 0; color: var(--brand-heavy); font-size: 13px; cursor: pointer; text-decoration: none; }
.ta-link:hover { text-decoration: underline; }
.ta-link:disabled { color: var(--text-muted); cursor: default; text-decoration: none; }
.ta-link--muted { color: var(--text-muted); }
.ta-desktop-note { display: flex; gap: 8px; align-items: flex-start; }
.ta-desktop-note .ta-link { margin-left: auto; white-space: nowrap; }

.ta-stepbar { display: flex; list-style: none; margin: 0; padding: 10px 16px 0; gap: 4px; }
.ta-stepbar li { flex: 1; }
.ta-stepbar button { width: 100%; display: flex; align-items: center; justify-content: center; gap: 6px; border: 0; background: none; padding: 6px 0; font-size: 13px; color: var(--text-muted); border-bottom: 2px solid var(--border-color); cursor: pointer; }
.ta-stepbar button:disabled { cursor: default; opacity: .7; }
.ta-stepbar__n { width: 20px; height: 20px; border-radius: 50%; border: 1px solid var(--border-color); display: inline-flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 600; }
.ta-stepbar li.is-done .ta-stepbar__n { background: var(--success); border-color: var(--success); color: var(--surface); }
.ta-stepbar li.is-active button { color: var(--text-primary); font-weight: 600; border-bottom-color: var(--brand-action); }
.ta-stepbar li.is-active .ta-stepbar__n { background: var(--brand-action); border-color: var(--brand-action); color: var(--surface); }

.ta-body { flex: 1; min-height: 0; overflow-y: auto; padding: 14px 16px; display: flex; flex-direction: column; gap: 10px; }
.ta-body[hidden] { display: none; }
.ta-title { margin: 0; font-size: 16px; font-weight: 600; color: var(--text-primary); }
.ta-sub { margin: 2px 0 0; font-size: 13px; color: var(--text-muted); }
.ta-label { font-size: 13px; font-weight: 600; color: var(--text-secondary); }
.ta-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ta-row--end { justify-content: space-between; }
.ta-row .taw-sel { flex: 1; min-width: 0; }
.ta-grow { flex: 1; min-width: 0; }
.ta-push { margin-left: auto; }
.ta-full { width: 100%; margin-bottom: 8px; }
.ta-inline { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text-secondary); }
.ta-banner { padding: 8px 10px; border-radius: 8px; border: 1px solid var(--border-color); font-size: 13px; }
.ta-banner.taw-warn { background: var(--warning-bg); border-color: var(--warning-line); }
.ta-banner.taw-err { background: var(--danger-bg); border-color: var(--danger-line); }
.ta-banner.taw-ok { background: var(--success-bg); border-color: var(--success-line); }
.ta-banner--rail { margin: 10px 16px 0; }
.ta-banner[hidden] { display: none; }
.ta-note-inline { margin: 0; }

.ta-blist, .ta-pick { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.ta-pick { max-height: 220px; overflow-y: auto; }
.ta-pick li label { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border: 1px solid var(--border-color); border-radius: 8px; font-size: 13px; cursor: pointer; }
.ta-pick li label:has(input:checked) { border-color: var(--brand-line); background: var(--brand-soft); }
.ta-blist li { display: flex; align-items: center; gap: 6px; padding: 5px 8px; border: 1px solid var(--border-color); border-radius: 8px; font-size: 13px; }
.ta-swatch { width: 10px; height: 10px; border-radius: 3px; background: var(--brand-dark); flex-shrink: 0; }
.ta-bname { flex: 1; min-width: 60px; border: 0; background: transparent; color: var(--text-primary); font-size: 13px; }
.ta-bcity { width: 64px; border: 1px solid var(--border-color); border-radius: 6px; padding: 1px 6px; background: var(--bg-base); color: var(--text-primary); font-size: 12px; }
.ta-meta { color: var(--text-muted); font-size: 12px; white-space: nowrap; }
.ta-tag { font-size: 12px; padding: 0 6px; border-radius: 6px; background: var(--bg-soft); color: var(--text-secondary); white-space: nowrap; }
.ta-icon { border: 0; background: none; color: var(--text-muted); cursor: pointer; padding: 2px; }
.ta-icon:hover { color: var(--brand-heavy); }
.ta-icon--del:hover { color: var(--danger-dark); }

/* 角色表 */
.ta-pills { gap: 6px; }
.ta-pill { border: 1px solid var(--border-color); background: var(--bg-card); color: var(--text-secondary); font-size: 12px; padding: 2px 10px; border-radius: 999px; cursor: pointer; }
.ta-pill.is-active { background: var(--brand-soft); border-color: var(--brand-line); color: var(--brand-heavy); font-weight: 600; }
.ta-bulk { display: flex; gap: 10px; align-items: center; font-size: 13px; padding: 6px 8px; background: var(--brand-soft); border-radius: 8px; }
.ta-roles { max-height: 340px; overflow-y: auto; border: 1px solid var(--border-color); border-radius: 8px; }
.ta-roles__tbl { width: 100%; border-collapse: collapse; font-size: 13px; }
.ta-roles__tbl th { position: sticky; top: 0; background: var(--bg-card); color: var(--text-muted); font-weight: 600; text-align: left; }
.ta-roles__tbl th, .ta-roles__tbl td { padding: 5px 8px; border-bottom: 1px solid var(--border-color); }
.ta-role { display: inline-flex; border: 1px solid var(--border-color); border-radius: 8px; overflow: hidden; }
.ta-role__opt { border: 0; background: var(--bg-card); padding: 2px 8px; font-size: 12px; color: var(--text-secondary); cursor: pointer; }
.ta-role__opt + .ta-role__opt { border-left: 1px solid var(--border-color); }
.ta-role__opt.is-active.ta-role__opt--gen { background: var(--bg-soft); color: var(--text-primary); font-weight: 600; }
.ta-role__opt.is-active.ta-role__opt--comp { background: var(--danger-bg); color: var(--danger-dark); font-weight: 600; }
.ta-role__opt.is-active.ta-role__opt--fac { background: var(--info-bg); color: var(--info); font-weight: 600; }
.ta-roles__none { margin: 0; }
.ta-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; vertical-align: middle; }
.ta-dot--comp { background: var(--danger); }
.ta-dot--fac { background: var(--info); }
.ta-dot--gen { background: var(--muted); }

/* 运行 */
.ta-progress { list-style: none; margin: 0; padding: 12px; border: 1px solid var(--border-color); border-radius: 10px; display: flex; flex-direction: column; gap: 8px; font-size: 13px; color: var(--text-muted); }
.ta-progress li::before { content: ""; display: inline-block; width: 10px; height: 10px; margin-right: 8px; border-radius: 50%; border: 2px solid var(--border-color); vertical-align: middle; }
.ta-progress li.is-done { color: var(--text-secondary); }
.ta-progress li.is-done::before { background: var(--success); border-color: var(--success); }
.ta-progress li.is-run { color: var(--text-primary); font-weight: 600; }
.ta-progress li.is-run::before { border-color: var(--brand-action); border-top-color: transparent; animation: ta-spin 1s linear infinite; }
.ta-progress__tm { float: right; color: var(--text-muted); font-weight: 400; }
@keyframes ta-spin { to { transform: rotate(360deg); } }

/* 结果 */
.ta-kpis { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 0; }
.ta-kpis .taw-kpi { padding: 8px 10px; }
.ta-kpis .taw-kpi .k { font-size: 12px; }
.ta-kpis .taw-kpi .v { font-size: 20px; font-weight: 600; }
.ta-kpi__note { font-size: 12px; color: var(--text-muted); }
.ta-roleline { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 13px; color: var(--text-secondary); }
.ta-help summary { cursor: pointer; font-size: 13px; font-weight: 600; color: var(--text-secondary); }
.ta-help__q { display: inline-flex; width: 16px; height: 16px; border: 1px solid var(--border-color); border-radius: 50%; align-items: center; justify-content: center; font-size: 12px; }
.ta-help p { font-size: 13px; color: var(--text-secondary); margin: 6px 0 0; }
.ta-rank { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.ta-rank li { display: flex; gap: 10px; align-items: flex-start; padding: 8px 10px; border: 1px solid var(--border-color); border-radius: 10px; cursor: pointer; font-size: 13px; }
.ta-rank li.is-sel, .ta-rank li:focus-visible { border-color: var(--brand-action); outline: none; }
.ta-rank__no { width: 22px; height: 22px; border-radius: 50%; background: var(--bg-soft); display: inline-flex; align-items: center; justify-content: center; font-weight: 600; flex-shrink: 0; }
.ta-rank__remark { display: block; color: var(--text-muted); font-size: 12px; margin-top: 2px; }
.ta-rank__score { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; font-size: 16px; font-weight: 600; white-space: nowrap; }
.ta-tier { font-size: 12px; font-weight: 600; padding: 0 6px; border-radius: 6px; }
.ta-tier--a { background: var(--brand-dark); color: var(--surface); }
.ta-tier--b { background: var(--brand-hover); color: var(--text-primary); }
.ta-tier--c { background: var(--bg-soft); color: var(--text-secondary); }

/* 底栏：同屏唯一实心主按钮（FR-6.3） */
.ta-foot { display: flex; align-items: center; gap: 8px; padding: 10px 16px; border-top: 1px solid var(--border-color); background: var(--bg-card); flex-wrap: wrap; }
.ta-foot__reason { font-size: 12px; color: var(--text-muted); flex: 1; min-width: 80px; }
.ta-foot__more { display: inline-flex; gap: 6px; align-items: center; }
.ta-primary { background: var(--brand-action); border-color: var(--brand-action); color: var(--surface); }
.ta-primary:hover:not(:disabled) { background: var(--brand-action-hover); border-color: var(--brand-action-hover); color: var(--surface); }
.ta-primary[hidden] { display: none; }
.ta-menu { position: relative; }
.ta-menu > summary { list-style: none; }
.ta-menu > summary::-webkit-details-marker { display: none; }
.ta-menu__list { position: absolute; bottom: calc(100% + 4px); left: 0; z-index: 20; min-width: 150px; display: flex; flex-direction: column; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 8px; box-shadow: 0 4px 14px rgba(0, 0, 0, .12); padding: 4px 0; }
.ta-menu__list a { padding: 6px 12px; font-size: 13px; color: var(--text-primary); text-decoration: none; }
.ta-menu__list a:hover { background: var(--bg-soft); }
.ta-menu__list a[hidden] { display: none; }

/* 地图叠加 */
.ta-mapwrap { position: relative; flex: 1; min-height: 0; display: flex; }
.ta-mapwrap #taw-map { flex: 1; }
.ta-legend { position: absolute; left: 12px; bottom: 12px; z-index: 500; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 8px; padding: 6px 10px; font-size: 12px; color: var(--text-secondary); display: flex; flex-direction: column; gap: 3px; }
.ta-legend__row { display: flex; align-items: center; gap: 6px; }
.ta-legend__sw { width: 14px; height: 10px; border-radius: 3px; padding: 0; }
.ta-mask { position: absolute; inset: 0; z-index: 600; background: rgba(255, 255, 255, .55); display: flex; align-items: center; justify-content: center; font-size: 14px; color: var(--text-primary); }
.ta-mask > span { background: var(--bg-card); padding: 10px 16px; border-radius: 10px; border: 1px solid var(--border-color); }
.ta-mapnote { position: absolute; top: 12px; left: 56px; z-index: 500; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 8px; padding: 4px 10px; font-size: 12px; color: var(--text-secondary); }
.ta-legend[hidden], .ta-mask[hidden], .ta-mapnote[hidden] { display: none; }

.taw--v2 .taw__results .site-seg { margin-bottom: 8px; }
.ta-scroll { overflow-x: auto; }
.ta-tbl th:first-child, .ta-tbl td:first-child { position: sticky; left: 0; background: var(--bg-card); }
.ta-tbl tr.is-sel td { background: var(--brand-soft); }
.ta-sort { border: 0; background: none; padding: 0; color: inherit; font: inherit; cursor: pointer; }
.ta-sort.is-on { color: var(--brand-heavy); }
.ta-anon__steps { margin: 0; padding-left: 18px; font-size: 13px; color: var(--text-secondary); display: flex; flex-direction: column; gap: 4px; }

@media (max-width: 820px) {
  body { height: auto; overflow: auto; }
  .ssw, .taw { flex-direction: column; height: auto; }
  .ssw__side, .taw__side, .ssw--dorm .ssw__side { width: 100%; max-width: 100%; }
  #ssw-map, #dsw-map { height: 360px; }
  #taw-map { height: 420px; }
  .ssw__results, .taw__results, .ssw--dorm .ssw__results { max-height: none; }
  .taw--v2 .taw__side { overflow: visible; }
  .ta-body { overflow: visible; }
  .ta-kpis { grid-template-columns: repeat(2, 1fr); }
}
