/* Font loading moved to index.html (Sep 17, 2026) -- a plain <link> in
   <head> lets the browser discover and start fetching the font as soon as
   it parses the HTML; an @import buried inside this file can only be
   discovered after styles.css itself has already downloaded, adding a
   full extra round-trip before the font request even starts. That delay
   is the most likely reason DM Sans sometimes doesn't look like it's
   actually being used -- the page can render (and get screenshotted)
   before the swap happens. See index.html's <head> for the real tags,
   matching the mockup's own preconnect + stylesheet pattern. */

:root {
  --bg: #f5f0e7;
  --paper: #fcfbf7;
  --ink: #17201f;
  --muted: #65827b;
  --line: rgba(23, 32, 31, 0.15);
  --line-strong: rgba(23, 32, 31, 0.3);
  --accent: #9d2d2e;
  --accent-soft: #ead7d1;
  --hot: #9d2d2e;
  --good: #315752;
  --warn: #b68a46;
  --chip: #e8e0d3;
  /* Sep 18 2026 -- Arun's explicit call to bring the mockup's rounded,
     shadowed card look across the whole app (was 2px/none, a deliberate
     "don't copy the mockup's generic placeholder styling" choice from
     earlier work -- superseded here by direct instruction). Shadow color
     is --ink at low opacity rather than the mockup's own hardcoded
     rgba(31,27,22,...), keeping color sourced from this app's real tokens
     even though the shape now matches the mockup's. */
  --shadow: 0 1px 3px rgba(23, 32, 31, 0.08);
  --nav-h: 56px;
  --top-h: 56px;
  --sans: "DM Sans", -apple-system, BlinkMacSystemFont, sans-serif;
  --display: "Libre Baskerville", Georgia, serif;
  --radius: 10px;
}

* {
  box-sizing: border-box;
}
html,
body {
  margin: 0;
  padding: 0;
}
html {
  background: var(--bg);
}
body {
  font-family: var(--sans);
  background: var(--bg);
  color: var(--ink);
  line-height: 1.35;
  min-height: 100vh;
  min-height: 100dvh;
  -webkit-font-smoothing: antialiased;
  position: relative;
}
body::after {
  content: "";
  position: fixed;
  inset: 0;
  opacity: 0.06;
  pointer-events: none;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.45'/%3E%3C/svg%3E");
  z-index: 9999;
}
button,
input,
select,
textarea {
  font-family: inherit;
  font-size: 17px;
}
/* Sep 16, 2026 -- roadmap item 1: native <select> styling fix. Every select
   in the app (label.field's underline style, .filters' boxed style,
   .rank-jump's chip style) left the browser/OS default appearance in place --
   no `appearance: none`, no custom arrow -- so each one rendered its own
   platform-specific dropdown affordance that didn't match the input/textarea
   styling right next to it. One shared reset + custom chevron here; the three
   context-specific rules below each get their own padding-right/background-
   position tweak since their box shapes differ (underline vs. bordered box vs.
   small chip), but none of them need their own arrow icon or appearance reset
   anymore. */
select {
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2365827b' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 10px center;
  background-size: 13px;
  padding-right: 30px;
  cursor: pointer;
}
input[type="checkbox"],
input[type="radio"] {
  accent-color: var(--accent);
}
button {
  cursor: pointer;
}

.app-top {
  position: sticky;
  top: 0;
  z-index: 20;
  min-height: var(--top-h);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 10px 16px;
  padding-top: max(10px, env(safe-area-inset-top));
  background: rgba(23, 32, 31, 0.98);
  backdrop-filter: saturate(180%) blur(20px);
  -webkit-backdrop-filter: saturate(180%) blur(20px);
  border-bottom: 1px solid rgba(245, 240, 231, 0.15);
  color: var(--bg);
}
.brand {
  display: flex;
  flex-direction: column;
  min-width: 0;
  gap: 2px;
}
.brand strong {
  font-family: var(--display);
  font-size: 17px;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--bg);
}
.brand span {
  font-size: 11px;
  font-weight: 700;
  color: rgba(245, 240, 231, 0.7);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.top-actions {
  display: flex;
  gap: 8px;
  flex-shrink: 0;
  align-items: center;
}
.app-top .linkish {
  color: var(--bg);
}

.role-toggle {
  display: flex;
  background: var(--chip);
  border-radius: 9px;
  padding: 2px;
  border: 0;
}
.role-toggle button {
  border: 0;
  background: transparent;
  padding: 5px 10px;
  border-radius: 7px;
  color: var(--ink);
  font-size: 13px;
  font-weight: 600;
}
.role-toggle button.on {
  background: var(--paper);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}

.wrap {
  width: min(720px, 100%);
  margin: 0 auto;
  padding: 8px 16px calc(var(--nav-h) + 28px + env(safe-area-inset-bottom));
}
.screen {
  display: none;
}
.screen.on {
  display: block;
}

h1 {
  font-family: var(--display);
  font-size: 38px;
  font-weight: 700;
  letter-spacing: -0.03em;
  margin: 8px 0 12px;
  line-height: 1.1;
}
h2 {
  font-family: var(--display);
  font-size: 24px;
  margin: 0 0 10px;
  font-weight: 700;
  letter-spacing: -0.02em;
}
.lede {
  color: var(--muted);
  margin: 0 0 16px;
  font-size: 16px;
  line-height: 1.5;
}
.kicker {
  margin: 0 0 4px;
  font-size: 11px;
  font-weight: 700;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.15em;
}
.setup-progress {
  display: flex;
  gap: 6px;
  margin: 0 0 18px;
}
.setup-progress-seg {
  flex: 1;
  height: 4px;
  border-radius: 999px;
  background: var(--line);
}
.setup-progress-seg.done {
  background: var(--accent);
}

/* Sep 16, 2026 -- the sign-up screen (postAuthOnboardingFormHtml() in
   app.js) is rendered into a bare <main id="post-auth-onboarding">, a
   sibling of #shell rather than something inside its sidebar+content
   layout -- so unlike every screen *inside* the app, nothing was ever
   constraining its width. label.field's inputs are width:100%, so on any
   normal-size window they stretched edge to edge, which is what Arun
   flagged as looking amateur. Capped and centered the same way the small
   sign-in modal's .auth-card already is (see below), just wider since this
   screen has real 2-up field grids to fit rather than one narrow column.
   Deliberately scoped to this one screen's own wrapper, not to
   .card.grid-2 itself -- that class is shared by renderSetup() and other
   in-app screens that already read fine at their existing width. */
.post-auth {
  max-width: 640px;
  margin: 0 auto;
  padding: 48px 20px 64px;
}

/* Bold "Who's creating this account?" split -- see
   postAuthOnboardingFormHtml() in app.js. Two equal, clearly-tappable
   options rather than the old "Household type" <select>, since that choice
   is the single most consequential thing on the screen. */
.identity-toggle {
  display: flex;
  gap: 4px;
  background: var(--chip);
  border-radius: var(--radius);
  padding: 4px;
  margin-bottom: 6px;
}
.identity-toggle-btn {
  flex: 1;
  border: 0;
  background: transparent;
  color: var(--muted);
  border-radius: var(--radius);
  padding: 12px 10px;
  font-weight: 700;
  font-size: 14px;
  min-height: 44px;
  transition: background 0.15s, color 0.15s, box-shadow 0.15s;
}
.identity-toggle-btn.on {
  background: var(--paper);
  color: var(--ink);
  box-shadow: var(--shadow);
}

/* Men's/Women's radio pair beside the Sport dropdown on the Sign up screen
   -- see postAuthOnboardingFormHtml()/slugForFamilyAndGender() in app.js.
   Plain native radios (not chips/toggle buttons) since there are only ever
   two, mutually-exclusive, and one can be legitimately disabled (a
   male-only sport like Football) -- a native radio communicates "disabled
   option" for free, a custom toggle button would need extra styling to. */
.radio-row {
  display: flex;
  gap: 16px;
  align-items: center;
  min-height: 44px;
  padding: 4px 0 10px;
  border-bottom: 1px solid var(--line-strong);
}
.radio-inline {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
}
.radio-inline input[type="radio"] {
  width: auto;
  margin: 0;
}
.radio-inline:has(input:disabled) {
  color: var(--muted);
  cursor: not-allowed;
}

/* Multi-select positions on the merged setup screen and Profile -- see
   positionFieldHtml()/bindPositionField() in app.js. Chips rather than a
   native <select multiple> so it's obvious at a glance what's picked, and
   it works the same on mobile as desktop. */
.position-chip-group {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 4px;
}
.position-chip {
  border: 1px solid var(--line-strong, var(--line));
  background: transparent;
  color: var(--ink);
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 13px;
  font-weight: 600;
  min-height: 32px;
}
.position-chip.on {
  background: var(--accent-soft);
  border-color: var(--accent);
  color: var(--ink);
}
/* Print-only plain-text fallback for the Positions chip group (feedback
   round 7, item 6: Arun asked for suggestions on making print match the
   rest of the page's theme instead of pill buttons; he picked "plain
   comma-separated line"). Hidden on screen; swapped in for
   .position-chip-group only while body.ov-print-mode is active. */
.rA-positions-print {
  display: none;
}
.position-chip.on::before {
  content: "✓ ";
}
.position-subhead {
  font-size: 13px;
  font-weight: 600;
  color: var(--muted);
  margin: 10px 0 6px;
}
.metric-tag {
  font-style: normal;
  font-size: 11px;
  font-weight: 600;
  color: var(--muted);
  margin-left: 6px;
}
/* Card title: the small uppercase name at the top of a card (Club Teams,
   Coaches, Key stats by year, Event times, Optional measurements...).
   Section headings (the large serif .section-label above a group of cards)
   are a different level -- see "#view-profile .tab-panel > .section-label". */
.card-title {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--muted);
  font-weight: 700;
  margin: 0;
}
/* Collapsible card: same title, chevron on the right, open by default. */
.optional-metrics > summary {
  display: flex;
  justify-content: space-between;
  align-items: center;
  cursor: pointer;
  list-style: none;
}
.optional-metrics > summary::-webkit-details-marker { display: none; }
.optional-metrics > summary::after {
  content: "›";
  font-size: 20px;
  line-height: 1;
  color: var(--muted);
  transform: rotate(90deg);
  transition: transform 0.15s;
}
.optional-metrics:not([open]) > summary::after { transform: rotate(0deg); }
.optional-metrics[open] > summary { margin-bottom: 10px; }
body.ov-print-mode .position-subhead,
body.ov-print-mode .optional-metrics > summary {
  display: none;
}

/* Merged setup screen's single "Finish setup" action, replacing the old
   4-step wizard's Back/Skip/Continue row. */
.setup-nav.single {
  justify-content: center;
  margin-top: 20px;
}
.setup-nav.single .btn {
  min-width: 240px;
}
.next-note {
  text-align: center;
  color: var(--muted);
  font-size: 13px;
  margin: 8px 0 24px;
}

.row {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
}
.spread {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

.today-head {
  margin: 2px 0 14px;
}
.hero {
  display: flex;
  gap: 14px;
  align-items: center;
  margin: 6px 0 14px;
}
.path-rail-wrap {
  margin: 10px 0 4px;
}
.path-rail {
  display: flex;
  align-items: center;
  gap: 0;
  padding: 2px 2px 0;
}
.path-rail-labels {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  margin-top: 6px;
  gap: 2px;
}
.path-rail-labels span {
  font-size: 10px;
  font-weight: 600;
  color: var(--muted);
  text-align: center;
  line-height: 1.2;
}
.path-rail-labels span.now {
  color: var(--accent);
}
.path-rail-labels span.done {
  color: var(--good);
}
.rail-stop {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: 0;
  padding: 0;
  flex-shrink: 0;
  background: var(--chip);
  color: var(--ink);
  font-size: 12px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  transition:
    transform 0.18s ease,
    background 0.18s ease,
    color 0.18s ease;
}
.rail-stop.done {
  background: var(--good);
  color: #fff;
}
.rail-stop.now {
  background: var(--accent);
  color: #fff;
  box-shadow: 0 0 0 4px var(--accent-soft);
  transform: scale(1.08);
}
.rail-line {
  flex: 1;
  height: 2px;
  min-width: 10px;
  background: var(--line-strong);
  border-radius: 2px;
}
.rail-line.on {
  background: var(--good);
}

.now-card {
  display: grid;
  grid-template-columns: 1fr 92px;
  gap: 14px;
  align-items: stretch;
  background: var(--paper);
  border-radius: var(--radius);
  border: 1px solid var(--line);
  padding: 24px;
  margin-bottom: 16px;
  box-shadow: var(--shadow);
}
.now-main {
  min-width: 0;
}
.now-top {
  display: flex;
  gap: 12px;
  align-items: center;
  margin-bottom: 8px;
}
.now-label {
  margin: 0 0 4px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--muted);
}
.now-card h2 {
  margin: 0;
  font-size: 20px;
  font-weight: 700;
  letter-spacing: -0.2px;
  line-height: 1.2;
}
.now-body {
  margin: 0 0 12px;
  font-size: 15px;
  color: var(--muted);
}
.now-ring {
  position: relative;
  width: 48px;
  height: 48px;
  flex-shrink: 0;
}
.now-ring-svg {
  width: 48px;
  height: 48px;
  transform: rotate(-90deg);
}
.now-ring-track,
.now-ring-fill {
  fill: none;
  stroke-width: 4;
}
.now-ring-track {
  stroke: var(--chip);
}
.now-ring-fill {
  stroke: var(--accent);
  stroke-linecap: round;
  transition: stroke-dasharray 0.6s ease;
}
.now-ring b {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: baseline;
  justify-content: center;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: -0.3px;
  padding-top: 14px;
}
.now-ring b small {
  font-size: 10px;
  color: var(--muted);
  font-weight: 600;
  margin-left: 1px;
}
.now-sleeve {
  border: 1px solid var(--line);
  padding: 0;
  background: var(--ink);
  border-radius: var(--radius);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  color: #fff;
  text-align: left;
  min-height: 128px;
}
.now-sleeve img {
  width: 100%;
  flex: 1;
  object-fit: cover;
  height: 96px;
  display: block;
}
.now-sleeve .film-ph {
  flex: 1;
  width: 100%;
  height: auto;
  border-radius: 0;
  background: var(--accent);
}
.now-sleeve.empty .film-ph {
  background: var(--accent);
}
.now-sleeve span {
  display: block;
  padding: 7px 8px 8px;
  font-size: 11px;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  background: rgba(0, 0, 0, 0.55);
}
@media (max-width: 399px) {
  .now-card {
    grid-template-columns: 1fr;
  }
  .now-sleeve {
    min-height: 0;
    flex-direction: row;
    align-items: center;
  }
  .now-sleeve img,
  .now-sleeve .film-ph {
    width: 56px;
    height: 56px;
    flex: 0 0 56px;
  }
  .now-sleeve span {
    background: transparent;
    color: var(--ink);
  }
  .now-sleeve {
    background: var(--chip);
  }
}
.home-now {
  grid-template-columns: 1fr;
}
.home-tiles {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-bottom: 12px;
}
.home-tile {
  margin: 0;
  text-align: left;
  width: 100%;
  padding: 12px;
  min-height: 0;
}
.home-tile-row {
  display: flex;
  gap: 8px;
  align-items: center;
}
.home-tile strong {
  display: block;
  font-size: 15px;
}
.home-tile p {
  margin: 2px 0 0;
  font-size: 12px;
  color: var(--muted);
}
.home-film {
  margin-top: 6px;
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--ink);
  min-height: 72px;
  display: flex;
  flex-direction: column;
}
.home-film img {
  width: 100%;
  height: 72px;
  object-fit: cover;
  display: block;
}
.home-film .film-ph {
  height: 72px;
  background: var(--accent);
}
.home-film span {
  display: block;
  padding: 6px 8px;
  font-size: 11px;
  font-weight: 600;
  color: #fff;
  background: rgba(0, 0, 0, 0.5);
}
.home-film.empty {
  background: var(--chip);
}
.home-film.empty span {
  color: var(--ink);
  background: transparent;
}
.home-five,
.home-dates {
  padding: 14px 16px;
}
.home-five-row,
.home-date-row {
  display: flex;
  gap: 8px;
  align-items: center;
  width: 100%;
  border: 0;
  background: none;
  text-align: left;
  padding: 12px 0;
  border-bottom: 1px solid var(--line);
}
.home-five-main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}
.home-five-main strong {
  font-size: 16px;
}
.home-five-foot {
  margin: 10px 0 0;
  font-size: 13px;
  color: var(--muted);
}
.home-date-row span:first-child {
  width: 52px;
  color: var(--muted);
  font-size: 13px;
  flex-shrink: 0;
}
@media (max-width: 399px) {
  .home-tiles {
    grid-template-columns: 1fr;
  }
}
@media (prefers-reduced-motion: reduce) {
  .rail-stop,
  .now-ring-fill {
    transition: none;
  }
}
.avatar {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--chip);
  flex-shrink: 0;
}
.avatar.fallback {
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  font-weight: 700;
  color: #fff;
  background: var(--muted);
}

.today-grid {
  margin-bottom: 16px;
}
.film-tile {
  width: 100%;
  display: flex;
  gap: 12px;
  align-items: center;
  text-align: left;
  border: 1px solid var(--line);
  background: var(--paper);
  border-radius: var(--radius);
  padding: 10px 12px;
  color: inherit;
  box-shadow: var(--shadow);
}
.film-tile img,
.film-ph {
  width: 56px;
  height: 56px;
  border-radius: var(--radius);
  object-fit: cover;
  background: var(--ink);
  flex-shrink: 0;
}
.film-ph {
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-size: 16px;
}
.film-tile strong {
  display: block;
  font-size: 17px;
  font-weight: 600;
}
.film-tile span {
  color: var(--muted);
  font-size: 13px;
}
.film-tile.empty .film-ph {
  background: var(--accent);
}

.card {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 20px;
  margin-bottom: 12px;
}
.card.clickable,
.roster-row.clickable {
  cursor: pointer;
}
.card h3,
.roster-row h3 {
  margin: 0 0 2px;
  font-size: 17px;
  font-weight: 600;
}
.card p {
  margin: 0;
  color: var(--muted);
  font-size: 15px;
}

.roster-row {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 10px;
  align-items: center;
  background: var(--paper);
  border: 0;
  border-bottom: 0.5px solid var(--line);
  border-radius: 0;
  padding: 12px 16px;
  margin: 0;
}
.list .roster-row:first-child {
  border-radius: var(--radius) var(--radius) 0 0;
}
.list .roster-row:last-child {
  border-radius: 0 0 var(--radius) var(--radius);
  border-bottom: 0;
}
.list .roster-row:only-child {
  border-radius: var(--radius);
}
.roster-mark {
  display: none;
}
/* Item 16d -- shows only once a school has a sourced logo (see app.js's
   programLogoUrl()); schools without one yet keep the box hidden exactly
   as before, so this doesn't regress anything mid-rollout. */
