/* ============================================================
   MARKET DESK + ARTICLES (market-updates.html, article.html and
   every generated /market/<slug>/ page). Loaded after site.css and
   services.css (the .k-* kit); everything here is prefixed .desk-* /
   .art-* so no other page changes. Behavior: assets/market-pages.js.
   Built 2026-10-09 on the kit: compact data hero, sticky category bar,
   paper feed beside one dark "conditions" slab, article measure 35em
   (about 70 characters a line; was 68ch = ~100 in Sora, see READING COLUMN).

   DESK (market-updates.html)
     section.k-hero-data.desk-hero     1. still + loop, h1, KPI tiles (30Y/15Y/10Y/Case-Shiller),
                                          the rates wire (.ticker) along the foot
     section.desk#desk                 2. sticky .k-filters.desk-filters (category chips with counts,
                                          deep-linked ?cat=) + .desk-grid:
       .desk-main                         feed head (h2 + search pill), featured story (.desk-feat),
                                          card grid (.k-article cards, 10 at a time + "Show more"),
                                          .k-empty when a search finds nothing
       aside.desk-rail#conditions         one dark slab: Financing (30Y, WoW chip, 26-week spark,
                                          15Y + 10Y rows, calculator link), Miami prices (Case-Shiller
                                          YoY + 24-month spark), Brickell pulse (MLS medians)
     section.lead-band.desk-nl#subscribe 3. The Miami Read: portrait quote + one-field signup
   ARTICLE (article.html + market/**)
     section.art#article                1. crumbs, .k-art-head (meta, h1, lede, byline), .k-art-cover
                                          with the credit line, .k-prose#a-body (the blocks), .ab-note,
                                          .k-share, .k-author
     section.lead-band.art-ask#ask      2. ask about this story (WhatsApp / iMessage prefilled with
                                          the headline) | The Miami Read signup
     section.k-alt.art-more#more-sec    3. keep reading (3 .k-article cards) + newer / older pager
   ============================================================ */

/* ---------- shared ---------- */
.desk-page .ticker, .art-page .ticker { padding-block: 11px; }
@media (prefers-reduced-motion: reduce) { .desk-page .ticker-track { animation: none; } }
/* kit card family tweaks for story cards */
.k-article .k-card-img, .desk-feat .k-card-img { margin: 0; }
.k-article .k-card-img .k-status.is-hot, .desk-feat .k-card-img .k-status.is-hot { background: var(--amber); color: var(--ink); border-color: var(--amber); }
.k-article .k-article-meta .rt { font-size: 12px; font-weight: 600; color: var(--k-dim); white-space: nowrap; }
.k-article .k-card-body { gap: 7px; }
.k-article h3 { font-size: 1.04rem; }

