/* Crack the Code: the reading course */
.learnpage main{min-height:70vh;padding-bottom:72px}
.lhero{padding-block:clamp(40px,7vw,88px) clamp(20px,3vw,32px)}
.lhero .kicker a{color:inherit;text-decoration:none}
.lhero .kicker a:hover{color:var(--accent-text)}
.lh1{font-family:var(--display);font-weight:400;font-size:clamp(3rem,8vw,6.4rem);line-height:.92;margin:14px 0 18px;color:var(--plum)}
.lh1 em{font-style:italic;color:var(--accent)}
.uhero .lh1{font-size:clamp(2.6rem,6vw,4.6rem)}
.uhero .kicker{color:var(--uc)}
.lh2{font-family:var(--display);font-weight:400;font-size:clamp(1.9rem,3.4vw,2.6rem);line-height:1.02}
.lh3{font-size:1.15rem;font-weight:600;margin:0 0 10px}
.lbtns{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}
.btn.small{font-size:.86rem;padding:8px 16px}
.btn svg{width:18px;height:18px}
.small{font-size:.86rem}
.lnote{background:var(--band);border-radius:10px;padding:12px 16px;font-size:.92rem}

/* home */
.lband{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:24px 48px;padding-block:36px;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);margin-block:24px 36px}
.lband p{margin:0 0 12px}
.lplan{margin-bottom:24px}
.lplan p{margin:6px 0 0;font-size:1.05rem}
.lunits{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:16px}
.lunit{position:relative;display:flex;flex-direction:column;gap:4px;padding:20px 20px 18px;border-radius:var(--radius);background:var(--paper2);text-decoration:none;color:var(--ink);border-top:4px solid var(--uc);transition:transform .2s var(--ease),box-shadow .2s}
.lunit:hover{transform:translateY(-2px);box-shadow:0 10px 30px -18px rgba(42,26,51,.5)}
.lunit.rec{box-shadow:inset 0 0 0 2px var(--uc)}
.lunit .ln{font-family:var(--display);font-size:2.6rem;line-height:1;color:var(--uc)}
.lunit .ll{font-family:var(--mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink2)}
.lunit b{font-size:1.2rem;font-weight:600;color:var(--plum);line-height:1.2;margin-top:2px}
.lunit .ls{color:var(--ink2);font-size:.92rem;flex:1}
.lbar{display:block;height:6px;border-radius:99px;background:var(--rule);overflow:hidden;margin-top:10px}
.lbar i{display:block;height:100%;background:var(--uc,var(--plum));border-radius:99px;transition:width .3s}
.lmeta{font-size:.8rem;color:var(--ink2);margin-top:6px}
.lrow{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin-top:36px}
.lcard{background:var(--paper2);border-radius:var(--radius);padding:24px}
.lcard h3{font-size:1.25rem;margin:6px 0 8px}
.lcard p{margin:0}
.lname{display:grid;gap:6px;font-size:.9rem;font-weight:500;color:var(--plum);margin-top:16px}
.lname input,.ldict input{font:inherit;font-size:1rem;color:var(--ink);background:var(--bg);border:1.5px solid var(--rule);border-radius:10px;padding:10px 14px}
.lname input:focus,.ldict input:focus{border-color:var(--plum);outline:none}
.lteach{margin-top:20px}
.lteach p{margin:0}

