/* ============================================================================
 * Heliomath APP — the authenticated (logged-in) brand layer.
 *
 * Carved VERBATIM from the retired brand override (brands/heliomath.css): these
 * were the only rules it still uniquely provided, all on logged-in surfaces —
 *   - .learner-profile-area   — account / settings / subscription pages
 *   - .interstitial           — answer-history-consent + account-dissolution
 *   - .onboarding-survey-area — post-signup "how did you hear about us"
 *   - .start-free-trial-area / .payment-details-area — the post-signup funnel
 *   - .ghelp_grokkoli_icon* / .icon_grokkoli_logo    — the question-page icons
 *
 * Loaded on alpha_base for Heliomath at the OLD brand-override slot: after
 * figureone.css (so the !important icon rules win) and before the account-access
 * flow (so the funnel rules that account_access.css also sets resolve to
 * account_access, exactly as they did against the override). Gated OFF the public
 * solid-nav content pages, which carry none of these classes.
 *
 * SELF-CONTAINED PALETTE: these rules consume the legacy --helio-* tokens, and the
 * alpha_base app pages do NOT load the marketing layer (heliomath_marketing.css), so
 * the raw palette is declared here (verbatim from the old override :root). This is the
 * exploration palette, kept AS-IS so the logged-in pages render pixel-identically;
 * migrating these onto the Sunset tokens is a later step (with the app foundation).
 * ========================================================================== */

:root {
    /* Solar — CTAs, highlights, progress, achievement, logo */
    --helio-sunlight: #FFC44D;
    --helio-solar-gold: #F6B21A;
    --helio-amber: #E89611;

    /* Navy — headings, icons, nav, graphs */
    --helio-midnight: #0D1B2A;
    --helio-slate: #31475E;
    --helio-steel: #5F7388;

    /* Backgrounds — keep slightly sunlit (no pure gray) */
    --helio-cream: #FCF6E9;
    --helio-cloud: #F7F5F0;
    --helio-white: #FFFFFF;

    /* Blue accent — links, secondary buttons, active states, math viz */
    --helio-sky: #4A90E2;
    --helio-soft-sky: #87BFFF;

    /* Text */
    --helio-muted: #7A8A99;

    /* Semantic */
    --helio-success: #2EAD72;
    --helio-warning: #F59E0B;
    --helio-error: #E05252;
    --helio-info: #4A90E2;
}

/* --- Account section (.learner-profile-area): the logged-in account pages —
 *     learners (learner_profiles.html), account settings (account_settings.html)
 *     and subscription (subscription.html). All three extend alpha_base. The
 *     shared chrome is Grokkoli blue/green (blue primary buttons, green setting
 *     labels + "on" toggles, green free-trial card); re-theme to the Heliomath
 *     ramp. Scoped to .learner-profile-area so nothing leaks. --- */
.learner-profile-area h1 { color: var(--helio-midnight); }
.learner-profile-area .settings-box h3 { color: var(--helio-midnight); }

/* Setting labels are Grokkoli green — recolor to navy. */
.learner-profile-area .setting-set h5,
.learner-profile-area .setting-set.global h5 { color: var(--helio-slate); }

/* Non-colour focus/press affordance (WCAG 1.4.1 "use of colour" + 2.4.7 focus visible):
 * the primary button's hover/press is a colour change only, so add a SHAPE signal — a
 * detached ring on focus plus a press nudge. Ring is SKY-BLUE (--helio-sky): it clears
 * ~3:1 on this layer's light page (--helio-cloud) AND matches the focus hue this layer
 * already uses on its form inputs (.form-control:focus below), so buttons and fields
 * indicate focus the same way.
 * (Only fires on focusable elements: the <button>/<input>/<a> primary buttons — a bare
 * non-focusable <div class="btn"> can't receive :focus.) */
.learner-profile-area .btn-grokkoli-primary:focus {
    outline: 2px solid var(--helio-sky);
    outline-offset: 3px;
    box-shadow: none;   /* clear Bootstrap's .btn:focus glow */
}
.learner-profile-area .btn-grokkoli-primary:active {
    transform: translateY(1px);
}

/* On/off toggles: the active segment is Grokkoli green → Heliomath success green
 * (keeps the "on = green" affordance, on-brand). */
.learner-profile-area .setting-option .btn-secondary:not(:disabled).active {
    background-color: var(--helio-success);
}

