/* ===== BASE ===== */
* { box-sizing: border-box; }

html, body {
    margin: 0;
    background: var(--bg);
    color: var(--ink);
    font-family: var(--font-body);
    font-size: var(--fs-md);
    line-height: var(--lh-body);
    letter-spacing: var(--tr-body);
    -webkit-font-smoothing: antialiased;
}

a { color: inherit; }

h1, h2, h3, h4 {
    font-family: var(--font-display);
    font-weight: var(--wt-display);
    letter-spacing: var(--tr-display);
    margin: 0;
    line-height: var(--lh-snug);
}

p { margin: 0 0 var(--sp-3); max-width: 64ch; }

.display {
    font-size: var(--fs-disp);
    line-height: var(--lh-tight);
}
.lead {
    font-size: var(--fs-lg);
    line-height: 1.35;
    max-width: 60ch;
}
.mono {
    font-family: var(--font-mono);
}

/* ===== TOPBAR ===== */
.topbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: var(--sp-2) var(--sp-4);
    border-bottom: var(--rule-thick) solid var(--ink);
    background: var(--bg);
    position: sticky;
    top: 0;
    z-index: 10;
}

.brand {
    display: flex;
    align-items: center;
    gap: var(--sp-1);
    font-family: var(--font-display);
    font-weight: var(--wt-display);
    text-transform: uppercase;
    letter-spacing: 0.02em;
    font-size: var(--fs-md);
}
.brand-mark {
    width: 18px;
    height: 18px;
    background: var(--accent);
    display: inline-block;
}

.topnav {
    display: flex;
    gap: var(--sp-3);
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
}
.topnav a {
    text-decoration: none;
    padding: 4px 0;
    border-bottom: var(--rule) solid transparent;
}
.topnav a.active,
.topnav a:hover {
    border-bottom-color: var(--accent);
}

/* ===== LAYOUT ===== */
.canvas {
    max-width: 1100px;
    margin: 0 auto;
    padding: var(--sp-6) var(--sp-4) var(--sp-12);
}

.section {
    padding: var(--sp-8) 0;
    border-top: var(--rule-thick) solid var(--ink);
}
.section:first-of-type { border-top: 0; padding-top: var(--sp-4); }

.eyebrow {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    color: var(--muted);
    display: flex;
    align-items: center;
    gap: var(--sp-1);
    margin-bottom: var(--sp-3);
}
.eyebrow .num {
    background: var(--ink);
    color: var(--bg);
    padding: 2px 6px;
    font-weight: var(--wt-strong);
}
.eyebrow .num.accent {
    background: var(--accent);
    color: var(--accent-ink);
}

.row { display: flex; gap: var(--sp-2); flex-wrap: wrap; align-items: center; }
.stack > * + * { margin-top: var(--sp-2); }
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-3); }
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-3); }
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--sp-2); }

.stripe {
    height: var(--rule-thick);
    background: var(--ink);
    margin: var(--sp-3) 0;
}
.stripe.accent { background: var(--accent); }

/* ===== HERO ===== */
.hero h1 {
    font-size: var(--fs-disp);
    line-height: var(--lh-tight);
    margin: 0 0 var(--sp-3);
}
.hero .meta {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    color: var(--muted);
    display: flex;
    gap: var(--sp-3);
    margin-bottom: var(--sp-2);
}

/* ===== TYPE SCALE ===== */
.scale-row {
    display: grid;
    grid-template-columns: 60px 80px 1fr;
    gap: var(--sp-2);
    align-items: baseline;
    padding: var(--sp-1) 0;
    border-bottom: var(--rule) solid var(--ink);
}
.scale-row .label,
.scale-row .px {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    color: var(--muted);
    letter-spacing: var(--tr-caption);
    text-transform: uppercase;
}
.scale-row .sample {
    font-family: var(--font-display);
    font-weight: var(--wt-display);
    line-height: var(--lh-snug);
    letter-spacing: var(--tr-display);
}

/* ===== PALETTE ===== */
.swatches {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: var(--sp-2);
}
.swatch {
    aspect-ratio: 1;
    border: var(--rule) solid var(--ink);
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: var(--sp-1);
}
.swatch .tag {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    background: var(--ink);
    color: var(--bg);
    padding: 2px 6px;
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    align-self: flex-start;
}
.swatch .hex {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    color: var(--ink);
    margin-top: auto;
    background: var(--bg);
    padding: 1px 4px;
    align-self: flex-start;
}