/* inline newsletter form (dark band). Uses site.css .field for the input look. */
.nl-inline { display: flex; flex-direction: column; background: var(--term-panel); border: 1px solid var(--term-line); border-radius: var(--radius); padding: clamp(22px, 3vw, 32px); position: relative; }
.nl-inline::before, .nl-inline::after { content: ''; position: absolute; width: 12px; height: 12px; border-color: rgba(242,179,54,.6); border-style: solid; }
.nl-inline::before { top: -1px; left: -1px; border-width: 1.5px 0 0 1.5px; border-top-left-radius: var(--radius); }
.nl-inline::after { top: -1px; right: -1px; border-width: 1.5px 1.5px 0 0; border-top-right-radius: var(--radius); }
.nl-inline .nl-k { font-size: 11px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--amber); }
.nl-inline h3 { margin-top: 8px; font-size: 1.35rem; color: #fff; letter-spacing: -.02em; line-height: 1.2; }
.nl-inline > p { margin-top: 8px; font-size: 14px; line-height: 1.6; color: var(--term-text); }
.nl-inline .nl-gets { list-style: none; padding: 0; margin: 16px 0 18px; display: grid; gap: 8px; }
.nl-inline .nl-gets li { position: relative; padding-left: 24px; font-size: 13.5px; line-height: 1.5; color: var(--term-text); }
.nl-inline .nl-gets li::before { content: ''; position: absolute; left: 0; top: 3px; width: 15px; height: 15px; border-radius: 50%; background: var(--amber) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.6 6.2l2.2 2.2 4.6-4.8' fill='none' stroke='%23101114' stroke-width='1.7'/%3E%3C/svg%3E") center / 9px no-repeat; }
.nl-inline .nl-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: start; }
.nl-inline .field { margin-bottom: 0; }
.nl-inline .btn { white-space: nowrap; min-height: 50px; }
.nl-inline .nl-fine { margin-top: 12px; font-size: 12px; line-height: 1.55; color: var(--term-dim); }
.nl-inline .nl-msg { margin-top: 10px; }
.nl-inline input[name="_gotcha"] { position: absolute; left: -9999px; }
@media (max-width: 520px) { .nl-inline .nl-row { grid-template-columns: minmax(0, 1fr); } .nl-inline .btn { width: 100%; justify-content: center; } }

/* ============================================================
   DESK HERO
   ============================================================ */
.desk-hero .k-hero-in { min-height: min(50vh, 500px); }
/* four tiles: two by two, so "7.40%" never wraps inside a 100 px tile */
.desk-hero .k-hero-side .k-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.desk-hero .k-hero-side .k-kpi .v { white-space: nowrap; overflow-wrap: normal; }
.desk-hero .k-hero-side .k-kpi .d { margin-top: 6px; }
.desk-hero .k-hero-side .k-kpi .v small { font-size: .5em; }
.desk-hero .k-hero-side .k-kpi .m { margin-top: 5px; }
.desk-hero .ticker { border-top: 1px solid rgba(255,255,255,.14); display: block; color: rgba(255,255,255,.72); text-decoration: none; font-size: 12px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }
.desk-hero .ticker:hover { color: #fff; }

/* ============================================================
   DESK: sticky category bar + feed + rail
   ============================================================ */
.desk { padding-bottom: clamp(56px, 7vw, 96px); }
/* the feed and the data desk are both paper: a full section pad on each side stacked to 192px of
   blank at 1440 (104px on phones). One tight pad each side of a hairline instead. UX 2026-10-13 */
.desk:has(+ .desk-data) { padding-bottom: var(--sec-y-tight, 48px); }
.desk + .desk-data { padding-top: var(--sec-y-tight, 48px); border-top: 1px solid var(--hairline); }
/* minmax(0,1fr) + min-width:0: the body is a grid item, and its auto track would otherwise grow to the chips' min-content width (page overflow on phones) */
.desk-filters .k-filters-in { gap: 0; grid-template-columns: minmax(0, 1fr); }
.desk-filters .k-filters-row { display: none; }
.desk-filters .k-filters-body { min-width: 0; flex-direction: row; align-items: center; justify-content: space-between; gap: 10px 18px; }
.desk-filters .k-flbl { min-width: 0; }
.desk-filters .k-chips { gap: 7px; }
.desk-filters .k-count { flex: none; margin-left: auto; }
.desk-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(300px, 340px); gap: clamp(24px, 3.5vw, 44px); align-items: start; margin-top: clamp(28px, 4vw, 44px); }
.desk-main { min-width: 0; }
.desk-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 24px; margin-bottom: 20px; }
.desk-head h2 { font-size: clamp(1.4rem, 2.2vw, 1.75rem); letter-spacing: -.025em; }
.desk-head .k-search { flex: 0 1 320px; min-height: 42px; }
.desk-head .k-search input { font-size: 13.5px; }
.desk-head .k-search button { display: none; border: 0; background: none; padding: 4px; cursor: pointer; color: var(--k-dim); font-size: 14px; line-height: 1; }
.desk-head .k-search.has-q button { display: inline-flex; }

