/* ==========================================================================
Bestie — components

The ten rules and every token live in tokens.css; this file only applies them.
Shared component rules own appearance. Responsive rules change layout or size;
page-specific selectors must not redefine the same control’s visual treatment.
========================================================================== */

/* --- 1  tokens ---------------------------------------------------------- */

/* --- reset and base type ---------------------------------------------- */

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

/*
* The hidden attribute has to win. A class that sets `display` beats the UA rule for
* [hidden], so every section the app hides by attribute — the session editor, the
* comparison pane, the hunt tab strip — stayed on screen and bled into pages it did
* not belong to. One rule, and the leak class is closed for good.
*/
[hidden] {
    display: none !important;
}

html {
    -webkit-text-size-adjust: 100%;
}

body {
    margin: 0;
    background: var(--paper);
    color: var(--ink-900);
    font-family: var(--font);
    font-size: var(--t-200);
    line-height: var(--leading-body);
    -webkit-font-smoothing: antialiased;
}

h1,
h2,
h3,
h4,
p,
figure,
dl,
dd {
    margin: 0;
}

ul,
ol {
    margin: 0;
    padding: 0;
    list-style: none;
}

a {
    color: var(--accent);
    text-underline-offset: calc(var(--u1) / 2);
}

button {
    font: inherit;
    color: inherit;
}

table {
    border-collapse: collapse;
    width: 100%;
}

:focus-visible {
    outline: calc(var(--u1) / 2) solid var(--accent);
    outline-offset: calc(var(--u1) / 2);
}

h1 {
    font-size: var(--t-600);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-display);
    line-height: var(--leading-tight);
}

/* Route changes focus this non-interactive heading for assistive technology.
   Safari otherwise paints it like a focused control. */
h1[tabindex="-1"]:focus {
    outline: none;
}

h2,
.subsection-title {
    font-size: var(--t-400);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-heading);
}

h3 {
    font-size: var(--t-300);
    font-weight: var(--weight-bold);
}

/* Field labels are sentence case; only navigation eyebrows use capitals. */
.page-eyebrow,
.input-label,
.detail-label,
.review-line dt,
.summary-label {
    display: block;
    font-size: var(--t-100);
    font-weight: var(--weight-medium);
    color: var(--ink-500);
}

.description,
.section-copy,
.helper-text,
.unit-instruction,
.detail-note,
.results-intro,
.disclaimer-copy {
    max-width: 66ch;
    font-size: var(--t-200);
    line-height: var(--leading-body);
    color: var(--ink-700);
}

.helper-text {
    font-size: var(--t-100);
    color: var(--ink-500);
}

.cell-muted,
.row-aside,
.count-suffix,
.landing-next-size,
.worklist-note,
.change-when,
.change-scope,
.quick-tracker,
.quick-value,
.quick-current,
.hunt-tab-meta,
.pill {
    color: var(--ink-500);
    font-size: var(--t-100);
}

.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;
}

/* --- 3  layout -------------------------------------------------------- */

.app-shell {
    min-height: 100vh;
    display: flex;
    align-items: stretch;
}

.workspace-main {
    min-width: 0;
    flex: 1 1 auto;
}

/* --- 3b  sidebar -------------------------------------------------------- */

.app-sidebar {
    position: sticky;
    top: 0;
    display: flex;
    flex-direction: column;
    flex: 0 0 var(--sidebar-width);
    width: var(--sidebar-width);
    height: 100vh;
    overflow-y: auto;
    padding: var(--u4) var(--u3) var(--u3);
    border-right: 1px solid var(--ink-100);
    background: var(--surface);
    color: var(--ink-900);
    transition: flex-basis var(--duration) var(--ease), width var(--duration) var(--ease);
}

@supports (height: 100dvh) {
    .app-shell { min-height: 100dvh; }
    .app-sidebar { height: 100dvh; }
}

.sidebar-character {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--u1);
    margin-bottom: var(--u4);
}

.sidebar-character-switch {
    display: flex;
    align-items: center;
    gap: var(--u2);
    min-width: 0;
    flex: 1 1 auto;
    min-height: var(--u8);
    padding: 0 var(--u2);
    border: 0;
    border-radius: var(--radius-control);
    background: none;
    color: var(--ink-900);
    font-size: var(--t-200);
    font-weight: var(--weight-bold);
    cursor: pointer;
}

.sidebar-character-switch:hover {
    background: rgb(var(--shadow-rgb) / 0.06);
}

.sidebar-character-name {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

.sidebar-character-input {
    flex: 1 1 auto;
    min-width: 0;
    min-height: var(--u6);
    padding: 0 var(--u2);
    border: 1px solid var(--ink-300);
    border-radius: var(--radius-control);
    background: var(--surface);
    color: var(--ink-900);
    font-size: var(--t-200);
    font-weight: var(--weight-bold);
}

.sidebar-character-chevron {
    flex: 0 0 auto;
    margin-left: auto;
    color: var(--ink-500);
}

.sidebar-character-actions {
    display: flex;
    align-items: center;
    gap: 0;
    flex: 0 0 auto;
}

.sidebar-icon-btn[disabled] {
    color: var(--ink-300);
    cursor: not-allowed;
}

.sidebar-character-menu {
    position: absolute;
    top: calc(100% + var(--u1));
    left: 0;
    right: 0;
    z-index: 5;
    display: grid;
    gap: var(--u1);
    padding: var(--u2);
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-surface);
    background: var(--surface);
    box-shadow: var(--elevation-2);
}

.sidebar-character-option {
    display: flex;
    align-items: center;
    gap: var(--u2);
    min-height: var(--u8);
    padding: 0 var(--u2);
    border: 0;
    border-radius: var(--radius-control);
    background: none;
    color: var(--ink-900);
    font-size: var(--t-200);
    text-align: left;
    cursor: pointer;
}

.sidebar-character-option:hover {
    background: rgb(var(--shadow-rgb) / 0.06);
}

.sidebar-character-option.is-active {
    background: var(--accent-tint);
    color: var(--accent);
    font-weight: var(--weight-bold);
}

.sidebar-character-option.sidebar-character-add {
    border-top: 1px solid var(--ink-100);
    border-radius: 0;
    margin-top: var(--u1);
    padding-top: var(--u3);
    color: var(--ink-500);
}

.sidebar-nav {
    display: grid;
    gap: var(--u1);
}

.sidebar-link {
    display: flex;
    align-items: center;
    gap: var(--u3);
    width: 100%;
    min-height: var(--u8);
    padding: 0 var(--u3);
    border: 0;
    border-radius: var(--radius-control);
    background: none;
    color: var(--ink-700);
    font-size: var(--t-200);
    font-weight: var(--weight-medium);
    text-align: left;
    cursor: pointer;
    white-space: nowrap;
}

.sidebar-link .material-symbols-outlined {
    flex: 0 0 auto;
    font-size: var(--t-300);
    color: var(--ink-500);
}

.sidebar-link:hover {
    background: rgb(var(--shadow-rgb) / 0.06);
    color: var(--ink-900);
}

.sidebar-link:hover .material-symbols-outlined {
    color: var(--ink-900);
}

.sidebar-link.is-active {
    background: var(--accent-tint);
    color: var(--accent);
    font-weight: var(--weight-bold);
}

.sidebar-link.is-active .material-symbols-outlined {
    color: var(--accent);
}

.sidebar-link-danger {
    color: var(--caution);
}

.sidebar-link-danger .material-symbols-outlined {
    color: var(--caution);
}

.sidebar-link-danger:hover {
    background: var(--caution-tint);
    color: var(--caution);
}

.sidebar-link-danger:hover .material-symbols-outlined {
    color: var(--caution);
}

.sidebar-section {
    margin-top: var(--u6);
    padding-top: var(--u4);
    border-top: 1px solid var(--ink-100);
}

.sidebar-section-data {
    margin-top: auto;
}

.sidebar-section-title {
    margin: 0 var(--u3) var(--u2);
    color: var(--ink-500);
    font-size: var(--t-100);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
}

.sidebar-collapse {
    align-self: flex-start;
    margin-top: var(--u4);
}

.mobile-bar,
.sidebar-menu-toggle,
.sidebar-scrim {
    display: none;
}

.sidebar-close.icon-button {
    display: none;
}

body.has-sidebar-open {
    overflow: hidden;
}

/* Collapsed: an icon rail. Labels, section titles and the character name hide;
the switcher keeps only the actions a rail still has room for. */
.app-shell.sidebar-collapsed .app-sidebar {
    flex-basis: var(--sidebar-width-collapsed);
    width: var(--sidebar-width-collapsed);
    padding-inline: var(--u2);
}

.app-shell.sidebar-collapsed .sidebar-link-label,
.app-shell.sidebar-collapsed .sidebar-section-title,
.app-shell.sidebar-collapsed .sidebar-character-name,
.app-shell.sidebar-collapsed .sidebar-character-chevron,
.app-shell.sidebar-collapsed .sidebar-character-actions {
    display: none;
}

.app-shell.sidebar-collapsed .sidebar-link {
    justify-content: center;
    padding: 0;
}

.app-shell.sidebar-collapsed .sidebar-character-switch {
    justify-content: center;
    padding: 0;
}

.app-shell.sidebar-collapsed .sidebar-collapse {
    align-self: center;
}

.page-eyebrow {
    margin-bottom: var(--u2);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
}

/* --- 4  primitives ---------------------------------------------------- */

.btn,
.toolbar-button,
.row-action {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--u2);
    min-height: var(--control-height);
    padding: 0 var(--u4);
    border: 1px solid var(--ink-300);
    border-radius: var(--radius-control);
    background: var(--surface);
    color: var(--ink-900);
    font-size: var(--t-200);
    font-weight: var(--weight-medium);
    cursor: pointer;
}

.row-action {
    min-height: var(--compact-control-height);
    padding-inline: var(--u3);
    font-size: var(--t-100);
}

.btn:hover:not([disabled]) {
    border-color: var(--ink-500);
}

.btn[disabled] {
    color: var(--ink-500);
    box-shadow: none;
    cursor: not-allowed;
}

