/* Zed App home, sign up and admin. Shares the colour and type tokens with the
   modules so the two halves feel like one product. */

body.zed{background:var(--paper);color:var(--ink)}
.zed .in{max-width:var(--wrap);margin:0 auto;padding:0 1.5rem}
.skip{position:absolute;left:-9999px}
.skip:focus{left:1rem;top:1rem;z-index:80;background:var(--surface);color:var(--ink);
  padding:0.7rem 1rem;border:2px solid var(--teal-bright);border-radius:4px}

/* bar */
.zbar{position:sticky;top:0;z-index:40;background:var(--barbg);
  border-bottom:1px solid rgba(255,255,255,0.16)}
.zbar .in{display:flex;align-items:center;justify-content:space-between;
  gap:1rem;padding-top:0.85rem;padding-bottom:0.85rem}
.zbrand{display:inline-flex;align-items:center;gap:0.6rem;font-weight:700;
  font-size:var(--h4);color:var(--ink);text-decoration:none;letter-spacing:-0.02em}
.zmark{width:2rem;height:2rem;border-radius:8px;background:var(--teal);color:#fff;
  display:grid;place-content:center;font-size:1.1rem;font-weight:700}
.znav{display:flex;align-items:center;gap:0.5rem;flex-wrap:wrap}
.znav>a{font-size:var(--label);font-weight:600;letter-spacing:0.04em;
  text-decoration:none;color:var(--ink-soft);padding:0.6rem 0.9rem;border-radius:100px}
.znav>a:hover{color:var(--ink)}
.zcta,.zghost{font-weight:700;letter-spacing:0.04em;text-decoration:none;
  border-radius:100px;padding:0.7rem 1.25rem;display:inline-flex;align-items:center;
  justify-content:center;min-height:2.75rem;font-size:var(--label);
  transition:background 0.18s ease,color 0.18s ease,border-color 0.18s ease}
.zcta{background:var(--teal);color:var(--on-teal);border:1px solid var(--teal)}
.zcta:hover{background:var(--teal-bright);border-color:var(--teal-bright)}
.zghost{background:transparent;color:var(--teal);border:1px solid var(--teal)}
.zghost:hover{background:var(--teal);color:var(--on-teal)}
.znav .zghost,.znav .zcta{color:var(--teal)}
.znav .zcta{background:var(--teal);color:var(--on-teal)}
.big{padding:0.95rem 1.7rem;font-size:var(--text);min-height:3.25rem}
.wide{width:100%}
.zcta:focus-visible,.zghost:focus-visible{outline:2px solid var(--teal-bright);outline-offset:3px}

/* hero */
.hero{padding:clamp(3rem,7vw,6rem) 0 clamp(2.5rem,5vw,4rem);
  background:linear-gradient(180deg,color-mix(in srgb,var(--teal-bright) 9%,var(--paper)),var(--paper))}
.eyebrow{margin:0 0 1rem;font-size:var(--label);font-weight:700;letter-spacing:0.14em;
  text-transform:uppercase;color:var(--teal)}
.herogrid{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(0,0.82fr);
  gap:clamp(2rem,4vw,4rem);align-items:center}
@media (max-width:62rem){.herogrid{grid-template-columns:1fr}.heroart{display:none}}
.hero h1{font-size:clamp(2.3rem,1.5rem + 3.2vw,3.9rem);line-height:1.04;margin:0;
  letter-spacing:-0.035em}

/* A stack of real modules, so the hero shows the product not a stock photo. */
.heroart{position:relative;min-height:24rem}
.shot{position:absolute;margin:0;width:78%;background:var(--surface);
  border:1px solid var(--rule);box-shadow:0 18px 44px rgba(13,27,30,0.13);
  border-radius:6px;overflow:hidden}
.shot img{width:100%;aspect-ratio:16/9;object-fit:cover;display:block}
.shot figcaption{padding:0.85rem 1rem;font-size:var(--label);font-weight:700;
  line-height:1.35;color:var(--ink)}
.shot figcaption span{display:block;font-size:0.82em;letter-spacing:0.12em;
  text-transform:uppercase;color:var(--coral);margin-bottom:0.2rem}
.shot.s0{top:0;right:0;transform:rotate(2.2deg);z-index:3}
.shot.s1{top:7.5rem;left:0;transform:rotate(-2.6deg);z-index:2}
.shot.s2{top:15rem;right:3%;transform:rotate(1.4deg);z-index:1}
@media (prefers-reduced-motion:reduce){.shot{transform:none}}
.shotfallback{position:absolute;inset:0;background:var(--band);border-radius:6px}
.hero .lede{margin:1.5rem 0 0;font-size:clamp(1.15rem,1.05rem + 0.5vw,1.4rem);
  line-height:1.55;color:var(--ink-soft);max-width:46ch}