/* Learner selector pills: active/hover green → Heliomath success green. */
.learner-profile-area .learner-tab:hover {
    border-color: var(--helio-success);
    color: var(--helio-success);
}
.learner-profile-area .learner-tab.active {
    background-color: var(--helio-success);
    border-color: var(--helio-success);
    color: var(--helio-white);
}
/* Save buttons (enabled): Grokkoli green fill → Heliomath success green. */
.learner-profile-area .profile-save-btn:not(.profile-save-disabled) {
    background-color: var(--helio-success);
}

/* In-card subsection headings (PROFILE, LOGIN PIN, …): neutral grey → steel. */
.learner-profile-area .setting-subhead {
    color: var(--helio-steel);
}

/* Name-pronunciation controls are Grokkoli blue → Heliomath sky (its blue accent). */
.learner-profile-area .pronunciation-volume-icon {
    color: var(--helio-sky);
}
.learner-profile-area .pronunciation-preview-btn:hover .pronunciation-volume-icon {
    color: var(--helio-slate);
}
.learner-profile-area .pronunciation-save-btn:not(.pronunciation-save-disabled) {
    background-color: var(--helio-success);
}

/* Override dropdowns (answer-time / max-questions) are Grokkoli green → success. */
.learner-profile-area .drop-down-selector-container select,
.learner-profile-area .drop-down-selector-container select.success {
    color: var(--helio-success);
    border-color: var(--helio-success);
}

/* Login-PIN and skip-question buttons are Grokkoli purple → slate. */
.learner-profile-area .account_settings_password_button {
    color: var(--helio-slate);
}
.learner-profile-area .skip_question_button {
    color: var(--helio-slate);
}

/* Settings success/error copy: Grokkoli green/orange → Heliomath success/error.
 * (error rules come last so they win over the success colour on the PIN message,
 * which carries both classes.) */
.learner-profile-area .account_settings_message,
.learner-profile-area .profile-field-message {
    color: var(--helio-success);
}
.learner-profile-area .account_settings_message_error,
.learner-profile-area .profile-field-message.profile-field-error {
    color: var(--helio-error);
}

/* Inline green/gold/winter-green accent text → Solar Gold. */
.learner-profile-area .accent-color-green,
.learner-profile-area .accent-color-gold,
.learner-profile-area .accent-color-winter-green {
    color: var(--accent-primary) !important;
}
.learner-profile-area p .accent-color-green,
.learner-profile-area li .accent-color-green {
    color: var(--accent-primary) !important;
}

/* The free-trial highlight card is solid Grokkoli green → navy with white text. */
.learner-profile-area .product-card.free-trial {
    background-color: var(--helio-midnight);
    color: var(--helio-white);
}

/* ClassWallet notice banner is Grokkoli blue → Sky Blue. */
.learner-profile-area .classwallet-msg { background-color: var(--helio-sky); }

/* --- Interstitial pages (.interstitial.grokkoli-gradient): the answer-history
 *     consent page (answer_history_consent.html, shown right after signup) and the
 *     account-dissolution page (dissolve_account.html). Both extend alpha_base. The
 *     shared chrome is a green→blue gradient with white copy, lemon/gold accents and
 *     translucent-white buttons — reflow to a cream field with navy copy, gold
 *     accents and a gold primary button. --- */
.interstitial.grokkoli-gradient {
    background-image: none;
    background-color: var(--helio-cream);
}
.interstitial-message { color: var(--helio-midnight); opacity: 1; }
.interstitial-message h4 { color: var(--helio-slate); opacity: 1; }
.interstitial-message .accent-color-lemon,
.interstitial-message .accent-color-gold { color: var(--helio-amber) !important; }
/* T&S / Privacy links carry an inline light-green color; !important out-ranks the
 * inline style (inline isn't !important). */