.btn-primary,
.btn-primary-context {
    border-color: var(--accent);
    background: var(--accent);
    color: var(--surface);
}

.btn-primary:hover:not([disabled]),
.btn-primary-context:hover:not([disabled]) {
    filter: brightness(0.9);
}

.btn-tertiary {
    border-color: transparent;
    background: none;
    box-shadow: none;
    color: var(--ink-700);
}

.btn.is-danger {
    color: var(--caution);
    border-color: var(--caution-line);
}

/* The one truly irreversible action in the app (clear everything), so it
gets the app's strongest available treatment — filled, not outlined. */
.btn.is-danger-solid {
    border-color: var(--caution);
    background: var(--caution);
    color: var(--surface);
}

.btn.is-danger-solid:hover:not([disabled]) {
    background: var(--ink-900);
    border-color: var(--ink-900);
}

#processLogButton {
    border-color: var(--accent);
    background: var(--accent);
    color: var(--surface);
    font-weight: var(--weight-bold);
    box-shadow: var(--elevation-1);
}

.icon-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--u8);
    height: var(--u8);
    border: 0;
    border-radius: var(--radius-control);
    background: none;
    color: var(--ink-500);
    cursor: pointer;
}

.icon-button:hover {
    background: rgb(var(--shadow-rgb) / 0.06);
    color: var(--ink-900);
}

:where(input[type="text"]),
:where(input[type="number"]),
:where(input[type="date"]),
select,
textarea,
.library-search,
.plan-time-input,
.task-total-input {
    min-height: var(--control-height);
    padding: 0 var(--u3);
    border: 1px solid var(--ink-300);
    border-radius: var(--radius-control);
    background: var(--surface);
    color: var(--ink-900);
    font: inherit;
    font-size: var(--t-200);
    line-height: var(--leading-snug);
    -webkit-appearance: none;
    appearance: none;
}

:where(input[type="text"]),
:where(input[type="number"]),
:where(input[type="date"]),
select,
.library-search,
.plan-time-input,
.task-total-input {
    height: var(--control-height);
}

select {
    padding-right: var(--u8);
    background-image:
        linear-gradient(45deg, transparent 50%, var(--ink-500) 50%),
        linear-gradient(135deg, var(--ink-500) 50%, transparent 50%);
    background-position:
        calc(100% - var(--u4)) 50%,
        calc(100% - var(--u3)) 50%;
    background-repeat: no-repeat;
    background-size: var(--u1) var(--u1);
}

input[type="number"] {
    -moz-appearance: textfield;
}

input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
    margin: 0;
    -webkit-appearance: none;
}

textarea {
    padding: var(--u3);
    line-height: var(--leading-body);
    resize: vertical;
}

input:focus,
select:focus,
textarea:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 var(--u1) var(--accent-tint);
}

.check,
.check-row label {
    display: inline-flex;
    align-items: center;
    gap: var(--u2);
    font-size: var(--t-200);
    color: var(--ink-700);
    cursor: pointer;
}

.check-row {
    display: flex;
    flex-wrap: wrap;
    gap: var(--u4);
}

input[type="checkbox"] {
    width: var(--u4);
    height: var(--u4);
    accent-color: var(--accent);
}

/* Tabs: a rule and a weight change. No pills, so "selected" reads once. */
.segmented {
    display: flex;
    flex-wrap: nowrap;
    gap: var(--u6);
    border-bottom: 1px solid var(--ink-100);
    overflow-x: auto;
    scrollbar-width: thin;
}

.segmented-button {
    position: relative;
    min-height: var(--control-height);
    padding: 0;
    border: 0;
    background: none;
    font-size: var(--t-200);
    color: var(--ink-700);
    cursor: pointer;
    white-space: nowrap;
}

.segmented-button:hover {
    color: var(--ink-900);
}

.segmented-button.is-selected {
    color: var(--accent);
    font-weight: var(--weight-bold);
}

.segmented-button.is-selected::after {
    content: "";
    position: absolute;
    inset: auto 0 -1px;
    height: calc(var(--u1) / 2);
    background: var(--accent);
}

.pill {
    display: inline-block;
    padding: var(--u1) var(--u2);
    border-radius: var(--radius-pill);
    background: rgb(var(--shadow-rgb) / 0.06);
    font-weight: var(--weight-medium);
}

.pill.is-brand {
    background: var(--accent-tint);
    color: var(--accent);
}

.toolbar-button.is-on {
    border-color: var(--ink-900);
    background: var(--ink-900);
    color: var(--surface);
}

/* --- 5  progress cards ------------------------------------------------ */

/* Summaries: one leading figure with a supporting caption and stat line. */

.answer-value {
    font-size: var(--t-500);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-heading);
    line-height: var(--leading-tight);
    font-variant-numeric: tabular-nums;
}

.answer-progress {
    display: block;
    flex-basis: 100%;
    width: 100%;
    max-width: 240px;
    height: var(--u1);
    margin-top: var(--u2);
    border-radius: var(--radius-pill);
    background: var(--ink-100);
    overflow: hidden;
}

.answer-progress > span {
    display: block;
    height: 100%;
    border-radius: inherit;
    background: var(--accent);
    transition: width var(--duration) var(--ease);
}

.stat-line {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--u2) var(--u4);
    margin: 0;
    padding: var(--u3) 0 0;
    font-size: var(--t-100);
    color: var(--ink-700);
    font-variant-numeric: tabular-nums;
}

/* A tracker summary reads as one sentence and a compact supporting line. */
.workspace-main.is-trackers #output.results-shell {
    display: block;
}

.workspace-main.is-trackers #output > .results-section {
    margin-top: var(--section-gap);
}

.toolbar {
    display: flex;
    align-items: flex-end;
    gap: var(--u4);
    flex-wrap: nowrap;
    padding: var(--u4) var(--u6);
    border: 1px solid var(--ink-100);
    border-radius: 0 0 var(--radius-surface) var(--radius-surface);
    background: var(--surface);
}

.toolbar > :first-child {
    flex: 1 1 calc(var(--u24) * 3);
}

.toolbar .library-search {
    width: 100%;
    min-width: calc(var(--u24) * 2);
}

.results-section > .segmented {
    gap: var(--u6);
    padding: var(--u1) var(--u6) 0;
    border: 1px solid var(--ink-100);
    border-bottom: 0;
    border-radius: var(--radius-surface) var(--radius-surface) 0 0;
    background: var(--surface);
}

.toolbar-spacer {
    margin-left: auto;
}

.progress-card:hover {
    border-color: var(--ink-300);
    box-shadow: var(--elevation-1);
}

.progress-card.is-selected {
    outline: calc(var(--u1) / 2) solid var(--accent);
    outline-offset: -1px;
    box-shadow: none;
}

.card-content,
.card-actions {
    display: grid;
    gap: var(--u2);
    min-width: 0;
}

.card-actions {
    margin-top: auto;
}

.card-head {
    display: flex;
    align-items: flex-start;
    gap: var(--u2);
}

.card-title {
    flex: 1;
    min-width: 0;
    font-size: var(--t-200);
    font-weight: var(--weight-bold);
    line-height: var(--leading-snug);
    letter-spacing: var(--tracking-title);
}

.card-title a {
    color: var(--ink-900);
    text-decoration: none;
}

.card-title a:hover {
    text-decoration: underline;
}

.card-meta {
    display: flex;
    flex-wrap: wrap;
    gap: var(--u1) var(--u2);
    font-size: var(--t-100);
    color: var(--ink-500);
}

.card-meta strong {
    color: var(--ink-700);
    font-weight: var(--weight-bold);
    font-variant-numeric: tabular-nums;
}

.card-body {
    font-size: var(--t-200);
    line-height: var(--leading-body);
    color: var(--ink-700);
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.card-control {
    margin-top: 0;
    min-width: 0;
}

.card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--u2);
    flex-wrap: wrap;
    min-height: var(--u6);
    font-size: var(--t-100);
    color: var(--ink-500);
    font-variant-numeric: tabular-nums;
}

.card-extras {
    display: flex;
    align-items: center;
    gap: var(--u2);
    margin-left: auto;
}

.card-status {
    min-width: 0;
}

.card-select {
    display: inline-flex;
}

/* The control the whole card exists for: full width, one row, thumb-sized. */
.stages {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: 1fr;
    border: 1px solid var(--ink-300);
    border-radius: var(--radius-control);
    overflow: hidden;
    background: var(--surface);
}

.stage {
    min-height: var(--compact-control-height);
    padding: 0 var(--u2);
    border: 0;
    border-left: 1px solid var(--ink-100);
    background: none;
    font-size: var(--t-200);
    font-variant-numeric: tabular-nums;
    color: var(--ink-700);
    cursor: pointer;
}

.stage:first-child {
    border-left: 0;
}

.stage:hover {
    background: var(--accent-tint);
    color: var(--ink-900);
}

.stage.is-on,
.tick-option.is-on,
.row-action.is-on,
.row-action[aria-pressed="true"] {
    background: var(--accent-tint);
    color: var(--accent);
    box-shadow: inset 0 -2px var(--accent);
    font-weight: var(--weight-bold);
}

.stages.is-compact .stage {
    min-height: var(--compact-control-height);
    font-size: var(--t-100);
}

.ticks {
    display: flex;
    width: fit-content;
    max-width: 100%;
    border: 1px solid var(--ink-300);
    border-radius: var(--radius-control);
    overflow: hidden;
    background: var(--surface);
}

.ticks.is-single {
    margin-left: auto;
}

.ticks.is-single .tick-option {
    border-left: 0;
}

.tick-option:first-child {
    border-left: 0;
}

.tick-option:hover {
    background: var(--accent-tint);
    color: var(--ink-900);
}

.ticks.is-locked .tick-option {
    background: var(--accent-tint);
    color: var(--accent);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--u2);
}

.ticks.is-locked .material-symbols-outlined {
    font-size: var(--u4);
}

.count {
    display: inline-flex;
    align-items: center;
    gap: var(--u2);
}

.count .tracker-count {
    width: calc(var(--u24) - var(--u2));
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.bookmark-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--u8);
    height: var(--u8);
    border: 0;
    border-radius: var(--radius-control);
    background: none;
    color: var(--ink-500);
    cursor: pointer;
}

