:root{--g:#167a50;--gd:#0f5e3c;--gl:#e6f6ee;--navy:#173250;--ink:#1d2b3a;--muted:#55657a;--line:#d6e2da;--bg:#f5faf7;--bad:#a63a00;--badbg:#fff3e8;--bd:#f0b98a;--info:#e8f0fb;--fs:17px}html[data-size=l]{--fs:20px}html[data-size=xl]{--fs:23px}*{box-sizing:border-box}html{font-size:var(--fs)}body{color:var(--ink);background:var(--bg);margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.55}.skip-link{position:absolute;inset-inline-start:-999px}.skip-link:focus{inset-inline-start:8px;z-index:9;background:#fff;padding:8px;top:8px}:focus-visible{outline-offset:2px;border-radius:4px;outline:3px solid #1a63d6}.top{background:var(--navy);color:#fff;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:12px 24px;display:flex}.brand{color:#fff;font-size:1.25rem;font-weight:800;text-decoration:none}.top nav{flex-wrap:wrap;gap:6px;display:flex}.navlink{color:#fff;font:inherit;cursor:pointer;background:0 0;border:0;border-radius:8px;padding:8px 12px;font-size:.95rem;text-decoration:none}.navlink:hover{background:#ffffff26}main{max-width:920px;margin:0 auto;padding:24px 16px 64px}h1{margin:.2em 0 .4em;font-size:1.9rem;line-height:1.2}h2{margin:1.6em 0 .4em;font-size:1.3rem}a{color:#0b5cc4}.muted{color:var(--muted)}.small{font-size:.85rem}.center{justify-content:center}.lead{color:var(--muted);margin:.2em 0 1em;font-size:1.15rem}.crumbs{margin:0 0 4px}.crumbs a{font-weight:600;text-decoration:none}kbd{text-align:center;min-width:1.8em;color:var(--ink);background:#fff;border:1px solid #9aa9b8;border-bottom-width:3px;border-radius:6px;padding:.05em .5em;font:600 .9em system-ui,sans-serif;display:inline-block}code{background:#e8efeb;border-radius:5px;padding:.05em .4em;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.92em}.btn{font:inherit;cursor:pointer;border:2px solid #0000;border-radius:12px;justify-content:center;align-items:center;gap:6px;min-height:46px;padding:.65em 1.2em;font-weight:700;text-decoration:none;display:inline-flex}.btn.primary{background:var(--g);color:#fff}.btn.primary:hover{background:var(--gd)}.btn.ghost{color:var(--ink);background:#fff;border-color:#aebfb5}.btn.ghost:hover{background:var(--gl)}.btn.linkish{color:var(--muted);background:0 0;font-weight:500;text-decoration:underline}.btn.big{min-height:54px;padding:.8em 1.6em;font-size:1.1rem}.btn.small{min-height:0;padding:.35em .9em;font-size:.9rem}.linklike{font:inherit;color:#0b5cc4;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.row{flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px;display:flex}.hero{border:1px solid var(--line);background:#fff;border-radius:20px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:24px;padding:28px;display:flex}.hero-text{flex:380px}.sub{color:var(--muted);margin:.6em 0 0}.hero-ring{width:150px;height:150px;position:relative}.ring{width:150px;height:150px;transform:rotate(0)}.ring circle{fill:none;stroke-width:3.2px}.ring .bg{stroke:#e2ebe6}.ring .fg{stroke:var(--g);stroke-linecap:round}.ring-num{flex-direction:column;justify-content:center;align-items:center;font-size:1.6rem;font-weight:800;display:flex;position:absolute;inset:0}.ring-num small{color:var(--muted);font-size:.7rem;font-weight:500}.section{margin-top:1.6em}.path,.lessons{flex-direction:column;gap:10px;margin:14px 0;padding:0;list-style:none;display:flex}.course,.lesson{border:2px solid var(--line);color:inherit;background:#fff;border-radius:16px;align-items:center;gap:14px;padding:14px 16px;text-decoration:none;display:flex}.course:hover,.lesson:hover{border-color:var(--g);box-shadow:0 2px 10px #177a501f}.course.done,.lesson.done{background:var(--gl);border-color:#9fd6b9}.course.doing,.lesson.doing{border-color:#e0a84a}.num{background:var(--navy);color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:2.1em;height:2.1em;font-weight:700;display:flex}.done .num{background:var(--g)}.c-icon{font-size:1.8rem}.c-icon.big{font-size:3rem}.c-body,.l-body{flex-direction:column;flex:1;min-width:0;display:flex}.c-blurb,.l-body small{color:var(--muted);font-size:.9rem}.c-meta{color:var(--muted);flex-direction:column;align-items:flex-end;gap:2px;display:flex}.tag{color:#1c4a85;background:#e1ebf7;border-radius:99px;padding:.15em .7em;font-size:.75rem;font-weight:700}.tag.intermediate{color:#7a5200;background:#fdf0d4}.tag.advanced{color:#5d2b78;background:#f1e3f8}.bar{background:#e2ebe6;border-radius:6px;height:9px;margin-top:8px;display:block;overflow:hidden}.bar i{background:var(--g);border-radius:6px;height:100%;display:block}.bar.wide{max-width:420px}.course-head{align-items:center;gap:18px;margin:8px 0 12px;display:flex}@media (width<=620px){.c-meta{display:none}.hero{padding:18px}h1{font-size:1.6rem}}.q-lesson{color:var(--muted);margin:.2em 0;font-size:1.1rem;font-weight:600}.dots{flex-wrap:wrap;gap:8px;margin:8px 0 2px;display:flex}.dot{background:#cfdcd4;border-radius:6px;width:26px;height:10px;display:block}.dot.done{background:var(--g)}.dot.cur{outline-offset:2px;outline:3px solid #1a63d6}.step{margin:4px 0 14px;font-weight:700}.card{border:1px solid var(--line);background:#fff;border-radius:16px;margin-bottom:16px;padding:20px 22px}.task{border-inline-start:8px solid var(--g)}.task-label{letter-spacing:.08em;text-transform:uppercase;color:var(--g);margin-bottom:6px;font-size:.78rem;font-weight:800}.task-text{font-size:1.15rem;line-height:1.65}.task-text code{background:#dff0e6;font-size:1em}.figure,.pics img{border:1px solid var(--line);border-radius:8px;max-width:100%;margin-top:12px}.pics{flex-wrap:wrap;gap:8px;display:flex}.tip{color:var(--muted);margin:0 0 10px}[hidden]{display:none!important}#sheet{isolation:isolate;z-index:0;border:2px solid #b9cbc0;border-radius:10px;height:min(420px,60vh);position:relative;overflow:hidden}.answer{flex-direction:column;gap:6px;margin-top:14px;font-weight:700;display:flex}.answer input,.field input{font:inherit;border:2px solid #8ea39a;border-radius:10px;width:100%;max-width:520px;padding:.7em .9em;font-size:1.1rem;font-weight:400}.answer input:focus,.field input:focus{border-color:#1a63d6;outline:0;box-shadow:0 0 0 3px #1a63d640}.gridscroll{overflow-x:auto}table.grid{border-collapse:collapse;background:#fff;margin-bottom:6px}table.grid td,table.grid th{text-align:start;border:1px solid #b9c7be;min-width:78px;height:34px;padding:5px 14px;font-size:.95rem}table.grid th{text-align:center;background:#eef3f0;font-weight:600}table.grid td.hl{outline:3px solid var(--g);outline-offset:-3px;background:#eafaf1}.keybox{text-align:center;cursor:pointer;background:#fafcfb;border:3px dashed #8ea39a;border-radius:16px;margin-top:14px;padding:26px 18px;transition:background .15s}.keybox.on{border-style:solid;border-color:var(--g);background:var(--gl)}.keybox.ok{background:#c9efd9}.kb-main{font-size:1.15rem;font-weight:700}.kb-live{min-height:2.4em;margin-top:10px;font-size:1.3rem}.seqdot{border:3px solid #8ea39a;border-radius:50%;width:18px;height:18px;margin:0 6px;display:inline-block}.seqdot.on{background:var(--g);border-color:var(--g)}#fb:empty{display:none}.fb{border:2px solid;border-radius:14px;margin-bottom:14px;padding:16px 18px}.fb.good{background:var(--gl);border-color:#79c79f}.fb.bad{background:var(--badbg);border-color:var(--bd)}.fb.info{background:var(--info);border-color:#a9c3ea}.fb-title{margin-bottom:4px;font-size:1.1rem;font-weight:800}.fb.good .fb-title{color:var(--gd)}.fb.bad .fb-title{color:var(--bad)}.why{margin-top:8px}.nudge{margin-top:8px;font-weight:600}.hints{flex-direction:column;gap:8px;margin:0 0 12px;padding:0;list-style:none;display:flex}.hints li{background:#fffbea;border:2px solid #efd98a;border-radius:12px;padding:10px 14px}.hn{color:#7a5a00;margin-inline-end:6px;font-weight:800}.actions{z-index:5;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 0 24px;display:flex;position:relative}.note{background:var(--info);border:2px solid #a9c3ea;border-radius:12px;margin-bottom:12px;padding:12px 16px}.done-card{text-align:center;border:1px solid var(--line);background:#fff;border-radius:20px;margin-top:10px;padding:36px 20px}.big-emoji{font-size:4rem}.score{color:var(--g);margin:.2em 0;font-size:1.4rem;font-weight:800}.steps{padding-inline-start:1.4em}.steps li{margin:.7em 0}.glossary dt{margin-top:12px;font-weight:800}.glossary dd{margin:2px 0 0}.tips li{margin:.5em 0}.modal{width:calc(100% - 32px);max-width:520px;font-size:var(--fs);color:var(--ink);border:0;border-radius:18px;padding:24px;box-shadow:0 20px 60px #00000059}.modal::backdrop{background:#0a19288c}.modal h2{margin-top:0}.field{flex-direction:column;gap:6px;margin:12px 0;font-weight:700;display:flex}.field small{color:var(--muted);font-weight:400}fieldset{border:1px solid var(--line);border-radius:12px;margin:12px 0;padding:8px 14px}legend{padding:0 6px;font-weight:700}.radio{cursor:pointer;align-items:center;gap:10px;padding:6px 0;display:flex}.radio input{width:1.2em;height:1.2em}.danger-zone{margin:18px 0 0;font-size:.9rem}.danger-zone .linklike{color:#a22}.tour-step{color:var(--g);text-transform:uppercase;letter-spacing:.06em;font-size:.85rem;font-weight:700}@media (prefers-reduced-motion:no-preference){.keybox,.course,.lesson{transition:all .15s}}@media print{.top,.actions{display:none}}.foot{max-width:920px;color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:12px;margin:0 auto;padding:8px 16px 40px;font-size:.85rem;display:flex}.foot a{color:var(--muted)}.join{background:#fffbea;border:2px solid #efd98a;border-radius:16px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px;padding:16px 20px;display:flex}.join .row{margin:0}.tr-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.tr-filters{flex-wrap:wrap;align-items:flex-end;gap:14px;margin:8px 0 14px;display:flex}.tr-filters label{flex-direction:column;gap:4px;font-size:.9rem;font-weight:600;display:flex}.tr-filters select,.tr-filters input[type=search]{font:inherit;background:#fff;border:2px solid #8ea39a;border-radius:8px;min-width:170px;padding:.5em .7em}.tr-filters .chk{flex-direction:row;align-items:center;gap:8px;font-weight:500}.tr-cards{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:8px 0 6px;display:grid}.stat{border:1px solid var(--line);background:#fff;border-radius:14px;flex-direction:column;padding:14px 16px;display:flex}.stat b{font-size:1.8rem;line-height:1.1}.stat span{color:var(--muted);font-size:.88rem}.stat.warn{border-color:var(--bd);background:#fff3e8}.stat.warn b{color:var(--bad)}.tr-cards.small .stat b{font-size:1.4rem}.tablewrap{border:1px solid var(--line);background:#fff;border-radius:14px;overflow-x:auto}.tr-table{border-collapse:collapse;width:100%;font-size:.93rem}.tr-table th{text-align:start;white-space:nowrap;background:#eef3f0;padding:10px 12px;font-size:.82rem}.tr-table td{vertical-align:middle;border-top:1px solid #e6eee9;padding:10px 12px}.clickrow{cursor:pointer}.clickrow:hover,.clickrow:focus-visible{background:var(--gl)}.bar.mini{vertical-align:middle;width:90px;height:8px;margin:0 6px 0 0;display:inline-block}.pcttxt{font-weight:700}.flag{white-space:nowrap;border-radius:99px;padding:.15em .65em;font-size:.75rem;font-weight:700;display:inline-block}.flag.new{color:#1c4a85;background:#e1ebf7}.flag.idle{color:#7a5200;background:#fdf0d4}.flag.hard{color:#8f3100;background:#ffe3d3}.hardest{padding-inline-start:1.3em}.hardest li{margin:.6em 0}.hardest .muted{font-size:.88rem;display:block}.modal.wide{max-width:680px;max-height:90vh;overflow:auto}.stuck,.lessonlist{padding-inline-start:1.1em}.lessonlist{padding-inline-start:.4em;list-style:none}.lessonlist li{justify-content:space-between;gap:10px;padding:3px 0;display:flex}details summary{cursor:pointer;align-items:center;gap:8px;padding:6px 0;display:flex}.sum-t{flex:1}.btn.danger{color:#a22;border-color:#e0b0b0}.login{max-width:520px;margin:20px auto}.tr-table td:nth-child(2){white-space:nowrap}.tr-table td:last-child{min-width:150px}.flag{white-space:normal}.tr-table td:last-child .flag{margin:2px 2px 2px 0}.org-chip{background:#ffffff26;border-radius:99px;margin-inline-start:12px;padding:.2em .8em;font-size:.85rem}.org-chip:empty{display:none}.top{justify-content:flex-start}.top nav{margin-inline-start:auto}.join.ok{background:var(--gl);border-color:#79c79f}.acct{background:#f4f8f6;border-radius:12px;margin:10px 0;padding:12px 14px}.acct p{margin:.3em 0}.tabs{border-bottom:2px solid var(--line);flex-wrap:wrap;gap:4px;margin:12px 0 16px;display:flex}.tab{font:inherit;cursor:pointer;color:var(--muted);background:0 0;border:0;border-bottom:4px solid #0000;border-radius:8px 8px 0 0;margin-bottom:-2px;padding:.7em 1.1em;font-weight:700}.tab.on{color:var(--g);border-bottom-color:var(--g)}.tab:hover{background:var(--gl)}.wide-login{max-width:620px}.types{border:0;flex-wrap:wrap;gap:12px;margin:14px 0;padding:0;display:flex}.types legend{margin-bottom:6px;padding:0;font-weight:700}.typecard{border:2px solid var(--line);cursor:pointer;background:#fff;border-radius:14px;flex:220px;align-items:center;gap:10px;padding:12px 14px;display:flex}.typecard:has(input:checked){border-color:var(--g);background:var(--gl)}.typecard input{width:1.2em;height:1.2em}textarea{font:inherit;border:2px solid #8ea39a;border-radius:10px;width:100%;padding:.7em .9em}.codebox{background:#f4f8f6;border-radius:12px;flex-wrap:wrap;align-items:center;gap:20px;padding:14px 18px;display:flex}.code{letter-spacing:.12em;font:700 1.8rem ui-monospace,Menlo,monospace}.switch{align-items:center;gap:8px;font-weight:600;display:flex}.switch input{width:1.3em;height:1.3em}.acts{white-space:nowrap}.linklike.danger{color:#a22}@media print{body.printing>:not(#print-area){display:none!important}#print-area .invite{page-break-inside:avoid;border-bottom:1px solid #999;padding:10px 0}}#print-area{display:none}body.printing #print-area{display:block}.tr-table td:first-child{white-space:nowrap}.preview-banner{background:#e8f0fb;border:2px solid #a9c3ea;border-radius:12px;max-width:920px;margin:12px auto 0;padding:10px 14px;font-weight:600}.preview-banner[hidden]{display:none}.seats{text-align:end;min-width:230px}.seats .bar{margin-top:4px}.seats.full b{color:var(--bad)}.seats small{color:var(--bad);font-weight:600}code.temp{letter-spacing:.08em;-webkit-user-select:all;user-select:all;background:#fffbea;border:1px solid #efd98a;border-radius:6px;padding:.1em .5em;font:700 1.05rem ui-monospace,Menlo,monospace}.bigcode{text-align:center;margin:.6em 0;font-size:1.6rem}.bigcode code.temp{font-size:1.8rem}.flag.ok{color:#0f5e3c;background:#dff3e8}.mini-table td{padding:6px 10px}.sect{border-top:1px solid var(--line);margin-top:10px;padding-top:6px}.sect.danger h3{color:#a22}tr.dim td{opacity:.55}#sheet,.grid,code,kbd,.temp{direction:ltr;unicode-bidi:isolate}[dir=rtl] .ring{transform:scaleX(-1)}[dir=rtl] .ring-num{transform:none}.backup.warn{border-color:var(--bd);background:#fff3e8}.warn-text{color:var(--bad)}.forgot{border-top:1px solid var(--line);margin-top:14px;padding-top:10px}.forgot summary{cursor:pointer;color:#0b5cc4;font-weight:700}.findbox{flex-direction:column;gap:4px;max-width:360px;margin:6px 0 10px;font-size:.9rem;font-weight:600;display:flex}.findbox input{font:inherit;border:2px solid #8ea39a;border-radius:8px;padding:.5em .7em}tr.asked td{background:#fff8ef}.certs{margin:18px 0}.certlist{flex-direction:column;gap:8px;padding:0;list-style:none;display:flex}.certlist li{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.cert{background:#fff;border:2px solid #c9a227;border-radius:6px;max-width:860px;margin:16px auto;padding:10px}.cert-inner{text-align:center;border:6px double #c9a227;padding:44px 30px}.cert-brand{color:var(--g);letter-spacing:.04em;font-weight:800}.cert-title{color:#7a5b00;margin:.4em 0;font-family:Georgia,serif;font-size:2.2rem}.cert-line{color:var(--muted);margin:.5em 0}.cert-name{margin:.2em 0;font-family:Georgia,serif;font-size:2.1rem;font-weight:700}.cert-course{color:var(--navy);margin:.3em 0;font-size:1.5rem;font-weight:800}.cert-org{margin:1.2em 0 .2em}.cert-meta{color:var(--muted);margin:.4em 0}.cert-code{letter-spacing:.06em;font-family:ui-monospace,Menlo,monospace}.cert-verify{color:var(--muted);word-break:break-all;margin-top:1.4em;font-size:.8rem}.report h2{margin-top:1.2em}.report-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px;display:flex}@media print{.cert{page-break-after:always;border:2px solid #c9a227;margin:0 auto}.cert:last-child{page-break-after:auto}#print-area .report{font-size:12px}#print-area .tr-cards{grid-template-columns:repeat(3,1fr)}}.inline{align-items:center;gap:8px;font-weight:600;display:inline-flex}.inline select{font:inherit;background:#fff;border:2px solid #8ea39a;border-radius:8px;padding:.4em .6em}.nudge{border-inline-start:8px solid #e0a84a}.chips{flex-wrap:wrap;gap:8px;display:flex}.chip{background:#fff3e0;border:1px solid #f0cf90;border-radius:99px;padding:.2em .8em;font-weight:600}.sqlbox{resize:vertical;border:2px solid #8ea39a;border-radius:10px;width:100%;padding:.7em .9em;font:400 1rem/1.5 ui-monospace,Menlo,Consolas,monospace}.sqlh{margin:14px 0 6px;font-size:1rem}.sqltbl{margin:6px 0 12px}.sqltitle{margin-bottom:4px;font-weight:700}.grid td i{color:#8a97a6}.tailored{background:#fffbea;border:2px solid #efd98a;border-radius:10px;margin:6px 0 10px;padding:10px 14px}.about{max-width:760px;margin:0 auto}.about-hero{text-align:center;border:1px solid var(--line);background:#fff;border-radius:20px;margin-top:10px;padding:34px 26px}.about-hero h1{font-size:2.1rem}.about-hero p{color:#34475c;margin:.9em 0;font-size:1.15rem}.about-cta{text-align:center;margin:26px 0}.btn.wa{color:#fff;background:#25a244}.btn.wa:hover{background:#1d8a38}.privacy{max-width:760px;margin:0 auto}.privacy h2{margin-top:1.4em}.auditlist{padding-inline-start:1.1em}.auditlist li{margin:.35em 0}.streak{color:var(--accent,#b45309);margin:.9rem 0 0;font-weight:600}.again{margin:1.2rem 0}.againlist{padding-inline-start:1.1em}.againlist li{margin:.4em 0}.bars{align-items:flex-end;gap:3px;height:90px;margin:.6rem 0;display:flex}.bars i{background:var(--line,#d5dfd9);border-radius:2px 2px 0 0;flex:1;min-width:3px}.bars i.on{background:var(--accent,#1a7f56)}.bulkbar{background:var(--soft,#eef5f1);border-radius:8px;flex-wrap:wrap;align-items:center;gap:.6rem;margin:.6rem 0;padding:.6rem;display:flex}.filebtn{cursor:pointer}.filebtn:focus-within{outline:2px solid}