.interstitial a { color: var(--helio-sky) !important; }
.interstitial a:hover { color: #357ABD !important; }
.interstitial .btn-grokkoli-primary {
    opacity: 1;
    color: var(--helio-midnight);
    background-color: var(--helio-solar-gold);
    background-image: linear-gradient(180deg, var(--helio-sunlight), var(--helio-solar-gold));
    border: none;
}
.interstitial .btn-grokkoli-primary:hover,
.interstitial .btn-grokkoli-primary:focus,
.interstitial .btn-grokkoli-primary:active {
    color: var(--helio-midnight);
    background-image: linear-gradient(180deg, var(--helio-solar-gold), var(--helio-amber));
}

/* --- Onboarding survey (.onboarding-survey-area.grokkoli-gradient): the "how did
 *     you hear about us" page shown right after signup. Same gradient chrome →
 *     cream field, navy heading + labels, white inputs, gold primary button. The
 *     shared CSS colors the heading mint-green with a dark-bg text-shadow; drop it. */
.onboarding-survey-area.grokkoli-gradient {
    background-image: none;
    background-color: var(--helio-cream);
}
.onboarding-survey-area h2 { color: var(--helio-midnight); text-shadow: none; }
.onboarding-survey-area label { color: var(--helio-slate); }
.onboarding-survey-area .single-option-select-field label:hover {
    background-color: rgba(13, 27, 42, 0.06);   /* --helio-midnight @ 6% */
}
.onboarding-survey-area .form-control {
    background-color: var(--helio-white);
    border: 1px solid rgba(13, 27, 42, 0.28);   /* --helio-midnight @ 28% */
    box-shadow: 0 1px 2px rgba(13, 27, 42, 0.06);
    color: var(--helio-midnight);
}
.onboarding-survey-area .form-control:focus {
    border-color: var(--helio-sky);
    box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.25);   /* --helio-sky @ 25% */
    outline: none;
}
.onboarding-survey-area .btn-grokkoli-primary {
    color: var(--helio-midnight);
    background-color: var(--helio-solar-gold);
    background-image: linear-gradient(180deg, var(--helio-sunlight), var(--helio-solar-gold));
    border: none;
}
.onboarding-survey-area .btn-grokkoli-primary:hover,
.onboarding-survey-area .btn-grokkoli-primary:focus,
.onboarding-survey-area .btn-grokkoli-primary:active {
    color: var(--helio-midnight);
    background-image: linear-gradient(180deg, var(--helio-solar-gold), var(--helio-amber));
}

/* --- Post-signup trial funnel: the "how your free trial works" explainer
 *     (.start-free-trial-area.grokkoli-gradient, start_free_trial.html) and the
 *     card-entry page (.payment-details-area.grokkoli-gradient,
 *     enter_payment_details.html). Both extend alpha_base. The shared chrome is the
 *     green→blue gradient with white copy, lemon accents and a green primary button
 *     → reflow to a cream field with navy copy, gold accents and a gold button. --- */
.start-free-trial-area.grokkoli-gradient,
.payment-details-area.grokkoli-gradient {
    background-image: none;
    background-color: var(--helio-cream);
}
/* Headings/copy are white on the shared dark field; recolor for the light field.
 * (Selectors match the shared rule's specificity and win by load order.) */
.start-free-trial-area h2,
.start-free-trial-area h3,
.start-free-trial-area p,
.payment-details-area h2,
.payment-details-area h3,
.payment-details-area p {
    color: var(--helio-midnight);
    text-shadow: none;
}
/* Free-trial timeline: the shared bar is a lemon→blue gradient with lemon-ringed
 * teal notches and lemon "Today / In N days" headings — rebrand to gold/navy. */
.free-trial-explainer-container h4 {
    color: var(--helio-amber);
}
.free-trial-explainer-container .free-trial-text-block p {
    color: var(--helio-slate);
}
.free-trial-timeline {
    background-color: var(--helio-sunlight);
    background-image: linear-gradient(var(--helio-solar-gold), var(--helio-solar-gold), var(--helio-solar-gold), var(--helio-midnight));
}
.free-trial-timeline-notch {
    background-color: var(--helio-slate);
    border-color: var(--helio-solar-gold);
}
/* Payment page: product-selection labels/copy read on the dark field; recolor.
 * The discount line uses the shared lemon accent → brand amber. */
.payment-details-area label,
.payment-details-area .product-info {
    color: var(--helio-slate);
}
.payment-details-area .accent-color-lemon {
    color: var(--helio-amber) !important;
}
/* Primary buttons (#start-free-trial, #submit-payment-btn) → gold gradient, navy
 * text. Base rule is single-class .btn-grokkoli-primary; these two-class selectors
 * win, and no ID rule sets the button background so class specificity suffices. */
