/* Alliance Portfolio webfonts — Newsreader (display/editorial) + Instrument Sans (UI/body).
   Both are Google Fonts, served from the Google Fonts CDN. No self-hosted binaries are
   shipped with this system; if a consumer needs offline/self-hosted files, download the
   families from fonts.google.com and swap the src URLs below. */
@import url("https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,300..700;1,6..72,300..600&family=Instrument+Sans:ital,wght@0,400..700;1,400..600&display=swap");

:root{
  /* --- Core palette (spec §9) --- */
  --brand-navy:#002B54;
  --brand-sky:#91C3EB;
  --brand-paper:#F7F4EE;
  --brand-fog:#E8EDEF;
  --brand-stone:#D8D1C5;
  --brand-accent:#E0783F;
  /* legacy aliases */
  --ap-navy:var(--brand-navy);
  --ap-sky:var(--brand-sky);
  --ap-paper:var(--brand-paper);
  --ap-fog:var(--brand-fog);
  --ap-stone:var(--brand-stone);
  --ap-sun:var(--brand-accent);

  /* --- Navy ramp --- */
  --navy-900:#001A33;
  --navy-800:#002344;
  --navy-700:#002B54;
  --navy-600:#083D6E;
  --navy-500:#12507F;
  --navy-300:#5C82A5;
  --navy-100:#B7C6D5;
  --navy-050:#E6EBF1;

  /* --- Sky ramp. Sky 500 is not legible as small text on white;
         use sky-800/700 for links and small type (spec §22). --- */
  --sky-800:#144C74;
  --sky-700:#1B5E8C;
  --sky-600:#2E7FB8;
  --sky-500:#91C3EB;
  --sky-300:#B6D8F2;
  --sky-100:#EAF4FB;
  --sky-050:#F0F7FC;

  /* --- Warm neutrals --- */
  --paper-500:#F7F4EE;
  --paper-300:#FCFAF6;
  --stone-600:#B3A992;
  --stone-500:#D8D1C5;
  --stone-300:#E9E4DA;
  --stone-100:#F2EFE8;

  /* --- Cool neutrals --- */
  --fog-700:#C9D3D7;
  --fog-500:#E8EDEF;
  --fog-300:#F1F5F6;

  /* --- Sun ramp (punctuation only) --- */
  --sun-700:#C9622E;
  --sun-500:#E0783F;
  --sun-300:#EFB795;
  --sun-100:#F8E1D2;

  --white:#FFFFFF;

  /* --- Text + line (spec §23, authoritative) --- */
  --text-primary:#172531;
  --text-secondary:#3F4C56;
  --text-muted:#6D777F;
  --line:#D7DADF;

  /* Newsreader headings sit in Navy; running copy sits in --text-primary. */
  --text-heading:var(--brand-navy);
  --text-body:var(--text-primary);
  --text-inverse:var(--white);
  --text-inverse-secondary:var(--sky-300);
  --text-accent:var(--sun-700);
  /* Eyebrows are Sky-deep, not grey — the reference sets read Sky at every scale. */
  --text-eyebrow:var(--sky-600);
  --text-eyebrow-inverse:var(--sky-300);
  --text-numeral:var(--brand-accent);
  --text-link:var(--brand-navy);
  --text-link-hover:var(--sun-700);
  --text-link-on-navy:var(--sky-300);

  /* legacy ink aliases */
  --ink-900:var(--text-primary);
  --ink-700:var(--text-primary);
  --ink-500:var(--text-secondary);
  --ink-300:var(--text-muted);

  /* --- Surfaces --- */
  --surface-page:var(--brand-paper);
  --surface-raised:var(--white);
  --surface-card:var(--white);
  --surface-sunken:var(--brand-fog);
  --surface-inverse:var(--brand-navy);
  --surface-inverse-alt:var(--navy-800);
  --surface-accent-soft:var(--sky-100);
  --surface-warm:var(--stone-100);
  --surface-highlight:var(--sun-100);
  --surface-disclosure:#F3F5F6;
  --surface-note:#FFF8F3;

  /* --- Borders --- */
  --border-hairline:var(--line);
  --border-subtle:#C4C9CF;
  --border-strong:var(--brand-navy);
  --border-cool:var(--fog-700);
  --border-inverse:rgba(255,255,255,.22);
  --rule-accent:var(--brand-sky);

  /* --- Interactive --- */
  --action-primary-bg:var(--brand-navy);
  --action-primary-bg-hover:var(--navy-600);
  --action-primary-bg-active:var(--navy-800);
  --action-primary-fg:var(--white);
  --action-secondary-fg:var(--brand-navy);
  --action-secondary-border:var(--brand-navy);
  --action-secondary-bg-hover:var(--navy-050);
  --action-accent-bg:var(--sun-500);
  --action-accent-bg-hover:var(--sun-700);
  --focus-ring:var(--sun-500);
  --selection-bg:var(--sky-300);

  /* --- Semantic status only (spec §9): green positive, amber caution, red risk.
         Never used as decorative brand color. --- */
  --semantic-positive:#4B7D5B;
  --semantic-positive-soft:#E3EFE8;
  --semantic-caution:#A36D2D;
  --semantic-caution-soft:#FAEFDD;
  --semantic-risk:#9A4E46;
  --semantic-risk-soft:#F7E4E2;
  --semantic-info:var(--brand-navy);
  --semantic-info-soft:var(--sky-100);
  /* legacy status aliases */
  --status-funded:var(--semantic-positive);
  --status-funded-soft:var(--semantic-positive-soft);
  --status-review:var(--semantic-caution);
  --status-review-soft:var(--semantic-caution-soft);
  --status-declined:var(--semantic-risk);
  --status-declined-soft:var(--semantic-risk-soft);
  --status-info:var(--semantic-info);
  --status-info-soft:var(--semantic-info-soft);

  /* --- Data visualization (spec §17) --- */
  --chart-series-1:var(--brand-navy);
  --chart-series-2:var(--brand-sky);
  --chart-series-3:var(--navy-300);
  --chart-series-4:var(--stone-500);
  --chart-highlight:var(--brand-accent);
  --chart-positive:var(--semantic-positive);
  --chart-caution:var(--semantic-caution);
  --chart-risk:var(--semantic-risk);
  --chart-grid:var(--line);
  --chart-axis:var(--text-muted);
}