.bookmark-toggle:hover {
    background: rgb(var(--shadow-rgb) / 0.06);
}

.bookmark-toggle.is-on {
    color: var(--accent);
}

.chip-toggle {
    min-height: var(--u6);
    padding: 0 var(--u2);
    border: 1px solid var(--ink-300);
    border-radius: var(--radius-pill);
    background: var(--surface);
    font-size: var(--t-100);
    font-variant-numeric: tabular-nums;
    color: var(--ink-700);
    cursor: pointer;
    white-space: nowrap;
}

.chip-toggle:hover {
    border-color: var(--ink-500);
}

.chip-toggle.is-on {
    background: var(--accent);
    border-color: var(--accent);
    color: var(--surface);
}

.card-bar {
    display: block;
    height: var(--u1);
    border-radius: var(--radius-pill);
    background: var(--ink-100);
    overflow: hidden;
}

.card-bar > span {
    display: block;
    height: 100%;
    background: var(--ink-500);
}

.progress-card.is-done .card-bar > span {
    background: var(--accent);
}

/* Every tracker uses the same compact, open control rail. The cards remain the
primary surface; filters should not become a competing card above them. */
.workspace-main.is-trackers .results-section > .segmented {
    padding-inline: 0;
    border: 0;
    border-bottom: 1px solid var(--ink-100);
    border-radius: 0;
}

.workspace-main.is-trackers .results-section > .toolbar {
    padding: var(--u4) 0;
    border: 0;
    border-bottom: 1px solid var(--ink-100);
    border-radius: 0;
}

.tracker-bestiary .progress-card.is-unrecorded .card-bar {
    display: none;
}

.pager {
    display: flex;
    align-items: center;
    gap: var(--u4);
    flex-wrap: wrap;
    padding: var(--u4) 0;
    border-top: 1px solid var(--ink-100);
    font-size: var(--t-200);
}

.pager-count {
    color: var(--ink-700);
    font-variant-numeric: tabular-nums;
}

.pager-sizes,
.pager-steps {
    display: flex;
    gap: var(--u2);
}

.pager-steps {
    margin-left: auto;
}

.row-action:hover:not([disabled]) {
    border-color: var(--ink-500);
}

.row-action[disabled] {
    color: var(--ink-500);
    cursor: not-allowed;
}

.bulk-bar {
    position: sticky;
    top: var(--u3);
    z-index: 5;
    display: flex;
    align-items: center;
    gap: var(--u4);
    margin: var(--u3) 0;
    padding: var(--u2) var(--u3);
    border: 1px solid transparent;
    border-radius: var(--radius-surface);
    background: var(--surface);
    box-shadow: var(--elevation-2);
}

.bulk-select {
    display: inline-flex;
    align-items: center;
    gap: var(--u2);
    font-size: var(--t-200);
    font-weight: var(--weight-bold);
}

.bulk-actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--u2);
    margin-right: auto;
}

.empty-state {
    padding: var(--u4) 0;
    border: 0;
    background: none;
    text-align: left;
}

.empty-state strong,
.empty-state > span {
    display: block;
}

.empty-state > span {
    margin-top: var(--u1);
    color: var(--ink-700);
}

.empty-state-action,
.answer-actions {
    margin-top: var(--u4);
}

/* Empty results occupy the same slot and rhythm as a populated card grid. Without
this shared margin they fused to the filter surface and read like its footer. */
.results-section > .empty-state {
    margin: var(--u4) 0 var(--u6);
}

/* --- 6  record: landing, unit, review --------------------------------- */

.results-section + .results-section {
    margin-top: var(--section-gap);
}

.results-shell > .stat-line + .results-section {
    margin-top: var(--u6);
}

.results-section .subsection-title {
    margin-bottom: var(--u2);
}

.landing-list {
    margin-top: var(--u6);
    border-top: 1px solid var(--ink-100);
}

.landing-row {
    display: grid;
    grid-template-columns: minmax(var(--u24), 1.3fr) minmax(calc(var(--u24) + var(--u4)), 0.8fr) calc(var(--u24) - var(--u1)) minmax(calc(var(--u24) + var(--u8)), 1fr) minmax(var(--u24), auto);
    align-items: center;
    gap: var(--u4);
    padding: var(--u4) 0;
    border-bottom: 1px solid var(--ink-100);
}

.landing-name {
    padding: 0;
    border: 0;
    background: none;
    font-size: var(--t-400);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-heading);
    text-align: left;
    color: var(--ink-900);
    cursor: pointer;
}

.landing-name:hover {
    color: var(--accent);
}

.landing-units,
.landing-unknown {
    font-size: var(--t-200);
    color: var(--ink-700);
    font-variant-numeric: tabular-nums;
}

.landing-progress {
    height: var(--u1);
    border-radius: var(--radius-pill);
    background: var(--ink-100);
    overflow: hidden;
}

.landing-bar {
    display: block;
    height: 100%;
    background: var(--accent);
}

.landing-done {
    color: var(--accent);
    font-weight: var(--weight-bold);
}

.landing-next {
    display: inline-flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--u3);
    min-height: var(--control-height);
    padding: 0 var(--u3);
    border: 1px solid var(--ink-300);
    border-radius: var(--radius-control);
    background: var(--surface);
    box-shadow: var(--elevation-1);
    font-size: var(--t-200);
    cursor: pointer;
}

.landing-next:hover {
    border-color: var(--ink-900);
}

.worklist {
    display: flex;
    flex-wrap: wrap;
    gap: var(--u2);
    margin-top: var(--u4);
}

.worklist-item {
    display: inline-flex;
    align-items: baseline;
    gap: var(--u2);
    min-height: var(--u8);
    padding: 0 var(--u3);
    border: 1px solid var(--ink-300);
    border-radius: var(--radius-pill);
    background: var(--surface);
    font-size: var(--t-200);
    cursor: pointer;
}

.unit-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--u4);
    flex-wrap: wrap;
    margin-bottom: var(--u4);
}

.unit-instruction strong {
    color: var(--ink-900);
}

.unit-checksum {
    display: flex;
    align-items: center;
    gap: var(--u3);
    flex-wrap: wrap;
    margin-bottom: var(--u6);
    padding: var(--u4);
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-surface);
    background: var(--surface);
}

.unit-checksum input {
    width: var(--u24);
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.unit-checksum-note {
    font-size: var(--t-200);
    color: var(--ink-700);
}

.unit-checksum-note.is-match {
    color: var(--accent);
    font-weight: var(--weight-bold);
}

.unit-checksum-note.is-mismatch {
    color: var(--caution);
    font-weight: var(--weight-bold);
}

.unit-foot {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: var(--u3);
    flex-wrap: wrap;
    margin-top: var(--u6);
    padding-top: var(--u4);
    border-top: 1px solid var(--ink-100);
}

.unit-progress {
    margin-right: auto;
    font-size: var(--t-200);
    color: var(--ink-700);
    font-variant-numeric: tabular-nums;
}

.unit-blocked {
    font-size: var(--t-200);
    color: var(--caution);
}

.review-list {
    margin-top: var(--u4);
    border-top: 1px solid var(--ink-100);
}

.review-line {
    display: grid;
    grid-template-columns: minmax(calc(var(--u24) + var(--u12)), calc(var(--u24) * 2 + var(--u6))) minmax(0, 1fr);
    gap: var(--u4);
    padding: var(--u4) 0;
    border-bottom: 1px solid var(--ink-100);
}

.review-line dd {
    font-size: var(--t-200);
}

.review-line.is-warning dt {
    color: var(--caution);
}

.review-chip {
    display: inline-flex;
    align-items: baseline;
    gap: var(--u1);
    margin: 0 var(--u1) var(--u1) 0;
    padding: var(--u1) var(--u2);
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-control);
    background: var(--paper);
    font-size: var(--t-200);
}

.review-chip.is-warning {
    border-color: var(--caution-line);
    background: var(--caution-tint);
}

.change-list {
    margin-top: var(--u4);
    border-top: 1px solid var(--ink-100);
}

.change-row {
    display: grid;
    grid-template-columns: var(--u24) minmax(0, 1fr) auto auto;
    align-items: center;
    gap: var(--u4);
    padding: var(--u3) 0;
    border-bottom: 1px solid var(--ink-100);
    font-size: var(--t-200);
}

.paste-input {
    width: 100%;
    min-height: calc(var(--u24) * 2);
    margin-top: var(--u4);
    font-family: var(--font-mono);
    font-size: var(--t-200);
}

.action-row {
    display: flex;
    flex-wrap: wrap;
    gap: var(--u2);
    margin: var(--u4) 0;
}

/* --- 7  feedback ------------------------------------------------------ */

.alert {
    margin-bottom: var(--u4);
    padding: var(--u3) var(--u4);
    border: 1px solid var(--caution-line);
    border-radius: var(--radius-control);
    background: var(--caution-tint);
    color: var(--caution);
    font-size: var(--t-200);
}

.alert:empty {
    display: none;
}

.undo-bar {
    position: fixed;
    right: var(--u6);
    bottom: var(--u6);
    z-index: 45;
    display: flex;
    align-items: center;
    gap: var(--u2);
    width: min(calc(var(--u24) * 4), calc(100vw - var(--u12)));
    margin: 0;
    padding: var(--u2) var(--u3);
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-control);
    background: var(--surface);
    box-shadow: var(--elevation-2);
    font-size: var(--t-100);
}

.undo-text {
    margin-right: auto;
    color: var(--ink-700);
}

.undo-action {
    min-height: var(--u8);
    padding: 0 var(--u2);
    border: 0;
    border-radius: var(--radius-control);
    background: none;
    color: var(--accent);
    font-weight: var(--weight-bold);
    cursor: pointer;
}

.undo-action:hover {
    background: var(--accent-tint);
}

.quick-add {
    position: fixed;
    inset: 0;
    z-index: 60;
    display: flex;
    justify-content: center;
    align-items: flex-start;
    padding: 12vh var(--u4) var(--u4);
    background: rgb(var(--shadow-rgb) / 0.35);
    overflow-y: auto;
}

