* {
    box-sizing: border-box;
}

body {
    margin: 0;
    color: var(--page-fg);
    font-family: var(--font-sans);
    font-size: 1rem;
    line-height: 1.5;
    font-variant-numeric: tabular-nums;
}

h1, h2, h3, p {
    margin: 0;
}

h1 { font-size: 2rem; font-weight: 500; line-height: 1.25; }
h2 { font-size: 1.25rem; font-weight: 500; }
h3 { font-size: 1rem; font-weight: 500; }
p { max-width: 72ch; }
a { color: var(--accent-text); text-underline-offset: 0.2em; }

:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: var(--space-4);
}

.skip-link {
    position: fixed;
    inset-block-start: var(--space-8);
    inset-inline-start: var(--page-gutter);
    z-index: 3;
    transform: translateY(-200%);
    padding: var(--space-8) var(--space-16);
    background: var(--panel);
    color: var(--text);
    border-radius: var(--radius-widget);
}

.skip-link:focus { transform: translateY(0); }

.top-band {
    position: fixed;
    inset: 0 0 auto;
    z-index: 2;
    background: var(--page-bg);
    color: var(--page-fg);
}

.top-band-inner {
    max-width: 1152px;
    height: var(--space-64);
    padding-inline: var(--page-gutter);
    margin-inline: auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-24);
}

.product-name { font-weight: 700; white-space: nowrap; }
.product-name span { margin-inline-start: var(--space-8); font-weight: 400; }
.navigation { display: flex; gap: var(--space-20); overflow-x: auto; }
.navigation a {
    padding-block: var(--space-12);
    color: var(--page-fg);
    white-space: nowrap;
    text-decoration: none;
}
.navigation a[aria-current="page"] { border-block-end: 3px solid var(--accent); }
.navigation a:hover { text-decoration: underline; }

.page-column {
    max-width: 1152px;
    margin-inline: auto;
    padding: calc(var(--space-64) + var(--space-32)) var(--page-gutter) var(--space-64);
    display: grid;
    gap: var(--space-24);
    scroll-margin-block-start: calc(var(--space-64) + var(--space-16));
}
.page-heading { display: grid; gap: var(--space-8); }
.card {
    min-width: 0;
    padding: var(--space-24);
    background: var(--panel);
    color: var(--text);
    border: 1px solid var(--border);
    border-radius: var(--radius-window);
}
.card-heading { display: grid; gap: var(--space-4); margin-block-end: var(--space-20); }
.caption, .field-hint { color: var(--text-muted); font-size: 0.875rem; }
.example-stack { display: grid; gap: var(--space-16); }
.example-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-12); }
.guide-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-24); }

.table-scroll { overflow-x: auto; }
.data-table { width: 100%; border-collapse: collapse; text-align: start; }
.data-table caption { text-align: start; color: var(--text-muted); padding-block-end: var(--space-12); }
.data-table th { font-weight: 500; text-align: inherit; }
.data-table th, .data-table td { padding: var(--space-12) var(--space-16); }
.data-table thead { background: var(--raised); color: var(--text); }
.data-table tbody tr { border-block-start: 1px solid var(--divider); }
.data-table tbody tr:hover { background: var(--row-hover); }
.data-table tbody tr:active { background: var(--row-active); }
.data-table .numeric { text-align: end; white-space: nowrap; }
/* A stripe and the written state keep status readable without colour perception. */
.data-table tr[data-state] > :first-child { border-inline-start: 3px solid var(--state-stripe); }
.chip {
    display: inline-flex;
    align-items: center;
    padding: var(--space-4) var(--space-12);
    border-inline-start: 3px solid var(--state-stripe);
    border-radius: var(--radius-pill);
    background: var(--raised);
    /* Raised surfaces carry meaning through the stripe and word, not accent ink. */
    color: var(--text);
    font-size: 0.875rem;
    white-space: nowrap;
}
.chip-open, [data-state="open"] { --state-stripe: var(--border-strong); }
.chip-writing, [data-state="writing"] { --state-stripe: var(--accent); }
.chip-review, [data-state="review"] { --state-stripe: var(--info-text); }
.chip-edits, [data-state="edits"] { --state-stripe: var(--warning-text); }
.chip-verify, [data-state="verify"] { --state-stripe: var(--info-text); }
.chip-testing, [data-state="testing"], .chip-dev2, [data-state="dev2"] { --state-stripe: var(--accent); }
.chip-blocked, [data-state="blocked"] { --state-stripe: var(--error-text); }
.chip-done, [data-state="done"] { --state-stripe: var(--success-text); }

