/*
 * Portal design tokens (pkg/cmsportal/theme): the neutral light defaults of
 * every --portal-* token. A portal's look comes from its store tokens
 * (stores.config_json portal.tokens, drawn by cmsportal_head); product shells
 * outside the portal (portalask, railway-ask rw-shell) link this file with
 * portal-footer.css and portal-consent.css (theme.ChromeAssets) so the shared
 * footer and consent dialog resolve the same tokens.
 */
:root {
  --portal-bg: #fbfaf8;
  --portal-surface: #ffffff;
  --portal-surface-alt: #f4f2ee;
  --portal-card-bg: var(--portal-surface);
  --portal-text: #111418;
  --portal-muted: #545659;
  --portal-subtle: #85868a;
  --portal-border: #e0dfdd;
  --portal-accent: #1b60b3;
  --portal-accent-ink: #ffffff;
  --portal-header-bg: var(--portal-bg);
  --portal-footer-bg: var(--portal-surface);
  /* nav_link: idle colour of a primary nav link. Evidence (fix round 1,
     2026-09-19): prod resolves ".news-shell-nav-link"/".news-shell-mobile-link"
     with NO colour rule on the dark host (inherits full text colour) but an
     explicit ".news-theme-light .news-shell-nav-link{color:var(--text-med)}"
     override on the light host — two real per-store values neither "text" nor
     a fixed "muted" alone can express for every store, so a store opts into
     the dimmer look by setting this token; unset stores keep full text. */
  --portal-nav-link: var(--portal-text);
  --portal-radius: 14px;
  --portal-font: var(--ui-font, Inter, "Inter Fallback", ui-sans-serif, system-ui, sans-serif);
  --portal-font-heading: var(--portal-font);
  --portal-max-width: 80rem;
  /* Gutter: prod's px-6 utility is a flat 24px at every width (mob main
     column 342 = 390-48; desk container 1232 = 1280-48). A clamp() that
     bottoms out at 1rem (16px) below ~48rem was shrinking every mobile pair
     below prod (fix round 2, W1 evidence). */
  --portal-gutter: 1.5rem;
  --portal-gap: clamp(1rem, 2vw, 1.5rem);
  --portal-shadow: 0 18px 40px -24px color-mix(in srgb, var(--portal-text) 45%, transparent);
}