body.has-quick-add {
    overflow: hidden;
}

.quick-panel {
    width: min(calc(var(--u24) * 6 + var(--u6)), 100%);
    max-height: min(76vh, calc(var(--u24) * 6 + var(--u12)));
    overflow: hidden;
    display: flex;
    flex-direction: column;
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-surface);
    background: var(--surface);
    box-shadow: var(--elevation-2);
}

.quick-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--u4);
    padding: var(--u4) var(--u4) var(--u3);
}

.quick-header h2 {
    font-size: var(--t-400);
}

.quick-header p {
    margin-top: var(--u1);
    color: var(--ink-700);
    font-size: var(--t-200);
}

.quick-close {
    flex: 0 0 44px;
    width: 44px;
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-control);
    background: var(--surface);
    color: var(--ink-700);
    cursor: pointer;
}

.quick-close:hover {
    border-color: var(--ink-300);
    color: var(--ink-900);
}

.quick-search {
    position: relative;
    display: block;
    margin: 0 var(--u4) var(--u2);
}

.quick-search > .material-symbols-outlined {
    position: absolute;
    left: var(--u3);
    top: 50%;
    z-index: 1;
    transform: translateY(-50%);
    color: var(--ink-500);
    pointer-events: none;
}

.quick-search .quick-input {
    width: 100%;
    height: 44px;
    min-height: 44px;
    padding-left: calc(var(--u8) + var(--u2));
    border-color: var(--ink-300);
    font-size: var(--t-200);
}

.quick-search .quick-input:focus {
    border-color: var(--accent);
}

.quick-results {
    overflow-y: auto;
    max-height: min(42vh, calc(var(--u24) * 3));
    padding: var(--u2) 0;
    border-top: 1px solid var(--ink-100);
}

.quick-option {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto auto;
    align-items: center;
    gap: var(--u3);
    padding: var(--u2) var(--u4);
    font-size: var(--t-200);
    cursor: pointer;
}

.quick-option.is-highlighted {
    background: var(--accent-tint);
}

.quick-name {
    font-weight: var(--weight-medium);
}

.quick-empty {
    padding: var(--u4);
    color: var(--ink-700);
    font-size: var(--t-200);
}

.quick-value-stage {
    border-top: 1px solid var(--ink-100);
    padding: var(--u4);
    background: var(--paper);
}

.quick-chosen {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--u2);
    flex-wrap: wrap;
    margin-bottom: var(--u3);
}

.quick-current {
    display: block;
    margin-top: var(--u1);
}

.quick-controls {
    display: flex;
    flex-wrap: wrap;
    gap: var(--u2);
}

.quick-controls .row-action,
.quick-controls input {
    height: 44px;
    min-height: 44px;
}

.quick-controls .row-action {
    min-width: 44px;
}

.quick-hint {
    padding: var(--u3) var(--u4);
    border-top: 1px solid var(--ink-100);
    font-size: var(--t-100);
    color: var(--ink-500);
}

.detail-panel {
    position: fixed;
    inset: var(--u2) var(--u2) var(--u2) auto;
    z-index: 40;
    width: min(var(--inspector-width), calc(100vw - var(--u4)));
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: 0;
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-surface);
    background: var(--surface);
    box-shadow: var(--elevation-2);
}

#detailPanelContent {
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    padding: 0 var(--u4) var(--u4);
}

.detail-title .material-symbols-outlined {
    flex: 0 0 auto;
}

.detail-header-meta {
    margin-top: var(--u1);
    color: var(--ink-500);
    font-size: var(--t-100);
}

.detail-group {
    display: grid;
    gap: var(--u2);
    padding: var(--u3) 0;
}

.detail-kills-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: end;
    gap: var(--u4);
}

.detail-kills-field {
    display: grid;
    gap: var(--u1);
    min-width: 0;
    color: var(--ink-700);
    font-size: var(--t-100);
}

.detail-kills-input {
    width: 100%;
    min-width: 0;
    text-align: left;
    font-variant-numeric: tabular-nums;
    -moz-appearance: auto;
    -webkit-appearance: auto;
    appearance: auto;
}

.detail-kills-input::-webkit-inner-spin-button,
.detail-kills-input::-webkit-outer-spin-button {
    margin: 0;
    -webkit-appearance: auto;
}

.detail-kills-target {
    padding-bottom: var(--u2);
    color: var(--ink-700);
    font-size: var(--t-100);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.detail-progress {
    height: var(--u2);
    margin-top: var(--u2);
    overflow: hidden;
    border-radius: var(--radius-pill);
    background: var(--ink-100);
}

.detail-progress > span {
    display: block;
    height: 100%;
    border-radius: inherit;
    background: var(--ink-900);
}

.detail-progress-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--u4);
    color: var(--ink-500);
    font-size: var(--t-100);
    font-variant-numeric: tabular-nums;
}

.detail-location-list {
    display: grid;
    gap: var(--u2);
    color: var(--ink-700);
    font-size: var(--t-200);
}

.detail-stage-list {
    display: grid;
    gap: var(--u2);
}

.detail-stage-list li.is-done {
    color: var(--ink-900);
    font-weight: var(--weight-medium);
}

.detail-stage-state {
    font-size: var(--t-100);
}

.detail-stage-list .row-aside {
    margin-left: auto;
}

.detail-checks,
.detail-actions {
    display: grid;
    gap: var(--u2);
}

.detail-check {
    display: grid;
    grid-template-columns: var(--u6) minmax(0, 1fr);
    align-items: center;
    gap: var(--u2);
    min-height: var(--control-height);
    color: var(--ink-700);
    font-size: var(--t-200);
    cursor: pointer;
}

.detail-check input {
    margin: 0;
    justify-self: start;
}

.detail-action {
    display: grid;
    grid-template-columns: var(--u6) minmax(0, 1fr) var(--u6);
    justify-content: stretch;
    padding: 0 var(--u3);
    border-color: var(--ink-100);
    box-shadow: none;
    text-align: left;
}

.detail-action > .material-symbols-outlined {
    font-size: var(--t-300);
}

.detail-action > :first-child {
    justify-self: start;
}

.detail-action > :nth-child(2) {
    justify-self: start;
}

.detail-action-tail {
    justify-self: end;
    color: var(--ink-500);
}

.detail-last-recorded {
    margin-top: var(--u2);
    color: var(--ink-500);
    font-size: var(--t-100);
}

/* --- 8  legacy surfaces: sessions, plans, library --------------------- */

.content-section {
    margin-top: 0;
    min-width: 0;
}

/* Tracker pages already sit in the workspace grid below the page heading. The
legacy session section margin doubled that separation and stranded the summary
beneath a large empty band. */
.workspace-main.is-trackers #analysisSection {
    margin-top: 0;
}

.section-heading {
    margin-bottom: var(--u3);
}

.section-heading.is-page-redundant h2 {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.table-container {
    max-width: 100%;
    overscroll-behavior-inline: contain;
    scrollbar-width: thin;
    overflow-x: auto;
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-surface);
    background: var(--surface);
    box-shadow: none;
}

.table-container :where(th, td) {
    padding: var(--u3);
    border-bottom: 1px solid var(--ink-100);
    text-align: left;
    font-size: var(--t-200);
    vertical-align: middle;
}

.table-container thead th {
    position: sticky;
    top: 0;
    background: var(--surface);
    font-size: var(--t-100);
    font-weight: var(--weight-medium);
    letter-spacing: normal;
    text-transform: none;
    color: var(--ink-500);
    white-space: nowrap;
}

.table-container tbody tr:last-child :is(th, td) {
    border-bottom: 0;
}

.table-container :where(.is-num) {
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.editable-cell input,
.kills-input {
    width: var(--u24);
    text-align: right;
}

.chip-grid {
    display: flex;
    flex-wrap: wrap;
    gap: var(--u2);
    margin: var(--u3) 0;
}

.chip {
    display: inline-flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--u1);
    min-height: var(--u8);
    padding: var(--u2) var(--u3);
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-control);
    background: var(--surface);
    font-size: var(--t-200);
    cursor: pointer;
}

.chip.is-selected {
    border-color: var(--accent);
    background: var(--accent-tint);
    color: var(--accent);
}

.chip.is-selected .chip-meta {
    color: var(--ink-700);
}

/*
* The column count lives on the list, not the row — getting that wrong collapsed
* every ranked list in Opportunities and Charm Plan into a vertical stack.
*/
.row {
    display: grid;
    align-items: baseline;
    gap: var(--u4);
    padding: var(--u3) 0;
    border-bottom: 1px solid var(--ink-100);
    font-size: var(--t-200);
}

.row-list.cols-2 .row {
    grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
}

.row-list.cols-3 .row {
    grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr);
}

.row-list.cols-4 .row {
    grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
}

.row-list.cols-5 .row {
    grid-template-columns: minmax(0, 2fr) repeat(4, minmax(0, 1fr));
}

.row.is-head {
    padding-bottom: var(--u2);
    border-bottom: 1px solid var(--ink-300);
}

.row.is-head span {
    font-size: var(--t-100);
    font-weight: var(--weight-medium);
    letter-spacing: normal;
    text-transform: none;
    color: var(--ink-500);
}

.row:hover:not(.is-head) {
    background: var(--surface);
}

.row-name {
    font-weight: var(--weight-medium);
    display: flex;
    align-items: baseline;
    gap: var(--u2);
    min-width: 0;
}

.row-num,
.row-charm {
    text-align: right;
    font-variant-numeric: tabular-nums;
    justify-self: end;
}

.row-charm {
    color: var(--accent);
    font-weight: var(--weight-bold);
}

.link-button {
    padding: var(--u1) var(--u2);
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-pill);
    background: var(--surface);
    color: var(--ink-700);
    font: inherit;
    font-size: var(--t-100);
    cursor: pointer;
}

.opportunity-creature {
    display: inline-flex;
    align-items: center;
    gap: var(--u1);
    padding: 0;
    border: 0;
    background: none;
    color: var(--accent);
    font: inherit;
    font-weight: var(--weight-medium);
    text-align: left;
    cursor: pointer;
}