:root{
  --font-display:"Newsreader",Georgia,serif;
  --font-sans:"Instrument Sans",Arial,sans-serif;
  --font-mono:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;

  /* Working type scale (spec §8) */
  --type-display-xl:clamp(3.5rem,6vw,4.5rem);   /* 72px  / 0.98 / -0.03em */
  --type-display-1:clamp(3rem,4.8vw,4rem);      /* 54–64 / 1.02 / -0.02em */
  --type-display-2:clamp(2.375rem,3.6vw,3rem);  /* 38–48 / 1.08 */
  --type-display-3:clamp(1.625rem,2.4vw,2rem);  /* 26–32 / 1.15 */
  --type-headline:var(--type-display-3);
  --type-subhead:1.375rem;
  --type-lead:1.25rem;                          /* 19–21 / 1.55 */
  --type-editorial-lead:var(--type-lead);
  --type-body:1rem;                             /* 16 / 1.65 */
  --type-body-lg:var(--type-lead);
  --type-small:0.875rem;                        /* 14 */
  --type-body-sm:var(--type-small);
  --type-caption:0.8125rem;                     /* 12–13 */
  --type-micro:0.6875rem;                       /* 11 */
  --type-eyebrow:0.75rem;                       /* 12 */

  --weight-regular:400;
  --weight-medium:500;
  --weight-semibold:600;
  --weight-bold:700;
  --weight-display:var(--weight-medium);
  --weight-eyebrow:var(--weight-bold);
  /* Newsreader Light is not part of the system; 400/500/600 only. */
  --weight-light:var(--weight-regular);

  --leading-display-xl:0.98;
  --leading-tight:1.02;
  --leading-display:1.08;
  --leading-snug:1.15;
  --leading-lead:1.55;
  --leading-normal:1.65;
  --leading-relaxed:1.65;

  --tracking-display-xl:-0.03em;
  --tracking-display-tight:-0.04em;
  --tracking-display:-0.02em;
  --tracking-tight:-0.01em;
  --tracking-normal:0;
  --tracking-wide:0.04em;
  --tracking-eyebrow:0.14em;
  --tracking-eyebrow-loose:0.18em;

  --measure-hero:8ch;
  --measure-headline:14ch;
  --measure-lead:34ch;
  --measure-narrow:34ch;
  --measure-default:62ch;
  --measure-wide:78ch;
}

:root{
  /* Spec §23 scale. Values named for their px size. */
  --space-1:4px;
  --space-2:8px;
  --space-3:12px;
  --space-4:16px;
  --space-6:24px;
  --space-8:32px;
  --space-12:48px;
  --space-16:64px;
  --space-24:96px;
  --space-32:128px;
  /* Extensions beyond the spec list, same 4px logic. */
  --space-10:40px;
  --space-20:80px;
  --space-40:160px;

  --section-y-compact:var(--space-16);
  --section-y:var(--space-24);
  --section-y-loose:var(--space-32);
  --stack-tight:var(--space-2);
  --stack:var(--space-4);
  --stack-loose:var(--space-8);
}