.start-free-trial-area .btn-grokkoli-primary,
.payment-details-area .btn-grokkoli-primary {
    background-color: var(--helio-solar-gold);
    background-image: linear-gradient(180deg, var(--helio-sunlight), var(--helio-solar-gold));
    color: var(--helio-midnight);
    border: none;
}
.start-free-trial-area .btn-grokkoli-primary:hover,
.start-free-trial-area .btn-grokkoli-primary:focus,
.start-free-trial-area .btn-grokkoli-primary:active,
.payment-details-area .btn-grokkoli-primary:hover,
.payment-details-area .btn-grokkoli-primary:focus,
.payment-details-area .btn-grokkoli-primary:active {
    background-color: var(--helio-amber);
    background-image: linear-gradient(180deg, var(--helio-solar-gold), var(--helio-amber));
    color: var(--helio-midnight);
}

/* Brand the question icons. These classes set their background-image in the
   static figureone.css, which is linked AFTER this file, so !important is
   required to win the cascade at equal specificity.
   - .ghelp_grokkoli_icon: top-left help-bubble icon (most questions)
   - .ghelp_grokkoli_icon_white: its white/grey variant (message/decision) — no
     dedicated light cut yet, so it reuses helio.png to keep the brand consistent.
   - .icon_grokkoli_logo: the large logo in honing (honing_intro equation_icon) */
.ghelp_grokkoli_icon {
    background-image: url("/static/img/brands/heliomath/helio.a0e00101cf1a.png") !important;
}
.ghelp_grokkoli_icon_white {
    background-image: url("/static/img/brands/heliomath/helio.a0e00101cf1a.png") !important;
}
.icon_grokkoli_logo {
    background-image: url("/static/img/brands/heliomath/helio-big.dd2630137124.png") !important;
}
/* Heliomath only: a slow warm-light sheen that drifts across the pulsing sun. A
   ::after overlay is masked to the sun PNG (so the tint lands only on the sun, not
   its transparent frame) and filled with a SOLAR gradient that slides via
   background-position. It's a child of the icon, so it pulses along with it; overlay
   blend at 0.9 opacity, with a brighter mid glint, makes the sweep read clearly over
   the sun. Scoped to .slow-infinite-pulse so only the honing sun gets it.

   ⚠ THIS GRADIENT, NOT THE PNG, IS MOST OF THE COLOUR YOU SEE. At 0.9 opacity in
   overlay blend it repaints the icon: when the artwork moved to #F2A916 but these
   stops were still ember/marigold, the sun still composited to ~#FEA602 — hotter and
   far more saturated than the asset. So the stops must move WITH the artwork. They
   now track the solar family: --solar-deeper (#DE9A0B) at the ends, --solar-deep
   (#F2A916) matching the asset itself, and --sunbeam-lifter (#FFD98C) as the mid
   glint — two near-identical tones alone read as nothing, so the bright middle is what
   makes the sweep visible at all. Hexes are inlined because heliomath_tokens.css
   (where those tokens live) does not load on app pages. */