.opportunity-creature .material-symbols-outlined {
    font-size: 1.1em;
    transition: transform var(--duration-fast) var(--ease);
}

.opportunity-creature:hover span:first-child {
    text-decoration: underline;
    text-underline-offset: calc(var(--u1) / 2);
}

.opportunity-creature:hover .material-symbols-outlined {
    transform: translateX(var(--u1));
}

.respawn-mode-block,
.task-target-block,
.plan-controls,
.plan-sessions-block,
.library-controls {
    margin: var(--u4) 0;
    padding: var(--u4) 0;
    border-top: var(--hairline);
}

.library-controls, .respawn-mode-block, .task-target-block {
    display: flex;
    align-items: flex-end;
    flex-wrap: wrap;
    gap: var(--u4);
}

.route {
    counter-reset: step;
}

.route-step {
    padding: var(--u3) 0;
    font-size: var(--t-200);
    display: grid;
    grid-template-columns: var(--u6) minmax(0, 1fr);
    gap: var(--u3);
    counter-increment: step;
}

.site-disclaimer {
    margin-top: var(--u12);
    padding-top: var(--u4);
    border-top: 1px solid var(--ink-100);
}

/* ==========================================================================
Session surfaces, finished in the same language

These pages were left on a compatibility layer while the trackers were rebuilt.
Same tokens, same controls, same hierarchy — a figure leads, hairlines separate,
and numbers are tabular and right-aligned so a column reads as a column.
========================================================================== */

/* --- session navigation: compact, scrollable, with the active tab in view --- */
.hunt-workspace {
    display: flex;
    align-items: center;
    gap: var(--u3);
    padding-bottom: var(--u3);
    border-bottom: var(--hairline);
    min-width: 0;
}

.hunt-tab-strip {
    display: flex;
    flex: 1 1 auto;
    min-width: 0;
    gap: var(--u2);
    overflow-x: auto;
    overscroll-behavior-inline: contain;
    padding: var(--u1) 0;
    scrollbar-width: thin;
}

.hunt-tab {
    position: relative;
    display: flex;
    flex: 0 0 auto;
}

.hunt-tab-button {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--u1);
    padding: var(--u2) var(--u3);
    min-height: var(--control-height);
    border: 1px solid transparent;
    border-radius: var(--radius-control);
    background: transparent;
    text-align: left;
    cursor: pointer;
}

.hunt-tab:not(.hunt-tab-fixed) .hunt-tab-button {
    padding-right: var(--u8);
}

.hunt-tab-button:hover {
    background: var(--surface);
    border-color: var(--ink-100);
}

.hunt-tab-label {
    font-weight: var(--weight-medium);
    white-space: nowrap;
}

.hunt-tab-meta {
    white-space: nowrap;
}

.hunt-tab.is-active .hunt-tab-button {
    background: var(--accent-tint);
    border-color: var(--accent-tint);
    box-shadow: inset 0 -2px var(--accent);
    color: var(--accent);
}

.hunt-tab-close {
    position: absolute;
    top: var(--u1);
    right: 0;
    width: var(--u8);
    height: var(--u8);
    border: 0;
    border-radius: var(--radius-control);
    background: transparent;
    color: var(--ink-500);
    cursor: pointer;
}

.hunt-tab-close:hover {
    background: var(--surface);
    color: var(--ink-900);
}

.hunt-tab-add {
    min-width: var(--control-height);
    border: var(--hairline);
    border-radius: var(--radius-control);
    background: transparent;
    font-size: var(--t-300);
    cursor: pointer;
}

.hunt-workspace-actions {
    flex: 0 0 auto;
}

.hunt-workspace-actions .btn {
    white-space: nowrap;
}

/* --- the session itself ---------------------------------------------- */

.session-input-section .input-label {
    margin-bottom: var(--u2);
}

.session-input-section .respawn-mode-block {
    margin: var(--u3) 0;
    padding: 0;
    border: 0;
    background: none;
    align-items: center;
    gap: var(--u2) var(--u4);
}

.session-input-section .respawn-mode-block .input-label {
    margin: 0;
}

.session-input-section .respawn-mode-block .helper-text {
    flex-basis: 100%;
    font-size: var(--t-100);
}

.session-input-section .toolbar {
    padding: 0;
    border: 0;
    background: none;
    flex-wrap: wrap;
    gap: var(--u2);
}

.session-input-section .toolbar > :first-child {
    flex: 0 0 auto;
}

.session-input-section .toolbar #clearLogButton {
    margin-left: auto;
    padding-inline: var(--u2);
}

.session-input-section #sessionEditor {
    padding-top: var(--u2);
}

.session-analysis-nav {
    display: flex;
    flex-wrap: wrap;
    gap: var(--u2) var(--u4);
    margin-block: var(--u4);
    border-bottom: var(--hairline);
}

.session-analysis-nav a {
    padding: var(--u2) 0;
    text-decoration: none;
    color: var(--ink-500);
    border-bottom: 2px solid transparent;
    font-size: var(--t-100);
}

.session-analysis-nav a[aria-current="page"] {
    color: var(--ink-900);
    border-bottom-color: currentColor;
    font-weight: var(--weight-bold);
}

.session-log-disclosure {
    border-block: var(--hairline);
    padding-block: var(--u2);
}

.session-log-disclosure > summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--u4);
    cursor: pointer;
    list-style: none;
    font-size: var(--t-100);
    padding-block: var(--u2);
}

.session-log-disclosure > summary::-webkit-details-marker {
    display: none;
}

.session-log-disclosure .session-context {
    display: block;
    margin: var(--u1) 0 0;
    color: var(--ink-500);
}

.session-log-action {
    flex-shrink: 0;
    text-decoration: underline;
}

.plan-setup,
.opportunity-columns,
.opportunity-columns > div {
    display: grid;
    align-content: start;
    gap: var(--u6);
    min-width: 0;
}

.plan-setup {
    gap: var(--u2);
}

.plan-setup .plan-controls,
.plan-setup .plan-sessions-block {
    margin: 0;
    padding-block: var(--u3);
}

.opportunity-columns {
    margin-top: var(--u6);
}

@media (min-width: 1200px) {
    .charm-planner {
        display: grid;
        grid-template-columns: 340px minmax(0, 1fr);
        align-items: start;
        column-gap: var(--u8);
    }

    .plan-setup .plan-controls {
        grid-template-columns: minmax(0, 1fr);
    }

}

@media (min-width: 1320px) {
    .opportunity-columns {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
        gap: var(--u8);
    }

    .opportunity-columns .row,
    .opportunity-columns .section-copy {
        font-size: var(--t-100);
    }

    .opportunity-columns .row {
        padding-block: var(--u2);
    }
}

.chip:hover {
    border-color: var(--ink-300);
}

.chip-name {
    font-weight: var(--weight-medium);
}

.table-container tbody tr:nth-child(even) {
    background: var(--paper);
}

.table-container tbody tr:hover {
    background: var(--accent-tint);
}

.table-container td.editable-cell,
.table-container th.editable-cell {
    text-align: right;
}

.editable-cell input {
    width: calc(var(--u24) - var(--u2));
}

.table-container a {
    color: var(--ink-900);
    font-weight: var(--weight-medium);
    text-decoration: none;
}

.table-container a:hover {
    text-decoration: underline;
}

.row-name.is-verbatim {
    text-transform: none;
}

.link-button:hover {
    border-color: var(--ink-500);
    color: var(--ink-900);
}

/* --- plan and library controls -------------------------------------- */

.plan-sessions-block .row-list,
.library-controls .row-list {
    width: 100%;
}

.route-step::before {
    content: counter(step);
    grid-row: 1 / span 2;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--u6);
    height: var(--u6);
    border-radius: var(--radius-pill);
    background: var(--ink-900);
    color: var(--surface);
    font-size: var(--t-100);
    font-variant-numeric: tabular-nums;
}

.route-step > .row-list {
    grid-column: 2;
    min-width: 0;
}

.route-step > .row-list.cols-4 .row {
    grid-template-columns: minmax(0, 1fr) repeat(3, auto);
    gap: var(--u3);
}

.summary-label {
    margin-bottom: 0;
}

/* --- sortable table headers and inline library fields ----------------- */

/*
* A sort control is a header, not a button on a shelf. Giving every button a border
* and a background turned the header row into a row of loose chips.
*/
.column-sort {
    display: inline-flex;
    align-items: center;
    gap: var(--u1);
    padding: 0;
    border: 0;
    background: none;
    box-shadow: none;
    font: inherit;
    font-size: var(--t-100);
    font-weight: var(--weight-medium);
    letter-spacing: normal;
    text-transform: none;
    color: var(--ink-500);
    cursor: pointer;
}

.column-sort:hover {
    color: var(--ink-900);
}

.column-sort .sort-mark,
.column-sort .material-symbols-outlined {
    font-size: var(--u3);
}

th.is-sorted .column-sort {
    color: var(--ink-900);
}

/* Two figures in one cell need to read as two figures. */
.table-container .row-aside {
    display: block;
    margin-top: var(--u1);
}

/* --- Dashboard ---------------------------------------------------------- */

.dashboard-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(clamp(calc(var(--u24) * 2 + var(--u4)), 22vw, calc(var(--u24) * 3)), 1fr));
    column-gap: var(--grid-gutter);
    row-gap: var(--grid-gutter);
    margin: 0 0 var(--u6);
}

.dashboard-card:hover {
    border-color: var(--ink-300);
    box-shadow: var(--elevation-1);
}

.dashboard-card-head {
    display: flex;
    align-items: center;
    gap: var(--u2);
    margin-bottom: var(--u2);
}

.dashboard-card-disclosure {
    margin-left: auto;
    transition: color var(--duration-fast) var(--ease), transform var(--duration-fast) var(--ease);
}

.dashboard-card:hover .dashboard-card-disclosure {
    color: var(--accent);
    transform: translateX(var(--u1));
}

.dashboard-card-title {
    font-size: var(--t-200);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-title);
    color: var(--ink-900);
}

.dashboard-card-eyebrow {
    font-size: var(--t-100);
    color: var(--ink-500);
}

