/* Road to Sergeant: shared design system for every page (library, reader, study center, test prep).
   Same tokens as the test app: navy + brass, Archivo / Source Serif 4, light and dark. */
:root{
  --navy:#0E2A5C; --navy-2:#173C7A; --ink:#101A2C; --muted:#5B6B84; --line:#DCE2EC;
  --bg:#EEF1F6; --surface:#FFFFFF; --surface-2:#F6F8FB; --fill:rgba(16,26,44,.05);
  --brass:#C9A24A; --brass-hi:#F1D88C; --brass-lo:#A87B25;
  --ok:#1F8A5B; --ok-bg:#E4F4EC; --bad:#C2413A; --bad-bg:#FBEAE8; --flag:#D48A1F; --royal:#2C5AA8;
  --shadow:0 1px 2px rgba(16,26,44,.06),0 8px 24px rgba(16,26,44,.06);
  --r-lg:22px; --r-md:14px; --r-sm:10px; --ease:cubic-bezier(.2,.8,.2,1); --spring:cubic-bezier(.22,1.15,.36,1);
  --sans:"Archivo",system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --serif:"Source Serif 4",Georgia,"Times New Roman",serif;
  --mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  /* aliases so older page rules keep working */
  --gold:var(--brass); --gold-soft:var(--brass-hi); --blue:var(--royal); --red:var(--bad); --green:var(--ok);
  --card:var(--surface); --panel:var(--surface); --panel-2:var(--surface-2); --line-2:var(--line); --ink-2:var(--muted);
  --navy-700:var(--navy); --navy-900:#071631; --font:var(--sans);
  --maxw:1200px;
  color-scheme:light;
}
@media(min-width:1600px){:root{--maxw:1360px}}
@media(min-width:2100px){:root{--maxw:1560px}}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --ink:#E9EEF7; --muted:#98A6BD; --line:#26344F; --bg:#0A1326; --surface:#111D36; --surface-2:#16243F; --fill:rgba(255,255,255,.06);
    --navy:#8FB0EE; --navy-2:#B6CBF4; --ok:#4CC38A; --ok-bg:#12301F; --bad:#F07C72; --bad-bg:#3A1716;
    --shadow:0 1px 2px rgba(0,0,0,.3),0 10px 30px rgba(0,0,0,.25); color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --ink:#E9EEF7; --muted:#98A6BD; --line:#26344F; --bg:#0A1326; --surface:#111D36; --surface-2:#16243F; --fill:rgba(255,255,255,.06);
  --navy:#8FB0EE; --navy-2:#B6CBF4; --ok:#4CC38A; --ok-bg:#12301F; --bad:#F07C72; --bad-bg:#3A1716;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 10px 30px rgba(0,0,0,.25); color-scheme:dark;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;overflow-x:clip;min-height:100vh;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.5;font-variation-settings:"wdth" 100;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font-family:var(--sans)}
:focus-visible{outline:3px solid var(--brass);outline-offset:2px;border-radius:8px}
.lightbar{display:none!important}

