/* Scoped additions preserve Method Math's existing design system. */
.family-portal .portal-main{max-width:1080px}
.family-primary-nav{display:grid;gap:7px}
.family-more{margin-top:18px;border-top:1px solid rgba(251,245,232,.22);padding-top:12px}
.family-more summary{cursor:pointer;min-height:44px;padding:10px 13px;font-weight:700}
.family-more div{display:grid;gap:6px}
.family-portal h1,.family-portal h2,.family-portal h3,.family-portal p,.family-portal .btn{overflow-wrap:anywhere}
.family-portal .btn{white-space:normal;text-align:center}
.home-next{border-top:4px solid var(--gold);padding:clamp(22px,4vw,42px);max-width:850px}
.home-next h2{font-size:clamp(1.6rem,3vw,2.4rem);margin-top:0}
.home-support{margin-top:32px}
.setup-list{list-style:none;padding:0;display:grid;gap:14px;margin:24px 0}.setup-list li{position:relative;padding-left:30px}.setup-list li::before{content:"";position:absolute;left:0;top:.3em;width:12px;height:12px;border-radius:50%;border:2px solid var(--green-dark);background:var(--paper-3);box-sizing:border-box}.setup-list li.done::before{background:var(--green-dark)}.setup-list li.todo::before{border-style:dashed}.setup-list li:not(:last-child)::after{content:"";position:absolute;left:5px;top:calc(.3em + 14px);bottom:-14px;width:2px;background:var(--line-strong)}.setup-list li.done:has(+ li.done)::after{background:var(--green)}
.text-link{border:0;background:transparent;color:var(--green-dark);text-decoration:underline;text-underline-offset:4px;cursor:pointer;padding:10px 0;min-height:44px;display:inline-block;font:inherit;font-weight:700}
.family-portal summary,.login-wrap summary{cursor:pointer;padding:12px 0;min-height:44px;font-weight:700}
.family-portal details>div,.login-wrap details>div{padding-top:12px}
.session-date{font-weight:700}
.session-history{margin-top:28px}
.session-details{margin-top:18px;border-top:1px solid var(--line)}
.student-summary h2{margin-top:0}.student-summary p{white-space:pre-wrap}
.danger-zone{border-top:1px solid var(--line);margin-top:28px;padding-top:18px}
.field-error{color:var(--red);font-weight:650;font-size:.9rem;margin:6px 0}
[aria-invalid="true"]{border-color:var(--red)!important}
.family-guide{border:2px solid var(--gold);margin-bottom:24px;max-width:850px}
.family-guide h2{margin-top:0}.family-guide dl{display:grid;grid-template-columns:auto 1fr;gap:10px 18px}.family-guide dt{font-weight:800}.family-guide dd{margin:0}
.portal-nav a.guide-highlight{outline:3px solid var(--gold);outline-offset:-3px;color:var(--paper)}
.skip-link{position:absolute;top:-100px;left:12px;background:var(--paper);color:var(--ink);padding:12px;z-index:100}.skip-link:focus{top:12px}
.family-portal :focus-visible,.login-wrap :focus-visible{outline:3px solid var(--green-dark);outline-offset:4px}.family-portal .portal-sidebar :focus-visible{outline-color:var(--gold)}
.family-portal .small-btn,.family-portal .slot,.family-portal select{min-height:44px}
.family-portal .btn-primary,.login-wrap .btn-primary{background:var(--green-dark)}
.family-portal .booking-calendar{grid-template-columns:repeat(7,minmax(0,1fr))}
.family-portal .day{min-height:80px;padding:10px 4px}.family-portal .day:disabled{opacity:.65;background:var(--paper-2)}
.family-portal .day.selected,.family-portal .slot.selected{outline:3px solid var(--green-dark);outline-offset:2px}
.family-portal .booking-layout{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr)}
.service-options{border:0;padding:0;margin:20px 0;min-width:0}.service-options legend{font-family:var(--serif);font-size:1.25rem;font-weight:700}
.service-option{display:flex;gap:12px;align-items:center;padding:16px;border:1px solid var(--line-strong);margin:10px 0;border-radius:var(--radius);cursor:pointer;background:var(--paper-3)}
.service-option:has(input:checked){border:2px solid var(--green-dark);padding:15px;background:var(--green-tint)}
.service-option input{width:20px;height:20px;accent-color:var(--green-dark);flex-shrink:0}.service-option small{display:block}
.booking-progress{display:flex;flex-wrap:wrap;gap:8px 18px;padding:0;list-style:none;color:var(--ink-soft);font-size:.85rem}
.session-review{margin-top:24px;border-top:2px solid var(--gold);padding-top:20px}
.session-review dl{display:grid;grid-template-columns:90px minmax(0,1fr);gap:10px}.session-review dt{color:var(--ink-soft)}.session-review dd{margin:0;overflow-wrap:anywhere}
.booking-success{border-top:4px solid var(--gold)}
.login-wrap fieldset{border:0;padding:0;margin:0 0 24px;min-width:0}.login-wrap legend{font-family:var(--serif);font-size:1.5rem;font-weight:700;margin-bottom:16px}
.login-secondary{display:block;border-top:1px solid var(--line);padding-top:18px;margin-top:18px}.login-wrap .text-link{display:block}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media(max-width:1000px){.family-portal .booking-layout{grid-template-columns:1fr}}
@media(max-width:760px){
 .family-portal .portal-page{display:block;padding:0}.family-portal .portal-sidebar{position:relative;top:auto;min-height:0;border-radius:0;padding:18px;gap:12px;overflow:visible}
 .family-portal .portal-user{padding:0;border:0;background:transparent;box-shadow:none}.family-portal .portal-user span{font-size:.8rem}
 .family-portal .portal-nav{display:block}.family-primary-nav{grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}
 .family-portal .portal-nav a{padding:12px 5px;text-align:center;font-size:.82rem;min-height:48px}.family-more{margin-top:8px;padding-top:4px}.family-more div{grid-template-columns:1fr 1fr 1fr;align-items:center}.family-more .logout-btn{margin:0;text-align:center;font-size:.82rem}
 .family-portal .portal-main{padding:22px 16px 40px}.family-portal .topbar{padding:0;background:transparent;border:0;box-shadow:none;backdrop-filter:none}
 .family-portal .booking-calendar{grid-template-columns:repeat(3,minmax(0,1fr))}.family-portal .form-actions{flex-wrap:wrap}
 .family-portal input,.family-portal select,.family-portal textarea,.login-wrap input{font-size:16px}.family-guide dl{display:block}.family-guide dd{margin-bottom:14px}
}
@media(prefers-reduced-motion:reduce){.family-portal *,.login-wrap *{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media(max-width:760px){.family-portal .portal-sidebar{padding-left:max(18px,env(safe-area-inset-left));padding-right:max(18px,env(safe-area-inset-right))}.family-portal .portal-main{padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right));padding-bottom:max(40px,env(safe-area-inset-bottom))}}

