/* GradeLab — scoped page + calculator styles. Every selector lives under .gradelab. v1.0.0 */
.gradelab{
  --gl-brand:#4F46E5;--gl-brand-700:#4338CA;--gl-brand-500:#6366F1;--gl-brand-50:#EEF2FF;
  --gl-ink:#0F172A;--gl-body:#334155;--gl-muted:#475569;--gl-line:#E2E8F0;
  --gl-surface:#FFFFFF;--gl-surface-2:#F8FAFC;--gl-surface-3:#F1F5F9;--gl-accent:#0EA5E9;
  --gl-a:#15803D;--gl-a-bg:#DCFCE7;--gl-b:#4D7C0F;--gl-b-bg:#ECFCCB;--gl-c:#A16207;--gl-c-bg:#FEF9C3;--gl-d:#C2410C;--gl-d-bg:#FFEDD5;--gl-f:#DC2626;--gl-f-bg:#FEE2E2;
  --gl-r-md:12px;--gl-r-lg:16px;
  --gl-shadow:0 1px 3px rgba(15,23,42,.06),0 8px 24px rgba(15,23,42,.05);--gl-shadow-lg:0 10px 40px rgba(15,23,42,.12);
  --gl-fd:'Space Grotesk',system-ui,-apple-system,'Segoe UI',sans-serif;--gl-fb:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
  font-family:var(--gl-fb);color:var(--gl-body);line-height:1.6;font-feature-settings:"tnum";
}
.gradelab *,.gradelab *::before,.gradelab *::after{box-sizing:border-box;}
.gradelab .gl-container{max-width:1120px;margin:0 auto;padding:0 20px;}
.gradelab .gl-narrow{max-width:760px;margin-left:auto;margin-right:auto;}
.gradelab h1,.gradelab h2,.gradelab h3{font-family:var(--gl-fd);color:var(--gl-ink);line-height:1.2;font-weight:700;}
.gradelab h1{font-size:clamp(30px,5vw,40px);margin:0 0 8px;}
.gradelab h2{font-size:clamp(23px,3.5vw,28px);margin:36px 0 12px;}
.gradelab h3{font-size:19px;margin:22px 0 8px;}
.gradelab p{margin:0 0 16px;}
.gradelab a{color:var(--gl-brand);text-decoration:underline;text-underline-offset:2px;}
.gradelab a:hover{color:var(--gl-brand-700);}
.gradelab .gl-hero{background:linear-gradient(180deg,var(--gl-brand-50),var(--gl-surface-2));padding:36px 0 20px;text-align:center;}
.gradelab .gl-lede{font-size:18px;color:var(--gl-muted);max-width:60ch;margin:0 auto 22px;}
.gradelab .gl-trust{display:flex;gap:6px 20px;justify-content:center;flex-wrap:wrap;color:var(--gl-muted);font-size:14px;margin-top:16px;}
.gradelab .gl-trust b{color:var(--gl-ink);}
.gradelab .gl-calc{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:var(--gl-shadow);max-width:720px;margin:0 auto;text-align:left;}
.gradelab .gl-calc-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:16px 20px;border-bottom:1px solid var(--gl-line);flex-wrap:wrap;}
.gradelab .gl-calc-title{font-family:var(--gl-fd);font-weight:600;color:var(--gl-ink);font-size:15px;}
.gradelab .gl-toggle{font-size:13px;color:var(--gl-muted);display:inline-flex;align-items:center;gap:6px;cursor:pointer;}
.gradelab .gl-rows{padding:12px 20px 0;}
.gradelab .gl-row{display:grid;grid-template-columns:1fr 92px 92px 40px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-row-head span{font-size:11px;color:var(--gl-muted);font-weight:700;text-transform:uppercase;letter-spacing:.05em;}
.gradelab .gl-input{width:100%;padding:10px 12px;border:1px solid var(--gl-line);border-radius:var(--gl-r-md);font:inherit;font-size:15px;color:var(--gl-ink);background:var(--gl-surface);min-height:44px;}
.gradelab .gl-input:focus{outline:2px solid var(--gl-brand-500);outline-offset:1px;border-color:var(--gl-brand-500);}
.gradelab .gl-rm{border:none;background:var(--gl-surface-3);color:var(--gl-muted);border-radius:var(--gl-r-md);height:44px;cursor:pointer;font-size:20px;line-height:1;padding:0;width:40px;min-width:0;}
.gradelab .gl-rm:hover{background:var(--gl-f-bg);color:var(--gl-f);}
.gradelab .gl-add{margin:4px 20px 16px;background:var(--gl-brand-50);color:var(--gl-brand-700);border:1px dashed var(--gl-brand-500);border-radius:var(--gl-r-md);padding:11px 14px;cursor:pointer;font:inherit;font-weight:600;min-height:44px;width:calc(100% - 40px);}
.gradelab .gl-add:hover{background:#e0e7ff;}
.gradelab .gl-result{margin:0 20px 20px;border-radius:var(--gl-r-md);padding:20px;text-align:center;background:var(--gl-surface-2);border:1px solid var(--gl-line);transition:background .2s,border-color .2s;}
.gradelab .gl-result-label{font-size:12px;color:var(--gl-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:2px;}
.gradelab .gl-result-num{font-family:var(--gl-fd);font-size:clamp(48px,12vw,72px);font-weight:700;line-height:1.05;color:var(--gl-ink);}
.gradelab .gl-result-letter{display:none;font-weight:700;font-size:18px;padding:4px 16px;border-radius:999px;margin-top:10px;background:var(--gl-surface-3);color:var(--gl-ink);}
.gradelab .gl-result-sub{font-size:13px;color:#475569;margin-top:10px;}
.gradelab .gl-btn-row{display:flex;gap:8px;justify-content:center;margin-top:14px;}
.gradelab .gl-btn{font:inherit;font-weight:600;border-radius:var(--gl-r-md);padding:9px 16px;cursor:pointer;min-height:40px;border:1px solid var(--gl-line);background:var(--gl-surface);color:var(--gl-body);}
.gradelab .gl-btn:hover{border-color:var(--gl-brand-500);color:var(--gl-brand-700);}
.gradelab .gl-result.band-a .gl-result-num{color:var(--gl-a);}.gradelab .gl-result.band-a{background:var(--gl-a-bg);border-color:#bbf7d0;}.gradelab .gl-result.band-a .gl-result-letter{background:var(--gl-a);color:#fff;}
.gradelab .gl-result.band-b .gl-result-num{color:var(--gl-b);}.gradelab .gl-result.band-b{background:var(--gl-b-bg);border-color:#d9f99d;}.gradelab .gl-result.band-b .gl-result-letter{background:var(--gl-b);color:#fff;}
.gradelab .gl-result.band-c .gl-result-num{color:var(--gl-c);}.gradelab .gl-result.band-c{background:var(--gl-c-bg);border-color:#fde68a;}.gradelab .gl-result.band-c .gl-result-letter{background:var(--gl-c);color:#fff;}
.gradelab .gl-result.band-d .gl-result-num{color:var(--gl-d);}.gradelab .gl-result.band-d{background:var(--gl-d-bg);border-color:#fed7aa;}.gradelab .gl-result.band-d .gl-result-letter{background:var(--gl-d);color:#fff;}
.gradelab .gl-result.band-f .gl-result-num{color:var(--gl-f);}.gradelab .gl-result.band-f{background:var(--gl-f-bg);border-color:#fecaca;}.gradelab .gl-result.band-f .gl-result-letter{background:var(--gl-f);color:#fff;}
.gradelab .gl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:16px;margin:18px 0;}
.gradelab .gl-card{display:block;background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);padding:18px;text-decoration:none;color:var(--gl-ink);box-shadow:var(--gl-shadow);transition:transform .15s,box-shadow .15s;}
.gradelab .gl-card:hover{transform:translateY(-2px);box-shadow:var(--gl-shadow-lg);color:var(--gl-ink);}
.gradelab .gl-card-title{display:block;font-family:var(--gl-fd);font-weight:600;font-size:16px;margin-bottom:4px;color:var(--gl-brand-700);}
.gradelab .gl-card-desc{display:block;font-size:14px;color:var(--gl-muted);line-height:1.5;}
.gradelab .gl-steps{counter-reset:s;list-style:none;padding:0;margin:0;}
.gradelab .gl-steps li{position:relative;padding:2px 0 14px 46px;}
.gradelab .gl-steps li::before{counter-increment:s;content:counter(s);position:absolute;left:0;top:0;width:32px;height:32px;border-radius:999px;background:var(--gl-brand);color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center;font-family:var(--gl-fd);}
.gradelab .gl-callout{background:var(--gl-brand-50);border-left:4px solid var(--gl-brand);border-radius:var(--gl-r-md);padding:16px 20px;margin:16px 0;}
.gradelab .gl-formula{background:var(--gl-surface-3);border-radius:var(--gl-r-md);padding:14px 18px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--gl-ink);overflow-x:auto;margin:12px 0;}
.gradelab .gl-table-wrap{overflow-x:auto;}
.gradelab table.gl-scale{width:100%;border-collapse:collapse;margin:14px 0;font-size:15px;min-width:460px;}
.gradelab table.gl-scale th,.gradelab table.gl-scale td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--gl-line);}
.gradelab table.gl-scale th{background:var(--gl-surface-3);font-family:var(--gl-fd);color:var(--gl-ink);}
.gradelab .gl-pill{display:inline-block;font-weight:700;padding:2px 12px;border-radius:999px;color:#fff;}
.gradelab details.gl-faq{border:1px solid var(--gl-line);border-radius:var(--gl-r-md);margin-bottom:10px;background:var(--gl-surface);overflow:hidden;}
.gradelab details.gl-faq summary{cursor:pointer;padding:15px 20px;font-weight:600;color:var(--gl-ink);font-family:var(--gl-fd);list-style:none;display:flex;justify-content:space-between;align-items:center;gap:12px;}
.gradelab details.gl-faq summary::-webkit-details-marker{display:none;}
.gradelab details.gl-faq summary::after{content:"+";font-size:24px;color:var(--gl-brand);line-height:1;}
.gradelab details.gl-faq[open] summary::after{content:"\2013";}
.gradelab details.gl-faq .gl-faq-body{padding:0 20px 16px;}
.gradelab details.gl-faq .gl-faq-body p{margin:0;}
.gradelab .gl-ad{margin:26px auto;max-width:728px;min-height:90px;display:flex;align-items:center;justify-content:center;background:var(--gl-surface-3);border:1px dashed var(--gl-line);border-radius:var(--gl-r-md);color:var(--gl-muted);font-size:12px;}
.gradelab .gl-why{background:var(--gl-surface-2);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);padding:24px;}
.gradelab .gl-byline{font-size:14px;color:var(--gl-muted);margin-top:6px;}
.gradelab .gl-disclaimer{font-size:13px;color:var(--gl-muted);font-style:italic;margin-top:14px;border-top:1px solid var(--gl-line);padding-top:12px;}
.gradelab .gl-section{padding:6px 0;}
.gradelab .gl-eyebrow{font-family:var(--gl-fd);font-weight:600;color:var(--gl-brand);font-size:13px;letter-spacing:.05em;text-transform:uppercase;}
@media (max-width:640px){
  .gradelab .gl-row{grid-template-columns:1fr 64px 64px 40px;}
  .gradelab .gl-hero{padding:24px 0 12px;}
  .gradelab .gl-result.gl-sticky{position:sticky;bottom:0;z-index:5;box-shadow:var(--gl-shadow-lg);}
}

/* Override theme content-link underline on cards */
.gradelab a.gl-card,.gradelab a.gl-card:hover,.gradelab .gl-card .gl-card-title,.gradelab .gl-card .gl-card-desc{text-decoration:none !important;}

/* v2: input-type modes, GPA badge, letter dropdown */
.gradelab .gl-modes{display:inline-flex;background:var(--gl-surface-3);border-radius:var(--gl-r-md);padding:3px;gap:2px;}
.gradelab .gl-mode{border:none;background:transparent;color:#475569;font:inherit;font-weight:600;font-size:13px;padding:6px 12px;border-radius:9px;cursor:pointer;min-height:34px;}
.gradelab .gl-mode.is-active{background:var(--gl-surface);color:var(--gl-brand-700);box-shadow:0 1px 2px rgba(15,23,42,.10);}
.gradelab select.gl-input{-webkit-appearance:menulist;appearance:menulist;background:var(--gl-surface);cursor:pointer;}
.gradelab .gl-result-badges{display:flex;gap:8px;justify-content:center;align-items:center;margin-top:10px;flex-wrap:wrap;}
.gradelab .gl-result-letter{margin-top:0;}
.gradelab .gl-result-gpa{display:none;font-weight:700;font-size:14px;padding:5px 13px;border-radius:999px;background:var(--gl-surface-3);color:var(--gl-ink);}
.gradelab .gl-pmwrap{display:inline-flex;margin:0 20px 14px;}
@media (max-width:640px){.gradelab .gl-modes{width:100%;}.gradelab .gl-mode{flex:1;}}

/* Coming-soon cards (unbuilt pages) + neutralized inline links */
.gradelab .gl-card-soon{cursor:default;box-shadow:none;}
.gradelab .gl-card-soon:hover{transform:none;box-shadow:none;}
.gradelab .gl-card-soon .gl-card-title{color:#334155;}.gradelab .gl-card-soon .gl-card-desc{color:#475569;}
.gradelab .gl-soon{display:inline-block;margin-top:10px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#4338CA;background:#EEF2FF;padding:2px 9px;border-radius:999px;}
.gradelab .gl-ilink{color:inherit;}

/* Grade-goal planner */
.gradelab .gl-goal{margin:0 20px 18px;padding:14px 16px;background:var(--gl-brand-50);border-radius:var(--gl-r-md);font-size:14px;color:var(--gl-body);}
.gradelab .gl-goal-q{font-weight:700;color:var(--gl-brand-700);display:block;margin-bottom:6px;font-family:var(--gl-fd);}
.gradelab .gl-goal-input{width:64px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:36px;margin:0 2px;}
.gradelab .gl-goal-out{margin-top:8px;color:var(--gl-ink);}
.gradelab .gl-goal-out strong{color:var(--gl-brand-700);}

/* UX: larger touch targets for the mode toggle and goal input */
.gradelab .gl-mode{min-height:40px;}
.gradelab .gl-goal-input{min-height:44px;}

.gradelab .gl-legal{max-width:768px;margin:0 auto;padding:8px 4px 36px;color:#334155;font-size:16px;line-height:1.72;}
.gradelab .gl-legal h1{font-family:'Space Grotesk',sans-serif;font-size:2.1rem;line-height:1.2;color:#0f172a;margin:0 0 6px;}
.gradelab .gl-legal .gl-legal-meta{color:#475569;font-size:.9rem;margin:0 0 22px;}
.gradelab .gl-legal h2{font-family:'Space Grotesk',sans-serif;font-size:1.35rem;line-height:1.3;color:#0f172a;margin:36px 0 10px;padding-top:20px;border-top:1px solid #E2E8F0;}
.gradelab .gl-legal h3{font-size:1.05rem;color:#1e293b;margin:22px 0 6px;}
.gradelab .gl-legal p{margin:0 0 14px;}
.gradelab .gl-legal ul{margin:0 0 16px;padding-left:22px;}
.gradelab .gl-legal li{margin:0 0 9px;}
.gradelab .gl-legal a{color:#4338CA;text-decoration:underline;}
.gradelab .gl-legal a:hover{color:#3730A3;}
.gradelab .gl-legal strong{color:#1e293b;}
.gradelab .gl-legal-tldr{background:#EEF2FF;border:1px solid #C7D2FE;border-radius:12px;padding:16px 20px;margin:0 0 26px;}
.gradelab .gl-legal-tldr p{margin:0;color:#3730A3;}
.gradelab .gl-legal-toc{background:#F8FAFC;border:1px solid #E2E8F0;border-radius:12px;padding:16px 20px;margin:0 0 30px;}
.gradelab .gl-legal-toc-title{font-family:'Space Grotesk',sans-serif;font-weight:700;color:#0f172a;margin:0 0 10px;font-size:1rem;}
.gradelab .gl-legal-toc ul{margin:0;padding-left:20px;columns:2;column-gap:30px;}
.gradelab .gl-legal-toc li{margin:0 0 6px;}
@media(max-width:560px){.gradelab .gl-legal-toc ul{columns:1;}.gradelab .gl-legal h1{font-size:1.7rem;}}
.gradelab .gl-about{max-width:768px;margin:0 auto;padding:8px 4px 36px;color:#334155;font-size:16px;line-height:1.72;}
.gradelab .gl-about h1{font-family:'Space Grotesk',sans-serif;font-size:2.1rem;line-height:1.18;color:#0f172a;margin:0 0 12px;}
.gradelab .gl-about .gl-about-lede{font-size:1.15rem;line-height:1.6;color:#1e293b;margin:0 0 28px;}
.gradelab .gl-about h2{font-family:'Space Grotesk',sans-serif;font-size:1.4rem;line-height:1.3;color:#0f172a;margin:34px 0 12px;}
.gradelab .gl-about p{margin:0 0 14px;}
.gradelab .gl-about ul{margin:0 0 16px;padding-left:22px;}
.gradelab .gl-about li{margin:0 0 9px;}
.gradelab .gl-about a{color:#4338CA;text-decoration:underline;}
.gradelab .gl-about a:hover{color:#3730A3;}
.gradelab .gl-about strong{color:#1e293b;}
.gradelab .gl-founder{display:flex;gap:22px;align-items:flex-start;background:#F8FAFC;border:1px solid #E2E8F0;border-radius:16px;padding:22px 24px;margin:4px 0 14px;}
.gradelab .gl-founder-photo{flex:0 0 auto;}
.gradelab .gl-founder-photo img{width:128px;height:128px;border-radius:14px;object-fit:cover;display:block;}
.gradelab .gl-monogram{width:128px;height:128px;border-radius:14px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#4F46E5,#6366F1);color:#fff;font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:2.6rem;letter-spacing:1px;}
.gradelab .gl-founder-name{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:1.2rem;color:#0f172a;margin:0 0 2px;}
.gradelab .gl-founder-role{color:#475569;font-size:.95rem;margin:0 0 12px;}
.gradelab .gl-founder-body p{margin:0 0 10px;}
.gradelab .gl-founder-link{display:inline-flex;align-items:center;gap:6px;font-weight:600;text-decoration:none;color:#4338CA;}
.gradelab .gl-founder-link:hover{text-decoration:underline;}
@media(max-width:560px){.gradelab .gl-founder{flex-direction:column;gap:16px;}.gradelab .gl-founder-photo img,.gradelab .gl-monogram{width:96px;height:96px;font-size:2rem;}.gradelab .gl-about h1{font-size:1.7rem;}}.gradelab .gl-breakdown{margin:12px 0 0}.gradelab .gl-bd-wrap>summary{cursor:pointer;font-weight:600;color:#4338CA;font-size:.9rem;list-style:none}.gradelab .gl-bd-wrap>summary::-webkit-details-marker{display:none}.gradelab .gl-bd-wrap[open]>summary{margin-bottom:8px}.gradelab .gl-bd-table{width:100%;border-collapse:collapse;font-size:.9rem}.gradelab .gl-bd-table th,.gradelab .gl-bd-table td{text-align:left;padding:6px 10px;border-bottom:1px solid #E2E8F0;color:#334155}.gradelab .gl-bd-table th{color:#475569;font-weight:600;font-size:.78rem;text-transform:uppercase;letter-spacing:.02em}.gradelab .gl-bd-table .gl-bd-total td{font-weight:700;color:#0f172a;border-top:2px solid #CBD5E1;border-bottom:none}.gradelab .gl-remember{display:flex;align-items:center;gap:8px;font-size:.85rem;color:#475569;margin:10px 0 0;cursor:pointer}.gradelab .gl-remember input{width:auto;margin:0}.gradelab .gl-bd-chart{margin-top:14px;display:grid;gap:8px}.gradelab .gl-bar-row{display:grid;grid-template-columns:92px 1fr 50px;align-items:center;gap:10px;font-size:.85rem;color:#334155}.gradelab .gl-bar-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gradelab .gl-bar-track{background:#E2E8F0;border-radius:6px;height:14px;overflow:hidden}.gradelab .gl-bar-fill{display:block;height:100%;border-radius:6px}.gradelab .gl-bar-fill.band-a{background:#15803D}.gradelab .gl-bar-fill.band-b{background:#4D7C0F}.gradelab .gl-bar-fill.band-c{background:#A16207}.gradelab .gl-bar-fill.band-d{background:#C2410C}.gradelab .gl-bar-fill.band-f{background:#DC2626}.gradelab .gl-bar-val{text-align:right;font-variant-numeric:tabular-nums;color:#0f172a;font-weight:600}.gradelab .gl-bd-wrap>summary::after{content:"▸";margin-left:6px;font-size:.8em;display:inline-block;transition:transform .15s ease;color:#6366F1;}.gradelab .gl-bd-wrap[open]>summary::after{transform:rotate(90deg);}.gradelab .gl-crumbs-wrap{max-width:1120px;margin:0 auto;padding:18px 20px 14px}.gradelab .gl-crumbs-wrap.gl-crumbs-narrow{max-width:768px;padding:18px 4px 14px}.gradelab .gl-crumbs{font-size:.85rem;line-height:1.4;color:#475569}.gradelab .gl-crumbs a{color:#4338CA;text-decoration:none}.gradelab .gl-crumbs a:hover{text-decoration:underline}.gradelab .gl-crumbs-sep{margin:0 7px;color:#64748B}.gradelab .gl-crumbs-cur{color:#475569}.gradelab .gl-ez{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:var(--gl-shadow);max-width:720px;margin:0 auto;text-align:left;}.gradelab .gl-ez-pane{padding:20px;}.gradelab .gl-ez-inputs{display:grid;grid-template-columns:1fr 1fr;gap:14px;}.gradelab .gl-ez-field{display:flex;flex-direction:column;gap:6px;}.gradelab .gl-ez-lab{font-size:13px;font-weight:600;color:var(--gl-body);}.gradelab .gl-ez-opts{display:flex;flex-wrap:wrap;align-items:center;gap:8px 18px;margin:14px 0 2px;}.gradelab .gl-ez-swap,.gradelab .gl-ez-swap2{border:none;background:none;color:var(--gl-brand-700);font:inherit;font-size:13px;font-weight:600;cursor:pointer;padding:6px 0;text-decoration:underline;text-underline-offset:2px;min-height:40px;}.gradelab .gl-ez .gl-result{margin:18px 0 0;}.gradelab .gl-ez-chart-wrap{margin:16px 0 0;}.gradelab .gl-ez-chart{width:100%;border-collapse:collapse;font-size:.9rem;}.gradelab .gl-ez-chart th,.gradelab .gl-ez-chart td{text-align:left;padding:6px 10px;border-bottom:1px solid var(--gl-line);}.gradelab .gl-ez-chart th{color:#475569;font-weight:600;font-size:.78rem;text-transform:uppercase;letter-spacing:.02em;}.gradelab .gl-ez-chart td{font-variant-numeric:tabular-nums;color:#334155;}.gradelab .gl-ez-chart tr.band-a td:last-child{color:var(--gl-a);font-weight:700;}.gradelab .gl-ez-chart tr.band-b td:last-child{color:var(--gl-b);font-weight:700;}.gradelab .gl-ez-chart tr.band-c td:last-child{color:var(--gl-c);font-weight:700;}.gradelab .gl-ez-chart tr.band-d td:last-child{color:var(--gl-d);font-weight:700;}.gradelab .gl-ez-chart tr.band-f td:last-child{color:var(--gl-f);font-weight:700;}
/* a11y: the current row is inked and bold by design; the band rules were out-specifying it */
.gradelab .gl-ez-chart tr.gl-ez-cur td:last-child{color:var(--gl-ink);}.gradelab .gl-ez-chart tr.gl-ez-cur{background:var(--gl-brand-50);}.gradelab .gl-ez-chart tr.gl-ez-cur td{font-weight:700;color:var(--gl-ink);}.gradelab .gl-ez-ctotal{margin-bottom:14px;max-width:340px;}.gradelab .gl-ez-classhead{margin-bottom:10px;}.gradelab .gl-ez-srow,.gradelab .gl-ez-srow-head{display:grid;grid-template-columns:1fr 90px 112px 44px;gap:8px;align-items:center;margin-bottom:8px;}.gradelab .gl-ez-srow-head span{font-size:11px;color:var(--gl-muted);font-weight:700;text-transform:uppercase;letter-spacing:.05em;}.gradelab .gl-ez-sgrade{font-weight:700;font-size:14px;color:var(--gl-muted);font-variant-numeric:tabular-nums;}.gradelab .gl-ez-sgrade.band-a{color:var(--gl-a);}.gradelab .gl-ez-sgrade.band-b{color:var(--gl-b);}.gradelab .gl-ez-sgrade.band-c{color:var(--gl-c);}.gradelab .gl-ez-sgrade.band-d{color:var(--gl-d);}.gradelab .gl-ez-sgrade.band-f{color:var(--gl-f);}.gradelab .gl-ez-srm{border:none;background:var(--gl-surface-3);color:var(--gl-muted);border-radius:var(--gl-r-md);height:44px;cursor:pointer;font-size:20px;line-height:1;}.gradelab .gl-ez-srm:hover{background:var(--gl-f-bg);color:var(--gl-f);}.gradelab .gl-ez-add{margin:4px 0 0;background:var(--gl-brand-50);color:var(--gl-brand-700);border:1px dashed var(--gl-brand-500);border-radius:var(--gl-r-md);padding:11px 14px;cursor:pointer;font:inherit;font-weight:600;min-height:44px;width:100%;}.gradelab .gl-ez-add:hover{background:#e0e7ff;}.gradelab .gl-ez-classresult{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:16px;padding:14px 16px;background:var(--gl-surface-2);border:1px solid var(--gl-line);border-radius:var(--gl-r-md);font-size:14px;}.gradelab .gl-ez-classresult strong{color:var(--gl-ink);font-family:var(--gl-fd);font-weight:700;}@media(max-width:560px){.gradelab .gl-ez-srow,.gradelab .gl-ez-srow-head{grid-template-columns:1fr 60px 92px 40px;gap:6px;}.gradelab .gl-ez-sgrade{font-size:12px;}.gradelab .gl-ez-classresult{gap:6px 16px;}}.gradelab .gl-ez-steplab{gap:6px}.gradelab .gl-ez-step{font:inherit;font-size:13px;padding:5px 8px;border:1px solid var(--gl-line);border-radius:8px;background:var(--gl-surface);color:var(--gl-ink);min-height:34px;cursor:pointer}.gradelab .gl-ez-scale-wrap{margin:0;padding:10px 20px 20px;border-top:1px solid var(--gl-line)}.gradelab .gl-ez-scale-inner{padding-top:8px}.gradelab .gl-ez-scale-help{font-size:13px;color:var(--gl-muted);margin:0 0 12px}.gradelab .gl-ez-scale{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center}.gradelab .gl-ez-cutrow{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--gl-body)}.gradelab .gl-ez-cutletter{display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:22px;border-radius:6px;color:#fff;font-weight:700;font-size:12px;padding:0 6px}.gradelab .gl-ez-cutletter.band-a{background:#15803D}.gradelab .gl-ez-cutletter.band-b{background:#4D7C0F}.gradelab .gl-ez-cutletter.band-c{background:#A16207}.gradelab .gl-ez-cutletter.band-d{background:#C2410C}.gradelab .gl-ez-cutletter.band-f{background:#DC2626}.gradelab .gl-ez-cut{width:54px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:34px}.gradelab .gl-ez-cutnote{font-size:12px;color:var(--gl-muted);width:100%}.gradelab .gl-ez-scale-reset{margin-top:12px;border:none;background:none;color:var(--gl-brand-700);font:inherit;font-size:13px;font-weight:600;cursor:pointer;padding:6px 0;text-decoration:underline;text-underline-offset:2px}.gradelab .gl-ez-chart-wrap>summary,.gradelab .gl-ez-scale-wrap>summary{padding:8px 0}.gradelab .gl-ez-chart-wrap .gl-ez-steplab{display:inline-flex;margin:0 0 12px}
/* Average Grade Calculator (mode='average') — scoped under .gradelab, reuses shared tokens */
.gradelab .gl-avg{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:var(--gl-shadow);max-width:720px;margin:0 auto;text-align:left;}
.gradelab .gl-avg-typebar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;padding:14px 20px 0;}
.gradelab .gl-avg-pmwrap{display:inline-flex;margin:0;}
.gradelab .gl-avg-pane{padding:14px 20px 20px;}
.gradelab .gl-avg-rows{margin:8px 0 0;}
.gradelab .gl-avg-row,.gradelab .gl-avg-row-head{display:grid;grid-template-columns:1fr 110px 40px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-avg-row-pts,.gradelab .gl-avg-row.gl-avg-row-head.gl-avg-pts{grid-template-columns:1fr 92px 92px 40px;}
.gradelab .gl-avg-row-head span{font-size:11px;color:var(--gl-muted);font-weight:700;text-transform:uppercase;letter-spacing:.05em;}
.gradelab .gl-avg-rm{border:none;background:var(--gl-surface-3);color:var(--gl-muted);border-radius:var(--gl-r-md);height:44px;cursor:pointer;font-size:20px;line-height:1;}
.gradelab .gl-avg-rm:hover{background:var(--gl-f-bg);color:var(--gl-f);}
.gradelab .gl-avg-add,.gradelab .gl-avg-sadd{width:100%;margin:4px 0 0;}
.gradelab .gl-avg-controls{margin:14px 0 0;}
.gradelab .gl-avg-droplab{display:inline-flex;align-items:center;gap:8px;font-size:14px;color:var(--gl-body);flex-wrap:wrap;}
.gradelab .gl-avg-stepper{display:inline-flex;align-items:center;border:1px solid var(--gl-line);border-radius:var(--gl-r-md);overflow:hidden;}
.gradelab .gl-avg-step-down,.gradelab .gl-avg-step-up{border:none;background:var(--gl-surface-3);color:var(--gl-ink);font:inherit;font-size:18px;width:38px;height:40px;cursor:pointer;line-height:1;}
.gradelab .gl-avg-step-down:hover,.gradelab .gl-avg-step-up:hover{background:var(--gl-brand-50);color:var(--gl-brand-700);}
.gradelab .gl-avg-drop{width:46px;height:40px;border:none;border-left:1px solid var(--gl-line);border-right:1px solid var(--gl-line);text-align:center;font:inherit;font-size:15px;color:var(--gl-ink);background:var(--gl-surface);}
.gradelab .gl-avg .gl-result{margin:16px 0 0;}
.gradelab .gl-avg-want{margin:16px 0 0;padding:14px 16px;background:var(--gl-brand-50);border-radius:var(--gl-r-md);font-size:14px;color:var(--gl-body);}
.gradelab .gl-avg-want-q{font-weight:700;color:var(--gl-brand-700);display:block;margin-bottom:6px;font-family:var(--gl-fd);}
.gradelab .gl-avg-target,.gradelab .gl-avg-remain{width:60px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:40px;margin:0 2px;}
.gradelab .gl-avg-want-out{margin-top:8px;color:var(--gl-ink);}
.gradelab .gl-avg-want-out strong{color:var(--gl-brand-700);}
.gradelab .gl-avg-class-help{font-size:13px;color:var(--gl-muted);margin:0 0 12px;}
.gradelab .gl-avg-srow,.gradelab .gl-avg-srow-head{display:grid;grid-template-columns:1fr 92px 96px 40px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-avg-srow-pts,.gradelab .gl-avg-srow.gl-avg-srow-head.gl-avg-pts{grid-template-columns:1fr 80px 80px 92px 40px;}
.gradelab .gl-avg-srow-head span{font-size:11px;color:var(--gl-muted);font-weight:700;text-transform:uppercase;letter-spacing:.05em;}
.gradelab .gl-avg-sgrade{font-weight:700;font-size:14px;color:var(--gl-muted);font-variant-numeric:tabular-nums;text-align:right;}
.gradelab .gl-avg-sgrade.band-a{color:var(--gl-a);}.gradelab .gl-avg-sgrade.band-b{color:var(--gl-b);}.gradelab .gl-avg-sgrade.band-c{color:var(--gl-c);}.gradelab .gl-avg-sgrade.band-d{color:var(--gl-d);}.gradelab .gl-avg-sgrade.band-f{color:var(--gl-f);}
.gradelab .gl-avg-srm{border:none;background:var(--gl-surface-3);color:var(--gl-muted);border-radius:var(--gl-r-md);height:44px;cursor:pointer;font-size:20px;line-height:1;}
.gradelab .gl-avg-srm:hover{background:var(--gl-f-bg);color:var(--gl-f);}
.gradelab .gl-avg-passlab{display:inline-flex;align-items:center;gap:6px;font-size:14px;color:var(--gl-body);margin:12px 0 0;}
.gradelab .gl-avg-pass{width:64px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:40px;}
.gradelab .gl-avg-classresult{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:16px;padding:14px 16px;background:var(--gl-surface-2);border:1px solid var(--gl-line);border-radius:var(--gl-r-md);font-size:14px;}
.gradelab .gl-avg-classresult strong{color:var(--gl-ink);font-family:var(--gl-fd);font-weight:700;}
@media(max-width:560px){
  .gradelab .gl-avg-row,.gradelab .gl-avg-row-head{grid-template-columns:1fr 76px 40px;}
  .gradelab .gl-avg-row-pts,.gradelab .gl-avg-row.gl-avg-row-head.gl-avg-pts{grid-template-columns:1fr 66px 66px 40px;}
  .gradelab .gl-avg-srow,.gradelab .gl-avg-srow-head{grid-template-columns:1fr 60px 80px 40px;gap:6px;}
  .gradelab .gl-avg-srow-pts,.gradelab .gl-avg-srow.gl-avg-srow-head.gl-avg-pts{grid-template-columns:1fr 56px 56px 76px 38px;}
  .gradelab .gl-avg-sgrade{font-size:12px;}
  .gradelab .gl-avg-classresult{gap:6px 16px;}
}
/* Grade Percentage Calculator (mode='percentage') — scoped under .gradelab, reuses shared tokens */
.gradelab .gl-pct{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:var(--gl-shadow);max-width:720px;margin:0 auto;text-align:left;}
.gradelab .gl-pct-pane{padding:20px;}
.gradelab .gl-pct-inputs{display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:end;}
.gradelab .gl-pct-field{display:flex;flex-direction:column;gap:6px;min-width:0;}
.gradelab .gl-pct-lab{font-size:13px;font-weight:600;color:var(--gl-body);}
.gradelab .gl-pct-slash{font-family:var(--gl-fd);font-size:26px;color:var(--gl-muted);padding-bottom:10px;line-height:1;}
.gradelab .gl-pct-earned,.gradelab .gl-pct-possible{font-size:19px;font-weight:600;text-align:center;min-height:52px;}
.gradelab .gl-pct-opts{display:flex;flex-wrap:wrap;align-items:center;gap:4px 18px;margin:12px 0 0;}
.gradelab .gl-pct-swap{border:none;background:none;color:var(--gl-brand-700);font:inherit;font-size:13px;font-weight:600;cursor:pointer;padding:6px 0;text-decoration:underline;text-underline-offset:2px;min-height:40px;}
.gradelab .gl-pct-hint{font-size:12px;color:var(--gl-muted);}
.gradelab .gl-pct .gl-result{margin:14px 0 0;}
.gradelab .gl-pct-target{margin:14px 0 0;}
.gradelab .gl-pct-target>summary{padding:8px 0;}
.gradelab .gl-pct-target-inner{padding:12px 16px;background:var(--gl-brand-50);border-radius:var(--gl-r-md);font-size:14px;color:var(--gl-body);}
.gradelab .gl-pct-goal{width:64px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:44px;margin:0 2px;background:var(--gl-surface);color:var(--gl-ink);}
.gradelab .gl-pct-goal:focus{outline:2px solid var(--gl-brand-500);outline-offset:1px;border-color:var(--gl-brand-500);}
.gradelab .gl-pct-target-out{margin-top:8px;color:var(--gl-ink);}
.gradelab .gl-pct-target-out strong{color:var(--gl-brand-700);}
@media(max-width:560px){.gradelab .gl-pct-inputs{gap:8px;}.gradelab .gl-pct-slash{font-size:20px;}.gradelab .gl-pct-earned,.gradelab .gl-pct-possible{font-size:17px;}}

/* College Grade Calculator (mode='college') — single-course weighted -> % + letter + 4.0/± GPA, plus grade-needed-on-final. Scoped under .gradelab, reuses shared tokens. */
.gradelab .gl-col{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:var(--gl-shadow);max-width:720px;margin:0 auto;text-align:left;}
.gradelab .gl-col-pane{padding:16px 20px 20px;}
.gradelab .gl-col-typebar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;margin:2px 0 6px;}
.gradelab .gl-col-pmwrap{display:inline-flex;margin:0;}
.gradelab .gl-col-rows{min-width:360px;}
.gradelab .gl-col-row,.gradelab .gl-col-row-head{display:grid;grid-template-columns:1fr 116px 78px 40px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-col-row-pts,.gradelab .gl-col-row-head.gl-col-pts{grid-template-columns:1fr 150px 66px 38px;}
.gradelab .gl-col-row-head span{font-size:11px;color:var(--gl-muted);font-weight:700;text-transform:uppercase;letter-spacing:.05em;}
.gradelab .gl-col-ptscell{display:flex;align-items:center;gap:5px;min-width:0;}
.gradelab .gl-col-ptscell .gl-input{flex:1;min-width:0;padding:10px 6px;text-align:center;}
.gradelab .gl-col-ptsslash{font-family:var(--gl-fd);color:var(--gl-muted);font-size:18px;line-height:1;}
.gradelab .gl-col-rm{border:none;background:var(--gl-surface-3);color:var(--gl-muted);border-radius:var(--gl-r-md);height:44px;cursor:pointer;font-size:20px;line-height:1;}
.gradelab .gl-col-rm:hover{background:var(--gl-f-bg);color:var(--gl-f);}
.gradelab .gl-col-add{width:100%;margin:4px 0 0;}
.gradelab .gl-col .gl-result{margin:16px 0 0;}
.gradelab .gl-col-credits-wrap{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--gl-muted);margin-top:14px;flex-wrap:wrap;justify-content:center;}
.gradelab .gl-col-credits{width:72px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:40px;background:var(--gl-surface);color:var(--gl-ink);}
.gradelab .gl-col-qp{font-size:14px;color:var(--gl-body);margin-top:10px;}
.gradelab .gl-col-qp strong{color:var(--gl-brand-700);font-family:var(--gl-fd);}
.gradelab .gl-col-b-help{font-size:13px;color:var(--gl-muted);margin:2px 0 14px;}
.gradelab .gl-col-b-inputs{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}
.gradelab .gl-col-field{display:flex;flex-direction:column;gap:6px;min-width:0;}
.gradelab .gl-col-lab{font-size:13px;font-weight:600;color:var(--gl-body);}
.gradelab .gl-col-note{font-size:12px;color:var(--gl-muted);font-style:italic;margin:0;padding:14px 20px 18px;border-top:1px solid var(--gl-line);}
@media(max-width:640px){
  .gradelab .gl-col-b-inputs{grid-template-columns:1fr;}
}
@media(max-width:560px){
  .gradelab .gl-col-rows{min-width:340px;}
}

/* Points-Based Grade Calculator (mode='points') — total-points gradebook: sum points earned / points possible -> running total + % + letter + GPA + pass/fail. Scoped under .gradelab, reuses shared tokens. NO weight column (that is the weighted sibling). */
.gradelab .gl-pts{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:var(--gl-shadow);max-width:720px;margin:0 auto;text-align:left;}
.gradelab .gl-pts-pmwrap{display:inline-flex;margin:0;}
.gradelab .gl-pts-pane{padding:16px 20px 20px;}
.gradelab .gl-pts-rows{margin:10px 0 0;}
.gradelab .gl-pts-row,.gradelab .gl-pts-row-head{display:grid;grid-template-columns:1fr 92px 92px 40px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-pts-row-head span{font-size:11px;color:var(--gl-muted);font-weight:700;text-transform:uppercase;letter-spacing:.05em;}
.gradelab .gl-pts-rm{border:none;background:var(--gl-surface-3);color:var(--gl-muted);border-radius:var(--gl-r-md);height:44px;cursor:pointer;font-size:20px;line-height:1;}
.gradelab .gl-pts-rm:hover{background:var(--gl-f-bg);color:var(--gl-f);}
.gradelab .gl-pts-add{width:100%;margin:4px 0 0;}
.gradelab .gl-pts-xc-wrap{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:16px 0 0;padding:12px 16px;background:var(--gl-surface-2);border:1px solid var(--gl-line);border-radius:var(--gl-r-md);font-size:14px;color:var(--gl-body);}
.gradelab .gl-pts-xc{width:96px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:40px;background:var(--gl-surface);color:var(--gl-ink);}
.gradelab .gl-pts-xc:focus{outline:2px solid var(--gl-brand-500);outline-offset:1px;border-color:var(--gl-brand-500);}
.gradelab .gl-pts .gl-result{margin:16px 0 0;}
.gradelab .gl-pts-total{display:inline-flex;align-items:baseline;gap:8px;font-family:var(--gl-fd);font-weight:700;font-size:clamp(24px,7vw,30px);color:var(--gl-ink);background:var(--gl-surface-3);border-radius:999px;padding:7px 18px;margin:2px 0 8px;font-variant-numeric:tabular-nums;}
.gradelab .gl-pts-total-sep{color:var(--gl-muted);font-weight:600;}
.gradelab .gl-pts-total-unit{font-size:12px;font-weight:700;color:var(--gl-muted);text-transform:uppercase;letter-spacing:.05em;}
.gradelab .gl-pts .gl-result-num{font-size:clamp(38px,9vw,52px);}
.gradelab .gl-pts-plan,.gradelab .gl-pts-scale-wrap{margin:14px 0 0;}
.gradelab .gl-pts-plan>summary,.gradelab .gl-pts-scale-wrap>summary{padding:8px 0;}
.gradelab .gl-pts-plan-inner{padding:12px 16px;background:var(--gl-brand-50);border-radius:var(--gl-r-md);font-size:14px;color:var(--gl-body);margin-top:8px;}
.gradelab .gl-pts-goal,.gradelab .gl-pts-remain{width:64px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:44px;margin:0 2px;background:var(--gl-surface);color:var(--gl-ink);}
.gradelab .gl-pts-goal:focus,.gradelab .gl-pts-remain:focus{outline:2px solid var(--gl-brand-500);outline-offset:1px;border-color:var(--gl-brand-500);}
.gradelab .gl-pts-plan-out{margin-top:8px;color:var(--gl-ink);}
.gradelab .gl-pts-plan-out strong{color:var(--gl-brand-700);}
.gradelab .gl-pts-scale-inner{padding:8px 0 0;}
.gradelab .gl-pts-scale-help{font-size:13px;color:var(--gl-muted);margin:0 0 12px;}
.gradelab .gl-pts-scale{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;}
.gradelab .gl-pts-cutrow{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--gl-body);}
.gradelab .gl-pts-cutletter{display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:22px;border-radius:6px;color:#fff;font-weight:700;font-size:12px;padding:0 6px;}
.gradelab .gl-pts-cutletter.band-a{background:var(--gl-a);}
.gradelab .gl-pts-cutletter.band-b{background:var(--gl-b);}
.gradelab .gl-pts-cutletter.band-c{background:var(--gl-c);}
.gradelab .gl-pts-cutletter.band-d{background:var(--gl-d);}
.gradelab .gl-pts-cutletter.band-f{background:var(--gl-f);}
.gradelab .gl-pts-cut{width:54px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:34px;background:var(--gl-surface);color:var(--gl-ink);}
.gradelab .gl-pts-cutnote{font-size:12px;color:var(--gl-muted);width:100%;}
.gradelab .gl-pts-scale-opts{display:flex;flex-wrap:wrap;gap:8px 20px;align-items:center;margin:14px 0 0;}
.gradelab .gl-pts-passlab{display:inline-flex;align-items:center;gap:6px;font-size:14px;color:var(--gl-body);}
.gradelab .gl-pts-pass{width:60px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:40px;background:var(--gl-surface);color:var(--gl-ink);}
.gradelab .gl-pts-scale-reset{margin-top:12px;border:none;background:none;color:var(--gl-brand-700);font:inherit;font-size:13px;font-weight:600;cursor:pointer;padding:6px 0;text-decoration:underline;text-underline-offset:2px;}
@media(max-width:560px){
  .gradelab .gl-pts-row,.gradelab .gl-pts-row-head{grid-template-columns:1fr 66px 66px 40px;gap:6px;}
}

/* ---------- Class Grade Calculator (gl-cls) — v2.12.0 ---------- */
.gradelab .gl-cls{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:var(--gl-shadow);max-width:720px;margin:0 auto;text-align:left;}
.gradelab .gl-cls-pane{padding:16px 20px 20px;}
.gradelab .gl-cls-block{margin:0 0 18px;}
.gradelab .gl-cls-blockhead{display:flex;align-items:baseline;justify-content:space-between;gap:6px 12px;flex-wrap:wrap;margin:0 0 4px;}
.gradelab .gl-cls-blocktitle{font-family:var(--gl-fd);font-weight:700;font-size:15px;color:var(--gl-ink);}
.gradelab .gl-cls-blocksub{font-size:12px;color:var(--gl-muted);}
.gradelab .gl-cls-grows,.gradelab .gl-cls-urows{margin:8px 0 0;}
.gradelab .gl-cls-grow,.gradelab .gl-cls-grow-head{display:grid;grid-template-columns:1fr 92px 92px 40px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-cls-urow,.gradelab .gl-cls-urow-head{display:grid;grid-template-columns:1fr 92px 40px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-cls-grow-head span,.gradelab .gl-cls-urow-head span{font-size:11px;color:var(--gl-muted);font-weight:700;text-transform:uppercase;letter-spacing:.05em;}
.gradelab .gl-cls-grm,.gradelab .gl-cls-urm{border:none;background:var(--gl-surface-3);color:var(--gl-muted);border-radius:var(--gl-r-md);height:44px;cursor:pointer;font-size:20px;line-height:1;}
.gradelab .gl-cls-grm:hover,.gradelab .gl-cls-urm:hover{background:var(--gl-f-bg);color:var(--gl-f);}
.gradelab .gl-cls-gadd,.gradelab .gl-cls-uadd{width:100%;margin:4px 0 0;}
.gradelab .gl-cls-adj{margin:2px 0 0;}
.gradelab .gl-cls-adj>summary{padding:8px 0;}
.gradelab .gl-cls-adj-inner{display:flex;flex-wrap:wrap;gap:10px 22px;align-items:center;padding:12px 16px;margin-top:8px;background:var(--gl-surface-2);border:1px solid var(--gl-line);border-radius:var(--gl-r-md);font-size:14px;color:var(--gl-body);}
.gradelab .gl-cls-xclab{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;}
.gradelab .gl-cls-xc{width:74px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:40px;background:var(--gl-surface);color:var(--gl-ink);}
.gradelab .gl-cls-xc:focus,.gradelab .gl-cls-target:focus{outline:2px solid var(--gl-brand-500);outline-offset:1px;border-color:var(--gl-brand-500);}
.gradelab .gl-cls-wtnote{margin:14px 0 0;padding:10px 14px;border-radius:var(--gl-r-md);background:var(--gl-c-bg);border:1px solid #fde68a;color:#713F12;font-size:13px;}
.gradelab .gl-cls-wtnote:empty{display:none;}
.gradelab .gl-cls .gl-result{margin:16px 0 0;}
.gradelab .gl-cls .gl-result-num{font-size:clamp(40px,10vw,60px);}
.gradelab .gl-cls-basis{font-size:13px;color:var(--gl-muted);margin-top:8px;}
.gradelab .gl-cls-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:12px 0 0;}
.gradelab .gl-cls-stat{background:var(--gl-surface-2);border:1px solid var(--gl-line);border-radius:var(--gl-r-md);padding:12px 14px;text-align:center;}
.gradelab .gl-cls-stat-v{display:block;font-family:var(--gl-fd);font-weight:700;font-size:26px;line-height:1.15;color:var(--gl-ink);font-variant-numeric:tabular-nums;}
.gradelab .gl-cls-stat-l{display:block;font-size:11px;color:var(--gl-muted);text-transform:uppercase;letter-spacing:.05em;margin-top:3px;}
.gradelab .gl-cls-cases{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:10px 0 0;}
.gradelab .gl-cls-case{border:1px solid var(--gl-line);border-radius:var(--gl-r-md);padding:12px 14px;background:var(--gl-surface);}
.gradelab .gl-cls-case-l{display:block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--gl-muted);}
.gradelab .gl-cls-case-v{display:inline-block;font-family:var(--gl-fd);font-weight:700;font-size:26px;line-height:1.2;color:var(--gl-ink);font-variant-numeric:tabular-nums;margin-top:2px;}
.gradelab .gl-cls-case-b{display:inline-block;font-weight:700;font-size:12px;padding:2px 9px;border-radius:999px;margin-left:8px;background:var(--gl-surface-3);color:var(--gl-ink);}
.gradelab .gl-cls-case-b.band-a{background:var(--gl-a);color:#fff;}
.gradelab .gl-cls-case-b.band-b{background:var(--gl-b);color:#fff;}
.gradelab .gl-cls-case-b.band-c{background:var(--gl-c);color:#fff;}
.gradelab .gl-cls-case-b.band-d{background:var(--gl-d);color:#fff;}
.gradelab .gl-cls-case-b.band-f{background:var(--gl-f);color:#fff;}
.gradelab .gl-cls-case-s{display:block;font-size:12px;color:var(--gl-muted);margin-top:2px;}
.gradelab .gl-cls-targets{margin:18px 0 0;}
.gradelab .gl-cls-targets-h{font-family:var(--gl-fd);font-weight:700;font-size:15px;color:var(--gl-ink);margin:0 0 8px;}
.gradelab .gl-cls-table{width:100%;border-collapse:collapse;font-size:14px;min-width:430px;}
.gradelab .gl-cls-table th{text-align:left;font-size:11px;color:var(--gl-muted);text-transform:uppercase;letter-spacing:.05em;font-weight:700;padding:6px 8px;border-bottom:1px solid var(--gl-line);}
.gradelab .gl-cls-table td{padding:9px 8px;border-bottom:1px solid var(--gl-line);color:var(--gl-body);vertical-align:middle;font-variant-numeric:tabular-nums;}
.gradelab .gl-cls-tl{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:22px;border-radius:6px;color:#fff;font-weight:700;font-size:12px;padding:0 7px;}
.gradelab .gl-cls-tl.band-a{background:var(--gl-a);}
.gradelab .gl-cls-tl.band-b{background:var(--gl-b);}
.gradelab .gl-cls-tl.band-c{background:var(--gl-c);}
.gradelab .gl-cls-tl.band-d{background:var(--gl-d);}
.gradelab .gl-cls-tl.band-f{background:var(--gl-f);}
.gradelab .gl-cls-st{font-weight:600;display:block;}
.gradelab .gl-cls-table tr.is-ok .gl-cls-st{color:var(--gl-a);}
.gradelab .gl-cls-table tr.is-locked .gl-cls-st{color:var(--gl-brand-700);}
.gradelab .gl-cls-table tr.is-out .gl-cls-st{color:var(--gl-f);}
.gradelab .gl-cls-table tr.is-out td{color:var(--gl-muted);}
.gradelab .gl-cls-tnote{display:block;font-size:11px;font-weight:400;color:var(--gl-muted);}
.gradelab .gl-cls-empty{color:var(--gl-muted);font-size:13px;}
.gradelab .gl-cls-tgtwrap{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:14px;color:var(--gl-body);margin:12px 0 0;}
.gradelab .gl-cls-target{width:70px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;font:inherit;text-align:center;min-height:40px;margin:0 2px;background:var(--gl-surface);color:var(--gl-ink);}
.gradelab .gl-cls-gran{font-size:14px;color:var(--gl-ink);margin:10px 0 0;}
.gradelab .gl-cls-gran:empty{display:none;}
.gradelab .gl-cls-note{font-size:12px;color:var(--gl-muted);margin:16px 0 0;}
@media(max-width:560px){
  .gradelab .gl-cls-grow,.gradelab .gl-cls-grow-head{grid-template-columns:1fr 66px 66px 40px;gap:6px;}
  .gradelab .gl-cls-urow,.gradelab .gl-cls-urow-head{grid-template-columns:1fr 66px 40px;gap:6px;}
  .gradelab .gl-cls-stats,.gradelab .gl-cls-cases{grid-template-columns:1fr;}
  .gradelab .gl-cls-pane{padding:14px 14px 18px;}
}
/* CLS RESERVE: initClass() injects the four D/C/B/A target rows (4 x 42px), the basis line and the
   best-case sub-line after DOMContentLoaded. Without reserved space the panel shifted ~288px on every load.
   Measured on the live preview; min-height only prevents collapse, so taller mobile rows still fit. */
.gradelab .gl-cls-table{min-height:198px}
.gradelab .gl-cls-basis{min-height:21px}
.gradelab .gl-cls-case-b{min-height:23px}

/* ---------- Overall grade calculator (mode: overall) ---------- */
.gradelab .gl-ovr-pane{margin-top:14px}
.gradelab .gl-ovr-switches{display:flex;flex-wrap:wrap;gap:14px 26px;margin-bottom:14px}
.gradelab .gl-ovr-sw{display:flex;flex-direction:column;gap:6px}
.gradelab .gl-ovr-sw-l{font-size:13px;font-weight:600;color:var(--gl-muted)}
.gradelab .gl-ovr-unitwrap[hidden]{display:none}
.gradelab .gl-ovr-rows{display:flex;flex-direction:column;gap:8px;min-width:400px}
.gradelab .gl-ovr-row,.gradelab .gl-ovr-row-head{display:grid;grid-template-columns:1fr 116px 116px 40px;gap:8px;align-items:center}
.gradelab .gl-ovr-equal .gl-ovr-row,.gradelab .gl-ovr-equal .gl-ovr-row-head{grid-template-columns:1fr 116px 40px}
.gradelab .gl-ovr-equal .gl-ovr-weight,.gradelab .gl-ovr-equal .gl-ovr-whead{display:none}
.gradelab .gl-ovr .gl-rm{padding:0;width:40px;min-width:0;justify-self:end}
.gradelab .gl-ovr-row-head{font-size:12px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--gl-muted)}
.gradelab .gl-ovr-row-head span{padding:0 2px}
.gradelab .gl-ovr-add{margin-top:10px}
.gradelab .gl-ovr-result{min-height:190px}
.gradelab .gl-ovr-totalw{min-height:20px}
.gradelab .gl-ovr-breakdown{width:100%;border-collapse:collapse;font-size:14px;min-width:460px}
.gradelab .gl-ovr-breakdown th,.gradelab .gl-ovr-breakdown td{padding:8px 10px;text-align:right;border-bottom:1px solid var(--gl-line)}
.gradelab .gl-ovr-breakdown th:first-child,.gradelab .gl-ovr-breakdown td:first-child{text-align:left}
.gradelab .gl-ovr-breakdown thead th{font-size:12px;text-transform:uppercase;letter-spacing:.02em;color:var(--gl-muted);font-weight:600}
.gradelab .gl-ovr-breakdown tfoot td{border-bottom:0;border-top:2px solid var(--gl-line);font-weight:600}
.gradelab .gl-ovr-bd .gl-table-wrap{min-height:180px}
.gradelab .gl-ovr-drag{margin-top:10px;font-size:14px;line-height:1.55;color:var(--gl-ink);min-height:22px}
.gradelab .gl-ovr-plan-inner{font-size:15px;line-height:1.9}
.gradelab .gl-ovr-plan-inner .gl-ovr-target,.gradelab .gl-ovr-plan-inner .gl-ovr-remain{width:74px;display:inline-block;margin:0 2px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;background:var(--gl-surface);color:var(--gl-ink);font:inherit;font-size:15px;text-align:center}
.gradelab .gl-ovr-plan-inner .gl-ovr-target:focus,.gradelab .gl-ovr-plan-inner .gl-ovr-remain:focus{outline:2px solid var(--gl-accent);outline-offset:1px}
.gradelab .gl-ovr-plan-out{margin-top:8px;font-size:14px;line-height:1.6;min-height:22px}
@media (max-width:640px){
  .gradelab .gl-ovr-switches{gap:12px 18px}
  .gradelab .gl-ovr-rows{min-width:320px}
  .gradelab .gl-ovr-row,.gradelab .gl-ovr-row-head{grid-template-columns:1fr 74px 74px 40px;gap:6px}
  .gradelab .gl-ovr-equal .gl-ovr-row,.gradelab .gl-ovr-equal .gl-ovr-row-head{grid-template-columns:1fr 74px 40px}
  .gradelab .gl-ovr-plan-inner{line-height:2.1}
}

/* ---------- Assignment grade calculator (mode: assign) ---------- */
.gradelab .gl-asg-pane{margin-top:14px}
.gradelab .gl-asg-sw{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.gradelab .gl-asg-sw-l{font-size:13px;font-weight:600;color:var(--gl-muted)}
.gradelab .gl-asg-fields{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;margin-bottom:14px}
.gradelab .gl-asg-fields[hidden]{display:none}
.gradelab .gl-asg-f{display:flex;flex-direction:column;gap:6px;min-width:0}
.gradelab .gl-asg-f-l{font-size:13px;font-weight:600;color:var(--gl-muted);line-height:1.35}
.gradelab .gl-asg-f-in{display:flex;align-items:center;gap:8px;min-width:0}
.gradelab .gl-asg-f-in .gl-input{flex:1 1 auto;min-width:0}
.gradelab .gl-asg-f-u{font-style:normal;font-size:13px;color:var(--gl-muted);white-space:nowrap;flex:0 0 auto}
.gradelab .gl-asg-dropwrap{display:inline-flex;align-items:center;gap:8px;margin:2px 0 16px;font-size:14px}
.gradelab .gl-asg-result{min-height:250px}
.gradelab .gl-asg-delta{margin-top:10px;font-size:15px;line-height:1.55;color:var(--gl-ink);min-height:24px}
.gradelab .gl-asg-sub{min-height:20px}
.gradelab .gl-asg-ladder{width:100%;border-collapse:collapse;font-size:14px;min-width:420px}
.gradelab .gl-asg-ladder th,.gradelab .gl-asg-ladder td{padding:8px 10px;text-align:right;border-bottom:1px solid var(--gl-line)}
.gradelab .gl-asg-ladder th:first-child,.gradelab .gl-asg-ladder td:first-child{text-align:left}
.gradelab .gl-asg-ladder thead th{font-size:12px;text-transform:uppercase;letter-spacing:.02em;color:var(--gl-muted);font-weight:600}
.gradelab .gl-asg-ladder tbody tr.gl-asg-zero{background:var(--gl-f-bg)}
.gradelab .gl-asg-ladder tbody tr.gl-asg-zero td{font-weight:600}
.gradelab .gl-asg-bd .gl-table-wrap{min-height:300px}
.gradelab .gl-asg-note{margin-top:10px;font-size:14px;line-height:1.55;color:var(--gl-ink);min-height:22px}
.gradelab .gl-asg-plan-inner{font-size:15px;line-height:1.9}
.gradelab .gl-asg-plan-inner .gl-asg-target{width:74px;display:inline-block;margin:0 2px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;background:var(--gl-surface);color:var(--gl-ink);font:inherit;font-size:15px;text-align:center}
.gradelab .gl-asg-plan-inner .gl-asg-target:focus{outline:2px solid var(--gl-accent);outline-offset:1px}
.gradelab .gl-asg-plan-out{margin-top:8px;font-size:14px;line-height:1.6;min-height:22px}
.gradelab .gl-asg-bd>summary,.gradelab .gl-asg-plan>summary{padding:9px 0;min-height:24px}
@media (max-width:640px){
  .gradelab .gl-asg-fields{grid-template-columns:1fr;gap:12px}
  .gradelab .gl-asg-ladder{min-width:318px}
  .gradelab .gl-asg-plan-inner{line-height:2.1}
}

/* ---------- Course grade calculator (mode: course) ---------- */
.gradelab .gl-crs-pane{margin-top:14px}
.gradelab .gl-crs-hint{font-size:13px;line-height:1.55;color:var(--gl-muted);margin:0 0 14px}
.gradelab .gl-crs-comps{display:flex;flex-direction:column;gap:10px;min-width:460px}
.gradelab .gl-crs-crow{display:grid;grid-template-columns:1fr 104px 104px 68px 40px;gap:8px;align-items:center}
.gradelab .gl-crs-crow-head{font-size:12px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--gl-muted)}
.gradelab .gl-crs-crow-head span{padding:0 2px}
.gradelab .gl-crs-comp{border:1px solid var(--gl-line);border-radius:var(--gl-r-md);padding:10px;background:var(--gl-surface-2)}
.gradelab .gl-crs-exp{border:1px solid var(--gl-line);background:var(--gl-surface);color:var(--gl-muted);border-radius:var(--gl-r-md);height:44px;padding:0 8px;font-size:12px;font-weight:600;cursor:pointer;text-transform:uppercase;letter-spacing:.02em}
.gradelab .gl-crs-exp:hover{color:var(--gl-brand);border-color:var(--gl-brand)}
.gradelab .gl-crs-comp[data-open="1"] .gl-crs-exp{background:var(--gl-brand-50);color:var(--gl-brand-700);border-color:var(--gl-brand-50)}
.gradelab .gl-crs .gl-rm{padding:0;width:40px;min-width:0;justify-self:end}
.gradelab .gl-crs-comp[data-open="1"] .gl-crs-grade.is-computed{background:var(--gl-surface-3) !important;color:var(--gl-muted) !important;font-weight:600 !important}
.gradelab .gl-crs-comp[data-open="0"] .gl-crs-grade{background:var(--gl-surface);color:var(--gl-ink);font-weight:400}
.gradelab .gl-crs-subs{display:none;margin:10px 0 0;padding:10px 0 0;border-top:1px dashed var(--gl-line)}
.gradelab .gl-crs-comp[data-open="1"] .gl-crs-subs{display:block}
.gradelab .gl-crs-sub,.gradelab .gl-crs-subhead{display:grid;grid-template-columns:1fr 92px 92px 40px;gap:8px;align-items:center;margin-bottom:8px}
.gradelab .gl-crs-subhead{font-size:11px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--gl-muted)}
.gradelab .gl-crs-subadd{margin:2px 0 0;background:none;border:0;color:var(--gl-brand);font:inherit;font-size:13px;font-weight:600;cursor:pointer;padding:6px 0}
.gradelab .gl-crs-subadd:hover{text-decoration:underline}
.gradelab .gl-crs-add{margin-top:12px}
.gradelab .gl-crs-result{min-height:210px}
.gradelab .gl-crs-sub-line{min-height:20px}
.gradelab .gl-crs-breakdown{width:100%;border-collapse:collapse;font-size:14px;min-width:470px}
.gradelab .gl-crs-breakdown th,.gradelab .gl-crs-breakdown td{padding:8px 10px;text-align:right;border-bottom:1px solid var(--gl-line)}
.gradelab .gl-crs-breakdown th:first-child,.gradelab .gl-crs-breakdown td:first-child{text-align:left}
.gradelab .gl-crs-breakdown thead th{font-size:12px;text-transform:uppercase;letter-spacing:.02em;color:var(--gl-muted);font-weight:600}
.gradelab .gl-crs-breakdown tfoot td{border-bottom:0;border-top:2px solid var(--gl-line);font-weight:600}
.gradelab .gl-crs-bd .gl-table-wrap{min-height:150px}
.gradelab .gl-crs-diag{margin-top:10px;font-size:14px;line-height:1.55;color:var(--gl-ink);min-height:22px}
.gradelab .gl-crs-bd>summary,.gradelab .gl-crs-plan>summary{padding:9px 0;min-height:24px}
.gradelab .gl-crs-plan-inner{font-size:15px;line-height:1.9}
.gradelab .gl-crs-plan-inner .gl-crs-target{width:74px;display:inline-block;margin:0 2px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;background:var(--gl-surface);color:var(--gl-ink);font:inherit;font-size:15px;text-align:center}
.gradelab .gl-crs-plan-inner .gl-crs-pick{margin:0 2px;padding:6px 8px;border:1px solid var(--gl-line);border-radius:8px;background:var(--gl-surface);color:var(--gl-ink);font:inherit;font-size:15px;max-width:190px}
.gradelab .gl-crs-plan-inner .gl-crs-target:focus,.gradelab .gl-crs-plan-inner .gl-crs-pick:focus{outline:2px solid var(--gl-accent);outline-offset:1px}
.gradelab .gl-crs-plan-out{margin-top:8px;font-size:14px;line-height:1.6;min-height:22px}
@media (max-width:640px){
  .gradelab .gl-crs-comps{min-width:0}
  .gradelab .gl-crs-crow-head{display:none}
  .gradelab .gl-crs-comp .gl-crs-crow{grid-template-columns:1fr 1fr 60px 40px;gap:6px}
  .gradelab .gl-crs-comp .gl-crs-name{grid-column:1 / -1}
  .gradelab .gl-crs-sub,.gradelab .gl-crs-subhead{grid-template-columns:1fr 58px 58px 36px;gap:6px}
  .gradelab .gl-crs-breakdown{min-width:320px}
  .gradelab .gl-crs-plan-inner{line-height:2.1}
  .gradelab .gl-crs-plan-inner .gl-crs-pick{max-width:150px}
}

/* ---- What-If Grade Calculator (mode: whatif) ---- */
.gradelab .gl-wif{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:var(--gl-shadow);max-width:720px;margin:0 auto;text-align:left;}
.gradelab .gl-wif-pane{padding:16px 20px 20px;}
.gradelab .gl-wif-sw{display:flex;flex-direction:column;gap:6px;margin-bottom:16px;}
.gradelab .gl-wif-sw-l{font-size:13px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-wif-rows{display:flex;flex-direction:column;gap:8px;}
.gradelab .gl-wif-row,.gradelab .gl-wif-row-head{display:grid;grid-template-columns:1fr 92px 92px 92px 56px 40px;grid-template-areas:"name act wif out drop rm";gap:8px;align-items:center;}
.gradelab .gl-wif-name,.gradelab .gl-wif-h-name{grid-area:name;min-width:0;}
.gradelab .gl-wif-act,.gradelab .gl-wif-h-act{grid-area:act;min-width:0;}
.gradelab .gl-wif-wif,.gradelab .gl-wif-h-wif{grid-area:wif;min-width:0;}
.gradelab .gl-wif-basis,.gradelab .gl-wif-h-out{grid-area:out;min-width:0;}
.gradelab .gl-wif-dropwrap,.gradelab .gl-wif-h-drop{grid-area:drop;}
.gradelab .gl-wif-rm,.gradelab .gl-wif-h-rm{grid-area:rm;}
.gradelab .gl-wif-row-head span{font-size:11px;color:var(--gl-muted);font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:0 2px;}
.gradelab .gl-wif-row-head .gl-wif-h-drop{text-align:center;padding:0;}
.gradelab .gl-wif-wif{background:var(--gl-brand-50);border-color:var(--gl-brand-500);}
.gradelab .gl-wif-row-head .gl-wif-h-wif{color:var(--gl-brand-700);}
.gradelab .gl-wif-dropwrap{display:flex;align-items:center;justify-content:center;gap:6px;min-height:44px;cursor:pointer;}
.gradelab .gl-wif-dropwrap input{width:20px;height:20px;margin:0;cursor:pointer;flex:0 0 auto;}
.gradelab .gl-wif-dropx{display:none;font-size:12px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-wif-row.gl-wif-dropped .gl-input{opacity:.45;}
.gradelab .gl-wif .gl-add{margin:12px 0 10px;width:100%;}
.gradelab .gl-wif-hint{margin:0 0 12px;font-size:13px;line-height:1.6;color:var(--gl-muted);}
.gradelab .gl-wif-zerowrap{display:inline-flex;align-items:center;gap:8px;margin:0 0 16px;font-size:14px;min-height:26px;}
.gradelab .gl-wif-zerowrap input{width:20px;height:20px;margin:0;flex:0 0 auto;}
.gradelab .gl-wif-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:0 0 12px;}
.gradelab .gl-wif-card{border:1px solid var(--gl-line);border-radius:var(--gl-r-md);padding:14px 10px;background:var(--gl-surface-2);text-align:center;transition:background .2s,border-color .2s;}
.gradelab .gl-wif-card-l{display:block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#475569;line-height:1.3;}
.gradelab .gl-wif-card-v{display:block;font-family:var(--gl-fd);font-weight:700;font-size:clamp(22px,6.4vw,30px);line-height:1.15;color:var(--gl-ink);font-variant-numeric:tabular-nums;margin-top:6px;}
.gradelab .gl-wif-card-b{display:inline-block;font-size:12px;font-weight:700;padding:3px 10px;border-radius:999px;margin-top:8px;background:var(--gl-surface-3);color:var(--gl-ink);}
.gradelab .gl-wif-card-b:empty{visibility:hidden;}
.gradelab .gl-wif-card.band-a{background:var(--gl-a-bg);border-color:#bbf7d0;}
.gradelab .gl-wif-card.band-a .gl-wif-card-v{color:var(--gl-a);}
.gradelab .gl-wif-card.band-a .gl-wif-card-b{background:var(--gl-a);color:#fff;}
.gradelab .gl-wif-card.band-b{background:var(--gl-b-bg);border-color:#d9f99d;}
.gradelab .gl-wif-card.band-b .gl-wif-card-v{color:var(--gl-b);}
.gradelab .gl-wif-card.band-b .gl-wif-card-b{background:var(--gl-b);color:#fff;}
.gradelab .gl-wif-card.band-c{background:var(--gl-c-bg);border-color:#fde68a;}
.gradelab .gl-wif-card.band-c .gl-wif-card-v{color:var(--gl-c);}
.gradelab .gl-wif-card.band-c .gl-wif-card-b{background:var(--gl-c);color:#fff;}
.gradelab .gl-wif-card.band-d{background:var(--gl-d-bg);border-color:#fed7aa;}
.gradelab .gl-wif-card.band-d .gl-wif-card-v{color:var(--gl-d);}
.gradelab .gl-wif-card.band-d .gl-wif-card-b{background:var(--gl-d);color:#fff;}
.gradelab .gl-wif-card.band-f{background:var(--gl-f-bg);border-color:#fecaca;}
.gradelab .gl-wif-card.band-f .gl-wif-card-v{color:var(--gl-f);}
.gradelab .gl-wif-card.band-f .gl-wif-card-b{background:var(--gl-f);color:#fff;}
.gradelab .gl-wif-c-chg.gl-wif-up{background:var(--gl-a-bg);border-color:#bbf7d0;}
.gradelab .gl-wif-c-chg.gl-wif-up .gl-wif-card-v{color:var(--gl-a);}
.gradelab .gl-wif-c-chg.gl-wif-down{background:var(--gl-f-bg);border-color:#fecaca;}
.gradelab .gl-wif-c-chg.gl-wif-down .gl-wif-card-v{color:var(--gl-f);}
.gradelab .gl-wif-say{margin:0 0 6px;font-size:15px;line-height:1.6;color:var(--gl-ink);min-height:52px;}
.gradelab .gl-wif .gl-btn-row{margin:0 0 16px;flex-wrap:wrap;}
.gradelab .gl-wif-bd>summary{padding:9px 0;min-height:24px;}
.gradelab .gl-wif-table{width:100%;border-collapse:collapse;font-size:14px;min-width:520px;}
.gradelab .gl-wif-table th,.gradelab .gl-wif-table td{padding:8px 10px;text-align:right;border-bottom:1px solid var(--gl-line);}
.gradelab .gl-wif-table th:first-child,.gradelab .gl-wif-table td:first-child{text-align:left;}
.gradelab .gl-wif-table thead th{font-size:12px;text-transform:uppercase;letter-spacing:.02em;color:var(--gl-muted);font-weight:600;}
.gradelab .gl-wif-table td.gl-wif-up{color:var(--gl-a);}
.gradelab .gl-wif-table td.gl-wif-down{color:var(--gl-f);}
.gradelab .gl-wif-bd .gl-table-wrap{min-height:230px;}
.gradelab .gl-wif-note{margin-top:10px;font-size:14px;line-height:1.55;color:var(--gl-ink);min-height:22px;}
.gradelab .gl-wif-foot{margin:14px 0 0;font-size:13px;line-height:1.6;color:var(--gl-muted);}
@media(max-width:640px){
  .gradelab .gl-wif-pane{padding:14px 14px 18px;}
  .gradelab .gl-wif-row{grid-template-columns:1fr 1fr 1fr 56px;grid-template-areas:"name name name rm" "act wif out drop";gap:6px;}
  .gradelab .gl-wif-row-head{display:none;}
  .gradelab .gl-wif-dropx{display:inline;}
  .gradelab .gl-wif-dropwrap{gap:4px;justify-content:flex-end;}
  .gradelab .gl-wif-rm{justify-self:end;}
  .gradelab .gl-wif-rows{gap:14px;}
  .gradelab .gl-wif-cards{gap:6px;}
  .gradelab .gl-wif-card{padding:12px 5px;min-width:0;}
  .gradelab .gl-wif-card-v{font-size:clamp(17px,5vw,30px);}
  .gradelab .gl-wif-card-l{font-size:10px;letter-spacing:.03em;min-height:26px;}
  .gradelab .gl-wif-card-b{font-size:11px;padding:3px 8px;}
  .gradelab .gl-wif-table{min-width:430px;}
  .gradelab .gl-wif-say{min-height:76px;}
}
@media(max-width:400px){
  .gradelab .gl-wif-row .gl-input{padding:10px 8px;}
}

/* ---- optimizer 2.16.5: quick-fill, remember, readable measure ---- */
.gradelab .gl-wif-fills{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px;}
.gradelab .gl-wif-fills-l{font-size:13px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-wif-fills .gl-btn{padding:7px 12px;min-height:36px;font-size:13px;}
.gradelab .gl-wif-rememberwrap{display:inline-flex;align-items:center;gap:8px;margin:0 0 14px;font-size:13px;min-height:26px;}
.gradelab .gl-wif-rememberwrap input{width:18px;height:18px;margin:0;flex:0 0 auto;}

/* ---- Letter Grade Calculator (mode: letter) ---- */
.gradelab .gl-ltr{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:var(--gl-shadow);max-width:720px;margin:0 auto;text-align:left;}
.gradelab .gl-ltr-pane{padding:16px 20px 20px;}
.gradelab .gl-ltr-hint{margin:0 0 14px;font-size:13px;line-height:1.6;color:var(--gl-muted);}
.gradelab .gl-ltr-conv{display:grid;grid-template-columns:1fr 34px 1fr;gap:10px;align-items:end;margin-bottom:16px;}
.gradelab .gl-ltr-f{display:flex;flex-direction:column;gap:6px;min-width:0;}
.gradelab .gl-ltr-f-l{font-size:13px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-ltr-arrows{display:flex;align-items:center;justify-content:center;height:44px;font-size:20px;color:var(--gl-brand);}
.gradelab select.gl-ltr-letter,.gradelab select.gl-ltr-l{appearance:auto;-webkit-appearance:menulist;cursor:pointer;}
.gradelab .gl-ltr-result{min-height:250px;}
.gradelab .gl-ltr-result .gl-result-num{font-size:clamp(40px,10vw,60px);}
.gradelab .gl-ltr-work{margin-top:12px;font-size:14px;line-height:1.6;color:var(--gl-ink);text-align:left;min-height:44px;}
.gradelab .gl-ltr-sub,.gradelab .gl-ltr-asub{min-height:20px;}
.gradelab .gl-ltr-wtwrap{display:inline-flex;align-items:center;gap:8px;margin:0 0 14px;font-size:14px;min-height:26px;}
.gradelab .gl-ltr-wtwrap input{width:20px;height:20px;margin:0;flex:0 0 auto;}
.gradelab .gl-ltr-rows{display:flex;flex-direction:column;gap:8px;}
.gradelab .gl-ltr-row,.gradelab .gl-ltr-row-head{display:grid;grid-template-columns:1fr 92px 84px 40px;gap:8px;align-items:center;}
.gradelab .gl-ltr-row-head span{font-size:11px;color:var(--gl-muted);font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:0 2px;}
.gradelab .gl-ltr .gl-add{margin:12px 0 14px;width:100%;}
.gradelab .gl-ltr-aresult{min-height:230px;}
.gradelab .gl-ltr-adelta{margin-top:10px;font-size:14px;line-height:1.6;color:var(--gl-ink);min-height:22px;}
.gradelab .gl-ltr-table{width:100%;border-collapse:collapse;font-size:14px;min-width:480px;}
.gradelab .gl-ltr-table th,.gradelab .gl-ltr-table td{padding:8px 10px;text-align:right;border-bottom:1px solid var(--gl-line);}
.gradelab .gl-ltr-table th:first-child,.gradelab .gl-ltr-table td:first-child{text-align:left;}
.gradelab .gl-ltr-table thead th{font-size:12px;text-transform:uppercase;letter-spacing:.02em;color:var(--gl-muted);font-weight:600;}
.gradelab .gl-ltr-table tfoot td{border-bottom:0;border-top:2px solid var(--gl-line);font-weight:600;}
.gradelab .gl-ltr-bd .gl-table-wrap{min-height:170px;}
.gradelab .gl-ltr-bd>summary,.gradelab .gl-ltr-scale-wrap>summary{padding:9px 0;min-height:24px;}
.gradelab .gl-ltr-scale-inner{padding-top:4px;}
.gradelab .gl-ltr-scale-help{margin:0 0 12px;font-size:13px;line-height:1.6;color:var(--gl-muted);}
.gradelab .gl-ltr-presets{margin-bottom:12px;}
.gradelab .gl-ltr-scale{display:flex;flex-direction:column;gap:6px;margin-bottom:14px;}
.gradelab .gl-ltr-srow{display:grid;grid-template-columns:30px 44px 18px 72px 20px 66px 30px;gap:6px;align-items:center;}
.gradelab .gl-ltr-srow input[type=checkbox]{width:24px;height:24px;margin:0;cursor:pointer;}
.gradelab .gl-ltr-sl{display:inline-flex;align-items:center;justify-content:center;height:26px;border-radius:6px;font-weight:700;font-size:13px;background:var(--gl-surface-3);color:var(--gl-ink);}
.gradelab .gl-ltr-sl.band-a{background:var(--gl-a-bg);color:var(--gl-a);}
.gradelab .gl-ltr-sl.band-b{background:var(--gl-b-bg);color:var(--gl-b);}
.gradelab .gl-ltr-sl.band-c{background:var(--gl-c-bg);color:var(--gl-c);}
.gradelab .gl-ltr-sl.band-d{background:var(--gl-d-bg);color:var(--gl-d);}
.gradelab .gl-ltr-sl.band-f{background:var(--gl-f-bg);color:#B91C1C;}
.gradelab .gl-ltr-sge,.gradelab .gl-ltr-su{font-size:12px;color:#475569;}
.gradelab .gl-ltr-srow .gl-input{padding:7px 8px;min-height:34px;font-size:14px;text-align:center;}
.gradelab .gl-ltr-soff{opacity:.5;}
.gradelab .gl-ltr-scale-reset{width:auto;}
.gradelab .gl-ltr-foot{margin:14px 0 0;font-size:13px;line-height:1.6;color:#475569;}
@media(max-width:640px){
  .gradelab .gl-ltr-pane{padding:14px 14px 18px;}
  .gradelab .gl-ltr-conv{grid-template-columns:1fr 28px 1fr;gap:6px;}
  .gradelab .gl-ltr-row,.gradelab .gl-ltr-row-head{grid-template-columns:1fr 74px 62px 40px;gap:6px;}
  .gradelab .gl-ltr-srow{grid-template-columns:28px 36px 12px 56px 14px 52px 24px;gap:4px;}
  .gradelab .gl-ltr-srow .gl-input{padding:7px 4px;font-size:13px;}
  .gradelab .gl-ltr-table{min-width:420px;}
  .gradelab .gl-ltr-work{min-height:66px;}
  .gradelab .gl-ltr-result{min-height:280px;}
}

/* ── High School Grade Calculator (mode: hs) ───────────────────────────── */
.gradelab .gl-hs{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:0 1px 2px rgba(15,23,42,.06);overflow:hidden;}
.gradelab .gl-hs .gl-calc-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:16px 20px;border-bottom:1px solid var(--gl-line);}
.gradelab .gl-hs-pane{padding:16px 20px 4px;}
.gradelab .gl-hs-hint{margin:0 0 14px;font-size:13px;color:#475569;line-height:1.55;}
.gradelab .gl-hs-head3,.gradelab .gl-hs-head2{display:grid;gap:8px;align-items:center;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#64748b;padding:0 0 6px;}
.gradelab .gl-hs-head3{grid-template-columns:minmax(0,1.1fr) 92px minmax(0,1.6fr) 32px;}
.gradelab .gl-hs-head2{grid-template-columns:minmax(0,1.1fr) minmax(0,1.8fr) 32px;}
.gradelab .gl-hs-row{display:grid;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-hs-crow{grid-template-columns:minmax(0,1.1fr) 92px minmax(0,1.6fr) 32px;}
.gradelab .gl-hs-srow{grid-template-columns:minmax(0,1.1fr) minmax(0,1.8fr) 32px;}
.gradelab .gl-hs-row .gl-input{width:100%;min-height:40px;}
.gradelab .gl-hs-wwrap{position:relative;display:block;}
.gradelab .gl-hs-wwrap .gl-input{padding-right:26px;}
.gradelab .gl-hs-suf{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:12px;color:#64748b;pointer-events:none;}
.gradelab .gl-hs-del{width:32px;height:32px;min-width:32px;border:0;background:transparent;color:#64748B;font-size:20px;line-height:1;border-radius:8px;cursor:pointer;}
.gradelab .gl-hs-del:hover{background:#fee2e2;color:#b91c1c;}
.gradelab .gl-hs-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:10px 0 14px;}
.gradelab .gl-hs-wsum{font-size:12px;color:#64748b;}
.gradelab .gl-hs-wsum.is-ok{color:#15803d;}
.gradelab .gl-hs-wsum.is-warn{color:#a16207;}
.gradelab .gl-hs-method{margin-bottom:14px;}
.gradelab .gl-hs-f{display:block;}
.gradelab .gl-hs-f-l{display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:5px;}
.gradelab .gl-hs-method .gl-input{width:100%;min-height:44px;}
.gradelab .gl-hs-result,.gradelab .gl-hs-result2{text-align:center;padding:18px 16px;border-radius:var(--gl-r-md);margin:4px 0 14px;}
.gradelab .gl-hs-num,.gradelab .gl-hs-num2{font-size:44px;line-height:1.05;font-weight:700;margin:2px 0 6px;}
.gradelab .gl-hs-badge{margin-bottom:8px;}
.gradelab .gl-hs-letter,.gradelab .gl-hs-letter2{display:inline-block;min-width:44px;padding:4px 12px;border-radius:999px;background:rgba(255,255,255,.75);font-weight:700;font-size:15px;}
.gradelab .gl-hs-say,.gradelab .gl-hs-say2{margin:0 0 4px;font-size:14px;line-height:1.55;color:#334155;}
.gradelab .gl-hs-mover,.gradelab .gl-hs-alt{margin-top:6px;}
.gradelab .gl-hs-btns{display:flex;gap:8px;justify-content:center;margin-top:12px;}
.gradelab .gl-hs-bd-wrap,.gradelab .gl-hs-scale-wrap{border-top:1px solid var(--gl-line);margin:0 -20px;padding:0 20px;}
.gradelab .gl-hs-bd-wrap>summary,.gradelab .gl-hs-scale-wrap>summary{padding:14px 0;cursor:pointer;font-weight:600;font-size:14px;color:var(--gl-brand-700);list-style:none;}
.gradelab .gl-hs-bd-wrap>summary::-webkit-details-marker,.gradelab .gl-hs-scale-wrap>summary::-webkit-details-marker{display:none;}
.gradelab .gl-hs-bd-wrap>summary::after,.gradelab .gl-hs-scale-wrap>summary::after{content:"\25B8";display:inline-block;margin-left:6px;transition:transform .15s;}
.gradelab .gl-hs-bd-wrap[open]>summary::after,.gradelab .gl-hs-scale-wrap[open]>summary::after{transform:rotate(90deg);}
.gradelab .gl-hs-bd-wrap>.gl-table-wrap{padding-bottom:16px;}
.gradelab .gl-hs-shint{margin:0 0 12px;font-size:13px;color:#475569;line-height:1.55;}
.gradelab .gl-hs-presets{margin-bottom:14px;}
.gradelab .gl-hs-floor{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px;}
.gradelab .gl-hs-floor .gl-input{width:100%;min-height:44px;}
.gradelab .gl-hs-pmwrap{display:flex;align-items:center;gap:8px;margin-bottom:14px;font-size:13px;color:#334155;}
.gradelab .gl-hs-pmwrap input[type=checkbox]{width:24px;height:24px;accent-color:var(--gl-brand-500);}
.gradelab .gl-hs-scale{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;padding-bottom:18px;}
.gradelab .gl-hs-srw{display:flex;align-items:center;gap:6px;}
.gradelab .gl-hs-sl{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:26px;border-radius:6px;background:var(--gl-surface-3);font-weight:700;font-size:13px;}
.gradelab .gl-hs-ge{font-size:13px;color:#64748b;}
.gradelab .gl-hs-srw .gl-input{width:100%;min-height:34px;padding:4px 8px;font-size:13px;}
.gradelab .gl-hs-srw .gl-hs-suf{position:static;transform:none;}
.gradelab .gl-hs-foot{margin:0;padding:14px 20px 18px;border-top:1px solid var(--gl-line);font-size:12px;color:#64748b;line-height:1.55;}
@media (max-width:640px){
  .gradelab .gl-hs-head3,.gradelab .gl-hs-head2{display:none;}
  .gradelab .gl-hs-crow{grid-template-columns:1fr 92px 32px;grid-template-areas:"n w x" "s s s";}
  .gradelab .gl-hs-crow .gl-hs-cn{grid-area:n;}
  .gradelab .gl-hs-crow .gl-hs-wwrap{grid-area:w;}
  .gradelab .gl-hs-crow .gl-hs-del{grid-area:x;}
  .gradelab .gl-hs-crow .gl-hs-cs{grid-area:s;}
  .gradelab .gl-hs-srow{grid-template-columns:1fr 32px;grid-template-areas:"n x" "s s";}
  .gradelab .gl-hs-srow .gl-hs-sn{grid-area:n;}
  .gradelab .gl-hs-srow .gl-hs-del{grid-area:x;}
  .gradelab .gl-hs-srow .gl-hs-ss{grid-area:s;}
  .gradelab .gl-hs-row{padding-bottom:10px;border-bottom:1px dashed var(--gl-line);}
  .gradelab .gl-hs-floor{grid-template-columns:1fr;}
  .gradelab .gl-hs-num,.gradelab .gl-hs-num2{font-size:38px;}
}

/* a11y: checkbox target size, WCAG 2.5.8 */
.gradelab input[type=checkbox]{width:24px;height:24px;accent-color:var(--gl-brand-500);}

/* ── Middle School Grade Calculator (mode: ms) ─────────────────────────── */
.gradelab .gl-ms{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:0 1px 2px rgba(15,23,42,.06);overflow:hidden;max-width:720px;margin:0 auto;}
.gradelab .gl-ms .gl-calc-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:16px 20px;border-bottom:1px solid var(--gl-line);}
.gradelab .gl-ms-pane{padding:16px 20px 4px;}
.gradelab .gl-ms-hint{margin:0 0 14px;font-size:13px;color:#475569;line-height:1.55;}
.gradelab .gl-ms-head2{display:grid;grid-template-columns:minmax(0,1.4fr) 110px 32px;gap:8px;align-items:center;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#475569;padding:0 0 6px;}
.gradelab .gl-ms-row{display:grid;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-ms-prow{grid-template-columns:minmax(0,1.4fr) 110px 32px;}
.gradelab .gl-ms-row .gl-input{width:100%;min-height:44px;}
.gradelab .gl-ms-del{width:32px;height:32px;min-width:32px;border:0;background:transparent;color:#64748B;font-size:20px;line-height:1;border-radius:8px;cursor:pointer;}
.gradelab .gl-ms-del:hover{background:#fee2e2;color:#b91c1c;}
.gradelab .gl-ms-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:10px 0 14px;}
.gradelab .gl-ms-count{font-size:12px;color:#475569;}
.gradelab .gl-ms-f{display:block;margin-bottom:14px;}
.gradelab .gl-ms-f-l{display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:5px;}
.gradelab .gl-ms-f .gl-input{width:100%;min-height:44px;}
.gradelab .gl-ms-result,.gradelab .gl-ms-result2{text-align:center;padding:18px 16px;border-radius:var(--gl-r-md);margin:4px 0 14px;}
.gradelab .gl-ms-num,.gradelab .gl-ms-num2{line-height:1.05;font-weight:700;margin:2px 0 6px;}
.gradelab .gl-ms-badge{margin-bottom:8px;}
.gradelab .gl-ms-mark,.gradelab .gl-ms-mark2{display:inline-block;min-width:52px;padding:5px 14px;border-radius:999px;background:rgba(255,255,255,.8);font-weight:700;font-size:20px;}
.gradelab .gl-ms-say,.gradelab .gl-ms-say2{margin:0;font-size:14px;line-height:1.55;color:#334155;}
.gradelab .gl-ms-sub{margin-top:6px;}
.gradelab .gl-ms-btns{display:flex;gap:8px;justify-content:center;margin-top:12px;}
.gradelab .gl-ms-bd-wrap,.gradelab .gl-ms-scale-wrap{border-top:1px solid var(--gl-line);margin:0 -20px;padding:0 20px;}
.gradelab .gl-ms-bd-wrap>summary,.gradelab .gl-ms-scale-wrap>summary{padding:14px 0;cursor:pointer;font-weight:600;font-size:14px;color:var(--gl-brand-700);list-style:none;}
.gradelab .gl-ms-bd-wrap>summary::-webkit-details-marker,.gradelab .gl-ms-scale-wrap>summary::-webkit-details-marker{display:none;}
.gradelab .gl-ms-bd-wrap>summary::after,.gradelab .gl-ms-scale-wrap>summary::after{content:"\25B8";display:inline-block;margin-left:6px;transition:transform .15s;}
.gradelab .gl-ms-bd-wrap[open]>summary::after,.gradelab .gl-ms-scale-wrap[open]>summary::after{transform:rotate(90deg);}
.gradelab .gl-ms-bd-wrap>.gl-table-wrap{padding-bottom:16px;}
.gradelab .gl-ms-shint{margin:0 0 12px;font-size:13px;color:#475569;line-height:1.55;}
.gradelab .gl-ms-presets{margin-bottom:14px;flex-wrap:wrap;}
.gradelab .gl-ms-presets .gl-mode{flex:1 1 auto;white-space:nowrap;}
.gradelab .gl-ms-scale{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:8px;padding-bottom:18px;}
.gradelab .gl-ms-srw{display:flex;align-items:center;gap:6px;}
.gradelab .gl-ms-sl{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:28px;border-radius:6px;background:var(--gl-surface-3);font-weight:700;font-size:13px;}
.gradelab .gl-ms-sl.band-a{background:var(--gl-a-bg);color:var(--gl-a);}
.gradelab .gl-ms-sl.band-b{background:var(--gl-b-bg);color:var(--gl-b);}
.gradelab .gl-ms-sl.band-c{background:var(--gl-c-bg);color:var(--gl-c);}
.gradelab .gl-ms-sl.band-d{background:var(--gl-d-bg);color:var(--gl-d);}
.gradelab .gl-ms-sl.band-f{background:var(--gl-f-bg);color:#B91C1C;}
.gradelab .gl-ms-ge{font-size:13px;color:#475569;}
.gradelab .gl-ms-srw .gl-input{width:100%;min-height:34px;padding:4px 8px;font-size:13px;}
.gradelab .gl-ms-suf{font-size:12px;color:#475569;}
.gradelab .gl-ms-pts{font-size:12px;color:#475569;white-space:nowrap;margin-left:2px;}
.gradelab .gl-ms-foot{margin:0;padding:14px 20px 18px;border-top:1px solid var(--gl-line);font-size:12px;color:#475569;line-height:1.55;}
@media (max-width:640px){
  .gradelab .gl-ms-head2{display:none;}
  .gradelab .gl-ms-prow{grid-template-columns:1fr 96px 32px;}
  .gradelab .gl-ms-presets .gl-mode{flex:1 1 100%;}
  .gradelab .gl-ms-scale{grid-template-columns:1fr;}
}

.gl-fin{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:0 1px 2px rgba(15,23,42,.06);overflow:hidden;max-width:720px;margin:0 auto;}
.gradelab .gl-fin .gl-calc-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:16px 20px;border-bottom:1px solid var(--gl-line);}
.gradelab .gl-fin-tabs{flex-wrap:wrap;}
.gradelab .gl-fin-pane{padding:16px 20px 4px;}
.gradelab .gl-fin-hint{margin:0 0 14px;font-size:13px;color:#475569;line-height:1.55;}
.gradelab .gl-fin-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:4px;}
.gradelab .gl-fin-grid4{grid-template-columns:repeat(4,minmax(0,1fr));}
.gradelab .gl-fin-grid1{grid-template-columns:minmax(0,220px);}
.gradelab .gl-fin-f{display:block;margin-bottom:10px;}
.gradelab .gl-fin-wide{margin-bottom:12px;}
.gradelab .gl-fin-f-l{display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:5px;}
.gradelab .gl-fin-in{position:relative;display:block;}
.gradelab .gl-fin-in .gl-input{width:100%;min-height:44px;padding-right:44px;}
.gradelab .gl-fin-suf{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:13px;font-weight:600;color:#475569;pointer-events:none;}
.gradelab .gl-fin-result,.gradelab .gl-fin-result2,.gradelab .gl-fin-result3,.gradelab .gl-fin-result4{text-align:center;padding:18px 16px;border-radius:var(--gl-r-md);margin:14px 0;}
.gradelab .gl-fin-num,.gradelab .gl-fin-num2,.gradelab .gl-fin-num3,.gradelab .gl-fin-num4{line-height:1.05;font-weight:700;margin:2px 0 6px;overflow-wrap:break-word;}
.gradelab .gl-fin-num3{font-size:clamp(30px,8vw,48px);}
.gradelab .gl-fin-badge{margin-bottom:8px;}
.gradelab .gl-fin-mark2,.gradelab .gl-fin-mark4{display:inline-block;min-width:52px;padding:5px 14px;border-radius:999px;background:rgba(255,255,255,.8);font-weight:700;font-size:20px;}
.gradelab .gl-fin-say,.gradelab .gl-fin-say2,.gradelab .gl-fin-say3,.gradelab .gl-fin-say4{margin:0;font-size:14px;line-height:1.55;color:#334155;}
.gradelab .gl-fin-reach{margin-top:10px;padding-top:10px;border-top:1px solid rgba(15,23,42,.10);}
.gradelab .gl-fin-ceil,.gradelab .gl-fin-floor,.gradelab .gl-fin-eff{display:block;font-size:13px;line-height:1.5;color:#475569;}
.gradelab .gl-fin-ceil{margin-bottom:3px;}
.gradelab .gl-fin-btns{display:flex;gap:8px;justify-content:center;margin-top:12px;}
.gradelab .gl-fin-bd{margin-top:4px;}
.gradelab .gl-fin-foot{margin:0;padding:12px 20px 16px;border-top:1px solid var(--gl-line);font-size:12px;line-height:1.6;color:#475569;}
@media (max-width:640px){
  .gradelab .gl-fin-grid,.gradelab .gl-fin-grid4{grid-template-columns:minmax(0,1fr);}
  .gradelab .gl-fin-grid1{grid-template-columns:minmax(0,1fr);}
}

.gradelab table.gl-scale-3{min-width:0;}
.gradelab table.gl-scale-3 th,.gradelab table.gl-scale-3 td{padding:10px 8px;}

/* WCAG 2.5.8: the generic breakdown summary was 23px. Same padding fix used for the EZ wrappers at 2.7.2. */
.gradelab .gl-bd-wrap>summary{padding:8px 0;}

/* CLS reserve: say/ceil/floor render empty and are filled by initFinal. Same pattern as the Class page at 2.12.3. */
.gradelab .gl-fin-say{min-height:22px;}
.gradelab .gl-fin-reach{min-height:40px;}

.gl-sem{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:0 1px 2px rgba(15,23,42,.06);overflow:hidden;max-width:720px;margin:0 auto;}
.gradelab .gl-sem .gl-calc-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:16px 20px;border-bottom:1px solid var(--gl-line);}
.gradelab .gl-sem-tabs{flex-wrap:wrap;}
.gradelab .gl-sem-pane{padding:16px 20px 4px;}
.gradelab .gl-sem-hint{margin:0 0 14px;font-size:13px;color:#475569;line-height:1.55;}
.gradelab .gl-sem-f{display:block;margin-bottom:12px;}
.gradelab .gl-sem-f-l{display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:5px;}
.gradelab .gl-sem-structwrap{margin-bottom:16px;}
.gradelab .gl-sem-struct{width:100%;min-height:44px;}
.gradelab .gl-sem-in{position:relative;display:block;}
.gradelab .gl-sem-in .gl-input{width:100%;min-height:44px;padding-right:34px;}
.gradelab .gl-sem-suf{position:absolute;right:11px;top:50%;transform:translateY(-50%);font-size:13px;font-weight:600;color:#475569;pointer-events:none;}
.gradelab .gl-sem-head{display:grid;grid-template-columns:minmax(0,1.3fr) 100px 100px;gap:8px;align-items:center;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#475569;padding:0 0 6px;}
.gradelab .gl-sem-row{display:grid;grid-template-columns:minmax(0,1.3fr) 100px 100px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-sem-lab{font-size:14px;color:var(--gl-ink);font-weight:600;overflow-wrap:break-word;}
.gradelab .gl-sem-note{margin:8px 0 0;font-size:13px;line-height:1.5;color:#B45309;min-height:0;}
.gradelab .gl-sem-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;}
.gradelab .gl-sem-result,.gradelab .gl-sem-result2{text-align:center;padding:18px 16px;border-radius:var(--gl-r-md);margin:14px 0;}
.gradelab .gl-sem-num,.gradelab .gl-sem-need{line-height:1.05;font-weight:700;margin:2px 0 6px;overflow-wrap:break-word;}
.gradelab .gl-sem-badge{margin-bottom:8px;}
.gradelab .gl-sem-mark{display:inline-block;min-width:52px;padding:5px 14px;border-radius:999px;background:rgba(255,255,255,.8);font-weight:700;font-size:20px;}
.gradelab .gl-sem-say,.gradelab .gl-sem-say2{margin:0;font-size:14px;line-height:1.55;color:#334155;min-height:22px;}
.gradelab .gl-sem-btns{display:flex;gap:8px;justify-content:center;margin-top:12px;}
.gradelab .gl-sem-bd-wrap>summary{cursor:pointer;font-weight:600;color:#4338CA;font-size:.9rem;list-style:none;padding:8px 0;}
.gradelab .gl-sem-bd-wrap>summary::-webkit-details-marker{display:none}
.gradelab .gl-sem-bd-wrap>summary::after{content:"\25B8";margin-left:6px;font-size:.8em;display:inline-block;transition:transform .15s ease;color:#6366F1;}
.gradelab .gl-sem-bd-wrap[open]>summary::after{transform:rotate(90deg);}
.gradelab .gl-sem-foot{margin:0;padding:12px 20px 16px;border-top:1px solid var(--gl-line);font-size:12px;line-height:1.6;color:#475569;}
@media (max-width:600px){
  .gradelab .gl-sem-head{display:none;}
  .gradelab .gl-sem-row{grid-template-columns:minmax(0,1fr) 1fr;grid-template-areas:"lab lab" "g w";gap:6px 8px;margin-bottom:14px;}
  .gradelab .gl-sem-lab{grid-area:lab;}
  .gradelab .gl-sem-grid{grid-template-columns:minmax(0,1fr);}
}

/* P0 card fix (sheet 6 item 1): link ONLY the title so the anchor Google reads is the tool name,
   not title+description run together. The ::after overlay keeps the whole card clickable. */
.gradelab .gl-card{position:relative;}
.gradelab .gl-card>a{text-decoration:none;color:inherit;}
.gradelab .gl-card>a::after{content:"";position:absolute;inset:0;}
.gradelab .gl-card>a:focus-visible{outline:2px solid var(--gl-brand-500);outline-offset:3px;}

/* ---- Weighted Final Grade Calculator (mode="wfinal") ---- */
.gl-wfn{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:0 1px 2px rgba(15,23,42,.06);overflow:hidden;max-width:720px;margin:0 auto;}
.gradelab .gl-wfn .gl-calc-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:16px 20px;border-bottom:1px solid var(--gl-line);}
.gradelab .gl-wfn-tabs{flex-wrap:wrap;}
.gradelab .gl-wfn-pane{padding:16px 20px 4px;}
.gradelab .gl-wfn-hint{margin:0 0 14px;font-size:13px;color:#475569;line-height:1.55;}
.gradelab .gl-wfn-head{display:grid;grid-template-columns:minmax(0,1.3fr) 92px 92px 32px;gap:8px;align-items:center;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#475569;padding:0 0 6px;}
.gradelab .gl-wfn-row{display:grid;grid-template-columns:minmax(0,1.3fr) 92px 92px 32px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-wfn-in{position:relative;display:block;}
.gradelab .gl-wfn-in .gl-input{width:100%;min-height:44px;padding-right:30px;}
.gradelab .gl-wfn-in-n .gl-input{padding-right:11px;}
.gradelab .gl-wfn-suf{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:13px;font-weight:600;color:#475569;pointer-events:none;}
.gradelab .gl-wfn-del{min-width:32px;min-height:44px;border:0;background:none;color:#64748B;font-size:20px;line-height:1;cursor:pointer;border-radius:8px;padding:0;}
.gradelab .gl-wfn-del:hover{color:#DC2626;background:#FEF2F2;}
.gradelab .gl-wfn-del:focus-visible{outline:2px solid var(--gl-brand-500);outline-offset:2px;}
.gradelab .gl-wfn-add{margin:2px 0 14px;background:none;border:1px dashed var(--gl-line);border-radius:var(--gl-r-md);padding:10px 14px;min-height:44px;width:100%;color:#4338CA;font-weight:600;font-size:14px;cursor:pointer;}
.gradelab .gl-wfn-add:hover{background:#EEF2FF;}
.gradelab .gl-wfn-add:focus-visible{outline:2px solid var(--gl-brand-500);outline-offset:2px;}
.gradelab .gl-wfn-final{display:grid;grid-template-columns:minmax(0,1.3fr) 92px 92px 20px;gap:8px;align-items:center;padding:12px;margin:0 0 14px;border:1px solid var(--gl-brand-500);border-radius:var(--gl-r-md);background:#EEF2FF;}
.gradelab .gl-wfn-final-lab{grid-column:1;font-size:14px;font-weight:700;color:var(--gl-ink);}
.gradelab .gl-wfn-fswrap{grid-column:2;}
.gradelab .gl-wfn-fwwrap{grid-column:3;}
.gradelab .gl-wfn-solve{grid-column:2;font-size:12px;font-weight:600;color:#4338CA;line-height:1.3;}
.gradelab .gl-wfn-spacer{grid-column:4;}
.gradelab .gl-wfn-f{display:block;margin-bottom:12px;}
.gradelab .gl-wfn-f-l{display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:5px;}
.gradelab .gl-wfn-targetwrap .gl-wfn-in{max-width:180px;}
.gradelab .gl-wfn-note{margin:8px 0 0;font-size:13px;line-height:1.5;color:#B45309;}
.gradelab .gl-wfn-result{text-align:center;padding:18px 16px;border-radius:var(--gl-r-md);margin:14px 0;}
.gradelab .gl-wfn-num{line-height:1.05;font-weight:700;margin:2px 0 6px;overflow-wrap:break-word;}
.gradelab .gl-wfn-badge{margin-bottom:8px;}
.gradelab .gl-wfn-mark{display:inline-block;min-width:52px;padding:5px 14px;border-radius:999px;background:rgba(255,255,255,.8);font-weight:700;font-size:20px;}
.gradelab .gl-wfn-say{margin:0;font-size:14px;line-height:1.55;color:#334155;min-height:22px;}
.gradelab .gl-wfn-reach{margin:8px 0 0;font-size:13px;line-height:1.5;color:#475569;min-height:20px;}
.gradelab .gl-wfn-btns{display:flex;gap:8px;justify-content:center;margin-top:12px;}
.gradelab .gl-wfn-bd-wrap>summary{cursor:pointer;font-weight:600;color:#4338CA;font-size:.9rem;list-style:none;padding:8px 0;}
.gradelab .gl-wfn-bd-wrap>summary::-webkit-details-marker{display:none}
.gradelab .gl-wfn-bd-wrap>summary::after{content:"\25B8";margin-left:6px;font-size:.8em;display:inline-block;transition:transform .15s ease;color:#6366F1;}
.gradelab .gl-wfn-bd-wrap[open]>summary::after{transform:rotate(90deg);}
.gradelab .gl-wfn-foot{margin:0;padding:12px 20px 16px;border-top:1px solid var(--gl-line);font-size:12px;line-height:1.6;color:#475569;}
@media (max-width:600px){
  .gradelab .gl-wfn-head{display:none;}
  .gradelab .gl-wfn-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 32px;gap:6px 8px;margin-bottom:14px;}
  .gradelab .gl-wfn-in-n{grid-column:1 / -1;}
  .gradelab .gl-wfn-final{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 32px;gap:6px 8px;}
  .gradelab .gl-wfn-final-lab{grid-column:1 / -1;}
  .gradelab .gl-wfn-fswrap{grid-column:auto;}
  .gradelab .gl-wfn-solve{grid-column:auto;}
  .gradelab .gl-wfn-fwwrap{grid-column:auto;}
  .gradelab .gl-wfn-spacer{display:none;}
}

/* ---- Midterm Grade Calculator (mode="midterm") ---- */
.gl-mid{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:0 1px 2px rgba(15,23,42,.06);overflow:hidden;max-width:720px;margin:0 auto;}
.gradelab .gl-mid .gl-calc-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:16px 20px;border-bottom:1px solid var(--gl-line);}
.gradelab .gl-mid-tabs{flex-wrap:wrap;}
.gradelab .gl-mid-pane{padding:16px 20px 4px;}
.gradelab .gl-mid-hint{margin:0 0 14px;font-size:13px;color:#475569;line-height:1.55;}
.gradelab .gl-mid-head{display:grid;grid-template-columns:minmax(0,1.3fr) 92px 92px 32px;gap:8px;align-items:center;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#475569;padding:0 0 6px;}
.gradelab .gl-mid-row{display:grid;grid-template-columns:minmax(0,1.3fr) 92px 92px 32px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-mid-in{position:relative;display:block;}
.gradelab .gl-mid-in .gl-input{width:100%;min-height:44px;padding-right:30px;}
.gradelab .gl-mid-in-n .gl-input{padding-right:11px;}
.gradelab .gl-mid-suf{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:13px;font-weight:600;color:#475569;pointer-events:none;}
.gradelab .gl-mid-del{min-width:32px;min-height:44px;border:0;background:none;color:#64748B;font-size:20px;line-height:1;cursor:pointer;border-radius:8px;padding:0;}
.gradelab .gl-mid-del:hover{color:#DC2626;background:#FEF2F2;}
.gradelab .gl-mid-del:focus-visible{outline:2px solid var(--gl-brand-500);outline-offset:2px;}
.gradelab .gl-mid-add{margin:2px 0 14px;background:none;border:1px dashed var(--gl-line);border-radius:var(--gl-r-md);padding:10px 14px;min-height:44px;width:100%;color:#4338CA;font-weight:600;font-size:14px;cursor:pointer;}
.gradelab .gl-mid-add:hover{background:#EEF2FF;}
.gradelab .gl-mid-add:focus-visible{outline:2px solid var(--gl-brand-500);outline-offset:2px;}
.gradelab .gl-mid-exam{display:grid;grid-template-columns:minmax(0,1.3fr) 92px 92px 20px;gap:8px;align-items:center;padding:12px;margin:0 0 10px;border-radius:var(--gl-r-md);}
.gradelab .gl-mid-mt{border:1px solid var(--gl-brand-500);background:#EEF2FF;}
.gradelab .gl-mid-fn{border:1px solid var(--gl-line);background:#F8FAFC;margin-bottom:14px;}
.gradelab .gl-mid-exam-lab{grid-column:1;font-size:14px;font-weight:700;color:var(--gl-ink);}
.gradelab .gl-mid-solve,.gradelab .gl-mid-mirror{grid-column:2;font-size:12px;font-weight:600;line-height:1.3;}
.gradelab .gl-mid-solve{color:#4338CA;}
.gradelab .gl-mid-mirror{color:#475569;}
.gradelab .gl-mid-mswrap,.gradelab .gl-mid-fswrap{grid-column:2;}
.gradelab .gl-mid-mwwrap,.gradelab .gl-mid-fwwrap{grid-column:3;}
.gradelab .gl-mid-spacer{grid-column:4;}
.gradelab .gl-mid-f{display:block;margin-bottom:12px;}
.gradelab .gl-mid-f-l{display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:5px;}
.gradelab .gl-mid-assume{width:100%;min-height:44px;}
.gradelab .gl-mid-targetwrap .gl-mid-in{max-width:180px;}
.gradelab .gl-mid-note{margin:8px 0 0;font-size:13px;line-height:1.5;color:#B45309;}
.gradelab .gl-mid-result{text-align:center;padding:18px 16px;border-radius:var(--gl-r-md);margin:14px 0;}
.gradelab .gl-mid-num{line-height:1.05;font-weight:700;margin:2px 0 6px;overflow-wrap:break-word;}
.gradelab .gl-mid-badge{margin-bottom:8px;}
.gradelab .gl-mid-mark{display:inline-block;min-width:52px;padding:5px 14px;border-radius:999px;background:rgba(255,255,255,.8);font-weight:700;font-size:20px;}
.gradelab .gl-mid-say{margin:0;font-size:14px;line-height:1.55;color:#334155;min-height:22px;}
.gradelab .gl-mid-reach{margin:8px 0 0;font-size:13px;line-height:1.5;color:#475569;min-height:20px;}
.gradelab .gl-mid-btns{display:flex;gap:8px;justify-content:center;margin-top:12px;}
.gradelab .gl-mid-bd-wrap>summary{cursor:pointer;font-weight:600;color:#4338CA;font-size:.9rem;list-style:none;padding:8px 0;}
.gradelab .gl-mid-bd-wrap>summary::-webkit-details-marker{display:none}
.gradelab .gl-mid-bd-wrap>summary::after{content:"\25B8";margin-left:6px;font-size:.8em;display:inline-block;transition:transform .15s ease;color:#6366F1;}
.gradelab .gl-mid-bd-wrap[open]>summary::after{transform:rotate(90deg);}
.gradelab .gl-mid-foot{margin:0;padding:12px 20px 16px;border-top:1px solid var(--gl-line);font-size:12px;line-height:1.6;color:#475569;}
@media (max-width:600px){
  .gradelab .gl-mid-head{display:none;}
  .gradelab .gl-mid-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 32px;gap:6px 8px;margin-bottom:14px;}
  .gradelab .gl-mid-in-n{grid-column:1 / -1;}
  .gradelab .gl-mid-exam{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 20px;gap:6px 8px;}
  .gradelab .gl-mid-exam-lab{grid-column:1 / -1;}
  .gradelab .gl-mid-solve,.gradelab .gl-mid-mirror{grid-column:auto;}
  .gradelab .gl-mid-mswrap,.gradelab .gl-mid-fswrap{grid-column:auto;}
  .gradelab .gl-mid-mwwrap,.gradelab .gl-mid-fwwrap{grid-column:auto;}
  .gradelab .gl-mid-spacer{display:none;}
}

/* ---- Quarter Grade Calculator (mode="quarter") ---- */
.gl-qtr{background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);box-shadow:0 1px 2px rgba(15,23,42,.06);overflow:hidden;max-width:720px;margin:0 auto;}
.gradelab .gl-qtr .gl-calc-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:16px 20px;border-bottom:1px solid var(--gl-line);}
.gradelab .gl-qtr-tabs{flex-wrap:wrap;}
.gradelab .gl-qtr-pane{padding:16px 20px 4px;}
.gradelab .gl-qtr-hint{margin:0 0 14px;font-size:13px;color:#475569;line-height:1.55;}
.gradelab .gl-qtr-f{display:block;margin-bottom:12px;}
.gradelab .gl-qtr-f-l{display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:5px;}
.gradelab .gl-qtr-structwrap,.gradelab .gl-qtr-targetwrap{margin-bottom:16px;}
.gradelab .gl-qtr-struct{width:100%;min-height:44px;}
.gradelab .gl-qtr-in{position:relative;display:block;}
.gradelab .gl-qtr-in .gl-input{width:100%;min-height:44px;padding-right:34px;}
.gradelab .gl-qtr-suf{position:absolute;right:11px;top:50%;transform:translateY(-50%);font-size:13px;font-weight:600;color:#475569;pointer-events:none;}
.gradelab .gl-qtr-head{display:grid;grid-template-columns:minmax(0,1.3fr) 100px 100px;gap:8px;align-items:center;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#475569;padding:0 0 6px;}
.gradelab .gl-qtr-row{display:grid;grid-template-columns:minmax(0,1.3fr) 100px 100px;gap:8px;align-items:center;margin-bottom:8px;}
.gradelab .gl-qtr-lab{font-size:14px;color:var(--gl-ink);font-weight:600;overflow-wrap:break-word;}
.gradelab .gl-qtr-note{margin:8px 0 0;font-size:13px;line-height:1.5;color:#B45309;min-height:0;}
.gradelab .gl-qtr-result,.gradelab .gl-qtr-result2{text-align:center;padding:18px 16px;border-radius:var(--gl-r-md);margin:14px 0;}
.gradelab .gl-qtr-num,.gradelab .gl-qtr-need{line-height:1.05;font-weight:700;margin:2px 0 6px;overflow-wrap:break-word;}
.gradelab .gl-qtr-badge{margin-bottom:8px;}
.gradelab .gl-qtr-mark{display:inline-block;min-width:52px;padding:5px 14px;border-radius:999px;background:rgba(255,255,255,.8);font-weight:700;font-size:20px;}
.gradelab .gl-qtr-say,.gradelab .gl-qtr-say2{margin:0;font-size:14px;line-height:1.55;color:#334155;min-height:44px;}
.gradelab .gl-qtr-cover,.gradelab .gl-qtr-reach,.gradelab .gl-qtr-each{margin:8px 0 0;font-size:13px;line-height:1.55;color:#475569;min-height:40px;}
.gradelab .gl-qtr-recap{margin:0 0 12px;font-size:13px;line-height:1.55;color:#475569;min-height:40px;}
.gradelab .gl-qtr-btns{display:flex;gap:8px;justify-content:center;margin-top:12px;}
.gradelab .gl-qtr-bd{min-height:150px;}
.gradelab .gl-qtr-bd-wrap>summary{cursor:pointer;font-weight:600;color:#4338CA;font-size:.9rem;list-style:none;padding:8px 0;}
.gradelab .gl-qtr-bd-wrap>summary::-webkit-details-marker{display:none}
.gradelab .gl-qtr-bd-wrap>summary::after{content:"\25B8";margin-left:6px;font-size:.8em;display:inline-block;transition:transform .15s ease;color:#6366F1;}
.gradelab .gl-qtr-bd-wrap[open]>summary::after{transform:rotate(90deg);}
.gradelab .gl-qtr-foot{margin:0;padding:12px 20px 16px;border-top:1px solid var(--gl-line);font-size:12px;line-height:1.6;color:#475569;}
@media (max-width:600px){
  .gradelab .gl-qtr-head{display:none;}
  .gradelab .gl-qtr-row{grid-template-columns:minmax(0,1fr) 1fr;grid-template-areas:"lab lab" "g w";gap:6px 8px;margin-bottom:14px;}
  .gradelab .gl-qtr-lab{grid-area:lab;}
  .gradelab .gl-qtr-row .gl-qtr-in[data-l]::before{content:attr(data-l);display:block;font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#475569;margin-bottom:3px;}
  .gradelab .gl-qtr-row .gl-qtr-in[data-l] .gl-qtr-suf{top:auto;bottom:13px;transform:none;}
  .gradelab .gl-qtr-say,.gradelab .gl-qtr-say2{min-height:66px;}
  .gradelab .gl-qtr-cover,.gradelab .gl-qtr-reach,.gradelab .gl-qtr-each,.gradelab .gl-qtr-recap{min-height:60px;}
}
/* ---- GPA calculator (mode: gpa) ----
   Every rule is scoped to .gl-gpa. An unscoped rule in this stylesheet previously leaked into the dark
   footer and dropped those links to 1.76:1 contrast, so nothing here may be written bare. */
.gl-gpa .gl-gpa-hint{margin:0 0 14px;font-size:14px;color:#475569;line-height:1.5}
.gl-gpa .gl-gpa-opts{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;margin:0 0 14px}
.gl-gpa .gl-gpa-aplus-wrap{display:inline-flex;align-items:center;gap:8px;font-size:13.5px;color:#334155}
.gl-gpa .gl-gpa-aplus{width:auto;min-width:74px;padding:6px 8px}

.gl-gpa .gl-gpa-rows{display:block}
.gl-gpa .gl-gpa-row{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,0.9fr) 72px minmax(0,1fr) 38px;gap:8px;align-items:center;margin-bottom:8px}
.gl-gpa .gl-gpa-row-head{margin-bottom:6px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748B}
.gl-gpa .gl-gpa-row-head span{padding-left:2px}
.gl-gpa .gl-gpa-gcell{display:block;min-width:0}
.gl-gpa .gl-gpa-gcell .gl-input{width:100%}
.gl-gpa .gl-gpa-table td,.gl-gpa .gl-gpa-table th{white-space:nowrap}
.gl-gpa .gl-gpa-skip td{color:#94A3B8;font-style:italic}

/* Two results side by side is the point of this tool, so the pair gets its own grid rather than the
   single-number .gl-result layout the other modes use. */
.gl-gpa .gl-gpa-pair{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px;align-items:start}
.gl-gpa .gl-gpa-val{min-width:0}
.gl-gpa .gl-gpa-val .gl-result-num{font-size:34px;line-height:1.1}
.gl-gpa .gl-gpa-sub{margin-top:10px}

.gl-gpa .gl-gpa-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px 16px;margin:0 0 16px}
.gl-gpa .gl-gpa-f{display:block;min-width:0}
.gl-gpa .gl-gpa-f-l{display:block;font-size:12.5px;font-weight:600;color:#475569;margin-bottom:5px}
.gl-gpa .gl-gpa-f-in{position:relative;display:block}
.gl-gpa .gl-gpa-f-in .gl-input{width:100%;padding-right:34px}
.gl-gpa .gl-gpa-f-s{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:12.5px;color:#94A3B8;pointer-events:none}

.gl-gpa .gl-gpa-foot{margin:14px 0 0;font-size:12.5px;color:#64748B;line-height:1.5}

@media(max-width:560px){
  /* On a phone the five-column row cannot hold its shape, so it becomes two rows with the labels the
     header row would otherwise carry. Without these the grade sits beside the credits unlabelled. */
  .gl-gpa .gl-gpa-row-head{display:none}
  .gl-gpa .gl-gpa-row{grid-template-columns:1fr 72px 38px;gap:8px;padding:10px;border:1px solid #E2E8F0;border-radius:10px;margin-bottom:10px}
  .gl-gpa .gl-gpa-name{grid-column:1/-1}
  .gl-gpa .gl-gpa-gcell{grid-column:1}
  .gl-gpa .gl-gpa-cr{grid-column:2}
  .gl-gpa .gl-gpa-rm{grid-column:3}
  .gl-gpa .gl-gpa-t{grid-column:1/3}
  .gl-gpa .gl-gpa-pair{grid-template-columns:1fr;gap:14px}
  .gl-gpa .gl-gpa-val .gl-result-num{font-size:30px}
}
/* Matches the focus rings wfinal and midterm already ship. */
.gradelab .gl-gpa button:focus-visible,.gradelab .gl-gpa select:focus-visible{outline:2px solid var(--gl-brand-500);outline-offset:2px}
/* ---- Grade to GPA converter (mode: gpaconv) ----
   Every rule is scoped to .gl-cnv. An unscoped rule in this stylesheet previously leaked into the dark
   footer and dropped those links to 1.76:1 contrast, so nothing here may be written bare. */
.gl-cnv .gl-cnv-hint{margin:0 0 14px;font-size:14px;color:#475569;line-height:1.5}
.gl-cnv .gl-cnv-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 16px;margin:0 0 14px}
.gl-cnv .gl-cnv-f{display:block;min-width:0}
.gl-cnv .gl-cnv-f-l{display:block;font-size:12.5px;font-weight:600;color:#475569;margin-bottom:5px}
.gl-cnv .gl-cnv-f-in{position:relative;display:block}
.gl-cnv .gl-cnv-f-in .gl-input{width:100%}
.gl-cnv .gl-cnv-f-in input.gl-input{padding-right:34px}
.gl-cnv .gl-cnv-f-s{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:12.5px;color:#64748B;pointer-events:none}
/* 44px keeps the scale buttons level with the inputs, which are 43-44px at every width above 560. */
.gl-cnv .gl-cnv-scale{min-height:44px}
.gl-cnv .gl-cnv-typewrap{display:block;max-width:260px;margin:0 0 16px}
.gl-cnv .gl-cnv-result .gl-result-num{font-size:38px;line-height:1.1}
.gl-cnv .gl-cnv-sub{margin-top:10px}
.gl-cnv .gl-cnv-chart table{margin-top:0}
.gl-cnv .gl-cnv-foot{margin:14px 0 0;font-size:12.5px;color:#64748B;line-height:1.5}
/* Matches the focus rings wfinal, midterm and gpa already ship. */
.gradelab .gl-cnv button:focus-visible,.gradelab .gl-cnv select:focus-visible,.gradelab .gl-cnv input:focus-visible{outline:2px solid var(--gl-brand-500);outline-offset:2px}

@media(max-width:560px){
  /* Three side-by-side boxes will not hold their shape on a phone, and the labels are what make the
     conversion readable, so they stack rather than shrink. */
  .gl-cnv .gl-cnv-grid{grid-template-columns:1fr;gap:10px}
  .gl-cnv .gl-cnv-typewrap{max-width:none}
  .gl-cnv .gl-cnv-result .gl-result-num{font-size:32px}
}

/* ---- College GPA calculator (mode: collegegpa) ----
   Every rule is scoped to .gl-cgpa. An unscoped rule in this stylesheet once leaked into the dark footer
   and dropped those links to 1.76:1 contrast, so nothing here may be written bare. */
.gl-cgpa .gl-cgpa-hint{margin:0 0 14px;font-size:14px;color:#475569;line-height:1.5}
.gl-cgpa .gl-cgpa-note{margin:-4px 0 16px;font-size:12.5px;color:#64748B}
.gl-cgpa .gl-cgpa-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;max-width:420px;margin:0 0 10px}
.gl-cgpa .gl-cgpa-f{display:block;min-width:0}
.gl-cgpa .gl-cgpa-f-l{display:block;font-size:12.5px;font-weight:600;color:#475569;margin-bottom:5px}
.gl-cgpa .gl-cgpa-f-in{position:relative;display:block}
.gl-cgpa .gl-cgpa-f-in .gl-input{width:100%}
.gl-cgpa .gl-cgpa-f-in input.gl-input{padding-right:34px}
.gl-cgpa .gl-cgpa-f-s{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:12.5px;color:#64748B;pointer-events:none}

.gl-cgpa .gl-cgpa-rows{display:block;margin:0 0 10px}
.gl-cgpa .gl-cgpa-row{display:grid;grid-template-columns:minmax(0,1fr) 86px 74px 118px 40px;gap:8px;align-items:center;margin-bottom:8px}
.gl-cgpa .gl-cgpa-row-head{font-size:12px;font-weight:600;color:#64748B;text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}
.gl-cgpa .gl-cgpa-row-head span:last-child{display:block}
.gl-cgpa .gl-cgpa-data .gl-input{width:100%}
/* The replacing-a control belongs to the row above it, so it spans the full width and indents. */
.gl-cgpa .gl-cgpa-prev{grid-column:1 / -1;display:flex;align-items:center;gap:8px;padding:2px 0 4px 10px;border-left:2px solid #E2E8F0;margin-left:2px}
.gl-cgpa .gl-cgpa-prev[hidden],.gl-cgpa .gl-cgpa-val[hidden]{display:none}
.gl-cgpa .gl-cgpa-prev-l{font-size:12.5px;color:#64748B}
.gl-cgpa .gl-cgpa-prev .gl-input{width:86px}

.gl-cgpa .gl-cgpa-pair{display:flex;flex-wrap:wrap;gap:10px 34px;align-items:flex-start}
.gl-cgpa .gl-cgpa-val{min-width:0}
.gl-cgpa .gl-cgpa-val .gl-result-num{font-size:34px;line-height:1.1}
.gl-cgpa .gl-cgpa-band{display:block;margin:12px 0 0;font-size:13px;line-height:1.5;padding:9px 12px;border-radius:10px;background:#F1F5F9;color:#334155}
.gl-cgpa .gl-cgpa-b-low{background:#FEF2F2;color:#7F1D1D}
.gl-cgpa .gl-cgpa-b-high{background:#F0FDF4;color:#14532D}
.gl-cgpa .gl-cgpa-sub{margin-top:10px}
.gl-cgpa .gl-cgpa-tw table{margin-top:0}
.gl-cgpa .gl-cgpa-foot{margin:14px 0 0;font-size:12.5px;color:#64748B;line-height:1.5}
/* Matches the focus rings gpa, gpaconv and wfinal already ship. */
.gradelab .gl-cgpa button:focus-visible,.gradelab .gl-cgpa select:focus-visible,.gradelab .gl-cgpa input:focus-visible{outline:2px solid var(--gl-brand-500);outline-offset:2px}

@media(max-width:720px){
  /* Five columns will not hold on a phone. Course name takes its own line, then grade / credits /
     status share a row, which keeps the three fields that matter side by side. */
  .gl-cgpa .gl-cgpa-row{grid-template-columns:minmax(0,1fr) 74px 40px;grid-template-areas:"name name name" "grade credits status" ". . remove";gap:6px 8px}
  .gl-cgpa .gl-cgpa-row-head{display:none}
  .gl-cgpa .gl-cgpa-data{padding:10px;border:1px solid #E2E8F0;border-radius:12px;margin-bottom:10px;grid-template-columns:1fr 74px 40px;grid-template-areas:"name name name" "grade credits remove" "status status status"}
  .gl-cgpa .gl-cgpa-data .gl-cgpa-name{grid-area:name}
  .gl-cgpa .gl-cgpa-data .gl-cgpa-g{grid-area:grade}
  .gl-cgpa .gl-cgpa-data .gl-cgpa-cr{grid-area:credits}
  .gl-cgpa .gl-cgpa-data .gl-cgpa-s{grid-area:status}
  .gl-cgpa .gl-cgpa-data .gl-cgpa-rm{grid-area:remove;justify-self:end}
  .gl-cgpa .gl-cgpa-grid{grid-template-columns:1fr;max-width:none}
  .gl-cgpa .gl-cgpa-val .gl-result-num{font-size:30px}
  .gl-cgpa .gl-cgpa-pair{gap:10px 22px}
}

/* ---- High school GPA calculator (mode: hsgpa) ----
   Every rule is scoped to .gl-hsg. An unscoped rule in this stylesheet once leaked into the dark footer
   and dropped those links to 1.76:1 contrast, so nothing here may be written bare. */
.gl-hsg .gl-hsg-hint{margin:0 0 14px;font-size:14px;color:#475569;line-height:1.5}
.gl-hsg .gl-hsg-note{margin:-2px 0 16px;font-size:12.5px;color:#64748B;line-height:1.5}

.gl-hsg .gl-hsg-opts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;max-width:520px;margin:0 0 12px}
.gl-hsg .gl-hsg-o{display:block;min-width:0}
.gl-hsg .gl-hsg-o-l{display:block;font-size:12.5px;font-weight:600;color:#475569;margin-bottom:5px}
.gl-hsg .gl-hsg-o .gl-input{width:100%}
.gl-hsg .gl-hsg-toggles{display:flex;flex-wrap:wrap;gap:8px 22px;margin:0 0 16px}
.gl-hsg .gl-hsg-t{display:flex;align-items:center;gap:8px;font-size:13.5px;color:#334155;min-height:44px;cursor:pointer}
.gl-hsg .gl-hsg-t input{width:18px;height:18px;flex:0 0 18px;margin:0}

.gl-hsg .gl-hsg-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;max-width:420px;margin:14px 0 8px}
.gl-hsg .gl-hsg-f{display:block;min-width:0}
.gl-hsg .gl-hsg-f-l{display:block;font-size:12.5px;font-weight:600;color:#475569;margin-bottom:5px}
.gl-hsg .gl-hsg-f-in{position:relative;display:block}
.gl-hsg .gl-hsg-f-in .gl-input{width:100%}
.gl-hsg .gl-hsg-f-in input.gl-input{padding-right:34px}
.gl-hsg .gl-hsg-f-s{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:12.5px;color:#64748B;pointer-events:none}

.gl-hsg .gl-hsg-rows{display:block;margin:0 0 10px}
/* The remove button is the shared .gradelab .gl-rm, which is 40px wide. A narrower track here overflows
   the page by the difference, which is exactly how the 6px scroll on build #28 happened. */
.gl-hsg .gl-hsg-row{display:grid;grid-template-columns:minmax(0,1fr) 86px 74px 132px 40px;gap:8px;align-items:center;margin-bottom:8px}
.gl-hsg.gl-hsg-m-ncaa .gl-hsg-row{grid-template-columns:minmax(0,1fr) 86px 74px 132px 58px 40px}
.gl-hsg.gl-hsg-m-nocr .gl-hsg-row{grid-template-columns:minmax(0,1fr) 86px 132px 40px}
.gl-hsg.gl-hsg-m-nocr.gl-hsg-m-ncaa .gl-hsg-row{grid-template-columns:minmax(0,1fr) 86px 132px 58px 40px}
.gl-hsg .gl-hsg-row-head{font-size:12px;font-weight:600;color:#64748B;text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}
.gl-hsg .gl-hsg-data .gl-input{width:100%}

/* An author display rule beats the UA [hidden]{display:none}, so every element that is toggled has its
   hidden state restated. Build #28 shipped a control that showed on every row without this. */
.gl-hsg .gl-hsg-val[hidden]{display:none}
/* Letter select and percentage input occupy the same cell; exactly one is ever shown. */
.gl-hsg .gl-hsg-pct{display:none}
.gl-hsg.gl-hsg-m-pct .gl-hsg-pct{display:block}
.gl-hsg.gl-hsg-m-pct .gl-hsg-g{display:none}
/* The credits column collapses entirely when the school does not use them. */
.gl-hsg.gl-hsg-m-nocr .gl-hsg-cr,.gl-hsg.gl-hsg-m-nocr .gl-hsg-h-cr{display:none}
/* The NCAA column only exists when the reader asks for it. */
.gl-hsg .gl-hsg-core,.gl-hsg .gl-hsg-h-core{display:none}
.gl-hsg.gl-hsg-m-ncaa .gl-hsg-core{display:flex;align-items:center;justify-content:center;gap:4px;min-height:44px;cursor:pointer}
.gl-hsg.gl-hsg-m-ncaa .gl-hsg-h-core{display:block}
.gl-hsg .gl-hsg-core input{width:18px;height:18px;margin:0}
.gl-hsg .gl-hsg-core-x{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

.gl-hsg .gl-hsg-pair{display:flex;flex-wrap:wrap;gap:10px 34px;align-items:flex-start}
.gl-hsg .gl-hsg-val{min-width:0}
.gl-hsg .gl-hsg-val .gl-result-num{font-size:34px;line-height:1.1}
.gl-hsg .gl-hsg-band{display:block;margin:12px 0 0;font-size:13px;line-height:1.5;padding:9px 12px;border-radius:10px;background:#F1F5F9;color:#334155}
.gl-hsg .gl-hsg-b-low{background:#FEF2F2;color:#7F1D1D}
.gl-hsg .gl-hsg-b-high{background:#F0FDF4;color:#14532D}
.gl-hsg .gl-hsg-sub{margin-top:10px}
.gl-hsg .gl-hsg-tw table{margin-top:0}
.gl-hsg .gl-hsg-tag{display:inline-block;font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:#3730A3;background:#EEF2FF;border-radius:5px;padding:1px 5px;vertical-align:middle}
.gl-hsg .gl-hsg-foot{margin:14px 0 0;font-size:12.5px;color:#64748B;line-height:1.5}
/* Matches the focus rings gpa, gpaconv, cgpa and wfinal already ship. */
.gradelab .gl-hsg button:focus-visible,.gradelab .gl-hsg select:focus-visible,.gradelab .gl-hsg input:focus-visible{outline:2px solid var(--gl-brand-500);outline-offset:2px}

@media(max-width:720px){
  /* Five or six columns will not hold on a phone. The course name takes its own line, then grade and
     credits share a row with the remove button, and level spans the width beneath them. */
  .gl-hsg .gl-hsg-row-head{display:none}
  .gl-hsg .gl-hsg-data{padding:10px;border:1px solid #E2E8F0;border-radius:12px;margin-bottom:10px;
    grid-template-columns:minmax(0,1fr) 74px 40px;
    grid-template-areas:"name name name" "grade credits remove" "level level level"}
  .gl-hsg.gl-hsg-m-ncaa .gl-hsg-data,.gl-hsg.gl-hsg-m-nocr .gl-hsg-data,
  .gl-hsg.gl-hsg-m-nocr.gl-hsg-m-ncaa .gl-hsg-data{
    grid-template-columns:minmax(0,1fr) 74px 40px;
    grid-template-areas:"name name name" "grade credits remove" "level level level" "core core core"}
  .gl-hsg .gl-hsg-data .gl-hsg-name{grid-area:name}
  .gl-hsg .gl-hsg-data .gl-hsg-g,.gl-hsg .gl-hsg-data .gl-hsg-pct{grid-area:grade}
  .gl-hsg .gl-hsg-data .gl-hsg-cr{grid-area:credits}
  .gl-hsg .gl-hsg-data .gl-hsg-lv{grid-area:level}
  .gl-hsg .gl-hsg-data .gl-hsg-rm{grid-area:remove;justify-self:end}
  .gl-hsg.gl-hsg-m-ncaa .gl-hsg-data .gl-hsg-core{grid-area:core;justify-content:flex-start}
  .gl-hsg.gl-hsg-m-ncaa .gl-hsg-core-x{position:static;width:auto;height:auto;clip:auto;font-size:13px;color:#334155;text-transform:none}
  .gl-hsg .gl-hsg-opts,.gl-hsg .gl-hsg-grid{grid-template-columns:1fr;max-width:none}
  .gl-hsg .gl-hsg-val .gl-result-num{font-size:30px}
  .gl-hsg .gl-hsg-pair{gap:10px 22px}
}

/* ---- Cumulative GPA calculator (mode: cumgpa) ----
   Every rule is scoped to .gl-cum. An unscoped rule in this stylesheet once leaked into the dark footer
   and dropped those links to 1.76:1 contrast, so nothing here may be written bare. */
.gl-cum .gl-cum-hint{margin:0 0 14px;font-size:14px;color:#475569;line-height:1.5}

.gl-cum .gl-cum-opts{display:block;max-width:260px;margin:0 0 16px}
.gl-cum .gl-cum-o{display:block;min-width:0}
.gl-cum .gl-cum-o-l{display:block;font-size:12.5px;font-weight:600;color:#475569;margin-bottom:5px}
.gl-cum .gl-cum-o .gl-input{width:100%}

.gl-cum .gl-cum-rows{display:block;margin:0 0 10px}
/* The remove button is the shared .gradelab .gl-rm at 40px. A narrower track here overflows the page by
   the difference, which is exactly how the 6px scroll on build #28 happened. */
.gl-cum .gl-cum-row{display:grid;grid-template-columns:minmax(0,1fr) 116px 96px 88px 40px;gap:8px;align-items:center;margin-bottom:8px}
.gl-cum .gl-cum-row-head{font-size:12px;font-weight:600;color:#64748B;text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}
.gl-cum .gl-cum-data .gl-input{width:100%}

/* An author display rule beats the UA [hidden]{display:none}, so every toggled element restates it.
   Build #28 shipped a control visible on every row without this. */
.gl-cum .gl-cum-val[hidden]{display:none}

.gl-cum .gl-cum-pair{display:flex;flex-wrap:wrap;gap:10px 34px;align-items:flex-start}
.gl-cum .gl-cum-val{min-width:0}
.gl-cum .gl-cum-val .gl-result-num{font-size:34px;line-height:1.1}
.gl-cum .gl-cum-band{display:block;margin:12px 0 0;font-size:13px;line-height:1.5;padding:9px 12px;border-radius:10px;background:#F1F5F9;color:#334155}
.gl-cum .gl-cum-b-low{background:#FEF2F2;color:#7F1D1D}
.gl-cum .gl-cum-b-high{background:#F0FDF4;color:#14532D}
.gl-cum .gl-cum-sub{margin-top:10px}
.gl-cum .gl-cum-tw table{margin-top:0}
.gl-cum .gl-cum-foot{margin:14px 0 0;font-size:12.5px;color:#64748B;line-height:1.5}
/* Matches the focus rings gpa, gpaconv, cgpa, hsg and wfinal already ship. */
.gradelab .gl-cum button:focus-visible,.gradelab .gl-cum select:focus-visible,.gradelab .gl-cum input:focus-visible{outline:2px solid var(--gl-brand-500);outline-offset:2px}

@media(max-width:720px){
  /* Five columns will not hold on a phone. The name takes its own line, then calendar and hours share a
     row, then GPA sits beside the remove button. */
  .gl-cum .gl-cum-row-head{display:none}
  .gl-cum .gl-cum-data{padding:10px;border:1px solid #E2E8F0;border-radius:12px;margin-bottom:10px;
    grid-template-columns:minmax(0,1fr) 96px 40px;
    grid-template-areas:"name name name" "cal cal cal" "hrs gpa remove"}
  .gl-cum .gl-cum-data .gl-cum-name{grid-area:name}
  .gl-cum .gl-cum-data .gl-cum-cal{grid-area:cal}
  .gl-cum .gl-cum-data .gl-cum-h{grid-area:hrs}
  .gl-cum .gl-cum-data .gl-cum-g{grid-area:gpa}
  .gl-cum .gl-cum-data .gl-cum-rm{grid-area:remove;justify-self:end}
  .gl-cum .gl-cum-opts{max-width:none}
  .gl-cum .gl-cum-val .gl-result-num{font-size:30px}
  .gl-cum .gl-cum-pair{gap:10px 22px}
}

/* ---- Middle school GPA calculator (p_MSGPA) ------------------------------
   Every selector is scoped under .gl-msg. Note .gl-ms (no g) belongs to the
   middle school GRADE calculator on p160 and must not be touched. */
.gradelab .gl-msg{background:var(--gl-surface-1);border:1px solid var(--gl-border);border-radius:14px;padding:18px;}
.gradelab .gl-msg-hint{margin:0 0 14px;color:var(--gl-muted);font-size:14px;line-height:1.5;}

.gradelab .gl-msg-opts{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:10px;}
.gradelab .gl-msg-o{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1 1 240px;}
.gradelab .gl-msg-o-l{font-size:12px;font-weight:600;color:var(--gl-muted);}

.gradelab .gl-msg-toggles{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:14px;}
.gradelab .gl-msg-t{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--gl-text);cursor:pointer;min-height:44px;}
.gradelab .gl-msg-t input{width:18px;height:18px;accent-color:var(--gl-brand-500);cursor:pointer;}

.gradelab .gl-msg-rows{display:flex;flex-direction:column;gap:8px;margin-bottom:10px;}
/* Credits column is absent until the reader turns credits on, so the default
   layout never asks for a number a middle school report card does not carry. */
.gradelab .gl-msg-row{display:grid;grid-template-columns:minmax(0,1fr) 96px 40px;gap:8px;align-items:center;}
.gradelab .gl-msg-rows.gl-msg-showcr .gl-msg-row{grid-template-columns:minmax(0,1fr) 96px 88px 40px;}
.gradelab .gl-msg-cr{display:none;}
.gradelab .gl-msg-rows.gl-msg-showcr .gl-msg-cr{display:block;}
.gradelab .gl-msg-h-cr{display:none;}
.gradelab .gl-msg-rows.gl-msg-showcr .gl-msg-h-cr{display:block;}

.gradelab .gl-msg-row-head{font-size:12px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-msg-row-head span{padding-left:2px;}

.gradelab .gl-msg-result{margin-top:16px;}
.gradelab .gl-msg-pair{display:flex;flex-wrap:wrap;gap:22px;}
.gradelab .gl-msg-val{min-width:0;}
.gradelab .gl-msg-sub{margin-top:6px;}

.gradelab .gl-msg-foot{margin:12px 0 0;font-size:12.5px;line-height:1.55;color:var(--gl-muted);}

@media (max-width:560px){
  .gradelab .gl-msg{padding:14px;}
  .gradelab .gl-msg-row{grid-template-columns:minmax(0,1fr) 40px;grid-auto-rows:auto;}
  .gradelab .gl-msg-rows.gl-msg-showcr .gl-msg-row{grid-template-columns:minmax(0,1fr) 40px;}
  .gradelab .gl-msg-name{grid-column:1 / -1;}
  .gradelab .gl-msg-g{grid-column:1;}
  .gradelab .gl-msg-rows.gl-msg-showcr .gl-msg-cr{grid-column:1;}
  .gradelab .gl-msg-rm{grid-column:2;grid-row:2;}
  .gradelab .gl-msg-row-head{display:none;}
  .gradelab .gl-msg-pair{gap:16px;}
}
/* [hidden] must be restated or the display rules above win. */
.gradelab .gl-msg [hidden]{display:none !important;}

/* Grade curve calculator (p??? , HUB D pillar). Namespace .gl-cv.
   Deliberately reuses the shared components rather than restyling them: .gl-modes, .gl-mode,
   .gl-toggle, .gl-result, .gl-result-num, .gl-result-label, .gl-table-wrap, .gl-input, .gl-btn.
   The one shared rule this block overrides is wrapping on .gl-modes, because seven method buttons
   cannot sit on one line at 375 and .gl-modes is inline-flex with no wrap. The override is scoped
   to .gl-cv-methods only. */
/* [hidden] must win inside this block. The parameter labels and the panes are display:flex,
   and a class rule beats the user-agent [hidden]{display:none}, so params for methods that
   need none stayed on screen. Caught by driving the tool, not by reading the markup. */
.gradelab .gl-cv [hidden]{display:none !important;}
.gradelab .gl-cv{background:var(--gl-surface-1);border:1px solid var(--gl-border);border-radius:14px;padding:18px;}
.gradelab .gl-cv-hint{margin:0 0 14px;color:var(--gl-muted);font-size:14px;line-height:1.5;}
.gradelab .gl-cv-lab{display:flex;flex-direction:column;gap:4px;margin-bottom:14px;}
.gradelab .gl-cv-p-l{font-size:12px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-cv-scores{min-height:76px;resize:vertical;line-height:1.6;font-variant-numeric:tabular-nums;}
.gradelab .gl-cv-lab-one{max-width:220px;}
.gradelab .gl-cv-onenote{margin:0 0 10px;color:var(--gl-muted);font-size:13px;}
.gradelab .gl-cv-onestats{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px;}
.gradelab .gl-cv-onestats .gl-cv-p{flex:1 1 150px;}

.gradelab .gl-cv-mwrap{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
.gradelab .gl-cv-methods{flex-wrap:wrap;}
.gradelab .gl-cv-params{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:12px;}
.gradelab .gl-cv-p{display:flex;flex-direction:column;gap:4px;flex:1 1 170px;min-width:0;}
.gradelab .gl-cv-nop{font-size:13px;color:var(--gl-muted);align-self:center;}
.gradelab .gl-cv-opts{display:flex;flex-wrap:wrap;gap:16px;align-items:center;margin-bottom:14px;}
.gradelab .gl-cv-clampwrap input{width:18px;height:18px;accent-color:var(--gl-brand-500);cursor:pointer;}
.gradelab .gl-cv-dpwrap{gap:8px;}
.gradelab .gl-cv-dpwrap .gl-cv-dp{width:auto;min-width:64px;}

.gradelab .gl-cv-pair{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;}
.gradelab .gl-cv-val{flex:1 1 120px;min-width:0;}
.gradelab .gl-cv-val .gl-result-num{font-size:clamp(30px,8vw,44px);}
.gradelab .gl-cv-sub{font-size:13px;line-height:1.55;}

/* Distribution, before and after. Ten bins of ten points; the last one carries 100 itself.
   Heights are set inline as a percentage of the tallest bin in either series. */
.gradelab .gl-cv-chart{display:flex;align-items:flex-end;gap:3px;height:150px;padding:8px 0 0;}
.gradelab .gl-cv-bin{flex:1 1 0;display:flex;flex-direction:column;align-items:center;gap:5px;min-width:0;height:100%;}
.gradelab .gl-cv-bars{flex:1;display:flex;align-items:flex-end;justify-content:center;gap:2px;width:100%;}
.gradelab .gl-cv-bar{display:block;width:44%;max-width:15px;min-height:2px;border-radius:3px 3px 0 0;}
.gradelab .gl-cv-bar-b{background:var(--gl-surface-3);border:1px solid var(--gl-line);}
.gradelab .gl-cv-bar-a{background:var(--gl-brand-500);}
.gradelab .gl-cv-blab{font-size:10px;color:var(--gl-muted);font-variant-numeric:tabular-nums;}
.gradelab .gl-cv-legend{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--gl-muted);margin-top:8px;}
.gradelab .gl-cv-key{display:inline-block;width:11px;height:11px;border-radius:3px;}
.gradelab .gl-cv-key-b{background:var(--gl-surface-3);border:1px solid var(--gl-line);}
.gradelab .gl-cv-key-a{background:var(--gl-brand-500);margin-left:8px;}

.gradelab .gl-cv-tw table{font-variant-numeric:tabular-nums;}
/* Reserve space for the JS-filled breakdown table so injecting rows does not shift the page.
   Same guard the ovr/asg/crs/wif/ltr modes already use. min-height, never height, so a long
   class still expands past it. */
.gradelab .gl-cv-bd .gl-table-wrap{min-height:300px;}
.gradelab .gl-cv-sw table{font-variant-numeric:tabular-nums;}
.gradelab .gl-cv-sw table td:first-child{font-weight:600;color:var(--gl-muted);}
.gradelab .gl-cv-passwrap .gl-cv-pass{width:auto;min-width:64px;}
.gradelab .gl-cv-passwrap{gap:8px;}
.gradelab .gl-cv-foot{margin:12px 0 0;font-size:12.5px;line-height:1.55;color:var(--gl-muted);}

@media (max-width:520px){
  .gradelab .gl-cv{padding:14px;}
  .gradelab .gl-cv-chart{height:120px;gap:2px;}
  .gradelab .gl-cv-bar{max-width:10px;}
  .gradelab .gl-cv-blab{font-size:9px;}
  .gradelab .gl-cv-val{flex:1 1 90px;}
  .gradelab .gl-cv-bd .gl-table-wrap{min-height:260px;}
}

/* Bell curve grade calculator (cluster under HUB D). Namespace .gl-bc.
   Reuses the shared components rather than restyling them: .gl-modes, .gl-mode, .gl-toggle, .gl-result,
   .gl-result-num, .gl-result-label, .gl-table-wrap, .gl-scale, .gl-bd-wrap, .gl-input, .gl-btn,
   .gl-formula. The [hidden] override below is required: an author display rule beats the user-agent
   [hidden]{display:none}, which is a recurring trap in this engine. */
.gradelab .gl-bc{background:var(--gl-surface-1);border:1px solid var(--gl-border);border-radius:14px;padding:18px;}
.gradelab .gl-bc [hidden]{display:none !important;}
.gradelab .gl-bc-hint{margin:0 0 14px;color:var(--gl-muted);font-size:14px;line-height:1.5;}
.gradelab .gl-bc-lab{display:flex;flex-direction:column;gap:4px;margin-bottom:14px;}
.gradelab .gl-bc-l{font-size:12px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-bc-scores{min-height:76px;resize:vertical;line-height:1.6;font-variant-numeric:tabular-nums;}

.gradelab .gl-bc-mwrap{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
.gradelab .gl-bc-schemes{flex-wrap:wrap;}
.gradelab .gl-bc-params{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:12px;}
.gradelab .gl-bc-p{display:flex;flex-direction:column;gap:4px;flex:1 1 150px;min-width:0;}
.gradelab .gl-bc-nop{font-size:13px;color:var(--gl-muted);align-self:center;}
.gradelab .gl-bc-opts{display:flex;flex-wrap:wrap;gap:16px;align-items:center;margin-bottom:14px;}
.gradelab .gl-bc-dpwrap{gap:8px;}
.gradelab .gl-bc-dpwrap .gl-bc-dp{width:auto;min-width:64px;}

.gradelab .gl-bc-pair{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;}
.gradelab .gl-bc-val{flex:1 1 120px;min-width:0;}
.gradelab .gl-bc-val .gl-result-num{font-size:clamp(28px,7vw,40px);}
.gradelab .gl-bc-sub{font-size:13px;line-height:1.55;}
.gradelab .gl-bc-warn{margin-top:10px;padding:9px 12px;border-radius:var(--gl-r-md);background:var(--gl-surface-2);
  border:1px solid var(--gl-line);color:var(--gl-ink);font-size:13px;line-height:1.5;text-align:left;}

/* The class as bars with the normal curve beside it, bin by bin. Ten bins of ten points; the last
   carries 100 itself. Heights are a percentage of the tallest bar in either series, so the two are
   read against the same scale. */
.gradelab .gl-bc-chart{display:flex;align-items:flex-end;gap:3px;height:150px;padding:8px 0 0;}
.gradelab .gl-bc-bin{flex:1 1 0;display:flex;flex-direction:column;align-items:center;gap:5px;min-width:0;height:100%;}
.gradelab .gl-bc-bars{flex:1;display:flex;align-items:flex-end;justify-content:center;gap:2px;width:100%;}
.gradelab .gl-bc-bar{display:block;width:44%;max-width:15px;min-height:2px;border-radius:3px 3px 0 0;}
.gradelab .gl-bc-bar-b{background:var(--gl-brand-500);}
.gradelab .gl-bc-bar-c{background:var(--gl-surface-3);border:1px solid var(--gl-line);}
.gradelab .gl-bc-blab{font-size:10px;color:var(--gl-muted);font-variant-numeric:tabular-nums;}
.gradelab .gl-bc-legend{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--gl-muted);margin-top:8px;}
.gradelab .gl-bc-key{display:inline-block;width:11px;height:11px;border-radius:3px;}
.gradelab .gl-bc-key-b{background:var(--gl-brand-500);}
.gradelab .gl-bc-key-c{background:var(--gl-surface-3);border:1px solid var(--gl-line);margin-left:8px;}

.gradelab .gl-bc-tw table,.gradelab .gl-bc-sw table{font-variant-numeric:tabular-nums;}
/* Reserve space for the JS-filled tables so injecting rows does not shift the page. Same guard the
   ovr/asg/crs/wif/ltr modes use. min-height, never height, so a long class still expands past it. */
.gradelab .gl-bc-twrap .gl-table-wrap{min-height:230px;}
.gradelab .gl-bc-swrap .gl-table-wrap{min-height:300px;}
.gradelab .gl-bc-note{margin:10px 0 0;font-size:12.5px;line-height:1.5;color:var(--gl-muted);}
.gradelab .gl-bc-f{margin-top:14px;}
.gradelab .gl-bc-foot{margin:12px 0 0;font-size:12.5px;line-height:1.55;color:var(--gl-muted);}

@media (max-width:520px){
  .gradelab .gl-bc{padding:14px;}
  .gradelab .gl-bc-chart{height:120px;gap:2px;}
  .gradelab .gl-bc-bar{max-width:10px;}
  .gradelab .gl-bc-blab{font-size:9px;}
  .gradelab .gl-bc-val{flex:1 1 90px;}
  .gradelab .gl-bc-twrap .gl-table-wrap{min-height:200px;}
  .gradelab .gl-bc-swrap .gl-table-wrap{min-height:260px;}
}

/* Grade scale calculator (HUB E pillar). Namespace .gl-gs.
   NOT .gl-scale, which is already the shared table class used across every mode.
   Reuses the shared components rather than restyling them: .gl-modes, .gl-mode, .gl-result,
   .gl-result-num, .gl-result-label, .gl-table-wrap, .gl-scale, .gl-bd-wrap, .gl-input, .gl-btn,
   .gl-formula. The [hidden] override below is required: an author display rule beats the user-agent
   [hidden]{display:none}, which is a recurring trap in this engine. */
.gradelab .gl-gs{background:var(--gl-surface-1);border:1px solid var(--gl-border);border-radius:14px;padding:18px;}
.gradelab .gl-gs [hidden]{display:none !important;}
.gradelab .gl-gs-hint{margin:0 0 14px;color:var(--gl-muted);font-size:14px;line-height:1.5;}
.gradelab .gl-gs-lab{display:flex;flex-direction:column;gap:4px;margin-bottom:14px;}
.gradelab .gl-gs-l{font-size:12px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-gs-score{max-width:180px;font-variant-numeric:tabular-nums;}

.gradelab .gl-gs-mwrap{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
.gradelab .gl-gs-scales{flex-wrap:wrap;}
.gradelab .gl-gs-params{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px;}
.gradelab .gl-gs-p{display:flex;flex-direction:column;gap:4px;flex:1 1 140px;min-width:0;}
.gradelab .gl-gs-nop{font-size:13px;color:var(--gl-muted);align-self:center;}

.gradelab .gl-gs-pair{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;}
.gradelab .gl-gs-val{flex:1 1 120px;min-width:0;}
.gradelab .gl-gs-val .gl-result-num{font-size:clamp(28px,7vw,40px);}
.gradelab .gl-gs-sub{font-size:13px;line-height:1.55;}
.gradelab .gl-gs-warn{margin-top:10px;padding:9px 12px;border-radius:var(--gl-r-md);background:var(--gl-surface-2);
  border:1px solid var(--gl-line);color:var(--gl-ink);font-size:13px;line-height:1.5;text-align:left;}

.gradelab .gl-gs-cap{margin:0 0 8px;font-size:12px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-gs-chart table{font-variant-numeric:tabular-nums;}
/* Reserve space so switching between a 5-row and an 11-row scale does not shift the page.
   min-height, never height, so the plus/minus scale still expands past it. */
.gradelab .gl-gs-cwrap .gl-table-wrap{min-height:230px;}
.gradelab .gl-gs-note{margin:10px 0 0;font-size:12.5px;line-height:1.5;color:var(--gl-muted);}
.gradelab .gl-gs-f{margin-top:14px;}
.gradelab .gl-gs-foot{margin:12px 0 0;font-size:12.5px;line-height:1.55;color:var(--gl-muted);}

@media (max-width:520px){
  .gradelab .gl-gs{padding:14px;}
  .gradelab .gl-gs-val{flex:1 1 90px;}
  .gradelab .gl-gs-cwrap .gl-table-wrap{min-height:200px;}
}

/* Print. Scoped to .gl-gs-printing, which initScale puts on <html> only for the duration of the
   Print button's own window.print() call and removes on afterprint. Without that scope these rules
   would hide the body of every page on the site that loads this stylesheet, not just this one. */
@media print{
  .gl-gs-printing body *{visibility:hidden !important;}
  .gl-gs-printing .gl-gs-printarea,
  .gl-gs-printing .gl-gs-printarea *{visibility:visible !important;}
  .gl-gs-printing .gl-gs-printarea{position:absolute;left:0;top:0;width:100%;padding:0;margin:0;}
  .gl-gs-printing .gl-gs-printarea .gl-table-wrap{overflow:visible;min-height:0;}
  .gl-gs-printing .gl-gs-printarea summary{font-weight:700;list-style:none;}
  .gl-gs-printing .gl-gs-printarea .gl-scale th,
  .gl-gs-printing .gl-gs-printarea .gl-scale td{border-color:#999 !important;}
}

/* ---- pctletter mode (Percentage to Letter Grade Calculator, p?) --------------------------------
   Everything is scoped under .gl-pl. Reuses the shared components rather than restyling them:
   .gl-modes, .gl-mode, .gl-result, .gl-result-num, .gl-result-label, .gl-result-badges,
   .gl-table-wrap, .gl-scale, .gl-bd-wrap, .gl-input, .gl-btn, .gl-formula. The [hidden] override is
   required: an author display rule beats the user-agent [hidden]{display:none}. */
.gradelab .gl-pl{background:var(--gl-surface-1);border:1px solid var(--gl-border);border-radius:14px;padding:18px;}
.gradelab .gl-pl [hidden]{display:none !important;}
.gradelab .gl-pl-hint{margin:0 0 14px;color:var(--gl-muted);font-size:14px;line-height:1.5;}
.gradelab .gl-pl-lab{display:flex;flex-direction:column;gap:4px;margin-bottom:14px;}
.gradelab .gl-pl-l{font-size:12px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-pl-score{max-width:180px;font-variant-numeric:tabular-nums;}

.gradelab .gl-pl-mwrap{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
.gradelab .gl-pl-scales{flex-wrap:wrap;}
.gradelab .gl-pl-params{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px;}
.gradelab .gl-pl-p{display:flex;flex-direction:column;gap:4px;flex:1 1 140px;min-width:0;}
.gradelab .gl-pl-nop{font-size:13px;color:var(--gl-muted);align-self:center;}

/* The two distance blocks. Smaller than the headline letter above them, because they carry a short
   phrase ("3 to A-") rather than a single character. */
.gradelab .gl-pl-pair{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;margin-top:14px;}
.gradelab .gl-pl-val{flex:1 1 130px;min-width:0;}
.gradelab .gl-pl-val .gl-result-num{font-size:clamp(20px,5vw,28px);white-space:nowrap;}
.gradelab .gl-pl-sub{font-size:13px;line-height:1.55;margin-top:12px;}
.gradelab .gl-pl-warn{margin-top:10px;padding:9px 12px;border-radius:var(--gl-r-md);background:var(--gl-surface-2);
  border:1px solid var(--gl-line);color:var(--gl-ink);font-size:13px;line-height:1.5;text-align:left;}

.gradelab .gl-pl-cap{margin:0 0 8px;font-size:12px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-pl-chart table{font-variant-numeric:tabular-nums;}
/* The neighbourhood table is always 11 rows, so this only guards the first paint. min-height, never
   height, so a clamped window at 0 or 100 can still shrink gracefully. */
.gradelab .gl-pl-bd .gl-table-wrap{min-height:380px;}
.gradelab .gl-pl-note{margin:10px 0 0;font-size:12.5px;line-height:1.5;color:var(--gl-muted);}
.gradelab .gl-pl-f{margin-top:14px;}
.gradelab .gl-pl-foot{margin:12px 0 0;font-size:12.5px;line-height:1.55;color:var(--gl-muted);}

@media (max-width:520px){
  .gradelab .gl-pl{padding:14px;}
  .gradelab .gl-pl-val{flex:1 1 100px;}
  .gradelab .gl-pl-bd .gl-table-wrap{min-height:340px;}
}

/* Print. Scoped to .gl-pl-printing, which initPctletter puts on <html> only for the duration of the
   Print button's own window.print() call and removes on afterprint. Without that scope these rules
   would hide the body of every page on the site that loads this stylesheet. */
@media print{
  .gl-pl-printing body *{visibility:hidden !important;}
  .gl-pl-printing .gl-pl-printarea,
  .gl-pl-printing .gl-pl-printarea *{visibility:visible !important;}
  .gl-pl-printing .gl-pl-printarea{position:absolute;left:0;top:0;width:100%;padding:0;margin:0;}
  .gl-pl-printing .gl-pl-printarea .gl-table-wrap{overflow:visible;min-height:0;max-height:none;}
  .gl-pl-printing .gl-pl-printarea .gl-scale th,
  .gl-pl-printing .gl-pl-printarea .gl-scale td{border-color:#999 !important;}
}

/* ---- gconv mode (Grade Conversion Calculator) --------------------------------------------------
   Scoped under .gl-gc. Reuses the shared components rather than restyling them: .gl-modes, .gl-mode,
   .gl-result, .gl-result-num, .gl-result-label, .gl-result-badges, .gl-table-wrap, .gl-scale,
   .gl-bd-wrap, .gl-input, .gl-btn, .gl-formula. The [hidden] override is required: an author display
   rule beats the user-agent [hidden]{display:none}. */
.gradelab .gl-gc{background:var(--gl-surface-1);border:1px solid var(--gl-border);border-radius:14px;padding:18px;}
.gradelab .gl-gc [hidden]{display:none !important;}
.gradelab .gl-gc-hint{margin:0 0 14px;color:var(--gl-muted);font-size:14px;line-height:1.5;}
.gradelab .gl-gc-l{font-size:12px;font-weight:600;color:var(--gl-muted);}

.gradelab .gl-gc-grid{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:14px;}
.gradelab .gl-gc-f{display:flex;flex-direction:column;gap:4px;flex:1 1 200px;min-width:0;}
.gradelab .gl-gc-lab{display:flex;flex-direction:column;gap:4px;margin-bottom:14px;}
.gradelab .gl-gc-val{max-width:180px;}
.gradelab .gl-gc-mwrap{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
.gradelab .gl-gc-kinds{flex-wrap:wrap;}

.gradelab .gl-gc-params{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px;align-items:flex-end;}
.gradelab .gl-gc-p{display:flex;flex-direction:column;gap:4px;flex:1 1 120px;min-width:0;}
.gradelab .gl-gc-nop{flex:1 1 100%;font-size:13px;color:var(--gl-muted);}

/* The two comparison blocks. Smaller than the headline letter, because they carry short values. */
.gradelab .gl-gc-pair{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;margin-top:14px;}
.gradelab .gl-gc-val-b{flex:1 1 120px;min-width:0;}
.gradelab .gl-gc-val-b .gl-result-num{font-size:clamp(22px,5vw,30px);white-space:nowrap;}
.gradelab .gl-gc-sub{font-size:13px;line-height:1.55;margin-top:12px;}
.gradelab .gl-gc-loss{margin-top:10px;padding:9px 12px;border-radius:var(--gl-r-md);background:var(--gl-surface-2);
  border:1px solid var(--gl-line);color:var(--gl-ink);font-size:13px;line-height:1.5;text-align:left;}

.gradelab .gl-gc-cap{margin:0 0 8px;font-size:12px;font-weight:600;color:var(--gl-muted);}
.gradelab .gl-gc-chart table{font-variant-numeric:tabular-nums;}
/* Hold the wrapper open when the chart empties, which happens while custom cutoffs are invalid.
   It cannot absorb the 5-row versus 13-row difference and does not try to: that shift is
   user-initiated, sits below the controls and the result, and is excluded from CLS.
   min-height, never height, so the longer scales can still expand past it. */
.gradelab .gl-gc-bd .gl-table-wrap{min-height:230px;}
.gradelab .gl-gc-note{margin:10px 0 0;font-size:12.5px;line-height:1.5;color:var(--gl-muted);}
.gradelab .gl-gc-fm{margin-top:14px;}
.gradelab .gl-gc-foot{margin:12px 0 0;font-size:12.5px;line-height:1.55;color:var(--gl-muted);}

@media (max-width:520px){
  .gradelab .gl-gc{padding:14px;}
  .gradelab .gl-gc-val-b{flex:1 1 100px;}
  .gradelab .gl-gc-bd .gl-table-wrap{min-height:200px;}
}

/* ---- apscore (AP grade calculator, build #38) ---- */
.gradelab .gl-aps-hint{margin:0 20px 14px;font-size:14px;color:var(--gl-muted);line-height:1.55;}
.gradelab .gl-aps-slab{display:flex;flex-direction:column;gap:4px;margin:0 20px 16px;}
.gradelab .gl-aps-l{font-size:12px;color:var(--gl-muted);text-transform:uppercase;letter-spacing:.05em;}
.gradelab .gl-aps-rows{margin:0 20px 16px;display:flex;flex-direction:column;gap:12px;}
.gradelab .gl-aps-row{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;padding:12px;
  border:1px solid var(--gl-line);border-radius:var(--gl-r-md);background:var(--gl-surface-2);}
.gradelab .gl-aps-sec{flex:1 1 100%;display:flex;flex-wrap:wrap;gap:8px;align-items:baseline;}
.gradelab .gl-aps-lab{font-weight:600;font-size:15px;color:var(--gl-ink);}
.gradelab .gl-aps-w{font-size:12px;color:var(--gl-muted);}
.gradelab .gl-aps-f{display:flex;flex-direction:column;gap:4px;flex:1 1 120px;min-width:0;}

.gradelab .gl-aps-out{display:flex;flex-wrap:wrap;gap:12px;margin:0 20px 12px;}
.gradelab .gl-aps-out .gl-result{margin:0;flex:1 1 200px;position:relative;}
.gradelab .gl-aps-rl{display:block;font-size:12px;color:var(--gl-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:2px;}
.gradelab .gl-aps-tag{display:inline-block;margin-top:8px;font-size:12px;font-weight:700;letter-spacing:.06em;
  text-transform:uppercase;padding:3px 10px;border-radius:999px;}
.gradelab .gl-aps-exact{background:var(--gl-surface-3);color:var(--gl-ink);}
.gradelab .gl-aps-est{background:var(--gl-surface-3);color:var(--gl-muted);}

.gradelab .gl-aps-band{margin:0 20px 6px;font-size:16px;font-weight:600;color:var(--gl-ink);text-align:center;}
.gradelab .gl-aps-share{margin:0 20px 16px;font-size:14px;color:var(--gl-muted);text-align:center;line-height:1.5;}
.gradelab .gl-aps-struct{margin:0 20px 14px;font-size:13px;color:var(--gl-muted);line-height:1.55;}

.gradelab .gl-aps-dist{margin:0 20px 14px;}
.gradelab .gl-aps-dt{width:100%;border-collapse:collapse;font-size:14px;}
.gradelab .gl-aps-dt caption{caption-side:top;text-align:left;font-size:12px;color:var(--gl-muted);
  text-transform:uppercase;letter-spacing:.05em;padding-bottom:8px;}
.gradelab .gl-aps-dt th,.gradelab .gl-aps-dt td{padding:8px 10px;border-bottom:1px solid var(--gl-line);text-align:left;}
.gradelab .gl-aps-dt thead th{font-size:12px;color:var(--gl-muted);text-transform:uppercase;letter-spacing:.05em;}
.gradelab .gl-aps-dt tbody th{font-weight:700;color:var(--gl-ink);}
.gradelab .gl-aps-dt tr.is-you{background:var(--gl-surface-3);}
.gradelab .gl-aps-dt tr.is-you th,.gradelab .gl-aps-dt tr.is-you td{font-weight:700;color:var(--gl-ink);}

.gradelab .gl-aps-meth{margin:0 20px 20px;border:1px solid var(--gl-line);border-radius:var(--gl-r-md);
  background:var(--gl-surface-2);}
.gradelab .gl-aps-meth summary{padding:12px 14px;cursor:pointer;font-weight:600;font-size:14px;
  color:var(--gl-ink);min-height:44px;display:flex;align-items:center;}
.gradelab .gl-aps-meth p{margin:0 14px 12px;font-size:14px;color:var(--gl-muted);line-height:1.6;}
.gradelab .gl-aps-meth strong{color:var(--gl-ink);}

@media (max-width:480px){
  .gradelab .gl-aps-out{flex-direction:column;}
  .gradelab .gl-aps-f{flex:1 1 100%;}
}

/* ---- apscore: subject directory + distribution category rows (post content) ---- */
.gradelab .gl-aps-dir{list-style:none;margin:0 0 24px;padding:0;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(216px,1fr));gap:10px;}
.gradelab .gl-aps-dir li{display:block;}
.gradelab .gl-aps-dir a{display:flex;align-items:center;min-height:52px;padding:10px 14px;
  background:var(--gl-surface);border:1px solid var(--gl-line);border-radius:var(--gl-r-lg);
  font-family:var(--gl-fd);font-weight:600;font-size:15px;line-height:1.3;
  color:var(--gl-brand-700);text-decoration:none;
  transition:transform .15s,box-shadow .15s,border-color .15s;}
.gradelab .gl-aps-dir a:hover,.gradelab .gl-aps-dir a:focus-visible{
  box-shadow:var(--gl-shadow);transform:translateY(-1px);border-color:var(--gl-brand-500);}
.gradelab .gl-aps-dir + h3{margin-top:26px;}
.gradelab tr.gl-aps-cat th{background:var(--gl-surface-3);font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--gl-muted);font-weight:700;}

/* apscore: the model read backwards - what each score needs */
.gradelab .gl-aps-thresh{margin:0 20px 16px;padding:12px 14px;border:1px solid var(--gl-line);
  border-radius:var(--gl-r-md);background:var(--gl-surface-2);display:flex;flex-direction:column;gap:4px;}
.gradelab .gl-aps-thresh:empty{display:none;}
.gradelab .gl-aps-tl{font-size:12px;color:var(--gl-muted);text-transform:uppercase;letter-spacing:.05em;}
.gradelab .gl-aps-tv{font-size:15px;font-weight:600;color:var(--gl-ink);}
.gradelab .gl-aps-tn{font-size:12px;color:var(--gl-muted);}