.roster-mark.has-logo {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 8px;
  background: #fff;
  border: 1px solid var(--line);
  flex-shrink: 0;
  overflow: hidden;
}
.roster-mark.has-logo img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  padding: 4px;
}
.roster-body {
  min-width: 0;
}
.roster-body h3 {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.roster-meta {
  display: flex;
  align-items: center;
  gap: 8px;
}
.roster-meta.stack {
  flex-direction: column;
  align-items: stretch;
  gap: 6px;
  text-align: center;
}

.kpi-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
  margin-bottom: 14px;
}
.kpi {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 16px;
  box-shadow: var(--shadow);
}
.kpi b {
  display: block;
  font-size: 22px;
  font-weight: 700;
}
.kpi span {
  font-size: 11px;
  color: var(--muted);
  text-transform: uppercase;
}
.kpi.done b {
  color: var(--good);
}
.kpi.todo b {
  color: var(--hot);
}

.btn {
  border: 0;
  background: var(--chip);
  color: var(--ink);
  border-radius: var(--radius);
  padding: 8px 16px;
  font-weight: 700;
  font-size: 14px;
  min-height: 40px;
  cursor: pointer;
  transition:
    opacity 0.2s,
    transform 0.2s;
}
.btn:hover {
  opacity: 0.9;
  transform: translateY(-1px);
}
.btn.primary {
  background: var(--accent);
  color: #fff;
}
.btn.ghost {
  background: transparent;
  color: var(--accent);
}
.btn.warn {
  background: var(--accent-soft);
  color: var(--hot);
}
.btn.small {
  padding: 6px 12px;
  font-size: 13px;
  min-height: 32px;
}
.btn.block {
  width: 100%;
}
.btn[disabled] {
  opacity: 0.4;
  cursor: not-allowed;
}

.chip {
  display: inline-flex;
  align-items: center;
  background: transparent;
  border: 0;
  padding: 0;
  font-size: 15px;
  font-weight: 400;
  color: var(--muted);
  text-transform: none;
  letter-spacing: 0;
}
.chip.high {
  color: var(--hot);
}
.chip.medium {
  color: var(--warn);
}
.chip.low,
.chip.d1,
.chip.d2,
.chip.d3,
.chip.naia,
.chip.stale,
.chip.good {
  color: var(--muted);
}

.nav {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  height: calc(var(--nav-h) + env(safe-area-inset-bottom));
  padding-bottom: env(safe-area-inset-bottom);
  background: rgba(23, 32, 31, 0.98);
  backdrop-filter: saturate(180%) blur(20px);
  -webkit-backdrop-filter: saturate(180%) blur(20px);
  border-top: 1px solid rgba(245, 240, 231, 0.15);
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  z-index: 30;
}
.nav button {
  border: 0;
  background: transparent;
  color: rgba(245, 240, 231, 0.6);
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 3px;
  min-height: 44px;
  transition: color 0.2s;
}
.nav button.on {
  color: var(--bg);
}
.board-switch {
  border: 0;
  background: var(--chip);
  color: var(--ink);
  border-radius: 8px;
  padding: 6px 8px;
  font-size: 13px;
  font-weight: 600;
  max-width: 140px;
  /* Lives in the dark .app-top bar, but its own background is the light
     --chip pill, so the base rule's muted-teal arrow still reads fine here --
     just needs the same padding-right restatement the other boxed selects
     need, since this shorthand also clobbers it. */
  padding-right: 24px;
  background-position: right 6px center;
  background-size: 11px;
}
.nav .ico {
  font-size: 18px;
  line-height: 1;
  width: 22px;
  height: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.nav .ico svg {
  width: 22px;
  height: 22px;
  display: block;
}

.filters {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin: 0 0 12px;
}
.filters input,
.filters select {
  border: 1px solid var(--line);
  background: var(--paper);
  color: var(--ink);
  border-radius: var(--radius);
  padding: 10px 12px;
  box-shadow: var(--shadow);
}
.filters select {
  /* Base rule's padding-right would otherwise get clobbered by the shorthand
     padding above (same shorthand sets padding-right: 12px), so restate it
     explicitly to leave room for the chevron inside this box. */
  padding-right: 34px;
}
.filters input {
  min-width: 0;
  flex: 1 1 160px;
}
/* Font-size alignment, Schools (Sep 24, 2026, Arun: review the Schools tab
   for font consistency). The search box and four dropdowns fell through to
   the base button/input/select rule's 17px -- larger than the 14px filter
   chips (.stage-chip) directly beneath them and the 13px meta text in every
   row. 14px matches the chip row. */
.filters input,
.filters select {
  font-size: 14px;
}

.list {
  display: flex;
  flex-direction: column;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow);
}
.meta {
  font-size: 13px;
  color: var(--muted);
}
.chips {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 2px;
}

label.field {
  display: block;
  margin: 0;
  font-size: 13px;
}
/* Direct-child combinator (>), not a descendant selector -- the .req
   marker below is ALSO a <span> in onboarding's markup (postAuthOnboarding
   FormHtml() uses <span class="req">, though Profile/Setup/Club/Coach use
   <i class="req"> and never hit this), nested one level inside this outer
   label span. A plain "label.field span" selector matched both, which
   forced the asterisk onto its own line by giving it this rule's own
   display:block -- not a wrapping issue, so white-space:nowrap could never
   have fixed it. Scoping to ">" excludes any nested .req entirely,
   whatever tag it's written as. */
label.field > span {
  display: block;
  color: var(--muted);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  font-weight: 700;
  margin-bottom: 4px;
}
label.field input,
label.field select,
label.field textarea {
  width: 100%;
  border: 0;
  background: transparent;
  color: var(--ink);
  padding: 4px 0 10px;
  border-bottom: 1px solid var(--line-strong);
}
label.field select {
  /* Underline style has no box to inset the arrow into, so it just sits
     flush with the field's own right edge instead of the boxed 10px offset
     the base rule uses. */
  padding-right: 22px;
  background-position: right center;
}
label.field textarea {
  min-height: 72px;
  resize: vertical;
}
label.field .req {
  display: inline;
  color: var(--hot);
  font-style: normal;
  font-weight: 600;
}
label.field .hint {
  display: block;
  font-style: normal;
  font-size: 12px;
  color: var(--muted);
  margin: -4px 0 10px;
  font-weight: 400;
}

.profile-line {
  display: grid;
  grid-template-columns: 48px 1fr;
  gap: 12px;
  align-items: center;
  cursor: pointer;
}
.profile-line h3 {
  margin: 0;
  font-size: 17px;
}
.profile-line p {
  margin: 2px 0 0;
  font-size: 13px;
  color: var(--muted);
}

.grid-3,
.grid-2,
.card.grid-3,
.card.grid-2 {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0 16px;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 16px 20px;
  box-shadow: var(--shadow);
}
@media (min-width: 560px) {
  .grid-3 {
    grid-template-columns: 1fr 1fr;
  }
}
@media (min-width: 720px) {
  .grid-2 {
    grid-template-columns: 1fr 1fr;
  }
  .grid-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .kpi-grid {
    grid-template-columns: repeat(5, 1fr);
  }
}
.span-2 {
  grid-column: span 1;
}
@media (min-width: 560px) {
  .span-2 {
    grid-column: span 2;
  }
}

.save-bar {
  position: sticky;
  bottom: calc(var(--nav-h) + 8px + env(safe-area-inset-bottom));
  z-index: 15;
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  background: rgba(245, 240, 231, 0.94);
  backdrop-filter: blur(16px);
  border-radius: var(--radius);
  border: 1px solid var(--line);
  padding: 10px;
  margin-top: 12px;
  box-shadow: var(--shadow);
}
.save-bar .meta {
  flex: 1 1 140px;
}

.repeat-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 4px;
  margin-bottom: 8px;
  padding-bottom: 8px;
  border-bottom: 0.5px solid var(--line);
}
.repeat-row.compact {
  padding-bottom: 6px;
  margin-bottom: 4px;
}
@media (min-width: 720px) {
  .repeat-row {
    grid-template-columns: 1fr 90px 1fr auto;
    gap: 10px;
  }
  .repeat-row.stack {
    grid-template-columns: 1fr 1fr;
  }
  .repeat-row.compact {
    grid-template-columns: 1.4fr 1fr 1fr auto;
    align-items: end;
  }
  .repeat-row .grow {
    grid-column: 1 / -2;
  }
  .repeat-row.stack .grow {
    grid-column: 1 / -1;
  }
  .repeat-row.compact .grow {
    grid-column: auto;
  }
}

.section-label {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--muted);
  font-weight: 700;
  margin: 24px 4px 12px;
}
#view-overview .lede {
  margin-bottom: 10px;
}
#view-overview .section-label {
  margin: 14px 4px 8px;
}
/* Feedback round 6, item 10: Summary/Other Strengths auto-grow via
   autosizeOverviewTextarea() (app.js) instead of being a fixed-size
   scrollable box the athlete drags -- min-height above still gives them a
   consistent ~3-line starting height. */
#view-overview label.field textarea {
  resize: none;
  overflow: hidden;
}
/* Coach rows (feedback round 6, item 4) reuse .rA-row's key/value styling
   but sit outside .rA-grid2 -- full width reads better here since the
   value (name + email + phone) is longer than the 2-column fields above
   it. */
#view-overview .rA-coaches {
  margin-top: 6px;
}

.step-list {
  display: flex;
  flex-direction: column;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  overflow: hidden;
  margin-bottom: 16px;
  box-shadow: var(--shadow);
}
.step {
  display: grid;
  grid-template-columns: 28px 1fr auto;
  gap: 10px;
  align-items: center;
  padding: 12px 16px;
  border: 0;
  border-bottom: 0.5px solid var(--line);
  background: transparent;
}
.step:last-child {
  border-bottom: 0;
}
.step.done {
  opacity: 0.55;
}
.step-num {
  width: 24px;
  height: 24px;
  border-radius: var(--radius);
  background: var(--chip);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 700;
}
.step.done .step-num {
  background: var(--good);
  color: #fff;
}
.step.current .step-num {
  background: var(--warn);
  color: #fff;
}
.step h3 {
  margin: 0;
  font-size: 17px;
  font-weight: 600;
}
.step p {
  margin: 2px 0 0;
  font-size: 13px;
  color: var(--muted);
}

.guidance {
  background: var(--paper);
  color: var(--ink);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 24px;
  margin-bottom: 16px;
  box-shadow: var(--shadow);
}
.guidance strong {
  display: block;
  margin-bottom: 4px;
  font-family: var(--display);
  font-size: 24px;
  font-weight: 700;
  color: var(--ink);
  line-height: 1.2;
  letter-spacing: -0.02em;
}
.guidance p {
  margin: 0;
  font-size: 15px;
  color: var(--muted);
}
.guidance .btn.primary {
  margin-top: 12px;
}

.timeline {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.event {
  border-left: 2px solid var(--line-strong);
  padding-left: 12px;
}
.event .when {
  font-size: 12px;
  color: var(--muted);
  margin-bottom: 2px;
}
.event [data-event-hide] {
  display: inline-block;
  font-size: 13px;
  margin-top: 4px;
}
.empty {
  text-align: center;
  color: var(--muted);
  padding: 28px 10px;
}
.data-warn {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  background: rgba(182, 138, 70, 0.12);
  border: 1px solid rgba(182, 138, 70, 0.35);
  border-radius: var(--radius);
  color: var(--ink);
  font-size: 14px;
  padding: 10px 14px;
  margin: 0 0 12px;
}
.data-warn .linkish {
  flex-shrink: 0;
  white-space: nowrap;
}

.empty-sport-directory {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 32px 24px;
  text-align: center;
  max-width: 520px;
  margin: 24px auto;
}
.empty-sport-directory h2 {
  font-family: var(--display);
  font-size: 20px;
  margin: 0 0 10px;
}
.empty-sport-directory p {
  color: var(--muted);
  font-size: 14px;
  line-height: 1.5;
  margin: 0;
}
.toast {
  position: fixed;
  top: calc(64px + env(safe-area-inset-top));
  left: 50%;
  transform: translateX(-50%);
  background: rgba(30, 30, 30, 0.92);
  color: #fff;
  padding: 10px 16px;
  border-radius: 980px;
  font-size: 15px;
  font-weight: 600;
  z-index: 50;
  display: none;
  max-width: calc(100% - 24px);
}
.toast.on {
  display: block;
}

.gate {
  max-width: 480px;
  margin: 60px auto;
  padding: 0 16px 40px;
}
.gate h1 {
  font-family: var(--display);
  font-size: 40px;
  line-height: 1.1;
  letter-spacing: -0.03em;
  margin-bottom: 12px;
}
.covenant {
  font-size: 15px;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 24px;
  box-shadow: var(--shadow);
}
.covenant li {
  margin: 0 0 8px;
}
.mode-tabs {
  display: flex;
  gap: 0;
  margin-bottom: 12px;
  background: var(--chip);
  border-radius: 9px;
  padding: 2px;
}
.mode-tabs .btn {
  flex: 1;
  border-radius: 7px;
  background: transparent;
  min-height: 32px;
}
.mode-tabs button.on {
  background: var(--paper);
  color: var(--ink);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}
.seg {
  display: grid;
  grid-template-columns: 1fr 1fr;
  background: var(--chip);
  border-radius: var(--radius);
  padding: 3px;
  margin: 0 0 14px;
}
.seg button {
  border: 0;
  background: transparent;
  color: var(--muted);
  font-size: 14px;
  font-weight: 700;
  min-height: 36px;
  border-radius: calc(var(--radius) - 1px);
}
.seg button.on {
  background: var(--paper);
  color: var(--ink);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}
/* My Profile's tab bar (Sep 24, 2026 rebuild) -- a 3-column variant of the
   same .seg segmented-control pattern above, sitting directly under the
   "My Profile" H1. See profile-tabs-implementation.md. */
.profile-tabs {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  background: var(--chip);
  border-radius: var(--radius);
  padding: 3px;
  margin: 0 0 14px;
  gap: 2px;
}
@media (max-width: 520px) { .profile-tabs button { font-size: 12px; padding-left: 2px; padding-right: 2px; } }
.profile-tabs button {
  border: 0;
  background: transparent;
  color: var(--muted);
  font-size: 14px;
  font-weight: 700;
  min-height: 36px;
  border-radius: calc(var(--radius) - 1px);
}
.profile-tabs button.on {
  background: var(--paper);
  color: var(--ink);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}
.tab-panel { display: none; }
.tab-panel.on { display: block; }
/* Item 16e added a 3-column .seg-triple variant here for the Target
   list/Directory/Map toggle. Item 16g merged Directory and Map into one
   Discover screen, so the toggle is back to a plain 2-column .seg (My
   List/Discover) and .seg-triple's rule was removed -- nothing else in the
   app used it. */
/* Item 16e -- map view (Leaflet + OpenStreetMap). Leaflet requires its
   container to have a real height to render into; 340px matches this app's
   compact, single-column mobile-first layout, with more room once there's
   width to spare (same breakpoint this file already uses elsewhere). */
.school-map {
  height: 340px;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow);
}
@media (min-width: 720px) {
  .school-map {
    height: 520px;
  }
}
.school-map-caption {
  margin: 8px 0 0;
  text-align: center;
}
.map-popup {
  font-family: var(--sans);
  min-width: 160px;
}
.map-popup strong {
  display: block;
  font-size: 14px;
  color: var(--ink);
  margin-bottom: 2px;
}
.map-popup .meta {
  margin-bottom: 8px;
}
.map-popup-actions {
  display: flex;
  gap: 6px;
}
/* Leaflet ships its own popup chrome (padding, border-radius, close
   button); only the bits that clash with this app's own type/spacing need
   overriding here. */
.leaflet-popup-content {
  margin: 10px 12px;
}
.leaflet-container {
  font-family: var(--sans);
}
/* Item 16g -- cluster badges (Leaflet.markercluster), restyled from its
   default yellow/orange to this app's own palette. Three size tiers are
   the plugin's own class names (small/medium/large = increasing counts of
   markers in the cluster), not something this app defines. */
.marker-cluster-small,
.marker-cluster-medium,
.marker-cluster-large {
  background-color: var(--accent-soft);
}
.marker-cluster-small div,
.marker-cluster-medium div,
.marker-cluster-large div {
  background-color: var(--accent);
  color: #fff;
  font-family: var(--sans);
  font-weight: 700;
}

/* Item 16g -- Discover screen (merges the old Directory + Map tabs). On a
   wide viewport the list and map sit side by side with the map sticky, so
   it stays in view while a long list scrolls. Below the breakpoint there
   isn't room for both -- .discover-toggle-mobile switches which single
   pane is visible via .pane-hidden; both panes stay in the DOM either way
   so Leaflet always has a real container to mount into (see
   initSchoolMap()/discoverHtml() in app.js). */
/* Fix, Sep 16, 2026 -- Arun caught this live: on a wide screen, #view-list
   (like every other .screen) is capped to a comfortable reading width
   (max-width + auto margins) by the app's own desktop-shell styling, which
   is exactly right for text screens but left the Discover layout stranded
   in a narrow column with large unused margins on both sides -- Arun's
   "white space on the left of the list and right of the map." renderList()
   adds a "discover-wide" class to #view-list; the id+class selector here
   outranks the plain-class rule that caps every other .screen, so this is
   the one screen that's allowed to use the full width. Unconditional as of
   the item 18 merge (Sep 17 2026) -- #view-list is Discover-only now, no
   more "mine"/"discover" mode to gate it on. */
#view-list.discover-wide {
  max-width: none;
  margin-left: 0;
  margin-right: 0;
}
.discover-toggle-mobile {
  margin-bottom: 14px;
}
.discover-list,
.discover-map-wrap {
  min-width: 0;
}
@media (max-width: 899px) {
  .discover-list.pane-hidden,
  .discover-map-wrap.pane-hidden {
    display: none;
  }
}
@media (min-width: 900px) {
  .discover-toggle-mobile {
    display: none;
  }
  .discover-layout {
    display: flex;
    align-items: flex-start;
    gap: 20px;
  }
  .discover-list {
    flex: 1 1 420px;
    max-width: 480px;
  }
  .discover-map-wrap {
    flex: 1 1 auto;
    position: sticky;
    /* Fix, Sep 16, 2026 -- this was calc(var(--top-h) + 16px), copying the
       assumption (from this app's other, simpler screens) that the page
       itself scrolls under a fixed top header, so the sticky offset needs
       to clear that header's height. #view-list's actual scroll container
       is main.wrap, which scrolls *itself* (overflow-y: auto) below the
       header rather than under it -- there's no header to clear inside
       that scroll region. The old offset left a large, growing blank gap
       above the map as the list scrolled (Arun caught this live), because
       it was reserving space for a header that was never actually there.
       16px is just breathing room now, matching the gap above the list. */
    top: 16px;
  }
  .discover-map-wrap .school-map {
    height: calc(100vh - var(--top-h) - 48px);
    max-height: 720px;
  }
}