.dashboard-card-progress {
    height: var(--u1);
    margin-top: var(--u2);
    border-radius: var(--radius-pill);
    background: var(--ink-100);
    overflow: hidden;
}

.dashboard-card-progress span {
    display: block;
    height: 100%;
    background: var(--accent);
}

/* Weapon Proficiency reuses the shared answer, table, form and spacing system. */
.proficiency-page {
    min-width: 0;
}

.proficiency-metrics .answer-value {
    font-size: var(--t-300);
    overflow-wrap: anywhere;
}

.proficiency-metrics .answer:first-child .answer-value {
    font-size: var(--t-500);
}

.proficiency-controls > div {
    flex: 1 1 160px;
    min-width: 0;
}

.proficiency-controls input, .proficiency-controls select {
    width: 100%;
    min-width: 0;
}

.weapon-progress {
    width: 100%;
    height: var(--u2);
    accent-color: var(--accent);
}

.proficiency-warning {
    padding: var(--u3);
    color: var(--caution);
    background: var(--caution-tint);
    border-radius: var(--radius-control);
}

.proficiency-warning ul {
    padding-left: var(--u6);
    overflow-wrap: anywhere;
}

.proficiency-table tbody th {
    position: static;
    white-space: normal;
    text-transform: none;
    letter-spacing: normal;
    font-size: var(--t-200);
    color: var(--ink-700);
}

.proficiency-table {
    max-width: 100%;
}

.proficiency-table table {
    min-width: 780px;
}

/* Finishing details shared by every surface. */
.stage:focus-visible, .tick-option:focus-visible {
    outline-offset: -3px;
}

.tick-option .material-symbols-outlined {
    font-size: var(--u4);
}

.progress-card.is-unrecorded .stage.is-on {
    background: var(--paper);
    color: var(--ink-500);
    box-shadow: none;
}

.card-content {
    cursor: pointer;
}

.page-heading-row > div {
    min-width: 0;
}

.description {
    margin-top: var(--u1);
}

.dashboard-card-stats li {
    overflow-wrap: anywhere;
    flex: 1 1 40%;
}

.workspace-content {
    overflow-anchor: none;
}

.estimate-table table {
    min-width: 1080px;
}

.task-sessions-table table {
    min-width: 800px;
}

.table-scroll-hint {
    font-size: var(--t-100);
    color: var(--ink-500);
    margin: var(--u2) 0;
}

/* Shared reading rhythm: content first, controls in normal document flow. */
.page-heading-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--u6);
    flex-wrap: wrap;
    padding-bottom: var(--u2);
    margin-bottom: 0;
    border-bottom: 0;
}

.answer {
    display: grid;
    gap: var(--u1);
    margin: 0;
    padding: 0;
    min-width: 0;
}

.answer .summary-label {
    font-size: var(--t-200);
}

.answer-note {
    max-width: 76ch;
    font-size: var(--t-100);
    color: var(--ink-500);
}

.stat-item {
    color: var(--ink-700);
    white-space: normal;
    overflow-wrap: anywhere;
    padding: 0;
    margin: 0;
    border: 0;
}

.tracker-controls {
    padding-top: var(--u2);
    border-top: var(--hairline);
}

.tracker-controls > .segmented {
    gap: var(--u4);
    padding: 0 var(--u2);
    border-bottom: var(--hairline);
    flex-wrap: wrap;
}

.tracker-search-row, .history-search-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(120px, 180px);
    gap: var(--u3);
    align-items: end;
    padding-top: var(--u3);
}

.tracker-search-row input, .tracker-search-row select, .history-search input, .history-search-row select {
    width: 100%;
    min-width: 0;
}

.active-filters .toolbar-button {
    margin-left: auto;
    background: none;
    box-shadow: none;
    font-size: var(--t-100);
    padding-inline: var(--u3);
}

.filter-strip {
    display: flex;
    align-items: center;
    gap: var(--u2);
    padding: var(--u2) 0;
    flex-wrap: wrap;
}

.filter-strip > div {
    display: flex;
    align-items: center;
    gap: var(--u2);
    flex: 0 1 auto;
    min-width: 0;
}

.filter-strip .input-label {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
}

.filter-strip select {
    max-width: 190px;
    min-width: 0;
    min-height: var(--compact-control-height);
    background-color: var(--surface);
    font-size: var(--t-100);
}

.filter-strip select:hover, .filter-strip select:focus-visible {
    border-color: var(--ink-300);
}

.filter-toggle, .active-filter, .text-action {
    min-height: 36px;
    padding: var(--u1) var(--u2);
    border: 0;
    background: transparent;
    color: var(--ink-700);
    cursor: pointer;
    font-size: var(--t-100);
}

.filter-toggle {
    white-space: nowrap;
    border: 1px solid var(--ink-300);
    border-radius: var(--radius-control);
    min-height: var(--compact-control-height);
    background: var(--surface);
}

.filter-toggle[aria-pressed="true"] {
    background: var(--accent-tint);
    color: var(--ink-900);
    font-weight: var(--weight-bold);
}

.active-filters {
    display: flex;
    align-items: center;
    gap: var(--u1) var(--u2);
    min-height: 36px;
    flex-wrap: wrap;
}

.active-filter {
    display: flex;
    max-width: 100%;
    gap: var(--u2);
    align-items: center;
    text-align: left;
    overflow-wrap: anywhere;
    border-radius: var(--radius-control);
    background: var(--accent-tint);
}

.active-filter span {
    font-size: var(--t-200);
}

.filter-hint {
    margin-right: var(--u2);
    white-space: nowrap;
    color: var(--ink-500);
    font-size: var(--t-100);
}

.text-action {
    text-decoration: underline;
    text-underline-offset: 3px;
}

.tracker-group-heading {
    display: flex;
    align-items: baseline;
    gap: var(--u3);
    flex-wrap: wrap;
    margin-top: var(--u4);
}

.tracker-group-heading h3 {
    font-size: var(--t-300);
}

.tracker-group-heading > span {
    font-size: var(--t-100);
    color: var(--ink-500);
}

.progress-card {
    display: flex;
    flex-direction: column;
    gap: var(--u2);
    padding: var(--u3);
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-surface);
    background: var(--surface);
    box-shadow: none;
    transition: transform var(--duration-fast) var(--ease), border-color var(--duration-fast) var(--ease), box-shadow var(--duration-fast) var(--ease);
}

.progress-card.is-done {
    background: var(--surface);
}

.tick-option {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--u2);
    min-width: 100px;
    min-height: var(--compact-control-height);
    padding: 0 var(--u3);
    border: 0;
    background: transparent;
    color: var(--ink-700);
    font: inherit;
    font-size: var(--t-100);
    cursor: pointer;
}

.tracker-measuringTibia .card-meta {
    font-size: var(--t-100);
}

.tracker-measuringTibia .card-meta strong {
    color: var(--ink-900);
}

.dashboard-card {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--u1);
    padding: var(--u4);
    border: 1px solid var(--ink-100);
    border-radius: var(--radius-surface);
    background: var(--surface);
    text-align: left;
    cursor: pointer;
    transition: transform var(--duration-fast) var(--ease), border-color var(--duration-fast) var(--ease), box-shadow var(--duration-fast) var(--ease);
}

.dashboard-card-head .material-symbols-outlined {
    color: var(--ink-500);
}

.dashboard-card-figure {
    font-variant-numeric: tabular-nums;
    font-size: var(--t-400);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-heading);
    color: var(--ink-900);
    line-height: var(--leading-tight);
}

.dashboard-card-note {
    margin-top: var(--u1);
    font-size: var(--t-100);
    color: var(--ink-700);
    min-height: 0;
}

.detail-header {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: start;
    gap: var(--u2);
    flex: 0 0 auto;
    padding: var(--u4);
    border-bottom: var(--hairline);
}

.detail-heading {
    min-width: 0;
}

.detail-header-actions {
    display: flex;
    align-items: center;
}

.detail-header-actions .icon-button, .detail-header-actions .bookmark-toggle {
    width: 40px;
    height: 40px;
    flex: 0 0 auto;
}

.detail-close {
    position: static;
    background: transparent;
    border: 0;
    box-shadow: none;
}

.detail-title {
    font-size: var(--t-300);
    font-weight: var(--weight-bold);
    letter-spacing: var(--tracking-heading);
    display: flex;
    align-items: center;
    gap: var(--u2);
    min-height: var(--u8);
    padding: 0;
    border: 0;
    line-height: var(--leading-snug);
}

.detail-group-title {
    font-size: var(--t-100);
    font-weight: var(--weight-bold);
    letter-spacing: 0;
    text-transform: none;
    color: var(--ink-500);
    margin: 0;
}

.detail-value {
    font-size: var(--t-200);
    line-height: var(--leading-body);
    font-variant-numeric: tabular-nums;
}

.detail-entity-list {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 140px), 1fr));
    gap: 0 var(--u2);
}



.source-action {
    display: flex;
    min-height: var(--control-height);
    padding: var(--u2) 0;
    gap: var(--u2);
    color: var(--ink-700);
    font-size: var(--t-100);
    text-decoration: none;
}

.source-action:hover {
    text-decoration: underline;
}

.source-action .detail-action-tail {
    display: none;
}

.detail-stage-list li {
    display: flex;
    align-items: center;
    gap: var(--u2);
    color: var(--ink-500);
    font-size: var(--t-200);
    padding-block: var(--u2);
}

.session-input-section textarea {
    display: block;
    width: 100%;
    min-height: 160px;
    font-family: var(--font-mono);
    font-size: var(--t-200);
}

.proficiency-metrics {
    display: flex;
    flex-wrap: wrap;
    gap: var(--u2) var(--u8);
    padding: var(--u3) 0;
}

.proficiency-metrics .answer {
    flex: 0 1 auto;
    min-width: 0;
}

.proficiency-metrics .answer .summary-label {
    grid-row: 1;
    font-size: var(--t-100);
}



.proficiency-metrics .answer:nth-child(-n+2) .answer-value {
    font-size: var(--t-500);
}

.proficiency-controls {
    margin-top: var(--u3);
}

.proficiency-page .helper-text {
    font-size: var(--t-100);
    max-width: 85ch;
}

