:root {
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    color: #18201c;
    background: #f5f7f5;
}
* { box-sizing: border-box; }
body { margin: 0; }
a { color: inherit; }
.shell { width: min(1120px, calc(100% - 32px)); margin: 0 auto; }
.site-header { background: #fff; border-bottom: 1px solid #e4e8e5; }
.site-header__inner { min-height: 72px; display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.brand { font-weight: 750; text-decoration: none; }
.nav { display: flex; gap: 18px; flex-wrap: wrap; }
.nav a { text-decoration: none; }
main.shell { padding-block: 48px; }
.page-head { margin-bottom: 28px; }
.page-head h1, .auth-card h1 { margin: 4px 0 8px; font-size: clamp(2rem, 5vw, 3rem); }
.eyebrow { margin: 0; font-weight: 700; color: #477b59; }
.muted { color: #66716b; }
.grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
.panel, .auth-card { background: #fff; border: 1px solid #e1e7e3; border-radius: 18px; padding: 24px; box-shadow: 0 12px 30px rgba(24, 32, 28, .05); }
.auth-card { width: min(520px, 100%); margin: 6vh auto 0; }
.stack { display: grid; gap: 16px; margin-top: 24px; }
label { display: grid; gap: 8px; font-weight: 650; }
input { width: 100%; padding: 13px 14px; border: 1px solid #cfd8d2; border-radius: 10px; font: inherit; }

select {
    width: 100%;
    min-height: 48px;
    padding: 0 14px;
    border: 1px solid rgba(31, 41, 35, 0.18);
    border-radius: 12px;
    background: #fff;
    font: inherit;
    color: inherit;
    cursor: pointer;
}

select:focus {
    outline: none;
    border-color: rgba(31, 41, 35, 0.45);
}

select:disabled {
    opacity: 0.55;
    cursor: not-allowed;
}

button, .button-link { display: inline-flex; justify-content: center; align-items: center; min-height: 46px; border: 0; border-radius: 10px; padding: 0 18px; background: #2f7048; color: #fff; font: inherit; font-weight: 700; text-decoration: none; cursor: pointer; }
.auth-links { margin-top: 20px; }
.notice { border-radius: 10px; padding: 12px 14px; margin: 18px 0; }
.notice--error { background: #fff0f0; color: #8a2020; }
@media (max-width: 760px) {
    .site-header__inner { align-items: flex-start; flex-direction: column; padding-block: 18px; }
    .nav { gap: 12px 16px; }
    .grid { grid-template-columns: 1fr; }
    main.shell { padding-block: 28px; }
}


/* TFW Cashless home */
:root {
    --tfw-ink: #243027;
    --tfw-charcoal: #252a26;
    --tfw-deep: #315f3a;
    --tfw-green: #6fa844;
    --tfw-lime: #a7c936;
    --tfw-yellow: #dfd34b;
    --tfw-hero: #eef2cf;
    --tfw-cards: #dde9cf;
    --tfw-activity: #cbdcbe;
    --tfw-paper: #fffef9;
    --tfw-muted: #667268;
    --tfw-line: rgba(39, 66, 44, .14);
    --tfw-shadow: 0 18px 45px rgba(34, 55, 38, .12);
}

.cashless-home {
    margin: 0;
    background: var(--tfw-charcoal);
    color: var(--tfw-ink);
    font-family: ui-rounded, "SF Pro Rounded", "Avenir Next", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
    -webkit-font-smoothing: antialiased;
}

.cashless-home .cashless-home-main {
    width: 100%;
    margin: 0;
    padding: 0;
}

.cashless-home-page {
    min-height: 100vh;
    overflow: hidden;
}

.home-band,
.home-footer {
    position: relative;
    isolation: isolate;
}

.home-band::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    opacity: .48;
    background-image:
        radial-gradient(circle at 8% 12%, rgba(255,255,255,.42) 0 2px, transparent 2.4px),
        radial-gradient(circle at 88% 24%, rgba(79,120,63,.11) 0 1.5px, transparent 2px);
    background-size: 36px 36px, 42px 42px;
}

.home-inner {
    width: min(1040px, calc(100% - 30px));
    margin: 0 auto;
}

.home-hero {
    background:
        radial-gradient(circle at 86% 15%, rgba(223, 211, 75, .38), transparent 28%),
        radial-gradient(circle at 12% 92%, rgba(111, 168, 68, .23), transparent 30%),
        var(--tfw-hero);
    padding: 28px 0 34px;
}

.home-brand-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
}

.home-brand {
    display: inline-flex;
    align-items: center;
    gap: 14px;
    color: inherit;
    text-decoration: none;
}

.home-logo {
    width: 70px;
    height: 70px;
    object-fit: contain;
    border-radius: 18px;
    box-shadow: 0 10px 28px rgba(49, 95, 58, .15);
    background: rgba(255,255,255,.54);
}

.home-brand-copy {
    display: grid;
    gap: 2px;
}

.home-brand-copy strong {
    font-size: clamp(1.65rem, 1vw, 2.45rem);
    line-height: 1;
    letter-spacing: -.035em;
    color: #284e31;
}

.home-brand-kicker,
.home-section-kicker,
.cashless-card__label {
    font-size: .75rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .12em;
    color: #54735a;
}

.home-account-meta {
    display: flex;
    align-items: center;
    gap: 14px;
    font-size: .95rem;
}

.home-account-name {
    font-weight: 800;
}

.home-logout {
    color: #385f40;
    font-weight: 750;
    text-underline-offset: 3px;
}

.home-quick-actions {
    display: grid;
    grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
    gap: 12px;
    margin-top: 28px;
    max-width: 500px;
}

.home-action,
.home-mini-action,
.home-outline-button,
.card-action,
.home-form-submit {
    appearance: none;
    border: 0;
    font: inherit;
    font-weight: 750;
    cursor: pointer;
    text-decoration: none;
    text-align: center;
    transition: transform .16s ease, box-shadow .16s ease, background-color .16s ease, border-color .16s ease;
}

.home-action:hover,
.home-mini-action:hover,
.home-outline-button:hover,
.card-action:not(:disabled):hover,
.home-form-submit:hover {
    transform: translateY(-1px);
}

.home-action {
    min-height: 58px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 16px;
    text-transform: uppercase;
    letter-spacing: .04em;
}

.home-action--primary {
    background: var(--tfw-deep);
    color: #fff;
    box-shadow: 0 12px 24px rgba(49, 95, 58, .22);
}

.home-action--secondary {
    background: rgba(255,255,255,.72);
    color: #315f3a;
    border: 1px solid rgba(49,95,58,.18);
    box-shadow: 0 10px 20px rgba(49,95,58,.08);
}

.home-notice {
    margin-top: 18px;
    max-width: 720px;
    padding: 13px 16px;
    border-radius: 14px;
    font-weight: 750;
    box-shadow: 0 9px 22px rgba(38, 58, 41, .08);
}

.home-notice--success {
    background: rgba(255,255,255,.76);
    color: #315f3a;
    border: 1px solid rgba(49,95,58,.15);
}

.home-notice--error {
    background: #fff2ee;
    color: #8b332b;
    border: 1px solid rgba(139,51,43,.12);
}

.home-cards-band {
    background:
        radial-gradient(circle at 94% 20%, rgba(167,201,54,.19), transparent 24%),
        var(--tfw-cards);
    padding: 42px 0 48px;
}

.home-section-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 20px;
    margin-bottom: 20px;
}

.home-section-head h1,
.home-section-head h2 {
    margin: 2px 0 0;
    color: #294631;
    font-size: clamp(1.7rem, 5vw, 2.35rem);
    line-height: 1.05;
    letter-spacing: -.035em;
}

.home-mini-action,
.home-outline-button {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 13px;
    padding: 0 17px;
    color: #315f3a;
    background: rgba(255,255,255,.72);
    border: 1px solid rgba(49,95,58,.2);
    box-shadow: 0 8px 18px rgba(47,80,52,.07);
}

.home-card-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
}

.cashless-auth .auth-terms {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 18px 0 16px;
}

.cashless-auth .auth-terms input[type="checkbox"] {
    width: 18px;
    height: 18px;
    min-height: 0;
    margin: 0;
    padding: 0;
    flex: 0 0 18px;
    accent-color: #316b42;
    box-shadow: none;
}

.cashless-auth .auth-terms span {
    line-height: 1.4;
}

.cashless-auth .field-error {
    display: none;
    margin-top: 6px;
    font-size: 0.82rem;
    line-height: 1.35;
    color: #8c3f32;
}

.cashless-auth .is-invalid {
    border-color: rgba(140, 63, 50, 0.55);
    background: rgba(140, 63, 50, 0.035);
}

.cashless-auth .is-invalid:focus {
    border-color: rgba(140, 63, 50, 0.8);
    box-shadow: 0 0 0 3px rgba(140, 63, 50, 0.08);
}

.cashless-auth .field-error.is-visible {
    display: block;
}

.cashless-auth input:-webkit-autofill,
.cashless-auth input:-webkit-autofill:hover,
.cashless-auth input:-webkit-autofill:focus,
.cashless-auth input:-webkit-autofill:active {
    -webkit-text-fill-color: inherit;
    -webkit-box-shadow: 0 0 0 1000px #f5f8e9 inset;
    box-shadow: 0 0 0 1000px #f5f8e9 inset;
    transition: background-color 9999s ease-out 0s;
}

.cashless-auth input.is-filled:not(.is-invalid) {
    background: #f5f8e9;
    border-color: rgba(47, 104, 65, 0.24);
}

#addCardForm .field-error {
    display: none;
    margin-top: 6px;
    font-size: .82rem;
    line-height: 1.35;
    color: #8c3f32;
}

#addCardForm .field-error.is-visible {
    display: block;
}

#addCardForm input.is-invalid:not([type="checkbox"]),
#addCardForm select.is-invalid,
#addCardForm textarea.is-invalid {
    border-color: rgba(140, 63, 50, .55);
    background: rgba(140, 63, 50, .035);
}

#addCardForm input.is-invalid:not([type="checkbox"]):focus,
#addCardForm select.is-invalid:focus,
#addCardForm textarea.is-invalid:focus {
    border-color: rgba(140, 63, 50, .8);
    box-shadow: 0 0 0 3px rgba(140, 63, 50, .08);
}