/* Item 16g -- hearting (replaces the old text "Add"/"Remove" button on
   Discover rows and map popups -- see the roadmap's Sep 16
   reprioritization). Same data-add attribute and ensureTarget()/
   removeTarget() calls as before; only the rendering changed. */
.heart-toggle {
  border: 0;
  background: transparent;
  padding: 4px;
  color: var(--muted);
  line-height: 0;
  cursor: pointer;
  flex-shrink: 0;
}
.heart-toggle svg {
  width: 22px;
  height: 22px;
}
.heart-toggle.on {
  color: var(--hot);
}
.locate-toggle {
  border: 0;
  background: transparent;
  padding: 4px;
  color: var(--muted);
  line-height: 0;
  cursor: pointer;
  flex-shrink: 0;
}
.locate-toggle svg {
  width: 20px;
  height: 20px;
}
.locate-toggle:hover,
.locate-toggle:active {
  color: var(--accent);
}
.page-title {
  font-size: 34px;
  margin: 4px 0 14px;
}
/* Page-title unification (Sep 25, 2026, Arun: Today, Schools, Outreach,
   Film Room, Competitions, Profile, Overview all get the same 34px title;
   Overview's title also drops to regular weight). Scoped by view id so
   Overview's athlete-name h1 and Program's school-name h1 are untouched;
   font-size carries !important because mock-ia-*.js/css overlays rewrite
   some of these titles and can restyle them. */
#view-today .today-head h1,
#view-list h1,
#view-log h1.page-title,
#view-film h1,
#view-competitions h1,
#view-profile h1,
#view-overview h1.ov-page-title {
  font-size: 34px !important;
}
#view-account h1 {
  font-size: 34px !important;
  font-weight: 400 !important;
}
#view-overview h1.ov-page-title {
  font-weight: 400 !important;
}
.shell.on-program .app-top,
.shell.on-list .app-top {
  display: none;
}
.shell.on-setup #nav {
  display: none;
}
.log-snippet {
  margin: 4px 0 0;
  font-size: 15px;
  color: var(--ink);
  line-height: 1.35;
}
.log-list .target-row strong {
  white-space: nowrap;
}
.acct-invite {
  padding: 12px 0;
  border-bottom: 1px solid var(--line);
}
.acct-invite input[type="email"] {
  width: 100%;
  margin: 6px 0;
  border: 1px solid var(--line);
  background: var(--chip);
  border-radius: var(--radius);
  padding: 8px 10px;
}
.household-role-note {
  border-left: 4px solid var(--accent);
}
.household-role-note p {
  margin-top: 4px;
}
.setup-card .field {
  margin-bottom: 10px;
}
.setup-nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin: 14px 0 24px;
  gap: 12px;
}
.setup-hits {
  margin-top: 10px;
}
.setup-hit {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 1px solid var(--line);
}
#su-q {
  width: 100%;
  border: 1px solid var(--line);
  background: var(--chip);
  border-radius: var(--radius);
  padding: 10px 12px;
  margin-top: 4px;
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.02);
}
.page-nav {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  margin: 0 0 10px;
}
.page-nav .back {
  padding: 0;
  text-align: left;
  font-size: 17px;
}
/* School details rebuild follow-up (Sep 17, 2026): the mockup's page-nav
   breadcrumb ("‹ Schools" / center title) is muted and compact -- gray,
   15px/13px, weight 600 -- not the app-wide accent-colored/17px .back
   treatment used elsewhere (admin pages). Scoped to the program page only
   so admin's back button is untouched. */
#view-program .page-nav .back {
  color: var(--muted);
  font-weight: 600;
  font-size: 15px;
}
/* Follow-up (Sep 17, 2026): dropped the center "you are here" label and its
   grid layout -- it wasn't sticky, so it never stayed visible after
   scrolling past the real heading right below it, which shows the same
   name a moment later anyway. Only the back link was ever functional here. */
.page-nav.page-nav-simple {
  display: block;
  margin: 0 0 10px;
}
.page-nav strong {
  text-align: center;
  font-size: 17px;
  font-weight: 600;
}
.btn.lg {
  min-height: 44px;
  padding: 10px 16px;
  font-size: 17px;
  flex: 1;
}
.btn.ghost-outline {
  background: var(--paper);
  color: var(--accent);
  box-shadow: inset 0 0 0 1.5px var(--accent);
}
/* School details rebuild follow-up (Sep 17, 2026): the mockup's secondary
   buttons (Draft email, Copy draft, Remove from list) are a neutral
   transparent/ink outline, not this accent-colored treatment -- scoped to
   the program page so the sign-in/landing "ghost-outline" buttons
   elsewhere (Google sign-in, "I already have an account") are untouched. */
#view-program .btn.ghost-outline {
  background: transparent;
  color: var(--ink);
  border: 1px solid var(--line-strong);
  box-shadow: none;
}
.action-pair {
  display: flex;
  gap: 10px;
  margin-top: 14px;
}
.linkish.muted {
  color: var(--muted);
  text-decoration: none;
}
.hidden {
  display: none !important;
}
.back {
  border: 0;
  background: transparent;
  color: var(--accent);
  font-weight: 400;
  padding: 0 0 10px;
  font-size: 17px;
}
.template {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 16px;
  font-size: 15px;
  white-space: pre-wrap;
  width: 100%;
  box-sizing: border-box;
  font-family: inherit;
  line-height: 1.5;
  resize: vertical;
  display: block;
}
.template:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accent-soft);
}
.template-subject-field {
  display: block;
  margin: 0 0 10px;
}
.template-subject-field span {
  display: block;
  color: var(--muted);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  font-weight: 700;
  margin-bottom: 4px;
}
.template-subject {
  width: 100%;
  box-sizing: border-box;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 10px 12px;
  font-family: inherit;
  font-size: 15px;
  color: var(--ink);
}
.template-subject:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 4px var(--accent-soft);
}
.parent-note {
  font-size: 13px;
  color: var(--muted);
  margin-top: 16px;
  padding: 0 4px;
  border: 0;
}

@media (max-width: 560px) {
  .step {
    grid-template-columns: 28px 1fr;
  }
  .step .btn {
    grid-column: 2;
    justify-self: start;
    margin-top: 6px;
  }
  .roster-row {
    grid-template-columns: 1fr;
  }
  .roster-meta {
    justify-content: space-between;
  }
}
@media (max-width: 399px) {
  .nav button {
    font-size: 9.5px;
    letter-spacing: 0.02em;
  }
}

.film-embed {
  position: relative;
  width: 100%;
  padding-top: 56.25%;
  margin-top: 12px;
  background: var(--ink);
  border-radius: var(--radius);
  overflow: hidden;
}
.film-embed iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
}
.film-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  align-items: stretch;
  margin-top: 12px;
}
.film-split .film-embed {
  margin-top: 0;
  width: 100%;
  padding-top: 56.25%;
}
.film-desc {
  margin: 0;
  display: flex;
  flex-direction: column;
}
.film-desc textarea {
  flex: 1;
  min-height: 88px;
}
.film-desc .film-tag-field {
  margin-top: 8px;
}
.film-desc .btn {
  align-self: flex-start;
  margin-top: 8px;
}
/* Free-text tag pill next to a film card's label. Restyled (feedback, Sep
   24, 2026) to match the "regular pill" look used elsewhere -- Profile and
   Overview's .position-chip, Competitions' .comp-game-count -- rather than
   the tiny all-caps letter-spaced badge look of .tag/.tier-pill, which read
   as visually inconsistent with those three pages. Own class rather than
   reusing .position-chip/.comp-game-count directly since neither carries
   this app's shared var(--chip)/980px pill-radius convention by default
   the way .tag/.tier-pill do. */
.film-tag {
  display: inline-block;
  font-size: 12px;
  font-weight: 600;
  background: var(--chip);
  color: var(--ink);
  padding: 4px 10px;
  border-radius: 980px;
  vertical-align: middle;
  margin-left: 6px;
}
/* Intro-highlight radio moved into the card title (Sep 25, 2026, Arun:
   drop the "Intro Highlight" pill badge and the separate radio down in
   the action row -- put one radio, always visible, right where the
   pill used to sit). Sized down from .radio-inline's default 14px/600
   so it reads as a secondary control next to the 17px card title, not
   a second heading. */
.film-card h3 .film-intro-radio {
  font-size: 13px;
  vertical-align: middle;
  margin-left: 6px;
}
/* Wraps multiple .film-tag pills under a card's title when a clip carries
   more than one tag (overlay retirement, Sep 24, 2026 -- folded in real
   multi-tag support). */
.film-tags-row {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-top: 4px;
}
/* Font-size alignment with Profile/Overview (feedback, Sep 24, 2026): Film
   Room's fields used the browser's default form-control font instead of
   this app's 13px convention -- same page-scoped override pattern as
   #view-profile and #view-competitions .comp-body-top use. */
#view-film label.field input,
#view-film label.field select,
#view-film label.field textarea {
  font-size: 13px;
}
/* Font-size alignment, Outreach + Program (Sep 25, 2026, Arun: review the
   Outreach tab for font consistency with Film Room/Competitions/Profile/
   Overview). Outreach's "Log a note" panel (in the op-panel pop-out) and
   Program's own "Log a note" panel both use the same unscoped
   label.field markup -- neither had this page's 13px convention applied,
   so both were falling back to the browser-default 17px. Fixing only
   Outreach would have just traded one inconsistency for a new one between
   these two forms (they're the same fields, reused verbatim -- see
   paintOutreachPanel()'s header comment in app.js), so both are scoped
   here together. */
#view-log label.field input,
#view-log label.field select,
#view-log label.field textarea,
#view-program label.field input,
#view-program label.field select,
#view-program label.field textarea {
  font-size: 13px;
}
@media (max-width: 640px) {
  .film-split {
    grid-template-columns: 1fr;
  }
}
.film-embed.fallback {
  padding-top: 0;
  min-height: 88px;
  display: flex;
  align-items: center;
  gap: 12px;
  background: var(--chip);
  border: 1px solid var(--line);
  color: var(--ink);
  padding: 10px 12px;
}
.film-embed.fallback img,
.film-embed.fallback .film-ph {
  width: 72px;
  height: 48px;
  border-radius: var(--radius);
  object-fit: cover;
  flex-shrink: 0;
}
.film-embed.fallback strong {
  display: block;
  font-size: 14px;
}
.film-embed.fallback span {
  display: block;
  font-size: 13px;
  color: var(--muted);
}
.now-player {
  margin: -4px 0 16px;
}
.now-player .film-embed {
  margin-top: 0;
}

.target-stack {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.target-card {
  margin-bottom: 0;
}
.target-card .now-label {
  margin-bottom: 2px;
}
.target-card .status-line {
  margin: 4px 0 8px;
  font-size: 15px;
  font-weight: 600;
}
.pipe {
  display: flex;
  gap: 2px;
  margin: 0 0 10px;
}
.pipe-stop {
  flex: 1;
  text-align: center;
  font-size: 10px;
  color: var(--muted);
  letter-spacing: 0;
}
.pipe-stop i {
  display: block;
  height: 4px;
  border-radius: 4px;
  background: var(--line);
  margin-bottom: 4px;
}
.pipe-stop.done i {
  background: var(--good);
}
.pipe-stop.now i {
  background: var(--accent);
}
.pipe-stop.now {
  color: var(--ink);
  font-weight: 600;
}
.target-rank-row {
  margin-top: 10px;
}
.rank-jump {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: var(--muted);
}
.rank-jump select {
  border: 1px solid var(--line);
  background: var(--chip);
  border-radius: var(--radius);
  padding: 6px 8px;
  font-size: 15px;
  font-weight: 700;
  color: var(--ink);
  /* Same shorthand-clobbers-padding-right issue as .filters select above --
     this chip is smaller, so a tighter arrow inset/size than the base rule. */
  padding-right: 26px;
  background-position: right 6px center;
  background-size: 11px;
}
.target-card.ranked {
  cursor: grab;
}
.target-card.dragging {
  opacity: 0.55;
}
.target-card.drag-over {
  box-shadow: 0 0 0 2px var(--accent);
}
.chip.fit-safety {
  color: var(--good);
}
.chip.fit-fit {
  color: var(--accent);
}
.chip.fit-reach {
  color: var(--warn);
}
.school-links {
  margin: 6px 0 4px;
  font-size: 16px;
}
.school-links a {
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.school-links span {
  color: var(--muted);
}
/* School details rebuild (Sep 17, 2026) -- this class pre-dates the
   rebuild (it already existed for the "Not submitted"/"In" questionnaire
   badge) but had never actually been given the pill/chip treatment the
   agreed mockup uses -- it was rendering as plain inline text next to the
   Questionnaire link. Matches .tier-pill/.tag's visual language now. */
.form-state {
  display: inline-block;
  color: var(--muted);
  font-size: 12px;
  font-weight: 700;
  padding: 2px 8px;
  margin-left: 4px;
  border-radius: 980px;
  background: var(--chip);
}
.linkish {
  background: none;
  border: 0;
  padding: 0;
  font-size: 15px;
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 2px;
  min-height: 0;
}
/* School details rebuild follow-up (Sep 17, 2026): the mockup's "Copy
   email"/"+ Add a contact"/"Report an issue" links are semibold with a
   pointer cursor -- scoped to the program page so the many other .linkish
   uses across the app (Today, Profile, Film Room, etc.) are untouched. */
#view-program .linkish {
  font-weight: 600;
  cursor: pointer;
}
#view-program .linkish.muted {
  font-weight: 600;
  font-size: 12.5px;
  text-decoration: none;
}
#view-program .linkish.muted:hover {
  text-decoration: underline;
}
.linkish.warn {
  color: var(--hot);
}
/* Profile's repeater-row Remove buttons (Sep 24, 2026) -- a subtle text
   link instead of a pill button, matching the app's existing understated
   "Remove" treatment elsewhere (Film library, Schools list currently get
   this look from mock-ia-ui-pass.js's restyleRemoveButtons() cosmetic
   pass; here it's real markup -- see renderAwardBlock()/renderSeasonBlock()/
   renderClubBlock()/renderCoachBlock()/renderGuardianBlock() in app.js).
   Covers Club Teams, Coaches, Key Stats by Year, Athletic Awards, Family,
   and Academic Awards, since all of them lay out their rows with
   .repeat-row. Not underlined until hovered, per Arun's request -- same
   idea as #view-program .linkish.muted above, just scoped to Profile's
   repeater rows instead of the Program page. */
#view-profile .repeat-row .linkish {
  text-decoration: none;
}
#view-profile .repeat-row .linkish:hover {
  text-decoration: underline;
}
/* Profile/Overview font consistency (Sep 24, 2026, Arun: "please review
   the text font type and size. I want the profile page to be consistent
   to what we show in the overview page"). Two concrete mismatches:

   1) Field values: Profile's label.field inputs/selects/textareas had no
      size override, so they fell back to the global button/input/select/
      textarea reset (17px, see top of file) -- Overview's own field-edit
      inputs (.rA-row-edit input.v) are explicitly 13px. Match that here,
      scoped to Profile only so Setup/onboarding's shared label.field
      markup is untouched.
   2) Section headers: Profile's outer tab-section dividers (Athlete,
      Family, High School, Athletic Details, Academics, etc.) used the
      same small uppercase .section-label eyebrow style as inner
      repeater-card mini-headers (Club Teams, Coaches, Key Stats by Year,
      Athletic/Academic Awards). Overview's section headers (.rA-section
      h2) are a real serif h2 -- 18px, bold, underlined. Restyle Profile's
      OUTER dividers to match via a direct-child selector (.tab-panel >
      .section-label) so the inner repeater-card headers, which are never
      direct children of .tab-panel, keep their current smaller look. */
#view-profile label.field input,
#view-profile label.field select,
#view-profile label.field textarea {
  font-size: 13px;
}
#view-profile .tab-panel > .section-label {
  font-family: var(--display);
  font-size: 18px;
  text-transform: none;
  letter-spacing: -0.02em;
  color: var(--ink);
  font-weight: 700;
  margin: 0 0 10px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--line);
}
.checklist .now-label {
  margin-bottom: 8px;
}
.check-row {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  padding: 8px 0;
  border-bottom: 1px solid var(--line);
  font-size: 16px;
}
.check-row input {
  margin-top: 4px;
  width: 18px;
  height: 18px;
  accent-color: var(--accent);
}
.check-row.current strong {
  color: var(--ink);
}
.check-row .meta {
  display: block;
  margin-top: 2px;
}

/* School details rebuild (Sep 17, 2026) -- header card, replacing the old
   .deal-head/.contact-line (head-coach-in-header) treatment. See
   claude/school-details-rebuild-decisions.md: header is identity-only now
   (avatar, name, priority pill, location/division/conference/sport line),
   with coach contacts moved into their own card below (.coaches-card). */
.head-card {
  padding: 18px 16px 16px;
}
.head-top {
  display: flex;
  align-items: flex-start;
  gap: 14px;
}
.head-mono {
  flex: 0 0 52px;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-weight: 700;
  font-size: 16px;
  font-family: var(--sans);
}
/* Real logo case (programLogoUrl()) -- white circle + contained image
   instead of the colored initials fill, so a non-square/transparent logo
   still reads cleanly inside the same 52px mark. */
.head-mono.head-logo {
  background: #fff;
  border: 1px solid var(--line);
  object-fit: contain;
  padding: 6px;
}
.head-identity {
  flex: 1;
  min-width: 0;
}
.head-title-row {
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex-wrap: wrap;
}
.head-title-row h1 {
  font-family: var(--display);
  font-weight: 400;
  font-size: clamp(24px, 3vw, 32px);
  margin: 0;
  letter-spacing: normal;
}
.tier-pill {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 3px 10px;
  border-radius: 980px;
  white-space: nowrap;
  background: var(--chip);
  color: var(--ink);
}
.head-loc {
  color: var(--muted);
  font-size: 14px;
  margin: 4px 0 0;
}
.head-loc .sep {
  margin: 0 6px;
  opacity: 0.6;
}
.head-card .head-links {
  display: flex;
  gap: 14px;
  align-items: center;
  flex-wrap: wrap;
  font-size: 14px;
  margin: 12px 0 0;
  padding-top: 10px;
  border-top: 1px solid var(--line);
}
/* Overrides the pre-existing .school-links a (accent-colored) treatment
   this markup also carries -- the mockup wants these header links neutral
   ink instead of accent, but still bold AND underlined (the mockup's own
   .head-links a never sets text-decoration: none, so the browser default
   underline shows through) -- that underline is what signals "this is a
   link" now that the color alone no longer does. Correcting an earlier
   pass of this fix that wrongly removed the underline entirely. */