:root{
  --grid-columns:12; /* @kind other */
  --grid-columns-tablet:8; /* @kind other */
  --grid-columns-mobile:4; /* @kind other */
  --grid-gutter:24px;
  --grid-gutter-wide:32px;
  --container-page:1540px;
  --container-max:1440px;
  --container-content:1440px;
  --container-narrow:920px;
  --container-text:680px;
  --page-margin:32px;
  --page-margin-tablet:32px;
  --page-margin-sm:20px;
  --header-height:84px;
  --utility-height:34px;
}
/* 12-column desktop / 8 tablet / 4 mobile.
   Preferred spans: 8/4, 4/8, 7/5, 5/7, 6/6, 4/4/4, 3/3/3/3. */
.ap-grid{display:grid;grid-template-columns:repeat(var(--grid-columns),minmax(0,1fr));gap:var(--grid-gutter)}
.ap-container{width:100%;max-width:var(--container-content);margin-inline:auto;padding-inline:var(--page-margin)}
@media (max-width:1024px){.ap-grid{grid-template-columns:repeat(var(--grid-columns-tablet),minmax(0,1fr))}.ap-container{padding-inline:var(--page-margin-tablet)}}
@media (max-width:640px){.ap-grid{grid-template-columns:repeat(var(--grid-columns-mobile),minmax(0,1fr))}.ap-container{padding-inline:var(--page-margin-sm)}}

:root{
  /* Radii (spec §15) */
  --radius-none:0;
  --radius-control:4px;
  --radius-card:10px;
  --radius-feature:18px;
  --radius-media:0;
  --radius-pill:999px;
  /* legacy aliases */
  --radius-xs:var(--radius-control);
  --radius-sm:var(--radius-control);
  --radius-md:var(--radius-control);
  --radius-lg:var(--radius-card);

  --border-width-hair:1px;
  --border-width-rule:2px;
  --border-width-marker:3px;

  /* Restrained only. No glows, no glassmorphism, no soft fintech elevation. */
  --shadow-none:none;
  --shadow-flat:0 1px 0 rgba(0,43,84,.06);
  --shadow-raised:0 8px 24px rgba(0,43,84,.06);
  --shadow-overlay:0 18px 50px rgba(0,43,84,.10);
  --shadow-page:0 0 70px rgba(0,0,0,.08);
  --shadow-focus:0 0 0 3px rgba(224,120,63,.42);
}

:root{
  /* Spec §18: hover 160–220ms, section reveal 450–700ms, editorial slow. */
  --duration-instant:100ms; /* @kind other */
  --duration-fast:160ms; /* @kind other */
  --duration-base:200ms; /* @kind other */
  --duration-hover:180ms; /* @kind other */
  --duration-slow:450ms; /* @kind other */
  --duration-reveal:620ms; /* @kind other */
  --duration-editorial:900ms; /* @kind other */
  --ease-standard:cubic-bezier(.2,.6,.2,1); /* @kind other */
  --ease-out:cubic-bezier(0,.6,.3,1); /* @kind other */
  --ease-in-out:cubic-bezier(.5,0,.2,1); /* @kind other */
  --motion-lift:-1px;
}
@media (prefers-reduced-motion:reduce){:root{--duration-fast:0ms; /* @kind other */
--duration-base:0ms; /* @kind other */
--duration-hover:0ms; /* @kind other */
--duration-slow:0ms; /* @kind other */
--duration-reveal:0ms; /* @kind other */
--duration-editorial:0ms /* @kind other */}}

*,*::before,*::after{box-sizing:border-box}
body{margin:0;background:var(--surface-page);color:var(--text-primary);font-family:var(--font-sans);font-size:var(--type-body);line-height:var(--leading-normal);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3,h4{font-family:var(--font-display);color:var(--text-heading);font-weight:var(--weight-medium);letter-spacing:var(--tracking-display);line-height:var(--leading-display);margin:0}
h1{font-size:var(--type-display-1);line-height:var(--leading-tight)}
h2{font-size:var(--type-display-2)}
h3{font-size:var(--type-display-3);line-height:var(--leading-snug)}
h5,h6{font-family:var(--font-sans);color:var(--text-heading);font-weight:var(--weight-semibold);margin:0}
p{margin:0;text-wrap:pretty}
a{color:var(--text-link);text-decoration:none;border-bottom:1px solid var(--rule-accent);transition:color var(--duration-hover) var(--ease-standard),border-color var(--duration-hover) var(--ease-standard)}
a:hover{color:var(--text-link-hover);border-bottom-color:var(--sun-500)}
::selection{background:var(--selection-bg);color:var(--navy-800)}
:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}
.ap-eyebrow{font-family:var(--font-sans);font-size:var(--type-eyebrow);font-weight:var(--weight-eyebrow);letter-spacing:var(--tracking-eyebrow);text-transform:uppercase;color:var(--text-secondary)}
.ap-rule{height:1px;background:var(--line);border:0}