#addCardForm input[type="checkbox"].is-invalid {
    outline: 2px solid rgba(140, 63, 50, .45);
    outline-offset: 2px;
}

.cashless-card,
.home-empty-card,
.activity-card,
.account-card {
    background: rgba(255,254,249,.95);
    border: 1px solid rgba(255,255,255,.82);
    border-radius: 22px;
    box-shadow: var(--tfw-shadow);
}

.cashless-card {
    padding: 23px;
    min-width: 0;
}

.cashless-card__top {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 18px;
    align-items: start;
}

.cashless-card h2 {
    margin: 4px 0 4px;
    font-size: 1.4rem;
    line-height: 1.12;
    letter-spacing: -.025em;
}

.cashless-card__school {
    margin: 0;
    color: var(--tfw-muted);
    font-weight: 650;
}

.cashless-card__balance {
    display: grid;
    gap: 3px;
    text-align: right;
}

.cashless-card__balance span,
.cashless-card__number span,
.account-fact span {
    color: var(--tfw-muted);
    font-size: .78rem;
    font-weight: 750;
}

.cashless-card__balance strong {
    color: var(--tfw-deep);
    font-size: 1.7rem;
    letter-spacing: -.035em;
}

.cashless-card__number {
    display: grid;
    gap: 4px;
    margin-top: 20px;
    padding-top: 17px;
    border-top: 1px solid var(--tfw-line);
}

