/* Site layer on top of the preview's style.css (shared look for the student pages). */
.preview-banner{background:#fff6da;border-bottom:1px solid #e8d79a;color:#5a4a10;text-align:center;font-size:14px;padding:8px 10px}
.preview-banner a{color:inherit;font-weight:600}
.preview-banner .pb-links{white-space:nowrap}
@media (max-width:480px){
  .preview-banner{font-size:12.5px;padding:6px 8px;line-height:1.4}
  .preview-banner .pb-msg,.preview-banner .pb-links{display:block}
  .preview-banner .pb-links{margin-top:1px}
}
.a2hs{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#eef0fb;border-bottom:1px solid #c9cdf0;color:var(--ink);font-size:14px;padding:8px 14px}
.a2hs p{margin:0;flex:1 1 auto}
.a2hs .linkbtn{color:var(--brand);padding:6px 10px}
@media (max-width:480px){.a2hs{font-size:13px;padding:6px 10px}}
math{font-size:1.08em}mfrac{margin:0 1px}mtable{vertical-align:middle}
@media (max-width:420px){math{font-size:1em}}
.dia{margin:10px 0}.dia svg{max-width:100%;max-height:340px}
/* phones: let diagrams scale UP to fill the column (capped per diagram by the .diafit wrapper's max-width from
   textfmt.fit_svg: at most 1.5x, never taller than ~440px) and lift axis numbers to 11 units. CSS only -- the
   founder-approved SVG (and its fingerprint) is untouched. :not([stroke]) leaves alone any tick label that
   already carries its own phone-sized, haloed styling. */
@media (max-width:600px){.dia{display:block}.diafit{display:block;margin:0 auto}.diafit svg{display:block;width:100%;height:auto;max-height:none}.dia svg text.tick:not([stroke]){font-size:11px}}
.top nav{display:flex;gap:4px 16px;align-items:center;flex-wrap:wrap;row-gap:4px}
.top nav a{color:var(--muted);text-decoration:none;padding:10px 12px;border-radius:8px;font-size:15px}
.top nav a:hover,.top nav a.on{background:var(--bg);color:var(--ink)}
.top nav form{margin:0}.linkbtn{background:none;border:0;color:var(--muted);font:inherit;font-size:13px;cursor:pointer;padding:10px 12px}
.top nav .acct{margin-left:4px;font-size:13px;color:var(--muted)}
.brand img{width:32px;height:32px;border-radius:9px}.brand a{color:inherit;text-decoration:none;display:flex;align-items:center;gap:10px}
.brand a span{white-space:nowrap}
@media (max-width:480px){
  .top{flex-wrap:wrap;row-gap:6px}
  .top nav{width:100%}
  .top nav .acct{flex-basis:100%;margin:4px 0 0;padding-top:6px;border-top:1px solid var(--line);display:flex;justify-content:flex-end}
  .btn.small{min-height:44px}
}
main.wide{max-width:1040px}
a{color:var(--brand)}
h1{font-size:30px;line-height:1.2;margin:8px 0 12px}h2{font-size:21px;margin:0 0 10px}h3{font-size:17px;margin:0 0 6px}
.hero{display:grid;grid-template-columns:1.2fr 1fr;gap:28px;align-items:center;padding:28px 0 10px}
.hero p.lead{font-size:19px;color:var(--muted);margin:0 0 18px}
.hero .card{margin:0}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.grid2{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
@media (max-width:800px){.hero,.grid3,.grid2{grid-template-columns:1fr}h1{font-size:25px}}
.flash{border-radius:12px;padding:11px 14px;margin:0 0 16px;background:var(--okbg);border:1px solid #c5e8d3}.flash.bad{background:var(--badbg);border-color:#f5c6c6}
.errors{background:var(--badbg);border-radius:12px;padding:10px 14px 10px 30px;margin:0 0 14px}
form.stack label.f{display:block;font-weight:600;margin:12px 0 4px}
form.stack input[type=text],form.stack input[type=email],form.stack input[type=password],form.stack input[type=date],form.stack input[type=number],form.stack select,form.stack textarea,input.in{width:100%;max-width:420px;font:inherit;padding:10px 12px;border:1.5px solid var(--line);border-radius:10px;background:#fff}
form.stack .check{display:flex;gap:9px;align-items:flex-start;margin:10px 0;font-weight:400}
form.stack .check input{margin-top:5px}
fieldset{border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin:14px 0}legend{font-weight:700;padding:0 6px}
.opts{display:flex;flex-wrap:wrap;gap:8px}.opts label{display:flex;gap:6px;align-items:center;border:1.5px solid var(--line);border-radius:10px;padding:7px 11px;background:#fff;cursor:pointer}
.opts label:has(input:checked){border-color:var(--brand);background:#eef0fb}
table.t{width:100%;border-collapse:collapse;font-size:14px}table.t th,table.t td{text-align:left;padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:top}table.t th{color:var(--muted);font-weight:600}
.revisit{list-style:none;padding:0;margin:4px 0}.revisit li{margin:0;padding:7px 0;border-bottom:1px solid var(--line)}.revisit li:last-child{border-bottom:0}.revisit .rl{display:block;font-weight:600;color:var(--ink)}.revisit .rm{font-size:12px}.revisit .tag{font-size:11px;padding:0 6px;margin-right:4px;vertical-align:0}
@media (max-width:600px){
  /* Recent sets as compact cards: set name + status on top, date · score · View underneath */
  table.t.recent,table.t.recent tbody{display:block}
  table.t.recent tr:has(th){display:none}
  table.t.recent tr{position:relative;display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:"name name status" "date score view";align-items:center;column-gap:10px;row-gap:4px;border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:0 0 8px;background:#fff}
  table.t.recent td{padding:0;border:0}
  table.t.recent td.setname{grid-area:name;font-weight:600;font-size:15px}
  table.t.recent td.sstatus{grid-area:status;justify-self:end}
  table.t.recent td.sdate{grid-area:date;color:var(--muted);font-size:13px}
  table.t.recent td.sscore{grid-area:score;color:var(--muted);font-size:13px}
  table.t.recent td.sscore::before{content:"· Score "}
  table.t.recent td.sview{grid-area:view;justify-self:end;font-size:14px}
  /* whole card tappable: the View link's own ::after is stretched over the card; the link text stays the visual cue */
  table.t.recent td.sview a{position:static}
  table.t.recent td.sview a::after{content:"";position:absolute;inset:0;border-radius:inherit}
  table.t.recent tr:focus-within{outline:2px solid var(--brand);outline-offset:2px}
}
.areabar{display:grid;grid-template-columns:150px 1fr 54px;gap:10px;align-items:center;margin:6px 0;font-size:14px}
.areabar .track{height:10px;background:var(--bg);border-radius:6px;overflow:hidden}.areabar .track span{display:block;height:100%;background:var(--brand2)}
.areabar .track span.lo{background:#e57373}.areabar .track span.mid{background:#ffb74d}.areabar .track span.hi{background:#66bb6a}
.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin:0 0 16px}.kpi{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 14px}.kpi b{display:block;font-size:24px}.kpi span{color:var(--muted);font-size:13px}
.tag{display:inline-block;font-size:12px;border-radius:999px;padding:2px 9px;background:var(--bg);border:1px solid var(--line)}.tag.ok{background:var(--okbg)}.tag.bad{background:var(--badbg)}.tag.warn{background:var(--warnbg)}
.draft{background:var(--warnbg);border:1px dashed #d4a300;border-radius:12px;padding:10px 14px;margin:0 0 16px}
.adminnav{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 16px}.adminnav a{padding:6px 11px;border-radius:9px;background:#fff;border:1px solid var(--line);text-decoration:none;color:var(--ink);font-size:14px}.adminnav a.on{background:var(--brand);color:#fff;border-color:var(--brand)}
.qnav{display:flex;gap:7px;flex-wrap:wrap;margin:10px 0}.qnav a{display:inline-grid;place-items:center;width:44px;height:44px;border-radius:10px;border:1px solid var(--line);background:#fff;text-decoration:none;color:var(--ink);font-size:14px}.qnav a.cur{border-color:var(--brand);border-width:2px}.qnav a.ok{background:var(--okbg)}.qnav a.bad{background:var(--badbg)}.qnav a.part{background:var(--warnbg)}.qnav a.ans{background:#eef0fb}
.inline{display:inline}
code.big{font-size:18px;letter-spacing:1px}
.childcard{border-left:5px solid var(--brand2);scroll-margin-top:66px}
.qstatus{font-size:14px;color:var(--ink);font-weight:600;margin:0 0 4px}
.jumprow{font-size:14px;color:var(--muted);margin:0 0 14px}.jumprow a{font-weight:600}
.small{font-size:13px}
a.btn{text-decoration:none}
.brand img{flex:none}
.streakline{margin:0 0 10px}
.streakbadge{display:inline-flex;align-items:center;gap:4px;background:var(--bg);border-radius:999px;padding:4px 11px;font-weight:600;font-size:14px}
.scorebars{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin:6px 0 2px}
.sbarcol{display:flex;flex-direction:column;align-items:center;gap:4px;width:32px}
.sbarcol small{color:var(--muted);font-size:11px}
.sbar{width:100%;height:50px;background:var(--bg);border-radius:6px;display:flex;align-items:flex-end;overflow:hidden}
.sbar span{display:block;width:100%;background:var(--brand2)}
@media (max-width:420px){.sbarcol{width:24px}.sbar{height:38px}}
/* /sample: tier switch + topic chips, both real tappable buttons (>=44px tall even on a phone) */
#app .seg{margin:0 0 4px}
#app .seg .opt{min-height:44px;display:inline-flex;align-items:center;justify-content:center}
#app .chips .chip{min-height:44px;display:inline-flex;align-items:center;gap:4px}
#app .chips .chip .tick{width:auto}
#app .fb-example{background:var(--bg)}
.gradecard h4{font-size:14px}
.gradepill{display:inline-block;font-weight:700;font-size:20px;background:var(--bg);border-radius:10px;padding:5px 14px}
.gradelist{list-style:none;padding:0;margin:0}.gradelist li{padding:3px 0;display:flex;justify-content:space-between;gap:8px}
.gradedisclaimer{margin:12px 0 0;border-top:1px solid var(--line);padding-top:8px}
.examtimer{display:inline-block;font-weight:700;font-size:15px;background:var(--bg);border-radius:999px;padding:6px 14px;margin:0 0 8px}
.examtimer.soon{background:var(--warnbg)}.examtimer.up{background:var(--badbg)}
.examcountdown{margin:0 0 10px}
.revplan{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:10px}
.revweek{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:#fff}
.revweek.mockweek{background:var(--bg)}
.revweek form.inline{margin-top:8px}
.flashcard summary{min-height:44px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;cursor:pointer;padding:6px 0}
.flashcard .fc-answer{font-size:17px;border-top:1px solid var(--line);padding-top:10px}
.flashcard .fc-answer p{margin:4px 0}
.flashcard form.row .btn{min-height:44px}