.button {
    display: inline-flex;
    justify-content: center;
    align-items: center;
    min-height: var(--space-40);
    padding: var(--space-8) var(--space-16);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-widget);
    background: var(--raised);
    color: var(--text);
    font: inherit;
    font-weight: 500;
    text-decoration: none;
    cursor: pointer;
    transition: background-color var(--duration-fast) var(--easing), border-color var(--duration-fast) var(--easing);
}
.button:hover { background: var(--row-hover); }
.button:active { background: var(--row-active); }
.button-primary { background: var(--accent-filled-bg); border-color: var(--accent-filled-bg); color: var(--accent-filled-fg); }
/* Raw hover and active fills would undo the filled label's contrast correction. */
.button-primary:hover { background: var(--accent-filled-bg); border-color: var(--accent-hover); }
.button-primary:active { background: var(--accent-filled-bg); border-color: var(--accent-active); }
.button-secondary { background: var(--panel); }
.button-quiet { background: var(--panel); border: 0; }
.button:disabled { background: var(--raised); border-color: var(--border); color: var(--text-disabled); cursor: default; }

.budget { display: grid; gap: var(--space-8); }
.budget-label { display: flex; justify-content: space-between; gap: var(--space-16); }
.budget-bar {
    appearance: none;
    width: 100%;
    height: var(--space-8);
    border: 0;
    border-radius: var(--radius-pill);
    overflow: hidden;
    background: var(--raised);
    color: var(--accent);
    accent-color: var(--accent);
}
.budget-bar::-webkit-progress-bar { background: var(--raised); border-radius: var(--radius-pill); }
.budget-bar::-webkit-progress-value { background: var(--accent); border-radius: var(--radius-pill); }
.budget-bar::-moz-progress-bar { background: var(--accent); border-radius: var(--radius-pill); }

.field { display: grid; gap: var(--space-8); }
.field label { font-weight: 500; }
.field-input {
    width: 100%;
    min-width: 0;
    min-height: var(--space-40);
    padding: var(--space-8) var(--space-12);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-widget);
    background: var(--window);
    color: var(--text);
    font: inherit;
}
textarea.field-input { resize: vertical; }
.field-input::placeholder { color: var(--text-muted); opacity: 1; }
.field-input:disabled { background: var(--raised); color: var(--text-disabled); }
.field-input[aria-invalid="true"] { border-color: var(--error-text); }
.validation-message { color: var(--error-text); font-size: 0.875rem; }
.empty-state { display: grid; justify-items: center; gap: var(--space-8); padding: var(--space-32) var(--space-16); text-align: center; }
.model-name { font-family: var(--font-mono); font-size: 0.875em; overflow-wrap: anywhere; }
::selection { background: var(--accent-soft); }

@media (max-width: 640px) {
    .top-band-inner { height: calc(var(--space-64) + var(--space-40)); flex-direction: column; align-items: stretch; justify-content: center; gap: 0; }
    .product-name { font-size: 0.875rem; }
    .page-column { padding-block-start: calc(var(--space-64) + var(--space-64)); scroll-margin-block-start: calc(var(--space-64) + var(--space-64)); }
    .guide-grid { grid-template-columns: minmax(0, 1fr); }
    .card { padding: var(--space-16); }
}

@media (prefers-reduced-motion: reduce) {
    .button { transition: none; }
}