.cashless-card__number strong {
    font-size: 1rem;
    letter-spacing: .02em;
    overflow-wrap: anywhere;
}

.cashless-card__actions {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    margin-top: 19px;
}

.card-action {
    min-height: 46px;
    border-radius: 13px;
    padding: 0 12px;
    background: #eef3e5;
    color: #355b3c;
    border: 1px solid rgba(53,91,60,.13);
}

.card-action--guardian[aria-expanded="true"] {
    background: #d8e8bd;
    border-color: rgba(53,91,60,.22);
}

.card-action:disabled {
    cursor: default;
    opacity: .72;
}

.home-empty-card {
    padding: 28px;
}

.home-empty-card h2 {
    margin-top: 0;
}

.home-disclosure {
    margin-top: 20px;
    padding-top: 20px;
    border-top: 1px solid var(--tfw-line);
}

.home-disclosure[hidden],
.activity-row[hidden],
.home-outline-button[hidden] {
    display: none !important;
}

.home-disclosure__head h3,
.account-disclosure h3 {
    margin: 3px 0 0;
    font-size: 1.2rem;
}

.home-help-text {
    margin: 9px 0 0;
    color: var(--tfw-muted);
    line-height: 1.55;
}

.allergen-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 9px;
    margin-top: 17px;
}

.allergen-choice {
    display: flex;
    align-items: center;
    gap: 10px;
    min-height: 42px;
    margin: 0;
    padding: 8px 10px;
    border-radius: 11px;
    background: #f4f6ef;
    font-weight: 700;
}

.allergen-choice input {
    width: 19px;
    height: 19px;
    margin: 0;
    accent-color: var(--tfw-deep);
}

.home-form {
    margin-top: 16px;
}

.home-form--compact {
    display: grid;
    gap: 14px;
}

.home-form label {
    display: grid;
    gap: 7px;
    font-weight: 750;
}

.home-form input[type="email"],
.home-form input[type="password"] {
    width: 100%;
    border: 1px solid rgba(49,95,58,.22);
    border-radius: 12px;
    padding: 13px 14px;
    background: #fff;
    color: var(--tfw-ink);
    font: inherit;
    outline: none;
}

.home-form input:focus {
    border-color: var(--tfw-green);
    box-shadow: 0 0 0 4px rgba(111,168,68,.12);
}

.home-form-submit {
    min-height: 47px;
    margin-top: 16px;
    border-radius: 13px;
    padding: 0 18px;
    background: var(--tfw-deep);
    color: #fff;
}

.home-activity-band {
    background:
        radial-gradient(circle at 12% 12%, rgba(255,255,255,.18), transparent 24%),
        radial-gradient(circle at 90% 88%, rgba(49,95,58,.13), transparent 30%),
        var(--tfw-activity);
    padding: 42px 0 54px;
}

.home-section-head--light .home-section-kicker,
.home-section-head--account .home-section-kicker {
    color: #4e6e55;
}

.home-section-head--light {
    justify-content: flex-start;
    gap: 12px;
}

.home-refresh-button {
    appearance: none;
    width: 44px;
    min-height: 44px;
    height: 44px;
    flex: 0 0 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: 1px solid rgba(49,95,58,.20);
    border-radius: 999px;
    background: rgba(255,255,255,.72);
    color: #315f3a;
    box-shadow: 0 8px 18px rgba(47,80,52,.07);
    cursor: pointer;
    transition: transform .16s ease, background-color .16s ease, box-shadow .16s ease;
}

.home-refresh-button:hover {
    transform: translateY(-1px);
    background: rgba(255,255,255,.9);
}

.home-refresh-button:focus-visible {
    outline: 3px solid rgba(111,168,68,.24);
    outline-offset: 2px;
}