/* featured story: cover left, body right, on the paper surface */
.desk-feat { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); gap: 0; margin-bottom: 18px; background: var(--k-surface); border: 1px solid var(--k-line); border-radius: var(--radius); overflow: hidden; color: var(--k-text); text-decoration: none; transition: border-color .18s ease; }
.desk-feat:hover { border-color: var(--k-hover); }
/* no aspect-ratio here: a grid item with a ratio and a stretched height sizes its own width and overflows the column */
.desk-feat .k-card-img { aspect-ratio: auto; width: 100%; height: 100%; min-height: 280px; }
.desk-feat .k-card-body { padding: clamp(20px, 2.6vw, 32px); justify-content: center; gap: 10px; }
.desk-feat h2 { font-size: clamp(1.25rem, 2vw, 1.6rem); line-height: 1.22; letter-spacing: -.02em; text-wrap: balance; }
.desk-feat:hover h2 { text-decoration: underline; text-decoration-color: var(--amber); text-underline-offset: 4px; }
.desk-feat .dek { font-size: 14.5px; line-height: 1.6; color: var(--k-dim); display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.desk-feat .go { margin-top: 6px; font-size: 13.5px; font-weight: 700; }
.desk-feat .go span { display: inline-block; color: var(--k-accent); transition: transform .15s ease; }
.desk-feat:hover .go span { transform: translateX(4px); }
.desk-feat[hidden] { display: none; }

.desk-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.desk-cards > [hidden] { display: none; }
.desk-more { display: flex; justify-content: center; margin-top: 22px; }
.desk-more[hidden] { display: none; }
.desk-empty[hidden] { display: none; }
.desk-main .k-empty { margin-top: 6px; }

/* the conditions rail: one dark slab, tiles inside */
.desk-rail { position: sticky; top: calc(var(--k-stick) + 72px); min-width: 0; display: grid; gap: 10px; padding: 12px; border-radius: 16px; background: var(--term-bg); background-image: linear-gradient(rgba(255,255,255,.035) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.035) 1px, transparent 1px); background-size: 44px 44px; border: 1px solid rgba(255,255,255,.08); }
.desk-rail .k-kpi { align-self: stretch; padding: 16px 16px 14px; border-radius: 12px; }
.desk-rail .k-kpi .rp-k { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; font-size: 10.5px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--k-dim); }
.desk-rail .k-kpi .rp-k .k-status { font-size: 9.5px; padding: 3px 8px; }
.desk-rail .k-kpi .rp-row { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; width: 100%; margin-top: 8px; }
.desk-rail .k-kpi .v { margin-top: 0; font-size: clamp(1.7rem, 2.2vw, 2.1rem); }
.desk-rail .k-kpi .rp-row .d { margin-top: 0; }
.desk-rail .k-kpi .rp-row .d.is-date::before { content: none; } /* a release month, not a delta: no "–" (read as minus) */
.desk-rail .k-spark { margin-top: 10px; height: 44px; }
.desk-rail .k-kv { width: 100%; margin-top: 8px; }
.desk-rail .k-kv div { padding: 8px 0; font-size: 12.5px; }
.desk-rail .k-kv dd { display: inline-flex; align-items: baseline; gap: 8px; }
.desk-rail .k-kv .d { display: inline-flex; align-items: center; gap: 4px; padding: 2px 7px; border-radius: 999px; font-size: 10.5px; font-weight: 700; background: var(--k-flat-bg); color: var(--k-text); }
.desk-rail .k-kv .d.up { color: var(--k-bad); background: var(--k-bad-bg); }
.desk-rail .k-kv .d.up::before { content: '▲'; font-size: 8px; }
.desk-rail .k-kv .d.down { color: var(--k-good); background: var(--k-good-bg); }
.desk-rail .k-kv .d.down::before { content: '▼'; font-size: 8px; }
.desk-rail .k-kpi .m { margin-top: 9px; font-size: 11px; line-height: 1.55; }
.desk-rail .k-kpi .m a { color: var(--k-accent); font-weight: 700; text-decoration: none; }
.desk-rail .k-kpi .m a:hover { text-decoration: underline; text-underline-offset: 2px; }
.desk-rail .rp-mini { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; width: 100%; margin-top: 10px; }
.desk-rail .rp-mini > div { border: 1px solid var(--k-line); border-radius: 9px; padding: 9px 11px; min-width: 0; }
.desk-rail .rp-mini .k { font-size: 9.5px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--k-dim); }
.desk-rail .rp-mini .v { margin-top: 3px; font-size: 1.05rem; }
.desk-rail .rp-cta { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; margin-top: 12px; padding: 12px 14px; border-radius: 10px; background: var(--amber); color: var(--ink); text-decoration: none; font-size: 13px; font-weight: 700; line-height: 1.3; }
.desk-rail .rp-cta span { flex: none; display: inline-block; transition: transform .15s ease; }
.desk-rail .rp-cta:hover span { transform: translateX(4px); }

