/* Visual refresh V1: tokens and cleanup (portfolio-visual-refresh-plan.md §3 V1).
   Linked from every page's <head>. Remove the <link> to revert all of V1 at once;
   each block below is independent and can be deleted on its own. */

/* Type: Inter for running text (Body and Subtitle presets). Headings stay National Park,
   section labels stay Necto Mono. Inter is already loaded in 400–700 with italics. */
.framer-styles-preset-1sv6u0f:not(.rich-text-wrapper),
.framer-styles-preset-1sv6u0f.rich-text-wrapper p,
.framer-styles-preset-a7bvh4:not(.rich-text-wrapper),
.framer-styles-preset-a7bvh4.rich-text-wrapper p {
  --framer-font-family: "Inter", "Inter Placeholder", sans-serif !important;
  --framer-font-family-bold: "Inter", "Inter Placeholder", sans-serif !important;
  --framer-font-family-italic: "Inter", "Inter Placeholder", sans-serif !important;
  --framer-font-family-bold-italic: "Inter", "Inter Placeholder", sans-serif !important;
  --framer-letter-spacing: -0.01em !important;
}

/* Outlines: one weight. Any side that had a border (1px, 2px or 3px) now draws 1.5px;
   sides without one stay at 0. */
[data-border="true"]::after {
  border-width:
    clamp(0px, calc(var(--border-top-width, 0px) * 100), 1.5px)
    clamp(0px, calc(var(--border-right-width, 0px) * 100), 1.5px)
    clamp(0px, calc(var(--border-bottom-width, 0px) * 100), 1.5px)
    clamp(0px, calc(var(--border-left-width, 0px) * 100), 1.5px) !important;
}

/* Hard offset shadow: only on things you can click, and only on hover or keyboard focus.
   :where() keeps this at low specificity so deliberate exceptions (the TL;DR bubble) win. */
:where(#main) [class*="framer-"],
:where(#main) [style*="box-shadow"] {
  box-shadow: none !important;
}
/* The shadow goes on the visible shape inside the link (the bordered card, pill or tilted
   sticker), not the link's own invisible box, so it follows rotation and rounded corners.
   Links without a bordered shape (bare icons) get none. */
:where(#main) a[class*="framer-"]:not(nav *) > [data-border="true"] {
  transition: box-shadow 0.2s ease;
}
:where(#main) a[class*="framer-"]:not(nav *):is(:hover, :focus-visible) > [data-border="true"] {
  box-shadow: 4px 4px 0 #222 !important;
}

/* Tags: outline only. A tag is a bordered pill holding one Subtitle-preset line.
   Concept tags (marked by site-fixes.js) get a dashed outline. */
[data-border="true"]:has(> [data-framer-component-type="RichTextContainer"]:only-child > p.framer-styles-preset-a7bvh4:only-child) {
  background-color: #fff !important;
  --border-color: #222 !important;
  --border-style: solid;
  --border-top-width: 1px !important;
  --border-right-width: 1px !important;
  --border-bottom-width: 1px !important;
  --border-left-width: 1px !important;
}
[data-border="true"]:has(> [data-framer-component-type="RichTextContainer"]:only-child > p.framer-styles-preset-a7bvh4:only-child) p.framer-styles-preset-a7bvh4 {
  --framer-text-color: #10201f !important;
  --framer-font-family: "National Park", "National Park Placeholder", sans-serif !important;
  --framer-letter-spacing: 0em !important;
}
[data-border="true"][data-cs-concept] { --border-style: dashed !important; }

/* Color: no lavender. Its token now resolves to ice everywhere it was used
   (Lenovo results, the NDA note, bubbles, the page background behind home). */
body { --token-610e9c20-d4ce-4dfa-bf13-d84a09221ac3: #aee7e5 !important; }

/* Color: tan = problem or context, ice = result. These research stats were ice. */
.framer-H1yvJ .framer-4a3tn9, .framer-H1yvJ .framer-12pwzek, .framer-H1yvJ .framer-xn7mbh,
.framer-nrWUd .framer-43uny2, .framer-nrWUd .framer-rx64wj, .framer-nrWUd .framer-1xbaxyc,
.framer-QrRzv .framer-13of6nm, .framer-QrRzv .framer-30x25f {
  background-color: var(--token-be1232a8-1715-4df8-86d1-674fc284e53c, #e3c7bf) !important;
}

/* V4 card subtitles: the outcome runs first in bold (scripts/apply-card-copy.py). */
.framer-1fetni7 b { color: #10201f; font-weight: 600; }