.home-refresh-button svg {
    width: 21px;
    height: 21px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.activity-card {
    overflow: hidden;
}

.activity-list {
    display: grid;
}

.activity-row {
    display: grid;
    grid-template-columns: 1.45fr .9fr 1.35fr auto;
    gap: 18px;
    align-items: center;
    min-height: 67px;
    padding: 13px 20px;
    border-bottom: 1px solid rgba(47,80,52,.1);
}

.activity-row:last-child {
    border-bottom: 0;
}

.activity-row__date,
.activity-row__name {
    color: var(--tfw-muted);
    font-size: .9rem;
}

.activity-row__name {
    font-weight: 700;
}

.activity-row__item {
    min-width: 0;
    overflow-wrap: anywhere;
}

.activity-row__line {
    display: block;
}

.activity-row__note {
    display: block;
    margin-top: 5px;
    color: var(--tfw-muted);
    font-size: .78rem;
    font-weight: 650;
    line-height: 1.35;
    white-space: pre-line;
}

.activity-row__amount {
    justify-self: end;
    display: grid;
    gap: 2px;
    font-size: 1rem;
    text-align: right;
    white-space: nowrap;
}

.activity-row__amount-label {
    color: var(--tfw-muted);
    font-size: .68rem;
    font-weight: 750;
    letter-spacing: .04em;
    text-transform: uppercase;
}

.activity-row__amount.is-positive {
    color: #347444;
}

.activity-row__amount.is-negative {
    color: #3f4941;
}

.activity-empty {
    padding: 24px;
    color: var(--tfw-muted);
}

.activity-more-wrap {
    display: flex;
    justify-content: center;
    padding: 18px;
    border-top: 1px solid rgba(47,80,52,.08);
}

.home-account-section {
    margin-top: 38px;
}

.account-card {
    padding: 24px;
}

.account-facts {
    display: grid;
    grid-template-columns: 1fr 1.6fr;
    gap: 18px;
}

.account-fact {
    display: grid;
    gap: 5px;
    min-width: 0;
}

.account-fact strong {
    overflow-wrap: anywhere;
}

.account-actions {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 22px;
    padding-top: 20px;
    border-top: 1px solid var(--tfw-line);
}

.account-disclosure {
    max-width: 650px;
}

.home-footer {
    background:
        radial-gradient(circle at 86% 20%, rgba(167,201,54,.08), transparent 26%),
        var(--tfw-charcoal);
    color: #f5f6f3;
}

.home-footer__inner {
    min-height: 175px;
    padding: 34px 0 30px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    gap: 40px;
}

.home-footer__links {
    display: flex;
    gap: 14px 24px;
    flex-wrap: wrap;
    font-weight: 700;
    color: rgba(255,255,255,.88);
}

.home-footer__links a {
    position: relative;
    color: inherit;
    text-decoration: none;
}

.home-footer__links a:not(:last-child)::after {
    content: "";
    position: absolute;
    right: -13px;
    top: 50%;
    width: 3px;
    height: 3px;
    border-radius: 50%;
    background: rgba(255,255,255,.36);
}

.home-footer__links a:hover,
.home-footer__links a:focus-visible {
    color: #fff;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.home-footer__cirquit {
    font-size: .84rem;
    color: rgba(255,255,255,.58);
    letter-spacing: .02em;
}

@media (max-width: 760px) {
    .home-inner {
        width: min(100% - 24px, 620px);
    }

    .home-hero {
        padding: 18px 0 26px;
    }

    .home-brand-row {
        align-items: flex-start;
    }

    .home-logo {
        width: 58px;
        height: 58px;
        border-radius: 15px;
    }

    .home-brand-copy strong {
        font-size: 1.65rem;
    }

    .home-brand-kicker {
        font-size: .67rem;
    }

    .home-account-meta {
        align-items: flex-end;
        flex-direction: column;
        gap: 6px;
        padding-top: 3px;
        text-align: right;
    }

    .home-account-name {
        max-width: 135px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .home-quick-actions {
        max-width: none;
        margin-top: 22px;
    }

    .home-action {
        min-height: 56px;
        border-radius: 15px;
    }

    .home-cards-band,
    .home-activity-band {
        padding-top: 34px;
        padding-bottom: 40px;
    }

    .home-section-head {
        align-items: center;
    }

    .home-section-head h1,
    .home-section-head h2 {
        font-size: 1.8rem;
    }

    .home-mini-action {
        min-height: 42px;
        padding-inline: 14px;
    }

    .home-card-grid {
        grid-template-columns: 1fr;
        gap: 14px;
    }

    .cashless-card {
        padding: 20px;
        border-radius: 20px;
    }

    .cashless-card__balance strong {
        font-size: 1.55rem;
    }

    .allergen-grid {
        grid-template-columns: 1fr;
    }

    .activity-row {
        grid-template-columns: minmax(0, 1fr) auto;
        grid-template-areas:
            "date amount"
            "item amount"
            "name amount";
        gap: 2px 14px;
        min-height: 82px;
        padding: 14px 17px;
    }

    .activity-row__date {
        grid-area: date;
        font-size: .76rem;
    }

    .activity-row__name {
        grid-area: name;
        font-size: .8rem;
        margin-top: 3px;
    }

    .activity-row__item {
        grid-area: item;
        margin-top: 2px;
    }

    .activity-row__amount {
        grid-area: amount;
        align-self: center;
        font-size: 1.02rem;
    }

    .account-facts {
        grid-template-columns: 1fr;
        gap: 15px;
    }

    .account-actions {
        display: grid;
        grid-template-columns: 1fr 1fr;
    }

    .home-footer__inner {
        min-height: 155px;
    }
}

@media (max-width: 420px) {
    .home-brand-copy .home-brand-kicker {
        display: none;
    }

    .home-brand-copy strong {
        font-size: 1.48rem;
    }

    .home-logo {
        width: 52px;
        height: 52px;
    }

    .home-account-name {
        max-width: 105px;
        font-size: .86rem;
    }

    .home-logout {
        font-size: .86rem;
    }

    .cashless-card__top {
        gap: 12px;
    }

    .cashless-card__balance strong {
        font-size: 1.42rem;
    }

    .cashless-card__actions,
    .account-actions {
        grid-template-columns: 1fr;
    }
}

/* ---------------------------------------------------------
   Single-page overlay system
--------------------------------------------------------- */
.cashless-home.home-overlay-open {
    overflow: hidden;
    overscroll-behavior: none;
}

.home-overlay[hidden] {
    display: none !important;
}

.home-overlay {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: grid;
    place-items: center;
    padding: 24px;
}

.home-overlay__backdrop {
    position: absolute;
    inset: 0;
    background: rgba(27, 34, 29, .58);
    backdrop-filter: blur(7px);
    -webkit-backdrop-filter: blur(7px);
}

.home-overlay__sheet {
    position: relative;
    z-index: 1;
    width: min(760px, 100%);
    max-height: min(88dvh, 820px);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    border-radius: 26px;
    background: var(--tfw-paper);
    color: var(--tfw-ink);
    border: 1px solid rgba(255,255,255,.9);
    box-shadow: 0 30px 90px rgba(18, 28, 21, .28);
}

.home-overlay__sheet--compact {
    width: min(560px, 100%);
}

.home-overlay__header {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 18px;
    padding: 22px 24px 18px;
    border-bottom: 1px solid var(--tfw-line);
    background:
        radial-gradient(circle at 90% 0%, rgba(223,211,75,.22), transparent 32%),
        #f4f6e7;
}

.home-overlay__header h2 {
    margin: 3px 0 0;
    font-size: clamp(1.55rem, 5vw, 2rem);
    line-height: 1;
    letter-spacing: -.035em;
    color: #294631;
}

.home-overlay__close {
    appearance: none;
    border: 1px solid rgba(49,95,58,.18);
    border-radius: 999px;
    min-height: 42px;
    padding: 0 16px;
    background: rgba(255,255,255,.78);
    color: #315f3a;
    font: inherit;
    font-weight: 800;
    cursor: pointer;
}

.home-overlay__body {
    flex: 1 1 auto;
    overflow-y: auto;
    padding: 22px 24px 26px;
    -webkit-overflow-scrolling: touch;
}

.home-overlay__body--empty {
    min-height: 220px;
}

.home-overlay__intro {
    margin: 0 0 18px;
    color: var(--tfw-muted);
    line-height: 1.55;
}

.home-payment-breakdown {
    margin-top: 18px;
}

.home-payment-breakdown__row,
.home-payment-breakdown__total {
    display: flex;
    justify-content: space-between;
    gap: 20px;
    padding: 14px 0;
    border-bottom: 1px solid rgba(31, 41, 35, 0.12);
}

.home-payment-breakdown__row > div {
    display: grid;
    gap: 3px;
}

.home-payment-breakdown__row span {
    font-size: 0.86rem;
    opacity: 0.68;
}

.home-payment-breakdown__total {
    border-bottom: 0;
    padding-top: 16px;
}

.home-topup-form {
    margin-top: 0;
}

.home-topup-users {
    display: grid;
    gap: 12px;
}

.home-topup-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(180px, .55fr);
    gap: 18px;
    align-items: center;
    padding: 17px;
    border-radius: 17px;
    background: #f3f6ed;
    border: 1px solid rgba(49,95,58,.1);
}

.home-topup-row__identity {
    min-width: 0;
    display: grid;
    gap: 4px;
}

.home-topup-row__identity strong {
    font-size: 1.05rem;
}

.home-topup-row__identity span {
    color: var(--tfw-muted);
    font-size: .86rem;
    overflow-wrap: anywhere;
}

.home-topup-row__amount {
    min-width: 0;
}

.home-topup-row__amount > span {
    color: #4e6e55;
    font-size: .78rem;
    font-weight: 800;
}

.topup-result-lines {
    display: flex;
    flex-direction: column;
    gap: 0;
}

.topup-result-line {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 18px;
    padding: 14px 0;
    border-bottom: 1px solid rgba(45, 77, 53, .10);
}

.topup-result-line:first-child {
    padding-top: 0;
}

.topup-result-line:last-child {
    border-bottom: 0;
    padding-bottom: 0;
}

.topup-result-line__name {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
}

.topup-result-line__name span {
    font-size: .84rem;
    color: rgba(45, 60, 49, .65);
}

.topup-result-line__amount {
    flex: 0 0 auto;
    white-space: nowrap;
}

.topup-result-line--total {
    margin-top: 4px;
    padding-top: 14px;
    border-top: 1px solid rgba(45, 77, 53, .16);
    border-bottom: 0;
}

.home-money-input {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: center;
    margin-top: 7px;
    border: 1px solid rgba(49,95,58,.22);
    border-radius: 13px;
    background: #fff;
    overflow: hidden;
}

.home-money-input > span {
    padding-left: 13px;
    color: #315f3a;
    font-weight: 600;
}

.home-money-input input[type="number"] {
    width: 100%;
    min-width: 0;
    border: 0;
    outline: 0;
    padding: 13px;
    background: transparent;
    color: var(--tfw-ink);
    font: inherit;
    font-weight: 600;
    text-align: right;
    appearance: textfield;
}

.home-money-input input[type="number"]::-webkit-inner-spin-button,
.home-money-input input[type="number"]::-webkit-outer-spin-button {
    appearance: none;
    margin: 0;
}

.home-money-input:focus-within {
    border-color: var(--tfw-green);
    box-shadow: 0 0 0 4px rgba(111,168,68,.12);
}

.home-form-submit--wide {
    width: 100%;
    margin-top: 18px;
}

.home-form-submit:disabled {
    cursor: default;
    opacity: .55;
}

.home-form-submit--link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    text-decoration: none;
}