/* ---- Family Profile (family/profile.html) ----
   Uses the portal tokens from portal.css only. No new colours, no :has(), no container queries,
   so it renders the same in Safari 15 and iOS. */
.fp-jump{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 18px;padding:0}
.fp-jump a{display:inline-flex;align-items:center;min-height:44px;padding:0 16px;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.72);color:var(--ink);font-size:.9rem;font-weight:600;text-decoration:none}
.fp-jump a:hover{border-color:var(--green);color:var(--green-dark)}
.fp-jump a:focus-visible,.fp-switch input:focus-visible+.fp-switch-ui,.fp-choice input:focus-visible+span{outline:3px solid var(--gold);outline-offset:2px}
.fp-card{margin-bottom:18px;scroll-margin-top:16px}
.fp-card-primary{border-top:4px solid var(--green)}
.fp-card-head{display:flex;gap:16px;align-items:flex-start;margin-bottom:14px}
.fp-card-head h2{margin:0 0 4px}.fp-card-head .muted{margin:0}
.fp-split{justify-content:space-between;flex-wrap:wrap}.fp-split>div{flex:1 1 260px;min-width:0}
.fp-avatar{flex:0 0 auto;display:inline-grid;place-items:center;width:44px;height:44px;border-radius:50%;background:var(--ink);color:var(--paper);font-family:var(--serif);font-weight:600;font-size:1rem;letter-spacing:.02em}
.fp-avatar-lg{width:56px;height:56px;font-size:1.2rem;background:var(--green)}
.fp-form{display:grid;gap:4px;max-width:560px}
.fp-optional{font-weight:400;color:var(--ink-soft);font-size:.85em}
.fp-choices{border:0;margin:6px 0 4px;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.fp-choices legend{padding:0;margin-bottom:8px;font-weight:700;color:var(--ink)}
.fp-choice{position:relative;display:block;cursor:pointer}
.fp-choice input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}
.fp-choice span{display:flex;flex-direction:column;gap:2px;min-height:64px;padding:12px 14px;border:1.5px solid var(--line);border-radius:var(--radius);background:var(--white);transition:border-color .15s,box-shadow .15s,background-color .15s}
.fp-choice small{color:var(--ink-soft);font-size:.8rem}
.fp-choice input:checked+span{border-color:var(--green);background:var(--green-tint);box-shadow:inset 0 0 0 1px var(--green)}
.fp-contacts{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:12px}
.fp-contact{display:flex;gap:14px;align-items:flex-start;padding:16px;border:1px solid var(--line);border-radius:var(--radius);background:#fff}
.fp-contact-editing{border-color:var(--green);box-shadow:0 0 0 3px rgba(28,135,84,.12)}
.fp-contact-body{flex:1 1 auto;min-width:0}
.fp-contact h3{margin:0 0 6px;font-size:1.05rem;overflow-wrap:anywhere}
.fp-you{font-family:var(--sans);font-weight:500;font-size:.85rem;color:var(--ink-soft)}
.fp-badges{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 8px}
.fp-badge{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;border-radius:999px;background:var(--paper-2);color:var(--ink);font-size:.76rem;font-weight:600}
.fp-badge-primary{background:var(--ink);color:var(--paper)}
.fp-badge-access{background:var(--green-tint);color:var(--green-dark)}
.fp-badge-alert{background:var(--gold-tint);color:var(--ink)}
.fp-badge-muted{background:var(--paper-2);color:var(--ink-soft)}
.fp-line,.fp-receives{margin:0 0 4px;overflow-wrap:anywhere;font-size:.93rem}
.fp-receives{color:var(--ink-soft)}
.fp-actions{flex:0 0 auto}
.fp-empty{margin-top:16px;padding:22px;border:1.5px dashed var(--line);border-radius:var(--radius);text-align:center;background:rgba(255,255,255,.6)}
.fp-empty h3{margin:0 0 6px}.fp-empty p{margin:0 auto 14px;max-width:46ch}
.fp-editor{display:grid;gap:14px}.fp-editor h3{margin:0}
.fp-identity{margin:0}
.fp-prefs{border:0;margin:0;padding:14px;background:var(--paper-2);border-radius:var(--radius);display:grid;gap:10px}
.fp-prefs legend{padding:0 6px;font-weight:700}
.fp-prefs-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 16px}
.fp-switch{display:flex;align-items:center;gap:12px;min-height:44px;cursor:pointer;position:relative}
.fp-switch input{position:absolute;opacity:0;width:44px;height:44px;margin:0;left:0;cursor:pointer}
.fp-switch-ui{flex:0 0 auto;position:relative;width:44px;height:26px;border-radius:999px;background:#b9bfcd;transition:background-color .15s}
.fp-switch-ui::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--white);box-shadow:0 1px 3px rgba(20,31,58,.35);transition:transform .15s}
.fp-switch input:checked+.fp-switch-ui{background:var(--green)}
.fp-switch input:checked+.fp-switch-ui::after{transform:translateX(18px)}
.fp-switch-label{font-size:.95rem}
.fp-secondary-actions{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-start;padding-top:12px;border-top:1px solid var(--line)}
.fp-count{margin:4px 0 0;text-align:right;font-family:var(--mono);font-size:.78rem;color:var(--ink-soft)}
.fp-saved{align-self:center}
.fp-info{background:var(--paper-2)}.fp-info h2{margin-top:0}.fp-info p{margin-bottom:0}
.fp-skeleton-wrap{display:grid;gap:14px}
.fp-skeleton i{display:block;height:16px;margin:12px 0;border-radius:6px;background:linear-gradient(90deg,#ece6d6 25%,#f6f1e4 50%,#ece6d6 75%);background-size:200% 100%;animation:fp-shimmer 1.4s linear infinite}
.fp-skeleton i:nth-child(2){width:70%}.fp-skeleton i:nth-child(3){width:45%}
@keyframes fp-shimmer{to{background-position:-200% 0}}
@media(max-width:760px){
 .fp-choices,.fp-prefs-grid{grid-template-columns:1fr}
 .fp-contact{flex-wrap:wrap;padding:14px}.fp-actions{width:100%;padding-left:58px}
 .fp-jump{flex-wrap:nowrap;overflow-x:auto;margin-left:-16px;margin-right:-16px;padding:0 16px 4px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
 .fp-jump a{flex:0 0 auto}.fp-jump::-webkit-scrollbar{display:none}
 .fp-card-head{gap:12px}.fp-avatar-lg{width:48px;height:48px}
 .fp-split .btn{width:100%}
}
@media(forced-colors:active){.fp-switch-ui{border:2px solid ButtonText}.fp-choice input:checked+span{outline:2px solid Highlight}}
.fp-secondary-actions .danger-zone{flex:1 1 220px;margin:0;padding:0;border:0;background:transparent;text-align:left}
.fp-secondary-actions .danger-zone summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-weight:600;color:var(--red)}
.fp-secondary-actions .danger-zone p{margin:0 0 8px}

/* Keep every section link visible on small screens and at larger text sizes. */
@media(max-width:760px){
 .fp-jump{flex-wrap:wrap;overflow:visible;margin:0 0 18px;padding:0;gap:8px}
 .fp-jump a{flex:0 1 auto;min-width:0;padding:8px 12px;overflow-wrap:anywhere}
 .fp-contact-body{flex-basis:calc(100% - 58px)}
}
.fp-card-head>div,.fp-choices,.fp-prefs{min-width:0}

/* Mathematical sidebar: isolated from the admin shell and portal content.
   A 24px grid underpins the 48px primary intervals. Native details owns state;
   decoration never participates in the accessible names or intercepts input. */
.family-portal .portal-sidebar{
 --family-rail:rgba(251,245,232,.3);
 --family-secondary:rgba(251,245,232,.78);
 gap:20px;
}
.family-portal .portal-sidebar::before{background-position:-1px 0}
.family-portal .family-identity{
 display:flex;align-items:center;gap:10px;min-width:0;min-height:64px;
 padding:10px;border-radius:var(--radius);color:var(--paper);
 transition:border-color 180ms ease-out,background-color 180ms ease-out;
}
.family-portal .family-identity:hover{border-color:var(--gold);background:rgba(251,245,232,.1)}
.family-portal .family-identity .family-initials{
 display:grid;place-items:center;flex:0 0 36px;width:36px;height:36px;
 border:1px solid var(--family-rail);border-radius:4px;
 color:var(--gold);background:var(--gold-tint);font-family:var(--serif);
 font-size:.9rem;font-weight:700;letter-spacing:.02em;
}
.family-portal .family-identity-text{display:block;min-width:0;flex:1}
.family-portal .family-identity strong{margin:0 0 2px;font-size:.9rem;line-height:1.4;overflow-wrap:anywhere}
.family-portal .family-identity #subwho{font-size:.75rem;line-height:1.5;color:var(--family-secondary);overflow-wrap:anywhere}
.family-portal .portal-nav{display:block;min-width:0}
.family-portal .family-nav-label{
 margin:0;padding:0 0 8px 48px;color:var(--family-secondary);
 font:600 .65rem/1.5 var(--sans);letter-spacing:.14em;text-transform:uppercase;
}
.family-portal .family-primary-nav{position:relative;display:grid;gap:0}
.family-primary-nav::before{
 content:"";position:absolute;left:24px;top:24px;bottom:24px;width:1px;
 background:var(--family-rail);pointer-events:none;
}
.family-portal .portal-nav a,.family-portal .portal-nav .logout-btn{
 min-height:44px;transform:none;transition:color 180ms ease-out,background-color 180ms ease-out,border-color 180ms ease-out;
}
.family-portal .family-primary-nav a{
 position:relative;display:flex;align-items:center;gap:8px;min-width:0;min-height:48px;
 padding:10px 12px 10px 48px;border-radius:5px;color:var(--paper);
 font-size:.95rem;font-weight:700;line-height:1.5;
}
.family-primary-nav a::before{
 content:"";position:absolute;left:20px;top:calc(50% - 4px);width:9px;height:9px;
 border:1px solid var(--family-secondary);border-radius:50%;background:var(--ink-2);
 transition:transform 180ms ease-out,background-color 180ms ease-out,border-color 180ms ease-out;pointer-events:none;
}
.family-primary-nav a::after{
 content:"";position:absolute;left:29px;top:50%;width:12px;height:1px;
 background:var(--family-rail);transform-origin:left;
 transition:transform 180ms ease-out,background-color 180ms ease-out;pointer-events:none;
}
.family-portal .family-primary-nav a:hover::before{transform:scale(1.15);border-color:var(--gold)}
.family-portal .family-primary-nav a:hover::after{transform:scaleX(1.2);background:var(--gold)}
.family-portal .portal-nav a.active{
 color:var(--paper);border-color:var(--family-rail);background:rgba(251,245,232,.09);
 box-shadow:inset 2px 0 0 var(--gold);
}
.family-portal .family-primary-nav a.active::before{background:var(--gold);border-color:var(--gold)}
.family-portal .family-primary-nav a.active::after{background:var(--gold)}
.family-nav-symbol{margin-left:auto;color:var(--family-secondary);font:400 .75rem/1 var(--mono);white-space:nowrap}
.family-portal .family-primary-nav a.active .family-nav-symbol{color:var(--gold)}
.family-portal .family-more{margin-top:14px;padding-top:6px;border-color:var(--family-rail)}
.family-portal .family-more>summary{
 position:relative;display:flex;align-items:center;gap:14px;list-style:none;
 min-height:44px;padding:10px 12px 10px 17px;border-radius:5px;
 color:var(--family-secondary);font-size:.85rem;font-weight:600;
}
.family-more>summary::-webkit-details-marker{display:none}
.family-more>summary::marker{content:""}
.family-more>summary:hover{color:var(--paper);background:rgba(251,245,232,.06)}
.family-more-sign{position:relative;flex:0 0 16px;width:16px;height:16px;color:var(--gold)}
.family-more-sign::before,.family-more-sign::after{
 content:"";position:absolute;left:1px;top:7px;width:14px;height:2px;background:currentColor;pointer-events:none;
}
.family-more-sign::after{left:7px;top:1px;width:2px;height:14px;transform:scaleY(1);transition:transform 180ms ease-out}
.family-more[open] .family-more-sign::after{transform:scaleY(0)}
.family-portal .family-more .family-more-content{
 position:relative;display:grid;grid-template-columns:minmax(0,1fr);align-items:start;gap:16px;padding:12px 0 0;
}
.family-more-content::before{
 content:"";position:absolute;left:24px;top:12px;bottom:70px;width:1px;
 background:var(--family-rail);transform-origin:top;pointer-events:none;
}
.family-nav-group{position:relative;min-width:0}
.family-portal .family-nav-group .family-nav-label{padding-bottom:4px}
.family-portal .family-nav-group a{
 position:relative;display:grid;grid-template-columns:18px minmax(0,1fr);align-items:center;gap:10px;
 padding:10px 10px 10px 40px;border-radius:5px;font-size:.85rem;line-height:1.5;font-weight:600;
 color:var(--paper);overflow-wrap:anywhere;
}
.family-nav-group a::before{
 content:"";position:absolute;left:24px;top:50%;width:9px;height:1px;background:var(--family-rail);pointer-events:none;
}
.family-nav-number{font:400 .65rem/1 var(--mono);color:var(--family-secondary)}
.family-portal .family-nav-support a{font-size:.8rem;font-weight:500;color:var(--family-secondary)}
.family-portal .family-nav-group a.active .family-nav-number{color:var(--gold)}
.family-portal .family-more .family-nav-account{
 display:block;padding:8px 0 0;border-top:1px solid var(--family-rail);
}
.family-portal .family-nav-account .logout-btn{
 margin:0;padding:10px 12px 10px 48px;font-size:.8rem;font-weight:500;color:var(--family-secondary);
}
.family-portal .portal-sidebar :focus-visible{outline:3px solid var(--gold);outline-offset:2px}
.family-portal .portal-nav a.guide-highlight{outline-offset:-3px}
/* Reveal immediately; motion is decoration, never a delay or height lock. */
@media(prefers-reduced-motion:no-preference){
 .family-more[open] .family-more-content::before{animation:family-rail-draw 200ms ease-out both}
 .family-more[open] .family-nav-group a{animation:family-nav-reveal 180ms ease-out both}
 .family-more[open] .family-nav-group a:nth-of-type(2){animation-delay:15ms}
 .family-more[open] .family-nav-group a:nth-of-type(3){animation-delay:30ms}
 .family-more[open] .family-nav-support a{animation-delay:45ms}
 .family-more[open] .family-nav-support a:nth-of-type(2){animation-delay:60ms}
}
@keyframes family-rail-draw{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes family-nav-reveal{from{opacity:.5;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:760px){
 .family-portal .portal-sidebar{gap:12px}
 .family-portal .family-identity{max-width:100%;padding:8px 10px;border:1px solid var(--family-rail);background:rgba(251,245,232,.05);min-height:56px}
 .family-portal .portal-nav>.family-nav-label{padding:0 0 6px 4px}
 .family-portal .family-primary-nav{grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}
 .family-primary-nav::before,.family-primary-nav a::before,.family-primary-nav a::after,.family-nav-symbol{display:none}
 .family-portal .family-primary-nav a{justify-content:center;min-height:48px;padding:10px 4px;text-align:center;font-size:.78rem;overflow-wrap:anywhere}
 .family-portal .family-primary-nav a.active{box-shadow:inset 0 -2px 0 var(--gold)}
 .family-portal .family-more{margin-top:10px;padding-top:4px}
 .family-portal .family-more .family-more-content{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding-top:10px}
 .family-more-content::before{display:none}
 .family-portal .family-nav-group .family-nav-label{padding-left:8px}
 .family-portal .family-nav-group a{padding:10px 8px;gap:6px;grid-template-columns:16px minmax(0,1fr);text-align:left;font-size:.8rem}
 .family-nav-group a::before{display:none}
 .family-portal .family-more .family-nav-account{grid-column:1 / -1}
 .family-portal .family-nav-account .logout-btn{text-align:left;padding-left:8px}
}
@media(max-width:360px){
 .family-portal .family-more .family-more-content{grid-template-columns:minmax(0,1fr);gap:12px}
 .family-portal .family-nav-group a{padding-left:18px}
}
@media(forced-colors:active){
 .family-portal .portal-nav a.active{border:2px solid Highlight}
 .family-primary-nav a::before{border-color:ButtonText}
 .family-portal .family-primary-nav a.active::before{background:Highlight;border-color:Highlight}
}
@media(prefers-reduced-motion:reduce){
 .family-portal .portal-sidebar *,.family-portal .portal-sidebar *::before,.family-portal .portal-sidebar *::after{animation:none!important;transition:none!important}
}

/* Include the monogram superscript in its compact link target, preserving
   the existing parentheses and wordmark geometry on touch/reduced motion. */
@media(hover:none),(pointer:coarse),(prefers-reduced-motion:reduce){
 .family-portal .portal-brand{width:calc(var(--mm-logo-compact-width) + 28px)}
 .family-portal .portal-brand .mm-brand-logo::after{right:28px}
}
/* Expandable answers: a mono plus that becomes a minus. */
#app details:not(.tv-summary)>summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:14px}
#app details:not(.tv-summary)>summary::-webkit-details-marker{display:none}
#app details:not(.tv-summary)>summary::after{content:"+";flex:none;font:700 1.15rem/1 var(--mono);color:var(--green-dark)}
#app details:not(.tv-summary)[open]>summary::after{content:"\2212"}
#app details.danger-zone>summary::after{color:inherit}
/* Feedback rating: the chosen score is plotted with a gold point. */
.eg-rating .fp-choice input:checked+span{position:relative}
.eg-rating .fp-choice input:checked+span::after{content:"";position:absolute;top:-6px;right:-6px;width:11px;height:11px;border-radius:50%;background:var(--gold);border:1.5px solid var(--ink-2);animation:mm-plot-land .35s cubic-bezier(.22,.76,.22,1) both}
/* Portal tour progress: three points on a line, filled up to the current step. */
.guide-steps{display:inline-flex;align-items:center;gap:10px;margin-left:12px;vertical-align:middle;position:relative}
.guide-steps::before{content:"";position:absolute;left:4px;right:4px;top:50%;height:2px;margin-top:-1px;background:var(--line-strong)}
.guide-steps i{position:relative;width:9px;height:9px;border-radius:50%;border:2px solid var(--green-dark);background:var(--paper-3);box-sizing:border-box}
.guide-steps i.on{background:var(--green-dark)}
/* Each student's initial, set as a variable on a square of graph paper. */
.student-var{display:inline-grid;place-items:center;width:1.55em;height:1.55em;margin-right:.45em;vertical-align:-.22em;border:1px solid var(--line-strong);border-radius:4px;background:linear-gradient(rgba(28,135,84,.1) 1px,transparent 1px) 0 0/8px 8px,linear-gradient(90deg,rgba(28,135,84,.1) 1px,transparent 1px) 0 0/8px 8px,var(--paper-3);font:italic 600 .9em/1 var(--serif);color:var(--green-dark)}
/* Countdown to the next session, in mono beside its eyebrow. */
.t-minus{display:inline-block;margin-left:10px;padding:2px 8px;border-radius:4px;background:var(--gold-tint);color:#735900;letter-spacing:.04em;text-transform:none}

.mm-cancel-dialog{max-width:36rem;width:calc(100% - 2rem);max-height:85dvh;overflow:auto;border:1px solid var(--border);border-radius:16px;padding:24px;background:var(--paper,#FAF6EC);color:var(--ink,#2B2A29)}
.mm-cancel-dialog::backdrop{background:rgba(13,33,61,.55)}
.auth-social{display:grid;gap:10px;margin-block:16px}
.auth-social .btn{width:100%}

/* Layout rhythm: one 24px interval between blocks, inside cards and across grids,
   so every card's text starts on the same vertical line and right edges meet. */
.family-portal{--fam-gap:24px}
.family-portal #app>*{margin-top:0;margin-bottom:0}
.family-portal #app>*+*{margin-top:var(--fam-gap)}
.family-portal #app>:empty{margin-top:0}
.family-portal #app>h2,.family-portal #app>section.home-support:not(.card){margin-top:calc(var(--fam-gap) + 8px)}
.family-portal #app>h2+*,.family-portal #app>.booking-progress+*{margin-top:12px}
.family-portal .topbar{align-items:center}
.family-portal .card{padding:var(--fam-gap)}
.family-portal .home-next{max-width:none;padding:calc(var(--fam-gap) + 8px) var(--fam-gap)}
.family-portal .family-guide{max-width:none}
.family-portal .grid,.family-portal .dash-grid,.family-portal .tv-grid,.family-portal .booking-layout,.family-portal .dash-help{gap:var(--fam-gap);align-items:stretch}
.family-portal .grid.two>:only-child{grid-column:1/-1}
.family-portal #dash-slot>*{margin-top:0;margin-bottom:0}
.family-portal #dash-slot>*+*{margin-top:var(--fam-gap)}
.family-portal .dash-help-card{padding:20px var(--fam-gap)}
.family-portal .booking-step{top:calc(var(--fam-gap) - 2px);right:var(--fam-gap)}
/* Single-form pages sit centred in the content column, and what follows them shares that column. */
.family-portal #app>.eg-form{width:100%;max-width:680px;margin-left:auto;margin-right:auto}
.family-portal #app>.eg-form~h2,.family-portal #app>.eg-form~.eg-requests{width:100%;max-width:680px;margin-left:auto;margin-right:auto}
.family-portal .eg-form .btn-primary{justify-self:start}
/* Profile: section links and the security link share one row; the avatar moves opposite
   the heading so the form lines up with the heading, as in the other cards. */
.fp-jump-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 18px}
.fp-jump-row .fp-jump{margin:0}
.fp-card-primary>.fp-card-head{flex-direction:row-reverse;justify-content:space-between}
@media(max-width:760px){
 .family-portal{--fam-gap:16px}
 .family-portal .card{padding:20px 16px}
 .family-portal .home-next{padding:24px 16px}
 .fp-jump-row{display:block}.fp-jump-row .fp-jump{margin-bottom:4px}
}
/* Recurring sessions: sits between Available times and Your Session(s) on Schedule.
   Kept deliberately small: one switch, two native pickers, one result line. */
.mm-topbar-actions{margin-top:0;justify-content:flex-end}
.mm-repeat{margin-top:20px;padding:14px 16px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--paper-3)}
.mm-repeat.is-on{border-color:var(--green-dark);background:#fff}
.mm-repeat-toggle{align-items:flex-start}.mm-repeat-toggle .fp-switch-ui{margin-top:2px}
.mm-repeat-text{display:grid;gap:2px}.mm-repeat-text strong{font-size:1rem}.mm-repeat-text .field-help{margin:0;color:var(--ink-soft)}
.mm-repeat-toggle input:focus-visible+.fp-switch-ui{outline:3px solid var(--green-dark);outline-offset:2px}
.mm-repeat-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:12px}
.mm-repeat .mm-repeat-field{display:grid;gap:4px;min-width:0;margin:0}.mm-repeat-field label{font-size:.85rem;font-weight:700;color:var(--ink-soft)}
.mm-repeat-field select{width:100%;min-height:44px;margin:0}
.mm-repeat-result{margin-top:12px}
.mm-repeat-line{display:flex;gap:8px;align-items:baseline;margin:0}
.mm-seq{display:inline-block;margin-right:6px;font-family:var(--mono);font-weight:800;color:var(--green-dark)}
.mm-repeat-dates{margin-top:6px}.mm-repeat-dates summary{cursor:pointer;font-size:.9rem;color:var(--ink-soft);min-height:44px;display:flex;align-items:center}
.mm-occurrences{list-style:none;margin:8px 0;padding:0;display:grid;gap:6px}
.mm-occurrences li{display:flex;gap:10px;align-items:baseline;overflow-wrap:anywhere}
.mm-occ-mark{flex:0 0 1.4em;height:1.4em;display:inline-grid;place-items:center;border-radius:50%;font-weight:800;font-size:.85rem}
.mm-repeat-line.is-ok .mm-occ-mark,.mm-occurrences .is-available .mm-occ-mark{background:var(--green-tint);color:var(--green-dark)}
.mm-repeat-line.is-warn .mm-occ-mark{background:var(--gold-tint);color:#735900}
.mm-occurrences .is-unavailable{color:var(--ink-soft)}
.mm-occurrences .is-unavailable .mm-occ-mark{background:rgba(162,54,39,.1);color:var(--red)}
.mm-repeat-actions{margin:4px 0 0}.mm-repeat-actions .text-link,.mm-repeat-result>.text-link{min-height:44px}
.mm-series-list{display:grid;gap:var(--fam-gap,18px)}
.mm-series-card h3{margin:0 0 4px}.mm-series-card dl{display:grid;grid-template-columns:120px minmax(0,1fr);gap:8px 12px;margin:14px 0}.mm-series-card dt{color:var(--ink-soft)}.mm-series-card dd{margin:0;overflow-wrap:anywhere}
.mm-series-card .pill{margin-left:6px;vertical-align:middle}
.mm-end-dialog{max-width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow:auto;border:1px solid var(--line-strong);border-radius:var(--radius);padding:24px;color:var(--ink);background:#fff}
.mm-end-dialog::backdrop{background:rgba(20,31,58,.45)}
@media(max-width:760px){
 .mm-repeat{padding:12px 14px}
 .mm-topbar-actions .btn{width:100%}
 .mm-topbar-actions{justify-content:flex-start;margin-top:12px}
 .mm-series-card dl{grid-template-columns:1fr;gap:2px}.mm-series-card dd{margin-bottom:8px}
 .mm-end-dialog{padding:18px}
}