.herocta{display:flex;flex-wrap:wrap;gap:0.85rem;margin-top:2.25rem}
.facts{list-style:none;display:flex;flex-wrap:wrap;gap:2.5rem;margin:3rem 0 0;padding:0}
.facts li{font-size:var(--label);letter-spacing:0.08em;text-transform:uppercase;
  color:var(--ink-faint);font-weight:600}
.facts b{display:block;font-size:clamp(2rem,1.5rem + 1.6vw,2.8rem);color:var(--ink);
  letter-spacing:-0.03em;line-height:1}

/* bands */
.band{padding:clamp(3rem,6vw,5rem) 0;border-top:1px solid var(--rule)}
.band h2{font-size:var(--h2);margin:0;letter-spacing:-0.025em}
.band .sub{margin:0.9rem 0 2.5rem;color:var(--ink-soft);max-width:52ch;
  font-size:var(--text)}
.band>.in>.zghost{margin-top:2rem}

/* audiences */
.audgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(20rem,1fr));gap:1.5rem}
.aud{background:var(--surface);border:1px solid var(--rule);border-top:4px solid var(--teal);
  padding:2rem 1.75rem;display:flex;flex-direction:column}
.aud:nth-child(2){border-top-color:var(--coral)}
.audtag{font-size:var(--label);font-weight:700;letter-spacing:0.12em;
  text-transform:uppercase;color:var(--teal)}
.aud:nth-child(2) .audtag{color:var(--coral)}
.aud h3{font-size:var(--h4);line-height:1.25;margin:0.85rem 0 0;letter-spacing:-0.015em}
.aud p{color:var(--ink-soft);margin:0.9rem 0 0;font-size:var(--text);line-height:1.6}
.aud ul{margin:1.4rem 0 0;padding-left:1.1rem;color:var(--ink);font-size:var(--text)}
.aud li{margin-bottom:0.5rem}
.audlink{margin-top:auto;padding-top:1.5rem;font-weight:700;color:var(--teal);
  text-decoration:none;font-size:var(--label);letter-spacing:0.04em}
.audlink:hover{text-decoration:underline}
.aud:nth-child(2) .audlink{color:var(--coral)}

/* module cards */
.mods{display:grid;grid-template-columns:repeat(auto-fill,minmax(17rem,1fr));gap:1.25rem}
.mod{background:var(--surface);border:1px solid var(--rule);text-decoration:none;
  color:inherit;display:flex;flex-direction:column;
  transition:border-color 0.18s ease,transform 0.18s ease}
.mod:hover{border-color:var(--teal-bright);transform:translateY(-2px)}
.mod img,.mod .noimg{aspect-ratio:16/9;width:100%;object-fit:cover;
  border-bottom:1px solid var(--rule)}
.mod .noimg{background:var(--band)}
.modbody{padding:1.15rem;display:flex;flex-direction:column;gap:0.45rem}
.modcat{font-size:var(--label);font-weight:700;letter-spacing:0.12em;
  text-transform:uppercase;color:var(--coral)}
.mod h3{font-size:var(--text);margin:0;line-height:1.35}
.mod p{margin:0;font-size:var(--label);color:var(--ink-faint);
  letter-spacing:0.06em;text-transform:uppercase}
.tier{align-self:flex-start;font-size:var(--label);font-weight:700;
  letter-spacing:0.08em;text-transform:uppercase;padding:0.1rem 0.5rem;
  border-radius:3px;border:1px solid currentColor}
.tier.free{color:var(--good)}
.tier.member{color:var(--ink-faint)}

/* steps */
.steplist{list-style:none;margin:0;padding:0;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(17rem,1fr));gap:2rem}
.steplist li{display:flex;gap:1.1rem;align-items:flex-start}
.sn{flex:none;width:2.6rem;height:2.6rem;border-radius:50%;background:var(--teal);
  color:var(--on-teal);display:grid;place-content:center;font-weight:700;
  font-size:var(--h4);line-height:1}
.steplist h4{margin:0.3rem 0 0;font-size:var(--text);letter-spacing:-0.01em}
.steplist p{margin:0.5rem 0 0;color:var(--ink-soft);font-size:var(--text);line-height:1.55}

/* join */
.joinband{background:var(--band);color:var(--ink)}
.joingrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:3rem;
  align-items:start}