.home-replace-card-summary {
    display: grid;
    gap: 5px;
    padding: 16px;
    border-radius: 15px;
    background: #f3f6ed;
    border: 1px solid rgba(49,95,58,.1);
}

.home-replace-card-summary span {
    color: var(--tfw-muted);
    overflow-wrap: anywhere;
}

.replace-charge-confirm {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin: 18px 0;
    line-height: 1.45;
}

.replace-charge-confirm input[type="checkbox"] {
    width: 18px;
    height: 18px;
    min-height: 0;
    margin: 2px 0 0;
    padding: 0;
    flex: 0 0 18px;
    accent-color: #316b42;
}

.home-payment-result {
    padding: 18px;
    border-radius: 16px;
    background: #f1f5e9;
    border: 1px solid rgba(49,95,58,.12);
}

.home-payment-result p {
    margin: 0;
    line-height: 1.55;
    font-weight: 700;
}

.home-payment-result--complete {
    background: #edf6e8;
    color: #315f3a;
}

.home-payment-result--captured-error,
.home-payment-result--error {
    background: #fff2ee;
    color: #7f342d;
}

.home-payment-result + .home-form-submit,
.home-payment-result + .home-form-submit--link {
    width: 100%;
    margin-top: 16px;
}

@media (max-width: 760px) {
    .home-overlay {
        place-items: start stretch;
        padding: 14px 0 0;
    }

    .home-overlay__sheet,
    .home-overlay__sheet--compact {
        width: 100%;
        max-height: calc(100dvh - 14px);
        border-radius: 0 0 24px 24px;
        border-top: 0;
    }

    .home-overlay__header {
        padding: 18px 18px 15px;
    }

    .home-overlay__body {
        padding: 18px 18px calc(24px + env(safe-area-inset-bottom));
    }

    .home-overlay__body--empty {
        min-height: 34dvh;
    }

    .home-topup-row {
        grid-template-columns: 1fr;
        gap: 14px;
        padding: 15px;
    }
}

