/* RC Greenlight — THE COACH APP (rev242, owner 2026-10-10: "Build and ship" on the approved mockup).
   Linked LAST on dashboard.html, after coach-dash.css. Shape, type and layout only. Colours come from the
   console tokens (rcgl-console.css :root), and the score colours stay fixed: green under par, red over.
   The app's own menu (a rail on a computer, tabs on a phone) shows only while body.ca-on is set, which
   coach-app.js sets while the signed-in coach body is on screen. The sign-in and pending screens keep the
   site's own menu. */

/* ---------- the shell ---------- */
/* rev342 (owner 2026-10-27, mock approved: claude.ai/artifact/6AgUaAcpZRstzPRZdrNEU7): THE DASHBOARD WEARS THE COACH'S
   BRAND. Every chrome colour below reads these variables; RC Pine is the default, so a coach with no brand sees no change.
   coach-app.js brandDash() sets them on <body> from brandInfo.resolved (the academy's brand for any academy coach: the head
   coach's brand wins; else the coach's own), using report-theme.js deriveBrand's contrast-checked shades: --ca-ornt reads
   at 4.5:1 on the chrome, --ca-orn at 3:1. Status chips (Held, Ready, Sent, Coach review), stress and data colours are NOT
   on this list and never theme. */
:root{--ca-chrome:var(--pine-950);--ca-chrome2:var(--pine-900);--ca-orn:var(--lime-500);--ca-ornt:var(--lime-500);--ca-ornh:var(--lime-400);--ca-muted:var(--mint-300);}
.ca-rail,.ca-tabs{display:none;}
/* Colours on the base rule, not inside the width queries: a harness that reveals hidden blocks (and any width the
   queries miss) still reads light text on pine. */
.ca-rail,.ca-tabs{background:var(--ca-chrome);color:#fff;}
#ca-app{max-width:920px;margin:0 auto;}
#ca-app .ca-screen[hidden]{display:none!important;}
#ca-app .head{margin-bottom:18px;}
.ca-kick{font-family:var(--mono);font-size:11.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-700);margin-bottom:4px;min-height:1em;}
#ca-app #coach-review-waiting{margin:0 0 18px;max-width:none;}
#ca-app .panel-h{flex-wrap:wrap;gap:10px 14px;}
#ca-app .panel-h h2{display:flex;align-items:center;gap:8px;}
#ca-app .panel-h .btn{padding:8px 14px;font-size:11.5px;}
#ca-app .empty{padding:22px;text-align:left;color:var(--ink-700);}
/* The page cuts every card to a slanted box (mobile-nav.js raceShapes). The app's cards stay square, like
   the panels since rev212: the slant cuts the corner off a row's text and the kerb under a header. */
#ca-app .rc-slant,.ca-scrim .rc-slant{clip-path:none!important;}
#ca-app .rc-edge,.ca-scrim .rc-edge{background-image:none!important;}

/* Text-style buttons and links inside the coach view: the racing catch-all (racing-app.css) skews and
   capitalises every button in .view, which is right for actions and wrong for a "see more" line. */
#v-coach button.ca-more,#v-coach .ca-more{transform:none!important;font-family:var(--sans)!important;text-transform:none!important;font-style:normal!important;letter-spacing:0!important;font-weight:600!important;}
.ca-more{display:block;width:100%;text-align:left;background:none;border:0;padding:13px 22px;font-size:13.5px;color:var(--fairway-700);text-decoration:none;cursor:pointer;}
.ca-more:hover{text-decoration:underline;text-underline-offset:3px;}

