/* Taxon push 14 + 54 — theme tokens (dark, light, or system) */
:root,
html[data-theme="system"] {
 color-scheme: dark;
 --bg: #0a0b0d;
 --bg-elevated: #12141a;
 --bg-hover: #1a1d26;
 --border: #2a2e3a;
 --border-focus: #5b8def;
 --text: #e8eaef;
 --text-muted: #8b92a5;
 --text-dim: #8a93a8;
 --accent: #6ea8fe;
 --accent-dim: rgba(110, 168, 254, 0.15);
 --success: #3ecf8e;
 --success-dim: rgba(62, 207, 142, 0.12);
 --warning: #f0b429;
 --warning-dim: rgba(240, 180, 41, 0.12);
 --danger: #f07178;
 --danger-dim: rgba(240, 113, 120, 0.12);
 --pro: #c792ea;
 --pro-dim: rgba(199, 146, 234, 0.12);
 --radius: 8px;
 --font: "IBM Plex Sans", "Segoe UI", system-ui, sans-serif;
 --mono: "IBM Plex Mono", "SF Mono", "Cascadia Code", ui-monospace, monospace;
 --grid-line: rgba(255, 255, 255, 0.015);
 --panel-head-tint: rgba(255, 255, 255, 0.015);
 --modal-scrim: rgba(4, 5, 8, 0.72);
 --shadow-elevated: 0 24px 64px rgba(0, 0, 0, 0.55);
 --theme-meta: #0f1419;
 /* Taxon push 16 — density (comfortable default) */
 --density-cell-py: 0.6rem;
 --density-cell-px: 0.85rem;
 --density-th-py: 0.65rem;
 --density-th-px: 0.85rem;
 --density-cluster-header-pad: 0.65rem 0.75rem;
 --density-ritual-inner-pad: 0.85rem 1rem 0.95rem;
 --density-ritual-chip-pad: 0.25rem 0.55rem;
 --density-ritual-metric-pad: 0.55rem 0.7rem;
 --density-ritual-gap: 0.3rem;
 --density-pack-cell-pad: 0.35rem 0.5rem;
 --virtual-row-h: 44;
 --virtual-header-h: 118;
}

/* Explicit dark mode keeps a standalone block for theme tooling and older browsers. */
html[data-theme="dark"] {
 color-scheme: dark;
 --bg: #0a0b0d;
 --bg-elevated: #12141a;
 --bg-hover: #1a1d26;
 --border: #2a2e3a;
 --border-focus: #5b8def;
 --text: #e8eaef;
 --text-muted: #8b92a5;
 --text-dim: #8a93a8;
 --accent: #6ea8fe;
 --theme-meta: #0f1419;
}

/* Light mode — explicit choice */
html[data-theme="light"] {
 color-scheme: light;
 --bg: #f4f5f7;
 --bg-elevated: #ffffff;
 --bg-hover: #e8eaef;
 --border: #cfd3dc;
 --border-focus: #3d6ef5;
 --text: #1a1d26;
 --text-muted: #5a6478;
 --text-dim: #5c6578;
 --accent: #3d6ef5;
 --accent-dim: rgba(61, 110, 245, 0.12);
 --success: #1f9d63;
 --success-dim: rgba(31, 157, 99, 0.12);
 --warning: #a67c00;
 --warning-dim: rgba(166, 124, 0, 0.12);
 --danger: #c43d47;
 --danger-dim: rgba(196, 61, 71, 0.12);
 --pro: #7a4fb0;
 --pro-dim: rgba(122, 79, 176, 0.12);
 --grid-line: rgba(26, 29, 38, 0.06);
 --panel-head-tint: rgba(26, 29, 38, 0.03);
 --modal-scrim: rgba(15, 18, 28, 0.45);
 --shadow-elevated: 0 24px 64px rgba(15, 18, 28, 0.18);
 --theme-meta: #f4f5f7;
}

@media (prefers-color-scheme: light) {
 /* System mode follows the operating system; the no-attribute fallback keeps first paint safe. */
 html[data-theme="system"],
 html:not([data-theme]) {
  color-scheme: light;
  --bg: #f4f5f7;
  --bg-elevated: #ffffff;
  --bg-hover: #e8eaef;
  --border: #cfd3dc;
  --border-focus: #3d6ef5;
  --text: #1a1d26;
  --text-muted: #5a6478;
  --text-dim: #5c6578;
  --accent: #3d6ef5;
  --accent-dim: rgba(61, 110, 245, 0.12);
  --success: #1f9d63;
  --success-dim: rgba(31, 157, 99, 0.12);
  --warning: #a67c00;
  --warning-dim: rgba(166, 124, 0, 0.12);
  --danger: #c43d47;
  --danger-dim: rgba(196, 61, 71, 0.12);
  --pro: #7a4fb0;
  --pro-dim: rgba(122, 79, 176, 0.12);
  --grid-line: rgba(26, 29, 38, 0.06);
  --panel-head-tint: rgba(26, 29, 38, 0.03);
  --modal-scrim: rgba(15, 18, 28, 0.45);
  --shadow-elevated: 0 24px 64px rgba(15, 18, 28, 0.18);
  --theme-meta: #f4f5f7;
 }
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html { font-size: 15px; }

body {
 font-family: var(--font);
 background: var(--bg);
 color: var(--text);
 min-height: 100vh;
 line-height: 1.5;
 -webkit-font-smoothing: antialiased;
}

/* Subtle grid noise */
body::before {
 content: "";
 position: fixed;
 inset: 0;
 background-image:
 linear-gradient(var(--grid-line) 1px, transparent 1px),
 linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);
 background-size: 48px 48px;
 pointer-events: none;
 z-index: 0;
}

.app {
 position: relative;
 z-index: 1;
 max-width: 1100px;
 margin: 0 auto;
 padding: 2rem 1.25rem 4rem;
}

/* Header */
.header {
 display: flex;
 align-items: flex-start;
 justify-content: space-between;
 gap: 1.5rem;
 margin-bottom: 2rem;
 padding-bottom: 1.5rem;
 border-bottom: 1px solid var(--border);
}

.brand {
 display: flex;
 align-items: center;
 gap: 0.75rem;
}

.brand-mark {
 width: 36px;
 height: 36px;
 border-radius: 9px;
 background: linear-gradient(135deg, #3d6ef5 0%, #6ea8fe 50%, #a8d4ff 100%);
 display: grid;
 place-items: center;
 font-family: var(--mono);
 font-weight: 700;
 font-size: 0.85rem;
 color: #0a0b0d;
 letter-spacing: -0.02em;
}

.brand h1 {
 font-size: 1.35rem;
 font-weight: 600;
 letter-spacing: -0.03em;
 line-height: 1.2;
}

.brand p {
 font-size: 0.8rem;
 color: var(--text-muted);
 margin-top: 0.15rem;
}

.badge-local {
 font-size: 0.7rem;
 font-family: var(--mono);
 text-transform: uppercase;
 letter-spacing: 0.06em;
 color: var(--success);
 background: var(--success-dim);
 border: 1px solid rgba(62, 207, 142, 0.25);
 padding: 0.35rem 0.65rem;
 border-radius: 999px;
 white-space: nowrap;
}

/* Panels */
.panel {
 background: var(--bg-elevated);
 border: 1px solid var(--border);
 border-radius: var(--radius);
 margin-bottom: 1.25rem;
 overflow: hidden;
}

.panel-head {
 display: flex;
 align-items: center;
 justify-content: space-between;
 gap: 1rem;
 padding: 0.85rem 1.1rem;
 border-bottom: 1px solid var(--border);
 background: var(--panel-head-tint);
}

.panel-head h2 {
 font-size: 0.8rem;
 font-weight: 600;
 text-transform: uppercase;
 letter-spacing: 0.07em;
 color: var(--text-muted);
}

.panel-body { padding: 1.1rem; }

/* Input modes */
.input-tabs {
 display: flex;
 gap: 0.35rem;
 margin-bottom: 1rem;
}

.tab {
 font-family: var(--font);
 font-size: 0.8rem;
 font-weight: 500;
 color: var(--text-muted);
 background: transparent;
 border: 1px solid transparent;
 padding: 0.4rem 0.85rem;
 border-radius: 6px;
 cursor: pointer;
 transition: color 0.15s, background 0.15s, border-color 0.15s;
}

.tab:hover { color: var(--text); background: var(--bg-hover); }
.tab.active {
 color: var(--accent);
 background: var(--accent-dim);
 border-color: rgba(110, 168, 254, 0.3);
}

.dropzone {
  min-height: 8.5rem;
 border: 1.5px dashed var(--border);
 border-radius: var(--radius);
 padding: 2.5rem 1.5rem;
 text-align: center;
 cursor: pointer;
 transition: border-color 0.15s, background 0.15s;
}

.dropzone:hover, .dropzone.dragover {
 border-color: var(--accent);
 background: var(--accent-dim);
}

.dropzone-icon {
 font-size: 1.75rem;
 margin-bottom: 0.5rem;
 opacity: 0.7;
}

.dropzone p { color: var(--text-muted); font-size: 0.9rem; }
.dropzone .hint { font-size: 0.75rem; color: var(--text-dim); margin-top: 0.4rem; }

.dropzone input[type="file"] { display: none; }

textarea.csv-paste {
 width: 100%;
 min-height: 160px;
 font-family: var(--mono);
 font-size: 0.75rem;
 line-height: 1.55;
 background: var(--bg);
 color: var(--text);
 border: 1px solid var(--border);
 border-radius: var(--radius);
 padding: 0.85rem 1rem;
 resize: vertical;
 outline: none;
 transition: border-color 0.15s;
}

textarea.csv-paste:focus { border-color: var(--border-focus); }
textarea.csv-paste::placeholder { color: var(--text-dim); }

.input-actions {
 display: flex;
 flex-wrap: wrap;
 gap: 0.6rem;
 margin-top: 0.85rem;
 align-items: center;
}

/* Controls */
.controls-grid {
 display: grid;
 grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
 gap: 1rem;
}

.field label {
 display: block;
 font-size: 0.7rem;
 font-weight: 600;
 text-transform: uppercase;
 letter-spacing: 0.06em;
 color: var(--text-dim);
 margin-bottom: 0.4rem;
}

.field select, .field input[type="text"] {
 width: 100%;
 font-family: var(--font);
 font-size: 0.85rem;
 background: var(--bg);
 color: var(--text);
 border: 1px solid var(--border);
 border-radius: 6px;
 padding: 0.5rem 0.7rem;
 outline: none;
 transition: border-color 0.15s;
}

.field select:focus, .field input[type="text"]:focus {
 border-color: var(--border-focus);
}

.field select:disabled {
 opacity: 0.45;
 cursor: not-allowed;
}

.toggle-row {
 display: flex;
 align-items: center;
 gap: 0.55rem;
 margin-top: 0.15rem;
 min-height: 2.15rem;
}

.toggle-row input[type="checkbox"] {
 width: 16px;
 height: 16px;
 accent-color: var(--accent);
 cursor: pointer;
}

.toggle-row span {
 font-size: 0.85rem;
 color: var(--text);
}

/* Buttons */
.btn {
 font-family: var(--font);
 font-size: 0.8rem;
 font-weight: 550;
 border: 1px solid var(--border);
 border-radius: 6px;
 padding: 0.5rem 0.95rem;
 cursor: pointer;
 background: var(--bg-hover);
 color: var(--text);
 transition: background 0.15s, border-color 0.15s, opacity 0.15s;
 white-space: nowrap;
}

.btn:hover:not(:disabled) {
 background: #222632;
 border-color: #3a4050;
}

.btn:disabled {
 opacity: 0.4;
 cursor: not-allowed;
}

.btn-primary {
 background: var(--accent);
 border-color: var(--accent);
 color: #0a0b0d;
}

.btn-primary:hover:not(:disabled) {
 background: #8bb8ff;
 border-color: #8bb8ff;
}

.btn-ghost {
 background: transparent;
}

.btn-sm {
 padding: 0.35rem 0.7rem;
 font-size: 0.75rem;
}

.btn-link {
 background: none;
 border: none;
 color: var(--accent);
 font-size: 0.8rem;
 cursor: pointer;
 padding: 0;
 text-decoration: underline;
 text-underline-offset: 2px;
}

.btn-link:hover { color: #8bb8ff; }

/* Stats strip */
.stats {
 display: flex;
 flex-wrap: wrap;
 gap: 0.75rem;
 margin-bottom: 1.25rem;
}

.stat {
 flex: 1;
 min-width: 120px;
 background: var(--bg-elevated);
 border: 1px solid var(--border);
 border-radius: var(--radius);
 padding: 0.85rem 1rem;
}

.stat-value {
 font-family: var(--mono);
 font-size: 1.35rem;
 font-weight: 600;
 letter-spacing: -0.02em;
 line-height: 1.2;
}

.stat-label {
 font-size: 0.7rem;
 text-transform: uppercase;
 letter-spacing: 0.06em;
 color: var(--text-dim);
 margin-top: 0.2rem;
}

.stat.warn .stat-value { color: var(--warning); }
.stat.ok .stat-value { color: var(--success); }
.stat.info .stat-value { color: var(--accent); }

/* Table */
.table-wrap {
 overflow-x: auto;
 max-height: 480px;
 overflow-y: auto;
}

table.events {
 width: 100%;
 border-collapse: collapse;
 font-size: 0.82rem;
}

table.events th {
 position: sticky;
 top: 0;
 background: #161820;
 text-align: left;
 font-size: 0.68rem;
 font-weight: 600;
 text-transform: uppercase;
 letter-spacing: 0.06em;
 color: var(--text-dim);
 padding: var(--density-th-py) var(--density-th-px);
 border-bottom: 1px solid var(--border);
 z-index: 2;
}

table.events td {
 padding: var(--density-cell-py) var(--density-cell-px);
 border-bottom: 1px solid rgba(42, 46, 58, 0.6);
 vertical-align: middle;
}

table.events tr:hover td { background: var(--bg-hover); }

table.events .mono {
 font-family: var(--mono);
 font-size: 0.78rem;
}

table.events input.canonical {
 width: 100%;
 min-width: 160px;
 font-family: var(--mono);
 font-size: 0.78rem;
 background: var(--bg);
 color: var(--text);
 border: 1px solid var(--border);
 border-radius: 4px;
 padding: 0.35rem 0.5rem;
 outline: none;
}

table.events input.canonical:focus { border-color: var(--border-focus); }

.tag {
 display: inline-block;
 font-size: 0.65rem;
 font-weight: 600;
 font-family: var(--mono);
 text-transform: uppercase;
 letter-spacing: 0.04em;
 padding: 0.15rem 0.45rem;
 border-radius: 4px;
}

.tag-exact {
 color: var(--danger);
 background: var(--danger-dim);
 border: 1px solid rgba(240, 113, 120, 0.25);
}

.tag-near {
 color: var(--warning);
 background: var(--warning-dim);
 border: 1px solid rgba(240, 180, 41, 0.25);
}

.tag-clean {
 color: var(--success);
 background: var(--success-dim);
 border: 1px solid rgba(62, 207, 142, 0.25);
}

.cluster-bar {
 display: inline-block;
 width: 8px;
 height: 8px;
 border-radius: 50%;
 margin-right: 0.4rem;
 vertical-align: middle;
}

/* Empty / error */
.state-box {
 text-align: center;
 padding: 2.5rem 1.5rem;
 color: var(--text-muted);
}

.state-box.error { color: var(--danger); }
.state-box .title {
 font-size: 0.95rem;
 font-weight: 550;
 color: var(--text);
 margin-bottom: 0.35rem;
}
.state-box.error .title { color: var(--danger); }
.state-box .detail { font-size: 0.82rem; color: var(--text-dim); }

.hidden { display: none !important; }

/* Export bar */
.export-bar {
 display: flex;
 flex-wrap: wrap;
 gap: 0.6rem;
 align-items: center;
}

.export-bar .spacer { flex: 1; }

/* Pro tease */
.pro-panel {
 border-color: rgba(199, 146, 234, 0.35);
 background: linear-gradient(180deg, rgba(199, 146, 234, 0.06) 0%, var(--bg-elevated) 40%);
}

.pro-panel .panel-head {
 border-bottom-color: rgba(199, 146, 234, 0.2);
}

.pro-badge {
 font-size: 0.65rem;
 font-family: var(--mono);
 font-weight: 600;
 text-transform: uppercase;
 letter-spacing: 0.05em;
 color: var(--pro);
 background: var(--pro-dim);
 border: 1px solid rgba(199, 146, 234, 0.3);
 padding: 0.25rem 0.55rem;
 border-radius: 999px;
}

.pro-grid {
 display: grid;
 grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
 gap: 0.85rem;
}

.pro-card {
 border: 1px solid var(--border);
 border-radius: var(--radius);
 padding: 1rem;
 opacity: 0.72;
 position: relative;
}

.pro-card h3 {
 font-size: 0.88rem;
 font-weight: 550;
 margin-bottom: 0.35rem;
}

.pro-card p {
 font-size: 0.78rem;
 color: var(--text-muted);
 line-height: 1.45;
}

.pro-card .lock {
 position: absolute;
 top: 0.85rem;
 right: 0.85rem;
 font-size: 0.75rem;
 color: var(--pro);
 opacity: 0.8;
}

.pro-cta {
 margin-top: 1rem;
 font-size: 0.78rem;
 color: var(--text-dim);
}

.pro-cta strong { color: var(--pro); }

/* Footer */
.footer {
 margin-top: 2rem;
 padding-top: 1rem;
 border-top: 1px solid var(--border);
 font-size: 0.75rem;
 color: var(--text-dim);
 text-align: center;
}

.file-chip {
 display: inline-flex;
 align-items: center;
 gap: 0.4rem;
 font-family: var(--mono);
 font-size: 0.75rem;
 color: var(--accent);
 background: var(--accent-dim);
 border: 1px solid rgba(110, 168, 254, 0.25);
 padding: 0.3rem 0.65rem;
 border-radius: 999px;
 max-width: 280px;
 overflow: hidden;
 text-overflow: ellipsis;
 white-space: nowrap;
}

@media (max-width: 640px) {
 .header { flex-direction: column; align-items: flex-start; }
 .app { padding: 1.25rem 0.85rem 3rem; }
}

/* ── Landing ─────────────────────────────────────────────────────────────── */
.landing-page .landing {
 position: relative;
 z-index: 1;
 max-width: 880px;
 margin: 0 auto;
 padding: 1.75rem 1.25rem 4rem;
}

.landing-nav {
 display: flex;
 align-items: center;
 justify-content: space-between;
 gap: 1rem;
 margin-bottom: 2.5rem;
 padding-bottom: 1.25rem;
 border-bottom: 1px solid var(--border);
}

.landing-hero {
 margin-bottom: 2.25rem;
}

.landing-hero .eyebrow {
 font-family: var(--mono);
 font-size: 0.7rem;
 text-transform: uppercase;
 letter-spacing: 0.08em;
 color: var(--accent);
 margin-bottom: 0.85rem;
}

.landing-hero .one-liner {
 font-size: clamp(1.75rem, 4vw, 2.35rem);
 font-weight: 600;
 letter-spacing: -0.035em;
 line-height: 1.15;
 margin-bottom: 0.85rem;
}

.landing-hero .lede {
 font-size: 1.05rem;
 color: var(--text-muted);
 max-width: 36rem;
 margin-bottom: 1.5rem;
}

.landing-cta-row {
 display: flex;
 flex-wrap: wrap;
 gap: 0.65rem;
}

.landing-problem code {
 font-family: var(--mono);
 font-size: 0.8em;
 color: var(--pro);
 background: var(--pro-dim);
 padding: 0.1rem 0.35rem;
 border-radius: 4px;
}

.section-label {
 font-size: 0.8rem;
 font-weight: 600;
 text-transform: uppercase;
 letter-spacing: 0.07em;
 color: var(--text-muted);
 margin-bottom: 0.85rem;
}

.beats-grid {
 display: grid;
 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
 gap: 0.85rem;
 margin-bottom: 2rem;
}

.beat {
 background: var(--bg-elevated);
 border: 1px solid var(--border);
 border-radius: var(--radius);
 padding: 1.15rem 1.1rem;
}

.beat-num {
 display: block;
 font-family: var(--mono);
 font-size: 0.7rem;
 color: var(--text-dim);
 margin-bottom: 0.55rem;
 letter-spacing: 0.04em;
}

.beat h3 {
 font-size: 0.95rem;
 font-weight: 600;
 letter-spacing: -0.02em;
 margin-bottom: 0.4rem;
}

.beat p {
 font-size: 0.82rem;
 color: var(--text-muted);
 line-height: 1.45;
}

.pricing-grid {
 display: grid;
 grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
 gap: 1rem;
}

.price-card {
 border: 1px solid var(--border);
 border-radius: var(--radius);
 padding: 1.15rem;
 background: var(--bg);
}

.price-card-pro {
 border-color: rgba(199, 146, 234, 0.4);
 background: linear-gradient(180deg, rgba(199, 146, 234, 0.08) 0%, var(--bg) 50%);
}

.price-card h3 {
 font-size: 0.85rem;
 text-transform: uppercase;
 letter-spacing: 0.06em;
 color: var(--text-muted);
 margin-bottom: 0.35rem;
}

.price-card .price {
 font-family: var(--mono);
 font-size: 1.75rem;
 font-weight: 600;
 letter-spacing: -0.03em;
 margin-bottom: 0.85rem;
}

.price-card-pro .price { color: var(--pro); }

.price-card ul {
 list-style: none;
 margin-bottom: 1.1rem;
}

.price-card li {
 font-size: 0.82rem;
 color: var(--text-muted);
 padding: 0.3rem 0;
 border-bottom: 1px solid rgba(42, 46, 58, 0.6);
}

.price-card li:last-child { border-bottom: none; }

.price-note {
 margin-top: 0.75rem;
 font-size: 0.72rem;
 color: var(--text-dim);
 line-height: 1.4;
}

.landing-privacy strong { color: var(--success); }

.landing-footer {
 margin-top: 2.5rem;
 padding-top: 1.5rem;
 border-top: 1px solid var(--border);
 text-align: center;
}

.landing-footer .btn { margin-bottom: 1rem; }

.landing-footer p {
 font-size: 0.75rem;
 color: var(--text-dim);
}

@media (max-width: 640px) {
 .landing-nav { flex-wrap: wrap; }
}

/* ── Pro unlock + modal ──────────────────────────────────────────────────── */
.pro-card {
 cursor: pointer;
 transition: opacity 0.15s, border-color 0.15s, background 0.15s;
}

.pro-card:hover {
 opacity: 0.95;
 border-color: rgba(199, 146, 234, 0.45);
 background: rgba(199, 146, 234, 0.06);
}

.pro-card:focus-visible {
 outline: 2px solid var(--pro);
 outline-offset: 2px;
}

.pro-panel.is-unlocked .pro-card {
 opacity: 1;
 cursor: default;
}

.pro-panel.is-unlocked .pro-card:hover {
 background: transparent;
 border-color: var(--border);
}

.pro-card .lock.unlocked {
 color: var(--success);
}

.pro-demo {
 margin-top: 0.85rem;
 padding-top: 0.75rem;
 border-top: 1px dashed rgba(199, 146, 234, 0.25);
 display: none;
}

.pro-panel.is-unlocked .pro-demo { display: block; }
.pro-demo.pro-demo-open { display: block; }

.pro-card-diff {
 grid-column: 1 / -1;
 opacity: 1;
}

.pro-card-batch {
 grid-column: 1 / -1;
}

.pro-demo label {
 display: block;
 font-size: 0.7rem;
 font-family: var(--mono);
 color: var(--text-dim);
 margin-bottom: 0.35rem;
 text-transform: uppercase;
 letter-spacing: 0.04em;
}

.pro-demo .demo-row {
 display: flex;
 flex-wrap: wrap;
 gap: 0.4rem;
 margin-bottom: 0.5rem;
}

.pro-demo input[type="text"],
.pro-demo input[type="file"],
.pro-demo textarea.diff-paste {
 font-family: var(--mono);
 font-size: 0.75rem;
 background: var(--bg);
 color: var(--text);
 border: 1px solid var(--border);
 border-radius: 6px;
 padding: 0.4rem 0.55rem;
 outline: none;
 min-width: 0;
 flex: 1;
}

.pro-demo textarea.diff-paste {
 width: 100%;
 resize: vertical;
 margin-bottom: 0.5rem;
 line-height: 1.4;
}

.pro-demo textarea.diff-paste:focus { border-color: var(--border-focus); }

.pro-demo input[type="text"]:focus { border-color: var(--border-focus); }

.pro-demo .demo-status {
 font-size: 0.72rem;
 color: var(--text-muted);
 min-height: 1.1em;
}

.pro-demo .demo-status.ok { color: var(--success); }
.pro-demo .demo-status.warn { color: var(--warning); }

.diff-results {
 margin-top: 0.65rem;
 padding-top: 0.55rem;
 border-top: 1px dashed rgba(199, 146, 234, 0.2);
}

.diff-counts {
 display: flex;
 flex-wrap: wrap;
 gap: 0.4rem;
 margin-bottom: 0.55rem;
}

.diff-pill {
 font-family: var(--mono);
 font-size: 0.7rem;
 padding: 0.28rem 0.55rem;
 border-radius: 999px;
 border: 1px solid var(--border);
 color: var(--text-muted);
 background: var(--bg);
}

.diff-pill.added { color: var(--success); border-color: rgba(62, 207, 142, 0.45); background: rgba(62, 207, 142, 0.08); }
.diff-pill.removed { color: var(--warning); border-color: rgba(240, 180, 41, 0.45); background: rgba(240, 180, 41, 0.08); }
.diff-pill.renamed { color: var(--pro); border-color: rgba(199, 146, 234, 0.45); background: rgba(199, 146, 234, 0.08); }
.diff-pill.unchanged { color: var(--text-dim); }

.diff-lists {
 display: grid;
 grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
 gap: 0.55rem;
 margin-bottom: 0.55rem;
}

.diff-list-block h4 {
 font-size: 0.68rem;
 font-family: var(--mono);
 text-transform: uppercase;
 letter-spacing: 0.04em;
 color: var(--text-dim);
 margin-bottom: 0.3rem;
}

.diff-list-block ul {
 list-style: none;
 max-height: 9rem;
 overflow: auto;
 border: 1px solid var(--border);
 border-radius: 6px;
 background: var(--bg);
 padding: 0.35rem 0.45rem;
 font-family: var(--mono);
 font-size: 0.72rem;
 line-height: 1.45;
}

.diff-list-block li { color: var(--text-muted); word-break: break-word; }
.diff-list-block li.empty { color: var(--text-dim); font-style: italic; }
.diff-list-block.added li { color: var(--success); }
.diff-list-block.removed li { color: var(--warning); }
.diff-list-block.renamed li { color: var(--pro); }

.diff-tease {
 margin-bottom: 0.45rem;
}

.diff-export { margin-top: 0.25rem; }

/* ── Batch rename rules ──────────────────────────────────────────────────── */
.batch-hint {
 font-size: 0.72rem;
 color: var(--text-muted);
 margin: 0 0 0.65rem;
 line-height: 1.45;
}

.batch-rules {
 display: flex;
 flex-direction: column;
 gap: 0.35rem;
 margin-bottom: 0.65rem;
}

.batch-empty {
 font-size: 0.72rem;
 color: var(--text-dim);
 font-style: italic;
 padding: 0.35rem 0;
}

.batch-rule {
 display: flex;
 align-items: center;
 justify-content: space-between;
 gap: 0.5rem;
 padding: 0.4rem 0.5rem;
 border: 1px solid var(--border);
 border-radius: 6px;
 background: var(--bg);
}

.batch-rule-main {
 display: flex;
 flex-wrap: wrap;
 align-items: center;
 gap: 0.35rem;
 min-width: 0;
 flex: 1;
 font-size: 0.72rem;
}

.batch-rule-idx {
 font-family: var(--mono);
 color: var(--text-dim);
}

.batch-rule-pat {
 font-family: var(--mono);
 font-size: 0.72rem;
 color: var(--text);
 background: rgba(199, 146, 234, 0.08);
 padding: 0.1rem 0.35rem;
 border-radius: 4px;
 word-break: break-word;
}

.batch-arrow {
 color: var(--text-dim);
 font-family: var(--mono);
 flex: 0 0 auto;
 align-self: center;
}

.batch-rule-flags {
 font-family: var(--mono);
 font-size: 0.65rem;
 color: var(--text-dim);
}

.batch-count {
 font-family: var(--mono);
 font-size: 0.68rem;
 color: var(--pro);
 margin-left: 0.15rem;
}

.batch-count.warn {
 color: var(--warning);
}

.batch-opts {
 align-items: center;
}

.batch-check {
 display: inline-flex !important;
 align-items: center;
 gap: 0.3rem;
 font-size: 0.72rem !important;
 font-family: var(--mono);
 color: var(--text-muted);
 text-transform: none !important;
 letter-spacing: 0 !important;
 margin-bottom: 0 !important;
 cursor: pointer;
 user-select: none;
}

.batch-check input {
 accent-color: var(--pro);
}

#demo-batch .demo-status code {
 font-family: var(--mono);
 font-size: 0.7rem;
 background: rgba(199, 146, 234, 0.1);
 padding: 0.05rem 0.3rem;
 border-radius: 3px;
}

#btn-batch-apply:disabled {
 opacity: 0.45;
 cursor: not-allowed;
}