.head-card .head-links a {
  color: var(--ink);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* "Coaches & contacts" card -- official (program_coaches) and private
   (athlete_program_contacts) rows in one list, plus the add-contact and
   report-an-issue panels. */
.card-head-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 4px;
}
.coach-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
  padding: 12px 0;
  border-bottom: 1px solid var(--line);
}
.coach-row:last-of-type {
  border-bottom: 0;
}
.coach-row .who strong {
  font-size: 15px;
}
.coach-row .who .role {
  color: var(--muted);
  font-size: 12px;
  display: block;
  margin-top: 1px;
}
.coach-row .reach {
  font-size: 13px;
  margin-top: 4px;
  color: var(--muted);
}
.coach-row .right {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: 0 0 auto;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.tag {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 2px 7px;
  border-radius: 980px;
  white-space: nowrap;
}
.tag.official {
  background: #e4ece9;
  color: var(--good);
}
.tag.private {
  background: var(--chip);
  color: var(--muted);
}
.card-foot-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px dashed var(--line-strong);
}
.add-contact-form,
.report-form {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px dashed var(--line-strong);
}
.field-full {
  grid-column: 1 / -1;
}

/* "Questions to ask the coach" -- collapsed <details>, real numbered
   badges. Fixes the old mock-ia bug (a native <ol> auto-numbering *plus* a
   hand-written number span, with zero CSS on either): list-style: none
   here suppresses the native marker, so .q-num is the only number shown. */
.prep-card summary {
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-weight: 700;
  font-size: 15px;
}
.prep-card summary::-webkit-details-marker {
  display: none;
}
.q-list {
  list-style: none;
  margin: 14px 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.q-list li {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  font-size: 15px;
}
.q-num {
  flex: 0 0 22px;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--chip);
  color: var(--ink);
  font-size: 11px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 1px;
}
.stage-card {
  padding: 14px 16px 16px;
}
.stage-card .now-label {
  margin-bottom: 8px;
}
.stage-capsule {
  display: flex;
  align-items: center;
  gap: 0;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  background: var(--chip);
  border-radius: 980px;
  padding: 3px;
}
.stage-stop {
  border: 0;
  background: transparent;
  color: var(--muted);
  font-size: 12px;
  font-weight: 600;
  padding: 8px 11px;
  white-space: nowrap;
  border-radius: 980px;
  cursor: pointer;
  flex: 0 0 auto;
}
.stage-stop.done {
  color: var(--ink);
}
.stage-stop .tick {
  color: var(--good);
  font-size: 11px;
}
.stage-stop.on {
  background: var(--accent);
  color: #fff;
}
.work-card {
  padding: 16px;
}
.facts-card {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.fact-last {
  border-left: 0.5px solid var(--line);
  padding-left: 14px;
}
.fact .now-label {
  margin-bottom: 4px;
  letter-spacing: 0.06em;
}
.fact-title {
  margin: 0 0 2px;
  font-size: 20px;
  font-weight: 700;
  letter-spacing: -0.3px;
}
.next-text {
  width: 100%;
  border: 0;
  background: transparent;
  font-size: 14px;
  font-weight: 400;
  padding: 0;
  color: var(--muted);
}
.fact input[type="date"] {
  width: 100%;
  border: 0;
  background: transparent;
  color: var(--muted);
  padding: 2px 0 0;
  font-size: 13px;
}
.last-note {
  margin: 0;
  font-size: 16px;
  font-weight: 600;
  color: var(--muted);
}
.details-tags {
  margin-top: 16px;
  text-align: center;
}
.timeline-card {
  padding: 16px;
}
.timeline-card h2 {
  font-family: var(--display);
  font-weight: 400;
  font-size: 18px;
  letter-spacing: normal;
  margin: 0 0 12px;
}
.timeline-empty {
  text-align: center;
  color: var(--muted);
  padding: 28px 8px 20px;
  margin: 0;
}
.log-panel {
  margin-top: 12px;
  padding-top: 8px;
  border-top: 0.5px solid var(--line);
}

.stage-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 4px;
  align-items: center;
  margin: 0 0 12px;
}
.stage-chip {
  border: 0;
  background: transparent;
  color: var(--muted);
  font-size: 14px;
  font-weight: 500;
  padding: 0 6px 0 0;
}
.stage-chip + .stage-chip::before {
  content: "·";
  color: var(--muted);
  margin-right: 6px;
  font-weight: 600;
}
.stage-chip.on {
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 3px;
  font-weight: 600;
}
.stage-chip[disabled] {
  opacity: 0.45;
  cursor: not-allowed;
}
.info-dot {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 0;
  background: var(--chip);
  color: var(--ink);
  font-size: 12px;
  font-weight: 700;
  font-style: italic;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
.help-sheet {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 14px 16px;
  margin: 0 0 12px;
  font-size: 14px;
  color: var(--ink);
  box-shadow: var(--shadow);
}
.help-sheet p {
  margin: 8px 0;
  color: var(--muted);
  font-size: 14px;
}
.help-defs {
  margin: 8px 0 0;
  padding-left: 18px;
  color: var(--muted);
  font-size: 13px;
}
.help-defs li {
  margin: 0 0 6px;
}
.help-defs strong {
  color: var(--ink);
}

.stage-group {
  margin-bottom: 14px;
}
.stage-head {
  font-size: 12px;
  font-weight: 600;
  color: var(--muted);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 4px 4px 6px;
}
.target-stack {
  display: flex;
  flex-direction: column;
  gap: 0;
  background: var(--paper);
  border-radius: var(--radius);
  border: 1px solid var(--line);
  overflow: hidden;
  box-shadow: var(--shadow);
}
.target-stack .stage-group {
  margin: 0;
}
.target-stack .stage-head {
  padding: 12px 16px 4px;
  background: var(--paper);
}
.target-row {
  display: grid;
  grid-template-columns: 36px 1fr;
  align-items: start;
  gap: 0 4px;
  padding: 16px;
  background: var(--paper);
  border-top: 1px solid var(--line);
}
.target-stack > .target-row:first-child,
.target-stack .stage-group:first-child .target-row:first-child {
  border-top: 0;
}
.target-row.ranked {
  cursor: pointer;
}
.target-main {
  min-width: 0;
}
.target-top {
  display: flex;
  align-items: baseline;
  gap: 8px;
}
.target-top strong {
  font-size: 17px;
  font-weight: 600;
  flex: 1;
  min-width: 0;
}
.target-rank {
  font-size: 15px;
  color: var(--muted);
  font-weight: 500;
  padding-top: 1px;
}
.target-stage {
  display: inline-block;
  font-size: 11px;
  font-weight: 700;
  padding: 2px 8px;
  border-radius: 980px;
  background: var(--chip);
  color: var(--muted);
  white-space: nowrap;
}
.target-row.is-offer .target-stage {
  color: var(--good);
}
.target-row.is-closed {
  opacity: 0.55;
}
.target-next {
  margin: 2px 0 0;
  font-size: 14px;
  color: var(--muted);
}
.due-date {
  color: var(--warn);
  font-weight: 600;
}
.quiet-rank {
  margin-left: 4px;
}
.quiet-rank span {
  display: none;
}
/* Item 18 (Sep 17 2026 merge) -- ".page-title" is also used for the
   Outreach screen's own top-of-page "Outreach" h1; this second heading
   marks where the stage/rank pipeline section ends and the cross-school
   notes log begins, so it's noticeably smaller/tighter than a page title
   even though it borrows that class for font weight/family consistency. */
.log-section-head {
  font-size: 20px;
  margin: 28px 0 2px;
}
.log-thread {
  background: var(--paper);
  /* Sep 18 2026 -- see the .kpi-tile comment above: Outreach-page-only
     rounded/shadowed override. */
  border-radius: 10px;
  border: 1px solid var(--line);
  box-shadow: 0 1px 3px rgba(23, 32, 31, 0.08);
  margin-bottom: 12px;
  overflow: hidden;
}
.log-head,
.log-item {
  display: flex;
  align-items: baseline;
  gap: 12px;
  width: 100%;
  border: 0;
  background: transparent;
  text-align: left;
  padding: 12px 16px;
}
.log-head {
  border-bottom: 1px solid var(--line);
  justify-content: space-between;
}
.log-head strong {
  font-size: 17px;
}
/* align-items: flex-start (was center), Sep 25, 2026, Arun: "Remove" was
   sitting at a different line than "First outreach" -- the flat "Recent
   activity" view's row (.log-item-open > .log-body) stacks three lines
   (.log-flat-head with the school/stage pill, .log-meta, .log-snippet),
   so centering Remove against that whole stack put it roughly level with
   the meta line instead of the top. Top-aligning puts Remove on the same
   line as .log-when and the top of .log-body in every mode -- the school/
   stage pill in flat rows, the date/method in grouped rows. */
.log-item {
  align-items: flex-start;
  gap: 4px;
  padding: 0;
  border-top: 1px solid var(--line);
}
.log-item:first-of-type {
  border-top: 0;
}
.log-item-open {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  flex: 1;
  min-width: 0;
  border: 0;
  background: transparent;
  text-align: left;
  padding: 12px 16px;
}
/* Matches the app's Remove-link standard (Sep 25, 2026, Arun): drop the
   .linkish.muted look (12px, no underline until hover) in favor of the
   same .linkish.warn treatment Remove uses everywhere else -- same color
   and size as Edit, underlined by default. margin-top nudges it down
   slightly since .log-item is now top-aligned (flex-start above) but
   .log-item-hide has no .log-when-style flex-basis pushing it down to
   match that column's baseline. */
.log-item-hide {
  flex: 0 0 auto;
  margin-top: 12px;
  margin-right: 14px;
  white-space: nowrap;
}
.log-when {
  flex: 0 0 52px;
  font-size: 13px;
  font-weight: 600;
  color: var(--muted);
  white-space: nowrap;
}
.log-body {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.log-meta {
  font-size: 13px;
  color: var(--muted);
}
.log-snippet {
  display: block;
  font-size: 15px;
  color: var(--ink);
}

/* ====== Outreach command center (Sep 17 2026, Phase 1) ======
   Pipeline board + KPI row, replacing the old flat stage-filtered/rank-
   drag list -- see renderLog() and friends in app.js, and Decision 1 in
   the build-plan doc. Mobile (base rules, below): stacked -- KPI row,
   then a wide horizontally-scrolling board with every card shown, then
   Communication history underneath (the app's existing order). Desktop
   (min-width: 900px, at the bottom of this block): the margin-rail layout
   -- Communication history in the wide main column, a compact sticky rail
   in the right margin. */

.kpi-row {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  padding-bottom: 2px;
  margin-bottom: 18px;
}
.kpi-tile {
  flex: 1 0 104px;
  min-width: 104px;
  background: var(--paper);
  border: 1px solid var(--line);
  /* Sep 18 2026 -- Arun's explicit request to bring the mockup's rounded,
     shadowed card look onto the Outreach page specifically, overriding
     this app's earlier deliberate sharp-corner/no-shadow default (var(
     --radius)/var(--shadow), still 2px/none everywhere else) for this
     page's boxes only: kpi-tile, log-thread, pipeline-card,
     pipeline-stage-row, pipeline-col below. Shadow color is the app's own
     --ink at low opacity rather than the mockup's hardcoded rgba(31,27,22),
     same "real tokens, mockup's shape" pattern used elsewhere. */
  border-radius: 10px;
  box-shadow: 0 1px 3px rgba(23, 32, 31, 0.08);
  padding: 10px 12px;
  cursor: pointer;
}
.kpi-tile:hover {
  border-color: var(--accent);
  transform: translateY(-1px);
}
.kpi-tile.active {
  border-color: var(--accent);
  /* var(--accent) at ~18% opacity -- matches the mockup's soft focus glow
     without hardcoding a color the app's real accent doesn't produce. */
  box-shadow: 0 0 0 2px rgba(157, 45, 46, 0.18);
}
.kpi-tile.kpi-tile-countdown {
  cursor: default;
  background: var(--ink);
  border-color: var(--ink);
  color: var(--paper);
}
.kpi-tile.kpi-tile-countdown:hover {
  transform: none;
  border-color: var(--ink);
}
/* Red, not amber (Sep 25, 2026, Arun: this and .kpi-num.warn below should
   read as red/urgent, not the app's neutral --warn amber). Not a plain
   var(--hot) here, though -- this tile's background is var(--ink) (near-
   black), and --hot on --ink only clears a ~2.3:1 contrast ratio, well
   under WCAG AA's 4.5:1 for normal text. This is --hot mixed 35% toward
   --paper, landing at a clearly-red-reading ~4.7:1 -- legible on this
   specific dark tile without inventing an unrelated color. */
.kpi-tile.kpi-tile-countdown .kpi-num {
  color: #be7574;
}
.kpi-tile.kpi-tile-countdown .kpi-label,
.kpi-tile.kpi-tile-countdown .kpi-sub {
  color: rgba(252, 251, 247, 0.65);
}
.kpi-num {
  font-size: 22px;
  font-weight: 700;
  line-height: 1.1;
}
/* Red, not amber (Sep 25, 2026, Arun) -- this tile sits on the light
   var(--paper) background, so the plain brand red reads clearly with no
   contrast concern (unlike the countdown tile's --ink background above). */
.kpi-num.warn {
  color: var(--hot);
}
.kpi-label {
  font-size: 11px;
  font-weight: 700;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.02em;
  margin-top: 2px;
}
.kpi-sub {
  font-size: 10.5px;
  color: var(--muted);
  margin-top: 1px;
}

.board-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin: 0 0 10px;
}
.board-head h2 {
  font-family: var(--display);
  font-size: 20px;
  margin: 0;
}
.board-head-right {
  display: flex;
  align-items: center;
  gap: 8px;
}
.board-head .hint {
  font-size: 11.5px;
  color: var(--muted);
}
.log-section-head-flush {
  margin-top: 0;
}
/* Sep 18 2026 -- Communication history header row (renamed from "Notes")
   + Recent-activity/By-school view toggle, punch-list items 4 & 5. */
.comm-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin: 0 0 4px;
}
.comm-head .log-section-head {
  margin: 0;
}
.comm-head .hint {
  font-size: 11.5px;
  color: var(--muted);
}
/* Reuses the app's existing .seg segmented-control primitive (same one
   behind My List/Discover and the compose panel's draft-kind selector)
   rather than inventing a parallel toggle component -- just switches it
   from a full-width 2-column grid to an inline, content-width pair of
   buttons like the mockup's own compact toggle. */
.seg.comm-view-toggle {
  display: inline-flex;
  width: auto;
  gap: 4px;
  padding: 3px;
  margin: 0 0 10px;
}
.seg.comm-view-toggle button {
  flex: 0 0 auto;
  padding: 6px 14px;
  font-size: 12.5px;
  min-height: auto;
}
/* "Recent activity" flat rows -- each one names its own school + stage
   inline (renderOutreachNotesFlat()) instead of sitting under a shared
   .log-head thread header the way the grouped view's rows do. */
.log-flat-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font-size: 15px;
  margin-bottom: 2px;
}

/* Fix, matching #view-list.discover-wide's precedent -- #view-log, like
   every other .screen, is otherwise capped to a comfortable reading width
   by the desktop shell, which would squeeze the two-column rail layout
   into a narrower column than the viewport actually has room for. Toggled
   by renderOutreachLayout() in app.js, only while the desktop layout is
   showing. */
#view-log.outreach-wide {
  max-width: none;
  margin-left: 0;
  margin-right: 0;
}

/* ---- Cards, shared by the desktop rail and the mobile board ---- */
.pipeline-stage-name {
  font-size: 11px;
  font-weight: 600;
  color: var(--muted);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.pipeline-stage-count {
  background: var(--ink);
  color: var(--paper);
  font-size: 10.5px;
  font-weight: 700;
  border-radius: 999px;
  padding: 1px 7px;
}
.pipeline-stage-count.zero {
  background: var(--chip);
  color: var(--muted);
}
.pipeline-stage-empty {
  font-size: 11.5px;
  color: var(--muted);
  padding: 6px 2px;
}
.pipeline-card {
  background: var(--paper);
  border: 1px solid var(--line);
  /* Sep 18 2026 -- see the .kpi-tile comment above: Outreach-page-only
     rounded/shadowed override. */
  border-radius: 10px;
  box-shadow: 0 1px 3px rgba(23, 32, 31, 0.08);
  padding: 8px 10px;
  cursor: pointer;
}
.pipeline-card.dragging {
  opacity: 0.4;
}
.pipeline-card-school {
  font-weight: 600;
  font-size: 13px;
  display: block;
}
.pipeline-card-next {
  margin: 2px 0 0;
  font-size: 11.5px;
  color: var(--muted);
  display: flex;
  justify-content: space-between;
  gap: 6px;
}
.pipeline-card-actions {
  display: flex;
  gap: 5px;
  margin-top: 6px;
}
.pipeline-step-btn {
  flex: 1;
  border: 1px solid var(--line);
  background: var(--paper);
  color: var(--ink);
  font-size: 10.5px;
  font-weight: 600;
  border-radius: var(--radius);
  padding: 4px 5px;
  cursor: pointer;
}
.pipeline-step-btn:hover:not([disabled]) {
  border-color: var(--accent);
  color: var(--accent);
}
.pipeline-step-btn[disabled] {
  opacity: 0.4;
  cursor: default;
}
.pipeline-step-btn.pipeline-step-advance {
  font-weight: 700;
}
.pipeline-more {
  border: 1px dashed var(--line);
  background: none;
  color: var(--muted);
  font-size: 10.5px;
  font-weight: 600;
  border-radius: var(--radius);
  padding: 5px 8px;
  cursor: pointer;
  text-align: center;
  width: 100%;
}
.pipeline-more:hover {
  border-color: var(--accent);
  color: var(--accent);
}

/* ---- Desktop rail: compact, one row per stage ---- */
.outreach-board-rail {
  display: flex;
  flex-direction: column;
  gap: 7px;
}
.pipeline-stage-row {
  background: var(--chip);
  /* Sep 18 2026 -- see the .kpi-tile comment above: Outreach-page-only
     rounded override (no shadow here -- this is a flat chip-colored
     stage-row background in both the mockup and the app, not a card). */
  border-radius: 10px;
  padding: 8px 10px;
}
.pipeline-stage-row.drag-over {
  outline: 2px dashed var(--accent);
  outline-offset: -2px;
}
.pipeline-stage-row-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 6px;
}
.pipeline-cards {
  display: flex;
  flex-direction: column;
  gap: 5px;
}

