@font-face { font-family: Newsreader; src: url('assets/Newsreader.ttf') format('truetype'); font-weight: 100 900; font-display: swap; }
@font-face { font-family: Newsreader; src: url('assets/Newsreader-Italic.ttf') format('truetype'); font-weight: 100 900; font-style: italic; font-display: swap; }
@font-face { font-family: 'JetBrains Mono'; src: url('assets/JetBrainsMono.ttf') format('truetype'); font-weight: 100 900; font-display: swap; }
/* Palette from the app's design system (closed-list/docs/design-system.md and
   DesignSystem/Resources/Colors.xcassets). Light is Direction A "paper ledger";
   dark is Direction B with the terracotta accent kept. */
:root {
    --paper: #f5f2ec;          /* Paper */
    --ink: #1e1b17;            /* Ink */
    --muted: #6b665e;          /* InkSecondary */
    --line: #d9d4cb;           /* HairlineStrong */
    --rust: #9c5a3c;           /* Accent, as a fill. Never inverts. */
    --rust-text: #9c5a3c;      /* AccentText: terracotta as text or a mark. */
    --paper-fixed: #f5f2ec;    /* OnAccent: paper that stays light in both appearances. */
    --ink-fixed: #1e1b17;      /* Ink held light-side: the fixed dark band. */
    --screen-border-fixed: #d9d4cb; /* HairlineStrong on the fixed dark bands. */
    --rust-on-ink: #d39a7b;    /* Terracotta lifted for the fixed ink band. */
    --rust-rule-on-ink: #ca8561;
    --screen-shadow: #1e1b170a;
    --band-edge: transparent;  /* Only a dark page needs the ink band's bottom edge drawn. */
    --mono: 'JetBrains Mono', monospace;
    color-scheme: light dark;

    /* Dark values, named once here and wired up by both selectors below. */
    --dark-paper: #121212;     /* Paper, dark */
    --dark-ink: #e6e4df;       /* Ink, dark */
    --dark-muted: #a8a59e;     /* InkSecondary dark (#8a8781) lifted for web reading sizes, 7.62:1 on paper */
    --dark-line: #4a4845;      /* HairlineStrong, dark */
    --dark-rust-text: #b86b48; /* AccentText, dark — 4.67:1 on paper */
    --dark-screen-shadow: #0000004d;
}
/* Dark applies when the system asks for it and nothing overrides it, and on an explicit
   choice. The switch writes data-theme on <html>; no attribute means follow the system. */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        --paper: var(--dark-paper);
        --ink: var(--dark-ink);
        --muted: var(--dark-muted);
        --line: var(--dark-line);
        --rust-text: var(--dark-rust-text);
        --band-edge: var(--dark-line);
        --screen-shadow: var(--dark-screen-shadow);
    }
}
:root[data-theme="dark"] {
    --paper: var(--dark-paper);
    --ink: var(--dark-ink);
    --muted: var(--dark-muted);
    --line: var(--dark-line);
    --rust-text: var(--dark-rust-text);
    --band-edge: var(--dark-line);
    --screen-shadow: var(--dark-screen-shadow);
}
:root[data-theme="light"] { color-scheme: light; }
:root[data-theme="dark"] { color-scheme: dark; }
* { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 2rem; }
body { margin: 0; background: var(--paper); color: var(--ink); font: 1.375rem/1.45 Newsreader, Georgia, serif; -webkit-font-smoothing: antialiased; }
img { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-underline-offset: .25em; }
a:hover { text-decoration-thickness: 2px; }
a:focus-visible { outline: 3px solid var(--rust-text); outline-offset: 6px; }
h1, h2, h3, p, figure { margin: 0; }
h1, h2 { font-weight: 400; letter-spacing: -.045em; text-wrap: balance; }
em { font-weight: 400; }
.wrap { width: min(100% - 6rem, 1200px); margin-inline: auto; }
.skip { position: fixed; left: 1rem; top: -6rem; padding: .75rem 1.25rem; background: var(--ink); color: var(--paper); z-index: 10; }
.skip:focus { top: 1rem; }
.masthead { min-height: 106px; display: flex; align-items: center; justify-content: space-between; gap: 2rem; border-bottom: 1px solid var(--line); }
.brand { display: inline-flex; align-items: center; gap: .55rem; font: 1.125rem/1.4 var(--mono); text-decoration: none; white-space: nowrap; }
.masthead-end { display: flex; align-items: center; gap: 2.25rem; }
.masthead nav { display: flex; align-items: center; gap: 2.25rem; font: .875rem/1.5 var(--mono); }
.masthead nav a { text-decoration: none; padding-block: .7rem; }
.masthead nav a:hover { text-decoration: underline; }
/* Light/dark switch. Its boundary uses the control border (ink-2), not a decorative hairline. */
.theme-toggle { flex: none; display: inline-flex; align-items: center; justify-content: center; min-width: 44px; min-height: 44px; padding: .6rem 1rem; background: none; color: inherit; border: 1px solid var(--muted); border-radius: 3px; font: .875rem/1.5 var(--mono); cursor: pointer; }
.theme-toggle:hover { border-color: var(--ink); }
.theme-toggle:focus-visible { outline: 3px solid var(--rust-text); outline-offset: 4px; }
.hero { display: grid; grid-template-columns: 1.55fr 1fr; gap: 3rem; align-items: center; padding-block: 5rem 5.5rem; }
.eyebrow { font: .8125rem/1.7 var(--mono); letter-spacing: .075em; text-transform: uppercase; color: var(--muted); }
h1 { margin-block: 1.65rem 2rem; font-size: clamp(4.4rem, 7.3vw, 6.25rem); line-height: .99; }
h1 em { color: var(--rust-text); }
.hero-lead { font-size: 2.1rem; line-height: 1.16; }
.hero-detail { max-width: 28rem; margin-top: 1.5rem; color: var(--muted); }
.button { display: inline-flex; align-items: center; justify-content: space-between; gap: 2rem; margin-top: 2rem; padding: 1rem 1.3rem; background: var(--ink); color: var(--paper); font: .875rem/1.5 var(--mono); text-decoration: none; border: 1px solid var(--ink); }
.button:hover { background: var(--rust); border-color: var(--rust); color: var(--paper-fixed); }
.release-note { font: .75rem/1.7 var(--mono); color: var(--muted); margin-top: 1rem; }
.hero-visual { width: min(100%, 310px); justify-self: center; }
.app-screen { width: 100%; border: 1px solid var(--line); border-radius: 13px; box-shadow: 0 12px 30px var(--screen-shadow); }
figcaption { font-size: 1.125rem; line-height: 1.3; margin-top: 1rem; text-align: center; }
figcaption span { display: block; font: .75rem/1.7 var(--mono); color: var(--muted); margin-top: .4rem; }
.section-label { display: flex; justify-content: space-between; gap: 1.5rem; padding-top: 1.25rem; border-top: 1px solid var(--line); font: .75rem/1.7 var(--mono); letter-spacing: .025em; text-transform: uppercase; color: var(--muted); }
.limit { padding-bottom: 5.5rem; }
.limit-layout { display: grid; grid-template-columns: 1.1fr 1fr; align-items: center; gap: 5rem; padding-top: 3rem; }
.limit-heading { display: flex; gap: 2.4rem; align-items: center; }
.big-ten { font-size: clamp(10rem, 16vw, 14rem); line-height: .85; color: var(--rust-text); letter-spacing: -.08em; }
.limit-heading h2 { font-size: 3.3rem; line-height: 1; }
.section-intro { font-size: 1.875rem; line-height: 1.2; }
.ruled-list { margin: 1.75rem 0 0; }
.ruled-list div { padding-block: 1rem; border-top: 1px solid var(--line); }
.ruled-list dt { font-size: 1.35rem; }
.ruled-list dd { margin: .35rem 0 0; color: var(--muted); font-size: 1.125rem; }
.capacity { display: flex; justify-content: space-between; gap: .8rem; padding-block: 3.5rem 1.5rem; border-bottom: 3px solid var(--ink); }
.capacity i { width: 2.7rem; aspect-ratio: 1; border: 1.5px solid var(--rust-text); border-radius: 50%; }
/* The closed selection sits on paper, between the two fixed bands. */
.closed-section { padding-block: 2rem 5.5rem; }
/* The terracotta band does not invert: the accent fill is the same in both appearances,
   so it keeps its fixed light foreground (OnAccent, 4.77:1) in dark too. */
