/* «Тетрадь» — student frontend. Tokens and rules from docs/design/README.md (design handoff). */
:root{
  --paper:#F6F8FC; --sheet:#FFFFFF; --grid:#E4EAF6; --rule:#D3DBEC; --ink:#1B2A5E; --ink2:#4B5783; --ink3:#8A93B3;
  --pen:#2447B8; --pen-soft:#E9EEFB; --red:#C8202F; --red-soft:#FCEBEC; --margin:#EFA9AF; --green:#1E7A4C; --green-soft:#E4F3EA;
  --marker:#FFE866; --marker-soft:#FFE866; --on-pen:#FFFFFF; --sticker:#FFF7C2; --shadow:0 1px 0 #D3DBEC, 0 8px 24px -12px rgba(27,42,94,.18);
  --ui:"Golos Text",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif; --hand:"Caveat","Segoe Script",cursive;
  --margin-w:48px; --margin-x:47px; --tab-h:64px;
  box-sizing:border-box; color-scheme:light dark;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --paper:#0E1430; --sheet:#161E3F; --grid:#1D2750; --rule:#2C3868; --ink:#E7EBF7; --ink2:#AEB7D4; --ink3:#6F7AA3;
  --pen:#8EA6FF; --pen-soft:#212D63; --red:#FF7F88; --red-soft:#3B1C2C; --margin:#6E2B3B; --green:#6FD19E; --green-soft:#15392D;
  --marker:#E9D54B; --marker-soft:#4A4320; --on-pen:#0E1430; --shadow:0 1px 0 #0A0F24, 0 8px 24px -12px rgba(0,0,0,.5);
}}
:root[data-theme="dark"]{
  --paper:#0E1430; --sheet:#161E3F; --grid:#1D2750; --rule:#2C3868; --ink:#E7EBF7; --ink2:#AEB7D4; --ink3:#6F7AA3;
  --pen:#8EA6FF; --pen-soft:#212D63; --red:#FF7F88; --red-soft:#3B1C2C; --margin:#6E2B3B; --green:#6FD19E; --green-soft:#15392D;
  --marker:#E9D54B; --marker-soft:#4A4320; --on-pen:#0E1430; --shadow:0 1px 0 #0A0F24, 0 8px 24px -12px rgba(0,0,0,.5);
}
*,*::before,*::after{box-sizing:inherit}
/* content of <details> sits in a UA slot with content-box: restart the inheritance */
details > *{box-sizing:border-box}
html{scroll-padding-top:72px}
body{margin:0;background:var(--paper);color:var(--ink);font:400 16px/24px var(--ui);-webkit-font-smoothing:antialiased}
button,input,textarea,select{font:inherit;color:inherit}
a{color:var(--pen)}
:focus-visible{outline:3px solid var(--marker);outline-offset:2px;box-shadow:0 0 0 1px var(--ink)}
@media (prefers-reduced-motion:reduce){*{transition:none !important;animation:none !important}}
h1{font:700 28px/36px var(--ui);letter-spacing:-.01em;margin:4px 0 16px}
h2{font:700 20px/28px var(--ui);margin:0 0 12px}
p{margin:0 0 12px;max-width:720px}
.muted{color:var(--ink2)} .small{font-size:14px;line-height:20px} .hand{font-family:var(--hand)}
.hl{background:linear-gradient(transparent 55%,var(--marker) 55%)}
.err{color:var(--red);font-weight:500;margin:8px 0}