@media (max-width:56rem){.joingrid{grid-template-columns:1fr;gap:2rem}}
.joinwords h2{font-size:var(--h2);margin:0;letter-spacing:-0.025em}
.joinwords p{color:var(--ink-soft);font-size:var(--text);line-height:1.65;margin:1rem 0 0}
.fineprint{font-size:var(--label);line-height:1.6}
.panel{background:var(--surface);border:1px solid var(--rule);padding:1.75rem}
.tabs{display:flex;gap:0.4rem;margin-bottom:1.5rem;border-bottom:1px solid var(--rule)}
.tabs button{font:inherit;font-size:var(--label);font-weight:700;letter-spacing:0.06em;
  text-transform:uppercase;background:none;border:0;border-bottom:3px solid transparent;
  color:var(--ink-faint);padding:0.7rem 0.9rem;cursor:pointer;margin-bottom:-1px}
.tabs button[aria-selected="true"]{color:var(--teal);border-bottom-color:var(--teal)}
.tabs button:focus-visible{outline:2px solid var(--teal-bright);outline-offset:2px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
@media (max-width:30rem){.two{grid-template-columns:1fr}}
[hidden]{display:none !important}
.field{margin:0 0 1.1rem;display:flex;flex-direction:column;gap:0.35rem}
.field label{font-size:var(--label);font-weight:700;letter-spacing:0.03em;color:var(--ink)}
.field input,.field select{font:inherit;font-size:var(--text);color:var(--ink);
  background:var(--surface);border:1px solid var(--rule);border-radius:4px;
  padding:0.75rem 0.85rem;min-height:3rem;width:100%}
.field input:focus,.field select:focus{outline:2px solid var(--teal-bright);outline-offset:1px}
.field .hint{font-size:var(--label);color:var(--ink-faint);line-height:1.45}
.field .err{font-size:var(--label);color:var(--coral);font-weight:600;min-height:0}
.field.bad input,.field.bad select{border-color:var(--coral);border-width:2px}
.field.check{flex-direction:row;flex-wrap:wrap;align-items:flex-start;gap:0.65rem}
.field.check input{width:1.4rem;height:1.4rem;min-height:0;flex:none;margin-top:0.15rem}
.field.check label{font-weight:400;font-size:var(--text);flex:1 1 12rem;line-height:1.5}
.field.check .err{flex-basis:100%}
.formnote{margin:1rem 0 0;font-size:var(--label);line-height:1.6;min-height:1rem;
  color:var(--ink-soft)}
.formnote.bad{color:var(--coral);font-weight:600}
.formnote.good{color:var(--good);font-weight:600;background:var(--paper);
  border-left:3px solid var(--good);padding:0.85rem 1rem}
.authform.busy{opacity:0.65;pointer-events:none}
.authform.busy button{cursor:progress}
.formnote.pending{color:var(--ink);background:var(--paper);border-left:3px solid var(--teal-bright);
  padding:0.85rem 1rem}
.notlive{margin:0 0 1.25rem;padding:0.85rem 1rem;background:var(--paper);
  border-left:3px solid var(--coral);font-size:var(--label);line-height:1.6;
  color:var(--ink-soft)}

/* footer */
.zfoot{border-top:1px solid var(--rule);padding:2.5rem 0;color:var(--ink-faint);
  font-size:var(--label)}
.zfoot p{margin:0 0 0.4rem}
.zfoot a{color:var(--teal);text-decoration:none}
.zfoot a:hover{text-decoration:underline}

/* admin */
.adminwrap{max-width:60rem;margin:0 auto;padding:clamp(2.5rem,5vw,4rem) 1.5rem 5rem}
.adminhead h1{font-size:var(--h1);margin:0;letter-spacing:-0.03em}
.adminhead .lede{color:var(--ink-soft);font-size:var(--text);margin:1rem 0 0;max-width:50ch}
.notliveyet{margin:2.5rem 0;padding:1.5rem 1.6rem;background:var(--surface);
  border:1px solid var(--rule);border-left:4px solid var(--coral)}
.notliveyet h2{margin:0 0 0.7rem;font-size:var(--h4);color:var(--coral);letter-spacing:-0.01em}
.notliveyet p{margin:0 0 0.7rem;color:var(--ink-soft);font-size:var(--text);line-height:1.6}
.notliveyet p:last-child{margin-bottom:0}
.notliveyet code{background:var(--band);padding:0.1rem 0.35rem;border-radius:3px;
  font-size:0.95em;color:var(--ink)}
.admintable{width:100%;border-collapse:collapse;background:var(--surface);
  border:1px solid var(--rule)}
.admintable caption{text-align:left;padding:1rem 1.1rem;font-size:var(--label);
  color:var(--ink-faint);border-bottom:1px solid var(--rule)}
.admintable th{text-align:left;font-size:var(--label);letter-spacing:0.08em;
  text-transform:uppercase;color:var(--ink-faint);padding:0.85rem 1.1rem;
  border-bottom:1px solid var(--rule)}
.admintable td{padding:1rem 1.1rem;border-bottom:1px solid var(--rule);
  font-size:var(--text);vertical-align:middle}
.admintable tr:last-child td{border-bottom:0}
.acat{display:block;font-size:var(--label);letter-spacing:0.1em;text-transform:uppercase;
  color:var(--coral);font-weight:600;margin-top:0.2rem}
.adur{color:var(--ink-faint);font-size:var(--label);white-space:nowrap}
.sw{display:inline-flex;align-items:center;gap:0.65rem;cursor:pointer}
.sw input{position:absolute;opacity:0;width:1px;height:1px}
.track{width:3rem;height:1.7rem;border-radius:100px;background:var(--rule);
  position:relative;flex:none;transition:background 0.18s ease}
.track::after{content:"";position:absolute;top:0.22rem;left:0.22rem;width:1.26rem;
  height:1.26rem;border-radius:50%;background:#fff;transition:transform 0.18s ease}
.sw input:checked+.track{background:var(--good)}
.sw input:checked+.track::after{transform:translateX(1.3rem)}
.sw input:focus-visible+.track{outline:2px solid var(--teal-bright);outline-offset:2px}
.swlabel{font-size:var(--label);font-weight:700;letter-spacing:0.05em;color:var(--ink-soft);
  min-width:7rem}
.adminfoot{margin-top:2rem;font-size:var(--label);color:var(--ink-faint);line-height:1.6}
@media (max-width:34rem){
  .admintable,.admintable tbody,.admintable tr,.admintable td{display:block;width:100%}
  .admintable thead{display:none}
  .admintable tr{border-bottom:1px solid var(--rule);padding:0.5rem 0}
  .admintable td{border-bottom:0;padding:0.4rem 1.1rem}
}


/* Why the details are asked for. Zeducation's own policy requires this to be
   said at the point of collection, so it sits beside the fields. */
.whyask{margin:1.75rem 0 0;padding:1.25rem 1.4rem;background:var(--surface);
  border:1px solid var(--rule);border-left:3px solid var(--teal-bright)}
.whyask h3{margin:0 0 0.6rem;font-size:var(--text);letter-spacing:-0.01em;color:var(--ink)}
.whyask p{margin:0 0 0.6rem;font-size:var(--label);line-height:1.6;color:var(--ink-soft)}
.whyask p:last-child{margin-bottom:0}
.fineprint a{color:var(--teal);font-weight:600}
.policylinks{display:flex;flex-wrap:wrap;gap:0.35rem 1.1rem;margin:0 0 1.25rem;
  font-size:var(--label);line-height:1.5}
.policylinks a{color:var(--teal);font-weight:600;text-decoration:underline;
  text-underline-offset:2px}
.footpol{margin-top:0.6rem}

/* ---------- password reset, and the people list that sends the links ---------- */

.authwrap{max-width:34rem;margin:0 auto;padding:clamp(2.5rem,5vw,4rem) 1.5rem 5rem}
.authwrap h1{font-size:clamp(1.8rem,1.4rem + 1.6vw,2.4rem);line-height:1.1;margin:0}
.authwrap .lede{color:var(--ink-soft);margin:0.9rem 0 1.75rem}
.authwrap .panel h1{margin-bottom:0}

.zbtn{font:inherit;font-weight:700;letter-spacing:0.03em;cursor:pointer;
  background:var(--teal);color:var(--on-teal);border:1px solid var(--teal);
  padding:0.7rem 1.2rem;border-radius:2rem}
.zbtn:hover{background:var(--teal-bright);border-color:var(--teal-bright)}
.zbtn:focus-visible{outline:2px solid var(--teal-bright);outline-offset:3px}
.zbtn[disabled]{opacity:0.55;cursor:default}
.zbtn.small{padding:0.45rem 0.9rem;font-size:var(--label)}

/* A button that reads as a link, because it sits in a sentence rather than
   beside one. It still has to be a button: it changes the page, it does not
   go anywhere. */
.linkish{font:inherit;background:none;border:0;padding:0;cursor:pointer;
  color:var(--teal);font-weight:600;text-decoration:underline;
  text-underline-offset:0.2em}
.linkish:hover{color:var(--teal-bright)}
.linkish:focus-visible{outline:2px solid var(--teal-bright);outline-offset:3px}
.forgotline{margin:1.1rem 0 0;text-align:center}

#p-forgot h3{margin:0 0 0.5rem;font-size:var(--step-1);line-height:1.2}
#p-forgot .lede{color:var(--ink-soft);margin:0 0 1.5rem;font-size:var(--text)}

.people{margin-top:3.5rem;padding-top:2.5rem;border-top:1px solid var(--rule)}
.people h2{font-size:clamp(1.5rem,1.2rem + 1.2vw,2rem);line-height:1.15;margin:0}
.people .lede{color:var(--ink-soft);margin:0.9rem 0 1.5rem;max-width:60ch}

/* Said plainly and up front, because "reset" sounds like it should show you
   the password, and the honest answer is that nothing can. */
.peoplenote{background:color-mix(in srgb,var(--teal) 7%,var(--surface));
  border:1px solid color-mix(in srgb,var(--teal) 30%,var(--rule));
  padding:1.25rem 1.4rem;margin:0 0 1.75rem}
.peoplenote p{margin:0;color:var(--ink-soft);font-size:var(--text);line-height:1.6}
.peoplenote p + p{margin-top:0.85rem}
.peoplestate{color:var(--ink-soft);margin:0}

.peopletable td:last-child{white-space:nowrap}
.rowsays{display:block;margin-top:0.4rem;font-size:var(--label);
  color:var(--ink-soft);white-space:normal;max-width:22rem}
.rowsays.good{color:var(--good);font-weight:600}
.rowsays.bad{color:var(--coral);font-weight:600}

@media (max-width:46rem){
  .peopletable,.peopletable tbody,.peopletable tr,.peopletable td{display:block;width:100%}
  .peopletable thead{position:absolute;width:1px;height:1px;overflow:hidden;
    clip:rect(0 0 0 0);white-space:nowrap}
  .peopletable tr{border-bottom:1px solid var(--rule);padding:0.5rem 0}
  .peopletable td{border:0;padding:0.3rem 1.1rem}
  .peopletable td:first-child{font-weight:700;padding-top:0.9rem}
  .peopletable td:last-child{white-space:normal;padding-bottom:0.9rem}
}

/* The wordmark replaces the lettered square, so the gap and the square go. */
.zbrand{gap:0;line-height:0;flex:none}
.zbar .znav>a{color:var(--barsoft)}
.zbar .znav>a:hover{color:var(--barink)}
.zbar .zghost,.zbar .znav .zghost{color:var(--baraccent);border-color:var(--baraccent);
  background:transparent}
.zbar .zghost:hover{background:var(--baraccent);color:#06201F}
.zbar .zcta,.zbar .znav .zcta{background:var(--baraccent);color:#06201F;
  border-color:var(--baraccent)}
.zbar .zcta:hover{background:#FFFFFF;border-color:#FFFFFF;color:#06201F}


/* Sign in with Google, and the line that separates it from the form. */
.gline{display:flex;flex-direction:column;align-items:stretch;gap:0.7rem;margin:0 0 1.3rem}
.gbtn{font:inherit;font-size:var(--text);font-weight:600;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;gap:0.6rem;
  min-height:3rem;padding:0.7rem 1rem;border-radius:100px;background:#fff;
  color:#1f1f1f;border:1px solid #dadce0}
.gbtn:hover{background:#f7f8f8;border-color:#c6c9cc}
.gbtn:focus-visible{outline:2px solid var(--teal-bright);outline-offset:2px}
.gor{text-align:center;font-size:var(--label);color:var(--ink-soft)}
.rolehint{display:block;margin:0 0 1rem}
.inviteform{margin:0 0 1.8rem}
/* The role each person holds, changed in place. */
.rolepick{font:inherit;font-size:var(--label);padding:0.4rem 0.5rem;border-radius:4px;
  border:1px solid var(--rule);background:var(--surface);color:var(--ink);max-width:12rem}
.rolepick:focus-visible{outline:2px solid var(--teal-bright);outline-offset:1px}
.rolepick:disabled{opacity:0.6}

/* Who the three ways in are for, said before the form asks which one. */
.whofor{list-style:none;margin:1.4rem 0 0;padding:0;display:grid;gap:0.9rem}
.whofor li{padding-left:1.1rem;border-left:3px solid var(--teal);line-height:1.6}
.whofor b{color:var(--ink)}
.pricenote{margin-top:1.2rem;line-height:1.65}