.icon_grokkoli_logo.slow-infinite-pulse::after {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    -webkit-mask-image: url("/static/img/brands/heliomath/helio-big.dd2630137124.png");
    mask-image: url("/static/img/brands/heliomath/helio-big.dd2630137124.png");
    -webkit-mask-size: contain;
    mask-size: contain;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    /* solar-deeper -> solar-deep with a brighter #FFD98C glint in the middle so the
       sweep is visible (two near-identical tones alone read as nothing). */
    background: linear-gradient(60deg,
        #DE9A0B 0%, #F2A916 38%, #FFD98C 50%, #F2A916 62%, #DE9A0B 100%);
    background-size: 250% 250%;
    background-position: 0% 50%;
    mix-blend-mode: overlay;
    opacity: 0.9;
    pointer-events: none;
    animation: helio-sun-sheen 12s linear infinite;
}
@keyframes helio-sun-sheen {
    from { background-position: 0% 50%; }
    to { background-position: 100% 50%; }
}
/* Same warm sheen on the little top-left help bubble (.ghelp_grokkoli_icon) that
   shows on actual question pages — otherwise the sun there reads as flat orange on
   its white circle. The bubble paints the sun as a 70%/center background (not
   full-bleed like honing), so the mask uses the SAME 70%/center to land only on the
   sun. position:relative makes the icon the containing block for ::after; the icon is
   a child that already fills #ghelp_grokkoli, so relative-with-no-offset doesn't move
   it. Covers the message/decision white variant too — that element also carries
   .ghelp_grokkoli_icon. Reuses the shared helio-sun-sheen keyframe. */
.ghelp_grokkoli_icon {
    position: relative;
}
.ghelp_grokkoli_icon::after {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    -webkit-mask-image: url("/static/img/brands/heliomath/helio.a0e00101cf1a.png");
    mask-image: url("/static/img/brands/heliomath/helio.a0e00101cf1a.png");
    -webkit-mask-size: 70%;
    mask-size: 70%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    /* Same solar stops as the honing sun above — keep the two in step. */
    background: linear-gradient(60deg,
        #DE9A0B 0%, #F2A916 38%, #FFD98C 50%, #F2A916 62%, #DE9A0B 100%);
    background-size: 250% 250%;
    background-position: 0% 50%;
    mix-blend-mode: overlay;
    opacity: 0.9;
    pointer-events: none;
    animation: helio-sun-sheen 12s linear infinite;
}


/* --- Nav: the QUIET account link -------------------------------------------
 * When an account has not cleared onboarding, the nav carries a single "Account
 * Settings" link in place of the account dropdown (see nav_account_menu in
 * alpha_base.html). It is an escape hatch -- the route to dissolving the account --
 * not a call to action, so it drops the pill and is styled as an ORDINARY LINK: the
 * same colour, hover and press the rest of the system gives a link on that surface.
 *
 * Two surfaces, two link systems, because this one link appears on both:
 *   - light app pages (account settings, subscription) load grokkoli_base, whose
 *     a / a:hover / a:active are --main-blue / -hover / -press;
 *   - dark funnel pages load NEITHER grokkoli_base nor heliomath_base, so the Sunset
 *     on-dark link definition is applied by hand here -- the same thing
 *     heliomath_account_access.css does for `.terms-accepted-text a`.
 * The light rule reads the Sunset token FIRST and falls back to the legacy one
 * (`var(--link, var(--main-blue))`), so these pages pick up the Sunset link colour
 * for free if they ever gain the token layer.
 *
 * No underline, on either surface: links here aren't underlined (base.css sets
 * text-decoration:none, and grokkoli_base underlines only `p a`), so matching the
 * system means matching that too.
 *
 * heliomath_app is the only stylesheet loaded on ALL these pages, which is why the
 * rules live here rather than in heliomath_nav.css. */
.navbar-nav .nav-link.nav-link-quiet {
    color: var(--link, var(--main-blue));
    background-color: transparent;
    border-radius: 0;
    text-decoration: none;
}
.navbar-nav .nav-link.nav-link-quiet:hover,
.navbar-nav .nav-link.nav-link-quiet:focus {
    color: var(--link-hover, var(--main-blue-hover));
    background-color: transparent;
    text-decoration: none;
}
.navbar-nav .nav-link.nav-link-quiet:active {
    color: var(--link-active, var(--main-blue-press));
    background-color: transparent;
}

/* Dark funnel pages. heliomath_nav.css paints the pill through TWO selectors and
 * loads AFTER this file, so both are mirrored here with .nav-link-quiet appended --
 * its `.header.navbar-light.transparent` form is five classes, so the `.auth-page`
 * form alone loses to it. The pill's padding is deliberately left alone, so dropping
 * the fill doesn't shift the label's position in the bar. */
.header.navbar-light.transparent .navbar-nav .nav-link.nav-link-quiet,
.auth-page .navbar-nav .nav-link.nav-link-quiet {
    color: var(--link-on-dark);
    background-color: transparent;
    border-radius: 0;
}
.header.navbar-light.transparent .navbar-nav .nav-link.nav-link-quiet:hover,
.auth-page .navbar-nav .nav-link.nav-link-quiet:hover {
    color: var(--link-on-dark-hover);
    background-color: transparent;
}
.header.navbar-light.transparent .navbar-nav .nav-link.nav-link-quiet:active,
.auth-page .navbar-nav .nav-link.nav-link-quiet:active {
    color: var(--link-on-dark-active);
    background-color: transparent;
}

/* Focus ring: the system's link ring (heliomath_base's `a:focus`) -- a box-shadow in
 * the link colour with outline:none, re-pointed to the on-dark pair on the dark
 * pages. Overrides heliomath_nav.css's pill focus outline, which assumed a fill.
 * Plain :focus, not :focus-visible, so it shows on click too, matching the rest. */
.navbar-nav .nav-link.nav-link-quiet:focus {
    outline: none;
    box-shadow: var(--focus-ring-link, none);
    border-radius: var(--radius-pill, 999px);
    background-color: transparent;
}
.header.navbar-light.transparent .navbar-nav .nav-link.nav-link-quiet:focus,
.auth-page .navbar-nav .nav-link.nav-link-quiet:focus {
    /* Ring only, no colour: a press is :hover + :active + :focus at once, and setting
     * colour here would out-rank :active (later rule, equal specificity) and swallow
     * the press state. Same split heliomath_base's `a:focus` uses. */
    outline: none;
    box-shadow: var(--focus-ring-link-on-dark);
    border-radius: var(--radius-pill);
    background-color: transparent;
}


/* --- Feedback tab: restore its own styling over the component button base ---
 * The slide-out feedback tab (user_feedback_widget.html) is marked
 * `class="btn btn-grokkoli-secondary share-feedback-prompt"` — it carries .btn for
 * the legacy skin, but it is a TAB, not a button.
 *
 * grokkoli_system.css:1836 already styles it correctly (opaque white, hairline
 * border with no left edge so it joins the tray, right corners rounded only). The
 * problem is precedence: once heliomath_components is loaded on a page, its .btn
 * base wins and the tab picks up display:flex, a pill radius, a transparent fill
 * and the button's padding.
 *
 * HOW it wins depends on the guards, which are currently OFF — see the ⚠ note at
 * heliomath_components.css:20. As the file stands, the base is a bare `.btn`, which
 * TIES .share-feedback-prompt at (0,1,0) and wins on SOURCE ORDER (components loads
 * after grokkoli_system). Re-add the `:not(.btn-grokkoli-primary):not(.filter)`
 * guards and it wins on specificity instead, at (0,3,0). Either way it wins, and
 * either way the fix below holds.
 *
 * Restated here at (1,1,0) — the widget's own id — which clears the base under BOTH
 * arrangements, and does so on specificity, so it does not depend on load order
 * either. No change to the component base or the shared grokkoli_system rule.
 * Values are copied from grokkoli_system.css:1836 verbatim, including the --main-*
 * colours: the tray (.feedback-form-container) uses --main-light-grey for its border
 * on this page, so the tab must use the same value to read as one piece with it.
 *
 * NB: any OTHER non-button carrying .btn on a components-loaded page has the same
 * exposure. */
#feedback-widget-container .share-feedback-prompt {
    display: block;
    background-color: white;
    border: 1px solid var(--main-light-grey);
    border-left: none;
    border-radius: 0 1.6rem 1.6rem 0;
    width: 50px;
    height: 180px;
    padding: 0.6rem;
    margin: 0 0.8rem 0 0;
    color: var(--accent-primary);
    font-size: 1.4rem;
    font-weight: var(--font-weight-semibold);
    white-space: normal;
}
/* The component base also adds a press nudge and a focus ring, neither of which
 * belongs on a tab; the tray's own hover/active/focus rules keep it white. */
#feedback-widget-container .share-feedback-prompt:hover,
#feedback-widget-container .share-feedback-prompt:active,
#feedback-widget-container .share-feedback-prompt:focus {
    background-color: white;
    border: 1px solid var(--main-light-grey);
    border-left: none;
    transform: none;
    outline: none;
    box-shadow: 2px 5px 10px rgb(0 0 0 / 4%);
}