/* ---------- shell ---------- */
.shell{min-height:100vh;display:flex;flex-direction:column}
.top{position:sticky;top:0;z-index:20;height:56px;background:var(--paper);border-bottom:1px solid var(--rule);display:flex;align-items:center;gap:16px;padding:0 16px}
.logo{display:flex;align-items:center;gap:10px;font:700 18px/1 var(--ui);color:var(--ink);text-decoration:none}
.logo i{width:26px;height:26px;border-radius:7px;background:var(--pen);position:relative;flex:0 0 auto}
.logo i::after{content:"";position:absolute;left:7px;top:4px;bottom:4px;width:2px;background:#FF8A94;border-radius:1px}
.top nav{display:none;gap:4px;margin-left:8px}
.top nav a{padding:8px 12px;border-radius:8px;text-decoration:none;color:var(--ink2);font-weight:500}
.top nav a.on{background:var(--pen-soft);color:var(--pen)}
.top .who{margin-left:auto;display:flex;align-items:center;gap:10px;color:var(--ink2)}
.top .who .name{display:none}
.avatar{width:36px;height:36px;border-radius:50%;background:var(--pen-soft);color:var(--pen);font-weight:700;display:inline-flex;align-items:center;justify-content:center;text-decoration:none}
.top form.logout button{background:none;border:0;padding:8px;color:var(--ink2);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
main.wrap{flex:1;width:100%;max-width:1216px;margin:0 auto;padding:16px 16px calc(var(--tab-h) + 24px)}
.tabbar{position:fixed;left:0;right:0;bottom:0;height:var(--tab-h);background:var(--sheet);border-top:1px solid var(--rule);display:flex;z-index:20;padding-bottom:env(safe-area-inset-bottom,0)}
.tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;text-decoration:none;color:var(--ink2);font-size:13px;font-weight:500}
.tabbar a.on{color:var(--pen)}
.tabbar svg{width:24px;height:24px}
@media (min-width:768px){
  .top{height:64px;padding:0 32px}
  .top nav{display:flex} .top .who .name{display:inline}
  .tabbar{display:none}
  main.wrap{padding:32px 32px 48px}
  h1{font-size:40px;line-height:48px;letter-spacing:-.02em}
  :root{--margin-w:72px;--margin-x:71px}
}
.flash{padding:12px 16px;border-radius:10px;margin:0 0 16px;font-weight:500}
.flash.success{background:var(--green-soft);color:var(--green)}
.flash.error{background:var(--red-soft);color:var(--red)}
.date-line{color:var(--ink2);margin-bottom:4px}
.cols{display:grid;gap:32px;grid-template-columns:minmax(0,1fr)}
@media (min-width:1024px){.cols{grid-template-columns:1fr 360px;gap:48px;align-items:start}}

/* ---------- buttons, chips, forms ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 20px;border-radius:10px;border:2px solid var(--pen);background:var(--pen);color:var(--on-pen);font-weight:700;text-decoration:none;cursor:pointer;transition:filter .14s ease-out,border-color .14s ease-out}
.btn:hover{filter:brightness(.9)}
.btn.ghost{background:transparent;color:var(--pen)}
.btn.green{background:var(--green);border-color:var(--green);color:#fff}
.btn.big{min-height:56px;font-size:17px;width:100%}
.btn:disabled,.btn[aria-disabled="true"]{background:var(--sheet);border-color:var(--rule);color:var(--ink3);cursor:default;filter:none}
button.link{background:none;border:0;padding:0;color:var(--pen);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.chip{display:inline-flex;align-items:center;height:28px;padding:0 10px;border-radius:14px;border:1px solid var(--rule);background:var(--sheet);font-size:14px;font-weight:500;color:var(--ink2);white-space:nowrap}
.chip.level{background:var(--pen-soft);color:var(--pen);border-color:transparent;font-weight:700}
.chip.late{background:var(--red-soft);color:var(--red);border-color:transparent}
.chip.wait{background:var(--marker);color:#1B2A5E;border-color:transparent}
.chip.done{background:var(--green-soft);color:var(--green);border-color:transparent}
label.f{display:block;font-weight:500;margin:16px 0 6px}
label.f:first-child{margin-top:0}
span.f{display:block;font-weight:500;margin:0 0 6px}
.in,input[type=text],input[type=email],input[type=password],input[type=url],input[type=date],input[type=time],input[type=number],input[type=search],input[type=tel],textarea,select{width:100%;min-height:48px;background:var(--sheet);border:1.5px solid var(--rule);border-radius:10px;padding:10px 14px;color:var(--ink)}
input:focus,textarea:focus,select:focus{border-color:var(--pen);outline:3px solid var(--marker);outline-offset:1px;box-shadow:none}
input[readonly]{background:var(--grid);border-color:transparent;color:var(--ink2)}
.field.error input{border:2px solid var(--red);background:var(--red-soft)}
.pw{position:relative}
.pw input{padding-right:48px}
.pw button{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:40px;height:40px;border:0;background:none;color:var(--ink3);cursor:pointer;border-radius:8px}
.checklist{list-style:none;padding:0;margin:10px 0 16px;color:var(--ink2)}
.checklist li{display:flex;gap:8px;align-items:center;min-height:28px}
.checklist li.ok{color:var(--green)}
.checklist li::before{content:"○";width:18px;text-align:center;font-weight:700}
.checklist li.ok::before{content:"✓"}
.check{display:flex;gap:10px;align-items:flex-start;margin:12px 0}
.check input{width:20px;height:20px;min-height:0;margin-top:2px}
.sticker{background:var(--sticker);color:#1B2A5E;border-radius:12px;padding:16px 18px;transform:rotate(.6deg);box-shadow:var(--shadow)}
.sticker .title{font:700 22px/26px var(--hand);color:#C8202F;margin-bottom:4px}
.sticker .body{font:500 20px/24px var(--hand)}

/* ---------- cards ---------- */
.card{background:var(--sheet);border:1px solid var(--rule);border-radius:16px;padding:20px;box-shadow:var(--shadow);margin-bottom:16px}
.card.narrow{max-width:520px}
.card .kicker{display:flex;justify-content:space-between;align-items:center;color:var(--ink2);margin-bottom:6px}
.lesson-card .time{font:700 32px/40px var(--ui);letter-spacing:-.02em;margin:2px 0 4px}
.lesson-card .with{color:var(--ink2);margin-bottom:14px}
@media (min-width:768px){.lesson-card{display:grid;grid-template-columns:1fr auto;gap:24px;align-items:center}.lesson-card .time{font-size:40px;line-height:48px}.lesson-card .actions{display:flex;flex-direction:column;gap:10px;min-width:240px}}
.section-h{display:flex;align-items:baseline;gap:10px;margin:24px 0 12px}
.section-h h2{margin:0} .section-h .count{color:var(--ink2)}
.acard{position:relative;display:block;background:var(--sheet);border:1px solid var(--rule);border-radius:12px;padding:16px 16px 16px 32px;margin-bottom:12px;color:inherit;text-decoration:none;box-shadow:var(--shadow)}
.acard::before{content:"";position:absolute;left:16px;top:0;bottom:0;width:2px;background:var(--margin)}
.acard .title{font:600 17px/24px var(--ui);color:var(--ink);margin-bottom:8px}
.acard .meta{display:flex;flex-wrap:wrap;gap:8px;align-items:center;color:var(--ink2)}
.acard .note{font:500 22px/26px var(--hand);color:var(--red);margin-top:8px}
.acard .mark{position:absolute;left:0;top:14px;width:16px;text-align:center;font:700 22px/26px var(--hand);color:var(--red)}
.acard > .score{margin-top:10px}
@media (min-width:768px){.acard > .score{margin-top:0}.acard{display:grid;grid-template-columns:1fr auto auto;gap:16px;align-items:center;padding:20px 20px 20px 48px}.acard::before{left:24px}.acard .mark{left:4px;width:24px}.acard .title{margin:0}.acard .note{margin:4px 0 0}}
.rows{list-style:none;padding:0;margin:0}
.rows li{display:flex;align-items:center;gap:14px;padding:14px 0;border-top:1px solid var(--rule)}
.rows li:first-child{border-top:0}
.rows .grow{flex:1;min-width:0}
.rows .t{font-weight:600;color:var(--ink);overflow-wrap:anywhere}
.rows .s{color:var(--ink2);font-size:14px;line-height:20px;overflow-wrap:anywhere}
.rows a.t{text-decoration:none}
/* a list that is also a card: the rows keep the card's side padding (.rows would reset it) */
.rows.card{padding:4px 20px}
.rows li > a:last-child,.rows li > form:last-child{flex:0 0 auto}
/* form groups: one rhythm everywhere (label 6 px above its input, 16 px between groups) */
.field{margin:0 0 16px}
.field:last-child{margin-bottom:0}
.field label.f{margin-top:0}
.field input[type=file]{display:block;width:100%;max-width:100%;padding:8px 0}
.row2 .field{margin-bottom:16px}
p{overflow-wrap:break-word}
.kind{width:44px;height:44px;border-radius:10px;background:var(--pen-soft);color:var(--pen);display:inline-flex;align-items:center;justify-content:center;font:700 12px/1 var(--ui);flex:0 0 auto}
.kind.pdf{background:var(--red-soft);color:var(--red)}
.kind.audio,.kind.video,.kind.youtube{border-radius:50%;background:var(--pen);color:var(--on-pen);font-size:16px}
.kind.image{background:var(--green-soft);color:var(--green)}

/* ---------- score circle and teacher marks ---------- */
.score{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;border:2.5px solid var(--red);border-radius:52% 48% 55% 45% / 48% 55% 45% 52%;transform:rotate(-6deg);font:700 22px/1 var(--hand);color:var(--red);flex:0 0 auto}
.score.lg{width:84px;height:84px;font-size:32px;border-width:3px;transform:rotate(-7deg)}
.comment{font:500 22px/26px var(--hand);color:var(--red)}
.mark{font-weight:700;font-size:22px;line-height:1}
.mark.ok{color:var(--green)} .mark.no{color:var(--red)} .mark.half{color:var(--red)}

/* ---------- the sheet ---------- */
.sheet{position:relative;background-color:var(--sheet);background-image:linear-gradient(90deg,transparent var(--margin-x),var(--margin) var(--margin-x),var(--margin) calc(var(--margin-x) + 2px),transparent calc(var(--margin-x) + 2px)),linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:100% 100%,24px 24px,24px 24px;border:1px solid var(--rule);border-radius:12px;padding:24px 16px 24px calc(var(--margin-w) + 12px);box-shadow:var(--shadow);margin:0 -16px 16px}
@media (min-width:768px){.sheet{margin:0 0 16px;border-radius:16px;padding:32px 32px 32px calc(var(--margin-w) + 24px)}}
.sheet .head{margin-bottom:24px}
.sheet .head h2{font-size:24px;line-height:32px}
.q{position:relative;padding:16px 0 24px}
.q .num{position:absolute;left:calc(-1 * var(--margin-w) - 12px);width:var(--margin-w);text-align:center;font-weight:700;color:var(--ink2);padding-top:2px}
@media (min-width:768px){.q .num{left:calc(-1 * var(--margin-w) - 24px)}}
.q .lead{color:var(--ink2);font-size:14px;line-height:20px;margin-bottom:6px}
.q .text{font-size:18px;line-height:32px;white-space:pre-wrap}
@media (min-width:768px){.q .text{font-size:20px}}
/* question picture or audio: student sheet, result, review, preview */
.media{margin:8px 0 10px;min-width:0;max-width:100%}
.media img{max-width:100%;max-height:360px;width:auto;height:auto;object-fit:contain;border-radius:8px;border:1px solid var(--rule);display:block}
.media audio{width:100%;max-width:420px;display:block}
.opts{display:grid;gap:8px;margin-top:10px}
.opt{display:flex;align-items:center;gap:12px;min-height:52px;padding:0 14px;border:1.5px solid var(--rule);border-radius:10px;background:var(--sheet);cursor:pointer;font-size:17px;transition:border-color .12s ease-out}
.opt:hover{border-color:var(--pen)}
.opt input{width:20px;height:20px;min-height:0;margin:0;accent-color:var(--pen)}
.opt:has(input:checked){border:2px solid var(--pen);background:var(--pen-soft);font-weight:700}
.opts.two{grid-template-columns:1fr 1fr}
.opts.two .opt{justify-content:center}
.opts.two .opt input{position:absolute;opacity:0;width:0;height:0}
.opts.two .opt{position:relative}
.gap-line{font-size:18px;line-height:2.2}
/* input.gap-in outranks the generic input[type=text]{width:100%} */
input.gap-in{display:inline-block;width:7.5em;min-width:120px;max-width:100%;field-sizing:content;min-height:0;border:0 !important;border-bottom:2px solid var(--pen) !important;border-radius:0 !important;padding:2px 8px !important;background:var(--pen-soft) !important;color:var(--pen);font-weight:600;box-shadow:none !important;outline-offset:0}
.gap-in:placeholder-shown,.gap-in.empty{border-bottom-style:dashed !important;border-bottom-color:var(--ink3) !important;background:transparent !important}
.chips{display:flex;flex-wrap:wrap;gap:8px;min-height:52px;padding:4px 0}
.chips.answer{border-bottom:2px solid var(--pen);margin-bottom:10px}
.chip-w{min-height:44px;padding:0 14px;border-radius:6px;border:1.5px solid var(--rule);border-bottom-width:3px;background:var(--sheet);color:var(--ink);font-weight:600;cursor:pointer;transition:transform .12s ease-out}
.chip-w:hover{transform:translateY(-2px)}
.chips.answer .chip-w{background:var(--pen-soft);border-color:var(--pen);color:var(--pen)}
.chips.answer:empty::after{content:"…";color:var(--ink3);padding:0 14px;line-height:44px;border:1.5px dashed var(--rule);border-radius:6px}
.pairs{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.pair-b{position:relative;min-height:52px;padding:0 12px 0 44px;border:1.5px solid var(--rule);border-radius:10px;background:var(--sheet);text-align:left;font-weight:600;cursor:pointer;display:flex;align-items:center}
.pair-b .n{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:24px;height:24px;border-radius:50%;background:var(--pen);color:var(--on-pen);font-size:13px;display:none;align-items:center;justify-content:center}
.pair-b.paired{background:var(--pen-soft);border-color:var(--pen)} .pair-b.paired .n{display:inline-flex}
.pair-b.active{background:var(--marker);color:#1B2A5E;border:2px solid var(--ink)}
.pairs-hint{color:var(--ink2);font-size:14px;margin-top:8px;min-height:20px}
.ruled{min-height:128px;border:0;border-radius:0;padding:4px 0;background:linear-gradient(transparent 31px,var(--pen) 31px,var(--pen) 32px) 0 0/100% 32px;line-height:32px;font-size:18px;color:var(--pen);font-weight:600;resize:vertical}
.ruled:focus{outline:none;box-shadow:none;border:0}
.wc{color:var(--ink2);font-size:14px;text-align:right;margin-top:4px}
.soon{border:1.5px dashed var(--rule);border-radius:12px;padding:16px;color:var(--ink2)}

/* work page chrome */
.work-top{position:sticky;top:0;z-index:20;background:var(--paper);border-bottom:1px solid var(--rule);margin:-16px -16px 12px;padding:8px 16px 8px}
.work-top .row1{display:flex;align-items:center;gap:12px;min-height:40px}
.work-top .back{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;text-decoration:none;font-size:22px;color:var(--ink)}
.work-top .ttl{flex:1;min-width:0}
.work-top .ttl b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.work-top .ttl span{color:var(--ink2);font-size:14px}
.work-top .cnt{font-weight:700}
.segs{display:flex;gap:4px;margin-top:6px}
.segs i{flex:1;height:4px;border-radius:2px;background:var(--grid)}
.segs i.on{background:var(--pen)}
.save-line{display:flex;align-items:center;gap:8px;color:var(--ink2);min-height:32px;margin-bottom:8px}
.save-line.ok{color:var(--green)} .save-line.bad{color:var(--red)}
.work-bottom{position:sticky;bottom:0;z-index:20;background:var(--paper);border-top:1px solid var(--rule);margin:0 -16px;padding:10px 16px calc(10px + env(safe-area-inset-bottom,0))}
.work-bottom .unans{color:var(--ink2);font-size:14px;text-align:center;margin-top:6px;min-height:20px}
@media (min-width:768px){
  .work-top{margin:-32px -32px 16px;padding:12px 32px}
  .work-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:40px;align-items:start}
  .work-bottom{position:sticky;top:96px;bottom:auto;margin:0;padding:0;border:0;background:transparent}
  .navq{background:var(--sheet);border:1px solid var(--rule);border-radius:12px;padding:16px;margin-bottom:16px;box-shadow:var(--shadow)}
  .navq .grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:10px 0}
  .navq button{height:48px;border-radius:8px;border:1.5px solid var(--rule);background:var(--sheet);font-weight:700;color:var(--ink);cursor:pointer}
  .navq button.filled{background:var(--pen);border-color:var(--pen);color:var(--on-pen)}
  .navq button.started{border-style:dashed;border-color:var(--pen);color:var(--pen)}
  .navq button.current{background:var(--marker);color:#1B2A5E;border:2px solid var(--ink)}
}
@media (max-width:767px){.navq{display:none}.work-bottom .btn{width:100%}}

/* result */
.res-head{display:flex;gap:16px;align-items:center;margin-bottom:20px;flex-wrap:wrap}
.res-head .comment{flex:1}
.res-head .when{color:var(--ink2);font-size:14px}
.rq{position:relative;padding:12px 0 20px;border-top:1px dashed var(--grid)}
.rq:first-of-type{border-top:0}
.rq .num{position:absolute;left:calc(-1 * var(--margin-w) - 12px);width:var(--margin-w);text-align:center;font-weight:700;color:var(--ink2)}
.rq .num .mark{display:block;margin-top:6px}
@media (min-width:768px){.rq .num{left:calc(-1 * var(--margin-w) - 24px)}}
.rq .text{font-size:18px;line-height:32px;white-space:pre-wrap}
.given{color:var(--pen);font-weight:600}
.fixline{position:relative;display:inline-block;padding-top:20px}
.fixline s{text-decoration-color:var(--red);text-decoration-thickness:2px}
.fixline .fix{position:absolute;left:4px;top:-4px;font:700 24px/1 var(--hand);color:var(--red);white-space:nowrap;transform:rotate(-4deg)}
.fixblock{font:700 24px/28px var(--hand);color:var(--red);margin-top:2px}
/* a long correction (a whole sentence, a number with a tolerance) is written above the struck answer as its own line */
.fixline.long{display:flex;flex-direction:column-reverse;align-items:flex-start;padding-top:0;max-width:100%}
.fixline.long .fix{position:static;white-space:normal;transform:none;line-height:28px;overflow-wrap:anywhere}
.rq .comment{margin-top:6px}
.rq .pending{color:var(--ink2);font-size:14px;margin-top:4px}

/* auth / invite */
.invite{position:relative;background:var(--pen-soft);border-radius:16px;padding:20px 20px 20px 64px;margin-bottom:24px}
.invite::before{content:"";position:absolute;left:47px;top:0;bottom:0;width:2px;background:var(--margin)}
.invite .avatar{position:absolute;left:10px;top:18px}
.invite .hand{font:700 26px/28px var(--hand);color:var(--red);margin-bottom:6px}
.invite .meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.auth{max-width:440px}
.center{text-align:center}

/* voice recorder */
.rec{margin-top:8px}
.rec-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.rec audio{width:100%;max-width:420px;display:block;margin-top:4px}
.rec audio[hidden],.rec [hidden]{display:none !important}
.rec-mini .rec-row{margin:6px 0 4px}
.voice{margin-top:8px}
.voice audio{width:100%;max-width:420px;display:block;margin-top:4px}
.js-rec-stop{background:var(--red);border-color:var(--red)}

/* theme toggle */
.theme{display:inline-flex;gap:2px;padding:2px;border-radius:10px;background:var(--grid)}
.theme button{width:32px;height:28px;border:0;border-radius:8px;background:transparent;color:var(--ink2);cursor:pointer;font-size:14px;font-weight:700;line-height:1}
.theme button.on{background:var(--sheet);color:var(--pen);box-shadow:var(--shadow)}

.foot{padding:8px 16px calc(var(--tab-h) + 8px);text-align:center;font-size:13px}
.foot a{color:var(--ink3)}
/* narrow phones: the theme switch leaves the crowded header for the footer */
.foot-theme{display:none;justify-content:center;margin-bottom:10px}
@media (max-width:419px){.top nav + .who .theme{display:none}.foot-theme{display:flex}}
@media (min-width:768px){.foot{padding-bottom:16px}}

/* progress */
.level-now{font:700 40px/48px var(--ui);letter-spacing:-.02em;margin:4px 0 10px}
.scale{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.scale .cell{height:40px;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--rule);border-radius:8px;font-weight:700;color:var(--ink3);background:var(--sheet)}
.scale .cell.done{background:var(--pen);border-color:var(--pen);color:var(--on-pen)}
.scale .cell.current{background:linear-gradient(90deg,var(--pen) 50%,var(--pen-soft) 50%);border-color:var(--ink);color:var(--ink)}
.scale .cell.goal{box-shadow:0 0 0 3px var(--marker)}
.bars{padding-bottom:12px}
.barrow{display:flex;gap:10px;align-items:flex-end;height:160px;background:linear-gradient(var(--grid) 1px,transparent 1px) 0 0/100% 24px;padding-top:24px}
.bar{flex:1;position:relative;height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;text-decoration:none;color:var(--ink2)}
.bar .fill{display:block;width:70%;max-width:44px;background:var(--pen);border-radius:6px 6px 0 0;min-height:4px}
.bar .lbl{font-size:12px;margin-top:4px;white-space:nowrap}
.bar .lbl.hand{font:700 20px/1 var(--hand);color:var(--red)}
.rep{margin-bottom:12px} .rep-h{display:flex;justify-content:space-between;margin-bottom:4px}
.rep-bar{height:8px;border-radius:4px;background:var(--grid);overflow:hidden} .rep-bar span{display:block;height:100%;background:var(--red)}
.tags{display:flex;flex-wrap:wrap;gap:8px}
.tags .chip{height:auto;min-height:28px;padding:3px 10px;line-height:20px;white-space:normal;max-width:100%}

/* formulas (KaTeX) stay inside the sheet on phones */
.js-math .katex-display{overflow-x:auto;overflow-y:hidden;padding:2px 0}
.js-math .katex{font-size:1.08em}

/* numeric answers and solution photos (mathematics) */
.numrow{display:flex;align-items:center;gap:8px;margin:8px 0 4px}
.numrow .num-in{width:160px;max-width:100%;text-align:center}
.numrow .unit{color:var(--ink2);font-weight:600}
.photos{margin-top:10px}
.photo-list{display:flex;flex-wrap:wrap;gap:10px;margin:8px 0}
.photo{position:relative;margin:0}
.photo a{display:block;position:relative;line-height:0}
.photo img{display:block;height:120px;width:auto;max-width:100%;border-radius:8px;border:1px solid var(--rule);background:var(--sheet)}
.photo-list.big .photo img{height:auto;max-height:480px}
.photo canvas.marks{position:absolute;left:0;top:0;pointer-events:none;border-radius:8px}
.photo-rm{position:absolute;top:-8px;right:-8px;width:28px;height:28px;border-radius:50%;border:0;background:var(--ink);color:var(--sheet);cursor:pointer;font-size:13px;line-height:28px}
.photo-pen{display:block;margin-top:4px;border:0;background:none;color:var(--red);font:700 18px/22px var(--hand);cursor:pointer;padding:2px 0}
.photo-add{cursor:pointer;min-height:40px}
.mathprev{margin:6px 0 2px;padding:8px 10px;border-radius:6px;background:var(--pen-soft);color:var(--ink);font-size:16px;line-height:1.6;overflow-x:auto;white-space:pre-wrap}
/* full-screen viewer / red pen editor (js/markup.js) */
body.markup-open{overflow:hidden}
.markup{position:fixed;inset:0;z-index:1000;display:flex;flex-direction:column;background:rgba(14,20,48,.94)}
.markup-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:8px 12px;background:#0E1430;color:#fff}
.markup-bar button{min-height:40px;padding:0 12px;border-radius:8px;border:1px solid rgba(255,255,255,.25);background:transparent;color:#fff;font:600 15px/1 var(--ui, system-ui);cursor:pointer}
.markup-bar button.on{background:#C8202F;border-color:#C8202F}
.markup-bar button.btn{background:#2447B8;border-color:#2447B8}
.markup-bar .x{margin-left:auto;font-size:18px}
.markup-st{color:#fff;opacity:.8;font-size:14px}
.markup-stage{flex:1;display:flex;align-items:center;justify-content:center;overflow:auto;padding:12px}
.markup-pic{position:relative;line-height:0}
.markup-pic img{display:block;max-width:calc(100vw - 24px);max-height:calc(100vh - 90px);width:auto;height:auto;user-select:none;-webkit-user-select:none}
.markup-pic canvas{position:absolute;left:0;top:0}
.markup.edit .markup-pic canvas{cursor:crosshair}

/* trainers and cards */
.goalbar{height:8px;border-radius:4px;background:var(--grid);overflow:hidden;margin:8px 0 4px}
.goalbar i{display:block;height:100%;background:var(--pen);border-radius:4px;transition:width .3s}
.ok-text{color:var(--green)}
.trainer{max-width:560px;margin:0 auto}
.tstats{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 10px}
.tcard{background:var(--sheet);border-radius:14px;box-shadow:var(--shadow);padding:28px 20px;margin:12px 0;text-align:center}
.tprompt{font-size:30px;line-height:1.35;font-weight:600;color:var(--ink);margin-bottom:20px;overflow-wrap:anywhere}
.tprompt .katex{font-size:1.1em}
.tinrow{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.tin{width:200px;max-width:100%;font-size:24px;text-align:center;min-height:52px}
.tchoices{display:flex;gap:10px;justify-content:center}
.tchoices .btn{min-width:72px;font-size:24px}
.tfeedback{min-height:40px;margin-top:14px;font-size:20px}
.tfeedback.ok{color:var(--green);font-weight:700}
.tfeedback .fixline{font-size:24px}
.tsettings{margin-top:20px}
.tsettings summary{cursor:pointer;font-weight:600}
.tsettings select{width:auto}
.flash-card{background:var(--sheet);border-radius:14px;box-shadow:var(--shadow);padding:32px 20px;text-align:center;max-width:560px;margin:16px auto}
.flash-card .front{font-size:30px;font-weight:700;margin-bottom:18px;overflow-wrap:anywhere}
.flash-card .back{font-size:22px;color:var(--pen);margin-bottom:18px}
.flash-card .example{font-size:16px;color:var(--ink2);margin-top:8px;font-style:italic}
.flash-card .grades{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
@media (max-width:420px){.flash-card .grades{grid-template-columns:repeat(2,minmax(0,1fr))}}
.cards .js-done{max-width:560px;margin:16px auto}
.tstats .chip{gap:4px}
.trainer [hidden],.cards [hidden]{display:none !important}
/* live work during the call (js/live.js) */
.q .here{position:absolute;right:0;top:-6px;font:600 11px/1 var(--ui);color:var(--pen);background:var(--pen-soft);border-radius:9px;padding:4px 8px}
.q .hint{margin:0 0 6px;white-space:normal}
.q.remote{animation:q-remote 2.5s ease-out}
.q.look{animation:q-look 2.5s ease-out}
@keyframes q-remote{0%{background:var(--pen-soft)}100%{background:transparent}}
@keyframes q-look{0%,40%{background:var(--marker)}100%{background:transparent}}
.live-tools{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 6px}
.live-tools button{font:600 13px/1 var(--ui);border:1px solid var(--rule);background:var(--paper);color:var(--ink2);border-radius:14px;padding:6px 10px;cursor:pointer}
.live-tools button:hover{color:var(--ink);border-color:var(--ink3)}
.live-tools button.sent{background:var(--marker);color:var(--ink)}
.hint-edit{margin:0 0 8px}
.hint-edit textarea{width:100%;box-sizing:border-box;font:500 20px/24px var(--hand);color:var(--red);border:1px solid var(--rule);border-radius:8px;padding:6px 8px;background:var(--paper)}
.hint-edit .row{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.peer{font-size:13px;color:var(--ink3)}
.peer.on{color:var(--pen);font-weight:600}
.peer.on::before{content:"● "}
/* balance (student) */
.balance-line{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:16px 0 0;padding:12px 16px;border-radius:12px;background:var(--sheet);border:1px solid var(--rule);text-decoration:none;color:var(--ink)}
.balance-line b{font-size:18px}
.balance-line .small{color:var(--ink2);margin-left:auto}
.balance-line.low{border-color:var(--red)}
.balance-line.low b{color:var(--red)}
.balance-big{padding:20px 24px;margin-bottom:20px}
.balance-big b{display:block;font-size:36px;line-height:1.2}
.balance-big.debt b{color:var(--red)}
.ledger-rows .plus{color:var(--green)}
.ledger-rows .minus{color:var(--ink)}
/* booking (student) */
.slot-days{display:grid;gap:14px;margin:16px 0 90px}
.slot-day .dh{margin-bottom:6px}
.slot-times{display:flex;flex-wrap:wrap;gap:8px}
.slot input{position:absolute;opacity:0;pointer-events:none}
.slot span{display:inline-block;min-width:64px;text-align:center;padding:10px 12px;border:1.5px solid var(--rule);border-radius:10px;background:var(--sheet);font-weight:600;cursor:pointer}
.slot input:checked + span{border-color:var(--pen);background:var(--pen);color:var(--on-pen)}
.slot input:focus-visible + span{outline:2px solid var(--pen);outline-offset:2px}
.book-bar{position:sticky;bottom:0;display:flex;gap:8px;flex-wrap:wrap;padding:12px 0;background:var(--paper)}
.book-bar input{flex:1 1 220px;min-width:0}
.lesson-acts{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px}
.lesson-acts form{display:inline}
.book-req{border-left:4px solid var(--marker)}
/* exam mode (student) */
.exam-timer{position:sticky;top:0;z-index:5;display:flex;gap:12px;align-items:baseline;flex-wrap:wrap;padding:10px 16px;margin:0 0 12px;border-radius:12px;background:var(--sheet);border:1.5px solid var(--rule);font-variant-numeric:tabular-nums}
.exam-timer .js-exam-left{font-weight:700;font-size:18px;margin-left:auto}
.exam-timer.soon{border-color:var(--marker)}
.exam-timer.over{border-color:var(--red);background:var(--red-soft)}
.exam-timer.over .js-exam-left,.exam-timer.over .js-exam-msg{color:var(--red);font-weight:600}
.pts-tag{display:block;font:600 11px/1.2 var(--ui);color:var(--ink3);margin-top:4px}
.exam-result{display:flex;gap:18px;align-items:center;flex-wrap:wrap;margin-bottom:16px}
.exam-result .big{font:700 36px/1 var(--ui);color:var(--ink)}
.exam-chart{margin-bottom:16px}
.exam-chart svg{width:100%;height:auto;display:block;margin:6px 0}
.exam-chart polyline{fill:none;stroke:var(--pen);stroke-width:2}
.exam-chart circle{fill:var(--pen)}
/* achievements */
.badges{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px;margin:8px 0 16px}
.badge-card{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;padding:12px 8px;border-radius:12px;border:1px dashed var(--rule);color:var(--ink3);font-size:13px}
.badge-card .em{font-size:28px;filter:grayscale(1);opacity:.45}
.badge-card b{font-size:13px;line-height:1.2}
.badge-card .s{font-size:12px}
.badge-card.on{border-style:solid;border-color:var(--pen);background:var(--sheet);color:var(--ink)}
.badge-card.on .em{filter:none;opacity:1}
.certs .em{font-size:22px;margin-right:10px}
.new-badges{display:flex;gap:12px;align-items:center;flex-wrap:wrap;padding:14px 16px;margin:16px 0 0;border-radius:12px;background:var(--marker);color:#1B2A5E}
.new-badges .em{font-size:26px}