/* ===== BUTTONS ===== */
.btn {
    font-family: var(--font-display);
    font-weight: var(--wt-strong);
    font-size: var(--fs-md);
    letter-spacing: 0.04em;
    text-transform: uppercase;
    padding: 10px 18px;
    border: var(--rule) solid var(--ink);
    background: var(--bg);
    color: var(--ink);
    cursor: pointer;
    border-radius: var(--radius);
    line-height: 1;
    transition: transform 80ms ease, box-shadow 80ms ease;
}
.btn:hover {
    transform: translate(-2px, -2px);
    box-shadow: 4px 4px 0 var(--ink);
}
.btn:active { transform: translate(0, 0); box-shadow: 0 0 0 var(--ink); }

.btn.primary { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }
.btn.primary:hover { box-shadow: 4px 4px 0 var(--ink); }

.btn.ghost { background: transparent; border-color: transparent; }
.btn.ghost:hover { border-color: var(--ink); }

.btn.sm { padding: 6px 12px; font-size: var(--fs-sm); }
.btn.lg { padding: 14px 24px; font-size: var(--fs-lg); }

/* ===== INPUTS ===== */
.field { display: flex; flex-direction: column; gap: 4px; }
.field label {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    color: var(--muted);
}
.input, .select, .textarea {
    font-family: var(--font-body);
    font-size: var(--fs-md);
    padding: 10px 12px;
    border: var(--rule) solid var(--ink);
    background: var(--bg);
    color: var(--ink);
    border-radius: var(--radius);
    width: 100%;
}
.input:focus, .select:focus, .textarea:focus {
    outline: 0;
    box-shadow: inset 0 0 0 var(--rule) var(--accent);
    border-color: var(--accent);
}
.textarea { resize: vertical; min-height: 96px; font-family: inherit; }
.select { appearance: none; background-image: linear-gradient(45deg, transparent 50%, var(--ink) 50%), linear-gradient(-45deg, transparent 50%, var(--ink) 50%); background-position: calc(100% - 18px) 50%, calc(100% - 12px) 50%; background-size: 6px 6px; background-repeat: no-repeat; padding-right: 32px; }

.check, .radio {
    display: inline-flex;
    align-items: center;
    gap: var(--sp-1);
    cursor: pointer;
    font-family: var(--font-body);
    font-size: var(--fs-md);
    user-select: none;
}
.check input, .radio input { display: none; }
.check .box, .radio .box {
    width: 22px;
    height: 22px;
    border: var(--rule) solid var(--ink);
    background: var(--bg);
    display: grid;
    place-items: center;
    flex-shrink: 0;
}
.check input:checked + .box::after {
    content: "";
    width: 12px;
    height: 12px;
    background: var(--accent);
}
.radio input:checked + .box::after {
    content: "";
    width: 10px;
    height: 10px;
    background: var(--ink);
}

.toggle {
    display: inline-flex;
    align-items: center;
    gap: var(--sp-1);
    cursor: pointer;
    user-select: none;
}
.toggle input { display: none; }
.toggle .track {
    width: 48px;
    height: 24px;
    border: var(--rule) solid var(--ink);
    background: var(--bg);
    position: relative;
}
.toggle .track::after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 20px;
    height: 20px;
    background: var(--ink);
    transition: transform 120ms ease, background 120ms ease;
}
.toggle input:checked + .track::after {
    transform: translateX(24px);
    background: var(--accent);
}

/* ===== CARDS ===== */
.card {
    border: var(--rule) solid var(--ink);
    padding: var(--sp-3);
    background: var(--surface);
    border-radius: var(--radius);
}
.card.thick { border-width: var(--rule-thick); }
.card.inverse { background: var(--ink); color: var(--bg); }
.card.inverse .kicker { color: var(--accent); }
.card .kicker {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    color: var(--muted);
    margin-bottom: var(--sp-1);
}
.card .stat {
    font-family: var(--font-display);
    font-size: var(--fs-2xl);
    font-weight: var(--wt-display);
    line-height: 1;
    letter-spacing: var(--tr-display);
}
.card .delta {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    margin-top: var(--sp-2);
}
.delta.up   { color: var(--ink); }
.delta.down { color: var(--accent); }

.card fjord-spark {
    display: block;
    width: 100%;
    height: 28px;
    margin: var(--sp-1) 0 var(--sp-1);
}
.card.inverse fjord-spark .fjsp-line { stroke: var(--bg); }
.card.inverse fjord-spark .fjsp-area { fill: var(--bg); fill-opacity: 0.14; }
.card.inverse fjord-spark .fjsp-now  { stroke: var(--accent); }

/* ===== TABLE ===== */
table.data {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--fs-md);
    border-top: var(--rule-thick) solid var(--ink);
    border-bottom: var(--rule-thick) solid var(--ink);
}
table.data th {
    text-align: left;
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    color: var(--muted);
    padding: var(--sp-2) var(--sp-2);
    border-bottom: var(--rule) solid var(--ink);
    font-weight: var(--wt-strong);
}
table.data td {
    padding: var(--sp-2) var(--sp-2);
    border-bottom: var(--rule) solid var(--ink);
}
table.data tr:last-child td { border-bottom: 0; }
table.data td.num {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    text-align: right;
}