/* ---------------------------------------------------------
   Cashless menu overlay
--------------------------------------------------------- */
.home-menu-overlay {
    width: min(900px, 100%);
}

.home-menu-overlay__body {
    background:
        radial-gradient(circle at 94% 5%, rgba(223,211,75,.12), transparent 24%),
        #f7f8f1;
}

.home-menu-schools {
    display: grid;
    gap: 22px;
}

.home-menu-school {
    overflow: hidden;
    border: 1px solid rgba(49,95,58,.12);
    border-radius: 22px;
    background: rgba(255,255,255,.88);
    box-shadow: 0 14px 36px rgba(35,58,39,.08);
}

.home-menu-school__head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 18px;
    padding: 20px 22px;
    background:
        radial-gradient(circle at 94% 0%, rgba(223,211,75,.22), transparent 34%),
        #e8f0dc;
    border-bottom: 1px solid rgba(49,95,58,.10);
}

.home-menu-school__head h3 {
    margin: 3px 0 0;
    color: #294631;
    font-size: 1.4rem;
    line-height: 1.1;
    letter-spacing: -.025em;
}

.home-menu-school__dates {
    flex: 0 0 auto;
    color: #526357;
    font-size: .86rem;
    font-weight: 800;
    text-align: right;
}

.home-menu-title {
    margin: 18px 22px 0;
    color: #315f3a;
    font-size: 1rem;
}

.home-menu-specials {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    padding: 18px 22px 6px;
}

.home-menu-special {
    display: grid;
    grid-template-columns: minmax(92px, .34fr) minmax(0, 1fr);
    gap: 12px;
    align-items: start;
    padding: 13px 14px;
    border: 1px solid rgba(49,95,58,.10);
    border-radius: 15px;
    background: #f7f9ed;
}

.home-menu-special__label {
    color: #47724d;
    font-size: .76rem;
    font-weight: 900;
    letter-spacing: .04em;
    text-transform: uppercase;
}

.home-menu-days {
    display: grid;
    gap: 0;
    margin-top: 16px;
    border-top: 1px solid rgba(49,95,58,.10);
}

.home-menu-day {
    display: grid;
    grid-template-columns: 150px minmax(0, 1fr);
    border-bottom: 1px solid rgba(49,95,58,.10);
}

.home-menu-day:last-child {
    border-bottom: 0;
}

.home-menu-day__head {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    gap: 10px;
    padding: 18px;
    background: rgba(221,233,207,.42);
    border-right: 1px solid rgba(49,95,58,.10);
}