.open-section { --paper: var(--paper-fixed); --muted: #f0e0d5; --line: #be8e73; background: var(--rust); color: var(--paper); padding-block: 2rem 5.5rem; }
.feature-layout { display: grid; grid-template-columns: 1.5fr 1fr; gap: 5rem; align-items: center; padding-top: 4rem; }
.feature-copy h2 { margin-block: 1.6rem 2rem; font-size: clamp(3.5rem, 5.5vw, 4.75rem); line-height: 1.02; }
.feature-copy > p:not(.eyebrow) { max-width: 30rem; }
.feature-copy > p + p { margin-top: 1.4rem; }
.feature-copy > p:not(.eyebrow):not(.section-intro) { color: var(--muted); }
.feature-visual { width: min(100%, 310px); justify-self: center; }
/* Only the fixed bands need the held-light screen border; on paper the screen uses
   the page's own hairline, which inverts with the rest of the page. */
.open-section .feature-visual .app-screen,
.enough-section .feature-visual .app-screen { border-color: var(--screen-border-fixed); }
.distinction { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; max-width: 33rem; margin-top: 2.5rem; }
.distinction div { padding-top: 1rem; border-top: 1px solid var(--line); }
.distinction span { font: .875rem/1.6 var(--mono); }
.distinction p { font-size: 1.125rem; margin-top: .4rem; color: var(--muted); }
/* The ink band is a fixed dark surface in both appearances, like the terracotta one.
   On a dark page it sits just above the paper, so --band-edge draws its bottom edge;
   a shadow rather than a border, so the light layout is untouched. */
.enough-section { --ink: var(--ink-fixed); --paper: var(--paper-fixed); --muted: #cec6bb; --line: #5b5147; background: var(--ink); color: var(--paper); padding-block: 2rem 5.5rem; box-shadow: 0 1px 0 var(--band-edge); }
.enough-section .feature-copy h2 { font-size: clamp(3.3rem, 5.2vw, 4.5rem); }
.enough-section em { color: var(--rust-on-ink); }
.stop-rule { height: 1px; background: var(--rust-rule-on-ink); position: relative; margin-block: 2.5rem; width: 90%; }
.stop-rule::after { content: ''; width: .75rem; height: .75rem; border: 1px solid var(--rust-rule-on-ink); border-radius: 50%; position: absolute; right: 0; top: -.35rem; background: var(--ink); }
.closing { padding-block: 6rem; text-align: center; }
.closing h2 { margin-block: 1.5rem 2rem; font-size: clamp(3.5rem, 6.5vw, 5.7rem); line-height: 1.02; }
.closing em { color: var(--rust-text); }
.closing > p:not(.eyebrow):not(.section-intro) { margin-top: 1.25rem; color: var(--muted); font-size: 1.125rem; }
/* The three plain facts a visitor is owed: what is paid for, where the data is,
   and whether they can download it yet. Ruled like the rest of the page. */
.facts { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2.5rem; width: min(100%, 62rem); margin: 3.25rem auto 0; text-align: left; }
.facts div { padding-top: 1rem; border-top: 1px solid var(--line); }
.facts dt { font: .875rem/1.6 var(--mono); }
.facts dd { margin: .5rem 0 0; font-size: 1.0625rem; line-height: 1.45; color: var(--muted); }
.text-link { display: inline-block; margin-top: 1.4rem; font: .875rem/1.8 var(--mono); }
.footer { border-top: 1px solid var(--line); padding-block: 1.7rem; display: flex; align-items: center; justify-content: space-between; gap: 1.5rem; }
.footer > span, .footer > a:not(.brand) { font: .75rem/1.7 var(--mono); color: var(--muted); }
@media (min-width: 1600px) { .hero { padding-block: 6rem; } }
@media (max-width: 1000px) {
    .wrap { width: calc(100% - 4rem); }
    .hero, .feature-layout { gap: 2.5rem; grid-template-columns: 1.25fr 1fr; }
    h1 { font-size: clamp(3.7rem, 7.3vw, 5rem); }
    .hero-visual, .feature-visual { max-width: 280px; }
    .limit-layout { gap: 3rem; }
    .limit-heading { flex-direction: column; gap: 1.2rem; align-items: flex-start; }
    .limit-heading h2 br { display: none; }
    .feature-copy h2 { font-size: 3.6rem; }
    .enough-section .feature-copy h2 { font-size: 3.35rem; }
}
@media (max-width: 700px) {
    body { font-size: 1.25rem; }
    .wrap { width: calc(100% - 2.5rem); }
    .masthead { min-height: 0; padding-block: 1.25rem .8rem; align-items: flex-start; flex-direction: column; gap: .5rem; }
    .masthead-end { width: 100%; justify-content: space-between; flex-wrap: wrap; gap: 1rem; }
    .masthead nav { gap: 1.25rem; font-size: .8125rem; }
    .theme-toggle { padding-inline: .75rem; }
    .hero { grid-template-columns: 1fr; padding-block: 3rem 3.5rem; gap: 2.75rem; }
    h1 { font-size: clamp(3.3rem, 11.1vw, 5rem); margin-top: 1.1rem; }
    .hero-lead { font-size: 1.9rem; }
    .hero-detail { max-width: 31rem; }
    .hero-visual { max-width: 280px; }
    .section-label > span + span { display: none; }
    .limit { padding-bottom: 3.5rem; }
    .limit-layout { grid-template-columns: 1fr; gap: 2rem; padding-top: 2rem; }
    .limit-heading { flex-direction: row; align-items: center; gap: 2rem; }
    .big-ten { font-size: 9rem; }
    .limit-heading h2 { font-size: 2.4rem; }
    .limit-heading h2 br { display: initial; }
    .capacity { gap: .7rem; padding-top: 2rem; padding-bottom: 1rem; }
    .capacity i { width: auto; flex: 1; }
    .open-section, .enough-section { padding-block: 1.5rem 3.5rem; }
    .closed-section { padding-block: 1.5rem 3.5rem; }
    .feature-layout { grid-template-columns: 1fr; padding-top: 2.5rem; gap: 2.5rem; }
    .feature-copy h2, .enough-section .feature-copy h2 { font-size: clamp(2.75rem, 9.7vw, 4rem); margin-top: 1rem; }
    .section-intro { font-size: 1.65rem; }
    .feature-visual { max-width: 280px; }
    .closing { padding-block: 3.5rem; }
    .closing h2 { font-size: clamp(2.8rem, 9.9vw, 4rem); }
    .facts { grid-template-columns: 1fr; gap: 1.5rem; margin-top: 2.25rem; }
    .footer { flex-wrap: wrap; gap: 1rem; }
    .footer > span { display: none; }
}
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
@media print { .theme-toggle { display: none; } }