.badge-pro-unlocked {
 font-size: 0.7rem;
 font-family: var(--mono);
 text-transform: uppercase;
 letter-spacing: 0.06em;
 color: var(--pro);
 background: var(--pro-dim);
 border: 1px solid rgba(199, 146, 234, 0.35);
 padding: 0.35rem 0.65rem;
 border-radius: 999px;
 white-space: nowrap;
}

.header-badges {
 display: flex;
 flex-wrap: wrap;
 gap: 0.5rem;
 align-items: center;
}

/* Taxon push 54 — theme control (chrome only; no-print) */
.theme-toggle {
 font-family: var(--mono);
 font-size: 0.7rem;
 text-transform: uppercase;
 letter-spacing: 0.05em;
 min-width: 4.8rem;
 appearance: auto;
 cursor: pointer;
}
.theme-toggle option {
 background: var(--bg-elevated);
 color: var(--text);
}
html[data-theme="light"] .brand-mark { color: #0a0b0d; }
html[data-theme="light"] .btn-primary { color: #fff; }
html[data-theme="light"] .btn-primary:hover:not(:disabled) {
 background: #5b8def;
 border-color: #5b8def;
 color: #fff;
}
html[data-theme="light"] .btn:disabled {
 background: #e2e5ec;
 border-color: #cfd3dc;
 color: #8a93a8;
}
html[data-theme="light"] table.events thead th {
 background: #eef0f4;
}
html[data-theme="light"] .pack-timeline-item,
html[data-theme="light"] .pack-timeline-item:hover {
 background: rgba(26, 29, 38, 0.03);
}
html[data-theme="light"] .pack-timeline-item:hover {
 background: rgba(26, 29, 38, 0.06);
}

/* Taxon push 54 — System gets the light-only hard-coded accents too. */
@media (prefers-color-scheme: light) {
 html[data-theme="system"] .brand-mark { color: #0a0b0d; }
 html[data-theme="system"] .btn-primary { color: #fff; }
 html[data-theme="system"] .btn-primary:hover:not(:disabled) {
  background: #5b8def;
  border-color: #5b8def;
  color: #fff;
 }
 html[data-theme="system"] .btn:disabled {
  background: #e2e5ec;
  border-color: #cfd3dc;
  color: #8a93a8;
 }
 html[data-theme="system"] table.events thead th {
  background: #eef0f4;
 }
 html[data-theme="system"] .pack-timeline-item,
 html[data-theme="system"] .pack-timeline-item:hover {
  background: rgba(26, 29, 38, 0.03);
 }
 html[data-theme="system"] .pack-timeline-item:hover {
  background: rgba(26, 29, 38, 0.06);
 }
}

/* Taxon push 16 — compact density (persisted data-density) */
html[data-density="compact"] {
 --density-cell-py: 0.32rem;
 --density-cell-px: 0.55rem;
 --density-th-py: 0.4rem;
 --density-th-px: 0.55rem;
 --density-cluster-header-pad: 0.4rem 0.55rem;
 --density-ritual-inner-pad: 0.55rem 0.7rem 0.6rem;
 --density-ritual-chip-pad: 0.12rem 0.4rem;
 --density-ritual-metric-pad: 0.35rem 0.5rem;
 --density-ritual-gap: 0.2rem;
 --density-pack-cell-pad: 0.2rem 0.35rem;
 --virtual-row-h: 34;
 --virtual-header-h: 92;
}
.density-toggle {
 font-family: var(--mono);
 font-size: 0.7rem;
 text-transform: uppercase;
 letter-spacing: 0.05em;
 min-width: 4.6rem;
}


/* Modal */
.modal-backdrop {
 position: fixed;
 inset: 0;
 z-index: 100;
 background: var(--modal-scrim);
 backdrop-filter: blur(4px);
 display: flex;
 align-items: center;
 justify-content: center;
 padding: 1.25rem;
}

.modal-backdrop.hidden { display: none !important; }

.modal {
 width: min(420px, 100%);
 background: var(--bg-elevated);
 border: 1px solid rgba(199, 146, 234, 0.35);
 border-radius: 12px;
 box-shadow: var(--shadow-elevated);
 overflow: hidden;
}

.modal-head {
 display: flex;
 align-items: center;
 justify-content: space-between;
 gap: 1rem;
 padding: 1rem 1.15rem;
 border-bottom: 1px solid rgba(199, 146, 234, 0.2);
 background: linear-gradient(180deg, rgba(199, 146, 234, 0.1) 0%, transparent 100%);
}

.modal-head h2 {
 font-size: 1rem;
 font-weight: 600;
 letter-spacing: -0.02em;
}

.modal-close {
 background: transparent;
 border: none;
 color: var(--text-muted);
 font-size: 1.25rem;
 line-height: 1;
 cursor: pointer;
 padding: 0.2rem 0.4rem;
 border-radius: 4px;
}

.modal-close:hover { color: var(--text); background: var(--bg-hover); }

.modal-body { padding: 1.15rem; }

.modal-body .modal-price {
 font-family: var(--mono);
 font-size: 2rem;
 font-weight: 600;
 color: var(--pro);
 letter-spacing: -0.03em;
 margin-bottom: 0.5rem;
}

.modal-body p {
 font-size: 0.88rem;
 color: var(--text-muted);
 margin-bottom: 0.65rem;
 line-height: 1.45;
}

.modal-body .modal-fine {
 font-size: 0.72rem;
 color: var(--text-dim);
 margin-bottom: 1.1rem;
}

.modal-actions {
 display: flex;
 flex-wrap: wrap;
 gap: 0.55rem;
}

.btn-pro {
 background: var(--pro);
 color: #0a0b0d;
 border-color: transparent;
 font-weight: 600;
}

.btn-pro:hover:not(:disabled) {
 filter: brightness(1.08);
 background: #d4a8f0;
}

/* Mobile: clear Netlify badge */
body{padding-bottom:max(6rem,calc(env(safe-area-inset-bottom,0px)+4.5rem))!important;}
a[href*="netlify.com"][style*="position: fixed"],a[href*="netlify.com"][style*="position:fixed"],#netlify-badge,.netlify-badge{display:none!important;}


/* Results tabs + map / property hygiene */
.results-tabs-row {
 display: flex;
 flex-wrap: wrap;
 align-items: center;
 justify-content: space-between;
 gap: 0.75rem;
 padding-bottom: 0.35rem;
 border-bottom: 1px solid var(--border);
}
.results-tabs { margin-bottom: 0; }
.hint.map-hint {
 margin: 0;
 font-size: 0.72rem;
 color: var(--text-dim);
 max-width: 28rem;
 text-align: right;
}
.hint.map-hint.ok { color: var(--success); }
.hint.map-hint.warn { color: var(--warning); }
.hint.map-hint code {
 font-family: var(--mono);
 font-size: 0.68rem;
}

.hint.next-month-line {
 margin: 0.85rem 0 0;
 padding: 0.55rem 0.7rem;
 border-left: 2px solid var(--accent, #6ee7b7);
 background: var(--bg-elevated, transparent);
 font-size: 0.78rem;
 color: var(--text-dim);
 max-width: 48rem;
 line-height: 1.45;
}
.hint.next-month-line strong { color: var(--text); }
.hint.next-month-line em { font-style: normal; color: var(--text); font-weight: 500; }

.tag-type {
 color: #f0b429;
 background: rgba(240, 180, 41, 0.12);
 border: 1px solid rgba(240, 180, 41, 0.35);
}
#dialect-chip {
 text-transform: none;
 letter-spacing: 0;
}
@media (max-width: 720px) {
 .results-tabs-row { flex-direction: column; align-items: flex-start; }
 .hint.map-hint { text-align: left; max-width: none; }
 .export-bar { width: 100%; }
}


/* Synonym pack + tracking plan */
.pack-hint {
 margin: 0.75rem 0 0;
 font-size: 0.75rem;
 color: var(--text-dim);
}
.plan-diff {
 margin-top: 0.85rem;
}
.plan-counts {
 display: flex;
 flex-wrap: wrap;
 gap: 0.5rem;
 margin-bottom: 0.75rem;
}
.stat-pill {
 display: inline-flex;
 align-items: center;
 gap: 0.35rem;
 font-size: 0.75rem;
 padding: 0.35rem 0.65rem;
 border-radius: 999px;
 border: 1px solid var(--border);
 background: var(--bg);
 color: var(--text-dim);
}
.stat-pill.ok { border-color: color-mix(in srgb, var(--success) 45%, var(--border)); color: var(--success); }
.stat-pill.warn { border-color: color-mix(in srgb, var(--warning) 45%, var(--border)); color: var(--warning); }
.plan-diff-grid {
 display: grid;
 grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
 gap: 0.85rem;
}
.plan-diff-grid h4 {
 margin: 0 0 0.4rem;
 font-size: 0.7rem;
 text-transform: uppercase;
 letter-spacing: 0.06em;
 color: var(--text-dim);
}
.plan-list {
 margin: 0;
 padding-left: 1.1rem;
 font-size: 0.78rem;
 max-height: 220px;
 overflow: auto;
}
.plan-list li { margin: 0.15rem 0; }
@media (max-width: 640px) {
 .plan-diff-grid { grid-template-columns: 1fr; }
}


.landing-does {
 margin: 0;
 padding: 0 0 0 1.15em;
 color: var(--text-muted, var(--muted));
 font-size: .95rem;
 line-height: 1.55;
}
.landing-does li { margin: 0 0 .55em; }
.landing-does li:last-child { margin-bottom: 0; }
.landing-does strong { color: var(--text); font-weight: 600; }
.landing-does code { font: 500 .88em/1.3 var(--mono, ui-monospace, monospace); color: var(--acid); }
.landing-does-note {
 margin: 14px 0 0;
 color: var(--text-dim, var(--muted));
 font-size: .88rem;
 line-height: 1.5;
}

/* Slice 1 — wiki pack / property merge / dialect honesty */
.dialect-note {
 margin: 0.45rem 0 0;
 font-size: 0.72rem;
 color: var(--text-dim);
}
#dialect-chip.dialect-low {
 color: var(--warning);
 border-color: rgba(240, 180, 41, 0.35);
 background: var(--warning-dim);
}

/* Taxon push 59 — dialect confidence chip honesty (muted unsure when detect is weak/ambiguous) */
#dialect-chip.dialect-unsure {
  color: var(--text-dim, var(--muted, #8b93a7));
  border-color: color-mix(in srgb, var(--border, #2a3140) 70%, var(--warning, #f0b429) 30%);
  background: color-mix(in srgb, var(--bg, #0f1218) 88%, var(--warning, #f0b429) 12%);
  font-weight: 500;
  opacity: 0.92;
}
#dialect-chip.dialect-unsure.dialect-low {
  /* keep warning-tint from dialect-low but prefer muted unsure copy */
  color: color-mix(in srgb, var(--warning, #f0b429) 55%, var(--text-dim, #8b93a7) 45%);
}

.props-hint {
 margin: 0 0 0.75rem;
 padding: 0 1.1rem;
 font-size: 0.75rem;
 color: var(--text-dim);
}
.cluster-cell {
 font-size: 0.72rem;
 color: var(--text-dim);
 line-height: 1.35;
 min-width: 11rem;
 max-width: 18rem;
}
.cluster-meta {
 margin-top: 0.2rem;
}
.cluster-why {
 color: var(--text);
}
.cluster-meta .meta-label {
 display: inline-block;
 min-width: 4.6rem;
 color: var(--text-dim);
 text-transform: uppercase;
 letter-spacing: 0.04em;
 font-size: 0.62rem;
}
.cluster-meta code,
.examples-cell code {
 font-family: var(--mono);
 font-size: 0.68rem;
 color: var(--accent);
 background: var(--accent-dim);
 padding: 0.05rem 0.28rem;
 border-radius: 3px;
 margin-right: 0.15rem;
 white-space: nowrap;
}
.prop-type-cell select.prop-type {
 font-family: var(--mono);
 font-size: 0.72rem;
 background: var(--bg);
 color: var(--text);
 border: 1px solid var(--border);
 border-radius: 4px;
 padding: 0.25rem 0.4rem;
 max-width: 7rem;
}
.prop-type-cell select.prop-type:focus {
 outline: none;
 border-color: var(--border-focus);
}
.type-hint-sub {
 margin-top: 0.2rem;
 font-size: 0.65rem;
 color: var(--text-dim);
 max-width: 9rem;
}
.examples-cell {
 max-width: 12rem;
 line-height: 1.5;
}
table.events input.prop-canonical {
 width: 100%;
 min-width: 7rem;
 font-family: var(--mono);
 font-size: 0.8rem;
 background: var(--bg);
 color: var(--text);
 border: 1px solid var(--border);
 border-radius: 4px;
 padding: 0.3rem 0.45rem;
}
table.events input.prop-canonical:focus {
 border-color: var(--border-focus);
 outline: none;
}


/* Advanced tools (always available) */
.badge-trial,
.trial-badge {
 font-size: 0.7rem;
 font-family: var(--mono);
 letter-spacing: 0.04em;
 color: var(--success);
 background: var(--success-dim);
 border: 1px solid rgba(62, 207, 142, 0.25);
 padding: 0.35rem 0.65rem;
 border-radius: 999px;
 white-space: nowrap;
}
.tools-panel .tools-grid,
.tools-grid {
 display: grid;
 grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
 gap: 1rem;
}
.tool-card-adv {
 background: var(--bg);
 border: 1px solid var(--border);
 border-radius: var(--radius);
 padding: 1rem;
}
.tool-card-adv h3 {
 font-size: 0.95rem;
 margin-bottom: 0.35rem;
}
.tool-card-adv > p {
 font-size: 0.8rem;
 color: var(--text-muted);
 margin-bottom: 0.75rem;
}
.trial-note {
 margin-top: 1rem;
 font-size: 0.8rem;
 color: var(--text-dim);
}
.landing .trial-badge { /* same chip on landing */ }
.landing .trial-lede {
 margin-bottom: 0.85rem;
 color: var(--text-muted);
 font-size: 0.9rem;
}


/* Included panel */
.landing-included .trial-badge {
 display: inline-block;
 margin-left: 0.5rem;
 padding: 0.2rem 0.55rem;
 border: 1px solid var(--line, rgba(255,255,255,.12));
 border-radius: 999px;
 color: var(--acid, #b6ff3b);
 font: 600 11px/1.2 var(--mono, ui-monospace, monospace);
 letter-spacing: .06em;
 text-transform: uppercase;
}
.trial-note {
 margin: 1rem 0 0;
 color: var(--text-muted, var(--muted));
 font-size: .9rem;
 line-height: 1.5;
}

/* ── Slice 2: cluster review ─────────────────────────────────────────────── */
.cluster-toolbar {
 display: flex;
 flex-wrap: wrap;
 align-items: center;
 gap: 0.55rem 1rem;
 padding: 0.65rem 1.1rem 0.35rem;
 border-bottom: 1px solid var(--border);
}
.filter-chips {
 display: flex;
 flex-wrap: wrap;
 align-items: center;
 gap: 0.35rem;
}
.toolbar-label {
 font-size: 0.68rem;
 text-transform: uppercase;
 letter-spacing: 0.05em;
 color: var(--text-dim);
 margin-right: 0.2rem;
}
.filter-btn.active {
 border-color: var(--accent);
 color: var(--accent);
 background: var(--accent-dim);
}
.filter-hint {
 margin: 0;
 flex: 1 1 12rem;
 font-size: 0.72rem;
}

/* Taxon push 15 — cluster search layout (JS filter UX; theme tokens only via .map-library-name) */
.cluster-search-row {
 display: flex;
 flex-wrap: wrap;
 align-items: center;
 gap: 0.35rem;
 flex: 1 1 14rem;
 min-width: 12rem;
}
.cluster-search-input {
 flex: 1 1 10rem;
 min-width: 8rem;
 max-width: 28rem;
}
.cluster-header-row > td {
 background: rgba(110, 168, 254, 0.06);
 border-bottom: 1px solid var(--border);
 padding: var(--density-cluster-header-pad);
}
.cluster-header {
 display: flex;
 flex-wrap: wrap;
 align-items: flex-start;
 gap: 0.65rem 1rem;
}
.cluster-header-main {
 flex: 1 1 14rem;
 min-width: 0;
}
.cluster-header-title {
 font-size: 0.82rem;
 font-weight: 550;
 margin-bottom: 0.35rem;
 display: flex;
 flex-wrap: wrap;
 align-items: center;
 gap: 0.35rem;
}
.cluster-header-canon {
 display: flex;
 align-items: center;
 gap: 0.4rem;
}
.cluster-header-canon label {
 font-size: 0.65rem;
 text-transform: uppercase;
 letter-spacing: 0.04em;
}
.cluster-header-canon input.cluster-canon-edit {
 flex: 1;
 min-width: 10rem;
 font-family: var(--mono);
 font-size: 0.8rem;
 background: var(--bg);
 color: var(--text);
 border: 1px solid var(--border);
 border-radius: 4px;
 padding: 0.3rem 0.45rem;
}
.cluster-header-canon input.cluster-canon-edit:focus {
 outline: none;
 border-color: var(--border-focus);
}
.cluster-header-actions {
 display: flex;
 flex-wrap: wrap;
 gap: 0.35rem;
 align-items: center;
}
.cluster-header-meta {
 margin-top: 0.45rem;
 font-size: 0.72rem;
 color: var(--text-dim);
 line-height: 1.4;
}
.cluster-member-row td:first-child {
 padding-left: 1.25rem;
}
.cluster-actions {
 display: flex;
 flex-wrap: wrap;
 gap: 0.35rem;
 margin-top: 0.4rem;
}
.tag-kept {
 background: rgba(192, 146, 234, 0.18);
 color: #c792ea;
 border: 1px solid rgba(192, 146, 234, 0.35);
}
.tag-accepted {
 background: rgba(62, 207, 142, 0.15);
 color: #3ecf8e;
 border: 1px solid rgba(62, 207, 142, 0.35);
}
button.prop-chip {
 font-family: var(--mono);
 font-size: 0.68rem;
 color: var(--accent);
 background: var(--accent-dim);
 padding: 0.05rem 0.28rem;
 border-radius: 3px;
 border: 1px solid transparent;
 cursor: pointer;
 margin-right: 0.15rem;
 white-space: nowrap;
}
button.prop-chip:hover,
button.prop-chip:focus {
 border-color: var(--accent);
 outline: none;
}
.prop-pop {
 z-index: 20;
 min-width: 12rem;
 max-width: 18rem;
 background: var(--panel, var(--bg-elevated, #1a1d24));
 border: 1px solid var(--border);
 border-radius: 8px;
 box-shadow: 0 8px 28px rgba(0, 0, 0, 0.35);
 padding: 0.55rem 0.7rem 0.65rem;
 color: var(--text);
}
.prop-pop-head {
 display: flex;
 align-items: baseline;
 gap: 0.4rem;
 margin-bottom: 0.35rem;
 font-size: 0.78rem;
}
.prop-pop-close {
 margin-left: auto;
 background: transparent;
 border: none;
 color: var(--text-dim);
 font-size: 1rem;
 cursor: pointer;
 line-height: 1;
}
.prop-pop-list {
 margin: 0;
 padding-left: 1.1rem;
 font-size: 0.75rem;
}
.prop-pop-list code {
 font-family: var(--mono);
 font-size: 0.72rem;
 color: var(--accent);
}
.prop-pop-foot {
 margin: 0.4rem 0 0;
 font-size: 0.65rem;
}
.dim { color: var(--text-dim); }
.prop-cluster-cell .btn {
 margin-top: 0.25rem;
}

/* ── Slice 3: vs-last-pack ritual banner ─────────────────────────────────── */
.ritual-banner {
 margin: 0 0 0.85rem;
 padding: 0 1.1rem;
}
.ritual-banner.hidden { display: none; }
.ritual-banner-inner {
 border: 1px solid color-mix(in srgb, var(--acid, #c9ff47) 45%, var(--border));
 background:
 linear-gradient(135deg, var(--acid-dim, rgba(201,255,71,.12)), transparent 55%),
 var(--bg-elevated);
 border-radius: var(--radius);
 padding: var(--density-ritual-inner-pad);
 box-shadow: 0 0 0 1px rgba(201, 255, 71, 0.04), 0 8px 24px rgba(0,0,0,.25);
}
.ritual-banner-topline {
 display: flex;
 align-items: center;
 justify-content: space-between;
 gap: 0.75rem;
 margin-bottom: 0.35rem;
}
.ritual-kicker {
 font: 600 0.85rem/1.2 var(--sans, var(--mono));
 letter-spacing: 0;
 text-transform: none;
 color: var(--acid, #c9ff47);
}
.ritual-dismiss {
 appearance: none;
 border: 0;
 background: transparent;
 color: var(--text-dim);
 font-size: 1.15rem;
 line-height: 1;
 cursor: pointer;
 padding: 0.15rem 0.35rem;
 border-radius: 4px;
}
.ritual-dismiss:hover { color: var(--text); background: var(--bg-hover); }
.ritual-counts {
 font: 600 1.05rem/1.35 var(--mono);
 color: var(--text);
 letter-spacing: -0.01em;
}
.ritual-hint {
 margin: 0.35rem 0 0.55rem;
 font-size: 0.75rem;
 color: var(--text-muted);
 max-width: 52rem;
}
.ritual-changed {
 display: grid;
 gap: 0.45rem;
 margin-top: 0.25rem;
}
.ritual-col h4 {
 margin: 0 0 0.25rem;
 font: 600 0.68rem/1.2 var(--mono);
 letter-spacing: 0.06em;
 text-transform: uppercase;
 color: var(--text-dim);
}
.ritual-col ul {
 list-style: none;
 margin: 0;
 padding: 0;
 display: flex;
 flex-wrap: wrap;
 gap: var(--density-ritual-gap);
}
.ritual-chip {
 display: inline-flex;
 align-items: flex-start;
 flex-wrap: wrap;
 gap: 0.25rem 0.35rem;
 padding: var(--density-ritual-chip-pad);
 border-radius: 0.55rem;
 border: 1px solid var(--border);
 background: var(--bg);
 font: 500 0.72rem/1.35 var(--mono);
 color: var(--text-muted);
 max-width: 100%;
 white-space: normal;
 overflow-wrap: anywhere;
}
.ritual-chip strong { color: var(--text); font-weight: 600; }
.ritual-chip .vol { color: var(--acid, #c9ff47); }
.ritual-chip.new { border-color: color-mix(in srgb, var(--success) 50%, var(--border)); }
.ritual-chip.returned { border-color: color-mix(in srgb, var(--accent) 50%, var(--border)); }
.ritual-chip.drift { border-color: color-mix(in srgb, var(--warning) 55%, var(--border)); color: var(--warning); }
/* Taxon push 18 — ritual drift export actions */
.ritual-actions {
 margin-top: 0.65rem;
 display: flex;
 flex-wrap: wrap;
 gap: 0.4rem;
 align-items: center;
}
@media (min-width: 720px) {
 .ritual-changed {
 grid-template-columns: repeat(3, minmax(0, 1fr));
 gap: 0.75rem;
 }
}

/* Taxon push 21 — sticky ritual mini-summary (rides decide-chrome; outside virtual list) */
.ritual-sticky {
 display: flex;
 flex-wrap: wrap;
 align-items: center;
 gap: 0.45rem 0.75rem;
 width: 100%;
 margin: 0;
 padding: 0.35rem 0.55rem;
 border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--border));
 border-radius: 8px;
 background: color-mix(in srgb, var(--bg-elevated) 88%, var(--accent) 12%);
 color: var(--text);
 font: inherit;
 cursor: pointer;
 text-align: left;
 box-shadow: 0 1px 0 color-mix(in srgb, var(--border) 80%, transparent);
}
.ritual-sticky.hidden { display: none; }
.ritual-sticky:hover,
.ritual-sticky:focus-visible {
 border-color: color-mix(in srgb, var(--accent) 55%, var(--border));
 outline: 2px solid color-mix(in srgb, var(--accent) 45%, transparent);
 outline-offset: 1px;
}
.ritual-sticky-kicker {
 font-size: 0.68rem;
 font-weight: 700;
 letter-spacing: 0.06em;
 text-transform: uppercase;
 color: var(--text-muted, var(--text-dim));
}
.ritual-sticky-counts {
 display: inline-flex;
 flex-wrap: wrap;
 align-items: center;
 gap: 0.35rem 0.55rem;
}
.ritual-sticky-metric {
 display: inline-flex;
 align-items: baseline;
 gap: 0.25rem;
 padding: 0.15rem 0.4rem;
 border-radius: 6px;
 border: 1px solid var(--border);
 background: color-mix(in srgb, var(--bg) 70%, transparent);
 font-size: 0.78rem;
 line-height: 1.2;
}
.ritual-sticky-metric .ritual-metric-num {
 font-family: var(--mono);
 font-weight: 700;
 font-size: 0.85rem;
}
.ritual-sticky-metric .ritual-metric-lbl {
 color: var(--text-muted, var(--text-dim));
 font-size: 0.7rem;
 font-weight: 600;
}
.ritual-sticky-metric.ritual-metric-new .ritual-metric-num { color: #7dffc0; }
.ritual-sticky-metric.ritual-metric-drift .ritual-metric-num { color: var(--warning, #f0b429); }
.ritual-sticky-jump {
 margin-left: auto;
 font-size: 0.72rem;
 font-weight: 600;
 color: var(--accent);
 white-space: nowrap;
 background: transparent;
 border: 0;
 padding: 0;
 cursor: pointer;
 font: inherit;
}
.ritual-sticky-jump:hover,
.ritual-sticky-jump:focus-visible {
 text-decoration: underline;
 outline: 2px solid color-mix(in srgb, var(--accent) 45%, transparent);
 outline-offset: 2px;
}

/* Taxon push 204 — sticky / banner drifted count clickable → first drifted */
.ritual-sticky-metric.is-clickable,
.ritual-metric.is-clickable {
 cursor: pointer;
 font: inherit;
 color: inherit;
}
button.ritual-sticky-metric.is-clickable,
button.ritual-metric.is-clickable {
 appearance: none;
 -webkit-appearance: none;
}
.ritual-sticky-metric.ritual-metric-drift.is-clickable:hover,
.ritual-sticky-metric.ritual-metric-drift.is-clickable:focus-visible,
.ritual-metric.ritual-metric-drift.is-clickable:hover,
.ritual-metric.ritual-metric-drift.is-clickable:focus-visible {
 border-color: color-mix(in srgb, var(--warning, #f0b429) 55%, var(--border));
 outline: 2px solid color-mix(in srgb, var(--warning, #f0b429) 45%, transparent);
 outline-offset: 1px;
}
.ritual-sticky-metric.ritual-metric-drift.is-disabled,
.ritual-metric.ritual-metric-drift[aria-disabled="true"] {
 opacity: 0.72;
 cursor: default;
}
/* Taxon push 206 — sticky / banner new count clickable → first new */
.ritual-sticky-metric.ritual-metric-new.is-clickable:hover,
.ritual-sticky-metric.ritual-metric-new.is-clickable:focus-visible,
.ritual-metric.ritual-metric-new.is-clickable:hover,
.ritual-metric.ritual-metric-new.is-clickable:focus-visible {
 border-color: color-mix(in srgb, #7dffc0 55%, var(--border));
 outline: 2px solid color-mix(in srgb, #7dffc0 45%, transparent);
 outline-offset: 1px;
}
.ritual-sticky-metric.ritual-metric-new.is-disabled,
.ritual-metric.ritual-metric-new[aria-disabled="true"] {
 opacity: 0.72;
 cursor: default;
}
.ritual-banner.ritual-banner-flash {
 box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 65%, transparent);
 transition: box-shadow 0.2s ease;
}
html[data-density="compact"] .ritual-sticky {
 padding: 0.22rem 0.4rem;
 gap: 0.3rem 0.5rem;
}
html[data-density="compact"] .ritual-sticky-metric {
 padding: 0.08rem 0.3rem;
}
@media print {
 .ritual-sticky { display: none !important; }
}

/* Plan / schema vs CSV (Phase 3) */
.plan-paste-label {
 display: block;
 font-size: 0.8rem;
 color: var(--text-muted);
 margin: 0.65rem 0 0.35rem;
}
.plan-paste {
 width: 100%;
 min-height: 4.5rem;
 font-family: var(--mono);
 font-size: 0.78rem;
 background: var(--bg-elevated, var(--surface-2, #12141a));
 color: var(--text);
 border: 1px solid var(--border);
 border-radius: 8px;
 padding: 0.65rem 0.75rem;
 resize: vertical;
}
.plan-filter-bar {
 display: flex;
 flex-wrap: wrap;
 gap: 0.4rem;
 margin: 0.65rem 0 0.5rem;
}
.plan-filter-bar button {
 font-size: 0.75rem;
}
.plan-filter-bar button.active {
 border-color: var(--accent);
 color: var(--accent);
}
.plan-meta {
 font-size: 0.78rem;
 color: var(--text-muted);
 margin: 0.25rem 0 0.5rem;
}


/* ── Kickass craft: focus, decisions, ritual metrics, declutter ─────────── */

.btn:focus-visible,
.tab:focus-visible,
.filter-btn:focus-visible,
.dropzone:focus-visible,
.ritual-dismiss:focus-visible,
summary:focus-visible,
select:focus-visible,
input:focus-visible,
textarea:focus-visible {
  outline: 2px solid var(--border-focus);
  outline-offset: 2px;
}

.btn-primary:focus-visible {
  outline-color: #c9ff47;
}

.btn-keep-sep {
  border-color: color-mix(in srgb, #c792ea 55%, var(--border));
  color: #d4b0f0;
  background: rgba(192, 146, 234, 0.08);
}
.btn-keep-sep:hover:not(:disabled) {
  background: rgba(192, 146, 234, 0.16);
  border-color: #c792ea;
}
.btn-accept-cluster {
  background: color-mix(in srgb, var(--success, #3ecf8e) 22%, var(--bg-hover));
  border-color: color-mix(in srgb, var(--success, #3ecf8e) 55%, var(--border));
  color: #7dffc0;
}
.btn-accept-cluster:hover:not(:disabled) {
  background: color-mix(in srgb, var(--success, #3ecf8e) 32%, var(--bg-hover));
}

.sample-bar {
  flex-wrap: wrap;
  max-width: 100%;
}

.export-bar-primary {
  align-items: center;
}
.export-more {
  position: relative;
  display: inline-block;
}
.export-more > summary {
  list-style: none;
  cursor: pointer;
}
.export-more > summary::-webkit-details-marker { display: none; }
.export-more-menu {
  position: absolute;
  right: 0;
  top: calc(100% + 4px);
  z-index: 20;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  min-width: 10rem;
  padding: 0.4rem;
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(0,0,0,.35);
}
.export-more-menu .btn {
  width: 100%;
  justify-content: flex-start;
  text-align: left;
}

.advanced-details {
  border: 0;
  margin: 0;
}
.advanced-summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 0.85rem 1.1rem;
  cursor: pointer;
  list-style: none;
  font-weight: 550;
}
.advanced-summary::-webkit-details-marker { display: none; }
.advanced-summary-title {
  font-size: 0.95rem;
}
.advanced-details[open] .advanced-summary {
  border-bottom: 1px solid var(--border);
}
.advanced-details .panel-body {
  padding-top: 0.85rem;
}

/* Ritual metric cards — counts readable first */
.ritual-counts {
  display: flex;
  flex-wrap: wrap;
  gap: 0.55rem;
  margin: 0.15rem 0 0.15rem;
  font: inherit;
  letter-spacing: 0;
}
.ritual-metric {
  flex: 1 1 6.5rem;
  min-width: 5.5rem;
  padding: var(--density-ritual-metric-pad);
  border-radius: 8px;
  border: 1px solid var(--border);
  background: var(--bg);
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
}
.ritual-metric-num {
  font: 650 1.35rem/1.15 var(--mono);
  color: var(--text);
  letter-spacing: -0.02em;
}
.ritual-metric-lbl {
  font: 550 0.68rem/1.2 var(--sans, var(--font));
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-dim);
}
.ritual-metric-new {
  border-color: color-mix(in srgb, var(--success, #3ecf8e) 45%, var(--border));
}
.ritual-metric-new .ritual-metric-num { color: #7dffc0; }
.ritual-metric-pack {
  border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
}
.ritual-metric-drift {
  border-color: color-mix(in srgb, var(--warning, #f0b429) 50%, var(--border));
}
.ritual-metric-drift .ritual-metric-num { color: var(--warning, #f0b429); }

.dialect-low {
  border-color: color-mix(in srgb, var(--warning, #f0b429) 55%, var(--border)) !important;
  color: var(--warning, #f0b429) !important;
}

.next-month-line {
  margin-top: 0.75rem;
  padding: 0.55rem 0.7rem;
  border-left: 3px solid var(--acid, #c9ff47);
  background: color-mix(in srgb, var(--acid, #c9ff47) 8%, transparent);
  border-radius: 0 6px 6px 0;
  color: var(--text-muted);
}

/* Mobile: drop-zone + primary path without overflow */
@media (max-width: 640px) {
  .dropzone {
    min-height: 9rem;
    padding: 1.25rem 1rem;
  }
  .dropzone p {
    font-size: 0.95rem;
    line-height: 1.4;
  }
  .header {
    flex-direction: column;
    align-items: flex-start;
  }
  .export-bar, .sample-bar {
    width: 100%;
  }
  .export-bar .btn, .sample-bar .btn {
    flex: 1 1 auto;
  }
  .export-more-menu {
    left: 0;
    right: auto;
  }
  .ritual-metric {
    flex: 1 1 calc(50% - 0.55rem);
  }
  .cluster-header-actions {
    width: 100%;
  }
  .cluster-header-actions .btn {
    flex: 1 1 auto;
  }
  .controls-grid {
    grid-template-columns: 1fr;
  }
}

/* ── Push2: ingest progress, pack compare, keyboard focus ───────────────── */
.ingest-progress {
  margin-top: 0.65rem;
  padding: 0.55rem 0.7rem;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--bg);
}
.ingest-progress.hidden { display: none; }
.ingest-progress-track {
  height: 6px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--border) 80%, transparent);
  overflow: hidden;
}
.ingest-progress-fill {
  height: 100%;
  width: 0%;
  background: var(--acid, #c9ff47);
  transition: width 0.12s linear;
}
.ingest-progress-label {
  margin-top: 0.35rem;
  font: 500 0.78rem/1.3 var(--sans, var(--font));
  color: var(--text-muted);
}
.kbd-hint {
  margin-top: 0.55rem;
  color: var(--text-dim);
}
kbd {
  font: 600 0.72rem/1 var(--mono);
  padding: 0.12rem 0.35rem;
  border: 1px solid var(--border);
  border-radius: 4px;
  background: color-mix(in srgb, var(--bg-hover, #222) 70%, transparent);
  color: var(--text);
}
.pack-compare-panel {
  margin: 0.75rem 0 0.5rem;
}
.pack-compare-panel.hidden { display: none; }
.pack-compare-inner {
  padding: 0.85rem 1rem 1rem;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: color-mix(in srgb, var(--accent, #6ea8fe) 6%, var(--bg));
  /* Push 110 — panel scrolls; sticky Share / Close stays pinned */
  max-height: min(78vh, 900px);
  overflow: auto;
  overscroll-behavior: contain;
}
.pack-compare-topline {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  margin-bottom: 0.35rem;
}
.pack-compare-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem;
  align-items: center;
  margin: 0.55rem 0 0.35rem;
}
.pack-file-label { cursor: pointer; }
.pack-compare-body {
  margin-top: 0.55rem;
  /* Push 110 — body no longer owns scroll; sticky rides panel scroll */
  max-height: none;
  overflow: visible;
}
.pack-diff-summary {
  font: 550 0.9rem/1.35 var(--sans, var(--font));
  margin-bottom: 0.55rem;
}
.pack-diff-metrics {
  display: flex;
  flex-wrap: wrap;
  gap: 0.55rem;
  margin-bottom: 0.65rem;
}
.pack-diff-lists { margin-top: 0.25rem; }
.pack-diff-chip {
  list-style: none;
  padding: 0.35rem 0.5rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  margin: 0.25rem 0;
  font: 500 0.82rem/1.3 var(--sans, var(--font));
}
.pack-diff-chip.added { border-color: color-mix(in srgb, var(--success, #3ecf8e) 45%, var(--border)); }
.pack-diff-chip.vanished { border-color: color-mix(in srgb, var(--text-dim) 55%, var(--border)); opacity: 0.9; }
.pack-diff-chip.remapped { border-color: color-mix(in srgb, var(--warning, #f0b429) 55%, var(--border)); }
.pack-diff-chip .vol { color: var(--text-dim); }
tr.cluster-focus {
  outline: 2px solid var(--acid, #c9ff47);
  outline-offset: -2px;
  background: color-mix(in srgb, var(--acid, #c9ff47) 8%, transparent);
}
.ritual-chip.drift { cursor: pointer; }
.ritual-chip.drift:hover { filter: brightness(1.08); }


/* ── Push3: worker progress already covered; virtual list + named maps + pack match ─ */
.table-wrap-virtual {
  /* taller viewport helps mega unique-name dumps feel scrollable */
  max-height: min(70vh, 640px);
}
tr.virtual-pad td {
  background: transparent !important;
}
.map-library-bar {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  margin: 0.35rem 0 0.15rem;
  flex-wrap: wrap;
}
.map-library-bar-hint {
  font-size: 0.8rem;
}
.map-library {
  margin: 0.5rem 0 0.75rem;
  padding: 0.75rem 0.85rem;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg-elevated, var(--bg)) 92%, var(--accent) 8%);
}
.map-library.hidden { display: none; }
.map-library-save {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  margin-bottom: 0.65rem;
}
.map-library-name {
  flex: 1 1 12rem;
  min-width: 10rem;
  padding: 0.4rem 0.55rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--bg);
  color: var(--text);
  font: inherit;
}
.map-library-list {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
  max-height: 220px;
  overflow: auto;
}
.map-library-item {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.45rem 0.55rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--bg);
}
.map-library-item-main {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.45rem 0.65rem;
  min-width: 0;
}
.map-library-item-name {
  font-weight: 600;
}
.map-library-item-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}
.map-library-empty {
  margin: 0;
}
.pack-diff-empty {
  padding: 1rem 1.1rem;
  border: 1px dashed color-mix(in srgb, var(--success, #3ecf8e) 45%, var(--border));
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg) 90%, var(--success, #3ecf8e) 10%);
  text-align: left;
}
.pack-diff-empty-title {
  font-weight: 600;
  font-size: 1.05rem;
  margin-bottom: 0.35rem;
}
.pack-diff-empty-copy {
  margin: 0;
  color: var(--text);
  line-height: 1.45;
}

/* Taxon push 23 — pack-compare columns · copy-md · idle/match · jump */
.pack-diff-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.55rem 0.85rem;
  margin: 0.45rem 0 0.65rem;
}
.pack-diff-jump-hint {
  font-size: 0.78rem;
  color: var(--text-dim);
}
.pack-diff-jump-hint kbd {
  font: 600 0.72rem/1 var(--mono, ui-monospace, monospace);
  padding: 0.1rem 0.28rem;
  border: 1px solid var(--border);
  border-radius: 4px;
  background: var(--bg);
}
.pack-diff-summary {
  font: 550 0.9rem/1.35 var(--sans, var(--font));
  margin-bottom: 0.35rem;
}
.pack-diff-metrics {
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem;
  margin-bottom: 0.65rem;
}
.pack-diff-metrics > button.ritual-metric {
  cursor: pointer;
  font: inherit;
  color: inherit;
  appearance: none;
  -webkit-appearance: none;
}
.pack-diff-metrics > button.ritual-metric:hover,
.pack-diff-metrics > button.ritual-metric:focus-visible {
  outline: 2px solid var(--acid, #c9ff47);
  outline-offset: 2px;
  filter: brightness(1.06);
}
.pack-diff-columns {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0.65rem;
  margin-top: 0.25rem;
}
@media (min-width: 720px) {
  .pack-diff-columns {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0.75rem;
    align-items: start;
  }
}
.pack-diff-col {
  min-width: 0;
  padding: 0.5rem 0.55rem 0.55rem;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg) 92%, var(--bg-elevated, var(--bg)) 8%);
}
.pack-diff-col h4 {
  margin: 0 0 0.35rem;
  font: 600 0.68rem/1.2 var(--mono, ui-monospace, monospace);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-dim);
}
.pack-diff-col ul {
  list-style: none;
  margin: 0;
  padding: 0;
  max-height: 240px;
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}
.pack-diff-col-empty {
  margin: 0.25rem 0 0;
  color: var(--text-dim);
  font-size: 0.82rem;
  line-height: 1.4;
}
.pack-diff-empty.pack-diff-idle {
  border-style: dashed;
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 40%, var(--border));
  background: color-mix(in srgb, var(--bg) 92%, var(--accent, #6ea8fe) 8%);
}
.pack-diff-empty.pack-diff-match {
  border-style: dashed;
  border-color: color-mix(in srgb, var(--success, #3ecf8e) 45%, var(--border));
  background: color-mix(in srgb, var(--bg) 90%, var(--success, #3ecf8e) 10%);
}
.pack-diff-jump-flash,
.pack-diff-col.pack-diff-jump-flash {
  outline: 2px solid var(--acid, #c9ff47);
  outline-offset: 2px;
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--acid, #c9ff47) 22%, transparent);
  transition: outline-color 0.2s ease, box-shadow 0.2s ease;
}
@media print {
  .pack-diff-toolbar,
  .pack-diff-jump-hint { display: none !important; }
}



/* ── Push 4 — pack preview, demo guide, session draft, props focus ── */
.session-draft-banner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.65rem;
  margin-top: 0.75rem;
  padding: 0.65rem 0.85rem;
  border: 1px solid color-mix(in srgb, var(--warning, #f0b429) 45%, var(--border));
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg) 88%, var(--warning, #f0b429) 12%);
}
.session-draft-banner.hidden { display: none; }
.session-draft-text { margin: 0; flex: 1 1 14rem; line-height: 1.4; }
.session-draft-actions { display: flex; gap: 0.4rem; flex-wrap: wrap; }

.demo-guide {
  margin-top: 0.75rem;
  position: relative;
}
.demo-guide.hidden { display: none; }
.demo-guide-inner {
  padding: 0.75rem 2rem 0.75rem 0.9rem;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 40%, var(--border));
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg) 90%, var(--accent, #6ea8fe) 10%);
}
.demo-guide-text { margin: 0 0 0.55rem; line-height: 1.45; }
.demo-guide-step {
  display: inline-block;
  margin-right: 0.4rem;
  font-weight: 600;
  font-size: 0.75rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--accent, #6ea8fe);
}
.demo-guide-actions { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.demo-guide .ritual-dismiss {
  position: absolute;
  top: 0.45rem;
  right: 0.55rem;
}

.pack-preview-panel {
  margin: 0.75rem 0 1rem;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--bg-elevated, var(--bg));
  overflow: hidden;
}
.pack-preview-panel.hidden { display: none; }
.pack-preview-inner {
  padding: 0.85rem 1rem 1rem;
  /* Push 104 — panel scrolls; sticky toolbar stays pinned */
  max-height: min(78vh, 900px);
  overflow: auto;
  overscroll-behavior: contain;
}
.pack-preview-topline {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  margin-bottom: 0.35rem;
}
.pack-preview-topline-actions { display: flex; align-items: center; gap: 0.4rem; }
.pack-preview-body {
  /* Push 104 — body no longer owns scroll; sticky toolbar rides panel scroll */
  max-height: none;
  overflow: visible;
  padding: 0.75rem 0.85rem;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--bg);
  font-size: 0.9rem;
  line-height: 1.45;
}
.pack-preview-body h2 { font-size: 1.15rem; margin: 0.4rem 0 0.55rem; }
.pack-preview-body h3 { font-size: 1.02rem; margin: 1rem 0 0.45rem; }
.pack-preview-body h4 { font-size: 0.95rem; margin: 0.75rem 0 0.35rem; }
.pack-preview-body p { margin: 0.25rem 0; }
.pack-preview-gap { height: 0.45rem; }
.pack-preview-list { margin: 0.25rem 0 0.55rem 1.1rem; padding: 0; }
.pack-preview-table-wrap { overflow-x: auto; margin: 0.45rem 0 0.75rem; }
.pack-preview-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.82rem;
}
.pack-preview-table th,
.pack-preview-table td {
  border: 1px solid var(--border);
  padding: var(--density-pack-cell-pad);
  text-align: left;
  vertical-align: top;
}
.pack-preview-table th {
  background: color-mix(in srgb, var(--bg) 85%, var(--accent, #6ea8fe) 15%);
  font-weight: 600;
}
.pack-preview-italic { font-style: italic; color: var(--text-dim); }

tr.prop-cluster-focus {
  outline: 2px solid color-mix(in srgb, var(--accent, #6ea8fe) 70%, transparent);
  outline-offset: -2px;
  background: color-mix(in srgb, var(--bg) 82%, var(--accent, #6ea8fe) 18%);
}
.map-library-client-label {
  font-size: 0.78rem;
  color: var(--text-dim);
  padding: 0.1rem 0.4rem;
  border: 1px dashed var(--border);
  border-radius: 999px;
}
.map-library-search-row { margin-bottom: 0.55rem; }
.map-library-label { flex: 1 1 10rem; }

/* Push 13 — named map library UX */
.map-library-item.is-last-used {
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 55%, var(--border));
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent, #6ea8fe) 25%, transparent);
}
.map-library-pin {
  font-size: 0.72rem;
  letter-spacing: 0.02em;
}
.map-library-empty {
  line-height: 1.45;
  max-width: 42rem;
}
.map-library-item-actions .btn-map-rename,
.map-library-item-actions .btn-map-dup,
.map-library-item-actions .btn-map-pin {
  font-size: 0.78rem;
}


/* Taxon push 29 — merge two named library maps; Push 31 prefer toggle */
.map-library-merge {
  margin: 0.65rem 0 0.85rem;
  padding: 0.65rem 0.75rem;
  border: 1px solid var(--border, #333);
  border-radius: 8px;
  background: color-mix(in srgb, var(--panel, #1a1a1a) 92%, var(--accent, #6ea8fe) 8%);
}
.map-library-merge-head {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 0.85rem;
  align-items: baseline;
  margin-bottom: 0.45rem;
}
.map-library-merge-row {
  flex-wrap: wrap;
  gap: 0.45rem;
  align-items: flex-end;
}
.map-library-merge-label {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  font-size: 0.78rem;
  color: var(--muted, #9aa);
}
.map-merge-select {
  min-width: 9.5rem;
  max-width: 14rem;
}
.map-merge-status { margin: 0.4rem 0 0; }
.map-merge-conflicts {
  margin-top: 0.5rem;
  max-height: 14rem;
  overflow: auto;
  border: 1px dashed color-mix(in srgb, var(--warn, #e6a23c) 45%, var(--border));
  border-radius: 6px;
  padding: 0.45rem 0.55rem;
  font-size: 0.82rem;
}
.map-merge-conflicts.hidden { display: none; }
.map-merge-conflicts table {
  width: 100%;
  border-collapse: collapse;
}
.map-merge-conflicts th,
.map-merge-conflicts td {
  text-align: left;
  padding: 0.2rem 0.35rem;
  border-bottom: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
  vertical-align: top;
}
.map-merge-conflicts th { color: var(--muted, #9aa); font-weight: 600; }
.map-merge-conflict-kind {
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--warn, #e6a23c);
}
.map-merge-clean {
  color: color-mix(in srgb, var(--ok, #3ecf8e) 85%, white);
}
.map-merge-prefer {
  min-width: 10.5rem;
}
.map-merge-manual-pick {
  margin: 0.35rem 0 0.35rem;
  padding: 0.4rem 0.5rem;
  border-left: 3px solid var(--accent, #6ea8fe);
  background: color-mix(in srgb, var(--accent, #6ea8fe) 10%, transparent);
  font-size: 0.8rem;
}
.map-merge-manual-status {
  margin: 0 0 0.35rem;
  font-size: 0.8rem;
}
.map-merge-manual-bulk {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin: 0 0 0.45rem;
}
.map-merge-manual-list {
  list-style: none;
  margin: 0;
  padding: 0;
  max-height: 12rem;
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
}
.map-merge-manual-row {
  display: grid;
  grid-template-columns: minmax(4rem, 7rem) minmax(5rem, 1fr) minmax(5rem, 1fr) auto;
  gap: 0.35rem 0.5rem;
  align-items: start;
  padding: 0.35rem 0.4rem;
  border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
  border-radius: 6px;
  background: color-mix(in srgb, var(--panel, #1a1d24) 92%, transparent);
}
.map-merge-manual-row[data-resolved="1"] {
  border-color: color-mix(in srgb, var(--ok, #3ecf8e) 40%, var(--border));
}
.map-merge-pick-meta {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  min-width: 0;
}
.map-merge-pick-val {
  min-width: 0;
  word-break: break-word;
  font-size: 0.78rem;
}
.map-merge-pick-val strong {
  display: block;
  font-size: 0.68rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--muted, #9aa);
  font-weight: 600;
}
.map-merge-pick-radios {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
  justify-content: flex-end;
}
.map-merge-pick-btn {
  min-width: 4.2rem;
}
.map-merge-pick-btn[aria-pressed="true"] {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 1px;
  background: color-mix(in srgb, var(--accent, #6ea8fe) 22%, transparent);
}
@media (max-width: 720px) {
  .map-merge-manual-row {
    grid-template-columns: 1fr;
  }
  .map-merge-pick-radios { justify-content: flex-start; }
}

.stat-chip-click {
  cursor: pointer;
  text-decoration: underline dotted color-mix(in srgb, var(--accent) 50%, transparent);
}
.stat-chip-click:hover { color: var(--accent, #6ea8fe); }


/* Property near-dup filter — mirrors event cluster toolbar */
.prop-filter-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: center;
  margin: 0.35rem 0 0.6rem;
}
tr.prop-cluster-focus td {
  outline: 1px solid var(--accent, #6ae3ff);
  background: color-mix(in srgb, var(--accent, #6ae3ff) 8%, transparent);
}

/* Push 6 — editable pack preview + month-N timeline + PWA affordances */
.pack-preview-edit {
  width: 100%;
  min-width: 8rem;
  font: inherit;
  font-size: 0.92rem;
  padding: 0.28rem 0.4rem;
  border: 1px solid var(--border, #2a3340);
  border-radius: 4px;
  background: var(--bg-elevated, #151b22);
  color: var(--text, #e8eef5);
}
.pack-preview-edit:focus {
  outline: 2px solid var(--accent, #5b9fd4);
  outline-offset: 1px;
}
.pack-preview-editable th:nth-child(3),
.pack-preview-editable td.num { text-align: right; white-space: nowrap; }
.pack-preview-aliases { max-width: 18rem; font-size: 0.85rem; }
.pack-preview-edit-hint { margin: 0 0 0.65rem; }

/* Taxon push 80 — pack preview search (canonical / note; density + theme via tokens; print-hide) */
/* Taxon push 202 — pack-preview search Clear honesty (discoverability; Clear already Push 80). */
/* Taxon push 204 — Month-N / sticky ritual drift jump (first drifted). */
/* Taxon push 206 — Month-N / sticky ritual new jump (first new; same N / newItems). */
.pack-preview-search-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem;
  margin: 0 0 0.55rem;
}
.pack-preview-search-input {
  flex: 1 1 12rem;
  min-width: 10rem;
  max-width: 28rem;
  padding: var(--density-cluster-header-pad);
}
.pack-preview-search-empty {
  margin: 0 0 0.55rem;
  font-size: 0.85rem;
}
.pack-preview-search-empty.hidden { display: none; }
.pack-preview-search-hide { display: none !important; }
html[data-density="compact"] .pack-preview-search-row {
  margin-bottom: 0.35rem;
  gap: 0.25rem;
}
html[data-density="compact"] .pack-preview-search-input {
  max-width: 24rem;
}
.pack-preview-md-details { margin-top: 0.85rem; }
.pack-preview-md-details summary {
  cursor: pointer;
  color: var(--text-dim, #9aa7b5);
  font-size: 0.9rem;
}
.pack-preview-md-body { margin-top: 0.5rem; opacity: 0.92; }

/* Taxon push 56 — pack note template chips (fill/append into note fields) */
.pack-note-cell {
  display: flex;
  flex-direction: column;
  gap: 0.28rem;
  min-width: 12rem;
}
.pack-note-templates {
  display: flex;
  flex-wrap: wrap;
  gap: 0.22rem;
}
button.pack-note-chip {
  font: inherit;
  font-size: 0.72rem;
  line-height: 1.2;
  padding: 0.12rem 0.38rem;
  border-radius: 999px;
  border: 1px solid var(--border, #2a3340);
  background: color-mix(in srgb, var(--bg-elevated, #151b22) 88%, var(--accent, #6ae3ff));
  color: var(--text-dim, #9aa7b5);
  cursor: pointer;
  white-space: nowrap;
}
button.pack-note-chip:hover,
button.pack-note-chip:focus {
  color: var(--text, #e8eef5);
  border-color: color-mix(in srgb, var(--accent, #6ae3ff) 45%, var(--border));
  outline: none;
}
button.pack-note-chip:focus-visible {
  outline: 2px solid var(--accent, #5b9fd4);
  outline-offset: 1px;
}
html[data-density="compact"] button.pack-note-chip {
  font-size: 0.68rem;
  padding: 0.08rem 0.3rem;
}


.pack-timeline {
  margin: 0.65rem 0 0.85rem;
  border: 1px solid var(--border, #2a3340);
  border-radius: 8px;
  background: var(--bg-panel, #121820);
}
.pack-timeline.hidden { display: none; }
.pack-timeline-inner {
  padding: 0.75rem 0.9rem 0.9rem;
  /* Push 110 — panel scrolls; sticky Share / Close stays pinned */
  max-height: min(78vh, 900px);
  overflow: auto;
  overscroll-behavior: contain;
}
.pack-timeline-topline {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  margin-bottom: 0.35rem;
}
.pack-timeline-list {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  margin: 0.55rem 0;
  /* Push 110 — list no longer clips; sticky toolbar rides panel scroll */
  max-height: none;
  overflow: visible;
}
.pack-timeline-item {
  display: flex;
  align-items: flex-start;
  gap: 0.45rem;
  padding: 0.35rem 0.45rem;
  border-radius: 6px;
  cursor: pointer;
  background: rgba(255,255,255,0.02);
}
.pack-timeline-item:hover { background: rgba(255,255,255,0.05); }
.pack-timeline-main { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.25rem 0.45rem; }
.pack-timeline-delta { font-size: 0.82rem; color: var(--text-dim, #9aa7b5); }
.pack-timeline-body { margin-top: 0.35rem; }
.pack-timeline-samples { margin: 0.35rem 0 0 1rem; padding: 0; font-size: 0.88rem; }
.pack-timeline-samples li { margin: 0.15rem 0; }


/* Push 7C — smoother mega refine + Month-N trend depth */
.clusters-refining {
  outline: 1px dashed color-mix(in srgb, var(--warning, #f0b429) 55%, var(--border));
  outline-offset: -1px;
  transition: opacity 0.15s ease;
}
.clusters-refining tbody {
  opacity: 0.92;
}
.stats.clusters-provisional .stat-refining {
  animation: taxon-pulse 1.2s ease-in-out infinite;
}
@keyframes taxon-pulse {
  0%, 100% { opacity: 0.7; }
  50% { opacity: 1; }
}
.pack-timeline-trend {
  margin: 0.45rem 0 0.55rem;
  padding: 0.5rem 0.55rem;
  border-radius: 6px;
  background: rgba(255,255,255,0.03);
  border: 1px solid color-mix(in srgb, var(--border, #2a3340) 80%, transparent);
}
.pack-timeline-trend.hidden { display: none; }
.pack-timeline-trend-head {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem 0.65rem;
  align-items: baseline;
  margin-bottom: 0.35rem;
  font-size: 0.9rem;
}
.pack-timeline-trend-legend {
  display: flex;
  gap: 0.75rem;
  font-size: 0.78rem;
  color: var(--text-dim, #9aa7b5);
  margin-bottom: 0.35rem;
}
.pack-timeline-trend-legend .leg-new::before,
.pack-timeline-trend-legend .leg-drift::before,
.pack-timeline-trend-legend .leg-gone::before {
  content: "";
  display: inline-block;
  width: 0.55rem;
  height: 0.55rem;
  border-radius: 2px;
  margin-right: 0.25rem;
  vertical-align: middle;
}
.pack-timeline-trend-legend .leg-new::before { background: var(--success, #3ecf8e); }
.pack-timeline-trend-legend .leg-drift::before { background: var(--warning, #f0b429); }
.pack-timeline-trend-legend .leg-gone::before { background: color-mix(in srgb, var(--text-dim) 70%, #000); }
.pack-timeline-trend-rows { display: flex; flex-direction: column; gap: 0.28rem; }
.pack-timeline-trend-row {
  display: grid;
  grid-template-columns: 3.2rem 1fr auto;
  gap: 0.4rem;
  align-items: center;
  font-size: 0.82rem;
}
.pack-timeline-trend-lbl { color: var(--text-dim, #9aa7b5); font-variant-numeric: tabular-nums; }
.pack-timeline-trend-bar {
  display: flex;
  height: 0.55rem;
  min-width: 4%;
  max-width: 100%;
  border-radius: 3px;
  overflow: hidden;
  background: rgba(255,255,255,0.06);
}
.pack-timeline-trend-bar i { display: block; min-width: 0; }
.pack-timeline-trend-bar i.t-new { background: var(--success, #3ecf8e); }
.pack-timeline-trend-bar i.t-drift { background: var(--warning, #f0b429); }
.pack-timeline-trend-bar i.t-gone { background: color-mix(in srgb, var(--text-dim) 70%, #000); }
.pack-timeline-trend-nums {
  font-variant-numeric: tabular-nums;
  color: var(--text-dim, #9aa7b5);
  white-space: nowrap;
}
.pack-timeline-empty {
  padding: 0.55rem 0.35rem;
}
.pack-timeline-empty-title {
  margin: 0 0 0.25rem;
  font-weight: 600;
  font-size: 0.95rem;
}
.pack-timeline-match .pack-timeline-empty-title { color: var(--success, #3ecf8e); }
.pack-timeline-delta.dim { opacity: 0.75; }


/* ── Push7D: a11y craft — skip link, sticky decide, open path, rhythm ───── */

.skip-link {
  position: absolute;
  left: 0.75rem;
  top: 0.75rem;
  z-index: 1000;
  padding: 0.45rem 0.75rem;
  border-radius: 6px;
  background: var(--acid, #c9ff47);
  color: #0a0b0d;
  font: 600 0.85rem/1.2 var(--font);
  text-decoration: none;
  transform: translateY(-160%);
  transition: transform 0.12s ease;
}
.skip-link:focus,
.skip-link:focus-visible {
  transform: translateY(0);
  outline: 2px solid var(--border-focus);
  outline-offset: 2px;
}

#main-content:focus {
  outline: none;
}

.footer a {
  color: inherit;
  text-underline-offset: 2px;
}
.footer a:hover {
  color: var(--accent);
}


/* Push 12 — keyboard cheat sheet + undo depth */
.help-modal {
 width: min(480px, 100%);
}
.help-modal-body {
 padding-top: 0.85rem;
}
.help-kbd-table {
 width: 100%;
 border-collapse: collapse;
 font-size: 0.88rem;
 margin-bottom: 0.85rem;
}
.help-kbd-table td {
 padding: 0.4rem 0.35rem;
 border-bottom: 1px solid var(--border);
 vertical-align: top;
}
.help-kbd-table td:first-child {
 width: 8.5rem;
 white-space: nowrap;
 color: var(--text);
}
.help-kbd-table td:last-child {
 color: var(--text-muted);
}
.help-kbd-table kbd {
 font-family: var(--mono);
 font-size: 0.78rem;
 padding: 0.12rem 0.35rem;
 border-radius: 4px;
 border: 1px solid var(--border);
 background: var(--bg-hover, rgba(255,255,255,0.04));
}
#btn-undo:disabled,
#btn-redo:disabled,
#btn-clear-decisions:disabled {
 opacity: 0.45;
}
#btn-help-keys {
 min-width: 2rem;
 font-family: var(--mono);
 font-weight: 600;
}

/* Sticky decide chrome — export / undo stay reachable while scrolling clusters */
#results-panel {
  overflow: visible;
}
#results-panel .decide-chrome {
  position: sticky;
  top: 0;
  z-index: 12;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 0.45rem;
  background: color-mix(in srgb, var(--bg-elevated) 92%, #161820);
  backdrop-filter: blur(8px);
  box-shadow: 0 1px 0 var(--border);
  padding-top: var(--space-3, 0.85rem);
  padding-bottom: var(--space-3, 0.85rem);
}
#results-panel .decide-chrome-main {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  row-gap: var(--space-2, 0.55rem);
  width: 100%;
}

.sample-bar-wrap {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2, 0.55rem);
  justify-content: flex-end;
  max-width: 100%;
}
.sample-more {
  position: relative;
}
.sample-more-summary {
  list-style: none;
  cursor: pointer;
}
.sample-more-summary::-webkit-details-marker { display: none; }
.sample-more[open] .sample-bar-dialects,
.sample-more .sample-bar-dialects {
  display: flex;
}
.sample-more:not([open]) .sample-bar-dialects {
  display: none;
}
.sample-more[open] .sample-bar-dialects {
  position: absolute;
  right: 0;
  top: calc(100% + 4px);
  z-index: 18;
  flex-wrap: wrap;
  gap: 0.25rem;
  min-width: 12rem;
  max-width: min(28rem, 90vw);
  padding: 0.45rem;
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(0,0,0,.35);
}

/* Taxon push 19 — in-app sample gallery cards */
.sample-gallery {
  margin: 0.85rem 0 0.35rem;
  padding: 0.75rem 0.85rem 0.85rem;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: color-mix(in srgb, var(--panel-head-tint) 80%, var(--bg-elevated));
}
.sample-gallery-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.35rem 0.75rem;
  margin-bottom: 0.65rem;
}
.sample-gallery-title {
  margin: 0;
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--text-muted);
}
.sample-gallery-lead {
  margin: 0;
  flex: 1 1 12rem;
  font-size: 0.8rem;
  color: var(--text-muted);
}
.sample-gallery-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(11.5rem, 1fr));
  gap: 0.45rem;
}
.sample-card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.28rem;
  text-align: left;
  padding: 0.55rem 0.65rem 0.6rem;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--bg-elevated);
  color: var(--text);
  cursor: pointer;
  font: inherit;
  line-height: 1.35;
  transition: border-color 0.12s ease, background 0.12s ease;
}
.sample-card:hover {
  background: var(--bg-hover);
  border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
}
.sample-card:focus-visible {
  outline: 2px solid var(--border-focus);
  outline-offset: 2px;
}
.sample-card-accent {
  border-color: color-mix(in srgb, var(--accent) 35%, var(--border));
  background: color-mix(in srgb, var(--accent-dim) 55%, var(--bg-elevated));
}
.sample-card-name {
  font-size: 0.86rem;
  font-weight: 600;
  color: var(--text);
}
.sample-card-blurb {
  font-size: 0.72rem;
  color: var(--text-muted);
}
@media (max-width: 640px) {
  .sample-gallery-grid {
    grid-template-columns: repeat(auto-fill, minmax(9.5rem, 1fr));
  }
}

/* Ritual cards — clearer focus + contrast on labels */
.ritual-metric:focus-within {
  outline: 2px solid var(--border-focus);
  outline-offset: 2px;
}
.ritual-metric-lbl {
  color: var(--text-muted);
}
.ritual-chip:focus-visible {
  outline: 2px solid var(--border-focus);
  outline-offset: 2px;
}

.cluster-header-actions .btn:focus-visible,
.cluster-actions .btn:focus-visible,
.btn-accept-prop:focus-visible,
.btn-keep-prop-sep:focus-visible,
.prop-pop-close:focus-visible,
.sample-more-summary:focus-visible {
  outline: 2px solid var(--border-focus);
  outline-offset: 2px;
}

.btn-accept-prop {
  background: color-mix(in srgb, var(--success, #3ecf8e) 18%, var(--bg-hover));
  border-color: color-mix(in srgb, var(--success, #3ecf8e) 50%, var(--border));
  color: #7dffc0;
}
.btn-keep-prop-sep {
  border-color: color-mix(in srgb, #c792ea 55%, var(--border));
  color: #d4b0f0;
  background: rgba(192, 146, 234, 0.08);
}

tr.cluster-focus[aria-current="true"],
tr.prop-cluster-focus[aria-current="true"] {
  outline: 2px solid var(--acid, #c9ff47);
  outline-offset: -2px;
}

.pack-preview-panel:not(.hidden) {
  border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--border));
  border-radius: 10px;
  background: color-mix(in srgb, var(--accent) 5%, var(--bg-elevated));
  margin: 0.75rem 0 0.5rem;
}
.pack-preview-body:focus-visible {
  outline: 2px solid var(--border-focus);
  outline-offset: 2px;
}

/* Spacing rhythm — panel / toolbar breathing room without rebrand */
.app {
  padding: 1.75rem 1.25rem 3.5rem;
}
.panel {
  margin-bottom: var(--space-4, 1.25rem);
}
.cluster-toolbar {
  margin: 0.35rem 0 0.65rem;
  gap: var(--space-2, 0.55rem);
}
.filter-hint, .props-hint, .map-hint {
  color: var(--text-muted);
}
.kbd-hint {
  color: var(--text-muted);
}
.state-box .detail {
  color: var(--text-muted);
}

@media (max-width: 640px) {
  #results-panel .decide-chrome {
    position: sticky;
    top: 0;
  }
  .sample-bar-wrap {
    width: 100%;
    justify-content: flex-start;
  }
  .sample-more[open] .sample-bar-dialects {
    left: 0;
    right: auto;
  }
}


.pack-preview-keep-note { width: 100%; min-width: 16rem; }


/* Taxon push 10 — print / PDF presentation (pack preview + ritual) */
.no-print { /* screen + print helper; hidden in @media print below */ }

@media print {
  @page {
    margin: 12mm 14mm;
    size: auto;
  }

  html, body {
    background: #fff !important;
    color: #111 !important;
    font-size: 11pt;
    color-scheme: light !important;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }
  /* Force light tokens on paper, including System and dark screen modes. */
  html,
  html[data-theme="dark"],
  html[data-theme="light"],
  html[data-theme="system"] {
    color-scheme: light !important;
    --bg: #fff;
    --bg-elevated: #fff;
    --bg-hover: #f4f5f7;
    --border: #cfd3dc;
    --border-focus: #3d6ef5;
    --text: #111;
    --text-muted: #4b5563;
    --text-dim: #4b5563;
    --accent: #2458c7;
    --accent-dim: rgba(36, 88, 199, 0.1);
    --success: #147a4b;
    --success-dim: rgba(20, 122, 75, 0.1);
    --warning: #805f00;
    --warning-dim: rgba(128, 95, 0, 0.1);
    --danger: #a3212d;
    --danger-dim: rgba(163, 33, 45, 0.1);
    --pro: #68409b;
    --pro-dim: rgba(104, 64, 155, 0.1);
    --grid-line: transparent;
    --panel-head-tint: rgba(17, 17, 17, 0.03);
    --modal-scrim: rgba(15, 18, 28, 0.2);
    --shadow-elevated: none;
    --theme-meta: #fff;
  }

  .skip-link,
  .no-print,
  .theme-toggle,
  #btn-theme-toggle,
  .density-toggle,
  #btn-density-toggle,
  .focus-toggle,
  #btn-focus-toggle,
  .sound-toggle,
  #btn-sound-toggle,
  .header-badges,
  .sample-bar-wrap,
  .sample-gallery,
  .footer,
  .ritual-dismiss,
  .ritual-actions,
 #btn-ritual-export-drift,
  .pack-preview-topline-actions,
  .pack-timeline-topline-actions,
  .pack-compare-actions,
  .pack-preview-edit-hint,
  .pack-preview-search-row,
  .pack-preview-search-empty,
  .pack-preview-md-details,
  .demo-guide,
  .kbd-hint,
  #demo-guide,
  .sw-toast,
  .toast {
    display: none !important;
  }

  /* Chrome around the decide loop / ingest — not the pack */
  #ingest-panel,
  #decide-chrome,
  .cluster-toolbar,
  .prop-filter-toolbar,
  .filter-chips,
  .tabs-row,
  .results-tabs,
  .input-tabs,
  .export-bar,
  .map-library-panel,
  #map-library-panel,
  .session-draft-banner,
  #session-draft-banner {
    display: none !important;
  }

  .header {
    border: none !important;
    margin: 0 0 0.6rem !important;
    padding: 0 !important;
    background: transparent !important;
  }
  .header .brand-mark { display: none !important; }
  .header h1 {
    font-size: 14pt !important;
    color: #111 !important;
    margin: 0 !important;
  }
  .header p { display: none !important; }

  .app {
    padding: 0 !important;
    max-width: none !important;
  }
  .panel {
    box-shadow: none !important;
    border: none !important;
    background: transparent !important;
    margin: 0 !important;
  }

  /* When pack preview is open, print that + ritual only */
  body:has(#pack-preview-panel:not(.hidden)) #results-panel .panel-body,
  body:has(#pack-preview-panel:not(.hidden)) #pane-events,
  body:has(#pack-preview-panel:not(.hidden)) #pane-properties,
  body:has(#pack-preview-panel:not(.hidden)) .pack-timeline,
  body:has(#pack-preview-panel:not(.hidden)) .pack-compare-panel,
  body:has(#pack-preview-panel:not(.hidden)) .map-library-bar,
  body:has(#pack-preview-panel:not(.hidden)) #map-library {
    display: none !important;
  }

  body:has(#pack-preview-panel:not(.hidden)) #results-panel {
    display: block !important;
  }
  body:has(#pack-preview-panel:not(.hidden)) #results-panel > .panel-head {
    display: none !important;
  }

  /* Ritual summary — ink-friendly cards + chip lists */
  .ritual-banner:not(.hidden) {
    display: block !important;
    break-inside: avoid;
    page-break-inside: avoid;
    margin: 0 0 0.85rem !important;
    border: 1px solid #bbb !important;
    border-radius: 0 !important;
    background: #fff !important;
    box-shadow: none !important;
  }
  .ritual-banner-inner {
    padding: 0.55rem 0.65rem !important;
    background: #fff !important;
  }
  .ritual-kicker {
    color: #333 !important;
    font-size: 9pt !important;
  }
  .ritual-hint {
    color: #444 !important;
  }
  .ritual-counts {
    gap: 0.4rem !important;
  }
  .ritual-metric {
    background: #f7f7f7 !important;
    border: 1px solid #ccc !important;
    color: #111 !important;
    break-inside: avoid;
  }
  .ritual-metric-num,
  .ritual-metric-new .ritual-metric-num,
  .ritual-metric-drift .ritual-metric-num {
    color: #111 !important;
  }
  .ritual-metric-lbl { color: #555 !important; }
  .ritual-changed {
    color: #111 !important;
  }
  .ritual-col h4 {
    color: #222 !important;
    border-bottom: 1px solid #ddd;
    padding-bottom: 0.15rem;
  }
  .ritual-chip {
    background: #fff !important;
    border: 1px solid #bbb !important;
    color: #111 !important;
    box-shadow: none !important;
  }
  .ritual-chip strong { color: #000 !important; }
  .ritual-chip .vol { color: #333 !important; }
  .ritual-chip.new,
  .ritual-chip.returned,
  .ritual-chip.drift {
    border-color: #999 !important;
    color: #111 !important;
  }

  /* Pack preview — full height tables, no scroll clip */
  .pack-preview-panel:not(.hidden) {
    display: block !important;
    margin: 0 !important;
    border: none !important;
    border-radius: 0 !important;
    background: #fff !important;
    box-shadow: none !important;
  }
  .pack-preview-inner {
    padding: 0 !important;
  }
  .pack-preview-topline {
    margin: 0 0 0.5rem !important;
    border-bottom: 1.5pt solid #222;
    padding-bottom: 0.35rem;
  }
  .pack-preview-panel:not(.hidden) #pack-preview-title::after {
    content: " · printable taxonomy pack";
    font-weight: 400;
    color: #555;
    font-size: 9pt;
  }
  .pack-preview-hint {
    display: none !important;
  }
  .pack-preview-body {
    max-height: none !important;
    overflow: visible !important;
    border: none !important;
    padding: 0 !important;
    background: #fff !important;
    color: #111 !important;
    font-size: 10pt !important;
  }
  .pack-preview-body h3 {
    color: #111 !important;
    font-size: 12pt !important;
    margin: 0.85rem 0 0.35rem !important;
    break-after: avoid;
    page-break-after: avoid;
  }
  .pack-preview-body .hint,
  .pack-preview-body .dim {
    color: #444 !important;
  }
  .pack-preview-table-wrap {
    overflow: visible !important;
    margin: 0.25rem 0 0.65rem !important;
    break-inside: avoid;
    page-break-inside: avoid;
  }
  .pack-preview-table {
    width: 100% !important;
    border-collapse: collapse !important;
    font-size: 9pt !important;
    color: #111 !important;
  }
  .pack-preview-table th,
  .pack-preview-table td {
    border: 1px solid #999 !important;
    padding: 0.28rem 0.4rem !important;
    color: #111 !important;
    background: #fff !important;
  }
  .pack-preview-table th {
    background: #eee !important;
    font-weight: 650 !important;
    color: #000 !important;
  }
  .pack-preview-table tr {
    break-inside: avoid;
    page-break-inside: avoid;
  }

  /* Editable fields → plain text look on paper / PDF */
  .pack-preview-edit {
    border: none !important;
    background: transparent !important;
    color: #111 !important;
    padding: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    min-width: 0 !important;
    width: 100% !important;
    font: inherit !important;
    -webkit-appearance: none;
    appearance: none;
  }
  .pack-preview-aliases {
    max-width: none !important;
    color: #333 !important;
  }

  /* Pack compare / timeline printable if open alone */
  .pack-compare-panel:not(.hidden),
  .pack-timeline:not(.hidden) {
    border: 1px solid #bbb !important;
    background: #fff !important;
    color: #111 !important;
    box-shadow: none !important;
  }
  .pack-compare-body,
  .pack-timeline-body,
  .pack-timeline-list {
    color: #111 !important;
  }

  a[href]::after { content: none !important; }
}


/* Taxon push 17 — multi-select + bulk decide */
/* Taxon push 25 — property cluster batch parity (same bar / selected row / checkbox chrome) */
.cluster-select-label {
 display: inline-flex;
 align-items: center;
 margin-right: 0.45rem;
 flex: 0 0 auto;
 cursor: pointer;
}
.cluster-select-label input.cluster-select {
 width: 1rem;
 height: 1rem;
 accent-color: var(--accent);
 cursor: pointer;
}
tr.cluster-selected > td,
tr.cluster-header-row.cluster-selected > td {
 background: color-mix(in srgb, var(--accent) 12%, transparent);
}
tr.cluster-selected {
 outline: 1px solid color-mix(in srgb, var(--accent) 55%, var(--border));
 outline-offset: -1px;
}
.batch-decide-bar {
 display: flex;
 flex-wrap: wrap;
 align-items: center;
 gap: 0.4rem 0.65rem;
 padding: 0.35rem 0.15rem;
 border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border));
 border-radius: 8px;
 background: color-mix(in srgb, var(--accent) 8%, transparent);
}
.batch-decide-bar.hidden { display: none; }
.batch-decide-count {
 font-size: 0.78rem;
 font-weight: 600;
 color: var(--accent);
 margin-right: 0.25rem;
}
@media print {
 .batch-decide-bar, .cluster-select-label { display: none !important; }
}

/* Taxon push 24 · Push 76 — first-run coach marks (light; dismissible; catch-up) */
.taxon-tour {
  position: fixed;
  z-index: 80;
  left: 1rem;
  right: 1rem;
  bottom: 1rem;
  display: flex;
  justify-content: center;
  pointer-events: none;
}
.taxon-tour.hidden { display: none; }
.taxon-tour-card {
  pointer-events: auto;
  position: relative;
  max-width: 26rem;
  width: 100%;
  padding: 0.85rem 2rem 0.85rem 0.95rem;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 45%, var(--border));
  border-radius: 10px;
  background: color-mix(in srgb, var(--bg-elevated, var(--bg)) 92%, var(--accent, #6ea8fe) 8%);
  box-shadow: 0 8px 28px color-mix(in srgb, #000 28%, transparent);
}
.taxon-tour-step {
  margin: 0 0 0.25rem;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--accent, #6ea8fe);
}
.taxon-tour-title {
  margin: 0 0 0.35rem;
  font-weight: 600;
  font-size: 0.98rem;
}
.taxon-tour-body {
  margin: 0 0 0.65rem;
  line-height: 1.45;
  font-size: 0.9rem;
  color: var(--text-muted, var(--text));
}
.taxon-tour-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  justify-content: flex-end;
}
.taxon-tour .ritual-dismiss {
  position: absolute;
  top: 0.4rem;
  right: 0.5rem;
}
.taxon-tour-spotlight {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 3px;
  border-radius: 8px;
  position: relative;
  z-index: 2;
}
@media print {
  .taxon-tour,
  #taxon-tour,
  .taxon-tour-spotlight { outline: none !important; }
  .taxon-tour,
  #taxon-tour { display: none !important; }
}

/* Taxon push 28 — optional ?perf=1 on-screen chip (created only when flag on). */
.taxon-perf-chip {
  position: fixed;
  right: 0.75rem;
  bottom: 0.75rem;
  z-index: 9999;
  max-width: min(92vw, 28rem);
  padding: 0.4rem 0.65rem;
  border-radius: 8px;
  border: 1px solid var(--border, #3a4250);
  background: color-mix(in srgb, var(--panel, #1a1f2a) 92%, transparent);
  background: var(--panel, #1a1f2a);
  color: var(--text, #e8eaed);
  font: 600 0.72rem/1.35 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  letter-spacing: 0.01em;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.28);
  cursor: pointer;
  opacity: 0.92;
}
.taxon-perf-chip.hidden { display: none !important; }
.taxon-perf-chip:hover { opacity: 1; }
@media print {
  .taxon-perf-chip,
  #taxon-perf-chip { display: none !important; }
}


/* Taxon push 34 — focus mode (persisted data-focus). Hide Advanced / map-library chrome; enlarge clusters; dim sample gallery. */
.focus-toggle {
  font-family: var(--mono);
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  min-width: 3.6rem;
}
.focus-toggle.focus-toggle-on,
html[data-focus="on"] .focus-toggle {
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 45%, var(--border));
  color: var(--accent, #6ea8fe);
}
html[data-focus="on"] #tools-panel,
html[data-focus="on"] .tools-panel,
html[data-focus="on"] .map-library-bar,
html[data-focus="on"] #map-library,
html[data-focus="on"] .map-library {
  display: none !important;
}
html[data-focus="on"] .sample-gallery {
  opacity: 0.38;
  filter: saturate(0.55);
  transition: opacity 0.15s ease, filter 0.15s ease;
}
html[data-focus="on"] .sample-gallery:focus-within,
html[data-focus="on"] .sample-gallery:hover {
  opacity: 0.72;
  filter: saturate(0.85);
}
html[data-focus="on"] .table-wrap-virtual {
  max-height: min(85vh, 820px);
}
html[data-focus="on"] .table-wrap#props-table-wrap {
  max-height: min(70vh, 720px);
}
html[data-focus="on"] table.events {
  font-size: 0.9rem;
}
html[data-focus="on"] .cluster-header-title {
  font-size: 0.95rem;
  font-weight: 600;
}
html[data-focus="on"] .cluster-header-row > td {
  padding: 0.7rem 0.75rem;
}
html[data-density="compact"][data-focus="on"] .cluster-header-row > td {
  padding: 0.52rem 0.65rem;
}
html[data-focus="on"] .cluster-header-meta {
  font-size: 0.8rem;
}
html[data-focus="on"] .cluster-header-canon input.cluster-canon-edit {
  font-size: 0.88rem;
  padding: 0.38rem 0.5rem;
}
html[data-focus="on"] #results-panel {
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent, #6ea8fe) 28%, transparent);
}


/* Taxon push 35 — Cmd/Ctrl+K command palette (JS-driven; leave Push 34 focus CSS alone). */
.taxon-palette {
  position: fixed;
  inset: 0;
  z-index: 120;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 12vh 1rem 1rem;
  background: var(--modal-scrim, rgba(4, 5, 8, 0.55));
  backdrop-filter: blur(3px);
}
.taxon-palette.hidden { display: none !important; }
.taxon-palette-card {
  width: min(32rem, 100%);
  max-height: min(70vh, 28rem);
  display: flex;
  flex-direction: column;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 40%, var(--border, #3a4250));
  border-radius: 12px;
  background: var(--bg-elevated, var(--panel, #1a1f2a));
  box-shadow: 0 16px 48px color-mix(in srgb, #000 40%, transparent);
  overflow: hidden;
}
.taxon-palette-input {
  width: 100%;
  box-sizing: border-box;
  border: 0;
  border-bottom: 1px solid var(--border, #3a4250);
  background: transparent;
  color: var(--text, #e8eaed);
  font: 600 0.95rem/1.4 ui-sans-serif, system-ui, sans-serif;
  padding: 0.85rem 1rem;
  outline: none;
}
.taxon-palette-input::placeholder { color: var(--muted, #9aa3b2); font-weight: 500; }
.taxon-palette-list {
  list-style: none;
  margin: 0;
  padding: 0.35rem;
  overflow-y: auto;
  flex: 1 1 auto;
}
.taxon-palette-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  width: 100%;
  text-align: left;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--text, #e8eaed);
  font: 500 0.88rem/1.35 ui-sans-serif, system-ui, sans-serif;
  padding: 0.55rem 0.7rem;
  cursor: pointer;
}
.taxon-palette-item:hover,
.taxon-palette-item.is-active {
  background: color-mix(in srgb, var(--accent, #6ea8fe) 18%, transparent);
  color: var(--text, #e8eaed);
}
.taxon-palette-item-label { flex: 1 1 auto; }
.taxon-palette-item-hint {
  font: 500 0.68rem/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  letter-spacing: 0.02em;
  color: var(--muted, #9aa3b2);
  text-transform: uppercase;
}
.taxon-palette-empty {
  margin: 0.75rem 0.85rem;
  color: var(--muted, #9aa3b2);
  font-size: 0.85rem;
}
.taxon-palette-hint {
  margin: 0;
  padding: 0.45rem 0.85rem 0.55rem;
  border-top: 1px solid var(--border, #3a4250);
  font-size: 0.72rem;
  color: var(--muted, #9aa3b2);
}
.visually-hidden {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}
@media print {
  .taxon-palette,
  #taxon-palette { display: none !important; }
}


/* Taxon push 36 — recent filename chips (names only in localStorage; re-prompt picker). Leave Push 35 palette alone. */
.recent-files {
  margin-top: 0.65rem;
  padding: 0.55rem 0.65rem 0.45rem;
  border: 1px dashed color-mix(in srgb, var(--border, #3a4250) 80%, var(--accent, #6ea8fe));
  border-radius: 10px;
  background: color-mix(in srgb, var(--panel, #1a1f2a) 92%, var(--accent, #6ea8fe));
}
.recent-files.hidden { display: none !important; }
.recent-files-head {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
  margin-bottom: 0.4rem;
}
.recent-files-label {
  font: 600 0.72rem/1 ui-sans-serif, system-ui, sans-serif;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-dim, #9aa3b2);
}
.recent-files-privacy {
  font: 500 0.68rem/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  color: var(--muted, #9aa3b2);
}
.recent-files-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}
button.recent-file-chip {
  display: inline-flex;
  align-items: center;
  max-width: 14rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-family: var(--mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
  font-size: 0.72rem;
  color: var(--accent, #6ea8fe);
  background: var(--accent-dim, color-mix(in srgb, var(--accent, #6ea8fe) 14%, transparent));
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 28%, var(--border, #3a4250));
  padding: 0.28rem 0.55rem;
  border-radius: 999px;
  cursor: pointer;
}
button.recent-file-chip:hover,
button.recent-file-chip:focus-visible {
  filter: brightness(1.08);
  outline: 2px solid color-mix(in srgb, var(--accent, #6ea8fe) 45%, transparent);
  outline-offset: 1px;
}
.recent-hint {
  margin: 0.45rem 0 0;
  font-size: 0.75rem;
}
.recent-hint.hidden { display: none !important; }
@media print {
  .recent-files,
  #recent-files { display: none !important; }
}

/* Taxon push 38 — session zip options inside export-more (privacy: CSV opt-in). */
.export-more-menu {
  min-width: 12.5rem;
}
.session-zip-opt {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.2rem 0.35rem;
  font-size: 0.72rem;
  color: var(--muted, #9aa3b2);
  cursor: pointer;
  user-select: none;
}
.session-zip-opt input {
  margin: 0;
  accent-color: var(--accent, #6ea8fe);
}
.session-zip-opt-warn {
  color: var(--warn, #e6b35a);
}
@media print {
  #btn-export-session-zip,
  .session-zip-opt { display: none !important; }
}

/* Taxon push 39 — complete keyboard help card (messages.js-driven). Leave Push 38 session-zip alone. */
.help-kbd-card.help-modal {
  width: min(520px, 100%);
}
.help-kbd-card .help-kbd-table td:first-child {
  width: 10.5rem;
  font-weight: 500;
}
.help-kbd-card .help-kbd-table tr[data-help="theme"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="density"] td:first-child {
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 0.78rem;
  letter-spacing: 0.02em;
}
.help-kbd-card #help-modal-fine {
  margin-top: 0.15rem;
  line-height: 1.45;
}
@media print {
  #help-modal.hidden,
  #help-modal { display: none !important; }
}


/* Taxon push 42 — Share compare toast (clipboard md; no URL encode). Leave Push 23 columns alone. */
.taxon-toast {
  position: fixed;
  z-index: 12000;
  left: 50%;
  bottom: 1.25rem;
  transform: translateX(-50%) translateY(120%);
  max-width: min(420px, calc(100vw - 2rem));
  padding: 0.65rem 1rem;
  border-radius: 10px;
  border: 1px solid var(--border);
  background: var(--bg-elevated, var(--bg));
  color: var(--text);
  box-shadow: 0 10px 28px color-mix(in srgb, #000 28%, transparent);
  font: 550 0.86rem/1.35 var(--sans, var(--font));
  opacity: 0;
  pointer-events: none;
  transition: transform 0.22s ease, opacity 0.22s ease;
}
.taxon-toast.taxon-toast-show {
  transform: translateX(-50%) translateY(0);
  opacity: 1;
}
/* #btn-pack-compare-share — visual parity with copy-md; privacy-safe handoff */
@media print {
  #taxon-toast,
  #btn-pack-compare-share { display: none !important; }
}


/* Taxon push 43 — empty-state polish (filter · map library · pack history · ritual no-pack). */
.state-box.empty-filter {
  padding: 0.85rem 1rem;
  border: 1px dashed color-mix(in srgb, var(--border, #2a3140) 80%, transparent);
  border-radius: 8px;
  background: color-mix(in srgb, var(--panel, #12151c) 92%, transparent);
}
.state-box.empty-filter .title {
  font-weight: 600;
  margin-bottom: 0.25rem;
}
.state-box.empty-filter .detail {
  color: var(--text-dim, #9aa7b5);
  line-height: 1.45;
}
.state-box.empty-filter kbd {
  font-size: 0.78em;
  padding: 0.05rem 0.3rem;
  border-radius: 4px;
  border: 1px solid var(--border, #2a3140);
  background: rgba(255,255,255,0.04);
}
.map-library-empty[role="status"] {
  margin: 0.35rem 0 0.15rem;
  line-height: 1.45;
}
.ritual-banner-empty .ritual-counts:empty {
  display: none;
}
.ritual-empty {
  padding: 0.35rem 0.1rem 0.15rem;
}
.ritual-empty-title {
  margin: 0 0 0.3rem;
  font-weight: 600;
  font-size: 0.95rem;
}
.ritual-empty-detail {
  margin: 0;
  line-height: 1.45;
}
.pack-timeline-empty .hint {
  line-height: 1.45;
}
@media print {
  .ritual-banner-empty,
  .state-box.empty-filter { break-inside: avoid; }
}

/* Taxon push 45 — decide-stats strip (live decide progress under results tabs). */
.decide-stats {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 0.75rem;
  margin: 0.35rem 0 0.55rem;
  padding: 0.35rem 0.65rem;
  border: 1px solid color-mix(in srgb, var(--border, #2a3140) 85%, transparent);
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 88%, transparent);
  font-size: 0.78rem;
}
.decide-stats.hidden { display: none; }
.decide-stats-kicker {
  font-size: 0.68rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--text-dim, #9aa7b5);
  font-weight: 600;
  margin-right: 0.15rem;
}
.decide-stats-chip {
  display: inline-flex;
  align-items: baseline;
  gap: 0.28rem;
  padding: 0.12rem 0.4rem;
  border-radius: 6px;
  border: 1px solid transparent;
  background: transparent;
  color: inherit;
  font: inherit;
  cursor: default;
}
.decide-stats-chip .decide-stats-num {
  font-family: var(--mono, ui-monospace, monospace);
  font-weight: 650;
  font-size: 0.92rem;
  letter-spacing: -0.02em;
}
.decide-stats-chip .decide-stats-lbl {
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--text-dim, #9aa7b5);
}
.decide-stats-chip.is-accepted .decide-stats-num { color: var(--success, #3dd68c); }
.decide-stats-chip.is-kept .decide-stats-num { color: var(--accent, #6ea8fe); }
.decide-stats-chip.is-undecided .decide-stats-num { color: var(--warning, #f0b429); }
.decide-stats-chip.is-pct .decide-stats-num { color: var(--text, #e8eef7); }
.decide-stats-chip.is-clickable {
  cursor: pointer;
  border-color: color-mix(in srgb, var(--warning, #f0b429) 45%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--warning, #f0b429) 10%, transparent);
}
.decide-stats-chip.is-clickable:hover,
.decide-stats-chip.is-clickable:focus-visible {
  outline: none;
  border-color: var(--warning, #f0b429);
  background: color-mix(in srgb, var(--warning, #f0b429) 18%, transparent);
}
.decide-stats-chip.is-clickable:focus-visible {
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--warning, #f0b429) 35%, transparent);
}
.decide-stats.is-done .decide-stats-chip.is-undecided .decide-stats-num { color: var(--success, #3dd68c); }
.decide-stats.is-done .decide-stats-chip.is-undecided {
  cursor: default;
  border-color: transparent;
  background: transparent;
}
@media print {
  .decide-stats { display: none !important; }
}

/* Taxon push 85 — decide progress bar beside chips (decided/total + thin track; density/theme). */
.decide-progress {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  margin-left: 0.15rem;
  min-width: 5.5rem;
}
.decide-progress-text {
  font-family: var(--mono, ui-monospace, monospace);
  font-weight: 650;
  font-size: 0.78rem;
  letter-spacing: -0.02em;
  color: var(--text, #e8eef7);
  white-space: nowrap;
}
.decide-progress-bar {
  display: block;
  flex: 1 1 auto;
  width: 4.5rem;
  min-width: 3.2rem;
  max-width: 7rem;
  height: 6px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--border, #2a3140) 80%, transparent);
  overflow: hidden;
}
.decide-progress-fill {
  display: block;
  height: 100%;
  width: 0%;
  border-radius: inherit;
  background: var(--success, #3dd68c);
  transition: width 0.15s ease-out;
}
.decide-stats.is-done .decide-progress-fill {
  background: var(--success, #3dd68c);
}
html[data-density="compact"] .decide-progress {
  gap: 0.28rem;
  min-width: 4.6rem;
}
html[data-density="compact"] .decide-progress-text {
  font-size: 0.72rem;
}
html[data-density="compact"] .decide-progress-bar {
  height: 4px;
  width: 3.6rem;
  min-width: 2.6rem;
}
html[data-theme="light"] .decide-progress-text {
  color: var(--text, #111);
}
html[data-theme="light"] .decide-progress-bar {
  background: color-mix(in srgb, var(--border, #cfd3dc) 75%, transparent);
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .decide-progress-text {
    color: var(--text, #111);
  }
  html[data-theme="system"] .decide-progress-bar {
    background: color-mix(in srgb, var(--border, #cfd3dc) 75%, transparent);
  }
}
@media (prefers-reduced-motion: reduce) {
  .decide-progress-fill { transition: none; }
}

/* Taxon push 88 — clickable progress / decided count → first undecided (reuse jump helpers). */
.decide-progress.is-clickable {
  cursor: pointer;
  border: 1px solid transparent;
  border-radius: 6px;
  padding: 0.1rem 0.28rem;
  margin-left: 0.05rem;
  background: transparent;
  color: inherit;
  font: inherit;
}
.decide-progress.is-clickable:hover,
.decide-progress.is-clickable:focus-visible {
  outline: none;
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 45%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--accent, #6ea8fe) 10%, transparent);
}
.decide-progress.is-clickable:focus-visible {
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
html[data-theme="light"] .decide-progress.is-clickable:hover,
html[data-theme="light"] .decide-progress.is-clickable:focus-visible {
  border-color: color-mix(in srgb, var(--accent, #3b6fd9) 45%, var(--border, #cfd3dc));
  background: color-mix(in srgb, var(--accent, #3b6fd9) 10%, transparent);
}
button.decide-progress {
  appearance: none;
  -webkit-appearance: none;
}

/* Taxon push 46 — sound toggle chrome (optional Accept/Keep beep). Leave Push 45 decide-stats alone. */
.sound-toggle {
  font-family: var(--mono);
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  min-width: 3.6rem;
}
.sound-toggle.sound-toggle-on,
html[data-sound="on"] .sound-toggle {
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 45%, var(--border));
  color: var(--accent, #6ea8fe);
}
@media print {
  .sound-toggle,
  #btn-sound-toggle { display: none !important; }
}
@media (prefers-reduced-motion: reduce) {
  /* Beeps are gated in JS; no motion chrome to strip here. */
}

/* Taxon push 49 — vim-style g/G · n/N documented in help card (leave Push 46 sound alone). */
.help-kbd-card .help-kbd-table tr[data-help="gG"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="nN"] td:first-child {
  white-space: nowrap;
}

/* Taxon push 51 — filter/search sessionStorage persist (no new chrome; leave Push 49 help rows alone). */

/* Taxon push 52 — canonical collision warn uses Clear-decisions confirm(); no new chrome. */


/* Taxon push 53 — Why? cluster expand (surgical; leave decide-list chrome alone). */
.cluster-why-wrap {
  margin-top: 0.15rem;
}
.cluster-why-disclosure {
  margin: 0;
  padding: 0;
  border: none;
  max-width: 18rem;
}
.cluster-why-summary {
  display: inline-flex;
  align-items: center;
  gap: 0.2rem;
  cursor: pointer;
  list-style: none;
  font-size: 0.68rem;
  font-weight: 650;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--accent, #6ea8fe);
  padding: 0.05rem 0.28rem;
  border-radius: 4px;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 35%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--accent, #6ea8fe) 8%, transparent);
  user-select: none;
}
.cluster-why-summary::-webkit-details-marker { display: none; }
.cluster-why-summary::marker { content: ""; }
.cluster-why-summary:hover,
.cluster-why-summary:focus-visible {
  outline: none;
  border-color: var(--accent, #6ea8fe);
  background: color-mix(in srgb, var(--accent, #6ea8fe) 16%, transparent);
}
.cluster-why-summary:focus-visible {
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
.cluster-why-disclosure[open] > .cluster-why-summary {
  border-color: var(--accent, #6ea8fe);
}
.cluster-why-body {
  margin: 0.25rem 0 0;
  padding: 0.28rem 0.4rem;
  font-size: 0.72rem;
  line-height: 1.35;
  color: var(--text, #e8eef7);
  background: color-mix(in srgb, var(--bg-elevated, var(--bg, #12161e)) 80%, transparent);
  border: 1px solid var(--border, #2a3140);
  border-radius: 5px;
  max-width: 18rem;
  word-break: break-word;
}
.cluster-why-solo {
  display: inline-block;
  font-size: 0.68rem;
  letter-spacing: 0.02em;
  color: var(--text-dim, #9aa7b5);
  opacity: 0.85;
}
/* Density (Push 16) */
html[data-density="compact"] .cluster-why-summary {
  font-size: 0.62rem;
  padding: 0.02rem 0.22rem;
}
html[data-density="compact"] .cluster-why-body {
  font-size: 0.66rem;
  padding: 0.18rem 0.32rem;
  max-width: 15rem;
}
html[data-density="compact"] .cluster-why-solo {
  font-size: 0.62rem;
}
/* Focus mode (Push 34) — keep readable */
html[data-focus="on"] .cluster-why-body {
  font-size: 0.78rem;
  max-width: 22rem;
}
html[data-focus="on"] .cluster-why-summary {
  font-size: 0.72rem;
}
/* Dark mode inherits CSS vars (Push 14) — no extra theme fork. */
.prop-cluster-cell .cluster-why-disclosure,
.prop-cluster-cell .cluster-why-solo {
  display: inline-block;
  margin-top: 0.15rem;
}
@media print {
  .cluster-why-disclosure:not([open]) .cluster-why-body { display: none; }
}

/* Taxon push 57 — map vs cluster keep-apart conflict banner + chip (advisory; no ritual block). */

/* Taxon push 60 — property decide-loop parity (Why? bind · collision · map-conflict; no new chrome). */

.map-conflict-banner {
  margin: 0.55rem 0 0.75rem;
  border: 1px solid color-mix(in srgb, var(--warning, #f0b429) 50%, var(--border, #2a3140));
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg, #0f1218) 88%, var(--warning, #f0b429) 12%);
}
.map-conflict-banner.hidden { display: none; }
.map-conflict-banner-inner {
  padding: 0.7rem 0.85rem 0.8rem;
}
.map-conflict-banner-topline {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  margin-bottom: 0.35rem;
}
.map-conflict-kicker {
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--warning, #f0b429);
}
.map-conflict-text {
  margin: 0 0 0.55rem;
  line-height: 1.4;
  font-size: 0.92rem;
}
.map-conflict-list {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
}
.map-conflict-item {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.45rem;
  padding: 0.45rem 0.55rem;
  border-radius: 6px;
  border: 1px solid color-mix(in srgb, var(--warning, #f0b429) 28%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--bg, #0f1218) 92%, var(--warning, #f0b429) 8%);
}
.map-conflict-detail {
  flex: 1 1 12rem;
  font-size: 0.85rem;
  line-height: 1.35;
}
.map-conflict-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem;
}
.map-conflict-hint {
  margin: 0.55rem 0 0;
  font-size: 0.78rem;
}
.tag.tag-map-conflict {
  border-color: color-mix(in srgb, var(--warning, #f0b429) 55%, var(--border));
  color: var(--warning, #f0b429);
  background: color-mix(in srgb, var(--warning, #f0b429) 12%, transparent);
}
@media print {
  .map-conflict-banner,
  #map-conflict-banner { display: none !important; }
}

/* Taxon push 62 — decide-loop all-done celebration vs filter-empty.
   Tokens only (dark / light / system). Density + focus tweaks. */
.state-box.empty-all-done {
  padding: 0.95rem 1.05rem;
  border: 1px solid color-mix(in srgb, var(--success, #3dd68c) 42%, var(--border, #2a3140));
  border-radius: 8px;
  background: color-mix(in srgb, var(--panel, #12151c) 88%, var(--success, #3dd68c) 12%);
}
.state-box.empty-all-done .title {
  font-weight: 650;
  margin-bottom: 0.3rem;
  color: color-mix(in srgb, var(--success, #3dd68c) 70%, var(--text, #e8eef5));
}
.state-box.empty-all-done .detail {
  color: var(--text-dim, #9aa7b5);
  line-height: 1.45;
  margin-bottom: 0.55rem;
}
.decide-empty-counts {
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem 0.85rem;
  margin: 0 0 0.65rem;
  font-size: 0.82rem;
}
.decide-empty-count strong {
  font-variant-numeric: tabular-nums;
  margin-right: 0.2rem;
}
.decide-empty-count.is-accepted strong {
  color: var(--success, #3dd68c);
}
.decide-empty-count.is-kept strong {
  color: var(--accent, #6ea8fe);
}
.decide-empty-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin-top: 0.15rem;
}
.state-box.empty-filter .decide-empty-actions {
  margin-top: 0.55rem;
}
.decide-stats-done-actions {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.3rem;
  margin-left: auto;
}
html[data-density="compact"] .state-box.empty-all-done,
html[data-density="compact"] .state-box.empty-filter {
  padding: 0.65rem 0.75rem;
}
html[data-density="compact"] .decide-empty-counts {
  margin-bottom: 0.4rem;
  font-size: 0.76rem;
}
html[data-focus="on"] .state-box.empty-all-done {
  padding: 1.1rem 1.2rem;
}
html[data-focus="on"] .state-box.empty-all-done .title {
  font-size: 1.05rem;
}
html[data-theme="light"] .state-box.empty-all-done,
html[data-theme="system"] .state-box.empty-all-done {
  background: color-mix(in srgb, var(--panel, #fff) 90%, var(--success, #1a7f4b) 10%);
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .state-box.empty-all-done,
  html:not([data-theme]) .state-box.empty-all-done {
    background: color-mix(in srgb, var(--panel, #fff) 90%, var(--success, #1a7f4b) 10%);
  }
}
@media print {
  .state-box.empty-all-done,
  .decide-stats-done-actions { break-inside: avoid; }
  .decide-stats-done-actions { display: none !important; }
}


/* Taxon push 63 — Month-N scannable trend table (new / on last pack / drifted) */
.pack-timeline-trend-table-wrap {
  overflow-x: auto;
  margin-top: 0.15rem;
}
.pack-timeline-trend-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.82rem;
  font-variant-numeric: tabular-nums;
}
.pack-timeline-trend-table th,
.pack-timeline-trend-table td {
  padding: 0.22rem 0.35rem;
  text-align: left;
  border-bottom: 1px solid color-mix(in srgb, var(--border, #2a3340) 70%, transparent);
  vertical-align: middle;
}
.pack-timeline-trend-table th {
  color: var(--text-dim, #9aa7b5);
  font-weight: 600;
  font-size: 0.75rem;
  text-transform: lowercase;
}
.pack-timeline-trend-table th:not(:first-child),
.pack-timeline-trend-table td.pack-timeline-trend-num {
  text-align: right;
  white-space: nowrap;
}
.pack-timeline-trend-step {
  color: var(--text-dim, #9aa7b5);
  margin-right: 0.25rem;
  font-size: 0.72rem;
}
.pack-timeline-trend-num.t-new { color: var(--success, #3ecf8e); }
.pack-timeline-trend-num.t-onpack { color: var(--text, #e8eef5); }
.pack-timeline-trend-num.t-drift { color: var(--warning, #f0b429); }
.pack-timeline-trend-spark { width: 28%; min-width: 3.5rem; }
.pack-timeline-trend-spark-h { width: 28%; }
.pack-timeline-trend-legend .leg-onpack::before {
  content: "";
  display: inline-block;
  width: 0.55rem;
  height: 0.55rem;
  border-radius: 2px;
  margin-right: 0.25rem;
  vertical-align: middle;
  background: color-mix(in srgb, var(--text, #e8eef5) 55%, var(--success, #3ecf8e));
}
.pack-timeline-trend-bar i.t-onpack {
  background: color-mix(in srgb, var(--text, #e8eef5) 55%, var(--success, #3ecf8e));
}
.pack-timeline-one-pack .pack-timeline-empty-title {
  color: var(--warning, #f0b429);
}

/* Taxon push 92 — Month-N empty/compare craft: clearer <2 empty · shelf CTA · readable trend · share */
.pack-timeline-need-two .pack-timeline-empty-title {
  color: var(--warning, #f0b429);
}
.pack-timeline-empty-cta {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem 0.55rem;
  align-items: center;
  margin: 0.55rem 0 0.35rem;
}
.pack-timeline-empty-shelf-hint {
  margin: 0.15rem 0 0;
  font-size: 0.84rem;
  max-width: 42rem;
}
.pack-timeline-trend-head .pack-timeline-share-trend {
  margin-left: auto;
}
.pack-timeline-share-trend {
  flex: 0 0 auto;
}
.pack-timeline-trend-table tbody tr:nth-child(even) {
  background: rgba(255, 255, 255, 0.03);
}
.pack-timeline-trend-table th,
.pack-timeline-trend-table td {
  line-height: 1.35;
}
.pack-timeline-trend-lbl {
  color: var(--text, #e8eef5);
  font-weight: 500;
}
.pack-timeline-trend-step {
  font-weight: 600;
}
html[data-theme="light"] .pack-timeline-trend {
  background: rgba(0, 0, 0, 0.03);
  border-color: color-mix(in srgb, var(--border, #c5ced8) 80%, transparent);
}
html[data-theme="light"] .pack-timeline-trend-table tbody tr:nth-child(even) {
  background: rgba(0, 0, 0, 0.035);
}
html[data-theme="light"] .pack-timeline-trend-num.t-onpack,
html[data-theme="light"] .pack-timeline-trend-lbl {
  color: var(--text, #1a2330);
}
html[data-theme="light"] .pack-timeline-empty-cta .btn-primary {
  box-shadow: none;
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .pack-timeline-trend {
    background: rgba(0, 0, 0, 0.03);
  }
  html[data-theme="system"] .pack-timeline-trend-table tbody tr:nth-child(even) {
    background: rgba(0, 0, 0, 0.035);
  }
  html[data-theme="system"] .pack-timeline-trend-num.t-onpack,
  html[data-theme="system"] .pack-timeline-trend-lbl {
    color: var(--text, #1a2330);
  }
}


.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}


/* Taxon push 93 — dialect override reuses Push 65 undo toast (Dialect set to X · Undo). */
/* Taxon push 65 — undo toast with action label (Accept / Keep / bulk / Prefer / pack note).
   Theme tokens (v17/v18 shell). Coalesce one toast; ~4s. Respect reduced-motion. No sound. */
.taxon-undo-toast {
  position: fixed;
  z-index: 12010;
  left: 50%;
  bottom: 1.25rem;
  transform: translateX(-50%) translateY(120%);
  display: flex;
  align-items: center;
  gap: 0;
  max-width: min(440px, calc(100vw - 2rem));
  padding: 0.55rem 0.75rem 0.55rem 1rem;
  border-radius: 10px;
  border: 1px solid var(--border);
  background: var(--bg-elevated, var(--bg));
  color: var(--text);
  box-shadow: 0 10px 28px color-mix(in srgb, #000 28%, transparent);
  font: 550 0.86rem/1.35 var(--sans, var(--font));
  opacity: 0;
  pointer-events: none;
  transition: transform 0.22s ease, opacity 0.22s ease;
}
.taxon-undo-toast.taxon-undo-toast-show {
  transform: translateX(-50%) translateY(0);
  opacity: 1;
  pointer-events: auto;
}
.taxon-undo-toast-label {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.taxon-undo-toast-sep {
  color: var(--text-dim, #9aa7b5);
  flex: 0 0 auto;
}
.taxon-undo-toast-action {
  flex: 0 0 auto;
  margin: 0;
  margin-left: 0.15rem;
  padding: 0.28rem 0.65rem;
  border-radius: 7px;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 45%, var(--border));
  background: color-mix(in srgb, var(--accent, #6ea8fe) 16%, transparent);
  color: var(--accent, #6ea8fe);
  font: 650 0.82rem/1.2 var(--sans, var(--font));
  cursor: pointer;
}
.taxon-undo-toast-action:hover {
  background: color-mix(in srgb, var(--accent, #6ea8fe) 28%, transparent);
}
.taxon-undo-toast-action:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
}
html[data-theme="light"] .taxon-undo-toast {
  box-shadow: 0 10px 24px color-mix(in srgb, #000 14%, transparent);
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .taxon-undo-toast,
  html:not([data-theme]) .taxon-undo-toast {
    box-shadow: 0 10px 24px color-mix(in srgb, #000 14%, transparent);
  }
}
@media (prefers-reduced-motion: reduce) {
  .taxon-undo-toast {
    transition: none;
  }
  .taxon-undo-toast:not(.taxon-undo-toast-show) {
    transform: translateX(-50%) translateY(0);
  }
}
@media print {
  #taxon-undo-toast,
  .taxon-undo-toast { display: none !important; }
}


/* Taxon push 66 — recent packs shelf (local snapshots near pack / Month-N; cap 8; never upload) */
.recent-packs {
  margin: 0.65rem 0 0.75rem;
  padding: 0.55rem 0.7rem 0.5rem;
  border: 1px dashed color-mix(in srgb, var(--border, #3a4250) 75%, var(--accent, #6ea8fe));
  border-radius: 10px;
  background: color-mix(in srgb, var(--panel, #1a1f2a) 94%, var(--accent, #6ea8fe));
}
.recent-packs.hidden { display: none !important; }
.recent-packs-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.45rem 0.65rem;
  margin-bottom: 0.4rem;
}
.recent-packs-label {
  font: 600 0.72rem/1 ui-sans-serif, system-ui, sans-serif;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-dim, #9aa3b2);
}
.recent-packs-privacy {
  font: 500 0.68rem/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  color: var(--muted, #9aa3b2);
  flex: 1 1 auto;
}
.recent-packs-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}
.recent-pack-chip-wrap {
  display: inline-flex;
  flex-direction: column;
  align-items: stretch;
  gap: 0.15rem;
}
.recent-pack-chip-actions {
  display: inline-flex;
  gap: 0.25rem;
}
.recent-pack-chip {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.12rem;
  max-width: 16rem;
  padding: 0.35rem 0.6rem;
  border-radius: 10px;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 26%, var(--border, #3a4250));
  background: var(--accent-dim, color-mix(in srgb, var(--accent, #6ea8fe) 12%, transparent));
  color: var(--text, #e8eef5);
  cursor: pointer;
  text-align: left;
  font: 500 0.75rem/1.25 ui-sans-serif, system-ui, sans-serif;
}
.recent-pack-chip:hover,
.recent-pack-chip:focus-visible {
  border-color: var(--accent, #6ea8fe);
  outline: 2px solid color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
  outline-offset: 1px;
}
.recent-pack-chip-name {
  font-weight: 600;
  max-width: 15rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--accent, #6ea8fe);
}
.recent-pack-chip-meta {
  font: 500 0.68rem/1.2 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  color: var(--text-dim, #9aa3b2);
}
.recent-pack-chip-actions {
  display: inline-flex;
  gap: 0.25rem;
  margin-top: 0.15rem;
}
.recent-pack-chip-actions .btn {
  font-size: 0.65rem;
  padding: 0.12rem 0.4rem;
}
.recent-packs-hint {
  margin: 0.35rem 0 0;
  min-height: 1.1em;
}
.recent-packs-empty {
  font: 500 0.75rem/1.35 ui-sans-serif, system-ui, sans-serif;
  color: var(--text-dim, #9aa3b2);
  margin: 0.15rem 0 0;
}
html[data-focus="on"] .recent-packs {
  /* stay visible near pack/Month-N; focus mode still hides map-library only */
}
@media print {
  .recent-packs,
  #recent-packs { display: none !important; }
}

/* Taxon push 69 — keyboard help catch-up (palette-only Pack diff / Month-N · batch · sound rows). */
.help-kbd-card .help-kbd-table tr[data-help="theme"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="density"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="sound"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="batch"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="packdiff"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="monthn"] td:first-child {
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 0.78rem;
  letter-spacing: 0.02em;
  white-space: nowrap;
}

/* Taxon push 113 — help catch-up chrome rows (sticky pack/compare · progress jump · CSV map / Set dialect already palette). */
.help-kbd-card .help-kbd-table tr[data-help="stickypack"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="stickycompare"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="progressjump"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="setdialect"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="exportcsvmap"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="jumpundecided"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="sharemonthn"] td:first-child {
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 0.78rem;
  letter-spacing: 0.02em;
  white-space: nowrap;
}

/* Taxon push 72 — print / PDF ritual sheet (strengthen Push 10/54).
   Clean one-page-or-few sheet: decided counts · keep-separate · pack notes · Month-N if present.
   Hide chrome / toasts / shelves / coach / palette / help. Keep light ink. */
.taxon-print-header {
  display: none;
}
.taxon-print-header-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.35rem 0.75rem;
}
.taxon-print-header-file {
  font: 650 11pt/1.3 ui-sans-serif, system-ui, sans-serif;
  color: #111;
}
.taxon-print-header-dialect {
  font: 550 9pt/1.3 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  color: #333;
  border: 1px solid #bbb;
  border-radius: 4px;
  padding: 0.08rem 0.4rem;
}
.taxon-print-header-dialect.hidden { display: none !important; }
.taxon-print-header-date {
  margin-left: auto;
  font: 500 9pt/1.3 ui-sans-serif, system-ui, sans-serif;
  color: #555;
}

@media print {
  /* Ritual sheet chrome — shelves, toasts, coach, palette, help, map-conflict */
  #recent-packs,
  .recent-packs,
  #taxon-undo-toast,
  .taxon-undo-toast,
  #map-conflict-banner,
  .map-conflict-banner,
  #taxon-tour,
  .taxon-tour,
  #taxon-palette,
  .taxon-palette,
  #help-modal,
  .help-modal,
  .pack-note-templates,
  button.pack-note-chip,
  #controls-panel,
  #empty-state,
  #error-state,
  #plan-panel,
  .decide-stats,
  #decide-stats {
    display: none !important;
  }

  /* Optional print header: file name · dialect chip text · date */
  .taxon-print-header {
    display: block !important;
    margin: 0 0 0.65rem !important;
    padding: 0 0 0.4rem !important;
    border-bottom: 1.5pt solid #222 !important;
    background: #fff !important;
    color: #111 !important;
    break-inside: avoid;
    page-break-inside: avoid;
  }
  .taxon-print-header-inner {
    display: flex !important;
  }
  .taxon-print-header-file {
    color: #111 !important;
  }
  .taxon-print-header-dialect:not(.hidden) {
    display: inline-block !important;
    color: #333 !important;
    border-color: #999 !important;
    background: #fff !important;
  }
  .taxon-print-header-date {
    color: #555 !important;
  }

  /* Keep light ink (Push 54) — reinforce white paper / dark text */
  html,
  body {
    background: #fff !important;
    color: #111 !important;
    color-scheme: light !important;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  /* Month-N summary printable with pack/ritual when present (override Push 10 hide) */
  body:has(#pack-preview-panel:not(.hidden)) #pack-timeline:not(.hidden) {
    display: block !important;
    margin: 0.75rem 0 0 !important;
    border: 1px solid #bbb !important;
    background: #fff !important;
    color: #111 !important;
    box-shadow: none !important;
    break-inside: avoid;
    page-break-inside: avoid;
  }
  body:has(#pack-preview-panel:not(.hidden)) #pack-timeline:not(.hidden) .pack-timeline-topline-actions,
  body:has(#pack-preview-panel:not(.hidden)) #pack-timeline:not(.hidden) .pack-timeline-list,
  body:has(#pack-preview-panel:not(.hidden)) #pack-timeline:not(.hidden) .pack-timeline-body,
  body:has(#pack-preview-panel:not(.hidden)) #pack-timeline:not(.hidden) > .pack-timeline-inner > .hint {
    display: none !important;
  }
  body:has(#pack-preview-panel:not(.hidden)) #pack-timeline:not(.hidden) .pack-timeline-trend:not(.hidden) {
    display: block !important;
  }
  .pack-timeline-trend-table {
    color: #111 !important;
    font-size: 9pt !important;
  }
  .pack-timeline-trend-table th,
  .pack-timeline-trend-table td {
    border-bottom: 1px solid #ccc !important;
    color: #111 !important;
    background: #fff !important;
  }
  .pack-timeline-trend-num.t-new,
  .pack-timeline-trend-num.t-onpack,
  .pack-timeline-trend-num.t-drift {
    color: #111 !important;
  }

  /* Pack preview title cue for ritual sheet */
  .pack-preview-panel:not(.hidden) #pack-preview-title::after {
    content: " · ritual sheet" !important;
    font-weight: 400;
    color: #555;
    font-size: 9pt;
  }
}


/* Taxon push 77 — a11y live regions catch-up (filter live announcers use .sr-only) */
/* Taxon push 74 — sticky active-filter chip bar (Showing N of M · Clear) */
.filter-active-bar {
  position: sticky;
  top: 0;
  z-index: 6;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.4rem 0.75rem;
  margin: 0.25rem 0 0.45rem;
  padding: 0.32rem 0.6rem;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 32%, var(--border, #2a3140));
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 86%, var(--accent, #6ea8fe) 14%);
  box-shadow: 0 1px 0 color-mix(in srgb, var(--border, #2a3140) 75%, transparent);
  font-size: 0.78rem;
  color: var(--text, #e8eef7);
}
.filter-active-bar.hidden { display: none; }
.filter-active-text {
  font-family: var(--mono, ui-monospace, monospace);
  font-weight: 650;
  letter-spacing: -0.01em;
  color: var(--text, #e8eef7);
}
.filter-active-clear {
  margin-left: auto;
}
html[data-density="compact"] .filter-active-bar {
  padding: 0.18rem 0.45rem;
  margin: 0.15rem 0 0.3rem;
  font-size: 0.72rem;
  gap: 0.25rem 0.5rem;
}
html[data-density="compact"] .filter-active-text {
  font-size: 0.72rem;
}
html[data-focus="on"] .filter-active-bar {
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 48%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 78%, var(--accent, #6ea8fe) 22%);
}
html[data-theme="light"] .filter-active-bar {
  background: color-mix(in srgb, var(--bg-elevated, #fff) 90%, var(--accent, #3d6ef5) 10%);
  border-color: color-mix(in srgb, var(--accent, #3d6ef5) 28%, var(--border, #cfd3dc));
  color: var(--text, #111);
}
html[data-theme="light"] .filter-active-text {
  color: var(--text, #111);
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .filter-active-bar {
    background: color-mix(in srgb, var(--bg-elevated, #fff) 90%, var(--accent, #3d6ef5) 10%);
    border-color: color-mix(in srgb, var(--accent, #3d6ef5) 28%, var(--border, #cfd3dc));
    color: var(--text, #111);
  }
  html[data-theme="system"] .filter-active-text {
    color: var(--text, #111);
  }
}
@media print {
  .filter-active-bar,
  #event-filter-active-bar,
  #prop-filter-active-bar {
    display: none !important;
  }
}

/* Taxon push 103 — strong :focus-visible rings on decide controls
   (Accept / Keep-separate / progress jump / filter Clear / pack search).
   light + dark + compact. Leave Push 34 focus mode (data-focus hide/enlarge) alone. */
.btn-accept-cluster:focus-visible,
.btn-accept-prop:focus-visible,
.btn-keep-sep:focus-visible,
.btn-keep-prop-sep:focus-visible,
.decide-progress.is-clickable:focus-visible,
#btn-clear-filter:focus-visible,
#btn-clear-prop-filter:focus-visible,
.filter-active-clear:focus-visible,
#pack-preview-search:focus-visible,
.pack-preview-search-input:focus-visible,
#btn-clear-pack-preview-search:focus-visible {
  outline: 2px solid var(--border-focus, #5b8def);
  outline-offset: 2px;
  box-shadow:
    0 0 0 2px color-mix(in srgb, var(--bg, #0d1117) 92%, transparent),
    0 0 0 5px color-mix(in srgb, var(--border-focus, #5b8def) 58%, transparent);
}

/* Accept — success-tinted dual ring */
.btn-accept-cluster:focus-visible,
.btn-accept-prop:focus-visible {
  outline-color: var(--success, #3ecf8e);
  box-shadow:
    0 0 0 2px color-mix(in srgb, var(--bg, #0d1117) 92%, transparent),
    0 0 0 5px color-mix(in srgb, var(--success, #3ecf8e) 55%, transparent);
}

/* Keep-separate — purple dual ring */
.btn-keep-sep:focus-visible,
.btn-keep-prop-sep:focus-visible {
  outline-color: #c792ea;
  box-shadow:
    0 0 0 2px color-mix(in srgb, var(--bg, #0d1117) 92%, transparent),
    0 0 0 5px color-mix(in srgb, #c792ea 55%, transparent);
}

/* Progress jump — override Push 88 outline:none with a strong ring */
.decide-progress.is-clickable:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 55%, var(--border, #2a3140));
  box-shadow:
    0 0 0 2px color-mix(in srgb, var(--bg, #0d1117) 92%, transparent),
    0 0 0 5px color-mix(in srgb, var(--accent, #6ea8fe) 50%, transparent);
}

html[data-theme="light"] .btn-accept-cluster:focus-visible,
html[data-theme="light"] .btn-accept-prop:focus-visible,
html[data-theme="light"] .btn-keep-sep:focus-visible,
html[data-theme="light"] .btn-keep-prop-sep:focus-visible,
html[data-theme="light"] .decide-progress.is-clickable:focus-visible,
html[data-theme="light"] #btn-clear-filter:focus-visible,
html[data-theme="light"] #btn-clear-prop-filter:focus-visible,
html[data-theme="light"] .filter-active-clear:focus-visible,
html[data-theme="light"] #pack-preview-search:focus-visible,
html[data-theme="light"] .pack-preview-search-input:focus-visible,
html[data-theme="light"] #btn-clear-pack-preview-search:focus-visible {
  box-shadow:
    0 0 0 2px color-mix(in srgb, var(--bg, #ffffff) 94%, transparent),
    0 0 0 5px color-mix(in srgb, var(--border-focus, #3d6ef5) 48%, transparent);
}
html[data-theme="light"] .btn-accept-cluster:focus-visible,
html[data-theme="light"] .btn-accept-prop:focus-visible {
  outline-color: color-mix(in srgb, var(--success, #1a9f63) 85%, #0a0);
  box-shadow:
    0 0 0 2px #fff,
    0 0 0 5px color-mix(in srgb, var(--success, #1a9f63) 45%, transparent);
}
html[data-theme="light"] .btn-keep-sep:focus-visible,
html[data-theme="light"] .btn-keep-prop-sep:focus-visible {
  outline-color: #9b59c7;
  box-shadow:
    0 0 0 2px #fff,
    0 0 0 5px color-mix(in srgb, #9b59c7 45%, transparent);
}
html[data-theme="light"] .decide-progress.is-clickable:focus-visible {
  outline-color: var(--accent, #3b6fd9);
  box-shadow:
    0 0 0 2px #fff,
    0 0 0 5px color-mix(in srgb, var(--accent, #3b6fd9) 45%, transparent);
}

@media (prefers-color-scheme: light) {
  html[data-theme="system"] .btn-accept-cluster:focus-visible,
  html[data-theme="system"] .btn-accept-prop:focus-visible,
  html[data-theme="system"] .btn-keep-sep:focus-visible,
  html[data-theme="system"] .btn-keep-prop-sep:focus-visible,
  html[data-theme="system"] .decide-progress.is-clickable:focus-visible,
  html[data-theme="system"] #btn-clear-filter:focus-visible,
  html[data-theme="system"] #btn-clear-prop-filter:focus-visible,
  html[data-theme="system"] .filter-active-clear:focus-visible,
  html[data-theme="system"] #pack-preview-search:focus-visible,
  html[data-theme="system"] .pack-preview-search-input:focus-visible,
  html[data-theme="system"] #btn-clear-pack-preview-search:focus-visible {
    box-shadow:
      0 0 0 2px #fff,
      0 0 0 5px color-mix(in srgb, var(--border-focus, #3d6ef5) 48%, transparent);
  }
  html[data-theme="system"] .btn-accept-cluster:focus-visible,
  html[data-theme="system"] .btn-accept-prop:focus-visible {
    outline-color: color-mix(in srgb, var(--success, #1a9f63) 85%, #0a0);
    box-shadow:
      0 0 0 2px #fff,
      0 0 0 5px color-mix(in srgb, var(--success, #1a9f63) 45%, transparent);
  }
  html[data-theme="system"] .btn-keep-sep:focus-visible,
  html[data-theme="system"] .btn-keep-prop-sep:focus-visible {
    outline-color: #9b59c7;
    box-shadow:
      0 0 0 2px #fff,
      0 0 0 5px color-mix(in srgb, #9b59c7 45%, transparent);
  }
  html[data-theme="system"] .decide-progress.is-clickable:focus-visible {
    outline-color: var(--accent, #3b6fd9);
    box-shadow:
      0 0 0 2px #fff,
      0 0 0 5px color-mix(in srgb, var(--accent, #3b6fd9) 45%, transparent);
  }
}

/* Compact density — slightly tighter offset; ring stays dual + 2px outline */
html[data-density="compact"] .btn-accept-cluster:focus-visible,
html[data-density="compact"] .btn-accept-prop:focus-visible,
html[data-density="compact"] .btn-keep-sep:focus-visible,
html[data-density="compact"] .btn-keep-prop-sep:focus-visible,
html[data-density="compact"] .decide-progress.is-clickable:focus-visible,
html[data-density="compact"] #btn-clear-filter:focus-visible,
html[data-density="compact"] #btn-clear-prop-filter:focus-visible,
html[data-density="compact"] .filter-active-clear:focus-visible,
html[data-density="compact"] #pack-preview-search:focus-visible,
html[data-density="compact"] .pack-preview-search-input:focus-visible,
html[data-density="compact"] #btn-clear-pack-preview-search:focus-visible {
  outline-width: 2px;
  outline-offset: 1px;
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--bg, #0d1117) 90%, transparent),
    0 0 0 4px color-mix(in srgb, var(--border-focus, #5b8def) 55%, transparent);
}
html[data-density="compact"] .btn-accept-cluster:focus-visible,
html[data-density="compact"] .btn-accept-prop:focus-visible {
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--bg, #0d1117) 90%, transparent),
    0 0 0 4px color-mix(in srgb, var(--success, #3ecf8e) 55%, transparent);
}
html[data-density="compact"] .btn-keep-sep:focus-visible,
html[data-density="compact"] .btn-keep-prop-sep:focus-visible {
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--bg, #0d1117) 90%, transparent),
    0 0 0 4px color-mix(in srgb, #c792ea 55%, transparent);
}
html[data-density="compact"] .decide-progress.is-clickable:focus-visible {
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--bg, #0d1117) 90%, transparent),
    0 0 0 4px color-mix(in srgb, var(--accent, #6ea8fe) 50%, transparent);
}

/* Focus mode (Push 34) — rings still apply; do not hide decide Accept/Keep/progress/filter/pack search */
html[data-focus="on"] .btn-accept-cluster:focus-visible,
html[data-focus="on"] .btn-accept-prop:focus-visible,
html[data-focus="on"] .btn-keep-sep:focus-visible,
html[data-focus="on"] .btn-keep-prop-sep:focus-visible,
html[data-focus="on"] .decide-progress.is-clickable:focus-visible,
html[data-focus="on"] #btn-clear-filter:focus-visible,
html[data-focus="on"] #btn-clear-prop-filter:focus-visible,
html[data-focus="on"] .filter-active-clear:focus-visible,
html[data-focus="on"] #pack-preview-search:focus-visible,
html[data-focus="on"] .pack-preview-search-input:focus-visible,
html[data-focus="on"] #btn-clear-pack-preview-search:focus-visible {
  outline-width: 2px;
  outline-offset: 2px;
}


/* Taxon push 104 — sticky pack-preview toolbar
   (Export pack / CSV map / search / Close stay reachable on long packs).
   Density / theme / print-aware. Panel scrolls; toolbar sticks. */
.pack-preview-sticky {
  position: sticky;
  top: 0;
  z-index: 8;
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  margin: -0.15rem 0 0.55rem;
  padding: 0.45rem 0.55rem 0.5rem;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 28%, var(--border, #2a3140));
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 92%, var(--accent, #6ea8fe) 8%);
  box-shadow: 0 1px 0 color-mix(in srgb, var(--border, #2a3140) 70%, transparent);
  backdrop-filter: blur(6px);
}
.pack-preview-sticky-main {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  margin-bottom: 0;
  flex-wrap: wrap;
}
.pack-preview-sticky-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.35rem;
}
.pack-preview-sticky .pack-preview-search-row {
  margin: 0;
  width: 100%;
}
.pack-preview-sticky .pack-preview-search-input {
  max-width: none;
  flex: 1 1 14rem;
}

html[data-density="compact"] .pack-preview-sticky {
  padding: 0.28rem 0.4rem 0.32rem;
  gap: 0.22rem;
  margin-bottom: 0.35rem;
}
html[data-density="compact"] .pack-preview-sticky-actions {
  gap: 0.22rem;
}
html[data-density="compact"] .pack-preview-inner {
  max-height: min(82vh, 960px);
  padding: 0.55rem 0.7rem 0.7rem;
}

html[data-theme="light"] .pack-preview-sticky {
  background: color-mix(in srgb, var(--bg-elevated, #fff) 94%, var(--accent, #3d6ef5) 6%);
  border-color: color-mix(in srgb, var(--accent, #3d6ef5) 24%, var(--border, #cfd3dc));
  box-shadow: 0 1px 0 color-mix(in srgb, var(--border, #cfd3dc) 80%, transparent);
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .pack-preview-sticky {
    background: color-mix(in srgb, var(--bg-elevated, #fff) 94%, var(--accent, #3d6ef5) 6%);
    border-color: color-mix(in srgb, var(--accent, #3d6ef5) 24%, var(--border, #cfd3dc));
    box-shadow: 0 1px 0 color-mix(in srgb, var(--border, #cfd3dc) 80%, transparent);
  }
}

html[data-focus="on"] .pack-preview-sticky {
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 42%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 86%, var(--accent, #6ea8fe) 14%);
}

@media print {
  .pack-preview-sticky,
  #pack-preview-sticky,
  .pack-preview-sticky-actions,
  #btn-pack-preview-csv-map {
    display: none !important;
  }
  .pack-preview-inner {
    max-height: none !important;
    overflow: visible !important;
  }
}


/* Taxon push 110 — sticky pack-compare / Month-N toolbar
   (Share / Close stay reachable on long diffs / trends).
   Density / theme / print-aware. Panel scrolls; toolbar sticks. Mirror Push 104. */
.pack-compare-sticky,
.pack-timeline-sticky {
  position: sticky;
  top: 0;
  z-index: 8;
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  margin: -0.15rem 0 0.55rem;
  padding: 0.45rem 0.55rem 0.5rem;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 28%, var(--border, #2a3140));
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 92%, var(--accent, #6ea8fe) 8%);
  box-shadow: 0 1px 0 color-mix(in srgb, var(--border, #2a3140) 70%, transparent);
  backdrop-filter: blur(6px);
}
.pack-compare-sticky-main,
.pack-timeline-sticky-main {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  margin-bottom: 0;
  flex-wrap: wrap;
}
.pack-compare-sticky-actions,
.pack-timeline-sticky-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.35rem;
}

html[data-density="compact"] .pack-compare-sticky,
html[data-density="compact"] .pack-timeline-sticky {
  padding: 0.28rem 0.4rem 0.32rem;
  gap: 0.22rem;
  margin-bottom: 0.35rem;
}
html[data-density="compact"] .pack-compare-sticky-actions,
html[data-density="compact"] .pack-timeline-sticky-actions {
  gap: 0.22rem;
}
html[data-density="compact"] .pack-compare-inner,
html[data-density="compact"] .pack-timeline-inner {
  max-height: min(82vh, 960px);
  padding: 0.55rem 0.7rem 0.7rem;
}

html[data-theme="light"] .pack-compare-sticky,
html[data-theme="light"] .pack-timeline-sticky {
  background: color-mix(in srgb, var(--bg-elevated, #fff) 94%, var(--accent, #3d6ef5) 6%);
  border-color: color-mix(in srgb, var(--accent, #3d6ef5) 24%, var(--border, #cfd3dc));
  box-shadow: 0 1px 0 color-mix(in srgb, var(--border, #cfd3dc) 80%, transparent);
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .pack-compare-sticky,
  html[data-theme="system"] .pack-timeline-sticky {
    background: color-mix(in srgb, var(--bg-elevated, #fff) 94%, var(--accent, #3d6ef5) 6%);
    border-color: color-mix(in srgb, var(--accent, #3d6ef5) 24%, var(--border, #cfd3dc));
    box-shadow: 0 1px 0 color-mix(in srgb, var(--border, #cfd3dc) 80%, transparent);
  }
}

html[data-focus="on"] .pack-compare-sticky,
html[data-focus="on"] .pack-timeline-sticky {
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 42%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 86%, var(--accent, #6ea8fe) 14%);
}

@media print {
  .pack-compare-sticky,
  #pack-compare-sticky,
  .pack-compare-sticky-actions,
  .pack-timeline-sticky,
  #pack-timeline-sticky,
  .pack-timeline-sticky-actions,
  #btn-pack-compare-share,
  #btn-pack-timeline-share,
  #btn-pack-timeline-close {
    display: none !important;
  }
  .pack-compare-inner,
  .pack-timeline-inner {
    max-height: none !important;
    overflow: visible !important;
  }
}


/* Taxon push 119 — help catch-up rows for map-merge Manual pick chrome */
/* Taxon push 128 — help row a/b binds for merge Manual pick (no new chrome) */
/* Taxon push 130 — help row j/k nav for merge Manual pick (no new chrome) */
/* Taxon push 133 — help row Home/End jump for merge Manual pick (no new chrome) */
/* Taxon push 139 — help row Enter applies when all merge conflicts picked (no new chrome) */
/* Taxon push 144 — merge-apply status toast (reuses .taxon-toast; no new chrome) */
/* Taxon push 148 — help row c copies merge conflict raw (no new chrome) */
/* Taxon push 162 — help row x clears merge conflict pick (no new chrome) */
/* Taxon push 166 — help row n/N next/prev unresolved merge conflict (no new chrome) */
.help-kbd-card .help-kbd-table tr[data-help="mergepick"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergeuseab"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergenav"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergehomeend"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergeenter"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergecopy"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergeclear"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergenextunresolved"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergefilter"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergesearch"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergesearchclear"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergecopyunresolved"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergebulk"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergeapply"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="focusmapmerge"] td:first-child {
  font-family: var(--mono, ui-monospace, monospace);
  font-size: 0.78rem;
  letter-spacing: 0.02em;
  white-space: nowrap;
}


/* Taxon push 122 — sticky merge-pick toolbar
   (Use A/B for remaining · Apply picks & save stay reachable on long conflict lists).
   Density / theme / print / focus-visible aware. Conflicts panel scrolls; toolbar sticks.
   Non-manual prefer modes keep prior table-only chrome (no sticky). Mirror Push 104 / 110. */
.map-merge-conflicts.map-merge-conflicts-manual {
  max-height: min(42vh, 28rem);
  overflow: auto;
  padding-top: 0.35rem;
}
.map-merge-conflicts.map-merge-conflicts-manual .map-merge-manual-list {
  max-height: none;
  overflow: visible;
}
.map-merge-pick-sticky {
  position: sticky;
  top: 0;
  z-index: 8;
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  margin: 0 0 0.45rem;
  padding: 0.4rem 0.5rem 0.45rem;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 28%, var(--border, #2a3140));
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 92%, var(--accent, #6ea8fe) 8%);
  box-shadow: 0 1px 0 color-mix(in srgb, var(--border, #2a3140) 70%, transparent);
  backdrop-filter: blur(6px);
}
.map-merge-pick-sticky-main {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.65rem;
  flex-wrap: wrap;
}
.map-merge-pick-sticky .map-merge-manual-status {
  margin: 0;
  flex: 1 1 10rem;
  min-width: 0;
}
.map-merge-pick-sticky-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin: 0;
}

/* Taxon push 157 — sticky merge-pick remaining chip (N remaining / All picked) */
/* Taxon push 192 — kind-split remaining chip text may be longer (events · properties) */
/* Taxon push 194 — kind segment buttons inside split remaining chip (events / properties clickable) */
/* Taxon push 196 — kind segment click also sets sticky kind filter then jumps */
/* Taxon push 200 — sticky All kinds clears kind filter (hidden when inactive) */
.map-merge-remaining-chip--split {
  gap: 0.1rem;
  max-width: min(100%, 26rem);
  overflow: visible;
  text-overflow: unset;
  cursor: default;
}
.map-merge-remaining-chip.map-merge-remaining-chip--split:hover {
  filter: none;
}
.map-merge-remaining-chip-seg {
  margin: 0;
  padding: 0.05rem 0.18rem;
  border: 0;
  border-radius: 999px;
  background: transparent;
  color: inherit;
  font: inherit;
  font-weight: 700;
  line-height: inherit;
  letter-spacing: inherit;
  cursor: pointer;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.12em;
  text-decoration-color: color-mix(in srgb, currentColor 35%, transparent);
}
.map-merge-remaining-chip-seg:hover {
  text-decoration-color: color-mix(in srgb, currentColor 75%, transparent);
  background: color-mix(in srgb, currentColor 8%, transparent);
}
.map-merge-remaining-chip-seg:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 1px;
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
.map-merge-remaining-chip-sep {
  opacity: 0.7;
  user-select: none;
}
.map-merge-remaining-chip-tail {
  cursor: pointer;
  font-weight: 600;
  opacity: 0.95;
}
.map-merge-remaining-chip--split:active .map-merge-remaining-chip-tail,
.map-merge-remaining-chip-tail:hover {
  filter: brightness(1.08);
}
html[data-theme="light"] .map-merge-remaining-chip-seg:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}
.map-merge-remaining-chip {
  flex: 0 1 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  padding: 0.22rem 0.55rem;
  border: 1px solid color-mix(in srgb, var(--warning, #f0b429) 45%, var(--border, #2a3140));
  border-radius: 999px;
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 88%, var(--warning, #f0b429) 12%);
  color: var(--text, #e8eaef);
  font: inherit;
  font-size: 0.78rem;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: 0.01em;
  white-space: nowrap;
  max-width: min(100%, 22rem);
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
}
.map-merge-remaining-chip:hover:not(:disabled) {
  filter: brightness(1.08);
}
.map-merge-remaining-chip:disabled,
.map-merge-remaining-chip[data-remaining="0"] {
  cursor: default;
  border-color: color-mix(in srgb, var(--success, #3ecf8e) 42%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 88%, var(--success, #3ecf8e) 12%);
  opacity: 0.95;
}
.map-merge-remaining-chip:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
html[data-density="compact"] .map-merge-remaining-chip {
  padding: 0.14rem 0.42rem;
  font-size: 0.72rem;
}
html[data-theme="light"] .map-merge-remaining-chip {
  background: color-mix(in srgb, var(--bg-elevated, #fff) 90%, var(--warning, #c98a00) 10%);
  border-color: color-mix(in srgb, var(--warning, #c98a00) 38%, var(--border, #cfd3dc));
  color: var(--text, #1a1d24);
}
html[data-theme="light"] .map-merge-remaining-chip:disabled,
html[data-theme="light"] .map-merge-remaining-chip[data-remaining="0"] {
  background: color-mix(in srgb, var(--bg-elevated, #fff) 90%, var(--success, #1f9d63) 10%);
  border-color: color-mix(in srgb, var(--success, #1f9d63) 36%, var(--border, #cfd3dc));
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .map-merge-remaining-chip {
    background: color-mix(in srgb, var(--bg-elevated, #fff) 90%, var(--warning, #c98a00) 10%);
    border-color: color-mix(in srgb, var(--warning, #c98a00) 38%, var(--border, #cfd3dc));
    color: var(--text, #1a1d24);
  }
  html[data-theme="system"] .map-merge-remaining-chip:disabled,
  html[data-theme="system"] .map-merge-remaining-chip[data-remaining="0"] {
    background: color-mix(in srgb, var(--bg-elevated, #fff) 90%, var(--success, #1f9d63) 10%);
    border-color: color-mix(in srgb, var(--success, #1f9d63) 36%, var(--border, #cfd3dc));
  }
}
html[data-theme="light"] .map-merge-remaining-chip:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}

/* Taxon push 160 — sticky Unresolved only filter toggle (pairs with remaining chip) */
.map-merge-unresolved-filter {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  padding: 0.18rem 0.55rem;
  border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 38%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 88%, var(--accent, #6ea8fe) 12%);
  color: var(--text, #e8ecf4);
  font: 600 0.72rem/1.2 ui-sans-serif, system-ui, sans-serif;
  letter-spacing: 0.01em;
  cursor: pointer;
  white-space: nowrap;
}
.map-merge-unresolved-filter:hover {
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 55%, var(--border, #2a3140));
}
.map-merge-unresolved-filter[aria-pressed="true"],
.map-merge-unresolved-filter[data-filter-on="1"] {
  background: color-mix(in srgb, var(--accent, #6ea8fe) 28%, var(--bg-elevated, #161b24));
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 62%, var(--border, #2a3140));
}
.map-merge-unresolved-filter:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
html[data-density="compact"] .map-merge-unresolved-filter {
  padding: 0.12rem 0.42rem;
  font-size: 0.68rem;
}
html[data-theme="light"] .map-merge-unresolved-filter {
  background: color-mix(in srgb, var(--bg-elevated, #fff) 90%, var(--accent, #3d6ef5) 10%);
  border-color: color-mix(in srgb, var(--accent, #3d6ef5) 32%, var(--border, #cfd3dc));
  color: var(--text, #1a1f2a);
}
html[data-theme="light"] .map-merge-unresolved-filter[aria-pressed="true"],
html[data-theme="light"] .map-merge-unresolved-filter[data-filter-on="1"] {
  background: color-mix(in srgb, var(--accent, #3d6ef5) 18%, var(--bg-elevated, #fff));
  border-color: color-mix(in srgb, var(--accent, #3d6ef5) 48%, var(--border, #cfd3dc));
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .map-merge-unresolved-filter {
    background: color-mix(in srgb, var(--bg-elevated, #fff) 90%, var(--accent, #3d6ef5) 10%);
    border-color: color-mix(in srgb, var(--accent, #3d6ef5) 32%, var(--border, #cfd3dc));
    color: var(--text, #1a1f2a);
  }
  html[data-theme="system"] .map-merge-unresolved-filter[aria-pressed="true"],
  html[data-theme="system"] .map-merge-unresolved-filter[data-filter-on="1"] {
    background: color-mix(in srgb, var(--accent, #3d6ef5) 18%, var(--bg-elevated, #fff));
    border-color: color-mix(in srgb, var(--accent, #3d6ef5) 48%, var(--border, #cfd3dc));
  }
}
html[data-theme="light"] .map-merge-unresolved-filter:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}

/* Taxon push 200 — sticky All kinds (clears kind filter; hidden/disabled when inactive) */
.map-merge-kind-filter-clear {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  padding: 0.18rem 0.55rem;
  border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--accent, #6ea8fe) 38%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 88%, var(--accent, #6ea8fe) 12%);
  color: var(--text, #e8ecf4);
  font: 600 0.72rem/1.2 ui-sans-serif, system-ui, sans-serif;
  letter-spacing: 0.01em;
  cursor: pointer;
  white-space: nowrap;
}
.map-merge-kind-filter-clear:hover:not(:disabled):not([hidden]) {
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 55%, var(--border, #2a3140));
}
.map-merge-kind-filter-clear:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
.map-merge-kind-filter-clear[hidden] {
  display: none !important;
}
.map-merge-kind-filter-clear:disabled {
  opacity: 0.55;
  cursor: default;
}
html[data-density="compact"] .map-merge-kind-filter-clear {
  padding: 0.12rem 0.42rem;
  font-size: 0.68rem;
}
html[data-theme="light"] .map-merge-kind-filter-clear {
  background: color-mix(in srgb, var(--bg-elevated, #fff) 90%, var(--accent, #3d6ef5) 10%);
  border-color: color-mix(in srgb, var(--accent, #3d6ef5) 32%, var(--border, #cfd3dc));
  color: var(--text, #1a1f2a);
}
html[data-theme="light"] .map-merge-kind-filter-clear:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .map-merge-kind-filter-clear {
    background: color-mix(in srgb, var(--bg-elevated, #fff) 90%, var(--accent, #3d6ef5) 10%);
    border-color: color-mix(in srgb, var(--accent, #3d6ef5) 32%, var(--border, #cfd3dc));
    color: var(--text, #1a1f2a);
  }
}
.map-merge-filter-empty {
  margin: 0 0 0.4rem;
}

/* Taxon push 170 — sticky merge-pick Find raw search (compact; always visible on sticky)
   Taxon push 172 — × Clear on non-empty query (wrap owns flex). */
.map-merge-pick-search {
  flex: 1 1 8rem;
  min-width: 6.5rem;
  max-width: 14rem;
  margin: 0;
  padding: 0.2rem 0.5rem;
  border: 1px solid color-mix(in srgb, var(--border, #2a3140) 80%, var(--accent, #6ea8fe) 20%);
  border-radius: 6px;
  background: color-mix(in srgb, var(--bg, #0f131a) 92%, var(--bg-elevated, #161b24) 8%);
  color: var(--text, #e8eaef);
  font: inherit;
  font-size: 0.78rem;
  line-height: 1.25;
}
.map-merge-pick-search::placeholder {
  color: color-mix(in srgb, var(--text, #e8eaef) 45%, transparent);
}
.map-merge-pick-search:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
html[data-density="compact"] .map-merge-pick-search {
  padding: 0.12rem 0.4rem;
  font-size: 0.72rem;
  max-width: 11rem;
}
html[data-theme="light"] .map-merge-pick-search {
  background: color-mix(in srgb, var(--bg-elevated, #fff) 96%, var(--accent, #3d6ef5) 4%);
  border-color: color-mix(in srgb, var(--border, #cfd3dc) 75%, var(--accent, #3d6ef5) 25%);
  color: var(--text, #1a1d24);
}
html[data-theme="light"] .map-merge-pick-search::placeholder {
  color: color-mix(in srgb, var(--text, #1a1d24) 45%, transparent);
}
html[data-theme="light"] .map-merge-pick-search:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .map-merge-pick-search {
    background: color-mix(in srgb, var(--bg-elevated, #fff) 96%, var(--accent, #3d6ef5) 4%);
    border-color: color-mix(in srgb, var(--border, #cfd3dc) 75%, var(--accent, #3d6ef5) 25%);
    color: var(--text, #1a1d24);
  }
  html[data-theme="system"] .map-merge-pick-search::placeholder {
    color: color-mix(in srgb, var(--text, #1a1d24) 45%, transparent);
  }
}

/* Taxon push 172 — sticky Find × Clear (visible when query non-empty) */
.map-merge-pick-search-wrap {
  position: relative;
  display: inline-flex;
  align-items: center;
  flex: 1 1 8rem;
  min-width: 6.5rem;
  max-width: 14rem;
}
.map-merge-pick-search-wrap .map-merge-pick-search {
  flex: 1 1 auto;
  width: 100%;
  max-width: none;
  padding-right: 1.6rem;
}
.map-merge-pick-search::-webkit-search-cancel-button {
  -webkit-appearance: none;
  appearance: none;
  display: none;
}
.map-merge-pick-search-clear {
  position: absolute;
  right: 0.15rem;
  top: 50%;
  transform: translateY(-50%);
  width: 1.35rem;
  height: 1.35rem;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 4px;
  background: transparent;
  color: color-mix(in srgb, var(--text, #e8eaef) 70%, transparent);
  font: inherit;
  font-size: 0.95rem;
  line-height: 1;
  cursor: pointer;
}
.map-merge-pick-search-clear:hover {
  color: var(--text, #e8eaef);
  background: color-mix(in srgb, var(--accent, #6ea8fe) 18%, transparent);
}
.map-merge-pick-search-clear:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 1px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
.map-merge-pick-search-clear.hidden {
  display: none !important;
}
html[data-density="compact"] .map-merge-pick-search-wrap {
  max-width: 11rem;
  min-width: 5.5rem;
}
html[data-density="compact"] .map-merge-pick-search-clear {
  width: 1.15rem;
  height: 1.15rem;
  font-size: 0.85rem;
}
html[data-theme="light"] .map-merge-pick-search-clear {
  color: color-mix(in srgb, var(--text, #1a1d24) 65%, transparent);
}
html[data-theme="light"] .map-merge-pick-search-clear:hover {
  color: var(--text, #1a1d24);
  background: color-mix(in srgb, var(--accent, #3d6ef5) 16%, transparent);
}
html[data-theme="light"] .map-merge-pick-search-clear:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .map-merge-pick-search-clear {
    color: color-mix(in srgb, var(--text, #1a1d24) 65%, transparent);
  }
}

.map-merge-manual-heading {
  display: block;
  margin: 0 0 0.35rem;
  font-size: 0.82rem;
}


/* Taxon push 181 — sticky More (…) overflow for Copy / Download unresolved (all widths in menu) */
.map-merge-more-wrap {
  position: relative;
  display: inline-flex;
  align-items: center;
  flex: 0 0 auto;
}
.map-merge-more,
#btn-map-merge-more {
  flex: 0 0 auto;
  min-width: 2rem;
  font-weight: 700;
  letter-spacing: 0.04em;
}
.map-merge-more:focus-visible,
#btn-map-merge-more:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
html[data-theme="light"] .map-merge-more:focus-visible,
html[data-theme="light"] #btn-map-merge-more:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}
html[data-density="compact"] .map-merge-more,
html[data-density="compact"] #btn-map-merge-more {
  font-size: 0.78rem;
  padding: 0.18rem 0.45rem;
  min-width: 1.75rem;
}
.map-merge-more-menu,
#map-merge-more-menu {
  position: absolute;
  right: 0;
  bottom: calc(100% + 4px);
  z-index: 30;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  min-width: 11.5rem;
  padding: 0.4rem;
  background: var(--bg-elevated, #161b24);
  border: 1px solid var(--border, #2a3140);
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(0,0,0,.35);
}
.map-merge-more-menu.hidden,
#map-merge-more-menu.hidden,
.map-merge-more-menu[hidden],
#map-merge-more-menu[hidden] {
  display: none !important;
}
.map-merge-more-menu .btn,
#map-merge-more-menu .btn {
  width: 100%;
  justify-content: flex-start;
  text-align: left;
  white-space: nowrap;
}
.help-kbd-card .help-kbd-table tr[data-help="mergemore"] td:first-child {
  white-space: nowrap;
}

/* Taxon push 174 — sticky Copy unresolved (full unresolved set → clipboard; Push 181 lives in More menu) */
.map-merge-copy-unresolved,
#btn-map-merge-copy-unresolved {
  flex: 0 0 auto;
  white-space: nowrap;
}
.map-merge-copy-unresolved:disabled,
#btn-map-merge-copy-unresolved:disabled,
.map-merge-copy-unresolved[aria-disabled="true"],
#btn-map-merge-copy-unresolved[aria-disabled="true"] {
  opacity: 0.45;
  cursor: not-allowed;
}
.map-merge-copy-unresolved:focus-visible,
#btn-map-merge-copy-unresolved:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
html[data-density="compact"] .map-merge-copy-unresolved,
html[data-density="compact"] #btn-map-merge-copy-unresolved {
  font-size: 0.78rem;
  padding: 0.18rem 0.45rem;
}
html[data-theme="light"] .map-merge-copy-unresolved:focus-visible,
html[data-theme="light"] #btn-map-merge-copy-unresolved:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}
.help-kbd-card .help-kbd-table tr[data-help="mergecopyunresolved"] td:first-child {
  white-space: nowrap;
}

/* Taxon push 179 — sticky Download unresolved (full unresolved set → .txt) */
.map-merge-download-unresolved,
#btn-map-merge-download-unresolved {
  flex: 0 0 auto;
  white-space: nowrap;
}
.map-merge-download-unresolved:disabled,
#btn-map-merge-download-unresolved:disabled,
.map-merge-download-unresolved[aria-disabled="true"],
#btn-map-merge-download-unresolved[aria-disabled="true"] {
  opacity: 0.45;
  cursor: not-allowed;
}
.map-merge-download-unresolved:focus-visible,
#btn-map-merge-download-unresolved:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
html[data-density="compact"] .map-merge-download-unresolved,
html[data-density="compact"] #btn-map-merge-download-unresolved {
  font-size: 0.78rem;
  padding: 0.18rem 0.45rem;
}
html[data-theme="light"] .map-merge-download-unresolved:focus-visible,
html[data-theme="light"] #btn-map-merge-download-unresolved:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}
.help-kbd-card .help-kbd-table tr[data-help="mergedownloadunresolved"] td:first-child {
  white-space: nowrap;
}

/* Taxon push 188 — sticky Copy/Download unresolved properties (kind-aware; More menu) */
.map-merge-copy-unresolved-properties,
#btn-map-merge-copy-unresolved-properties,
.map-merge-download-unresolved-properties,
#btn-map-merge-download-unresolved-properties {
  flex: 0 0 auto;
  white-space: nowrap;
}
.map-merge-copy-unresolved-properties:disabled,
#btn-map-merge-copy-unresolved-properties:disabled,
.map-merge-copy-unresolved-properties[aria-disabled="true"],
#btn-map-merge-copy-unresolved-properties[aria-disabled="true"],
.map-merge-download-unresolved-properties:disabled,
#btn-map-merge-download-unresolved-properties:disabled,
.map-merge-download-unresolved-properties[aria-disabled="true"],
#btn-map-merge-download-unresolved-properties[aria-disabled="true"] {
  opacity: 0.45;
  cursor: not-allowed;
}
.map-merge-copy-unresolved-properties:focus-visible,
#btn-map-merge-copy-unresolved-properties:focus-visible,
.map-merge-download-unresolved-properties:focus-visible,
#btn-map-merge-download-unresolved-properties:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}
html[data-density="compact"] .map-merge-copy-unresolved-properties,
html[data-density="compact"] #btn-map-merge-copy-unresolved-properties,
html[data-density="compact"] .map-merge-download-unresolved-properties,
html[data-density="compact"] #btn-map-merge-download-unresolved-properties {
  font-size: 0.78rem;
  padding: 0.18rem 0.45rem;
}
html[data-theme="light"] .map-merge-copy-unresolved-properties:focus-visible,
html[data-theme="light"] #btn-map-merge-copy-unresolved-properties:focus-visible,
html[data-theme="light"] .map-merge-download-unresolved-properties:focus-visible,
html[data-theme="light"] #btn-map-merge-download-unresolved-properties:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}
.help-kbd-card .help-kbd-table tr[data-help="mergecopyunresolvedproperties"] td:first-child,
.help-kbd-card .help-kbd-table tr[data-help="mergedownloadunresolvedproperties"] td:first-child {
  white-space: nowrap;
}

/* Push 122 — focus-visible rings on sticky merge-pick controls (Push 103 spirit) */
.map-merge-pick-sticky #btn-map-merge-bulk-a:focus-visible,
.map-merge-pick-sticky #btn-map-merge-bulk-b:focus-visible,
.map-merge-pick-sticky #btn-map-merge-more:focus-visible,
.map-merge-pick-sticky #btn-map-merge-copy-unresolved:focus-visible,
.map-merge-pick-sticky #btn-map-merge-download-unresolved:focus-visible,
.map-merge-pick-sticky #btn-map-merge-copy-unresolved-properties:focus-visible,
.map-merge-pick-sticky #btn-map-merge-download-unresolved-properties:focus-visible,
.map-merge-pick-sticky #btn-map-merge-apply-sticky:focus-visible,
.map-merge-pick-sticky #map-merge-remaining-chip:focus-visible,
.map-merge-pick-sticky #map-merge-unresolved-filter:focus-visible,
.map-merge-pick-sticky #map-merge-kind-filter-clear:focus-visible,
.map-merge-pick-sticky #map-merge-pick-search:focus-visible,
.map-merge-pick-sticky #map-merge-pick-search-clear:focus-visible,
#btn-map-merge-apply:focus-visible {
  outline: 2px solid var(--accent, #6ea8fe);
  outline-offset: 2px;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #6ea8fe) 35%, transparent);
}

html[data-density="compact"] .map-merge-pick-sticky {
  padding: 0.28rem 0.4rem 0.32rem;
  gap: 0.2rem;
  margin-bottom: 0.3rem;
}
html[data-density="compact"] .map-merge-pick-sticky-actions {
  gap: 0.22rem;
}
html[data-density="compact"] .map-merge-conflicts.map-merge-conflicts-manual {
  max-height: min(48vh, 32rem);
}

html[data-theme="light"] .map-merge-pick-sticky {
  background: color-mix(in srgb, var(--bg-elevated, #fff) 94%, var(--accent, #3d6ef5) 6%);
  border-color: color-mix(in srgb, var(--accent, #3d6ef5) 24%, var(--border, #cfd3dc));
  box-shadow: 0 1px 0 color-mix(in srgb, var(--border, #cfd3dc) 80%, transparent);
}
@media (prefers-color-scheme: light) {
  html[data-theme="system"] .map-merge-pick-sticky {
    background: color-mix(in srgb, var(--bg-elevated, #fff) 94%, var(--accent, #3d6ef5) 6%);
    border-color: color-mix(in srgb, var(--accent, #3d6ef5) 24%, var(--border, #cfd3dc));
    box-shadow: 0 1px 0 color-mix(in srgb, var(--border, #cfd3dc) 80%, transparent);
  }
}

html[data-focus="on"] .map-merge-pick-sticky {
  border-color: color-mix(in srgb, var(--accent, #6ea8fe) 42%, var(--border, #2a3140));
  background: color-mix(in srgb, var(--bg-elevated, #161b24) 86%, var(--accent, #6ea8fe) 14%);
}

html[data-theme="light"] .map-merge-pick-sticky #btn-map-merge-bulk-a:focus-visible,
html[data-theme="light"] .map-merge-pick-sticky #btn-map-merge-bulk-b:focus-visible,
html[data-theme="light"] .map-merge-pick-sticky #btn-map-merge-more:focus-visible,
html[data-theme="light"] .map-merge-pick-sticky #btn-map-merge-copy-unresolved:focus-visible,
html[data-theme="light"] .map-merge-pick-sticky #btn-map-merge-download-unresolved:focus-visible,
html[data-theme="light"] .map-merge-pick-sticky #btn-map-merge-apply-sticky:focus-visible,
html[data-theme="light"] .map-merge-pick-sticky #map-merge-remaining-chip:focus-visible,
html[data-theme="light"] .map-merge-pick-sticky #map-merge-unresolved-filter:focus-visible,
html[data-theme="light"] .map-merge-pick-sticky #map-merge-kind-filter-clear:focus-visible,
.map-merge-pick-sticky #map-merge-kind-filter-clear:focus-visible,
html[data-theme="light"] .map-merge-pick-sticky #map-merge-pick-search:focus-visible,
html[data-theme="light"] .map-merge-pick-sticky #map-merge-pick-search-clear:focus-visible,
html[data-theme="light"] #btn-map-merge-apply:focus-visible {
  outline-color: var(--accent, #3d6ef5);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #3d6ef5) 28%, transparent);
}

html[data-density="compact"] .map-merge-pick-sticky #btn-map-merge-bulk-a:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #btn-map-merge-bulk-b:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #btn-map-merge-more:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #btn-map-merge-copy-unresolved:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #btn-map-merge-download-unresolved:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #btn-map-merge-copy-unresolved-properties:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #btn-map-merge-download-unresolved-properties:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #btn-map-merge-apply-sticky:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #map-merge-remaining-chip:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #map-merge-unresolved-filter:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #map-merge-kind-filter-clear:focus-visible,
.map-merge-pick-sticky #map-merge-kind-filter-clear:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #map-merge-pick-search:focus-visible,
html[data-density="compact"] .map-merge-pick-sticky #map-merge-pick-search-clear:focus-visible,
html[data-density="compact"] #btn-map-merge-apply:focus-visible {
  outline-width: 2px;
  outline-offset: 1px;
}

@media print {
  .map-merge-pick-sticky,
  #map-merge-pick-sticky,
  .map-merge-pick-sticky-actions,
  #btn-map-merge-apply-sticky,
  .map-merge-remaining-chip,
  #map-merge-remaining-chip,
  .map-merge-unresolved-filter,
  #map-merge-unresolved-filter,
  .map-merge-kind-filter-clear,
  #map-merge-kind-filter-clear,
  .map-merge-pick-search,
  #map-merge-pick-search,
  .map-merge-pick-search-wrap,
  #map-merge-pick-search-wrap,
  .map-merge-pick-search-clear,
  #map-merge-pick-search-clear,
  .map-merge-copy-unresolved,
  #btn-map-merge-copy-unresolved,
  .map-merge-download-unresolved,
  #btn-map-merge-download-unresolved,
  .map-merge-copy-unresolved-properties,
  #btn-map-merge-copy-unresolved-properties,
  .map-merge-download-unresolved-properties,
  #btn-map-merge-download-unresolved-properties,
  .map-merge-more-wrap,
  #map-merge-more-wrap,
  .map-merge-more,
  #btn-map-merge-more,
  .map-merge-more-menu,
  #map-merge-more-menu {
    display: none !important;
  }
  .map-merge-conflicts.map-merge-conflicts-manual {
    max-height: none !important;
    overflow: visible !important;
  }
}

/* Taxon push 153 — printable help catch-up for merge-pick keys (a/b · j/k · Home/End · Enter · c copy).
   Taxon push 160 — print catch-up for Unresolved only filter (+ f).
   Taxon push 162 — print catch-up for x clear pick.
   Taxon push 164 — print / tour / help honesty catch-up for f + x (Push 160/162 keys).
   Taxon push 166 — print catch-up for n/N next/prev unresolved.
   Taxon push 170 — print catch-up for / Find raw merge-pick search.
   Taxon push 172 — print catch-up for sticky × Clear + Alt+/ clear Find.
   Taxon push 174 — print catch-up for Copy unresolved (full set; button + palette).
   Taxon push 179 — print catch-up for Download unresolved (.txt full set; button + palette).
   Taxon push 181 — print catch-up for More … (holds Copy/Download).
   Taxon push 188 — print catch-up for Copy/Download unresolved properties (kind-aware).
   Taxon push 200 — print catch-up for sticky All kinds (clear kind filter + Shift+f).
   Override Push 39/72 blanket #help-modal hide when the cheat sheet is open so paper matches on-screen help.
   Ritual print header footnote mirrors help.fine Manual pick line (no second help system). */
@media print {
  /* Open help card prints as cheat sheet (not display:none) */
  #help-modal:not(.hidden) {
    display: block !important;
    position: static !important;
    inset: auto !important;
    width: auto !important;
    height: auto !important;
    margin: 0 0 0.75rem !important;
    padding: 0 !important;
    background: transparent !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    z-index: auto !important;
    overflow: visible !important;
  }
  #help-modal:not(.hidden) .help-modal,
  #help-modal:not(.hidden) .help-kbd-card {
    display: block !important;
    position: static !important;
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
    box-shadow: none !important;
    border: 1px solid #222 !important;
    background: #fff !important;
    color: #111 !important;
    break-inside: avoid;
    page-break-inside: avoid;
  }
  #help-modal:not(.hidden) .modal-close,
  #help-modal:not(.hidden) #btn-help-close {
    display: none !important;
  }
  /* Merge-pick keyboard rows must appear on paper (a/b · j/k · Home/End · Enter · c copy) */
  #help-modal:not(.hidden) tr[data-help="mergeuseab"],
  #help-modal:not(.hidden) tr[data-help="mergenav"],
  #help-modal:not(.hidden) tr[data-help="mergehomeend"],
  #help-modal:not(.hidden) tr[data-help="mergeenter"],
  #help-modal:not(.hidden) tr[data-help="mergecopy"],
  #help-modal:not(.hidden) tr[data-help="mergeclear"],
  #help-modal:not(.hidden) tr[data-help="mergenextunresolved"],
  #help-modal:not(.hidden) tr[data-help="mergefilter"],
  #help-modal:not(.hidden) tr[data-help="mergesearch"],
  #help-modal:not(.hidden) tr[data-help="mergesearchclear"],
  #help-modal:not(.hidden) tr[data-help="mergemore"],
  #help-modal:not(.hidden) tr[data-help="mergecopyunresolved"],
  #help-modal:not(.hidden) tr[data-help="mergedownloadunresolved"],
  #help-modal:not(.hidden) tr[data-help="mergepick"],
  #help-modal:not(.hidden) tr[data-help="mergebulk"],
  #help-modal:not(.hidden) tr[data-help="mergeapply"] {
    display: table-row !important;
  }
  #help-modal:not(.hidden) #help-modal-fine {
    display: block !important;
    color: #333 !important;
  }
  /* Ritual sheet — same Manual pick line as help.fine */
  .taxon-print-header-inner::after {
    content: "Manual pick: a/b · j/k · Home/End · Enter when all picked · c copy raw · x clear pick · n/N next/prev unresolved · f Unresolved only · / Find raw · Alt+/ Clear find · More … (Copy unresolved events full set · Download unresolved events .txt · Copy unresolved properties full set · Download unresolved properties .txt)";
    display: block !important;
    flex-basis: 100%;
    width: 100%;
    margin-top: 0.35rem;
    font: 500 8.5pt/1.35 ui-sans-serif, system-ui, sans-serif;
    color: #333;
  }
}