/* --- Learning-objectives FILTERS -------------------------------------------
 * The grade filters at the top of the learning-objectives page
 * (alpha/templates/learning_objectives.html: `<button class="filter btn">`).
 *
 * Re-cut to match the style guide's filter/tab pills (style_guide.css:726-780):
 * compact pill, and the SELECTED one is the filled state while the rest are
 * outlines. That inverts the legacy treatment in grokkoli_learning_objectives.css,
 * where the selected filter was the white outline and every unselected one was a
 * solid blue fill -- so the page read as a row of buttons with one gap in it.
 *
 * Colour is --link (azure), not --accent-primary, for the same reason the style
 * guide gives: at this compact size the bold label counts as NORMAL text (18px is
 * under the 18.66px large-text floor), and cornflower only just reaches 4.5:1.
 * --link has real margin.
 *
 * Heliomath only -- Grokkoli keeps grokkoli_learning_objectives.css untouched.
 * Scoped under .filters so nothing else carrying .filter is affected. */
.filters .filter {
    background-color: var(--surface-elevated);
    color: var(--link);
    border: 1px solid var(--link);
    border-radius: var(--radius-pill);
    padding: 6px 13px;
    margin-bottom: 17px;
    font-weight: var(--font-weight-medium);
    font-size: 1rem;
    line-height: 1.2;
}
.filters .filter:hover {
    background-color: var(--surface-elevated);
    color: var(--link-hover);
    border-color: var(--link-hover);
}