@media (max-width: 1020px) {
  .desk-grid { grid-template-columns: minmax(0, 1fr); }
  .desk-rail { position: static; grid-template-columns: 1fr 1fr; }
  .desk-rail .k-kpi.span-2 { grid-column: span 2; }
}
@media (max-width: 760px) {
  /* page override of the kit's phone bottom sheet: the six category chips are one swipe row */
  .desk-filters .k-filters-toggle { display: none; }
  .js .desk-filters .k-filters-body { display: flex; flex-direction: row; gap: 10px; }
  .desk-filters .k-filters-in { padding-block: 8px; }
  .desk-filters .k-fseg { display: block; flex: 1 1 auto; min-width: 0; }
  .desk-filters .k-flbl { display: none; }
  /* min-width: 0 on the row: as a flex item it would otherwise take the width of all seven chips (page overflow) */
  .desk-filters .k-chips { min-width: 0; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin-inline: calc(-1 * var(--pad)); padding-inline: var(--pad); scroll-padding-inline: var(--pad); -webkit-overflow-scrolling: touch; }
  .desk-filters .k-chips::-webkit-scrollbar { display: none; }
  .desk-filters .k-count { display: none; }
  .desk-head .k-search { flex: 1 1 100%; }
  .desk-feat { grid-template-columns: minmax(0, 1fr); }
  .desk-feat .k-card-img { aspect-ratio: 16 / 10; height: auto; min-height: 0; }
}
@media (max-width: 700px) {
  .desk-cards { grid-template-columns: minmax(0, 1fr); }
  .desk-rail { grid-template-columns: minmax(0, 1fr); }
  .desk-rail .k-kpi.span-2 { grid-column: auto; }
}

/* subscribe band */
.desk-nl .lead-grid { align-items: center; }
.desk-nl .svc-sign { margin-top: 22px; }

/* ============================================================
   ARTICLE
   ============================================================ */
.art { padding-top: clamp(28px, 4vw, 44px); padding-bottom: clamp(48px, 6vw, 80px); }
.art .k-crumbs { max-width: 760px; margin: 0 auto 18px; }
.art .k-art-meta .cat { text-decoration: none; }
.art .k-art-meta a.cat:hover { text-decoration: underline; text-underline-offset: 3px; }
.art .k-art-meta a.cat { display: inline-block; padding-block: 3px; margin-block: -3px; } /* 18px -> 24px target, same line box (UX 2026-10-13) */
.art .k-byline > a { display: flex; align-items: center; gap: 12px; }
.art .k-art-cover[hidden] { display: none; }
.art .k-art-cover figcaption a { color: var(--k-text); font-weight: 600; }
.art-foot { max-width: 68ch; margin: clamp(26px, 3.5vw, 36px) auto 0; display: grid; gap: 18px; }
.art-foot .ab-note { padding: 14px 18px; border: 1px solid var(--k-line); border-left: 3px solid var(--amber); border-radius: 10px; background: var(--k-surface); font-size: 14px; line-height: 1.65; color: var(--k-dim); }
.art-foot .k-share { padding-top: 18px; border-top: 1px solid var(--k-line-2); }
.art-foot .k-share .x svg, .art-foot .k-share .li svg { fill: currentColor; stroke: none; }
.art .k-author { margin-top: clamp(26px, 3.5vw, 36px); }