.proficiency-page .empty-state {
    padding: var(--u4) 0;
    border: 0;
    background: none;
    text-align: left;
}

.detail-facts {
    display: flex;
    flex-wrap: wrap;
    gap: var(--u3) var(--u6);
    padding-block: var(--u3);
    font-size: var(--t-100);
}

.detail-facts dt {
    margin-bottom: var(--u1);
    color: var(--ink-500);
    font-weight: var(--weight-bold);
}

.detail-facts dd {
    margin: 0;
    font-variant-numeric: tabular-nums;
}

.history-results-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--u3);
    padding-block: var(--u2);
}

.history-count {
    display: block;
    padding-block: var(--u2);
    font-size: var(--t-100);
    color: var(--ink-500);
}

.history-records {
    border-top: var(--hairline);
}

.history-record {
    padding: var(--u4) 0;
    border-bottom: var(--hairline);
}

.history-record-main {
    display: grid;
    grid-template-columns: minmax(180px, 2fr) repeat(3, minmax(0, 1fr));
    gap: var(--u4);
    align-items: start;
}

.history-name::placeholder {
    color: var(--ink-900);
    opacity: 1;
}

.history-results-row > .btn {
    white-space: nowrap;
    font-size: var(--t-100);
}

.history-name {
    width: 100%;
    min-width: 0;
    min-height: var(--compact-control-height);
    padding-inline: 0;
    border-color: transparent;
    border-radius: 0;
    background: none;
    font-weight: var(--weight-bold);
}

.history-context {
    margin-top: var(--u1);
}

.history-context, .history-metric > span {
    font-size: var(--t-100);
    color: var(--ink-500);
}

.history-metric {
    display: grid;
    gap: var(--u1);
    font-variant-numeric: tabular-nums;
}

.history-metric strong {
    font-size: var(--t-200);
    font-weight: var(--weight-medium);
}

.history-metric small {
    font-size: var(--t-100);
    font-weight: var(--weight-regular);
}

.history-edit-fields {
    display: grid;
    grid-template-columns: 155px minmax(140px, 1fr) auto;
    gap: var(--u3);
    align-items: end;
    margin-top: var(--u3);
}

.history-edit-fields label {
    display: grid;
    gap: var(--u1);
    font-size: var(--t-100);
    color: var(--ink-500);
    min-width: 0;
}

.history-edit-fields input {
    width: 100%;
    min-width: 0;
}

.history-actions {
    display: flex;
    gap: var(--u1);
    flex-wrap: wrap;
}

/* Supporting information stays visible, using typography instead of nested panels. */
.reference-section {
    margin-top: var(--section-gap);
    padding-top: var(--u4);
    border-top: var(--hairline);
}

.reference-title {
    font-size: var(--t-200);
    line-height: var(--leading-snug);
    font-weight: var(--weight-bold);
    margin-bottom: var(--u2);
}

.reference-section .helper-text, .disclaimer-copy {
    color: var(--ink-500);
    font-size: var(--t-100);
    max-width: 100ch;
}

.disclaimer-copy p + p {
    margin-top: var(--u2);
}

.session-context {
    font-size: var(--t-100);
    color: var(--ink-500);
    margin-bottom: var(--u2);
}

.mobile-table-sort {
    display: none;
}

.contribution-bar {
    display: block;
    height: 3px;
    background: var(--ink-100);
    margin-top: var(--u1);
    border-radius: var(--radius-pill);
}

.contribution-bar > span {
    display: block;
    height: 100%;
    background: var(--ink-500);
}

.dashboard-card-summary {
    display: flex;
    align-items: baseline;
    gap: var(--u2);
    flex-wrap: wrap;
}

.dashboard-card-stats {
    display: flex;
    gap: var(--u1) var(--u3);
    margin-top: var(--u2);
    padding-top: var(--u2);
    border-top: 0;
    font-size: var(--t-100);
    color: var(--ink-500);
    flex-wrap: wrap;
}

.detail-state.is-boolean {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.proficiency-projection-control {
    margin: var(--u3) 0;
    max-width: 360px;
}

.proficiency-projection-control select {
    width: 100%;
}

#resultsTitle {
    scroll-margin-top: var(--u6);
}

.detail-actions .btn {
    width: auto;
    justify-content: flex-start;
    border: 0;
    box-shadow: none;
    padding-inline: 0;
    font-size: var(--t-100);
}

.session-input-section .toolbar .btn {
    padding-inline: var(--u3);
}

.plan-controls {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    align-items: start;
    gap: var(--u4);
}

.plan-controls .helper-text, .plan-sessions-block .helper-text {
    font-size: var(--t-100);
    max-width: 60ch;
}

.plan-controls .segmented {
    width: fit-content;
}

.plan-sessions-block .row-list .row {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto;
}

.plan-sessions-block .row-action {
    width: auto;
    min-width: 100px;
}

.plan-session-mode {
    color: var(--ink-500);
    font-size: var(--t-100);
}

/* Summary and sort composition shared across data views. */
.summary-reading {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--u1) var(--u2);
}

.sort-control {
    display: flex;
    gap: var(--u1);
    min-width: 0;
}

.sort-control .icon-button {
    flex: 0 0 var(--control-height);
    height: var(--control-height);
    border: 1px solid var(--ink-300);
    color: var(--ink-700);
}

.proficiency-metrics .summary-reading {
    display: grid;
    gap: var(--u1);
}

.proficiency-metrics .stat-line {
    flex-basis: 100%;
    padding-top: 0;
}

.session-overview {
    border-bottom: var(--hairline);
}

.history-identity-main {
    display: flex;
    align-items: center;
    gap: var(--u3);
}

.history-identity-main .row-action {
    flex: 0 0 auto;
}

.history-name:hover, .history-name:focus {
    border-bottom-color: var(--ink-300);
}

.detail-relation {
    display: flex;
    width: 100%;
    justify-content: space-between;
    align-items: center;
    gap: var(--u1);
    min-height: var(--compact-control-height);
    padding: var(--u1) 0;
    border: 0;
    border-bottom: var(--hairline);
    background: none;
    color: var(--ink-700);
    font: inherit;
    font-size: var(--t-100);
    text-align: left;
    cursor: pointer;
}

.detail-relation:hover {
    color: var(--ink-900);
    background: var(--accent-tint);
}

.detail-relation .material-symbols-outlined {
    flex: 0 0 auto;
    font-size: var(--t-200);
}

/* Responsive variants: wide screens first, then progressively narrower layouts. */

@media (min-width: 901px) {
    .card-body {
        height: var(--u12);
        line-height: var(--u6);
        -webkit-line-clamp: 2;
    }

    .card-foot {
        display: grid;
        grid-template-columns: minmax(0, 1fr) auto;
        gap: var(--u1);
        min-height: var(--u8);
    }

    .card-status {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .card-extras {
        gap: calc(var(--u1) / 2);
        margin-left: 0;
    }

    .card-extras .chip-toggle {
        padding-inline: var(--u1);
    }

    .card-extras .bookmark-toggle {
        width: calc(var(--u6) - var(--u1));
        height: var(--u6);
    }
}

/* Keep the editor beside its settings when the available workspace fits both. */
@media (min-width: 1101px), (min-width: 760px) and (max-width: 900px) {
    .session-input-section #sessionEditor {
        display: grid;
        grid-template-columns: minmax(0, 1fr) 310px;
        gap: var(--u2) var(--u6);
        align-items: start;
    }

    #sessionEditor > .input-label {
        grid-column: 1;
        margin: 0;
    }

    #sessionEditor > textarea {
        grid-column: 1;
        grid-row: 2 / 4;
    }

    .session-input-section #respawnModeBlock {
        grid-column: 2;
        grid-row: 1 / 3;
        margin: 0;
        display: block;
    }

    #respawnModeBlock .segmented {
        margin-top: var(--u2);
    }

    #sessionEditor > .toolbar {
        grid-column: 2;
        align-self: end;
    }
}

@media (min-width: 1181px) {
    .app-shell.has-detail .undo-bar {
        right: calc(var(--inspector-width) + var(--u6));
    }

    .app-shell.has-detail .workspace-main {
        padding-right: calc(var(--inspector-width) + var(--u4));
    }
}

@media (max-width: 1180px) {
    .detail-panel {
        position: fixed;
        inset: 0 0 0 auto;
        width: min(var(--inspector-width), 100%);
        z-index: 40;
        box-shadow: var(--elevation-2);
    }
}

@media (max-width: 1100px) {
    .history-edit-fields {
        grid-template-columns: 145px minmax(0, 1fr);
    }

    .history-actions {
        grid-column: 1 / -1;
    }
}

/* Compact desktop keeps navigation persistent beside Tibia in narrow windows. */
@media (min-width: 701px) and (max-width: 900px) {
    .app-sidebar {
        flex-basis: 220px;
        width: 220px;
        padding-inline: var(--u2);
    }

    .workspace-content {
        padding: var(--u6) var(--u4) var(--u12);
    }

    .sidebar-link {
        padding-inline: var(--u2);
        gap: var(--u2);
    }

    .sidebar-character-switch {
        padding-inline: var(--u1);
    }

    .session-input-section #sessionEditor {
        grid-template-columns: minmax(0, 1fr) 260px;
        column-gap: var(--u4);
    }

    #sessionEditor > .toolbar {
        gap: var(--u1);
    }

    #sessionEditor > .toolbar .btn {
        padding-inline: var(--u2);
    }

    .mobile-bar,
    .sidebar-menu-toggle,
    .sidebar-scrim,
    .sidebar-close {
        display: none !important;
    }
}