/* ---- Mobile board: wide, horizontally-scrolling columns, every card
   shown (no 2-card cap). Touch-sized Back/Advance buttons (~40px tap
   target) replace drag entirely, since native HTML5 drag never fires on a
   touchscreen -- see bindPipelineCards()/renderOutreachWideBoard() in
   app.js and Decision 6 in the build-plan doc. ---- */
.outreach-board-wide {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(200px, 1fr);
  align-items: start;
  gap: 10px;
  overflow-x: auto;
  padding-bottom: 8px;
}
.pipeline-col {
  background: var(--chip);
  /* Sep 18 2026 -- see the .kpi-tile comment above: Outreach-page-only
     rounded override. */
  border-radius: 10px;
  padding: 10px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.pipeline-col-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 2px 2px 4px;
}
.pipeline-card-wide {
  padding: 11px 12px;
}
.pipeline-card-wide .pipeline-card-school {
  font-size: 14px;
}
.pipeline-card-wide .pipeline-card-next {
  font-size: 12.5px;
}
.pipeline-step-btn-wide {
  font-size: 12.5px;
  font-weight: 700;
  padding: 10px 6px;
  min-height: 40px;
  border-radius: var(--radius);
}
.pipeline-step-btn-wide.pipeline-step-advance {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}
.pipeline-step-btn-wide.pipeline-step-advance[disabled] {
  background: var(--paper);
  color: var(--ink);
  opacity: 0.4;
}

/* ---- Desktop two-column layout (>=900px, matching Discover's own
   breakpoint -- see #view-list.discover-wide / .discover-layout above
   for the identical convention) ---- */
@media (min-width: 900px) {
  .outreach-layout {
    display: flex;
    align-items: flex-start;
    gap: 24px;
  }
  .outreach-main {
    flex: 1 1 auto;
    min-width: 0;
  }
  .outreach-rail {
    flex: 0 0 300px;
    min-width: 0;
    position: sticky;
    top: 16px;
  }
}

/* ---------- Phase 2: Outreach slide-in panel ("panel parity") ----------
   Sep 17 2026 -- per the Outreach Board build-plan doc's Phase 2: clicking
   a pipeline card or a Notes thread now opens this slide-in panel instead
   of navigating to the full Program page (see openOutreachPanel() /
   bindPipelineCards() / renderOutreachNotes() in app.js). Deliberately
   reuses the real Draft-email/Log-note primitives the Program page already
   has and already looks right (.stage-capsule/.stage-stop, .facts-card/
   .fact, .seg.draft-kinds, .template/.template-subject-field, .action-pair,
   .log-panel, .field/.grid-2) instead of inventing parallel styling --
   "full compose parity" means this IS the same compose UI, just inside a
   panel instead of a full page. Only the outer shell (scrim, sliding
   panel, its head, and the handful of panel-only rows the full page
   doesn't need) is new here. --shadow is "none" and --radius is 2px
   app-wide (see :root) -- this doesn't borrow the mockup's rounded/
   shadowed look, same deliberate adaptation as the rest of the
   command-center build. */
.op-scrim {
  position: fixed;
  inset: 0;
  background: rgba(23, 32, 31, 0.4);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.18s;
  z-index: 60;
}
.op-scrim.on {
  opacity: 1;
  pointer-events: auto;
}
.op-panel {
  position: fixed;
  top: 0;
  right: 0;
  height: 100%;
  height: 100dvh;
  width: min(440px, 94vw);
  background: var(--paper);
  border-left: 1px solid var(--line-strong);
  transform: translateX(100%);
  transition: transform 0.2s ease;
  z-index: 61;
  display: flex;
  flex-direction: column;
}
.op-panel.on {
  transform: translateX(0);
}
.op-panel-head {
  padding: 18px 20px 12px;
  border-bottom: 1px solid var(--line);
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
  flex: 0 0 auto;
}
.op-panel-head h2 {
  font-family: var(--display);
  font-weight: 400;
  font-size: 20px;
  margin: 0 0 3px;
}
.op-panel-head .meta {
  margin: 0;
}
.op-panel-close {
  border: 0;
  background: transparent;
  font-size: 22px;
  line-height: 1;
  color: var(--muted);
  padding: 2px 4px;
  flex: 0 0 auto;
}
.op-panel-body {
  padding: 16px 20px 24px;
  overflow-y: auto;
  flex: 1;
}
.op-panel-section {
  margin-bottom: 18px;
}
.op-panel-section-tight {
  margin-bottom: 12px;
}
.op-panel-label {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--muted);
  margin: 0 0 8px;
}
/* Sep 17 2026 follow-up -- pulled straight from the approved mockup's own
   .stage-rail/.stage-pill spec (independent pills in a loose wrapped row,
   not the Program page's single enclosing .stage-capsule bar) rather than
   reusing renderProgram()'s stage stepper. Colors/text still come from the
   app's real tokens (var(--chip)/var(--accent)), and the radius is the
   app-wide pill exception (980px) that .chip/.stage-stop already use --
   only the *structure* was the actual mismatch flagged Sep 17, not the
   color system. */
.op-stage-rail {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-bottom: 8px;
}
.op-stage-pill {
  font-size: 11.5px;
  font-weight: 600;
  padding: 4px 9px;
  border-radius: 980px;
  background: var(--chip);
  color: var(--muted);
}
.op-stage-pill.done {
  color: var(--ink);
}
.op-stage-pill.on {
  background: var(--accent);
  color: #fff;
  font-weight: 700;
}
/* Next/Last, as two small filled cards side by side -- the mockup's own
   .fact-row-pair/.fact-mini, not renderProgram()'s plain-text .facts-card
   (which itself doesn't match the mockup either -- see the Sep 17 review).
   Radius stays var(--radius) (2px), matching every other small card in the
   app (.kpi-tile, .pipeline-card, ...); only the mockup's "put it in a
   filled box" structure carries over. */
.op-fact-pair {
  display: flex;
  gap: 10px;
  margin-top: 12px;
}
.op-fact-mini {
  flex: 1;
  background: var(--chip);
  border-radius: var(--radius);
  padding: 7px 10px;
}
.op-fact-mini-label {
  display: block;
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--muted);
  margin-bottom: 1px;
}
.op-fact-mini .v {
  font-size: 13px;
  color: var(--ink);
}
/* Warm amber notice, matching the app's own existing .data-warn token
   treatment (rgba(--warn)) rather than the mockup's hand-picked hex --
   same "real tokens, mockup's structure" split as the stage pills above. */
.op-form-cta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  background: rgba(182, 138, 70, 0.12);
  border: 1px solid rgba(182, 138, 70, 0.35);
  border-radius: var(--radius);
  padding: 9px 12px;
  margin: 10px 0 0;
}
.op-form-cta p {
  margin: 0;
  font-size: 13px;
  color: var(--ink);
  line-height: 1.4;
}
.op-form-cta .btn {
  flex: 0 0 auto;
  padding: 7px 12px;
  font-size: 13px;
  min-height: auto;
}
.op-activity summary {
  cursor: pointer;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--muted);
  padding: 4px 0;
  list-style: none;
}
.op-activity summary::-webkit-details-marker {
  display: none;
}
.op-activity summary::before {
  content: "▸ ";
}
.op-activity[open] summary::before {
  content: "▾ ";
}
.op-mini-log {
  margin-top: 8px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.op-mini-log .row {
  font-size: 13px;
  border-bottom: 1px solid var(--line);
  padding-bottom: 8px;
  color: var(--ink);
}
.op-mini-log .when {
  color: var(--muted);
  font-weight: 700;
  margin-right: 6px;
}
.op-mini-log .empty {
  color: var(--muted);
  font-size: 13px;
}
/* Draft email / Log a note: deliberately the bare .btn (filled var(--chip),
   var(--radius)) -- that's already an exact match for the mockup's own
   .btn.ghost treatment, so no override was needed here, just NOT adding
   .ghost-outline the way the Program page's #copy-tmpl/#reveal-log do. */
.op-action-row {
  display: flex;
  gap: 10px;
}
.op-action-row .btn {
  flex: 0 0 auto;
}
.op-closed-note {
  background: var(--chip);
  border-radius: var(--radius);
  padding: 10px 12px;
}
.op-closed-note p {
  margin: 0 0 8px;
  font-size: 13px;
  color: var(--muted);
  line-height: 1.4;
}
/* Sep 17 (post-launch correction): Arun flagged the panel still didn't
   read as the mockup even after the chrome fixes above -- specifically the
   Draft-email/Copy-draft action pair and the Intro/Follow-up/Update
   selector, both of which had been left on the real Program page's own
   accent-primary/ghost-outline and grouped-segmented-track styling ("full
   compose parity" per the original Phase 2 spec) instead of the mockup's
   own treatment for these controls. Overriding those two, scoped to the
   panel only -- the Program page's own copies of these same controls are
   deliberately left untouched here, so this does introduce one small
   inconsistency between the panel and the full Program page that didn't
   exist before; flagged rather than silently carried into both. */
.op-panel .btn.ghost-outline {
  background: transparent;
  color: var(--ink);
  border: 1px solid var(--line-strong);
  box-shadow: none;
}
.op-panel #op-copy-draft {
  background: var(--chip);
  color: var(--ink);
  border: 0;
  box-shadow: none;
}
.op-panel .linkish {
  font-weight: 600;
  cursor: pointer;
}
/* Not in the mockup at all -- this panel's one addition beyond it, an
   escape hatch to the fuller Program-page editor (Coaches & contacts,
   Details, per-event timeline removal) the mockup never modeled. Kept
   deliberately quiet (small, muted, no underline-on-load) so it doesn't
   compete with the mockup's own approved content above it. */
.op-view-full {
  display: inline-block;
  margin-top: 4px;
  background: none;
  border: none;
  padding: 0;
  font-size: 11.5px;
  font-weight: 400;
  color: var(--muted);
  text-decoration: underline;
  text-underline-offset: 2px;
  cursor: pointer;
}

/* Expand-to-full-screen compose popout (Phase 2 item 4) */
.op-expand-modal {
  position: fixed;
  top: 4vh;
  left: 50%;
  transform: translateX(-50%) scale(0.97);
  width: min(760px, 94vw);
  height: 92vh;
  background: var(--paper);
  border: 1px solid var(--line-strong);
  z-index: 71;
  display: flex;
  flex-direction: column;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.16s, transform 0.16s;
}
.op-expand-modal.on {
  opacity: 1;
  pointer-events: auto;
  transform: translateX(-50%) scale(1);
}
.op-expand-scrim {
  z-index: 70;
}
.op-expand-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px;
  border-bottom: 1px solid var(--line);
  font-size: 15px;
}
.op-expand-textarea {
  flex: 1;
  margin: 16px 20px 0;
  width: calc(100% - 40px);
  min-height: 0;
  resize: none;
}
.op-expand-modal .action-pair {
  margin: 14px 20px 20px;
}

@media (max-width: 520px) {
  .op-panel {
    width: 100vw;
  }
}

/* ---- Competitions redesign (Sep 24, 2026) -- accordion cards, no-cap
   games table (>= 640px) with a stacked fallback below it, and
   Remove-event moved to the top of the card. Per-game Date was tried as
   a conditional field in round 4, then dropped outright in round 7 along
   with the per-game Remove text link and the boxed input shading -- see
   competitions-redesign-mockup.md in the project for the full design
   history. ---- */
.comp-card {
  margin-bottom: 12px;
  overflow: hidden;
}
.comp-card > summary {
  list-style: none;
  cursor: pointer;
  padding: 20px;
  display: flex;
  align-items: center;
  gap: 14px;
}
.comp-card > summary::-webkit-details-marker { display: none; }
.comp-card > summary::marker { content: ""; }
.comp-card > summary:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }

.comp-summary-main { flex: 1; min-width: 0; }
.comp-summary-name {
  font-weight: 700;
  font-size: 16px;
  color: var(--ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.comp-summary-meta {
  font-size: 13px;
  color: var(--muted);
  margin-top: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.comp-game-count {
  font-size: 12px;
  font-weight: 700;
  color: var(--good);
  background: var(--chip);
  border-radius: 980px;
  padding: 4px 12px;
  white-space: nowrap;
  flex: none;
}
.comp-game-count.zero { color: var(--muted); }
.comp-chevron {
  flex: none;
  width: 18px;
  height: 18px;
  color: var(--muted);
  transition: transform 0.15s ease;
}
.comp-card[open] .comp-chevron { transform: rotate(180deg); }

.comp-body { padding: 0 20px 20px; border-top: 1px solid var(--line); }
.comp-body-top { padding-top: 16px; }
.comp-body-top-head {
  display: flex;
  justify-content: flex-end;
  margin-bottom: 8px;
}

/* Field font-size fix, same as Profile's page-scoped override -- keeps the
   app-wide underline field treatment, just at 13px instead of falling back
   to the generic 17px input reset. */
#view-competitions .comp-body-top label.field input,
#view-competitions .comp-body-top label.field select {
  font-size: 13px;
}

/* Round 8: Start/End/Location/Club or team on one row instead of two --
   date fields get a narrow fixed column since a date value never needs
   the half-width a text field does; Location/Club get the room that
   frees up. Overrides the shared .grid-2 card's column template only
   inside this page's event-fields row (specificity via #view-competitions
   beats .grid-2's own media-query rule), not the many other .grid-2 uses
   across the app. */
#view-competitions .comp-body-top .comp-fields-row {
  grid-template-columns: 110px 110px 1fr 1fr;
  align-items: end;
}
@media (max-width: 639px) {
  #view-competitions .comp-body-top .comp-fields-row {
    grid-template-columns: 1fr 1fr;
  }
}

/* ---- Games table (>= 640px) ---- */
.games-table { width: 100%; border-collapse: collapse; margin-bottom: 4px; }
.games-table th {
  text-align: left;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--muted);
  font-weight: 700;
  padding: 0 8px 8px;
}
.games-table th.num-col { width: 34px; }
.games-table th.title-col { width: 38%; }
.games-table th.url-col { width: 26%; }
.games-table th.remove-col { width: 34px; }
.games-table td { padding: 6px 8px; vertical-align: middle; }
.games-table tr + tr td { border-top: 1px solid var(--line); }
.games-table .game-num {
  font-weight: 700;
  font-size: 13px;
  color: var(--muted);
}
.games-table input {
  width: 100%;
  border: 0;
  background: transparent;
  color: var(--ink);
  font-family: var(--sans);
  font-size: 13px;
  padding: 8px 4px;
}
.games-table input::placeholder { color: var(--muted); opacity: 0.7; }
.games-table td.remove-cell { text-align: right; white-space: nowrap; }
.game-remove-btn {
  text-decoration: none;
  font-size: 20px;
  line-height: 1;
  font-weight: 800;
  color: var(--accent);
  padding: 0 4px;
}
.game-remove-btn:hover { text-decoration: underline; }

/* ---- Stacked game rows (< 640px) -- same fields, one card per game,
   mirrors how Profile's own repeater rows already collapse to a stack at
   a narrower breakpoint. ---- */
.games-stack { display: none; }
.game-stack-row {
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 10px 10px 4px;
  margin-bottom: 10px;
}
.game-stack-row .game-stack-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 6px;
}
.game-stack-row .game-num { font-weight: 700; font-size: 13px; color: var(--muted); }
.game-stack-row label.field { padding-bottom: 8px; }
.game-stack-row label.field input {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: transparent;
  padding: 9px 10px;
  font-size: 13px;
}

@media (max-width: 639px) {
  .games-table { display: none; }
  .games-stack { display: block; }
}

.add-game-row { margin-top: 4px; }
.add-game-row button { font-size: 14px; font-weight: 700; }

.empty-games {
  text-align: center;
  color: var(--muted);
  font-size: 13px;
  padding: 14px 10px;
  border: 1px dashed var(--line);
  border-radius: 8px;
  margin-bottom: 10px;
}

/* ====== NEW DESKTOP & LANDING LAYOUT OVERRIDES ====== */

/* Landing Page */
.landing-layout {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  min-height: 100dvh;
  margin: 0;
  background: var(--bg);
}

.landing-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 24px 32px;
  background: var(--bg);
  z-index: 10;
  position: relative;
}

.landing-split {
  display: flex;
  flex-direction: column;
  min-height: 80vh;
}

@media (min-width: 900px) {
  .landing-split {
    flex-direction: row;
  }
}

.landing-hero-left {
  flex: 1;
  padding: 48px 32px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  max-width: 700px;
}

@media (min-width: 900px) {
  .landing-hero-left {
    padding: 64px 80px 120px;
  }
}

.sport-cue {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--warn);
  margin-bottom: 24px;
}

.landing-title {
  font-family: var(--display);
  font-size: clamp(48px, 6vw, 72px);
  line-height: 1.05;
  letter-spacing: -0.03em;
  margin-bottom: 24px;
  color: var(--ink);
}

.landing-lede {
  font-size: clamp(18px, 2.5vw, 24px);
  line-height: 1.5;
  color: var(--muted);
  margin-bottom: 48px;
  max-width: 580px;
}

.landing-actions {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}
.landing-actions .btn {
  font-size: 16px;
  padding: 12px 24px;
}

.landing-hero-right {
  flex: 1;
  background: var(--ink);
  position: relative;
  min-height: 400px;
}

.hero-image-panel {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/7QBQUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAABgcAm4AE01hZGUgd2l0aCBHb29nbGUgQUk4QklNBCUAAAAAABDIs4lltEU3qRin51mYyOP2/+EDAWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNy4wLWMwMDAiPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHhtbG5zOklwdGM0eG1wRXh0PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VGaWxlVHlwZT0iaHR0cDovL2N2LmlwdGMub3JnL25ld3Njb2Rlcy9kaWdpdGFsc291cmNldHlwZS90cmFpbmVkQWxnb3JpdGhtaWNNZWRpYSIgSXB0YzR4bXBFeHQ6RGlnaXRhbFNvdXJjZVR5cGU9Imh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWEiIHBob3Rvc2hvcDpDcmVkaXQ9Ik1hZGUgd2l0aCBHb29nbGUgQUkiLz4KPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K/9sAQwAQCwwODAoQDg0OEhEQExgoGhgWFhgx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");
  opacity: 0.6;
  mix-blend-mode: luminosity;
}
.hero-image-panel::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to top,
    var(--ink) 0%,
    transparent 40%
  );
}