/* ===== BADGES ===== */
.badge {
    display: inline-flex;
    align-items: center;
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    padding: 2px 8px;
    border: var(--rule) solid var(--ink);
    background: var(--bg);
    color: var(--ink);
    line-height: 1.5;
}
.badge.solid { background: var(--ink); color: var(--bg); }
.badge.accent { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }
.badge.outline { background: transparent; }
.badge .dot {
    display: inline-block;
    width: 6px;
    height: 6px;
    background: currentColor;
    margin-right: 6px;
}

/* ===== CALLOUT ===== */
.callout {
    display: grid;
    grid-template-columns: var(--rule-thick) 1fr;
    background: var(--surface);
    border-top: var(--rule) solid var(--ink);
    border-right: var(--rule) solid var(--ink);
    border-bottom: var(--rule) solid var(--ink);
}
.callout .bar { background: var(--ink); }
.callout.accent .bar { background: var(--accent); }
.callout .body { padding: var(--sp-2) var(--sp-3); }
.callout .title {
    font-family: var(--font-display);
    font-weight: var(--wt-display);
    font-size: var(--fs-md);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-bottom: 4px;
}
.callout .body p { margin: 0; max-width: none; }

/* ===== TABS ===== */
.tabs {
    display: flex;
    border-bottom: var(--rule-thick) solid var(--ink);
}
.tabs .tab {
    font-family: var(--font-display);
    font-weight: var(--wt-strong);
    font-size: var(--fs-md);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    padding: var(--sp-2) var(--sp-3);
    border: var(--rule) solid var(--ink);
    border-bottom: 0;
    background: var(--bg);
    color: var(--ink);
    cursor: pointer;
    margin-right: -2px;
    position: relative;
    bottom: calc(var(--rule-thick) * -1);
}
.tabs .tab.active {
    background: var(--ink);
    color: var(--bg);
}
.tab-panel {
    padding: var(--sp-3);
    border: var(--rule) solid var(--ink);
    border-top: 0;
    background: var(--surface);
}

/* ===== LISTS ===== */
.list {
    margin: 0;
    padding: 0;
    list-style: none;
    border-left: var(--rule-thick) solid var(--ink);
}
.list li {
    padding: 6px var(--sp-2);
    border-bottom: var(--rule) solid var(--ink);
    font-size: var(--fs-md);
}
.list li:last-child { border-bottom: 0; }
.list.numbered { counter-reset: c; }
.list.numbered li {
    counter-increment: c;
    display: grid;
    grid-template-columns: 32px 1fr;
    gap: var(--sp-1);
}
.list.numbered li::before {
    content: counter(c, decimal-leading-zero);
    font-family: var(--font-mono);
    color: var(--accent);
    font-weight: var(--wt-strong);
}

/* ===== CODE ===== */
pre.code {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    background: var(--ink);
    color: var(--bg);
    padding: var(--sp-3);
    margin: 0;
    overflow-x: auto;
    border-radius: var(--radius);
    line-height: 1.6;
}
pre.code .c { color: var(--muted); }
pre.code .k { color: var(--accent); }

/* ===== BREADCRUMBS ===== */
.crumbs {
    display: flex;
    align-items: center;
    gap: var(--sp-1);
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
}
.crumbs a { text-decoration: none; color: var(--muted); }
.crumbs a:hover { color: var(--ink); }
.crumbs .sep { color: var(--muted); }
.crumbs .current { color: var(--ink); font-weight: var(--wt-strong); }

/* ===== PAGINATION ===== */
.pager {
    display: flex;
    gap: 0;
    align-items: stretch;
}
.pager .page {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    padding: 8px 14px;
    border: var(--rule) solid var(--ink);
    background: var(--bg);
    color: var(--ink);
    cursor: pointer;
    margin-right: -2px;
    line-height: 1;
}
.pager .page:hover { background: var(--surface); }
.pager .page.active { background: var(--ink); color: var(--bg); }
.pager .page.ellipsis { cursor: default; background: transparent; border-color: transparent; padding: 8px 4px; }

/* ===== PROGRESS ===== */
.progress {
    display: block;
    height: 12px;
    border: var(--rule) solid var(--ink);
    background: var(--bg);
    position: relative;
}
.progress > .bar {
    height: 100%;
    background: var(--accent);
    transition: width 200ms ease;
}
.progress.thick { height: 22px; border-width: 4px; }