@media (max-width: 700px) {
    .app-sidebar {
        position: fixed;
        inset: 0 auto 0 0;
        z-index: 50;
        transform: translateX(-100%);
        visibility: hidden;
        height: 100dvh;
        box-shadow: var(--elevation-2);
    }

    .app-sidebar.is-open {
        transform: translateX(0);
        visibility: visible;
    }

    .mobile-bar {
        display: flex;
        position: fixed;
        inset: 0 0 auto;
        z-index: 40;
        align-items: center;
        gap: var(--u3);
        height: calc(var(--u12) + var(--u2));
        padding: var(--u2) var(--u4);
        background: var(--surface);
        border-bottom: var(--hairline);
    }

    .mobile-brand {
        font-weight: var(--weight-bold);
        letter-spacing: var(--tracking-title);
    }

    .mobile-bar .icon-button {
        margin-left: auto;
        width: var(--control-height);
        height: var(--control-height);
    }

    .sidebar-close.icon-button {
        display: flex;
        align-self: flex-end;
        flex: 0 0 auto;
        margin-bottom: var(--u2);
    }

    /* A rail makes no sense as a drawer — the drawer is either open at full
    width or fully offscreen. */
    .app-shell.sidebar-collapsed .app-sidebar {
        flex-basis: var(--sidebar-width);
        width: var(--sidebar-width);
        padding-inline: var(--u3);
    }

    .app-shell.sidebar-collapsed .sidebar-link-label,
    .app-shell.sidebar-collapsed .sidebar-section-title,
    .app-shell.sidebar-collapsed .sidebar-character-name,
    .app-shell.sidebar-collapsed .sidebar-character-chevron,
    .app-shell.sidebar-collapsed .sidebar-character-actions {
        display: revert;
    }

    .app-shell.sidebar-collapsed .sidebar-link,
    .app-shell.sidebar-collapsed .sidebar-character-switch {
        justify-content: flex-start;
        padding: 0 var(--u3);
    }

    .sidebar-collapse {
        display: none;
    }

    .sidebar-menu-toggle {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: var(--control-height);
        height: var(--control-height);
        border: 1px solid var(--ink-100);
        border-radius: var(--radius-control);
        background: var(--surface);
        color: var(--ink-900);
        box-shadow: var(--elevation-2);
        cursor: pointer;
    }

    .sidebar-scrim {
        position: fixed;
        inset: 0;
        z-index: 45;
        background: rgb(var(--shadow-rgb) / 0.4);
    }

    .sidebar-scrim:not([hidden]) {
        display: block;
    }

    .workspace-content {
        padding: calc(var(--u16) + var(--u2)) var(--u4) var(--u12);
    }

    h1 {
        font-size: var(--t-500);
    }

    .landing-row {
        grid-template-columns: minmax(0, 1fr) auto;
        row-gap: var(--u2);
    }

    .landing-progress {
        display: none;
    }

    .review-line,
    .change-row {
        grid-template-columns: minmax(0, 1fr);
    }

    .proficiency-metrics .answer:first-child .answer-value {
        font-size: var(--t-400);
    }

    .page-heading-row {
        gap: var(--u3);
    }

    .page-eyebrow {
        margin-bottom: var(--u1);
    }

    .answer-value {
        font-size: var(--t-400);
    }

    .stat-line {
        font-size: var(--t-100);
    }

    .sidebar-link {
        min-height: var(--control-height);
    }

    .sidebar-section {
        margin-top: var(--u4);
        padding-top: var(--u3);
    }

    .sidebar-section-data {
        margin-top: var(--u4);
    }

    .sidebar-character {
        margin-bottom: var(--u2);
    }

    .row-name {
        flex-wrap: wrap;
    }

    .row-list.cols-4 .row {
        grid-template-columns: minmax(0, 1.6fr) repeat(3, minmax(0, 1fr));
        gap: var(--u2);
    }

    .row {
        font-size: var(--t-100);
    }

    .row.is-head span {
        letter-spacing: 0;
    }

    .tracker-controls > .segmented {
        gap: var(--u1);
        padding-inline: var(--u1);
    }

    .tracker-controls > .segmented .segmented-button {
        font-size: var(--t-100);
        flex: 1 0 auto;
        padding-inline: var(--u1);
    }

    .tracker-search-row, .history-search-row {
        grid-template-columns: minmax(0, 1fr) 160px;
        gap: var(--u2);
    }

    .tracker-search-row > div:nth-child(2) {
        min-width: 0;
    }

    .filter-strip {
        gap: var(--u1);
    }

    .filter-strip select {
        max-width: 172px;
        padding-left: var(--u2);
    }

    .dashboard-card {
        padding: var(--u4);
    }

    .detail-header-actions .icon-button, .detail-header-actions .bookmark-toggle {
        width: 44px;
        height: 44px;
    }

    .detail-entity-list {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .proficiency-metrics .answer {
        flex: 1 1 0;
    }

    .proficiency-metrics .answer:nth-child(-n+2) .answer-value {
        font-size: var(--t-400);
    }

    #resultsTitle {
        scroll-margin-top: 72px;
    }
}

@media screen and (max-width: 700px) {
    .hunt-workspace {
        flex-wrap: wrap;
        gap: var(--u2);
    }

    .hunt-tab-strip {
        flex-basis: 100%;
    }

    .hunt-workspace-actions {
        margin-left: auto;
    }

    .detail-panel {
        inset: 0;
        width: 100%;
        border-radius: 0;
        padding: 0;
    }


    .history-record-main {
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: var(--u3);
    }

    .history-identity {
        grid-column: 1 / -1;
    }

    .history-metric > span {
        overflow-wrap: anywhere;
    }

    .history-edit-fields {
        grid-template-columns: 156px minmax(0, 1fr);
    }

    .proficiency-table {
        border: 0;
        border-radius: 0;
        overflow: visible;
    }

    .proficiency-table table {
        min-width: 0;
        width: 100%;
        display: block;
    }

    .proficiency-table thead, .proficiency-table tbody, .proficiency-table tfoot {
        display: block;
    }

    .mobile-table-sort {
        display: flex;
        align-items: end;
        gap: var(--u2);
        margin-top: var(--u3);
    }

    .mobile-table-sort > div {
        flex: 1;
        min-width: 0;
    }

    .mobile-table-sort select {
        width: 100%;
        min-width: 0;
    }

    .proficiency-table thead {
        display: none;
    }

    .proficiency-table tbody tr {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: var(--u3) var(--u2);
        padding: var(--u4) 0;
        border-bottom: var(--hairline);
    }

    .proficiency-table tbody th {
        grid-column: 1 / -1;
        padding: 0;
        border: 0;
        background: none;
    }

    .proficiency-table tbody tr td {
        padding: 0;
        border: 0;
        background: none;
        text-align: left;
        font-size: var(--t-100);
    }

    .proficiency-table tbody td::before {
        content: attr(data-label);
        display: block;
        color: var(--ink-500);
        font-size: var(--t-100);
    }

    .proficiency-table tbody tr td:nth-child(5), .proficiency-table tbody tr td:nth-child(6) {
        font-weight: var(--weight-bold);
        font-size: var(--t-200);
    }

    .proficiency-table tfoot tr {
        display: flex;
        gap: var(--u3);
        flex-wrap: wrap;
        padding: var(--u3) 0;
    }

    .proficiency-table tfoot th, .proficiency-table tfoot td {
        border: 0;
        padding: 0;
    }

    .proficiency-table tfoot td[data-label]::after {
        content: " " attr(data-label);
        color: var(--ink-500);
        font-size: var(--t-100);
    }

    .proficiency-table tfoot td:empty {
        display: none;
    }

    .record-table {
        border: 0;
        overflow: visible;
    }

    .record-table table, .record-table tbody {
        display: block;
        min-width: 0;
        width: 100%;
    }

    .record-table thead {
        position: absolute;
        width: 1px;
        height: 1px;
        overflow: hidden;
        clip-path: inset(50%);
    }

    .record-table tbody tr {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: var(--u3);
        padding: var(--u4) 0;
        border-bottom: var(--hairline);
    }

    .record-table tbody th {
        grid-column: 1 / -1;
        display: flex;
        align-items: center;
        gap: var(--u2);
        padding: 0;
        border: 0;
        background: none;
    }

    .record-table tbody tr td {
        padding: 0;
        border: 0;
        background: none;
        text-align: left;
    }

    .record-table td::before {
        content: attr(data-label);
        display: block;
        color: var(--ink-500);
        font-size: var(--t-100);
    }

    .record-table td[colspan] {
        grid-column: 1 / -1;
    }

    .plan-controls {
        grid-template-columns: minmax(0, 1fr);
    }

    .plan-sessions-block .row-list .row {
        grid-template-columns: minmax(0, 1fr) auto;
    }

    .plan-sessions-block .row .row-name {
        grid-column: 1;
    }

    .plan-session-mode {
        grid-column: 1;
        grid-row: 2;
    }

    .plan-sessions-block .row-action {
        grid-column: 2;
        grid-row: 1 / 3;
    }
}

@media all and (max-width: 560px) {
    .quick-add {
        padding: var(--u4) var(--u2);
    }

    .quick-panel {
        max-height: calc(100vh - var(--u8));
    }

    .quick-header,
    .quick-value-stage {
        padding-left: var(--u3);
        padding-right: var(--u3);
    }

    .quick-search {
        margin-left: var(--u3);
        margin-right: var(--u3);
    }

    .quick-option {
        grid-template-columns: minmax(0, 1fr) auto;
        padding-left: var(--u3);
        padding-right: var(--u3);
    }

    .quick-option .quick-value {
        grid-column: 1 / -1;
    }
}

@media (pointer: coarse) {
    .session-keyboard-hint {
        display: none;
    }

    .tracker-controls > .segmented .segmented-button,
    .filter-strip select,
    .filter-toggle, .active-filter, .text-action {
        min-height: 44px;
    }


    .bookmark-toggle {
        min-width: 44px;
        min-height: 44px;
    }
}

@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        transition-duration: 0.01ms !important;
    }
}

/* Compact local tools share the existing form controls and result tables. */
.tool-fields {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
    gap: var(--u3);
    margin-bottom: var(--u3);
}
.tool-field {
    display: grid;
    gap: var(--u1);
    min-width: 0;
}
.tool-field input:not([type="checkbox"]) {
    width: 100%;
    min-width: 0;
}
.tool-results {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
    gap: var(--u3);
    margin-block: var(--u4);
}
.tool-results dd {
    margin: 0;
    font-variant-numeric: tabular-nums;
}

#morningLog {
    display: block;
    width: 100%;
    margin-bottom: var(--u3);
}