/* The sidebar replaces the top band without changing the standalone component examples. */
.dashboard-shell {
    display: grid;
    grid-template-columns: 220px minmax(0, 1fr);
    min-height: 100vh;
}
.sidebar {
    position: sticky;
    top: 0;
    height: 100vh;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: var(--space-24);
    padding: var(--space-20) var(--space-12);
    background: var(--panel);
    color: var(--text);
    border-inline-end: 1px solid var(--border);
}
.sidebar .product-name { font-size: 15px; font-weight: 600; white-space: normal; }
.sidebar .product-name span { display: block; margin: 0; font-weight: inherit; }
.sidebar-navigation { display: flex; flex-direction: column; gap: var(--space-4); }
.nav-item { position: relative; flex-shrink: 0; }
.nav-icon {
    position: absolute;
    inset-inline-start: var(--space-12);
    top: 14px;
    width: 18px;
    height: 18px;
    stroke: var(--text-muted);
    stroke-width: 1.5;
    pointer-events: none;
}
.sidebar-navigation a {
    display: flex;
    align-items: center;
    gap: var(--space-8);
    min-height: 46px;
    padding: var(--space-12) var(--space-8) var(--space-12) var(--space-40);
    border-inline-start: 3px solid var(--border);
    border-radius: var(--radius-small);
    color: var(--text);
    font-size: 0.875rem;
    font-weight: 400;
    text-decoration: none;
    white-space: nowrap;
}
.sidebar-navigation a:hover { background: var(--row-hover); }
.sidebar-navigation a:focus-visible { outline-color: var(--border-strong); outline-offset: 0; }
/* Accent ink failed on raised surfaces; the stripe and weight carry selection together. */
.sidebar-navigation a[aria-current="page"] {
    background: var(--raised);
    color: var(--text);
    border-inline-start: 3px solid var(--accent);
    font-weight: 600;
}
.nav-count {
    margin-inline-start: auto;
    padding-inline: var(--space-8);
    border-radius: var(--radius-pill);
    background: var(--raised);
    color: var(--text);
    font-size: 0.75rem;
}
.sidebar-account { display: grid; gap: var(--space-8); font-size: 0.875rem; overflow-wrap: anywhere; }
.sidebar-footer { margin-block-start: auto; color: var(--text-muted); font-size: 0.75rem; overflow-wrap: anywhere; }
.sidebar-footer p + p { margin-block-start: var(--space-8); }
.project-picker-trigger { display: grid; justify-content: stretch; width: 100%; text-align: start; }
.project-picker-trigger span { overflow-wrap: anywhere; }
.project-picker {
    position: fixed;
    inset: 0;
    width: min(32rem, calc(100% - var(--space-32)));
    max-height: calc(100% - var(--space-32));
    margin: auto;
    padding: var(--space-24);
    overflow-y: auto;
    background: var(--panel);
    color: var(--text);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-window);
}
.project-picker::backdrop { background: var(--page-bg); opacity: 0.7; }
/* A closed native dialog otherwise hides the real links from script-free navigation. */
.project-picker:target:not([data-enhanced]) { display: block; z-index: 4; }
.project-picker-heading { display: flex; align-items: center; justify-content: space-between; gap: var(--space-16); margin-block-end: var(--space-20); }
.project-picker .sidebar-navigation { flex-direction: column; overflow: visible; }
.project-picker .sidebar-navigation a { padding-inline-start: var(--space-12); white-space: normal; overflow-wrap: anywhere; }
.dashboard-shell > .page-column {
    width: 100%;
    min-width: 0;
    align-content: start;
    padding-block-start: var(--space-32);
    scroll-margin-block-start: var(--space-16);
}
@media (max-width: 640px) {
    .dashboard-shell { grid-template-columns: minmax(0, 1fr); }
    .sidebar { position: static; height: auto; min-width: 0; gap: var(--space-12); border-inline-end: 0; border-block-end: 1px solid var(--border); }
    /* Real links stay available when scripts fail; overflow keeps all future destinations reachable. */
    .sidebar-navigation { flex-direction: row; overflow-x: auto; padding-block: var(--space-4); }
    .sidebar-account { display: flex; flex-wrap: wrap; align-items: center; }
    .sidebar-footer { margin-block-start: 0; }
}
