/* Study Hub landing — components on top of css/system.css */

/* ── buttons. explicit reset: a bare <button> otherwise renders on the OS
      buttonface grey and the label disappears against it. ── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.6em;
 padding:.95em 1.5em;border:1px solid var(--line-2);border-radius:2px;
 background:transparent;color:inherit;font-family:var(--mono);font-size:.66rem;
 font-weight:500;letter-spacing:.15em;text-transform:uppercase;line-height:1;
 -webkit-appearance:none;appearance:none;cursor:pointer;text-align:center;
 transition:border-color .35s var(--ease),color .35s var(--ease),background .35s var(--ease)}
.btn:hover{border-color:var(--acc);color:var(--acc)}
.btn-acc{background:var(--acc);border-color:var(--acc);color:#0D0D0C}
.btn-acc:hover{background:#ff6524;border-color:#ff6524;color:#0D0D0C}
.btn[disabled]{opacity:.4;cursor:not-allowed}

.hdr-act{display:flex;align-items:center;gap:.9rem}
.lnk{color:var(--dim);transition:color .3s var(--ease)}
.lnk:hover{color:var(--ink)}
.w-sub{color:var(--dim)}
@media(max-width:700px){.lnk{display:none}.hdr-act .btn{padding:.8em 1em}}

.cta-row{display:flex;flex-wrap:wrap;gap:.8rem;margin-top:clamp(1.6rem,2.6vw,2.4rem)}
.lede{max-width:56ch;color:#C8C4BB;font-size:clamp(1rem,1.1vw,1.12rem);line-height:1.65;
 margin-top:-.8rem;margin-bottom:clamp(26px,3vw,42px)}

/* ── dashboard tour ── */
.shots{display:grid;gap:clamp(46px,6vw,104px)}
.shot{display:grid;gap:clamp(20px,2.6vw,44px);align-items:center}
@media(min-width:960px){
 .shot{grid-template-columns:minmax(0,1.55fr) minmax(0,1fr)}
 .shot.flip{grid-template-columns:minmax(0,1fr) minmax(0,1.55fr)}
 .shot.flip .shot-fig{order:2}
}
.shot-fig{margin:0;border:1px solid var(--line-2);background:#080807;overflow:hidden;
 box-shadow:0 60px 110px -70px #000}
.shot-fig img{width:100%;height:auto;display:block}
.shot-h{font-size:clamp(1.5rem,2.6vw,2.3rem);font-weight:800;line-height:1.02;
 letter-spacing:-.025em;text-transform:uppercase;margin-top:.7rem}
.shot-p{margin-top:.9rem;color:var(--dim);font-size:1rem;line-height:1.66;max-width:42ch}

/* ── courses ── */
.sec-courses{border-block:1px solid var(--line);
 background:linear-gradient(180deg,rgba(236,233,226,.018),transparent 55%)}
.crs-grid{display:grid;gap:1px;background:var(--line);border:1px solid var(--line)}
@media(min-width:720px){.crs-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1120px){.crs-grid{grid-template-columns:repeat(3,1fr)}}
.crs{display:block;cursor:pointer}
.crs input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.crs-box{display:block;position:relative;background:var(--ground);height:100%;
 padding:clamp(18px,2vw,26px);transition:background .4s var(--ease)}
.crs:hover .crs-box{background:rgba(236,233,226,.035)}
.crs input:focus-visible + .crs-box{outline:2px solid var(--acc);outline-offset:-2px}
.crs-code{display:block;color:var(--acc)}
.crs-t{display:block;font-size:clamp(1.05rem,1.5vw,1.3rem);font-weight:700;
 letter-spacing:-.015em;text-transform:uppercase;margin-top:.85rem}
.crs-d{display:block;color:var(--dim);font-size:.9rem;line-height:1.58;margin-top:.5rem;max-width:34ch}
.crs-tick{position:absolute;top:clamp(18px,2vw,26px);right:clamp(18px,2vw,26px);
 width:15px;height:15px;border:1px solid var(--line-2);transition:all .3s var(--ease)}
.crs input:checked + .crs-box{background:rgba(255,77,0,.07)}
.crs input:checked + .crs-box .crs-tick{background:var(--acc);border-color:var(--acc)}
.crs input:checked + .crs-box .crs-tick::after{content:"";position:absolute;left:4px;top:1px;
 width:5px;height:9px;border:solid #0D0D0C;border-width:0 1.6px 1.6px 0;transform:rotate(45deg)}
.crs-fill{background:var(--ground)}
.crs-act{margin-top:clamp(24px,3vw,40px)}

/* ── how it works ──
   Jumping to #how must land with all five steps on screen, so the section is
   sized to the viewport and the rows share whatever is left after the header. */
.sec-how{display:flex;flex-direction:column;justify-content:center;
 min-height:100vh;min-height:100svh;
 padding-block:clamp(40px,5vw,72px)}
.sec-how .slabel{margin-bottom:clamp(16px,2vw,28px)}
.hrows{border-top:1px solid var(--line)}
.hrow{display:grid;gap:.4rem 1.5rem;padding:clamp(12px,1.5vw,22px) 0;
 border-bottom:1px solid var(--line);align-items:baseline}
@media(max-height:780px){
 .hrow{padding-block:clamp(8px,1.1vw,14px)}
 .sec-how .h-note{line-height:1.6}
}
@media(min-width:900px){.hrow{grid-template-columns:5.2rem minmax(0,1fr) minmax(0,1.5fr)}}
.h-name{font-size:clamp(1.1rem,1.7vw,1.45rem);font-weight:700;letter-spacing:-.015em;text-transform:uppercase}
.h-note{color:var(--dim);line-height:1.75;letter-spacing:.09em;font-size:.62rem;max-width:56ch}

/* ══════════════ signup modal ══════════════
   The card is a flex column: rail on top, ONE scrolling body, action row
   pinned outside it. Continue is reachable at any viewport height. */
.modal{position:fixed;inset:0;z-index:200;display:grid;place-items:center;padding:14px}
.modal[hidden]{display:none}
.modal-scrim{position:absolute;inset:0;background:rgba(6,6,6,.8);
 backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.modal-card{position:relative;width:min(600px,100%);
 max-height:92vh;max-height:92dvh;
 display:flex;flex-direction:column;overflow:hidden;
 background:var(--ground);border:1px solid var(--line-2);
 box-shadow:0 60px 120px -50px #000}
.su-top{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;
 gap:1rem;padding:1rem clamp(18px,2.4vw,30px);border-bottom:1px solid var(--line)}
.su-rail{display:flex;flex-wrap:wrap;gap:.55rem .95rem;font-size:.55rem;color:var(--dim)}
.su-rail span{opacity:.35;transition:opacity .3s,color .3s}
.su-rail span.on{opacity:1;color:var(--acc)}
.su-rail span.done{opacity:.72;color:var(--ink)}
.modal-x{flex:0 0 auto;background:none;border:0;color:var(--dim);font-size:1.4rem;
 line-height:1;cursor:pointer;padding:.1rem .3rem;-webkit-appearance:none;appearance:none}
.modal-x:hover{color:var(--acc)}

.su-step{display:none;min-height:0}
.su-step.on{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}
.su-body{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
 -webkit-overflow-scrolling:touch;padding:clamp(20px,2.6vw,30px) clamp(18px,2.4vw,30px)}
.su-row{flex:0 0 auto;display:flex;justify-content:space-between;align-items:center;gap:.8rem;
 padding:clamp(14px,1.8vw,20px) clamp(18px,2.4vw,30px);
 border-top:1px solid var(--line);background:var(--ground)}
.su-row .btn{flex:0 1 auto}

.su-h{font-size:clamp(1.4rem,2.6vw,2rem);font-weight:800;line-height:1.04;
 letter-spacing:-.028em;text-transform:uppercase}
.su-p{margin-top:.7rem;color:var(--dim);font-size:.95rem;line-height:1.6}
.su-fine{font-size:.82rem;opacity:.75}
.fld{margin-top:1.3rem}
.fld label{display:block;color:var(--dim);margin-bottom:.5rem}
.fld input{width:100%;background:rgba(236,233,226,.04);border:1px solid var(--line-2);
 border-radius:2px;color:var(--ink);font-family:var(--display);font-size:1rem;
 padding:.85rem .9rem;-webkit-appearance:none;appearance:none}
.fld input::placeholder{color:rgba(142,140,132,.6)}
.fld input:focus{outline:none;border-color:var(--acc);background:rgba(255,77,0,.05)}
.fld input:disabled{opacity:.5}
.su-err{margin-top:.9rem;color:var(--acc)}
.linkbtn{margin-top:.9rem;background:none;border:0;padding:0;color:var(--dim);cursor:pointer;
 font-family:var(--mono);font-size:.6rem;letter-spacing:.15em;text-transform:uppercase;
 -webkit-appearance:none;appearance:none;text-decoration:underline;text-underline-offset:4px}
.linkbtn:hover{color:var(--acc)}
.linkbtn[hidden]{display:none}
.linkbtn[disabled]{opacity:.4;cursor:default}
.su-err[hidden]{display:none}
.crs-compact{margin-top:1.4rem}
@media(min-width:720px){.crs-compact{grid-template-columns:1fr}}
.crs-compact .crs-d{display:none}
.crs-compact .crs-box{padding:.95rem 1.1rem}
.crs-compact .crs-t{margin-top:.4rem;font-size:1rem}
.crs-compact .crs-tick{top:1.05rem;right:1.1rem}

.pay{border:1px solid var(--line-2);margin-top:1.4rem}
.pay-head{display:flex;justify-content:space-between;align-items:center;
 padding:.8rem 1rem;border-bottom:1px solid var(--line);color:var(--dim)}
.pay-tag{color:var(--acc);border:1px solid rgba(255,77,0,.4);padding:.15em .5em}
.pay-sum{padding:.4rem 1rem}
.pay-row{display:flex;justify-content:space-between;gap:1rem;padding:.6rem 0;
 border-bottom:1px solid var(--line);color:var(--dim);font-size:.94rem}
.pay-row:last-child{border-bottom:0}
.pay-total{color:var(--ink);font-weight:600}
.pay-card{padding:.3rem 1rem 1.1rem}
.pay-two{display:grid;grid-template-columns:1fr 1fr;gap:.9rem}
.pay-note{margin-top:1rem;color:var(--dim);line-height:1.8;font-size:.55rem}

.code{display:grid;grid-template-columns:repeat(6,1fr);gap:.5rem;margin-top:1.4rem}
.code input{width:100%;text-align:center;background:rgba(236,233,226,.04);
 border:1px solid var(--line-2);border-radius:2px;color:var(--ink);
 font-family:var(--mono);font-size:1.25rem;padding:.7rem 0;
 -webkit-appearance:none;appearance:none}
.code input:focus{outline:none;border-color:var(--acc);background:rgba(255,77,0,.06)}

.keybox{display:flex;flex-wrap:wrap;align-items:center;gap:.8rem;margin-top:1.4rem;
 border:1px solid var(--line-2);background:rgba(255,77,0,.05);padding:1rem}
.keybox code{flex:1 1 15rem;min-width:0;color:var(--acc);font-size:.78rem;
 letter-spacing:.06em;word-break:break-all}
.keyfacts{list-style:none;margin:1.1rem 0 0;padding:0;display:grid;gap:.5rem;
 color:var(--dim);line-height:1.7}

@media(max-width:520px){
 .su-rail{font-size:.5rem;gap:.4rem .6rem}
 .su-row{flex-wrap:wrap}
 .su-row .btn{flex:1 1 auto}
}

/* the systems registry, same mechanic as the index */
.sec-registry{border-top:1px solid var(--line)}
.rollx{display:grid;min-width:0}
.rollx .swap{grid-area:1/1}
.rollx:hover .swap.a,.rollrow:hover .rollx .swap.a{clip-path:inset(0 0 100% 0);transform:translateY(-.42em)}
.rollx:hover .swap.b,.rollrow:hover .rollx .swap.b{clip-path:inset(0);transform:none}
.rollx .swap.b{color:var(--acc)}