/* unit steps */
.lsteps{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding-block:6px 14px;position:sticky;top:64px;z-index:5;background:var(--bg);scroll-margin-top:64px}
.lsteps::-webkit-scrollbar{display:none}
.lsteps a{display:flex;align-items:center;gap:8px;white-space:nowrap;text-decoration:none;color:var(--plum);font-size:.9rem;font-weight:500;padding:7px 14px 7px 8px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--rule)}
.lsteps a span{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--chip);font-size:.78rem;font-variant-numeric:tabular-nums}
.lsteps a.done span{background:var(--uc);color:#fff}
.lsteps a.done span{font-size:0}
.lsteps a.done span::before{content:'✓';font-size:.8rem}
.lsteps a[aria-current="step"]{background:var(--plum);color:var(--on-plum);box-shadow:none}
.lsteps a[aria-current="step"] span{background:rgba(255,255,255,.18);color:inherit}
.lpanel{padding-top:20px;outline:none}
.phead{margin-bottom:22px}
.phead .kicker{color:var(--uc,var(--ink2))}
.phead .lh2{margin:6px 0 6px}
.phead p.muted{margin:0}
.lask{font-size:1.15rem;color:var(--plum);font-weight:500;margin:0 0 18px}
.lnext{margin-top:36px;padding-top:24px;border-top:1px solid var(--rule)}
.lpager{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-top:48px;font-size:.92rem}
.lpager a{text-decoration:none;color:var(--plum);font-weight:500}
.lpager a:hover{color:var(--accent-text)}

/* the story */
.lwhy{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:32px;align-items:start}
.lstory p{font-family:var(--old);font-size:1.08rem;line-height:1.7;margin:0 0 16px;max-width:62ch}
.lrules{background:var(--paper2);border-radius:var(--radius);padding:20px 22px;border-left:4px solid var(--uc)}
.lrules ul{margin:10px 0 0;padding-left:1.1em;display:grid;gap:10px;font-size:.98rem}
.lpats{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin-top:28px}
.lpat{display:grid;gap:2px;padding:14px 16px;border-radius:12px;box-shadow:inset 0 0 0 1px var(--rule)}
.lpat b{font-family:var(--old);font-size:1.5rem;font-weight:500;color:var(--uc)}
.lpat i{font-style:normal;font-family:var(--mono);font-size:.8rem;color:var(--plum)}
.lpat span{font-size:.88rem;color:var(--ink2)}
.lstories{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.lsto{background:var(--paper2);border-radius:12px;padding:16px 18px}
.lsto p{margin:8px 0 0;font-size:.95rem;color:var(--ink)}
.lsw{display:inline-flex;align-items:center;gap:8px;border:0;background:none;padding:0;cursor:pointer;color:var(--uc)}
.lsw svg{width:18px;height:18px}
.lsw b{font-family:var(--old);font-size:1.5rem;font-weight:500;color:var(--plum)}
.lh3 + .lstories,.lpats + .lh3{margin-top:28px}
.lextra{margin-top:24px;font-size:.95rem;color:var(--ink2);max-width:70ch}
.lextra b{color:var(--plum)}

/* runner */
.lrun{max-width:720px}
.lprog{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;font-size:.82rem;color:var(--ink2);font-variant-numeric:tabular-nums;margin-bottom:22px}
.lprog .lbar{margin:0}
.litem{min-height:220px}
.lplay{display:inline-flex;align-items:center;gap:12px;border:0;cursor:pointer;background:var(--uc,var(--plum));color:#fff;font:inherit;font-weight:500;font-size:1rem;border-radius:999px;padding:12px 22px 12px 16px;margin-bottom:20px}
.lplay svg{width:24px;height:24px}
.lplay:active{transform:scale(.97)}
.lspk{display:grid;place-items:center;flex:none;width:44px;height:44px;border-radius:50%;border:0;background:var(--chip);color:var(--plum);cursor:pointer}
.lspk svg{width:20px;height:20px}
.lspk:hover{background:var(--plum);color:var(--on-plum)}
.lopts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.lopts.four{grid-template-columns:repeat(2,minmax(0,1fr))}
.lopts.cats{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.lprow{display:flex;gap:8px;align-items:center}
.lprow .lopt{flex:1}
.lopt{font:inherit;font-size:1rem;text-align:left;color:var(--plum);background:var(--bg);border:0;box-shadow:inset 0 0 0 1.5px var(--rule);border-radius:12px;padding:14px 16px;cursor:pointer;min-height:52px;transition:box-shadow .15s,background .15s}
.lopt:hover{box-shadow:inset 0 0 0 1.5px var(--plum)}
.lopt.yes{background:#E3F4E8;box-shadow:inset 0 0 0 2px #2F8F4E;color:#1D5C32}
.lopt.no{background:#FBE3E0;box-shadow:inset 0 0 0 2px #C2412A;color:#8A2716}
.lopt.picked{box-shadow:inset 0 0 0 2px var(--plum);background:var(--chip)}
[data-mode="dark"] .lopt.yes{background:#1F3B29;color:#BFF0CD}
[data-mode="dark"] .lopt.no{background:#43221D;color:#FFC9BE}
.lw2{font-family:var(--old);font-size:1.45rem}
.lq{font-size:1.2rem;font-weight:500;color:var(--plum);margin:0 0 18px;max-width:60ch}
.lfb{margin-top:16px;padding:14px 18px;border-radius:12px;background:var(--paper2);border-left:4px solid var(--ink3)}
.lfb.ok{border-left-color:#2F8F4E}
.lfb.bad{border-left-color:#C2412A}
.lfb p{margin:0 0 10px}
p.lfb{margin-top:12px}
p.lfb.bad{padding:10px 16px}
.lfb .gtiles{margin:4px 0 12px}
.lres{text-align:left;max-width:640px}
.lscore{font-family:var(--display);font-size:4.4rem;line-height:1;color:var(--plum);margin:0 0 6px}
.lscore span{font-size:2rem;color:var(--ink2)}
.lcardw{display:inline-flex;align-items:center;gap:16px;margin-bottom:20px;padding:18px 22px;border-radius:var(--radius);background:var(--paper2)}
.lcardw span{font-family:var(--old);font-size:2.2rem;color:var(--plum)}
.lgroups{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-top:18px}
.lgroups > div{background:var(--paper2);border-radius:12px;padding:14px 16px}
.lgroups p{margin:4px 0 0}

/* map it */
.ltog{display:inline-flex;align-items:center;gap:10px;font-size:.92rem;color:var(--plum);margin-bottom:18px;cursor:pointer}
.ltog input{width:18px;height:18px;accent-color:var(--plum)}
.lmaps{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px;margin-bottom:20px}
.lmap{display:grid;gap:10px;justify-items:start;text-align:left;font:inherit;border:0;background:var(--paper2);border-radius:12px;padding:14px 16px;cursor:pointer;color:var(--ink)}
.lmap:hover{box-shadow:inset 0 0 0 1.5px var(--plum)}
.lmw{font-family:var(--old);font-size:1.6rem;color:var(--plum);line-height:1}
.gtiles{display:flex;flex-wrap:wrap;gap:4px}
.gtile{display:grid;justify-items:center;min-width:34px;padding:5px 6px 4px;border-radius:8px;background:var(--bg);box-shadow:inset 0 0 0 1px var(--rule)}
.gtile b{font-family:var(--old);font-weight:500;font-size:1.15rem;color:var(--plum);line-height:1.1}
.gtile i{font-style:normal;font-family:var(--mono);font-size:.68rem;color:var(--ink2)}
.gtile.f{background:var(--uc,var(--plum));box-shadow:none}
.gtile.f b,.gtile.f i{color:#fff}
.gtile.quiet b{opacity:.7}
.hidesounds .lmap:not(.peek) .gtile i{visibility:hidden}
.hidesounds .lmap:not(.peek) .gtile.f{background:var(--bg);box-shadow:inset 0 0 0 1.5px var(--uc)}
.hidesounds .lmap:not(.peek) .gtile.f b{color:var(--plum)}

/* read it */
.lread{display:grid;gap:22px}
.lsec{background:var(--paper2);border-radius:var(--radius);padding:22px}
.lsech{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px}
.lsech .lh3{margin:0}
.ltimer{display:flex;align-items:center;gap:12px;font-size:.88rem;color:var(--ink2);font-variant-numeric:tabular-nums}
.lwords{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px 16px}
.lwords .lw{font-family:var(--old);font-size:1.35rem;color:var(--plum)}
.lw{cursor:pointer;border-radius:4px;transition:background .2s}
.lw:hover{background:var(--hl)}
.lw.said{background:var(--hl)}
.lsents{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.lsents li{display:flex;gap:12px;align-items:center}
.lsents p{margin:0;font-family:var(--old);font-size:1.2rem;line-height:1.5}
.lpbtns{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px}
.lpbtns .btn svg{width:16px;height:16px}
.lptext{font-family:var(--old);font-size:clamp(1.12rem,1.6vw,1.28rem);line-height:1.85;max-width:64ch;color:var(--ink)}
.lptext .psn{border-radius:4px;transition:background .25s}
.lptext .psn.on{background:var(--hl)}
.lptext.timing{box-shadow:-4px 0 0 var(--uc);padding-left:16px}
.lpass p.small{margin:16px 0 0}

/* write it */
.ldict{display:flex;gap:10px;flex-wrap:wrap}
.ldict input{font-family:var(--old);font-size:1.5rem;padding:10px 16px;width:min(320px,100%)}
.ldict input.wide{width:min(560px,100%);font-size:1.2rem}
.ldict input:disabled{opacity:.8}

/* placement */
.lplres{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px;margin:22px 0}
.lplres a{display:grid;gap:2px;padding:14px 16px;border-radius:12px;background:var(--paper2);text-decoration:none;color:var(--plum);border-left:4px solid var(--rule)}
.lplres a.weak{border-left-color:var(--uc)}
.lplres a span{font-size:.85rem;color:var(--ink2)}

/* teachers */
.tsec{padding-block:28px;border-top:1px solid var(--rule)}
.tsec .lh2{margin-bottom:14px}
.tsec .muted p{max-width:72ch}
.tsech{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}
.tsech .lh2{margin:0}
.troutine{max-width:72ch;padding-left:1.3em;display:grid;gap:10px;margin:0 0 16px}
.troutine b{color:var(--plum)}
.tunits{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.tunit{background:var(--paper2);border-radius:var(--radius);padding:20px;border-top:4px solid var(--uc)}
.tunit .kicker{color:var(--uc)}
.tunit .lh3{margin:4px 0 2px}
.tunit p{margin:8px 0 0;font-size:.92rem}
.tsrc{max-width:80ch;padding-left:1.1em;display:grid;gap:8px;font-size:.92rem;color:var(--ink2)}

@media (max-width:860px){
  .lband,.lwhy{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:520px){
  .lopts,.lopts.four{grid-template-columns:minmax(0,1fr)}
  .lsec{padding:18px 16px}
  .lwords{grid-template-columns:repeat(2,minmax(0,1fr))}
  .lcardw span{font-size:1.8rem}
  .lpager{flex-direction:column}
}
@media print{
  .site-head,.foot,.lsteps,.lpager,.btn{display:none !important}
  body.printlists .tsec:not(:has(.tunits)),body.printlists .lhero{display:none}
  .tunit{break-inside:avoid;background:none;border:1px solid #ccc}
}
.lmap{align-content:start}
.gtiles{align-items:flex-start}

/* syllable divider in tiles */
.gsep{width:2px;align-self:stretch;background:var(--uc,var(--plum));border-radius:2px;margin:0 4px;opacity:.6}

/* extra activities */
.lextra2{margin:8px 0 20px}
section.lextra2:empty{display:none}
.lsplit{min-height:170px}
.lsw2{display:flex;flex-wrap:wrap;align-items:stretch;margin:6px 0 16px;font-family:var(--old);font-size:clamp(2rem,6vw,2.8rem);color:var(--plum);line-height:1.2}
.lsw2 span{padding:4px 1px}
.lsw2 span.v{color:var(--uc)}
.lsw2 .gap{width:18px;border:0;background:transparent;cursor:pointer;position:relative;padding:0;margin:0 -3px}
.lsw2 .gap::after{content:'';position:absolute;left:50%;top:12%;bottom:12%;width:2px;margin-left:-1px;border-radius:2px;background:var(--rule);transition:background .15s}
.lsw2 .gap:hover::after{background:var(--ink3)}
.lsw2 .gap[aria-pressed="true"]::after{background:var(--plum);width:4px;margin-left:-2px}
.lsw2 .gap.want::after{background:#2F8F4E;width:4px;margin-left:-2px}
.lsw2 .gap[aria-pressed="true"]:not(.want)::after{background:#C2412A}
.lsplitdone{margin:0 0 12px}
.lmx{margin-bottom:16px}
.mgrid{display:flex;flex-wrap:wrap;gap:12px 24px;margin:14px 0}
.mcol{display:flex;flex-direction:column;gap:6px;min-width:110px}
.mcol .kicker{margin:0 0 2px}
.mchip{font:inherit;font-family:var(--old);font-size:1.1rem;text-align:left;color:var(--plum);background:var(--bg);border:0;box-shadow:inset 0 0 0 1.5px var(--rule);border-radius:10px;padding:6px 12px;cursor:pointer}
.mchip:hover{box-shadow:inset 0 0 0 1.5px var(--plum)}
.mchip[aria-pressed="true"]{background:var(--uc,var(--plum));color:#fff;box-shadow:none}
.msum{min-height:72px;padding:12px 16px;border-radius:12px;background:var(--bg)}
.msum p{margin:0}
.mline{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-family:var(--old);font-size:1.3rem;color:var(--ink2)}
.mline i{font-style:normal;color:var(--ink3)}
.mline b{font-weight:500;font-size:1.6rem}
.mline b.ok{color:#2F8F4E}
.mline b.no{color:var(--ink2);text-decoration:line-through;text-decoration-thickness:1px}
[data-mode="dark"] .mline b.ok{color:#7FD99B}
.mrule{display:inline-block;margin-left:6px;font-family:var(--mono);font-size:.72rem;background:var(--band);color:var(--plum);padding:2px 8px;border-radius:99px}
.lspk.sm{width:32px;height:32px}
.lspk.sm svg{width:16px;height:16px}
.mfound{margin:12px 0 0;font-size:.92rem;color:var(--ink2)}

/* great works bridge */
.lbridge{border-left:4px solid var(--uc)}
.lbridge .kicker{color:var(--uc)}
.lbtext{margin:14px 0 16px;font-family:var(--old);font-size:clamp(1.08rem,1.5vw,1.2rem);line-height:1.8;max-width:64ch;color:var(--ink)}
.lbtext mark{background:transparent;color:inherit;transition:background .2s}
.lbtext.show mark{background:var(--hl);border-radius:3px}

/* speed chart */
.lspeed{position:relative}
.lchart{width:100%;height:auto;display:block;margin-top:8px;overflow:visible}
.lchart .cg{stroke:var(--rule);stroke-width:1}
.lchart .ct{font-family:var(--sans);font-size:12px;fill:var(--ink2)}
.lchart .cl{fill:none;stroke:var(--plum);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.lchart .cd{fill:var(--plum);stroke:var(--paper2);stroke-width:2}
.lchart .ch{fill:transparent;cursor:pointer}
.ctip{position:absolute;transform:translate(-50%,-100%);background:var(--ink);color:var(--bg);font-size:.78rem;padding:5px 9px;border-radius:6px;white-space:nowrap;pointer-events:none;z-index:3}
.ltable{margin-top:10px;font-size:.86rem}
.ltable summary{cursor:pointer;color:var(--ink2)}
.ltable table{border-collapse:collapse;margin-top:8px;width:100%}
.ltable th,.ltable td{text-align:left;padding:4px 8px;border-bottom:1px solid var(--rule)}

/* class view */
.ldrop{display:grid;justify-items:center;gap:4px;text-align:center;padding:36px 20px;border:2px dashed var(--rule);border-radius:var(--radius);cursor:pointer;margin-bottom:24px;color:var(--plum)}
.ldrop.over,.ldrop:hover{border-color:var(--plum);background:var(--paper2)}
.ldrop input{position:absolute;width:1px;height:1px;opacity:0}
.ldrop:focus-within{outline:2px solid var(--accent-text);outline-offset:3px}
.cvwrap{overflow-x:auto;border-radius:var(--radius);box-shadow:inset 0 0 0 1px var(--rule)}
.cvt{border-collapse:collapse;width:100%;font-size:.9rem;font-variant-numeric:tabular-nums}
.cvt th{font-family:var(--mono);font-size:.7rem;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--ink2);text-align:left;padding:10px;border-bottom:1px solid var(--rule);white-space:nowrap}
.cvt th[style]{color:var(--uc);text-align:center}
.cvt td{padding:8px 10px;border-bottom:1px solid var(--rule);white-space:nowrap}
.cvt td.cdone,.cvt td.cpart{text-align:center}
.cvt td.cdone{background:#E3F4E8;color:#1D5C32;font-weight:600}
.cvt td.cpart{color:var(--ink2)}
[data-mode="dark"] .cvt td.cdone{background:#1F3B29;color:#BFF0CD}
.cvname{font:inherit;font-weight:600;color:var(--plum);background:none;border:0;padding:0;cursor:pointer;text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--rule)}
.cvdet td{white-space:normal;background:var(--paper2)}
.cvd{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px;padding:8px 4px}
.cvd ul{margin:6px 0 0;padding-left:1.1em;display:grid;gap:4px;font-size:.88rem}
@media (max-width:760px){.cvd{grid-template-columns:minmax(0,1fr)}}
.lspeed{grid-column:1 / -1}
.lspeed .lchart,.lspeed .ltable{max-width:680px}
.mgrid.rows{flex-direction:column}
.mgrid.rows .mcol{flex-direction:row;flex-wrap:wrap;align-items:center}
.mgrid.rows .mcol .kicker{width:100%}