.landing-lower {
  background: var(--paper);
  padding: 64px 32px;
  display: flex;
  flex-direction: column;
  gap: 64px;
  border-top: 1px solid var(--line);
}

@media (min-width: 900px) {
  .landing-lower {
    padding: 80px 80px;
    flex-direction: row;
    align-items: flex-start;
    justify-content: space-between;
  }
}

.landing-principles {
  display: flex;
  flex-direction: column;
  gap: 48px;
  flex: 1;
  max-width: 800px;
}

@media (min-width: 768px) {
  .landing-principles {
    flex-direction: row;
    gap: 32px;
  }
}

.principle {
  flex: 1;
}

.p-num {
  font-family: var(--display);
  font-size: 14px;
  color: var(--muted);
  border-bottom: 1px solid var(--line);
  display: inline-block;
  padding-bottom: 4px;
  margin-bottom: 16px;
  width: 100%;
}

.principle h3 {
  font-family: var(--display);
  font-size: 22px;
  margin-bottom: 12px;
  color: var(--ink);
}

.principle p {
  color: var(--muted);
  font-size: 16px;
  line-height: 1.6;
}

.landing-proof {
  flex: 0 0 320px;
}

.proof-card {
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 24px;
}

.proof-header {
  display: flex;
  align-items: center;
  gap: 16px;
}

.proof-avatar {
  width: 48px;
  height: 48px;
  border-radius: var(--radius);
  background-size: cover;
  background-position: center;
  background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/7QBQUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAABgcAm4AE01hZGUgd2l0aCBHb29nbGUgQUk4QklNBCUAAAAAABDIs4lltEU3qRin51mYyOP2/+EDAWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNy4wLWMwMDAiPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHhtbG5zOklwdGM0eG1wRXh0PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VGaWxlVHlwZT0iaHR0cDovL2N2LmlwdGMub3JnL25ld3Njb2Rlcy9kaWdpdGFsc291cmNldHlwZS90cmFpbmVkQWxnb3JpdGhtaWNNZWRpYSIgSXB0YzR4bXBFeHQ6RGlnaXRhbFNvdXJjZVR5cGU9Imh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWEiIHBob3Rvc2hvcDpDcmVkaXQ9Ik1hZGUgd2l0aCBHb29nbGUgQUkiLz4KPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K/9sAQwANCQoLCggNCwoLDg4NDxMgFRMSEhMn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");
  border: 1px solid var(--line);
}

.proof-meta {
  display: flex;
  flex-direction: column;
}
.proof-meta strong {
  font-family: var(--display);
  font-size: 17px;
  color: var(--ink);
}
.proof-meta span {
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--muted);
}

.proof-stat {
  display: flex;
  align-items: center;
  gap: 16px;
}

.stat-circle {
  position: relative;
  width: 56px;
  height: 56px;
}

.circular-chart {
  display: block;
  margin: 0 auto;
  max-width: 100%;
  max-height: 250px;
}

.circle-bg {
  fill: none;
  stroke: var(--chip);
  stroke-width: 3.8;
}

.circle {
  fill: none;
  stroke-width: 3.8;
  stroke: var(--warn);
  stroke-linecap: round;
  animation: progress 1s ease-out forwards;
}

@keyframes progress {
  0% {
    stroke-dasharray: 0, 100;
  }
}

.stat-num {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 14px;
  font-weight: 700;
  color: var(--ink);
}

.stat-text {
  font-size: 14px;
  color: var(--muted);
  line-height: 1.4;
}

/* Auth Modal */
.auth-modal {
  position: fixed;
  inset: 0;
  z-index: 100;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.auth-modal.hidden {
  display: none !important;
}
.auth-modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(23, 32, 31, 0.4);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}

/* Auth Components */
.auth-brand {
  display: flex;
  align-items: center;
  gap: 12px;
}
.auth-mark {
  background: var(--accent);
  color: #fff;
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 16px;
  border-radius: var(--radius);
}
.auth-brand-text {
  display: flex;
  flex-direction: column;
}
.auth-brand-text strong {
  font-family: var(--display);
  font-size: 17px;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--ink);
}
.auth-brand-text small {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--muted);
  margin-top: 2px;
}

.auth-card {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 32px;
  position: relative;
  z-index: 10;
  width: 100%;
  max-width: 400px;
  margin: auto;
}
.auth-mode {
  display: flex;
  justify-content: space-between;
  margin-bottom: 24px;
  align-items: center;
}
.auth-mode-label {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--muted);
}
.auth-mode-tabs {
  background: var(--chip);
  padding: 4px;
  border-radius: calc(var(--radius) - 1px);
  display: flex;
  gap: 4px;
}
.auth-mode-tabs button {
  border: 0;
  background: transparent;
  padding: 6px 12px;
  font-size: 13px;
  font-weight: 700;
  border-radius: calc(var(--radius) - 2px);
  color: var(--muted);
}
.auth-mode-tabs button.on {
  color: var(--ink);
  background: var(--paper);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}

.auth-title {
  font-family: var(--display);
  font-size: 32px;
  letter-spacing: -0.02em;
  margin-bottom: 8px;
}
.auth-subtitle {
  color: var(--muted);
  margin-bottom: 24px;
}

.auth-google {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  border: 1px solid var(--line);
  color: var(--ink);
  margin-bottom: 16px;
  background: transparent;
}
.auth-divider {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 24px 0;
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--muted);
}
.auth-divider span {
  flex: 1;
  height: 1px;
  background: var(--line);
}

.auth-form {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.auth-form input {
  border: 1px solid var(--line);
  background: var(--chip);
  border-radius: var(--radius);
  padding: 10px 12px;
  margin-top: 4px;
  width: 100%;
}
.auth-pw-field {
  position: relative;
}
.auth-pw-field input {
  padding-right: 60px;
}
#auth-reveal,
#onboard-login-reveal {
  position: absolute;
  right: 8px;
  bottom: 8px;
  border: 0;
  background: transparent;
  font-size: 12px;
  font-weight: 700;
  color: var(--accent);
}

.auth-forgot {
  align-self: flex-end;
  border: 0;
  background: transparent;
  font-size: 12px;
  font-weight: 700;
  color: var(--accent);
  text-decoration: underline;
  margin-top: -8px;
}
.auth-message {
  margin-top: 16px;
  font-size: 13px;
  color: var(--hot);
  font-weight: 700;
}
.auth-private {
  margin-top: 24px;
  padding-top: 16px;
  border-top: 1px solid var(--line);
  font-size: 12px;
  color: var(--muted);
  line-height: 1.5;
}

/* Desktop Shell Application */
@media (min-width: 800px) {
  body {
    overflow: hidden;
  }
  /* Fix, Sep 28 2026 -- #post-auth-onboarding (the sign-up/onboarding
     screen) and #gate (the covenant/sign-in screen) are both plain
     <main>/<div> siblings of #shell, not part of its grid -- unlike
     #shell's own main.wrap, neither has ever had its own scroll
     container. body's overflow:hidden above (needed so #shell's grid
     app doesn't get a second, page-level scrollbar) was silently
     trapping these two screens too: on any desktop-width window, if
     their content ran taller than the viewport there was no way to
     scroll to it at all -- exactly the "sign up page has no scroll
     feature, have to expand the browser to click Sign up" bug a beta
     tester (John Marshburn, Sep 28 2026) hit. Giving them their own
     full-height, independently-scrolling box, the same way main.wrap
     already scrolls independently inside #shell, fixes this without
     touching #shell's own layout. */
  #post-auth-onboarding,
  #gate {
    height: 100vh;
    height: 100dvh;
    overflow-y: auto;
  }
  #shell {
    display: grid;
    grid-template-columns: 240px 1fr;
    grid-template-rows: auto 1fr;
    grid-template-areas:
      "nav top"
      "nav wrap";
    height: 100vh;
    height: 100dvh;
    background: var(--bg);
  }
  .app-top {
    grid-area: top;
    position: static;
    background: var(--bg);
    color: var(--ink);
    border-bottom: 1px solid var(--line);
    padding: 16px 32px;
  }
  .app-top .brand strong {
    color: var(--ink);
  }
  .app-top .brand span {
    color: var(--muted);
  }
  .app-top .linkish {
    color: var(--ink);
  }
  .nav {
    grid-area: nav;
    position: static;
    height: 100%;
    display: flex;
    flex-direction: column;
    background: var(--ink);
    border-top: none;
    padding: 32px 16px;
    border-right: 1px solid var(--line-strong);
  }
  .nav button {
    flex-direction: row;
    justify-content: flex-start;
    gap: 12px;
    padding: 10px 16px;
    min-height: auto;
    font-size: 16px;
    font-weight: 600;
    text-transform: none;
    letter-spacing: normal;
    border-radius: var(--radius);
    color: rgba(245, 240, 231, 0.6);
  }
  .nav button .ico svg {
    width: 20px;
    height: 20px;
  }
  .nav button.on {
    color: var(--paper);
    background: rgba(245, 240, 231, 0.1);
  }
  .wrap {
    grid-area: wrap;
    overflow-y: auto;
    width: 100%;
    padding: 48px;
    margin: 0 auto;
    background: var(--bg);
  }
  /* Max width for inner content on desktop to remain readable */
  .screen {
    max-width: 800px;
    margin: 0 auto;
  }

  .save-bar {
    position: sticky;
    bottom: 24px;
    background: rgba(245, 240, 231, 0.94); /* match bg */
  }
}

/* ---------------------------------------------------------------------------
   Overview tab (Sep 23, 2026) -- see page-review-decisions-sep23.md item 6+7
   and overview-tab-implementation.md. Class names (rA-*) deliberately match
   app/overview.html's own inline styles, so the in-app tab and the public
   page/PDF read as the same document. The two stylesheets are kept
   separately, by hand -- see that file's own header comment for why it
   can't load this one.
--------------------------------------------------------------------------- */
/* Feedback round 4 (Sep 24, 2026): header rebuilt from a centered photo-
   over-name stack into a photo-left/info-right row -- photo bigger and
   left-justified, name/class-line/contact stacked to its right, per
   Arun's request. .rA-photo's width/height use clamp() so it scales down
   gracefully on a narrow phone screen instead of a fixed breakpoint. */
.rA-head {
  display: flex;
  align-items: flex-start;
  gap: 22px;
  text-align: left;
  padding: 8px 0 22px;
  margin-bottom: 4px;
}
.rA-photo-col {
  flex: 0 0 auto;
  text-align: center;
}
.rA-photo {
  width: clamp(84px, 16vw, 112px);
  height: clamp(84px, 16vw, 112px);
  border-radius: 50%;
  margin: 0;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-weight: 700;
  font-size: 38px;
  border: 3px solid var(--paper);
  box-shadow: var(--shadow);
}
.rA-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.rA-head-info {
  min-width: 0;
  flex: 1 1 auto;
}
/* Share controls column, feedback round 7, Overview Page items 1 & 2:
   Public link / Show phone / Download PDF stacked vertically on the
   right of the header, roughly spanning the same vertical range as the
   name/subtitle/contact block beside it; the copy-link row (shown once
   Public link is on) is the last row in the stack, landing under the
   email/phone line. Replaces round 6's horizontal .ov-share-bar, which
   sat in its own row above the whole header. */
/* Feedback round 8, Overview Page item 1: "buttons and labels for public
   link and show phone should line up." They didn't, because each pill
   auto-sized to its own label text ("Public Link" vs "Show Phone" are
   different widths) and the column right-aligned each pill's outer box --
   so the switches (the first thing inside each pill) landed at different
   x-positions instead of a shared left edge. Fixed by giving the column
   itself a fixed width and stretching every child (both pills, the
   Download PDF button, and the copy-link button) to fill it, left-aligned
   inside -- so every switch, and the left edge of every button, now
   starts at the same x, reading as one clean aligned stack instead of a
   ragged right edge. */
.rA-share-col {
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 8px;
  width: 200px;
  max-width: 45vw;
}
.rA-share-col .ov-share-pill {
  justify-content: flex-start;
  width: 100%;
}
.rA-share-col .btn.small {
  width: 100%;
}
.rA-share-col .ov-link-row {
  margin: 0;
  width: 100%;
}
.rA-head h1 {
  font-size: clamp(24px, 4vw, 30px);
  margin: 0 0 4px;
}
.rA-head .sub {
  color: var(--muted);
  font-size: 15px;
  margin: 4px 0 0;
}
/* Mirrors overview.html's own .rA-contact -- email (always) + phone (only
   once the age gate & toggle both allow it), shown right under the name/
   class line. Feedback round 1, item 7. Left-aligned as of round 4's
   photo-left/info-right header rebuild (was centered). */
.rA-contact {
  display: flex;
  justify-content: flex-start;
  gap: 18px;
  flex-wrap: wrap;
  font-size: 14px;
  margin-top: 10px;
}
/* Feedback round 7, item 7: Arun flagged URL/link text as "light green
   and difficult to read." There was actually no explicit color on real
   clickable links anywhere (mailto:/film-reel anchors just fell back to
   the browser's default blue, which happened to read fine) -- the low-
   contrast --muted sage green was only ever meant for de-emphasized
   annotation text, not links, but had drifted onto a couple of URL-ish
   spots (.rA-film-url, .ov-link-row input below) where it read as "the
   link color." General rule going forward: an actual clickable link uses
   --accent, the app's existing "this is actionable" color (already used
   by .linkish / .ov-photo-edit); URL-ish text that ISN'T itself a link
   (a readonly share-link textbox, a printed url reference) uses --ink
   for plain readability, never --muted. */
.rA-contact a {
  color: var(--accent);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
}
/* "Add/Change photo" link under the avatar -- feedback round 1, item 4
   (replaces the old raw-URL text field with a real upload). Sits in the
   photo column now, directly under the (bigger) photo. */
.ov-photo-edit {
  display: block;
  text-align: center;
  font-size: 13px;
  font-weight: 600;
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 2px;
  cursor: pointer;
  margin: 8px 0 0;
}
/* Profile tab's photo widget (Sep 24, 2026 rebuild) -- same .rA-photo
   circle and .ov-photo-edit upload link Overview uses (same shared
   photoUrl field, same uploadAthletePhoto() flow), but laid out
   horizontally (photo left, caption right) instead of Overview's
   photo-over-caption stack, per the approved mockup. */
.profile-photo-row {
  display: flex;
  align-items: center;
  gap: 16px;
}
.profile-photo-row .ov-photo-edit {
  display: inline-block;
  text-align: left;
  margin: 0;
}
.profile-photo-row .photo-caption {
  margin: 4px 0 0;
  font-size: 12px;
  color: var(--muted);
}
.rA-section {
  margin-bottom: 22px;
}
.rA-section h2 {
  font-size: 18px;
  margin: 0 0 4px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--line);
}
.rA-grid2 {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2px 24px;
  margin-top: 10px;
}
@media (min-width: 560px) {
  .rA-grid2 {
    grid-template-columns: 1fr 1fr;
  }
}
.rA-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding: 6px 0;
  border-bottom: 1px dashed var(--line);
  font-size: 14.5px;
}
.rA-row .k {
  color: var(--ink);
  font-weight: 500;
  font-size: 13px;
}
.rA-row .v {
  font-weight: 400;
  font-size: 13px;
  text-align: right;
}
/* Coach email (feedback round 7, item 4/7) is the one plain-text .rA-row
   value that's also a real link -- same --accent treatment as the other
   clickable links above. */
.rA-row .v a {
  color: var(--accent);
}
/* Feedback round 8, item 2: superseded round 7's `.rA-row-tight` (a
   single left-aligned "Name · email · phone" string). Arun asked for a
   real evenly-spaced 4-column layout instead -- label / name / email /
   phone each in their own fixed-width column, so two coach rows line up
   like a table even when one has a blank field (e.g. no phone yet).
   Stacks to one column per field below 560px (matching .rA-grid2's own
   mobile breakpoint) since 4 real columns is too tight on a phone. */
.rA-coach-row {
  display: block;
  padding: 6px 0;
  border-bottom: 1px dashed var(--line);
  font-size: 13px;
}
.rA-coach-row > span {
  display: block;
}
.rA-coach-label {
  color: var(--ink);
  font-weight: 500;
  font-size: 13px;
  margin-bottom: 2px;
}
.rA-coach-email a {
  color: var(--accent);
}
@media (min-width: 560px) {
  .rA-coach-row {
    display: grid;
    grid-template-columns: 190px 1fr 190px 1fr;
    gap: 4px 16px;
    align-items: baseline;
  }
  .rA-coach-row > span {
    display: inline;
  }
  .rA-coach-label {
    margin-bottom: 0;
  }
}
.rA-bg-block .rA-grid2 {
  gap: 2px 16px;
}
@media (min-width: 560px) {
  .rA-bg-block .rA-row {
    display: grid;
    grid-template-columns: 190px 1fr;
    gap: 16px;
  }
}
.rA-bg-block .rA-row .v,
.rA-bg-block .rA-row-edit input.v,
.rA-bg-block .rA-row-edit select.v {
  text-align: left;
}
/* Belt-and-suspenders: grid items stretch to fill their column by
   default, but a <select> is exactly the element whose sizing quirks
   caused this bug in the first place (feedback round 3's font mismatch,
   now round 9's width mismatch) -- forcing width explicitly removes any
   doubt rather than relying on default stretch behavior across browsers. */
.rA-bg-block .rA-row-edit input.v,
.rA-bg-block .rA-row-edit select.v {
  width: 100%;
}
.rA-bg-block .rA-row-edit select.v {
  text-align-last: left;
}
/* Arun's question, answered yes: school/club fields and coach contact
   info are different kinds of data, so they get a visible break instead
   of just running together as more rows in the same list. */
.rA-bg-coaches {
  margin-top: 14px;
  padding-top: 10px;
  border-top: 1px solid var(--line);
}
.rA-bg-coaches:empty {
  margin-top: 0;
  padding-top: 0;
  border-top: 0;
}
/* Editable variant of .rA-row -- same key/value visual slot, but .v is a
   real <input> rather than static text. Borderless/transparent until
   focus, so it reads like a resume line until you actually click into it. */
.rA-row-edit input.v {
  border: 0;
  background: transparent;
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 400;
  color: var(--ink);
  text-align: right;
  padding: 0;
  min-width: 0;
  flex: 1 1 auto;
}
.rA-row-edit input.v:focus {
  outline: none;
  border-bottom: 1.5px solid var(--accent);
}
/* Club team's <select> (multi-club case) had no styling at all here before
   this fix -- it fell back to the browser's own UA font/size, which is why
   it visually didn't match every other field's value text (feedback round
   3: "club name is different size and font than high school"). Mirrors
   input.v exactly, plus a small custom chevron since appearance:none
   removes the native one. */