/* ===== STEPPER ===== */
.stepper {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: 1fr;
    gap: 0;
    position: relative;
}
.step {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--sp-1);
    padding: 0 var(--sp-2);
    border-top: var(--rule-thick) solid var(--ink);
    position: relative;
}
.step .num {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: var(--wt-strong);
    background: var(--bg);
    color: var(--muted);
    border: var(--rule) solid var(--ink);
    padding: 4px 8px;
    margin-top: -14px;
    letter-spacing: var(--tr-caption);
}
.step .name {
    font-family: var(--font-display);
    font-weight: var(--wt-strong);
    font-size: var(--fs-md);
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.step .desc {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
}
.step.done .num     { background: var(--ink);    color: var(--bg); }
.step.active        { border-top-color: var(--accent); }
.step.active .num   { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }

/* ===== AVATARS ===== */
.avatars { display: inline-flex; }
.avatar {
    width: 40px;
    height: 40px;
    border: var(--rule) solid var(--ink);
    background: var(--surface);
    color: var(--ink);
    display: grid;
    place-items: center;
    font-family: var(--font-display);
    font-weight: var(--wt-strong);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-left: -2px;
}
.avatar:first-child { margin-left: 0; }
.avatar.accent { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }
.avatar.ink    { background: var(--ink);    color: var(--bg); }
.avatar.lg { width: 56px; height: 56px; font-size: var(--fs-md); }

/* ===== TOOLTIP ===== */
[data-tip] { position: relative; }
[data-tip]:hover::after,
[data-tip]:focus::after {
    content: attr(data-tip);
    position: absolute;
    bottom: calc(100% + 8px);
    left: 50%;
    transform: translateX(-50%);
    background: var(--ink);
    color: var(--bg);
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    padding: 4px 8px;
    white-space: nowrap;
    z-index: 5;
    pointer-events: none;
}

/* ===== BAR CHART ===== */
.chart {
    display: flex;
    flex-direction: column;
    gap: var(--sp-1);
}
.chart .row {
    display: grid;
    grid-template-columns: 60px 1fr 80px;
    gap: var(--sp-2);
    align-items: center;
}
.chart .row .lbl {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    color: var(--muted);
}
.chart .row .track {
    height: 18px;
    border: var(--rule) solid var(--ink);
    background: var(--bg);
    position: relative;
}
.chart .row .fill {
    height: 100%;
    background: var(--ink);
}
.chart .row.peak .fill { background: var(--accent); }
.chart .row .val {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-align: right;
    font-variant-numeric: tabular-nums;
}

/* ===== EMPTY STATE ===== */
.empty {
    border: var(--rule-thick) solid var(--ink);
    padding: var(--sp-6) var(--sp-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--sp-2);
    text-align: center;
    background: var(--bg);
}
.empty .glyph {
    width: 72px;
    height: 72px;
    line-height: 48px;
    border: var(--rule-thick) solid var(--ink);
    display: grid;
    place-items: center;
    font-family: var(--font-display);
    font-size: var(--fs-2xl);
    font-weight: var(--wt-display);
    margin-bottom: var(--sp-1);
}
.empty h4 {
    font-family: var(--font-display);
    font-size: var(--fs-xl);
    font-weight: var(--wt-display);
    letter-spacing: var(--tr-display);
}
.empty p {
    color: var(--muted);
    margin-bottom: var(--sp-2);
    max-width: 40ch;
}

/* ===== MODAL ===== */
.overlay {
    position: fixed;
    inset: 0;
    background: rgba(22, 19, 15, 0.55);
    display: none;
    align-items: center;
    justify-content: center;
    z-index: 50;
    padding: var(--sp-4);
}
.overlay.open { display: flex; }
.dialog {
    background: var(--bg);
    border: var(--rule-thick) solid var(--ink);
    max-width: 480px;
    width: 100%;
}
.dialog .head {
    background: var(--ink);
    color: var(--bg);
    padding: var(--sp-2) var(--sp-3);
    font-family: var(--font-display);
    font-weight: var(--wt-display);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.dialog .head .x {
    background: transparent;
    border: 0;
    color: var(--bg);
    font-family: var(--font-mono);
    font-size: var(--fs-lg);
    cursor: pointer;
    line-height: 1;
    padding: 0 4px;
}
.dialog .body { padding: var(--sp-3); }
.dialog .actions {
    display: flex;
    gap: var(--sp-1);
    padding: var(--sp-2) var(--sp-3);
    border-top: var(--rule) solid var(--ink);
    justify-content: flex-end;
}

/* ===== FOOTER ===== */
.foot {
    border-top: var(--rule-thick) solid var(--ink);
    padding: var(--sp-4);
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    text-transform: uppercase;
    letter-spacing: var(--tr-caption);
    color: var(--muted);
    display: flex;
    justify-content: space-between;
    align-items: center;
}