/* ---- global bar (same on every page) ---- */
.gbar{position:sticky;top:0;z-index:60;padding-top:env(safe-area-inset-top);background:color-mix(in srgb,var(--bg) 84%,transparent);-webkit-backdrop-filter:saturate(1.4) blur(14px);backdrop-filter:saturate(1.4) blur(14px);border-bottom:1px solid var(--line)}
.gbar .in{max-width:var(--maxw);margin:0 auto;padding:10px max(24px,env(safe-area-inset-right)) 10px max(24px,env(safe-area-inset-left));display:flex;align-items:center;gap:14px}
.gbrand{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink);font-weight:800;font-variation-settings:"wdth" 80;letter-spacing:.01em;font-size:18px;line-height:1.1;flex:none}
.gbrand small{display:block;font-weight:500;font-size:12px;color:var(--muted);letter-spacing:0;font-variation-settings:"wdth" 100}
.tile{--s:44px;width:var(--s);height:var(--s);border-radius:calc(var(--s)*.26);display:inline-grid;place-items:center;flex:none;color:#fff;
  background:linear-gradient(160deg,#2C5AA8 0%,#0E2A5C 60%,#081A3B 100%);box-shadow:inset 0 1px 0 rgba(255,255,255,.3),0 4px 12px rgba(14,42,92,.3)}
.tile svg{width:60%;height:60%;color:var(--brass-hi);filter:drop-shadow(0 1px 1px rgba(0,0,0,.35))}
.tile.sm{--s:36px}
.gnav{display:flex;gap:4px;margin-left:10px}
.gnav a{white-space:nowrap;padding:8px 14px;border-radius:10px;color:var(--muted);text-decoration:none;font-weight:700;font-size:15px;transition:.2s}
.gnav a:hover{color:var(--ink);background:var(--fill)}
.gnav a[aria-current="page"]{color:var(--ink);background:color-mix(in srgb,var(--brass) 20%,transparent);box-shadow:inset 0 -2px 0 var(--brass)}
.gbar .sp{flex:1}
#gextra{display:flex;gap:4px;flex:none}
.iconbtn{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:12px;border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;transition:.2s}
.iconbtn:hover{border-color:var(--brass);transform:translateY(-1px)}
.iconbtn svg{width:20px;height:20px}
.iconbtn.off{opacity:.5}


/* ---- animated rank chevrons (the logo next to "Road to Sergeant") ----
   On load the three chevrons climb into place; every few seconds a bright pulse climbs
   bottom to top, like earning a stripe. Hovering the logo replays the climb. */
.rank svg{overflow:visible}
.rank path{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transform-box:fill-box;transform-origin:center;
  animation:rankIn .55s var(--spring) backwards,rankPulse 6s ease-in-out infinite}
.rank .c3{animation-delay:.05s,1.4s}.rank .c2{animation-delay:.17s,1.62s}.rank .c1{animation-delay:.29s,1.84s}
.gbrand .tile.rank,.top .tile.rank{animation:rankGlow 6s ease-in-out 1.4s infinite}
.gbrand:hover .rank path,.brandlink:hover .rank path{animation:rankClimb .6s var(--spring) both}
.gbrand:hover .rank .c3,.brandlink:hover .rank .c3{animation-delay:0s}.gbrand:hover .rank .c2,.brandlink:hover .rank .c2{animation-delay:.08s}.gbrand:hover .rank .c1,.brandlink:hover .rank .c1{animation-delay:.16s}
@keyframes rankIn{from{opacity:0;transform:translateY(6px) scale(.8)}to{opacity:1;transform:none}}
@keyframes rankPulse{0%,12%,100%{stroke:var(--brass-hi);transform:none}5%{stroke:#fff;transform:translateY(-1.6px)}}
@keyframes rankClimb{0%{stroke:var(--brass-hi);transform:none}40%{stroke:#fff;transform:translateY(-2.4px) scale(1.08)}100%{stroke:var(--brass-hi);transform:none}}
@keyframes rankGlow{0%,14%,100%{box-shadow:inset 0 1px 0 rgba(255,255,255,.3),0 4px 12px rgba(14,42,92,.3)}6%{box-shadow:inset 0 1px 0 rgba(255,255,255,.3),0 0 0 1px rgba(241,216,140,.5),0 0 18px rgba(241,216,140,.55)}}


/* ---- officer profile: top-bar chip and the create-profile / sign-in gate ---- */
#guser{position:relative;flex:none}
.userchip{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 12px 0 5px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font:700 14px var(--sans);cursor:pointer;transition:.2s}
.userchip:hover{border-color:var(--brass)}
.uav{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:50%;background:linear-gradient(160deg,#2C5AA8,#0E2A5C);color:var(--brass-hi);font-size:12px;font-weight:800;letter-spacing:.02em}
.unm{max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.usermenu{position:absolute;right:0;top:calc(100% + 8px);z-index:80;min-width:210px;padding:14px;border-radius:var(--r-md);background:var(--surface);border:1px solid var(--line);box-shadow:0 18px 40px rgba(16,26,44,.25)}
.usermenu[hidden]{display:none}
.um-name{font-weight:800;font-size:16px}.um-sub{color:var(--muted);font-size:13px;margin-top:2px}
.um-plan{display:inline-block;margin:10px 0 12px;padding:3px 10px;border-radius:999px;font:800 11px var(--sans);letter-spacing:.06em;text-transform:uppercase;background:color-mix(in srgb,var(--brass) 22%,transparent);color:var(--ink)}
.um-out{display:block;width:100%;min-height:40px;border-radius:10px;border:1px solid var(--line);background:var(--surface-2);color:var(--ink);font:700 14px var(--sans);cursor:pointer}
.um-out:hover{border-color:var(--bad);color:var(--bad)}
@media(max-width:640px){.unm{display:none}.userchip{padding:0 5px;height:38px}}
@media(max-width:420px){.userchip{height:36px}.uav{width:28px;height:28px}}
.authgate{position:fixed;inset:0;z-index:300;display:grid;place-items:center;padding:16px;overflow:auto;background:radial-gradient(120% 90% at 50% 15%,#1B3E7E 0%,#0E2A5C 50%,#071631 100%);-webkit-overflow-scrolling:touch}
.ag-card{width:100%;max-width:440px;margin:auto;padding:26px 24px 22px;border-radius:var(--r-lg);background:var(--surface);color:var(--ink);box-shadow:0 30px 80px rgba(0,0,0,.45);border:1px solid var(--line);animation:agIn .5s var(--spring) both}
@keyframes agIn{from{opacity:0;transform:translateY(18px) scale(.97)}}
.ag-logo{display:flex;justify-content:center;margin-bottom:10px}.ag-logo .tile{--s:56px}
.ag-card h2{margin:0 0 6px;text-align:center;font:800 26px var(--sans);font-variation-settings:"wdth" 82}
.ag-sub{margin:0 0 16px;text-align:center;color:var(--muted);font:15px/1.45 var(--serif)}
.ag-tabs{display:flex;gap:4px;padding:4px;border:1px solid var(--brass);border-radius:14px;background:var(--surface-2);margin-bottom:14px}
.ag-tabs button{flex:1;min-height:40px;border:0;border-radius:10px;background:none;color:var(--muted);font:700 15px var(--sans);cursor:pointer;transition:.2s}
.ag-tabs button[aria-selected="true"]{background:linear-gradient(160deg,var(--brass-hi),var(--brass) 60%,var(--brass-lo));color:#1C1405}
.ag-card form{display:grid;gap:12px}.ag-card form[hidden]{display:none}
.ag-card label{display:grid;gap:5px;font:700 13px var(--sans);color:var(--ink)}
.ag-card input[type=text],.ag-card input:not([type]),.ag-card input[type=password]{width:100%;min-height:46px;padding:0 14px;border-radius:12px;font-size:16px}
.ag-check{display:flex!important;align-items:flex-start;gap:10px;font-weight:600!important;font-size:13.5px!important;line-height:1.4;color:var(--muted)!important}
.ag-check input{margin-top:3px;width:18px;height:18px;flex:none;accent-color:var(--brass-lo)}
.ag-check b{color:var(--ink)}
.ag-err{min-height:18px;color:var(--bad);font-size:14px;font-weight:600}
.ag-notice{margin-bottom:12px;padding:10px 12px;border-radius:12px;font-size:14px;line-height:1.4;background:color-mix(in srgb,var(--brass) 18%,transparent);border:1px solid color-mix(in srgb,var(--brass) 45%,transparent)}
.ag-notice[hidden]{display:none}
.ag-submit{width:100%;min-height:48px;font-size:16px}
.ag-fine{margin:14px 0 0;color:var(--muted);font-size:12px;line-height:1.5;text-align:center}
.ag-card form .ag-fine{margin:0}
html.ag-open,html.ag-open body{overflow:hidden}

/* ---- buttons ---- */
.btn,.sbtn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 18px;border-radius:12px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font:700 14.5px var(--sans);text-decoration:none;cursor:pointer;white-space:nowrap;transition:transform .15s var(--ease),border-color .2s,background .2s,box-shadow .2s}
.btn:hover,.sbtn:hover{border-color:var(--brass);transform:translateY(-1px)}
.btn:active,.sbtn:active{transform:scale(.98)}
.btn.gold,.sbtn:not(.ghost){background:linear-gradient(160deg,var(--brass-hi),var(--brass) 55%,var(--brass-lo));color:#1C1405;border-color:transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 6px 16px rgba(168,123,37,.28)}
.btn.gold:hover,.sbtn:not(.ghost):hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 10px 24px rgba(168,123,37,.4)}
.sbtn.ghost{background:var(--surface);color:var(--ink);border:1px solid var(--line);box-shadow:none}
.sbtn.ghost:hover{border-color:var(--brass);color:var(--ink)}
.btn.red{background:var(--bad);color:#fff;border-color:transparent}
.btn.green{background:var(--ok);color:#fff;border-color:transparent}
.btn.primary{background:var(--navy);color:#fff;border-color:transparent}
.btn:disabled{opacity:.4;pointer-events:none}

/* ---- inputs ---- */
input[type=text],input[type=search],input[type=date],input[type=password],input:not([type]),select,textarea{background:var(--surface-2);border:1px solid var(--line);color:var(--ink);border-radius:12px;padding:10px 13px;font:inherit;outline:none;transition:.2s}
input:focus,select:focus,textarea:focus{border-color:var(--brass);box-shadow:0 0 0 4px color-mix(in srgb,var(--brass) 25%,transparent)}
input::placeholder,textarea::placeholder{color:var(--muted)}
select option{color:#101A2C;background:#fff}

/* ---- shared footer credit ---- */
.gfoot{max-width:var(--maxw);margin:0 auto;padding:30px 24px 40px;text-align:center;color:var(--muted);font-size:13px;border-top:1px solid var(--line)}
.gfoot b{color:var(--brass-lo);font-weight:800}
:root[data-theme="dark"] .gfoot b{color:var(--brass-hi)}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .gfoot b{color:var(--brass-hi)}}

/* ---- responsive: phone / tablet / desktop ----
   >=1600 wide desktop (wider container) | 861-1599 desktop + tablet landscape | 641-860 tablet portrait
   <=640 large phone | <=420 phone | <=350 small phone | short landscape phones | touch devices */
.gnav{min-width:0}
@media(max-width:860px){
  .gbar .in{padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right));gap:8px}
  .gnav{margin-left:2px;gap:0}.gnav a{padding:8px 10px;font-size:14px}
}
@media(max-width:640px){
  .gbar .in{gap:6px}
  .gbrand span.t{display:none}
  .gnav{flex:1 1 auto;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}.gnav::-webkit-scrollbar{display:none}
  .gnav a.gh{display:none}
  .gbar .sp{display:none}
  .iconbtn{width:38px;height:38px}
}
@media(max-width:420px){
  .gbar .in{padding-left:max(10px,env(safe-area-inset-left));padding-right:max(10px,env(safe-area-inset-right));gap:4px}
  .gnav a{padding:8px 7px;font-size:13px}.iconbtn{width:36px;height:36px}.tile.sm{--s:32px}
}
@media(max-width:350px){.gnav a{padding:8px 5px;font-size:12.5px}.iconbtn{width:34px;height:34px}.gbrand .tile{--s:30px}}
/* touch screens: bigger targets, 16px inputs (stops iOS zooming into fields), no sticky hover */
@media(pointer:coarse){
  .gnav a{min-height:40px;display:inline-flex;align-items:center}
  .btn,.sbtn{min-height:44px}
  input,select,textarea{font-size:16px!important}
}
@media(max-width:640px) and (pointer:coarse){.iconbtn{width:40px;height:40px}}
@media(max-width:420px) and (pointer:coarse){.iconbtn{width:38px;height:38px}}
/* short landscape phones: keep the sticky bar compact */
@media(max-height:520px){.gbar .in{padding-top:6px;padding-bottom:6px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media print{.gbar,.gfoot{display:none}}

/* keyboard / screen-reader navigation */
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skiplink{position:fixed;left:12px;top:-60px;z-index:200;background:var(--navy,#0E2A5C);color:#fff;padding:10px 16px;border-radius:10px;font:700 14px var(--sans,system-ui);text-decoration:none;border:2px solid var(--brass,#C9A24A);transition:top .15s}
.skiplink:focus{top:10px}
:focus-visible{outline:3px solid var(--brass,#C9A24A);outline-offset:2px}