.rA-row-edit select.v {
  border: 0;
  background: transparent;
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 400;
  color: var(--ink);
  text-align: right;
  text-align-last: right;
  padding: 0 15px 0 0;
  min-width: 0;
  flex: 1 1 auto;
  -webkit-appearance: none;
  appearance: none;
  cursor: pointer;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%2365827b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right center;
  background-size: 10px 7px;
}
.rA-row-edit select.v:focus {
  outline: none;
}
.rA-stat-years {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  margin-top: 10px;
}
.rA-stat-year {
  background: var(--chip);
  border-radius: var(--radius);
  padding: 10px 14px;
  flex: 1 1 140px;
}
.rA-stat-year .yr {
  font-size: 12px;
  font-weight: 700;
  color: var(--ink);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
.rA-stat-year .line {
  font-size: 14px;
  margin-top: 4px;
}
.rA-awardlist,
.rA-filmlist {
  margin: 10px 0 0;
  padding: 0;
  list-style: none;
}
.rA-awardlist li,
.rA-filmlist li {
  padding: 8px 0;
  border-bottom: 1px solid var(--line);
  font-size: 14.5px;
  display: flex;
  justify-content: space-between;
  gap: 10px;
}
.rA-filmlist li a {
  color: var(--accent);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
}
/* Feedback round 6: reels always run side-by-side in two columns now
   (dropped round 5's "only at 4+ items" gate -- Arun asked for side by
   side while looking at a 2-reel PDF, so this applies regardless of
   count). Each row is plain block flow, not flex -- title and url are one
   line of wrapping text ("Title - (url)"), not two items pushed to
   opposite edges the way awards' title/year pair is. */
.rA-filmlist {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2px 24px;
}
@media (min-width: 560px) {
  .rA-filmlist {
    grid-template-columns: 1fr 1fr;
  }
}
.rA-filmlist li {
  display: block;
}
/* The url reads inline right after the title -- "Title - (url)" -- rather
   than on its own line. Hidden on screen (the title itself is already a
   clickable link there, so the raw url is redundant); shown in print,
   since a link on paper can't be clicked and a coach reading the PDF
   still needs a way to find the video. Feedback rounds 5-6. */
.rA-film-url {
  display: none;
}
body.ov-print-mode .rA-film-url {
  display: inline;
  font-size: 10px;
  /* Feedback round 7, item 7: was var(--muted) (a low-contrast sage
     green, same complaint pattern round 3 already fixed for field labels
     and the name subtitle) -- moved to the page's one standard ink color,
     same as everywhere else on the resume. The smaller size and lack of
     bold already read as "secondary annotation" without needing a
     separate, harder-to-read color. */
  color: var(--ink);
  word-break: break-all;
}

/* Share section, feedback round 1, item 2: three plain, consistently-
   styled rows (label+meta on the left, one control on the right) so
   Download PDF reads as the same kind of thing as the two toggles above
   it, instead of a mismatched button tacked on the end. */
.ov-share-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
/* Minimal pill switch -- this feature is the first place in the app that
   needed a real toggle control, so there's no existing component to reuse. */
.ov-switch {
  position: relative;
  display: inline-block;
  width: 36px;
  height: 21px;
  flex: 0 0 auto;
}
.ov-switch input {
  position: absolute;
  opacity: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  cursor: pointer;
}
.ov-switch span {
  position: absolute;
  inset: 0;
  background: var(--line);
  border-radius: 999px;
  transition: background 0.15s ease;
}
.ov-switch span::before {
  content: "";
  position: absolute;
  width: 15px;
  height: 15px;
  left: 3px;
  top: 3px;
  background: #fff;
  border-radius: 50%;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
  transition: transform 0.15s ease;
}
.ov-switch input:checked + span {
  background: var(--accent);
}
.ov-switch input:checked + span::before {
  transform: translateX(15px);
}
.ov-switch input:disabled + span {
  opacity: 0.6;
  cursor: default;
}
/* Feedback round 8, Overview Page item 2: this used to wrap a readonly
   url textbox + a separate "Copy" button; both are now one "Copy Public
   Link" button (see .rA-share-col .ov-link-row above for its width), so
   there's nothing left to lay out here beyond a bit of bottom margin. */
.ov-link-row {
  margin: 0 0 14px;
}

/* Print appearance for the Overview tab. These rules used to live
   under @media print, which meant this session could never verify
   what a print would actually look like, and app.js had no way to
   measure the rendered content's height before printing (needed for
   feedback round 7 item 8's auto-fit-to-one-page zoom). Scoping them
   to a plain body.ov-print-mode class instead means the exact same
   rules apply whether the class is toggled on for a real print
   (printOverview() in app.js adds it right before window.print())
   or toggled on briefly beforehand just to measure. @page below is
   the one exception -- it only has meaning during actual paginated
   rendering, so it stays under a real @media print block. */
@media print {
  @page {
    margin: 0.6in 0.55in;
  }
}
  body.ov-print-mode .app-top,
  body.ov-print-mode #nav {
    display: none !important;
  }
  body.ov-print-mode .wrap {
    padding: 0;
    max-width: 100%;
  }
  /* The desktop layout's #shell is a CSS Grid with a fixed 240px column
     reserved for #nav (grid-template-columns: 240px 1fr). Hiding #nav with
     display:none removes it as a grid ITEM but the 240px TRACK stays
     reserved, so .wrap's "wrap" grid-area still started 240px from the
     page's left edge -- read as "the left margin is too far to the right."
     Collapsing #shell to normal block flow for print removes the grid
     (and its reserved column) entirely. Feedback round 2, item 1a. */
  body.ov-print-mode #shell {
    display: block !important;
    height: auto !important;
  }
  /* The generic "Overview" page heading, the intro copy, the Share card,
     the photo upload link, every "Edit on X ->" link, and the "Saved as
     you type." autosave status line are all in-app-only chrome -- none of
     it belongs on a printed resume. The athlete's own name (inside
     .rA-head) is the real title once these are gone. Feedback round 1,
     item 6; #overview-saved added in round 3 after Arun's actual PDF
     showed it printing at the bottom of the page. */
  body.ov-print-mode #view-overview .ov-page-title,
  body.ov-print-mode #view-overview .rA-share-col,
  body.ov-print-mode #view-overview .ov-photo-edit,
  body.ov-print-mode #view-overview .linkish,
  body.ov-print-mode #view-overview .lede,
  body.ov-print-mode #view-overview .section-label:first-of-type,
  body.ov-print-mode #view-overview #overview-saved {
    display: none !important;
  }
  /* An empty Summary/Other-strengths textarea was printing its placeholder
     instructional copy ("A few sentences on what you're looking for...")
     as faint, near-invisible text -- confirmed in Arun's actual PDF, where
     it read like broken/corrupted content rather than an intentionally
     blank field. Placeholders are a UI hint, not resume content; blank
     stays blank in print. Feedback round 3. */
  body.ov-print-mode #view-overview textarea::placeholder {
    color: transparent !important;
    opacity: 0 !important;
  }
  /* Editable fields print as plain resume text, not as form controls. */
  body.ov-print-mode #view-overview .rA-row-edit input.v,
  body.ov-print-mode #view-overview .rA-row-edit select.v {
    border: 0 !important;
    background: transparent !important;
    -webkit-appearance: none;
    appearance: none;
  }
  /* Textareas (Summary, Other strengths) are the real fix here: a
     <textarea> is a fixed-size scrollable box, and printing only captures
     what's visible inside it -- anything past a few lines was silently
     getting cut off. printOverview() (app.js) sets an explicit inline
     height to each one's full scrollHeight right before print; this just
     strips the box chrome so what's left reads as plain text, not a form
     field. */
  body.ov-print-mode #view-overview textarea {
    border: 0 !important;
    background: transparent !important;
    resize: none !important;
    overflow: visible !important;
    padding: 0 !important;
    color: var(--ink) !important;
  }
  body.ov-print-mode #view-overview .rA-section {
    break-inside: avoid;
  }
  /* .rA-head (name/photo block) isn't a .rA-section, so it wasn't covered
     by the rule above -- if it landed across a page-break boundary the
     circular photo rendered split/cropped ("image is cut off"). Also force
     color/graphics printing and hard-clip the circle so a browser that
     still fragments the box doesn't bleed the image past its border-radius.
     Feedback round 2, item 1b. */
  body.ov-print-mode #view-overview .rA-head {
    break-inside: avoid;
    page-break-inside: avoid;
  }
  body.ov-print-mode #view-overview .rA-photo,
  body.ov-print-mode #view-overview .rA-photo img {
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
    overflow: hidden !important;
  }
  /* One-page fit + type-scale tightening (feedback round 3, Sep 24, 2026).
     A full profile at the on-screen type scale ran to 2 printed pages.
     Two levers, both real: (1) empty sections ("None added yet.") are an
     in-app affordance, not resume content -- a coach doesn't need to be
     told nothing was added, so they're hidden entirely rather than
     reserving a heading's worth of space for nothing. (2) every section's
     type scale, padding, and spacing is tightened for print specifically
     -- on-screen sizing stays untouched. Between the two this should
     reliably fit a typical profile on one letter page; a very long
     Summary/Other-strengths paragraph can still push past one page since
     that's real content, not padding. */
  body.ov-print-mode #view-overview .rA-section:has(> p.meta:only-of-type),
  body.ov-print-mode #view-overview .rA-section:has(> .rA-grid2:empty) {
    display: none !important;
  }
  body.ov-print-mode #view-overview {
    font-size: 12.5px;
  }
  body.ov-print-mode #view-overview .rA-head {
    padding: 0 0 10px;
    margin-bottom: 2px;
    gap: 22px;
  }
  /* Feedback round 4 asked for a literal 2in-radius (4in-diameter) circle;
     confirmed against the actual PDF (round 6) that it was too big -- it
     pushed the document back to 2 pages, exactly the risk flagged when it
     shipped. Recommending 1.5in here instead: comparable to a standard
     resume headshot, and roughly matches the height of the 3-line name
     block beside it rather than dwarfing it. .rA-head is flex/left-aligned
     by default now (see the shared rule above), so this still reads as a
     left-justified photo with the name/class-line/contact centered
     vertically beside it. */
  body.ov-print-mode #view-overview .rA-photo {
    width: 1.5in !important;
    height: 1.5in !important;
    font-size: 36px !important;
    margin: 0 !important;
  }
  body.ov-print-mode #view-overview .rA-head h1 {
    font-size: 19px !important;
    margin: 0 0 2px !important;
  }
  body.ov-print-mode #view-overview .rA-head .sub {
    font-size: 11.5px !important;
    margin: 2px 0 0 !important;
    /* Same low-contrast --muted problem as the field labels, just below
       the name -- darkened for print legibility, matching Arun's actual
       PDF. Feedback round 3. */
    color: var(--ink) !important;
  }
  body.ov-print-mode #view-overview .rA-contact {
    font-size: 11.5px !important;
    margin-top: 3px !important;
  }
  body.ov-print-mode #view-overview .rA-section {
    margin-bottom: 9px !important;
  }
  body.ov-print-mode #view-overview .rA-section h2 {
    font-size: 12.5px !important;
    padding-bottom: 3px !important;
    margin-bottom: 1px !important;
  }
  body.ov-print-mode #view-overview .rA-row {
    padding: 2px 0 !important;
    font-size: 11.5px !important;
  }
  body.ov-print-mode #view-overview .rA-row .k {
    font-size: 11px !important;
  }
  /* Values were still printing at their un-shrunk 13px while labels (and
     everything else) were tightened to 11px, which is what made them read
     as "larger than the field names" (feedback round 6, items 3 + 8). */
  body.ov-print-mode #view-overview .rA-row .v {
    font-size: 11px !important;
  }
  /* Feedback round 8, item 2: the coach table's 4 columns need to stay
     tight enough in print to match the rest of the tightened print type
     scale -- otherwise this was the widest, loosest-feeling row on the
     printed page. */
  body.ov-print-mode #view-overview .rA-coach-row {
    padding: 2px 0 !important;
    font-size: 11px !important;
    gap: 2px 12px !important;
  }
  body.ov-print-mode #view-overview .rA-coach-label {
    font-size: 11px !important;
  }
  body.ov-print-mode #view-overview .position-chip-group {
    display: none !important;
  }
  body.ov-print-mode #view-overview .rA-positions-print {
    display: block !important;
    font-size: 11.5px !important;
    color: var(--ink) !important;
    margin-top: 2px !important;
  }
  body.ov-print-mode #view-overview .rA-grid2 {
    gap: 0 20px !important;
    margin-top: 4px !important;
  }
  /* Feedback round 9: keep the Background grid's print gap equal to
     .rA-coach-row's (12px) so the same alignment math that lines email/
     phone up with the grid's right-half columns on screen still holds in
     the tightened print layout -- the general .rA-grid2 rule above (20px)
     would otherwise re-break it just for this one section. */
  body.ov-print-mode #view-overview .rA-bg-block .rA-grid2 {
    gap: 0 12px !important;
  }
  body.ov-print-mode #view-overview .rA-bg-block .rA-row {
    gap: 12px !important;
  }
  body.ov-print-mode #view-overview .rA-bg-coaches {
    margin-top: 6px !important;
    padding-top: 6px !important;
  }
  body.ov-print-mode #view-overview label.field textarea {
    min-height: auto !important;
    font-size: 11.5px !important;
    line-height: 1.4 !important;
  }
  body.ov-print-mode #view-overview .rA-stat-years {
    gap: 6px !important;
    margin-top: 4px !important;
  }
  body.ov-print-mode #view-overview .rA-stat-year {
    padding: 5px 9px !important;
    /* Feedback round 6, item 7: Senior is now always shown (blank until
       there are stats), so this is 4 chips instead of 3 -- divide the row
       evenly instead of wrapping at the old 140px flex-basis. */
    flex: 1 1 0 !important;
  }
  body.ov-print-mode #view-overview .rA-stat-year .yr {
    font-size: 10px !important;
  }
  body.ov-print-mode #view-overview .rA-stat-year .line {
    font-size: 11.5px !important;
  }
  body.ov-print-mode #view-overview .rA-awardlist,
  body.ov-print-mode #view-overview .rA-filmlist {
    margin-top: 4px !important;
  }
  body.ov-print-mode #view-overview .rA-awardlist li,
  body.ov-print-mode #view-overview .rA-filmlist li {
    padding: 3px 0 !important;
    font-size: 11.5px !important;
  }

/* Stage-driven email draft (Sep 25, 2026) -- replaces the Intro/Follow-up/
   Update tabs. One shared panel on the School details page and the Outreach
   pop-out: a short "why" line under Next, one main button named for the
   email the stage calls for, then Send + Copy draft (with an inline
   confirm / "Did you send it?" banner). */
.next-why {
  margin: 12px 0;
  font-size: 14px;
  color: var(--muted);
  line-height: 1.4;
}
.draft-panel {
  margin-top: 16px;
  border-top: 1px solid var(--line);
  padding-top: 16px;
}
.draft-panel-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 10px;
  margin-bottom: 10px;
}
.draft-panel-head strong {
  font-size: 15px;
}
.draft-send-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 10px;
}
.op-panel .next-why {
  margin-top: 0;
}
.draft-send-row .btn {
  min-width: 110px;
}
.draft-send-note {
  margin: 10px 0 0;
}
.draft-banner {
  display: flex;
  gap: 12px;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  background: rgba(182, 138, 70, 0.12);
  border: 1px solid rgba(182, 138, 70, 0.35);
  border-radius: var(--radius);
  padding: 12px 14px;
  margin-top: 12px;
  font-size: 14px;
}
.draft-banner-btns {
  display: flex;
  gap: 8px;
}
.op-action-row .btn.primary {
  background: var(--accent);
  color: #fff;
}

/* ===== Today page (readiness model) ===== */
#view-today .now-label { margin: 0 0 6px; font-size: 11px; font-weight: 700; letter-spacing: .15em; text-transform: uppercase; color: var(--muted); }
#view-today .td-do-now { border-left: 4px solid var(--accent); }
#view-today .td-do-now h2 { font-family: var(--display); font-size: 20px; font-weight: 400; margin: 0 0 4px; letter-spacing: -.02em; line-height: 1.2; }
#view-today .td-do-now p.td-why { margin: 0 0 12px; font-size: 14px; color: var(--muted); }
#view-today .td-do-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
#view-today .td-do-row .btn { font-size: 14px; min-height: 40px; }
#view-today .td-gain { display: inline-block; font-size: 11px; font-weight: 700; color: var(--muted); background: var(--chip); border-radius: 980px; padding: 2px 8px; white-space: nowrap; }
#view-today .td-also { margin-top: 14px; border-top: 1px solid var(--line); padding-top: 4px; }
#view-today .td-also-row, #view-today .td-date-row { font: inherit; color: inherit; cursor: pointer; }
#view-today .td-also-row { display: flex; gap: 10px; align-items: center; width: 100%; text-align: left; border: 0; background: none; padding: 11px 0; border-bottom: 1px solid var(--line); font-size: 14px; }
#view-today .td-also-row:last-child { border-bottom: 0; padding-bottom: 0; }
#view-today .td-also-row .t { flex: 1; min-width: 0; }
#view-today .td-also-row strong { display: block; font-size: 14px; font-weight: 600; }
#view-today .td-also-row span.s { font-size: 13px; color: var(--muted); }
#view-today .td-also-row .go { color: var(--muted); }

#view-today .td-meters { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; margin-bottom: 12px; }
#view-today .td-meter { background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius); padding: 14px 16px; box-shadow: var(--shadow); display: flex; flex-direction: column; }
#view-today .td-meter .top { display: flex; justify-content: space-between; align-items: baseline; }
#view-today .td-meter .pct { font-size: 22px; font-weight: 700; line-height: 1.1; }
#view-today .td-bar { height: 6px; background: var(--chip); border-radius: 999px; margin: 8px 0 10px; overflow: hidden; }
#view-today .td-bar i { display: block; height: 100%; background: var(--good); border-radius: 999px; }
#view-today .td-meter .hint { font-size: 13px; color: var(--muted); margin: 0; }
#view-today .td-meter .hint b { color: var(--ink); font-weight: 600; }
#view-today .td-meter .traction { font-size: 12px; color: var(--muted); margin: 8px 0 0; padding-top: 8px; border-top: 1px solid var(--line); }
#view-today .td-meter.locked { background: transparent; border-style: dashed; box-shadow: none; opacity: .62; }
#view-today .td-meter.locked .pct { color: var(--muted); }
#view-today .td-meter.locked .td-bar i { background: var(--line-strong); }
#view-today .td-meter .lockline { font-size: 12px; font-weight: 600; color: var(--muted); margin: 0; }