/* ---------- the player list (Home, Players, Build) ---------- */
.ca-prow{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:14px;align-items:center;padding:14px 22px;border-bottom:1px dashed rgba(16,25,20,.16);cursor:pointer;transition:background .12s;}
.ca-prow:last-of-type{border-bottom:0;}
.ca-prow:hover{background:var(--paper-50);}
.ca-prow:focus-visible{outline:2px solid var(--forest-800);outline-offset:-2px;}
.ca-av{width:40px;height:40px;flex:none;display:grid;place-items:center;background:var(--wash-200);color:var(--ca-chrome);font-family:var(--sans);font-weight:700;font-size:13.5px;}
.ca-av.dk{background:var(--forest-800);color:#fff;}
.ca-pmain{display:flex;flex-direction:column;gap:2px;min-width:0;}
.ca-pname{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;font-weight:700;font-size:15.5px;color:var(--ink-900);overflow-wrap:anywhere;}
.ca-pline{font-size:13px;color:var(--ink-700);overflow-wrap:anywhere;}
.ca-pline b{font-weight:600;color:var(--ink-900);}
.ca-pact{display:flex;align-items:center;gap:6px;}
.ca-pact .btn{padding:8px 14px;font-size:11.5px;}
.ca-chev{color:var(--ink-500);flex:none;}
.ca-pill{display:inline-block;font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:3px 8px;white-space:nowrap;background:var(--paper-100);color:var(--ink-700);}
.ca-pill.review{background:color-mix(in oklch,var(--lime-500) 40%,#fff);color:var(--pine-950);}
.ca-pill.held{background:#FBF3E2;color:var(--amber-ink);box-shadow:inset 0 0 0 1px #EBD39C;}
.ca-pill.plan{background:var(--wash-200);color:var(--forest-800);}
.ca-pill.off{background:var(--paper-100);color:var(--ink-500);}
.ca-pill.wait{background:transparent;color:var(--ink-700);box-shadow:inset 0 0 0 1px var(--border);}
.ca-tools{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;padding:12px 22px;border-bottom:1px dashed rgba(16,25,20,.16);}
.ca-tools input{flex:1 1 220px;min-width:0;font-family:var(--sans);font-size:14px;border:1px solid var(--border);padding:10px 12px;background:var(--paper-50);color:var(--ink-900);outline:none;}
.ca-tools input:focus{border-color:var(--ink-900);background:#fff;}
.ca-sortl{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-700);}
.ca-sortl select{font-family:var(--sans);font-size:13.5px;text-transform:none;letter-spacing:0;border:1px solid var(--border);padding:8px 10px;background:#fff;color:var(--ink-900);}

/* ---------- one player's page ---------- */
.ca-back{display:inline-block;font-family:var(--mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-700);text-decoration:none;padding:6px 0 12px;}
.ca-back:hover{color:var(--ink-900);}
/* The header carries the same kerb as the top bar (racing-app.css .bar). */
.ca-phead{position:relative;background:var(--ca-chrome);color:#fff;padding:22px 24px 28px;margin-bottom:12px;
  background-image:repeating-linear-gradient(-60deg,var(--ca-orn) 0 10px,transparent 10px 20px);background-size:100% 5px;background-position:left bottom;background-repeat:no-repeat;}
.ca-prow1{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap;}
.ca-pwho{min-width:0;flex:1 1 260px;}
.ca-phead .ca-kick{color:var(--ca-muted);}
.ca-phead h1{font-family:var(--rc-race,var(--head));font-style:italic;font-weight:900;font-stretch:120%;text-transform:uppercase;letter-spacing:-.02em;line-height:.95;font-size:clamp(30px,6.4vw,46px);margin:4px 0 10px;color:#fff;overflow-wrap:anywhere;}
.ca-phead h1 span{color:var(--ca-ornt);}
.ca-pteam{display:block;font-size:14px;color:var(--wash-200);overflow-wrap:anywhere;}
.ca-pacts{display:flex;align-items:center;gap:10px;}
#v-coach .ca-prime{background:var(--ca-ornt);border-color:var(--ca-ornt);color:var(--ca-chrome);padding:12px 24px;font-size:13px;}
#v-coach .ca-prime:hover{background:var(--ca-ornh);}
.ca-dots{display:grid;place-items:center;width:44px;height:44px;padding:0;background:transparent;border:1px solid rgba(255,255,255,.32);color:#fff;cursor:pointer;}
.ca-dots:hover{background:rgba(255,255,255,.08);}
.ca-dots:focus-visible,.ca-phead .btn:focus-visible{outline:2px solid var(--ca-orn);outline-offset:2px;}
.ca-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-top:18px;}
.ca-fact{background:var(--ca-chrome2);padding:10px 12px;min-width:0;}
.ca-fact .k{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ca-muted);}
.ca-fact .v{display:block;font-weight:700;font-size:14px;color:#fff;margin-top:3px;overflow-wrap:anywhere;}
.ca-jump{position:sticky;top:0;z-index:20;display:flex;gap:8px;overflow-x:auto;padding:10px 4px;margin:0 -4px 10px;background:var(--paper-100);scrollbar-width:none;}
.ca-jump::-webkit-scrollbar{display:none;}
.ca-jump button{flex:none;background:#fff;border:1px solid var(--border);color:var(--ink-900);padding:8px 14px;font-size:11.5px;cursor:pointer;min-height:36px;}
.ca-jump button:hover{border-color:var(--ink-900);}
.ca-sec{scroll-margin-top:64px;}
.ca-count{font-family:var(--mono)!important;font-style:normal!important;font-weight:700!important;font-size:11.5px;letter-spacing:0!important;background:var(--ca-chrome);color:var(--ca-ornt);padding:2px 8px;line-height:1.4;}

.ca-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;padding:14px 22px;border-bottom:1px dashed rgba(16,25,20,.16);}
.ca-item:last-child{border-bottom:0;}
.ca-imain{display:flex;flex-direction:column;gap:2px;min-width:0;}
.ca-idate{font-family:var(--mono);font-size:11.5px;color:var(--ink-700);display:flex;flex-wrap:wrap;align-items:center;gap:6px;}
.ca-ihead{font-weight:700;font-size:15px;color:var(--ink-900);overflow-wrap:anywhere;}
.ca-isub{font-size:13px;color:var(--ink-700);overflow-wrap:anywhere;}
.ca-iacts{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;align-items:center;}
.ca-item .btn,.ca-iacts .btn{padding:8px 14px;font-size:11.5px;}

.ca-event{display:flex;flex-direction:column;gap:12px;padding:16px 22px;border-bottom:1px dashed rgba(16,25,20,.16);}
.ca-event:last-child{border-bottom:0;}
.ca-etop{display:flex;justify-content:space-between;align-items:baseline;gap:6px 14px;flex-wrap:wrap;}
.ca-ename{font-family:var(--rc-race,var(--head));font-style:italic;font-weight:900;font-stretch:112%;font-size:17px;letter-spacing:-.01em;color:var(--ink-900);overflow-wrap:anywhere;}
.ca-eres{font-family:var(--mono);font-size:12.5px;color:var(--ink-700);}
.ca-steps{display:flex;flex-wrap:wrap;gap:8px;}
.ca-step{display:flex;flex-direction:column;gap:2px;min-width:92px;padding:9px 12px;background:var(--paper-50);border:1px solid var(--border);color:var(--ink-900);text-decoration:none;}
a.ca-step:hover{border-color:var(--ink-900);}
a.ca-step:focus-visible{outline:2px solid var(--forest-800);outline-offset:2px;}
.ca-step .k{font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-700);}
.ca-step .v{font-weight:700;font-size:14.5px;font-variant-numeric:tabular-nums;}
.ca-step .v .u{color:var(--fairway-700);}
.ca-step .v .o{color:var(--red-ink);}
.ca-step.fin{background:var(--ca-chrome);border-color:var(--ca-chrome);color:#fff;}
.ca-step.fin .k{color:var(--ca-muted);}
.ca-step.act{background:color-mix(in oklch,var(--lime-500) 30%,#fff);border-color:color-mix(in oklch,var(--lime-500) 70%,var(--pine-950));}
.ca-step.held{background:#FBF3E2;border-color:#EBD39C;}
.ca-step.held .k{color:var(--amber-ink);}
.ca-step.wait{background:transparent;border-style:dashed;border-color:rgba(16,25,20,.3);}
.ca-eacts{display:flex;flex-wrap:wrap;align-items:center;gap:4px 18px;}
.ca-eacts .ca-more{display:inline-block;width:auto;padding:4px 0;}
.ca-link-inline{font-weight:700;font-size:13.5px;color:var(--fairway-700);text-decoration:underline;text-underline-offset:3px;}

.ca-person{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:center;padding:12px 22px;border-bottom:1px dashed rgba(16,25,20,.16);}
.ca-person:last-child{border-bottom:0;}
.ca-pad{padding:12px 22px 16px;}
.ca-inline{padding:0 22px;}
.ca-inline:empty{display:none;}
.ca-foot{margin:2px 0 24px;}
.ca-foot .ca-more{padding-left:0;}
/* The profile is the rev60 player view; its own card border and slant come off inside this panel. */
#ca-s-profile .pv-wrap{border:0;clip-path:none!important;background-image:none!important;}
/* Its clubs card (rcgl-bag-ui) is a portal card with no padding of its own, so the slant cut its first letters. */
#ca-s-profile .addcoach{clip-path:none!important;background-image:none!important;}

/* ---------- Build, Brand, Settings ---------- */
.ca-alt{display:flex;flex-direction:column;gap:6px;margin:4px 0 24px;}
.ca-alt .ca-create{margin-top:6px;}
.ca-brandrow{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding:20px 22px;}
/* rev292: Your logo, the one place a coach saves it (console.js paintLogoCard). Kept whole: object-fit contain, never cropped. */
.ca-logobox{margin-bottom:14px;padding:20px 22px;}
.ca-logohead b{font-size:16px;color:var(--ink-900);}
.ca-logohead .sub{font-size:13.5px;color:var(--ink-700);margin-top:3px;line-height:1.5;}
.ca-logobody{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:14px;}
.ca-logotile{border-radius:12px;min-height:96px;display:flex;align-items:center;justify-content:center;padding:16px;border:1px solid rgba(16,25,20,.12);}
.ca-logotile img{display:block;max-height:64px;max-width:100%;object-fit:contain;}
.ca-logotile .none{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-align:center;line-height:1.5;}
.ca-logocap{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-500);margin:0 0 6px;}
.ca-logoacts{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;}
.ca-logoacts .btn{min-height:44px;}
.ca-logohint{font-size:12.5px;color:var(--ink-700);line-height:1.5;margin-top:12px;}
.ca-logost{font-size:13px;min-height:18px;margin-top:8px;color:var(--ink-700);}
.ca-brandrow b{font-size:16px;color:var(--ink-900);}
.ca-brandrow .sub{font-size:13.5px;color:var(--ink-700);margin-top:3px;}
#ca-app .ca-setup{margin:0 0 14px;padding-top:0;border-top:0;max-width:none;}
.ca-links{margin-top:14px;}
.ca-link{display:flex;flex-direction:column;gap:2px;padding:15px 22px;min-height:56px;justify-content:center;border-bottom:1px dashed rgba(16,25,20,.16);color:var(--ink-900);text-decoration:none;}
.ca-link:last-child{border-bottom:0;}
.ca-link:hover{background:var(--paper-50);}
.ca-link b{display:flex;align-items:center;font-size:15px;font-weight:700;}
.ca-link span{font-size:13px;color:var(--ink-700);}
.ca-link.ca-out b{color:var(--red-ink);}

/* ---------- sheets: Build, and the ⋯ menu ---------- */
.ca-scrim{position:fixed;inset:0;z-index:2600;background:rgba(8,16,11,.5);display:flex;align-items:flex-end;justify-content:center;}
.ca-sheet{position:relative;background:#fff;color:var(--ink-900);width:min(540px,100%);max-height:88vh;overflow-y:auto;padding:8px 0 calc(16px + env(safe-area-inset-bottom));box-shadow:0 -10px 40px rgba(8,16,11,.25);animation:caUp .18s ease-out;}
.ca-grab{width:44px;height:4px;background:rgba(16,25,20,.2);margin:4px auto 6px;}
.ca-sheet h3{font-family:var(--rc-race,var(--head));font-style:italic;font-weight:900;font-stretch:116%;font-size:20px;letter-spacing:-.02em;padding:8px 22px 8px;margin:0;overflow-wrap:anywhere;}
.ca-opt{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;width:100%;min-height:58px;padding:13px 22px;background:none;border:0;border-top:1px dashed rgba(16,25,20,.16);text-align:left;font:inherit;color:var(--ink-900);text-decoration:none;cursor:pointer;}
.ca-opt:hover{background:var(--paper-50);}
.ca-opt:focus-visible{outline:2px solid var(--forest-800);outline-offset:-2px;}
.ca-opt.ca-danger .ca-ihead{color:var(--red-ink);}
/* Rev 335: the Season Report sheet — dates, the events found, a note. */
.ca-season{padding:4px 22px 0;display:flex;flex-direction:column;gap:10px;}
.ca-season .ca-isub{display:block;}
.ca-dates{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.ca-dates label,.ca-srnote{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:600;color:var(--ink-900);}
.ca-dates input,.ca-srnote textarea{min-width:0;font-family:var(--sans);font-size:15px;border:1px solid var(--border);padding:9px 10px;background:var(--paper-50);color:var(--ink-900);}
.ca-srnote{margin-top:4px;}
.ca-srev{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:start;padding:10px 0;border-top:1px dashed rgba(16,25,20,.16);font-size:14px;color:var(--ink-900);cursor:pointer;}
.ca-srev input{width:18px;height:18px;margin-top:2px;}
.ca-srmsg{font-size:13px;min-height:1em;color:var(--ink-900);}
.ca-sheet .ca-close{display:flex;justify-content:center;width:calc(100% - 44px);margin:14px 22px 0;padding:12px;}
@keyframes caUp{from{transform:translateY(24px);opacity:.4}to{transform:none;opacity:1}}
@media(min-width:700px){
  .ca-scrim{align-items:center;padding:24px;}
  .ca-sheet{padding-bottom:18px;box-shadow:0 18px 50px rgba(8,16,11,.3);}
  .ca-grab{display:none;}
}

/* ---------- the menu: rail on a computer ---------- */
.ca-rbrand{display:block;padding:18px 22px 15px;border-bottom:1px solid rgba(255,255,255,.12);color:#fff;text-decoration:none;}
.ca-rbrand .wm{font-family:var(--rc-race,var(--head));font-style:italic;font-weight:900;font-stretch:120%;text-transform:uppercase;font-size:19px;letter-spacing:-.01em;line-height:1;color:#fff;}
.ca-rbrand .wm .lt{color:var(--bright-400);}
.ca-rbrand .rcgl-lights{color:#fff;margin-top:7px;}
.ca-rlinks{display:flex;flex-direction:column;gap:2px;padding:12px;}
.ca-rl{display:flex;align-items:center;gap:12px;min-height:44px;padding:10px 12px;color:var(--wash-200);font-family:var(--sans);font-weight:700;font-size:14.5px;text-decoration:none;transition:background .12s,color .12s;}
.ca-rl svg{flex:none;}
.ca-rl:hover{color:#fff;background:rgba(255,255,255,.05);}
.ca-rl[aria-current="page"]{background:var(--ca-chrome2);color:#fff;box-shadow:inset 3px 0 0 var(--ca-orn);}
.ca-rl:focus-visible,.ca-tab:focus-visible,.ca-rbrand:focus-visible{outline:2px solid var(--ca-orn);outline-offset:-2px;}
.ca-rl .ca-badge,.ca-tab .ca-badge{background:var(--ca-ornt);color:var(--ca-chrome);}
.ca-rl .ca-badge{margin-left:auto;}
.ca-rwho{margin-top:auto;display:flex;align-items:center;gap:10px;padding:14px 20px 18px;border-top:1px dashed rgba(255,255,255,.16);min-width:0;}
.ca-rwho > span:last-child{min-width:0;}
.ca-rwho b{display:block;font-size:14px;color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ca-rwho small{display:block;font-family:var(--mono);font-size:11px;color:var(--ca-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* Sign out under the coach's name (rev244). A plain row, 44px tall, same ink as the rail's links. */
.ca-rout{display:flex;align-items:center;gap:12px;min-height:44px;margin:0 12px 12px;padding:10px 12px;color:var(--wash-200);font-family:var(--sans);font-weight:700;font-size:14px;text-decoration:none;}
.ca-rout svg{flex:none;}
.ca-rout:hover{color:#fff;background:rgba(255,255,255,.05);}
.ca-rout:focus-visible{outline:2px solid var(--ca-orn);outline-offset:-2px;}

@media(min-width:981px){
  body.ca-on{padding-left:252px;}
  body.ca-on .ca-rail{display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;width:252px;z-index:120;border-right:1px solid rgba(255,255,255,.1);overflow-y:auto;}
  /* The app rail replaces the site's menu rail. The top bar stays (rev244, owner: "no site menu in the
     dashboard. Top should be good"): the ☰ that opens the full site menu, then the site's bar links. The
     logo is on the rail, and Sign out sits at the rail's foot, so the bar drops both. */
  body.ca-on .dnav-rail{display:none!important;}
  body.ca-on > .bar .mnav-btn{display:inline-flex;}
  body.ca-on > .bar .back{display:none!important;}
  body.ca-on > .bar .ca-site{display:flex;order:-1;margin-right:auto;}
  /* Rev 249 (owner: "two RC Greenlight logos … remove the one on the right"): the rail has the logo, so the bar's
     goes here too, not only through mobile-nav.css's .dnav-page rule, which a page without that class never got. */
  body.ca-on > .bar .brand{display:none!important;}
}
@media(min-width:981px) and (max-width:1240px){
  /* the two free builders drop first, as on the public bar */
  body.ca-on > .bar .ca-site a:nth-child(5),body.ca-on > .bar .ca-site a:nth-child(6){display:none;}
}
/* The site's bar links in the dashboard's top bar (rev244), drawn by coach-app.js from mobile-nav.js's list.
   Same chips as the public top bar. */
.ca-site{display:none;align-items:center;gap:3px;min-width:0;}
.ca-site a{display:inline-flex;align-items:center;min-height:32px;padding:7px 11px;clip-path:polygon(7px 0,100% 0,calc(100% - 7px) 100%,0 100%);background:rgba(255,255,255,.05);color:var(--wash-200);font-family:var(--head);font-weight:700;font-size:12px;letter-spacing:-.005em;white-space:nowrap;text-decoration:none;transition:background .15s,color .15s;}
.ca-site a:hover{background:rgba(255,255,255,.12);color:#fff;}
.ca-site a:focus-visible{outline:2px solid var(--ca-orn);outline-offset:-2px;}

/* The top bar's Sign out carries an icon for the narrowest phones (rev244). Hidden everywhere else. */
.ca-soic{display:none;}

/* ---------- the menu: tabs at the bottom of a phone ---------- */
.ca-tab{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:58px;padding:6px 2px;color:var(--wash-200);font-family:var(--sans);font-weight:600;font-size:11px;text-decoration:none;}
.ca-tab span{text-align:center;line-height:1.15;} /* rev345: seven tabs; "Build reports" / "Build games" take two lines */
@media(max-width:360px){.ca-tab{padding:6px 0;font-size:9.5px;letter-spacing:-.02em;}} /* rev345: "Education" fits a seventh of a 320 px phone */
.ca-tab[aria-current="page"]{color:var(--ca-ornt);}
.ca-tab[aria-current="page"]::before{content:"";position:absolute;top:0;left:22%;right:22%;height:3px;background:var(--ca-orn);}
.ca-tab .ca-badge{position:absolute;top:5px;left:calc(50% + 6px);margin:0;min-width:18px;height:18px;padding:0 5px;font-size:10px;}

@media(max-width:980px){
  body.ca-on{padding-bottom:calc(66px + env(safe-area-inset-bottom));}
  body.ca-on .ca-tabs{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));position:fixed;left:0;right:0;bottom:0;z-index:150;border-top:1px solid rgba(255,255,255,.12);padding-bottom:env(safe-area-inset-bottom);}
  /* The site drawer's ☰ stays in the top bar (rev244); the tabs are the app's own menu. */
  /* The top bar keeps the logo and Sign out (rev244: with the tabs full, the bar is the only place a phone can
     always reach it). "← Site" lives in Settings: the two links together wrapped the bar onto two lines. */
  body.ca-on > .bar .back:not(#livesignout){display:none!important;}
  body.ca-on > .bar #livesignout{display:inline-flex;align-items:center;min-height:44px;padding:0 8px;margin-right:-8px;}
  /* The "Updating…" chip (rcgl-live.js) sits above the tabs, never on them. */
  body.ca-on #rcgl-stale{bottom:calc(76px + env(safe-area-inset-bottom))!important;}
}
@media(max-width:640px){
  body.ca-on .wrap{padding:18px 16px 28px;}
  /* ☰, logo and Sign out on one line: tighter padding and gaps fit the label from 388px wide (every current
     iPhone); narrower, the label becomes its icon. */
  body.ca-on > .bar .bar-in{padding-left:12px;padding-right:12px;column-gap:8px;}
  #ca-app .panel-h{padding:16px;}
  .ca-prow,.ca-item,.ca-event,.ca-person,.ca-link,.ca-tools,.ca-more{padding-left:16px;padding-right:16px;}
  .ca-prow{gap:12px;}
  .ca-pact .btn{padding:8px 12px;}
  .ca-phead{padding:18px 16px 24px;}
  .ca-facts{grid-template-columns:minmax(0,1fr) minmax(0,1fr);}
  .ca-fact:first-child{grid-column:1/-1;}
  .ca-pad,.ca-inline{padding-left:16px;padding-right:16px;}
  .ca-brandrow{padding:16px;}
  .ca-logobox{padding:16px;}
}
@media(max-width:420px){
  .ca-pact .ca-buildbtn + .ca-chev{display:none;}
}
/* Under 388px the ☰ and the logo leave room for the icon only; the link keeps "Sign out" as its name (rev244). */
@media(max-width:387px){
  body.ca-on > .bar #livesignout .ca-sot{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}
  body.ca-on > .bar #livesignout .ca-soic{display:block;}
}
/* Under 350px (the oldest 320px phones) the wordmark steps down a size so ☰, the logo and Sign out still share
   one line. Rev 244 hid the five lights here instead; since rev246 they sit under the wordmark (mobile-nav.css
   .rcgl-stack) and take no width, and with the brand fonts loaded the 18px wordmark alone left Sign out 22px short. */
@media(max-width:349px){
  body.ca-on > .bar .brand .rcgl-wm{font-size:15px;}
}

@media(prefers-reduced-motion:reduce){.ca-sheet{animation:none;}.ca-prow,.ca-rl{transition:none;}}
@media print{.ca-rail,.ca-tabs,.ca-jump,.ca-scrim{display:none!important;}body.ca-on{padding:0!important;}}

/* rev342: the branded rail head — the brand's logo (or its name in type) with "Powered by RC Greenlight" under it, and the
   brand's accent as a 3px rule under each screen heading (the approved mock). Only when a brand is on (body.ca-brand). */
.ca-rbrand .ca-blogo{display:block;max-width:150px;max-height:64px;width:auto;height:auto;}
.ca-rbrand .ca-bname{display:block;font-family:var(--rc-race,var(--head));font-style:italic;font-weight:900;font-size:24px;letter-spacing:-.02em;line-height:1.05;color:#fff;overflow-wrap:anywhere;}
.ca-rbrand .ca-bpow{display:block;margin-top:9px;font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ca-muted);}
body.ca-brand .ca-screen > .ca-headrow{border-bottom:3px solid var(--ca-rule,var(--ca-orn));padding-bottom:14px;margin-bottom:18px;}
/* rev342: on a branded dashboard the house-green surfaces of the coach screens take the brand too — dark buttons in the
   chrome, each panel's top edge in the chrome (the accent rule sits under the heading, never twice), the initials tile
   in a light tint of the chrome. Status pills, stress and data colours are untouched. */
body.ca-brand #v-coach .btn-dark{background:var(--ca-chrome);border-color:var(--ca-chrome);color:#fff;}
body.ca-brand #v-coach .panel{box-shadow:inset 0 3px 0 var(--ca-chrome);}
body.ca-brand .ca-av:not(.dk){background:color-mix(in oklch,var(--ca-chrome) 12%,#fff);color:var(--ca-chrome);}
body.ca-brand .ca-av.dk{background:var(--ca-chrome2);color:#fff;}