/* ---------- READING COLUMN (UX audit 2026-10-13) ----------
   Sora's "0" is 0.743em wide but its average glyph is 0.505em (measured per line on the built
   pages), so the kit's 68ch prose ran 859px and 96-106 characters a line at 1024 and up, and the
   crumbs + headline (760px), the prose (859px) and the cover (1000px) started on three different
   left edges. Now: ONE left edge, the 760px column the crumbs and headline already use. Running
   text (paragraphs, subheads, quotes, lists, notes) keeps a 35em measure of the 17px prose = 595px,
   about 70 characters a line; the data blocks (stats, rates) and the CTA use the full column; the
   cover stays the wide breakout. The data-behind box, the closing note + share and the author card
   sit on the text measure, on the same left edge. Phones are unchanged (the column is the screen). */
.art { --art-col: 760px; --art-text: 595px; --art-left: max(0px, calc((100% - var(--art-col)) / 2)); }
@media (max-width: 700px) { .art { --art-text: 560px; } } /* 35em of the 16px phone prose */
.art .k-prose { max-width: var(--art-col); line-height: 1.75; }
.art .k-prose > :not(.ab-stat, .ab-rates, .ab-cta) { max-width: var(--art-text); }
.art .ab-data, .art .art-foot, .art .k-author { max-width: var(--art-text); margin-left: var(--art-left); margin-right: auto; }
/* a correction note opening the body took the kit's intro size (19px, the p:first-child rule) and
   the real first paragraph lost it: the note keeps its 14px, the paragraph after it gets the intro */
.art .k-prose > p.ab-note:first-child { font-size: 14px; }
.art .k-prose > p.ab-note:first-child + p { font-size: 1.12em; }
/* the kit's .ab-quote { margin: 0 } beat the 22px block rhythm, so a pull quote after a stat block
   sat 0px under it; a quote gets a little more air than a paragraph instead */
.art .k-prose > .ab-quote { margin-block: 30px; }
.art .k-prose > .ab-quote:first-child { margin-top: 0; }
/* "Read the original" was a 23px-tall target (WCAG 2.5.8 floor is 24) */
.art .k-prose .ab-src a { display: inline-block; padding-block: 3px; }

/* ask + subscribe band */
.art-ask .lead-grid { align-items: start; }
.art-ask .svc-sign { margin-top: 22px; }
.art-ask .direct { margin-top: 6px; }
.art-ask .msg-btns { margin-bottom: 14px; }
.art-ask .ask-fine { font-size: 12.5px; color: var(--term-dim); }

/* keep reading + pager */
.art-more .k-related { margin-top: 0; }
.art-pager { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-top: clamp(24px, 3vw, 32px); }
.art-pager a { display: grid; gap: 6px; padding: 16px 18px; border: 1px solid var(--k-line); border-radius: 12px; background: var(--k-surface); color: var(--k-text); text-decoration: none; min-width: 0; transition: border-color .18s ease; }
.art-pager a:hover { border-color: var(--k-hover); }
.art-pager a.next { text-align: right; }
.art-pager .pk { font-size: 11px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--k-accent); }
.art-pager b { font-size: 14px; line-height: 1.35; letter-spacing: -.01em; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.art-pager a:hover b { text-decoration: underline; text-decoration-color: var(--amber); text-underline-offset: 3px; }
.art-pager a[hidden] { display: none; }
.art-pager:has(a[hidden]) { grid-template-columns: minmax(0, 1fr); }
@media (max-width: 700px) {
  .art { padding-top: 22px; }
  .art-pager { grid-template-columns: minmax(0, 1fr); }
  .art-pager a.next { text-align: left; }
  .art .k-art-head h1 { font-size: clamp(1.7rem, 7.6vw, 2.2rem); }
  .art .k-lede { font-size: 1.02rem; }
}
.no-js .desk-more, .no-js .desk-head .k-search { display: none; }
/* audit 10-09: the kit's CTA label (ink at 60% on amber) measures 3.97:1 at 10px; 72% gives 5.5:1 */
.art-page .k-prose .ab-cta .k { color: rgba(16,17,20,.72); }

/* ---------- the inline next step (2026-10-13): ONE compact link after the story's opening ----------
   Written by scripts/build-article-pages.mjs from scripts/lib/next-step.mjs (rents -> leasing communities + ask,
   development -> PreDevHub, condo market -> the building page or the Condo Index, else the story's own CTA). */
.art .k-prose > .ab-next { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 18px; margin-block: 26px; padding: 14px 16px 14px 18px; border: 1px solid var(--k-line); border-left: 3px solid var(--amber); border-radius: 10px; background: var(--k-surface); }
.art .k-prose .ab-next p { flex: 1 1 17em; margin: 0; font-size: 14.5px; line-height: 1.55; color: var(--k-text); }
.art .k-prose .ab-next .k { display: block; margin-bottom: 2px; font-size: 10.5px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--k-accent); }
.art .k-prose .ab-next p a { color: var(--k-accent); }
.art .k-prose .ab-next .ab-next-go { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 8px; min-height: 44px; padding: 0 18px; border-radius: 999px; background: var(--ink); color: var(--paper); text-decoration: none; font: 700 13.5px 'Sora', 'Sora Fallback', sans-serif; transition: transform .15s ease; }
.art .k-prose .ab-next .ab-next-go:hover { transform: translateY(-2px); }
.art .k-prose .ab-next .ab-next-go:focus-visible { outline: 2px solid var(--amber); outline-offset: 3px; }
@media (prefers-reduced-motion: reduce) { .art .k-prose .ab-next .ab-next-go { transition: none; } .art .k-prose .ab-next .ab-next-go:hover { transform: none; } }