.home-menu-day__head > div {
    display: grid;
    gap: 2px;
}

.home-menu-day__head > div > span {
    color: #315f3a;
    font-size: .95rem;
    font-weight: 900;
}

.home-menu-day__head > div > strong {
    color: #6a766d;
    font-size: .78rem;
}

.home-menu-day__theme {
    align-self: flex-start;
    padding: 5px 9px;
    border-radius: 999px;
    background: rgba(223,211,75,.38);
    color: #4a5228;
    font-size: .74rem;
    font-weight: 900;
}

.home-menu-day__theme--closed {
    background: #b42318;
    color: #ffffff;
    border-color: #b42318;
}

.home-menu-day__lines {
    min-width: 0;
}

.home-menu-line {
    padding: 15px 18px;
    border-bottom: 1px solid rgba(49,95,58,.08);
}

.home-menu-line:last-child {
    border-bottom: 0;
}

.home-menu-line-copy {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 14px;
}

.home-menu-line-copy strong {
    min-width: 0;
    color: #2d3830;
    font-size: .95rem;
    line-height: 1.35;
}

.home-menu-price {
    flex: 0 0 auto;
    color: #315f3a;
    font-size: .84rem;
    font-weight: 900;
}

.home-menu-allergens {
    display: flex;
    gap: 5px;
    flex-wrap: wrap;
    margin-top: 8px;
}

.home-menu-allergens span {
    padding: 4px 7px;
    border-radius: 999px;
    background: #f0f2e3;
    border: 1px solid rgba(49,95,58,.10);
    color: #667268;
    font-size: .68rem;
    font-weight: 800;
    line-height: 1.15;
}

.home-menu-day__empty,
.home-menu-empty {
    display: grid;
    gap: 5px;
    padding: 22px;
    color: var(--tfw-muted);
}

.home-menu-empty strong {
    color: #3c4a40;
}

.home-menu-empty--school {
    padding: 24px 22px;
}

.home-menu-note {
    margin: 0;
    padding: 16px 22px 19px;
    border-top: 1px solid rgba(49,95,58,.10);
    background: #faf9e9;
    color: #616858;
    font-size: .8rem;
    font-weight: 700;
}

@media (max-width: 760px) {
    .home-menu-school {
        border-radius: 19px;
    }

    .home-menu-school__head {
        align-items: flex-start;
        flex-direction: column;
        gap: 7px;
        padding: 18px;
    }

    .home-menu-school__dates {
        text-align: left;
    }

    .home-menu-specials {
        grid-template-columns: 1fr;
        padding: 14px 16px 4px;
    }

    .home-menu-special {
        grid-template-columns: 105px minmax(0, 1fr);
    }

    .home-menu-days {
        margin-top: 12px;
    }

    .home-menu-day {
        grid-template-columns: 1fr;
    }

    .home-menu-day__head {
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
        gap: 14px;
        padding: 13px 16px;
        border-right: 0;
        border-bottom: 1px solid rgba(49,95,58,.10);
    }

    .home-menu-line {
        padding: 14px 16px;
    }

    .home-menu-line-copy {
        align-items: flex-start;
        flex-direction: column;
        gap: 4px;
    }

    .home-menu-allergens span {
        font-size: .66rem;
    }

    .home-menu-note {
        padding-inline: 16px;
    }
}

@media (max-width: 420px) {
    .home-menu-special {
        grid-template-columns: 1fr;
        gap: 5px;
    }
}

/* TFW Cashless front door */
.cashless-auth {
    min-height: 100vh;
    margin: 0;
    color: var(--tfw-ink);
    background:
        radial-gradient(circle at 86% 15%, rgba(223, 211, 75, .40), transparent 28%),
        radial-gradient(circle at 12% 92%, rgba(111, 168, 68, .25), transparent 30%),
        var(--tfw-hero);
    font-family: ui-rounded, "SF Pro Rounded", "Avenir Next", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
    -webkit-font-smoothing: antialiased;
}

.cashless-auth::before {
    content: "";
    position: fixed;
    inset: 0;
    pointer-events: none;
    opacity: .48;
    background-image:
        radial-gradient(circle at 8% 12%, rgba(255,255,255,.42) 0 2px, transparent 2.4px),
        radial-gradient(circle at 88% 24%, rgba(79,120,63,.11) 0 1.5px, transparent 2px);
    background-size: 36px 36px, 42px 42px;
}

.cashless-auth-main {
    position: relative;
    z-index: 1;
    min-height: 100vh;
    display: grid;
    place-items: center;
    padding: 32px 16px;
}

.auth-shell {
    width: min(520px, 100%);
}

.auth-brand {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 13px;
    margin: 0 auto 18px;
    color: #284e31;
}

.auth-logo {
    width: 64px;
    height: 64px;
    object-fit: contain;
    border-radius: 16px;
    background: rgba(255,255,255,.58);
    box-shadow: 0 10px 28px rgba(49, 95, 58, .15);
}

.auth-brand strong {
    font-size: clamp(1.35rem, 5vw, 1.8rem);
    line-height: 1.05;
    letter-spacing: -.025em;
}