/* Selected (the template marks it .disabled): the CURRENT state, not an action --
 * filled, and no hover feedback or pointer, matching the style guide's
 * [aria-pressed="true"] treatment. */
.filters .filter.disabled,
.filters .filter.disabled:hover {
    background-color: var(--link);
    color: var(--text-on-dark-fill);
    border-color: var(--link);
    opacity: 1;
    cursor: default;
}


/* ============================================================================
 * LEGACY DE-BOLDING — the progress markup. Grokkoli's app CSS uses font-weight: 900
 * for emphasis; in Poppins that reads as a shout, so re-point it onto the ladder.
 *
 * ⚠ THIS REACHES THREE PAGES, not just /learning_progress/. These selectors also match
 * past_learner_sessions/…/learning_progress_summary.html and
 * learner_states/…/math_abilities.html, both of which extend alpha_base and so load
 * this file. Scope them under .family-learning-progress if that is ever unwanted.
 *
 * Selectors mirror grokkoli_system.css exactly and this file loads later, so they win
 * on source order — no !important.
 * ========================================================================== */

.learner-progress h2 {
    font-weight: var(--font-weight-regular);
}

.family-learning-progress .achievement-stars .count {
    font-weight: var(--font-weight-regular);
}

/* The 7-day tiles. Their children set no weight of their own, so this covers them too. */
.learner-progress .day-block {
    font-weight: var(--font-weight-regular);
}

.learner-progress .grade-completion-bar .percent-completed {
    font-weight: var(--font-weight-regular);
}

.table.math-abilities th {
    font-weight: var(--font-weight-regular);
}

.learner_progress_learn_button a {
    font-weight: var(--font-weight-regular);
}


/* ============================================================================
 * LEARNING-PROGRESS PAGE
 *
 * This page keeps grokkoli_system.css (its view sets grokkoli_system_css_needed and NOT
 * the heliomath_ flag), so the ported heliomath_system.css never loads here and its
 * fixes can't reach it. This file can: it is the authenticated-app brand layer, loaded
 * on every Heliomath alpha_base page, after both grokkoli_base and grokkoli_system.
 * ========================================================================== */

/* The 7-day strip's active days and the session rows at the foot of the page are bare
 * <a>s wrapped around a block — no class of their own. heliomath_base underlines every
 * anchor (the design-system treatment for body copy), so each tile got a --link-coloured
 * rule under it: a blue underline through a green/teal card with white text, since
 * text-decoration paints in the ANCHOR's colour, not the inner element's. They read as
 * buttons, so they take the same no-underline treatment as every other chrome link
 * (.nav-link, .dropdown-item, .btn, the wordmark — see the list in heliomath_base). */
.learner-progress .rolling-7-days a,
.learner-progress .learning-sessions-table a {
    text-decoration: none;
}

/* --- Winter-green -> jade, for the LEGACY layer ---------------------------- *
 * grokkoli_base + grokkoli_system paint this page's stats numbers, the active-day
 * tiles, the streak dots, the little badges and every `.accent-color-winter-green` from
 * --main-winter-green. Re-point the legacy variable itself rather than chase ~14 rules:
 * both files load before this one, and neither is ours to edit (Grokkoli is live on
 * them). Heliomath-only by controlled loading — this file never loads on Grokkoli, so
 * its own winter-green is untouched.
 *
 * The Heliomath TOKEN role (--accent-secondary) is deliberately NOT re-pointed here: its
 * remaining consumer is the plans-page Select button, whose colour is still open. */
:root {
    --main-winter-green: var(--jade);
}

