
/* Shared portal chrome: one header and one footer for every public page.
   Values are the approved Luvi home chrome (assets/home-20260924/styles.css),
   so the home page keeps its look while every other page gets the same one.
   Every selector is scoped to the chrome elements and prefixed with `:root body`
   so page stylesheets cannot restyle the chrome. Nothing here resets page
   content: no `*`, `html`, `body`, `main` or generic element rules.
   ponytail: brand identity props carry !important on purpose - that is the
   point of a shared chrome. Ceiling: a page stylesheet could still add a
   property this file never declares; add it here if that ever shows up.
   The desktop entry is the link (a real page) plus its own caret disclosure, so
   a section is still a link and the submenu is still a native <details>: closed
   submenus keep their links out of the Tab order without any JavaScript. */

@font-face{font-family:Fredoka;src:url(portal-fredoka-400.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Fredoka;src:url(portal-fredoka-600.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}

/* Keep the keyboard skip link hidden even in captures beyond the viewport. */
:root body>.skip-link:not(:focus){clip-path:inset(50%)}

/* ---------- header: white, navy rune, Fredoka brand ---------- */
:root body .site-header{--wm-navy:#174A7E;--wm-pad:clamp(16px,4vw,60px);display:block!important;position:relative;z-index:20;margin:0!important;max-width:none!important;padding:0!important;height:auto!important;min-height:0!important;overflow:visible!important;background:#fff!important;border-bottom:1px solid rgba(23,74,126,.12);color:#174A7E!important;font-family:Fredoka,system-ui,"Segoe UI",sans-serif!important}
:root body .site-header .header-inner{display:flex!important;flex-wrap:wrap!important;align-items:center;justify-content:space-between;gap:2px clamp(10px,1.6vw,20px);width:100%;max-width:1600px;margin:0 auto;padding:10px var(--wm-pad)!important;box-sizing:border-box;min-height:76px;overflow:visible!important}
:root body .site-header .wordmark,:root body .site-footer .wordmark{display:inline-flex;align-items:center;gap:clamp(8px,1.4vw,12px);flex:0 0 auto;font-family:Fredoka,system-ui,"Segoe UI",sans-serif;font-size:clamp(18px,4.4vw,28px);font-weight:600;line-height:1;letter-spacing:-.01em;white-space:nowrap;text-decoration:none!important}
:root body .site-header .wordmark{color:#174A7E!important}
:root body .site-footer .wordmark{color:#fff!important}
:root body .site-header .wordmark>span,:root body .site-footer .wordmark>span{font:inherit;color:inherit;white-space:nowrap}
:root body .site-footer .wordmark>span{color:#fff!important}
:root body .site-header .wordmark>span{color:#174A7E!important}
/* Rune size follows the approved home chrome: about 18-20px wide / 27-30px tall
   beside the 28px wordmark, not the old 40x60px. */
:root body .site-header .rune,:root body .site-footer .rune{display:block;flex:0 0 auto;width:clamp(17px,4.2vw,20px);height:auto;aspect-ratio:2/3;-webkit-mask:url(portal-rune.webp) center/contain no-repeat;mask:url(portal-rune.webp) center/contain no-repeat}
:root body .site-header .rune{background:#174A7E!important}
:root body .site-footer .rune{background:#fff!important}

/* ---------- header: the eight links, each with its submenu ---------- */
:root body .site-header .site-nav{flex:1 1 auto;min-width:0;display:flex;justify-content:flex-end}
:root body .site-header .nav-list{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:2px 2px;margin:0;padding:0;list-style:none}
:root body .site-header .nav-item{position:relative;display:flex;align-items:center;margin:0}
:root body .site-header .nav-item>a{display:inline-flex;align-items:center;min-height:44px;padding:0 12px;border-radius:12px;font-family:Fredoka,system-ui,"Segoe UI",sans-serif;font-size:clamp(15px,1.15vw,17px);font-weight:400;line-height:1;color:#174A7E!important;text-decoration:none!important;white-space:nowrap}
:root body .site-header .nav-item>a:hover{background:#D2F9F6}
:root body .site-header .nav-item>a.nav-pill{padding:0 20px;border-radius:999px;background:#174A7E!important;color:#fff!important}
:root body .site-header .nav-item>a.nav-pill:hover{background:#123A63!important;color:#fff!important}
:root body .site-header .nav-group{position:relative;display:flex;align-items:center;margin:0!important;padding:0!important;border:0!important;background:transparent!important;box-shadow:none!important}
:root body .site-header .nav-group>summary{display:inline-flex;align-items:center;justify-content:center;width:44px;min-height:44px;margin:0;padding:0;list-style:none;cursor:pointer;border:0!important;border-radius:12px;background:transparent!important;color:#174A7E!important}
:root body .site-header .nav-group>summary:hover{background:#D2F9F6}
:root body .site-header .nav-group>summary::-webkit-details-marker{display:none}
:root body .site-header .nav-group>summary::marker{content:""}
:root body .site-header .nav-caret{width:8px;height:8px;border:0!important;border-right:2px solid #174A7E!important;border-bottom:2px solid #174A7E!important;transform:rotate(45deg);margin-top:-4px}
:root body .site-header .nav-group[open]>summary .nav-caret{transform:rotate(225deg);margin-top:4px}
:root body .site-header .nav-sub{position:absolute;top:100%;left:0;z-index:400;margin:6px 0 0;padding:8px;min-width:240px;max-width:calc(100vw - 32px);box-sizing:border-box;list-style:none;display:flex;flex-direction:column;gap:2px;background:#fff!important;border:1px solid rgba(23,74,126,.16);border-radius:18px;box-shadow:0 18px 40px rgba(23,74,126,.18)}
/* A closed <details> hides its submenu even when a legacy stylesheet forces ul display. */
:root body .site-header details.nav-group:not([open])>.nav-sub{display:none!important}
:root body .site-header .nav-item:last-child .nav-sub{left:auto;right:0}
:root body .site-header .nav-sub a{display:flex;align-items:center;min-height:44px;padding:10px 14px;border-radius:12px;font-family:Fredoka,system-ui,"Segoe UI",sans-serif;font-size:16px;font-weight:400;line-height:1.35!important;color:#174A7E!important;text-decoration:none!important;white-space:nowrap}
:root body .site-header .nav-sub a:hover{background:#D2F9F6}
/* Current page: bold and underlined. Current section: bold, with a soft marker
   that also reads on the navy "For parents" pill. */
:root body .site-header .nav-item>a[aria-current="page"]{font-weight:600;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:6px}
:root body .site-header .nav-sub a[aria-current="page"]{font-weight:600;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:5px}
:root body .site-header .nav-item>a[aria-current="true"]{font-weight:600;background:#D2F9F6}
:root body .site-header .nav-item>a.nav-pill[aria-current="true"]{background:#174A7E!important;box-shadow:0 0 0 3px #D2F9F6}
:root body .site-header a:focus-visible,:root body .site-header summary:focus-visible{outline:3px solid #174A7E;outline-offset:2px}

/* ---------- header: no other marker may dress the shared controls ----------
   Page stylesheets used to add their own `+` / `-` / rule markers to summaries
   (portal-navigation, play-explore, the old home sheet). The one and only
   indicator is the single navy caret span the renderer writes. */
:root body .site-header details>summary{list-style:none!important;-webkit-tap-highlight-color:transparent}
:root body .site-header details>summary::-webkit-details-marker{display:none!important}
:root body .site-header details>summary::marker{content:""!important}
:root body .site-header details>summary::before,:root body .site-header details>summary::after{content:none!important;display:none!important}
:root body .site-header .nav-item>a::before,:root body .site-header .nav-item>a::after{content:none!important}
:root body .site-header .nav-sub>li::before,:root body .site-header .nav-sub>li::after{content:none!important}

/* ---------- header: phone only - one Menu button, submenus indented inside ---------- */
:root body .site-header .nav-toggle{display:none;position:relative;margin:0!important;padding:0!important;border:0!important;background:transparent!important;box-shadow:none!important}
:root body .site-header .nav-toggle>summary{display:inline-flex;align-items:center;justify-content:center;list-style:none;cursor:pointer;min-height:48px;padding:12px 22px;border:0!important;border-radius:999px;background:#174A7E!important;color:#fff!important;font-family:Fredoka,system-ui,"Segoe UI",sans-serif;font-size:18px;font-weight:600;line-height:1}
:root body .site-header .nav-toggle>summary::-webkit-details-marker{display:none}
:root body .site-header .nav-toggle>summary::marker{content:""}
:root body .site-header .nav-toggle>nav{position:absolute;top:100%;right:0;left:auto;z-index:400;margin-top:10px;padding:10px;min-width:min(300px,88vw);max-width:calc(100vw - 24px);box-sizing:border-box;display:block;max-height:calc(100dvh - 110px);overflow-y:auto;background:#fff!important;border:1px solid rgba(23,74,126,.16);border-radius:18px;box-shadow:0 18px 40px rgba(23,74,126,.18)}
:root body .site-header details.nav-toggle:not([open])>nav{display:none!important}

@media (max-width:1099px){
  :root body .site-header .header-inner{padding:10px 14px!important;min-height:68px}
  :root body .site-header .site-nav{display:none!important}
  :root body .site-header .nav-toggle{display:block}
  /* The panel stacks: the eight links in order, submenu links indented under
     their section. No caret is needed because the submenu is always listed. */
  :root body .site-header .nav-toggle .nav-list{display:block}
  :root body .site-header .nav-toggle .nav-item{display:block;width:100%}
  :root body .site-header .nav-toggle .nav-item>a{display:flex;align-items:center;min-height:50px;padding:11px 14px;border-radius:12px;font-size:19px;font-weight:600}
  :root body .site-header .nav-toggle .nav-item>a.nav-pill{justify-content:center;margin-top:8px;padding:13px 20px}
  /* The section row keeps its own disclosure: the label stays a link, the
     caret is a 52px native <details> control, and the submenu opens under the
     row. Closed submenus stay closed and out of the Tab order. */
  :root body .site-header .nav-toggle .nav-item.has-sub{position:relative;display:block}
  :root body .site-header .nav-toggle .nav-item.has-sub>a{padding-right:60px}
  :root body .site-header .nav-toggle .nav-group{position:static;display:block}
  :root body .site-header .nav-toggle .nav-group>summary{position:absolute;top:0;right:0;display:inline-flex!important;width:52px;min-height:50px;border-radius:12px}
  :root body .site-header .nav-toggle .nav-group[open]>summary{background:#D2F9F6}
  :root body .site-header .nav-toggle details.nav-group:not([open])>.nav-sub{display:none!important}
  /* In flow, so the open submenu pushes the rest of the list down instead of
     being clipped by the scrollable panel. */
  :root body .site-header .nav-toggle .nav-sub{position:static;min-width:0;max-width:none;margin:4px 0 8px;padding:8px;border:1px solid rgba(23,74,126,.16);border-radius:14px;box-shadow:none;background:#F7FCFB!important}
  :root body .site-header .nav-toggle .nav-sub a{min-height:48px;padding:11px 12px;border-radius:10px;font-size:16px;font-weight:400;color:#33465E!important;white-space:normal}
  :root body .site-header .nav-toggle .nav-sub li+li{margin-top:2px}
}

@media (max-width:400px){
  :root body .site-header .header-inner{gap:2px 8px;padding:10px 12px!important}
  :root body .site-header .nav-toggle>summary{padding:12px 18px}
}

/* ---------- footer: navy, white rune, four link groups ---------- */
:root body .site-footer{--wm-pad:clamp(16px,4vw,60px);display:block!important;position:relative;margin:0!important;max-width:none!important;padding:0!important;background-color:#174A7E!important;color:#fff!important;font-family:Fredoka,system-ui,"Segoe UI",sans-serif!important;font-size:16px;line-height:1.5}
:root body .site-footer *,:root body .site-footer *::before,:root body .site-footer *::after{box-sizing:border-box}
:root body .site-footer .footer-inner{max-width:1260px;margin:0 auto;padding:0 32px}
:root body .site-footer .footer-top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px 40px;padding:52px 0}
:root body .site-footer .footer-brand{display:inline-flex;align-items:center;gap:10px;flex:0 0 auto;font-family:Fredoka,system-ui,"Segoe UI",sans-serif;font-size:28px;font-weight:600;line-height:1}
:root body .site-footer .footer-tagline{margin:0;max-width:560px;color:#fff!important;font-size:16px;line-height:1.55}
:root body .site-footer .footer-nav{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:40px 32px;padding:50px 0;border-top:1px solid rgba(255,255,255,.28);border-bottom:1px solid rgba(255,255,255,.28)}
:root body .site-footer .footer-col{min-width:0}
:root body .site-footer .footer-col h3{margin:0 0 10px;font-family:Fredoka,system-ui,"Segoe UI",sans-serif!important;font-size:18px!important;font-weight:600!important;line-height:1.3;color:#fff!important}
:root body .site-footer .footer-col ul{margin:0;padding:0;list-style:none}
:root body .site-footer .footer-col a{display:inline-flex;align-items:center;min-height:44px;font-size:16px;line-height:1.4;color:#fff!important;text-decoration:none}
:root body .site-footer .footer-col a:hover{color:#fff!important;text-decoration:underline}
/* The footer marks the exact link the same way the header does. */
:root body .site-footer .footer-col a[aria-current="page"]{font-weight:600;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:5px}
:root body .site-footer .footer-bottom{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 24px;padding:26px 0 6px;font-size:15px;color:#fff!important}
:root body .site-footer .footer-bottom p,:root body .site-footer .footer-copy{margin:0;font-family:Fredoka,system-ui,"Segoe UI",sans-serif!important;font-size:15px!important;line-height:1.5!important;color:#fff!important}
/* Copyright stays visible even where a page stylesheet shrinks or repositions footer text. */
:root body .site-footer .footer-copy{max-width:none!important;width:auto;opacity:1!important;visibility:visible!important;position:static!important;transform:none!important;white-space:normal;flex:0 1 auto}
:root body .site-footer .footer-contact a{display:inline-flex;align-items:center;min-height:44px;font-family:Fredoka,system-ui,"Segoe UI",sans-serif!important;font-size:15px!important;line-height:1.5!important;color:#fff!important;text-decoration:none}
:root body .site-footer .footer-contact a:hover{text-decoration:underline}
:root body .site-footer .footer-note{margin:0;padding:10px 0 48px;text-align:left;font-size:15px;color:#fff!important}
:root body .site-footer a:focus-visible{outline:2px solid #fff;outline-offset:3px;border-radius:4px}

@media (max-width:760px){
  :root body .site-footer .footer-inner{padding:0 20px}
  :root body .site-footer .footer-top{flex-direction:column;align-items:flex-start;gap:18px;padding:40px 0}
  :root body .site-footer .footer-tagline{text-align:left;max-width:none}
  :root body .site-footer .footer-nav{grid-template-columns:repeat(2,minmax(0,1fr));gap:34px 24px;padding:40px 0}
  :root body .site-footer .footer-bottom{flex-direction:column;align-items:flex-start;gap:6px;padding:22px 0 6px}
  :root body .site-footer .footer-note{padding-bottom:40px}
}
@media (max-width:420px){
  :root body .site-footer .footer-nav{grid-template-columns:minmax(0,1fr);gap:28px}
}

/* Touch targets stay >=44px and nothing overflows at 360px: the brand shrinks
   with the clamp above, the menu button keeps its 48px pill, and the long
   footer lines wrap instead of pushing the page sideways. */

/* Reuse the three golden rays; catalog pages already contain their own SVG. */
:root body :is(.site-header,.site-footer) .wordmark:not(:has(.pe-brand-rays)){position:relative;padding-right:1em}
:root body :is(.site-header,.site-footer) .wordmark:not(:has(.pe-brand-rays))::after{content:"";position:absolute;right:-.05em;top:-.18em;width:1em;height:1em;background:url(brand-rays.svg) center/contain no-repeat;pointer-events:none}