.cashless-auth .auth-card {
    width: 100%;
    margin: 0;
    padding: 28px;
    border: 1px solid rgba(49, 95, 58, .12);
    border-radius: 24px;
    background: rgba(255, 254, 249, .94);
    box-shadow: var(--tfw-shadow);
    backdrop-filter: blur(8px);
}

.cashless-auth .auth-card h1 {
    margin: 0 0 8px;
    color: #284e31;
    font-size: clamp(2rem, 7vw, 2.25rem);
    line-height: 1;
    letter-spacing: -.04em;
}

.cashless-auth .auth-card .muted {
    color: var(--tfw-muted);
}

.cashless-auth .stack {
    gap: 15px;
    margin-top: 22px;
}

.cashless-auth label {
    color: #334339;
    font-weight: 700;
}

.cashless-auth input {
    min-height: 48px;
    padding: 12px 14px;
    border: 1px solid rgba(31, 41, 35, .18);
    border-radius: 12px;
    background: #fff;
    color: inherit;
    outline: none;
}

.cashless-auth input:focus {
    border-color: rgba(49, 95, 58, .60);
    box-shadow: 0 0 0 3px rgba(111, 168, 68, .12);
}

.cashless-auth button,
.cashless-auth .button-link {
    min-height: 50px;
    border-radius: 14px;
    background: var(--tfw-deep);
    box-shadow: 0 10px 20px rgba(49, 95, 58, .18);
}

.cashless-auth .auth-links {
    margin-top: 20px;
    color: #385f40;
    font-weight: 700;
    text-align: center;
}

.cashless-auth .auth-links a {
    text-underline-offset: 3px;
}

.cashless-auth .notice {
    border-radius: 12px;
}

.auth-powered {
    margin-top: 18px;
    color: rgba(36, 48, 39, .58);
    font-size: .84rem;
    letter-spacing: .02em;
    text-align: center;
}

@media (min-width: 521px) {
    .cashless-auth-main {
        align-items: start;
        padding-top: 6vh;
    }

    .auth-brand {
        margin-bottom: 22px;
    }
}

@media (max-width: 520px) {
    .cashless-auth-main {
        align-items: start;
        padding: 22px 12px 28px;
    }

    .auth-brand {
        justify-content: flex-start;
        margin-bottom: 16px;
        padding-inline: 4px;
    }

    .auth-logo {
        width: 56px;
        height: 56px;
        border-radius: 14px;
    }

    .cashless-auth .auth-card {
        padding: 24px 20px;
        border-radius: 20px;
    }
}

/* Cashless progress ------------------------------------------------------ */

body.cashless-progress-open {
    overflow: hidden;
}

.cashless-progress[hidden] {
    display: none !important;
}

.cashless-progress {
    position: fixed;
    inset: 0;
    z-index: 20000;

    display: grid;
    place-items: center;

    padding: 24px;

    background: rgba(0, 0, 0, .84);

    pointer-events: auto;
}

.cashless-progress__card {
    width: min(100%, 520px);

    padding: 27px 24px 30px;

    border-radius: 20px;

    background: #071e22;
    color: #fff;

    text-align: center;

    box-shadow:
        0 24px 70px rgba(0, 0, 0, .30),
        0 4px 18px rgba(0, 0, 0, .18);
}

.cashless-progress__brand {
    font-size: .82rem;
    font-weight: 700;
    line-height: 1.2;

    letter-spacing: .08em;
    text-transform: uppercase;

    color: var(--tfw-deep);
}

.cashless-progress__heading {
    margin: 12px 0 0;

    font-size: clamp(1.55rem, 2vw, 1.9rem);
    line-height: 1.15;

    color: #fff;
}

.cashless-progress__detail {
    margin-top: 8px;

    font-size: 1.25rem;
    line-height: 1.4;
    font-weight: 700;

    color: rgba(255, 255, 255, .94);
}

.cashless-progress__movement {
    height: 48px;

    margin: 20px auto 0;

    display: flex;
    align-items: center;
    justify-content: center;
    gap: 18px;
}

.cashless-progress__dot {
    display: block;

    width: 18px;
    height: 18px;

    border-radius: 6px;

    background: #fff;

    transform-origin: center;

    animation:
        cashless-progress-pulse
        1350ms
        ease-in-out
        infinite;
}

.cashless-progress__dot--1 {
    height: 26px;
    animation-delay: 0ms;
}

.cashless-progress__dot--2 {
    animation-delay: 260ms;
}

.cashless-progress__dot--3 {
    animation-delay: 520ms;
}

.cashless-progress__message {
    margin-top: 14px;

    font-size: .98rem;
    line-height: 1.5;

    color: rgba(255, 255, 255, .88);
}

@keyframes cashless-progress-pulse {
    0% {
        transform: translateX(0) scale(1);
        opacity: 1;
    }

    26% {
        transform: translateX(-18px) scale(.85);
        opacity: .25;
    }

    64% {
        transform: translateX(0) scale(1);
        opacity: 1;
    }

    100% {
        transform: translateX(0) scale(1);
        opacity: 1;
    }
}

@media (prefers-reduced-motion: reduce) {
    .cashless-progress__dot {
        animation: cashless-progress-soft-pulse 1200ms ease-in-out infinite;
    }

    @keyframes cashless-progress-soft-pulse {
        0%, 100% {
            opacity: 1;
        }

        50% {
            opacity: .4;
        }
    }
}