/* CCSA Natal Midlands v55.9.1 — WCAG 2.2 AA accessibility remediation layer */
:root{--a11y-focus:#ffdf45;--a11y-focus-ring:#06140d;scroll-padding-bottom:7rem}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;font-size:16px}
html.text-size-small{font-size:16px!important}html.text-size-medium{font-size:18px!important}html.text-size-large{font-size:20px!important}
body{font-size:1rem;line-height:1.5;overflow-wrap:anywhere}
.skip-link{position:fixed;left:1rem;top:.5rem;z-index:100000;transform:translateY(-180%);padding:.8rem 1rem;border:2px solid var(--a11y-focus);border-radius:.65rem;background:#fff;color:#06140d;font-weight:900;text-decoration:none}.skip-link:focus{transform:none}
:where(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline:3px solid var(--a11y-focus)!important;outline-offset:3px!important;box-shadow:0 0 0 6px var(--a11y-focus-ring)!important}
:where(button,.back-btn,.tab,.theme-toggle,.home-alerts-button,.admin-add-btn,.admin-tabs button,.admin-section-tab,.committee-payment-actions>a,.committee-payment-actions>button,.classifieds-hero-actions button,.classifieds-filter-tabs button,.merch-filter,.game-new-button){min-height:44px;min-width:44px}
:where(input:not([type=checkbox]):not([type=radio]),select,textarea){font:inherit!important;font-size:1rem!important;line-height:1.5!important;min-height:44px}
:where(button,a,summary,label){touch-action:manipulation}
:where(p,li,dd,dt,.detail-status,.committee-loading,.merch-loading,.intention-helper,.settings-note,.admin-record-main small,.game-instructions-body,.emergency-card p,.emergency-card li){font-size:max(.9rem,14px)!important;line-height:1.5!important}
:where(.screen-kicker,.section-kicker,.settings-overline,.committee-overline,.merch-overline,.classifieds-overline,.tile-overline,.celebration-kicker,.intention-overline,.admin-record-number,.game-card-overline){font-size:max(.75rem,12px)!important;line-height:1.35!important;letter-spacing:.12em!important}
:where(.tab>span:last-child,.admin-tabs button,.admin-section-tab,.intention-rate-card,.intention-breakdown,.committee-bank-grid,.committee-payment-note,.merch-card,.classifieds-card,.emergency-step,.ice-grid){font-size:max(.875rem,14px)!important}
.screen:not([hidden]),#screen-home:not([hidden]){scroll-margin-top:1rem;scroll-margin-bottom:7rem}
.tabbar{padding-bottom:max(8px,env(safe-area-inset-bottom))}.tabbar .tab{padding:.55rem .4rem}.tabbar .tab>span:last-child{font-weight:800}
.intention-admin-entry{margin:0 0 1rem;padding:1rem;border:2px solid var(--gold,#d9b44a);border-radius:1rem;background:color-mix(in srgb,var(--gold,#d9b44a) 10%,var(--panel,#102d20));display:grid;gap:1rem}.intention-admin-entry[hidden]{display:none}.intention-admin-entry h3{margin:.2rem 0}.intention-admin-entry p{margin:.35rem 0 0}.intention-admin-delivery{display:grid;gap:.7rem}.intention-admin-return{justify-self:start;padding:.7rem 1rem;border-radius:.7rem;border:1px solid currentColor;background:transparent;color:inherit;font-weight:800}
.form-check{display:flex;align-items:flex-start;gap:.75rem;min-height:44px;padding:.55rem 0}.form-check-input{width:1.35rem;height:1.35rem;flex:0 0 auto;margin-top:.15rem;accent-color:var(--gold,#d9b44a)}.form-check-label{font-size:1rem;line-height:1.45}
.committee-payment-actions{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem!important}.committee-share-bank{display:flex;align-items:center;justify-content:center;gap:.55rem;border:1px solid var(--gold-border);border-radius:12px;background:var(--panel);color:var(--cream);font-weight:800;padding:.75rem}.committee-share-bank svg{width:1.25rem;height:1.25rem}
.merch-add-status{margin:.6rem 0 0;padding:.65rem .75rem;border-radius:.65rem;font-weight:800}.merch-add-status.success{background:rgba(52,180,104,.16);color:inherit}.merch-add-status.error{background:rgba(210,65,65,.18);color:inherit}
.classifieds-page-header{grid-template-columns:48px minmax(0,1fr)!important}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
@media(max-width:720px){
  .intention-grid.two,.park-rating-member-grid,.admin-form-grid,.committee-payment-actions,.classifieds-filter-grid,.merch-product-layout{grid-template-columns:1fr!important}
  .committee-payment-actions>*{width:100%;box-sizing:border-box}
  .admin-toolbar,.admin-editor-actions,.intention-success-actions,.campy-crush-actions{flex-wrap:wrap!important}.admin-toolbar>*{min-width:0!important}
  .screen-header h2{font-size:clamp(1.65rem,7vw,2.3rem)!important}.hero h1{font-size:clamp(2rem,10vw,3.8rem)!important}
}
@media(max-width:380px){
  .app{width:100%!important}.screen-header{gap:.65rem!important;padding-inline:.65rem!important}.screen-header>div{min-width:0}
  .tabbar .tab{padding-inline:.2rem}.tabbar .tab-icon{transform:scale(.9)}
  .intention-section,.park-rating-card,.settings-card,.admin-card,.classifieds-hero,.classifieds-filters{padding:.85rem!important}
}
@media(forced-colors:active){:where(button,a,input,select,textarea,summary):focus-visible{outline:3px solid Highlight!important}.intention-admin-entry{border:2px solid CanvasText}.committee-share-bank{border:1px solid ButtonText}}

/* Minimum readable text across the legacy compact UI selectors. */
small{font-size:.875rem!important;line-height:1.45!important}
html.text-size-small body .app.app :where([class*="overline"],[class*="kicker"],[class*="eyebrow"],[class*="badge"],[class*="meta"],[class*="status"],[class*="label"],[class*="note"],[class*="hint"],[class*="count"],[class*="role"]),
html.text-size-medium body .app.app :where([class*="overline"],[class*="kicker"],[class*="eyebrow"],[class*="badge"],[class*="meta"],[class*="status"],[class*="label"],[class*="note"],[class*="hint"],[class*="count"],[class*="role"]),
html.text-size-large body .app.app :where([class*="overline"],[class*="kicker"],[class*="eyebrow"],[class*="badge"],[class*="meta"],[class*="status"],[class*="label"],[class*="note"],[class*="hint"],[class*="count"],[class*="role"]){font-size:max(.75rem,12px)!important;line-height:1.4!important}
html.text-size-small body .app.app :where(.tile .sub,.tagline,.clock .date,.rally-marshal,.programme-note,.detail-row strong,.admin-record-main small,.committee-hero-copy p,.committee-intro p,.committee-contact-line,.committee-action,.committee-payment-note p,.committee-bank-grid dd,.newsletter-hero p,.newsletter-card-meta,.calendar-section-heading p,.gallery-card p,.notice-card p,.resource-meta,.recipe-contributor,.faq-card p,.merch-card p,.merch-card button,.merch-cart-item small,.intention-hero p,.intention-section-heading p,.intention-grid label>span,.intention-confirm,.park-rating-field,.classifieds-disclaimer p,.classified-card-copy small,.emergency-section-heading p,.emergency-contact-copy p,.emergency-call-checklist li),
html.text-size-medium body .app.app :where(.tile .sub,.tagline,.clock .date,.rally-marshal,.programme-note,.detail-row strong,.admin-record-main small,.committee-hero-copy p,.committee-intro p,.committee-contact-line,.committee-action,.committee-payment-note p,.committee-bank-grid dd,.newsletter-hero p,.newsletter-card-meta,.calendar-section-heading p,.gallery-card p,.notice-card p,.resource-meta,.recipe-contributor,.faq-card p,.merch-card p,.merch-card button,.merch-cart-item small,.intention-hero p,.intention-section-heading p,.intention-grid label>span,.intention-confirm,.park-rating-field,.classifieds-disclaimer p,.classified-card-copy small,.emergency-section-heading p,.emergency-contact-copy p,.emergency-call-checklist li),
html.text-size-large body .app.app :where(.tile .sub,.tagline,.clock .date,.rally-marshal,.programme-note,.detail-row strong,.admin-record-main small,.committee-hero-copy p,.committee-intro p,.committee-contact-line,.committee-action,.committee-payment-note p,.committee-bank-grid dd,.newsletter-hero p,.newsletter-card-meta,.calendar-section-heading p,.gallery-card p,.notice-card p,.resource-meta,.recipe-contributor,.faq-card p,.merch-card p,.merch-card button,.merch-cart-item small,.intention-hero p,.intention-section-heading p,.intention-grid label>span,.intention-confirm,.park-rating-field,.classifieds-disclaimer p,.classified-card-copy small,.emergency-section-heading p,.emergency-contact-copy p,.emergency-call-checklist li){font-size:max(.875rem,14px)!important;line-height:1.5!important}
html.text-size-small body .app.app :where(.admin-primary-btn,.admin-secondary-btn,.admin-add-btn,.admin-signout,.admin-tabs button,.admin-section-nav button,.admin-record-actions button,.newsletter-action,.calendar-action,.gallery-viewer-actions button,.resource-actions a,.resource-actions button,.faq-contact-actions a,.merch-card button,.intention-submit,.intention-success-actions button,.park-rating-open,.classifieds-primary,.classifieds-secondary,.classifieds-filter-row button,.classifieds-contact-actions a,.emergency-call-button,.emergency-whatsapp-button,.emergency-location-actions button,.emergency-location-actions a),
html.text-size-medium body .app.app :where(.admin-primary-btn,.admin-secondary-btn,.admin-add-btn,.admin-signout,.admin-tabs button,.admin-section-nav button,.admin-record-actions button,.newsletter-action,.calendar-action,.gallery-viewer-actions button,.resource-actions a,.resource-actions button,.faq-contact-actions a,.merch-card button,.intention-submit,.intention-success-actions button,.park-rating-open,.classifieds-primary,.classifieds-secondary,.classifieds-filter-row button,.classifieds-contact-actions a,.emergency-call-button,.emergency-whatsapp-button,.emergency-location-actions button,.emergency-location-actions a),
html.text-size-large body .app.app :where(.admin-primary-btn,.admin-secondary-btn,.admin-add-btn,.admin-signout,.admin-tabs button,.admin-section-nav button,.admin-record-actions button,.newsletter-action,.calendar-action,.gallery-viewer-actions button,.resource-actions a,.resource-actions button,.faq-contact-actions a,.merch-card button,.intention-submit,.intention-success-actions button,.park-rating-open,.classifieds-primary,.classifieds-secondary,.classifieds-filter-row button,.classifieds-contact-actions a,.emergency-call-button,.emergency-whatsapp-button,.emergency-location-actions button,.emergency-location-actions a){font-size:max(.875rem,14px)!important;line-height:1.35!important}

/* v55.7.3 intention confirmation contrast and pay-at-gate clarification. */
.intention-bank-card,
.intention-bank-card > strong,
.intention-bank-card p,
.intention-bank-card b { color:#211a13!important; }
.intention-bank-card > span { color:#9f3219!important; }
.intention-gate-payment-warning {
  margin-top:1rem!important;
  padding:.8rem!important;
  border:2px solid #9f3219!important;
  border-radius:.75rem!important;
  background:#fff8e9!important;
  color:#211a13!important;
  font-size:max(.875rem,14px)!important;
  line-height:1.5!important;
}
.intention-breakdown-note { background:rgba(217,180,74,.09); }
.intention-breakdown-note span { display:grid;gap:.2rem; }
.intention-breakdown-note small { color:var(--gold-light,#f1d17c)!important;font-size:max(.8125rem,13px)!important;line-height:1.4!important; }
.intention-breakdown-note b { white-space:nowrap;color:var(--gold-light,#f1d17c)!important; }


/* v55.7.3 integrated intention management and milestone correction controls. */
.admin-record-list[hidden]{display:none!important}
.admin-register-member-controls{min-width:min(100%,260px);align-content:start}
.admin-register-member-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.55rem}
.admin-register-member-actions button,.admin-register-row-actions button{min-height:44px!important;padding:.65rem .9rem!important;border:1px solid var(--gold-border)!important;border-radius:.75rem!important;background:transparent!important;color:var(--cream)!important;font-size:max(.875rem,14px)!important;font-weight:850!important}
.admin-register-member-actions .danger,.admin-register-row-actions .danger,#adminUndoMilestones{border-color:#b75a4e!important;color:#ffb4aa!important}
.admin-register-member-actions button:disabled{opacity:.5;cursor:not-allowed}
#adminUndoMilestones{background:rgba(183,90,78,.12)!important}
@media(max-width:720px){.admin-register-member-controls{width:100%;min-width:0;justify-items:stretch!important}.admin-attendance-toggle{justify-content:center}.admin-register-member-actions{justify-content:stretch}.admin-register-member-actions button{flex:1 1 120px}}

/* v55.7.3: register unlock leaves milestone totals unchanged; printed Chairman documents use their own branded print stylesheet. */

/* =====================================================================
   v55.12.19 — WCAG 2.2 AA repair layer
   High-specificity focus indicators and grouped-control focus rings.
   ===================================================================== */
html body .app :is(button,a[href],input,select,textarea,summary,[tabindex]):focus-visible {
  outline:3px solid var(--a11y-focus,#ffdf45) !important;
  outline-offset:3px !important;
  box-shadow:0 0 0 6px var(--a11y-focus-ring,#06140d) !important;
}

html body .app :is(
  .gallery-search,.notice-search,.resource-search,.recipe-search,.faq-search,.merch-search,
  .newsletter-search,.admin-search,.classifieds-search,.park-map-search,.rally-filter,
  .milestone-input-wrap,.committee-search,.finance-period-control
):focus-within {
  outline:3px solid var(--a11y-focus,#ffdf45) !important;
  outline-offset:3px !important;
  box-shadow:0 0 0 6px var(--a11y-focus-ring,#06140d) !important;
}

/* The visible ring belongs to the complete search/control shell. */
html body .app :is(
  .gallery-search,.notice-search,.resource-search,.recipe-search,.faq-search,.merch-search,
  .newsletter-search,.admin-search,.classifieds-search,.park-map-search,.rally-filter,
  .milestone-input-wrap,.committee-search,.finance-period-control
) :is(input,select,textarea):focus-visible {
  outline:0 !important;
  box-shadow:none !important;
}

/* WCAG 2.2 target-size minimum, including compact icon-only controls. */
html body .app :is(button,a[href],summary,[role="button"]):not(.inline-link) {
  min-inline-size:24px;
  min-block-size:24px;
}

@media (forced-colors:active) {
  html body .app :is(
    .gallery-search,.notice-search,.resource-search,.recipe-search,.faq-search,.merch-search,
    .newsletter-search,.admin-search,.classifieds-search,.park-map-search,.rally-filter,
    .milestone-input-wrap,.committee-search,.finance-period-control
  ):focus-within {
    outline:3px solid Highlight !important;
    box-shadow:none !important;
  }
}