/* ---------- data behind the story (article #a-data) + data desk (market-updates #data-desk), 2026-10-09 ----------
   Written by scripts/build-article-pages.mjs via MARKET.dataBlockHTML / deskDataHTML; links only to
   pages that exist on disk. Corner ticks in amber, like the cite box on for-journalists.html. */
.ab-data { position: relative; max-width: 68ch; margin: clamp(26px, 3.5vw, 36px) auto 0; padding: 20px 22px 18px; border: 1px solid var(--k-line); border-radius: var(--radius); background: var(--k-surface); }
.ab-data[hidden] { display: none; }
.ab-data::before, .ab-data::after { content: ''; position: absolute; width: 12px; height: 12px; border-color: var(--amber); border-style: solid; }
.ab-data::before { top: -1px; left: -1px; border-width: 2px 0 0 2px; border-top-left-radius: 4px; }
.ab-data::after { bottom: -1px; right: -1px; border-width: 0 2px 2px 0; border-bottom-right-radius: 4px; }
.ab-data-k, .dd-k { display: block; font-size: 11px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--k-accent); }
.ab-data p { margin-top: 8px; font-size: 14px; line-height: 1.6; color: var(--k-dim); }
.ab-data ul, .dd-links ul { list-style: none; display: grid; gap: 2px; margin-top: 12px; padding: 0; }
.ab-data li a, .dd-links li a { display: grid; gap: 2px; padding: 10px 0; border-top: 1px solid var(--k-line); color: var(--k-text); text-decoration: none; min-height: 44px; }
.ab-data li a b, .dd-links li a b { font-size: 14.5px; letter-spacing: -.01em; }
.ab-data li a b::after, .dd-links li a b::after { content: ' →'; color: var(--k-accent); }
.ab-data li a span, .dd-links li a span { font-size: 13px; color: var(--k-dim); }
.ab-data li a:hover b, .ab-data li a:focus-visible b, .dd-links li a:hover b, .dd-links li a:focus-visible b { text-decoration: underline; text-decoration-color: var(--amber); text-underline-offset: 3px; }
.desk-data .dd-grid { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: clamp(18px, 3vw, 32px); align-items: start; }
.desk-data .dd-posts { display: grid; gap: 16px; }
.desk-data .dd-slot { display: grid; gap: 8px; }
.desk-data .dd-links { padding: 20px 22px 16px; border-radius: var(--radius); background: var(--term-bg, #0E1014); color: #fff; --k-text: #fff; --k-dim: #9AA0A8; --k-line: rgba(255,255,255,.1); --k-accent: var(--amber); }
.desk-data .dd-links h3 { font-size: 1.05rem; color: #fff; }
.desk-data .dd-links .k-note { margin-top: 10px; color: #9AA0A8; }
@media (max-width: 900px) { .desk-data .dd-grid { grid-template-columns: minmax(0, 1fr); } }