#view-today .td-listline { margin: 8px 0 0; font-size: 13px; color: var(--muted); }
#view-today .td-school-row { display: flex; gap: 10px; align-items: center; width: 100%; text-align: left; padding: 11px 0; border-bottom: 1px solid var(--line); cursor: pointer; }
#view-today .td-school-list .td-school-row:last-child { border-bottom: 0; }
#view-today .td-school-row .main { flex: 1; min-width: 0; }
#view-today .td-school-row strong { display: block; font-size: 15px; font-weight: 600; }
#view-today .td-school-row .sub { font-size: 13px; color: var(--muted); }
#view-today .td-school-row .sub a { color: var(--muted); text-decoration: underline; text-underline-offset: 2px; }
#view-today .td-school-row .stage { font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; background: var(--chip); color: var(--muted); padding: 3px 9px; border-radius: 980px; white-space: nowrap; }
#view-today .td-school-row .days { font-size: 13px; color: var(--muted); white-space: nowrap; min-width: 84px; text-align: right; }
#view-today .td-school-row .days.quiet { color: var(--warn); font-weight: 600; }

#view-today .td-date-row { display: flex; gap: 12px; align-items: baseline; width: 100%; text-align: left; border: 0; background: none; padding: 9px 0; border-bottom: 1px solid var(--line); font-size: 14px; }
#view-today .td-date-row:last-child { border-bottom: 0; }
#view-today .td-date-row .d { width: 56px; color: var(--muted); font-size: 13px; flex-shrink: 0; }
#view-today .td-tip p:not(.now-label) { margin: 0; font-size: 14px; color: var(--muted); line-height: 1.5; }

@media (max-width: 640px) {
  #view-today .td-meters { grid-template-columns: 1fr; }
  #view-today .td-school-row { flex-wrap: wrap; }
  #view-today .td-school-row .days { min-width: 0; text-align: left; }
}

#view-today .td-meter .hint .td-next { font-size: 13px; font-weight: 400; color: var(--muted); text-decoration: underline; text-underline-offset: 2px; text-align: left; }
.td-flash { outline: 2px solid var(--accent); outline-offset: 4px; border-radius: 8px; transition: outline-color .3s; }

/* Swimming event-and-time table (Profile) */
.et-row {
  display: grid;
  grid-template-columns: minmax(120px, 1fr) minmax(140px, 200px) auto;
  gap: 12px;
  align-items: center;
  padding: 8px 0;
  border-bottom: 1px solid var(--line, rgba(0, 0, 0, 0.1));
}
.et-event { font-weight: 600; }
.et-add {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 14px;
}
.et-add select { min-width: 160px; }
body.ov-print-mode .et-add,
body.ov-print-mode [data-del-et] { display: none; }

/* Position dropdowns (1st / 2nd / 3rd) on Setup, Profile and Overview */
.position-select-group {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 6px;
}
.position-select {
  display: flex;
  flex-direction: column;
  gap: 4px;
  flex: 1 1 160px;
  min-width: 150px;
}
.position-select small {
  font-size: 12px;
  font-weight: 600;
  color: var(--muted);
}
@media print {
  body.ov-print-mode #view-overview .position-select-group { display: none !important; }
}
body.ov-print-mode #view-overview .position-select-group { display: none !important; }
body.ov-print-mode .ov-edit-note { display: none !important; }

/* "+ Add <thing>" buttons (adding a row to a list). Secondary style everywhere,
   so the maroon fill stays reserved for committing actions (Save, Send, Add
   to target list). Compact: quieter than the card content they sit beside.
   Touch screens keep a 44px tap target. */
.btn.add {
  background: var(--chip);
  color: var(--ink);
  font-size: 13px;
  font-weight: 600;
  min-height: 30px;
  padding: 5px 12px;
}
@media (pointer: coarse) {
  .btn.add { min-height: 44px; }
}

/* Touch screens: every button keeps a 44px tap target (Apple HIG). Desktop
   sizes (40px default, 32px small, 30px add) are unchanged. */
@media (pointer: coarse) {
  .btn,
  .btn.small,
  .btn.add {
    min-height: 44px;
  }
}

/* Admin schools: counters + programs table */
.admin-counts { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; margin: 0 0 14px; }
.admin-count { border: 1px solid var(--line, #d9dde3); border-radius: 10px; padding: 10px 14px; background: var(--card, #fff); }
.admin-count-n { display: block; font-size: 1.6rem; font-weight: 700; line-height: 1.1; }
.admin-count-l { display: block; font-size: .8rem; opacity: .7; }
.admin-table-filters { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 10px 0; }
.admin-table-scroll { overflow-x: auto; border: 1px solid var(--line, #d9dde3); border-radius: 10px; }
.admin-table { width: 100%; border-collapse: collapse; font-size: .88rem; }
.admin-table th, .admin-table td { padding: 8px 10px; text-align: left; border-bottom: 1px solid var(--line, #e6e9ee); vertical-align: top; }
.admin-table th { position: sticky; top: 0; background: var(--card, #fff); font-weight: 600; white-space: nowrap; }
.admin-table tbody tr[data-open-program] { cursor: pointer; }
.admin-table tbody tr[data-open-program]:hover { background: rgba(0,0,0,.04); }
.admin-table tr.inactive { opacity: .55; }
.admin-flag { display: inline-block; padding: 1px 7px; margin: 0 4px 2px 0; border-radius: 999px; font-size: .72rem; background: #fdecc8; color: #7a4b00; white-space: nowrap; }
.admin-filter { display: flex; flex-direction: column; gap: 3px; font-size: .75rem; font-weight: 600; opacity: .9; }
.admin-filter > span { text-transform: uppercase; letter-spacing: .03em; font-size: .68rem; opacity: .7; }
.admin-table-filters { align-items: flex-end; }

/* Admin tables, design pass (Oct 5, 2026). The search box stretched tall
   because `.filters input { flex: 1 1 160px }` applies to the input inside
   the column-direction label, so the 160px basis became its HEIGHT. */
.admin-filter input { flex: none; width: 260px; max-width: 100%; }
.admin-filter select { flex: none; }
/* Scroll inside a viewport-height box so the horizontal scrollbar is always
   on screen, the header stays pinned, and the first column stays pinned. */
.admin-table-scroll { max-height: calc(100vh - 200px); overflow: auto; background: var(--paper); }
.admin-table { border-collapse: separate; border-spacing: 0; font-variant-numeric: tabular-nums; }
.admin-table th { z-index: 2; background: var(--paper); font-size: .7rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); border-bottom: 1px solid var(--line-strong); }
.admin-table td { border-bottom: 1px solid var(--line); line-height: 1.35; }
.admin-table td .meta { margin-top: 1px; }
.admin-table th.num, .admin-table td.num { text-align: right; }
.admin-table td.nowrap { white-space: nowrap; }
.admin-table th:first-child, .admin-table td:first-child { position: sticky; left: 0; background: var(--paper); z-index: 1; min-width: 200px; }
.admin-table th:first-child { z-index: 3; }
.admin-table tbody tr:hover td { background: #f1ebde; }

/* Admin is a desktop tool: like #view-list.discover-wide, opt out of the
   800px reading-width cap the desktop shell puts on every .screen so the
   tables can use the full width of the window. */
#view-admin-schools,
#view-admin-accounts {
  max-width: none;
  margin-left: 0;
  margin-right: 0;
}

/* Inline row editing */
.admin-table input.ie, .admin-table select.ie { width: 100%; min-width: 130px; padding: 6px 8px; font-size: .85rem; border: 1px solid var(--line-strong); border-radius: 6px; background: #fff; color: var(--ink); box-sizing: border-box; }
.admin-table select.ie { margin-top: 4px; }
.admin-table tr.editing td { background: #f7efd9; }
.admin-table tr.editing td:first-child { background: #f7efd9; }
.admin-table td.ie-actions { white-space: nowrap; }
.ie-err { color: #a33; font-size: .78rem; margin-top: 4px; white-space: normal; max-width: 220px; }
.admin-table .linkish { font-size: .8rem; }
.admin-table .linkish.danger { color: #b42318; }

/* Keep the Edit / Full editor column pinned to the right edge so it is always
   visible without scrolling sideways (the table's horizontal scrollbar can sit
   below the fold on a laptop screen). */
.admin-table.has-actions th.ie-actions-h,
.admin-table.has-actions td.ie-actions { position: sticky; right: 0; background: var(--paper); box-shadow: -8px 0 8px -8px rgba(23, 32, 31, 0.25); z-index: 1; }
.admin-table.has-actions th.ie-actions-h { z-index: 3; min-width: 150px; }
.admin-table.has-actions tr.editing td.ie-actions { background: #f7efd9; }
.admin-table.has-actions tbody tr:hover td.ie-actions { background: #f1ebde; }

/* ---- Admin side panel (More…) ---- */
.admin-backdrop { display: none; position: fixed; inset: 0; background: rgba(23, 32, 31, 0.35); z-index: 60; }
.admin-backdrop.on { display: block; }
.admin-drawer { display: none; position: fixed; top: 0; right: 0; bottom: 0; width: min(620px, 100vw); overflow-y: auto; background: var(--bg); z-index: 61; padding: 16px; box-shadow: -12px 0 32px rgba(23, 32, 31, 0.25); }
.admin-drawer.open { display: block; }
.admin-drawer .card { margin-top: 0; }
.admin-activity { border: 1px solid var(--line); border-radius: var(--radius); padding: 10px 12px; margin: 10px 0 14px; background: var(--paper); }
.admin-activity-row { padding: 6px 0; border-bottom: 1px solid var(--line); }
.admin-activity-row:last-child { border-bottom: 0; }

/* ---- Link check status chips + summary bar ---- */
.lc { font-size: .75rem; font-weight: 600; margin-top: 2px; }
.lc .meta { font-weight: 400; }
.lc-ok { color: var(--good); }
.lc-warn { color: #8a5a00; }
.lc-bad { color: #a33; }
.lc-meh { color: var(--muted); }
.lc-bad-text { color: #a33; font-weight: 600; }
.admin-lc-bar { display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: center; margin: 0 0 10px; font-size: .85rem; }

/* ---- Schools inline edit ---- */
.ie-pair { white-space: nowrap; }
.admin-table input.ie.ie-narrow { width: 72px; min-width: 0; }
.admin-table .ie-pair input.ie:first-child:not(.ie-narrow) { width: 150px; min-width: 0; }

/* suggestion evidence (admin Reports) */
.ev summary { cursor: pointer; list-style: none; }
.ev summary::-webkit-details-marker { display: none; }
.ev-pill { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: .75rem; font-weight: 700; white-space: nowrap; }
.ev-high { background: #d9f2e1; color: #1d6b3a; }
.ev-medium { background: #fdecc8; color: #7a4b00; }
.ev-low { background: #f6d9d9; color: #a33; }
.ev-list { margin: 6px 0 2px; padding-left: 16px; font-size: .78rem; max-width: 340px; }
.ev-list li { margin: 2px 0; }
.ev-list li.ev-good::marker { color: #1d6b3a; content: "✓ "; }
.ev-list li.ev-bad::marker { color: #a33; content: "✗ "; }

/* coach title picker + review tag (family app) */
.title-sel { width: 100%; }
.title-sel + input { margin-top: 6px; }
.tag.pending { background: #fdecc8; color: #7a4b00; }

/* Admin schools table: logo thumbnail beside the school name (copied logos from schools.logo_url) */
.admin-school-cell { display: flex; align-items: center; gap: 10px; }
.admin-logo { width: 32px; height: 32px; flex: 0 0 32px; border-radius: 6px; border: 1px solid var(--line); background: #fff; object-fit: contain; padding: 2px; box-sizing: border-box; }
.admin-logo-empty { display: inline-block; background: transparent; border-style: dashed; opacity: .5; }

/* Admin schools: click the logo to set one by hand */
.admin-logo-btn { border: 0; background: none; padding: 0; cursor: pointer; display: inline-flex; border-radius: 6px; }
.admin-logo-btn:hover .admin-logo, .admin-logo-btn:focus-visible .admin-logo { border-color: var(--ink, #1b2a4a); opacity: 1; }
.logo-panel { padding: 12px 14px; background: var(--chip, #f4f1ea); border-radius: 10px; }
.logo-panel-top { display: flex; gap: 14px; align-items: center; margin-bottom: 10px; }
.logo-panel-preview { width: 72px; height: 72px; flex: 0 0 72px; object-fit: contain; background: #fff; border: 1px solid var(--line); border-radius: 10px; padding: 6px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 12px; color: var(--muted); }
.logo-panel-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.logo-panel-actions input[data-logo-url] { flex: 1 1 320px; min-width: 220px; }
.logo-panel-actions input[data-logo-site] { flex: 1 1 320px; min-width: 220px; }
.logo-panel-site { margin-bottom: 8px; }
.logo-panel-actions label.btn { cursor: pointer; }
.logo-panel-actions label.btn.disabled { opacity: .5; pointer-events: none; }
.logo-panel-msg { margin: 6px 0 0; font-size: 13px; font-weight: 600; color: var(--teal, #1f4e4a); }
.logo-panel-msg.err { color: #a33; }

/* Wikipedia logo test results */
.wiki-results { margin-top: 12px; padding: 10px 12px; border: 1px solid var(--line, #d9d2c3); border-radius: 10px; background: #fff; }
.wiki-row { padding: 8px 0; border-top: 1px solid var(--line, #e6dfd0); }
.wiki-row:first-of-type { border-top: 0; }
.wiki-school { font-weight: 600; margin-bottom: 4px; }
.wiki-cands { display: flex; flex-wrap: wrap; gap: 14px; }
.wiki-cand { display: flex; gap: 8px; align-items: flex-start; max-width: 340px; }
.wiki-cand img { width: 64px; height: 64px; object-fit: contain; background: #fff; border: 1px solid #e6dfd0; border-radius: 8px; flex: none; }
.wiki-none { width: 64px; height: 64px; display: flex; align-items: center; justify-content: center; color: #a33; border: 1px dashed #d9d2c3; border-radius: 8px; flex: none; }
.wiki-best img { border-color: #8b2d2d; box-shadow: 0 0 0 2px rgba(139,45,45,.25); }
.wiki-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.wiki-actions label.btn { cursor: pointer; }

/* "needs a better logo" mark */
.admin-redo { display: inline-flex; flex-direction: column; align-items: center; gap: 2px; font-size: 11px; color: #6b6558; cursor: pointer; margin-right: 6px; }
.admin-redo input { margin: 0; }
.logo-panel-redo { display: inline-flex; gap: 6px; align-items: center; margin: 4px 0 8px; font-weight: 600; cursor: pointer; }

/* Date-of-birth entry: month select + day + 4-digit year (see dobFieldHtml()). */
.dob-row { display: flex; gap: 12px; align-items: flex-end; }
.dob-row select { flex: 1 1 0; min-width: 0; }
.dob-row select:first-child { flex: 2 1 0; }
.dob-row select:last-child { flex: 1.3 1 0; }
.dob-slot { display: block; }

/* Admin: Catalog "Tools" disclosure and Accounts page (Oct 9, 2026) */
.admin-tools { margin: 0 0 12px; border: 1px solid var(--line, #d9dde3); border-radius: 10px; background: var(--card, #fff); }
.admin-tools > summary { cursor: pointer; padding: 10px 14px; font-weight: 600; list-style: none; }
.admin-tools > summary::-webkit-details-marker { display: none; }
.admin-tools > summary::before { content: "▸"; display: inline-block; margin-right: 8px; transition: transform .15s; }
.admin-tools[open] > summary::before { transform: rotate(90deg); }
.admin-tools > summary .meta { font-weight: 400; }
.admin-tools-body { padding: 4px 14px 12px; }
#view-admin-accounts textarea { width: 100%; box-sizing: border-box; font: inherit; }

/* Sign-up "working on it" overlay (startProgressOverlay in app.js) */
.card.has-progress { position: relative; }
.progress-overlay {
  position: absolute; inset: 0; z-index: 5; border-radius: inherit;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px;
  background: rgba(255, 255, 255, 0.94); text-align: center; padding: 24px;
  animation: progress-fade 0.25s ease-out both;
}
/* Whole-page version, used while a board switch saves first. */
.progress-overlay.page-level { position: fixed; z-index: 500; border-radius: 0; background: rgba(255, 255, 255, 0.96); }
/* Dark mode: dark overlay, so the status text and dots must be light (they were navy and unreadable; fixed Oct 13). */
.progress-overlay .progress-line { color: #0b1426; }
@media (prefers-color-scheme: dark) {
  .progress-overlay.page-level { background: rgba(20, 20, 22, 0.94); }
  .progress-overlay { background: rgba(20, 20, 22, 0.92); }
  .progress-overlay .progress-line { color: #ffffff; }
  .progress-overlay .progress-dots i { background: #ffffff; }
}
.progress-ring {
  width: 52px; height: 52px; border-radius: 50%;
  border: 4px solid var(--accent-soft); border-top-color: var(--accent);
  animation: progress-spin 0.9s linear infinite;
}
.progress-line { margin: 0; font-weight: 600; font-size: 1.05rem; min-height: 1.5em; opacity: 0; }
.progress-line.in { animation: progress-line-in 0.5s ease-out forwards; }
.progress-dots { display: flex; gap: 6px; }
.progress-dots i { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); opacity: 0.25; animation: progress-dot 1.2s ease-in-out infinite; }
.progress-dots i:nth-child(2) { animation-delay: 0.2s; }
.progress-dots i:nth-child(3) { animation-delay: 0.4s; }
@keyframes progress-spin { to { transform: rotate(360deg); } }
@keyframes progress-fade { from { opacity: 0; } }
@keyframes progress-line-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@keyframes progress-dot { 0%, 100% { opacity: 0.25; transform: scale(0.8); } 50% { opacity: 1; transform: scale(1.15); } }
@media (prefers-reduced-motion: reduce) {
  .progress-ring { animation-duration: 2.5s; }
  .progress-dots i { animation: none; opacity: 0.6; }
  .progress-line.in { animation: none; opacity: 1; }
}

/* Header save note (Saving... / Saved / Not saved) */
.save-status { font-size: 12px; font-weight: 600; letter-spacing: 0.02em; color: rgba(255, 255, 255, 0.7); white-space: nowrap; margin-right: 4px; }
.save-status.saving { color: rgba(255, 255, 255, 0.7); }
.save-status.saved { color: #7fd6a0; }
.save-status.error { color: #ff9b8a; }
@media (max-width: 520px) { .save-status { font-size: 11px; max-width: 90px; overflow: hidden; text-overflow: ellipsis; } }
