:root{color-scheme:light;--ivory:#fff9ee;--ink:#4a2117;--brown:#6b3423;--blue:#005fc4;--pink:#f875a7;--line:#eadfce;font-family:'Nunito','Trebuchet MS',system-ui,sans-serif;color:var(--ink);background:#cceff2;font-synthesis:none}*{box-sizing:border-box}body{margin:0;min-height:100vh}button,input,select{font:inherit;color:inherit}button,a,select,input{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--blue);outline-offset:4px}button{border:0;background:none;min-height:48px}button:hover{filter:brightness(.96)}[hidden]{display:none!important}.skip{position:fixed;top:-100px;background:white;z-index:20;padding:16px}.skip:focus{top:10px}.park{position:fixed;inset:-12px;background:#cceff2 url('../assets/park.webp') center/cover no-repeat;z-index:-2;animation:park-drift 24s ease-in-out infinite alternate}.phone{max-width:460px;margin:30px auto;min-height:calc(100vh - 60px);background:var(--ivory);border:8px solid #fffdf8;border-radius:40px;box-shadow:0 22px 80px #32685135,0 0 0 1px #ffffffb0;overflow:hidden;position:relative;animation:arrive .6s ease-out}header{height:88px;display:flex;align-items:center;justify-content:space-between;padding:12px 22px;border-bottom:1px solid var(--line);background:#fffdf8}.logo{object-fit:contain;max-width:65%;height:auto}.icon-button{width:48px;border:1px solid var(--line);border-radius:50%;font-weight:900;font-size:19px;background:var(--ivory)}main{padding:0 22px}.welcome{position:relative;padding:26px 0 19px;min-height:255px}.welcome-copy{position:relative;z-index:1;max-width:74%}.eyebrow{font-size:10px;letter-spacing:1.5px;font-weight:800;color:#765e4d;margin:0 0 8px}h1{font-size:32px;letter-spacing:-1.3px;line-height:1.1;margin:0 0 16px}h2{font-size:19px;letter-spacing:-.4px;margin:0 0 16px}.bubble{background:#fff;border:1.5px solid #e9dac7;border-radius:20px 20px 4px 20px;padding:13px 15px;font-size:14px;line-height:1.5;box-shadow:0 4px 0 #efdfca66;margin:0}.welcome .bubble{max-width:238px;min-height:92px}.welcome-letsy{position:absolute;width:143px;height:190px;object-fit:contain;right:-23px;bottom:4px;z-index:0;transform-origin:bottom center;animation:hello 1s .3s ease-in-out}.text-button{padding:0;color:var(--blue);font-size:13px;font-weight:800;min-height:48px}.text-button span{margin-left:5px}.explore{border-top:1px solid var(--line);padding-top:22px}.categories{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:24px}.category{background:var(--tile,#eef7ea);border:2px solid transparent;border-radius:18px;min-height:102px;display:flex;align-items:center;flex-direction:column;justify-content:center;gap:8px;padding:9px 3px;font-size:12px;font-weight:800;line-height:1.25;text-align:center;transition:transform .15s,border-color .15s}.category img{width:36px;height:36px;object-fit:contain}.category[aria-pressed=true]{border-color:var(--blue);box-shadow:0 3px 0 #005fc425}.category:active{transform:scale(.96)}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}.section-heading h2{margin:0}.search{display:flex;align-items:center;border:1.5px solid #d9cbbb;border-radius:14px;background:white;margin:7px 0 12px;padding:0 14px;gap:9px}.search span{font-size:28px}.search input{width:100%;min-width:0;height:49px;border:0;background:none;outline-offset:0;font-size:14px}.search input::placeholder{color:#786859}.age-row{display:flex;align-items:center;justify-content:space-between;font-size:13px;font-weight:700;gap:10px}.age-row select{border:1px solid #d9cbbb;background:#fff;border-radius:12px;min-height:48px;padding:0 10px;max-width:58%}.results-count{font-size:12px;color:#715e50;margin:12px 0;min-height:16px}.empty{min-height:168px;text-align:center;border:1.5px dashed #d9cbbb;border-radius:22px;padding:22px 15px;background:#fffdf7}.empty img{width:48px;height:48px;opacity:.85}.empty h3{font-size:17px;margin:10px 0 7px}.empty p{font-size:13px;line-height:1.5;margin:0 auto;max-width:255px;color:#735c4a}.games{display:grid;gap:14px}.game-card{background:white;border:1px solid var(--line);border-radius:20px;overflow:hidden}.game-card>img{width:100%;aspect-ratio:16/9;object-fit:cover}.game-content{padding:16px}.game-content h3{margin:0 0 8px}.game-content p{font-size:14px;line-height:1.5}.primary{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;background:var(--blue);color:white;border-radius:14px;padding:12px 22px;min-height:48px;font-weight:800}.install-banner{position:relative;display:flex;align-items:flex-start;gap:12px;margin-top:24px;padding:18px 27px 10px 14px;border-radius:18px;background:#e8f5f4;border:1px solid #cfe5df}.install-banner>img{border-radius:12px}.install-banner strong{font-size:13px}.install-banner p{font-size:12px;line-height:1.5;margin:6px 0 0;color:#526057}.dismiss{position:absolute;top:3px;right:3px;font-size:22px;width:32px;min-height:44px}.install-banner .dismiss{top:0;right:0;width:27px}footer{position:relative;text-align:center;padding:20px 20px 13px}footer p{font-size:11px;color:#796551;margin:0}footer .text-button{font-size:11px}.footer-paw{display:block;font-size:18px;opacity:.55}.park-friend{position:fixed;width:clamp(180px,23vw,340px);bottom:8vh;display:flex;flex-direction:column;align-items:center;gap:25px;z-index:-1}.park-friend.left{right:calc(50% + 260px)}.park-friend.right{left:calc(50% + 270px)}.park-friend img{width:100%;max-height:42vh;object-fit:contain;transform-origin:bottom center;animation:breathe 6s ease-in-out infinite}.park-friend.right img{width:80%;animation-delay:2s}.park-friend .bubble{max-width:235px;font-size:17px;transform:rotate(-3deg);padding:18px 22px}.park-friend.right .bubble{transform:rotate(4deg)}dialog{position:fixed;max-width:390px;width:calc(100% - 32px);border:1px solid var(--line);border-radius:24px;background:var(--ivory);color:var(--ink);padding:32px 24px;box-shadow:0 20px 80px #0003}dialog::backdrop{background:#233f4666}dialog p,dialog li{font-size:15px;line-height:1.65}dialog .primary{width:100%;margin-top:10px}dialog h2{padding-right:15px}.still *,.still *::before,.still *::after{animation:none!important;scroll-behavior:auto!important;transition:none!important}@keyframes arrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes hello{0%,100%{transform:rotate(0)}30%{transform:rotate(-5deg)}70%{transform:rotate(3deg)}}@keyframes breathe{50%{transform:translateY(-4px) rotate(1deg)}}@keyframes park-drift{to{transform:translateX(8px) scale(1.01)}}@media(max-width:960px){.park-friend{display:none}.phone{margin:16px auto;min-height:calc(100vh - 32px)}}@media(max-width:520px){:root{background:var(--ivory)}.park{display:none}.phone{border:0;border-radius:0;margin:0;max-width:none;min-height:100dvh;box-shadow:none}header{padding-top:max(12px,env(safe-area-inset-top));height:82px}footer{padding-bottom:max(16px,env(safe-area-inset-bottom))}.welcome-letsy{right:-15px}main{padding:0 20px}}@media(max-width:360px){h1{font-size:28px}.welcome-letsy{width:119px;right:-18px}.welcome .bubble{font-size:13px}.category{font-size:11px}.categories{gap:7px}main{padding:0 15px}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

.park{animation:none}.clouds{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:-1}.clouds img{position:absolute;width:380px;height:auto;top:12vh;left:-390px;animation:clouds-pass 85s linear infinite;opacity:.88}@keyframes clouds-pass{to{transform:translateX(calc(100vw + 780px))}}.install-banner{padding-right:48px}.dismiss,.install-banner .dismiss{width:48px;min-height:48px}.empty img{width:72px;height:78px;object-fit:contain;opacity:1}@media(max-width:520px){.clouds{display:none}}

/* Compact controls and fixed install invitation. */
.music-player{width:144px;flex-shrink:0;text-align:center}.music-player>span{display:block;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.music-buttons{display:flex}.music-buttons button{width:48px;height:48px;color:var(--blue);font-size:17px}.music-buttons button:nth-child(2){background:#e3f5f9;border-radius:50%}header{gap:10px}.logo{max-width:calc(100% - 154px)}.welcome{min-height:240px}
.filters-row{display:flex;gap:8px;margin-top:9px;align-items:center}.filters-row .search{flex:1;min-width:0;margin:0;padding:0 9px}.filters-row select{width:145px;min-width:0;max-width:48%;height:52px;border:1.5px solid #d9cbbb;border-radius:14px;background:#fff;padding:0 5px;font-size:12px}.filters-row input{font-size:13px}
.install-banner{position:fixed;z-index:10;bottom:0;left:50%;transform:translateX(-50%);width:min(460px,100%);margin:0;border:2px solid #8dcfce;border-bottom:0;border-radius:22px 22px 0 0;background:#e2f8f5;box-shadow:0 -6px 28px #355e4826;padding-bottom:max(8px,env(safe-area-inset-bottom))}.install-banner strong{font-size:15px}.install-banner #install{font-size:14px}.phone{animation:none}main{scroll-margin-bottom:170px}footer nav{display:flex;justify-content:center;flex-wrap:wrap;gap:0 14px}footer a{display:inline-flex;align-items:center;min-height:48px;color:var(--blue);font-size:12px;font-weight:700;text-underline-offset:3px}footer p{line-height:1.6}.motion-setting{display:flex;justify-content:center;align-items:center;gap:8px;min-height:48px;font-size:12px;margin-bottom:12px}.motion-setting input{width:20px;height:20px}.article-page{padding:28px 24px 36px}.article-page h1{font-size:28px;margin:12px 0 24px}.article-page h2{margin:28px 0 12px}.article-page p{font-size:15px;line-height:1.75}.article-page a{color:var(--blue);overflow-wrap:anywhere}.back-link{display:inline-flex;align-items:center;min-height:48px;font-size:14px}.article-page .contact-email{font-size:17px;font-weight:700}

/* Invitation stays within the phone's inner edges on desktop. */
.install-banner{transform:translateY(20px);opacity:0;transition:opacity .3s ease,transform .3s ease;border:2px solid #8dcfce;border-radius:20px;pointer-events:none}
.install-banner.is-visible{opacity:1;transform:translateY(0);pointer-events:auto}
footer nav{display:grid;grid-template-columns:1fr 1fr 1.35fr;gap:8px;margin:4px 0 20px}
footer nav a{display:flex;flex-direction:column;justify-content:center;gap:7px;padding:12px 5px;min-height:86px;border:1px solid #e1dbc9;border-radius:16px;background:#fffdf8;color:var(--brown);text-decoration:none;font-size:11px;line-height:1.35;box-shadow:0 3px 0 #eadfce66;transition:background .15s,transform .15s}
footer nav a:nth-child(2){background:#edf7f6}footer nav a:nth-child(3){background:#fff0e9}footer nav a img{width:25px;height:25px;object-fit:contain}footer nav a:hover{background:#e3f5f9;transform:translateY(-2px)}footer nav a:active{transform:translateY(1px)}
@media(max-width:520px){.install-banner{border-bottom:0;border-radius:22px 22px 0 0}}
/* Desktop phone is a stationary viewport; only its contents scroll. */
@media(min-width:521px){
  body{height:100dvh;overflow:hidden}
  .phone{position:fixed;top:24px;bottom:24px;left:calc(50% - 230px);width:460px;max-width:460px;height:calc(100dvh - 48px);min-height:0;margin:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior-y:contain;scrollbar-width:thin;scrollbar-color:#d6cbb9 #fff9ee;scroll-padding-bottom:180px}
}

/* Same scene across documents; transition only the phone's content. */
@view-transition{navigation:auto}
.park{view-transition-name:park}
.clouds{view-transition-name:clouds}
.park-friend.left{view-transition-name:letsy}
.park-friend.right{view-transition-name:theo}
.phone{view-transition-name:phone}
.phone main{view-transition-name:page-content}
::view-transition-group(*){animation-duration:240ms;animation-timing-function:ease-in-out}
::view-transition-old(park),::view-transition-old(clouds),::view-transition-old(letsy),::view-transition-old(theo){animation:none;opacity:0}
::view-transition-new(park),::view-transition-new(clouds),::view-transition-new(letsy),::view-transition-new(theo){animation:none}
::view-transition-old(page-content){animation:page-out 180ms ease-out both}
::view-transition-new(page-content){animation:page-in 240ms ease-out both}
@keyframes page-out{to{opacity:0;transform:translateY(-5px)}}
@keyframes page-in{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
footer nav a[aria-current=page]{border-color:var(--blue);background:#e3f5f9;box-shadow:0 3px 0 #005fc425}
@media(prefers-reduced-motion:reduce){@view-transition{navigation:none}}

/* Always-reachable return control on institutional pages. */
.article-header{position:sticky;top:0;z-index:5;background:#fffdf8;box-shadow:0 3px 12px #6b34230d}
.article-header .back-button{display:flex;align-items:center;justify-content:center;width:52px;height:52px;flex-shrink:0;border:1.5px solid #b9dfe3;border-radius:17px;background:#e3f5f9;box-shadow:0 3px 0 #c5e6e8;transition:background .15s,transform .15s}
.article-header .back-button img{width:29px;height:29px;object-fit:contain}
.article-header .back-button:hover{background:#cceff2;transform:translateY(-1px)}
.article-header .back-button:active{transform:translateY(2px);box-shadow:none}
.article-page{scroll-margin-top:100px}
/* Shared frame, compact catalog, and conversations. */
@media(min-width:521px){.phone{overflow:hidden;padding:0}.phone-scroll{height:100%;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:#d6cbb9 transparent;border-radius:30px;overscroll-behavior:contain}}
.phone-scroll>header{position:sticky;top:0;z-index:6;background:#fffdf8;box-shadow:0 3px 12px #6b34230d}
.phone-scroll>header{gap:6px;padding-left:16px;padding-right:16px}
.phone-scroll>header>.logo{max-width:calc(100% - 190px)}
.share-button{width:40px;min-height:44px;flex-shrink:0;color:var(--blue);background:#e3f5f9;border-radius:13px;display:inline-flex;align-items:center;justify-content:center;padding:8px}
.share-button svg{width:23px;height:23px}
footer nav{grid-template-columns:repeat(3,minmax(0,1fr))}footer nav a{min-width:0}footer nav a span{overflow-wrap:normal;text-wrap:balance}
.game-cover{position:relative}.game-cover>img{display:block;width:100%;height:150px;object-fit:cover;object-position:center 60%}
.card-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;padding-left:4px;background:#005fc4ed;color:#fff;text-decoration:none;font-size:26px;border:3px solid white;box-shadow:0 5px 15px #193a4455}
.card-play:hover{background:#087cf0}.age-tag{position:absolute;bottom:9px;right:10px;background:#fff9ee;color:var(--brown);border-radius:10px;padding:5px 9px;font-size:13px;font-weight:900;box-shadow:0 2px 7px #0002}
.card-unavailable{position:absolute;bottom:10px;left:10px;background:white;padding:5px 10px;border-radius:9px;font-size:12px}
.game-content{padding:11px 14px}.game-content h3{font-size:16px;margin:0 0 4px}.game-content p{font-size:12px;line-height:1.35;margin:0}
.park-friend{gap:8px}.park-friend .bubble{align-self:flex-start;transform:rotate(-2deg);transform-origin:bottom right;transition:opacity .23s ease,transform .23s ease;margin-left:-15px;max-width:235px}
.park-friend.right .bubble{align-self:flex-end;transform-origin:bottom left;border-radius:20px 20px 20px 4px;transform:rotate(2deg);margin-right:-12px}
.park-friend .bubble.bubble-out{opacity:0;transform:scale(.82) rotate(-5deg)}.park-friend.right .bubble.bubble-out{transform:scale(.82) rotate(5deg)}
.share-dialog input{width:100%;font:inherit;padding:12px;border:1px solid #ccbca9;border-radius:10px}.share-dialog .share-status{font-size:13px}
html,body{touch-action:pan-x pan-y}
.picker-trigger{border:1.5px solid #d9cbbb;border-radius:12px;background:#fff;min-height:48px;padding:8px 10px;font-size:12px;font-weight:700;text-align:center;color:var(--ink)}
.filters-row>.picker-trigger{width:145px;max-width:48%;flex-shrink:0}.picker-dialog{max-height:calc(100dvh - 32px);overflow:auto}.picker-dialog h2{padding-right:25px}.picker-options{display:grid;gap:8px}.picker-options button{border:2px solid #e4dacb;border-radius:14px;background:#fffdf8;text-align:left;padding:12px 16px;font-weight:700;font-size:15px;min-height:48px}.picker-options button[aria-pressed=true]{border-color:var(--blue);background:#e3f5f9;color:var(--blue)}
/* Keyframes work without starting-style or discrete transition support. */
dialog[open]::backdrop{animation:modal-enter .28s ease both}
dialog[open].modal-leaving::backdrop{animation:modal-exit .28s ease both}
dialog[open].modal-leaving{pointer-events:none}
dialog{overscroll-behavior:contain}
@keyframes modal-enter{from{opacity:0}to{opacity:1}}
@keyframes modal-exit{from{opacity:1}to{opacity:0}}
html.modal-open{overflow:hidden;overscroll-behavior:none}
html.modal-open .phone,html.modal-open .phone-scroll{overflow:hidden!important;overscroll-behavior:none}
/* Mobile navigation fallback, also supported without cross-document view transitions. */
@media(max-width:960px){
 @view-transition{navigation:none}
 .phone{animation:mobile-page-in .24s ease both}
 html.page-leaving .phone{animation:mobile-page-out .18s ease both;pointer-events:none}
}
@keyframes mobile-page-in{from{opacity:0}to{opacity:1}}
@keyframes mobile-page-out{from{opacity:1}to{opacity:0}}
@media(prefers-reduced-motion:reduce){dialog,dialog::backdrop,.phone{animation:none!important;transition:none!important}}

/* Let the hub header stick to the viewport during mobile document scrolling. */
@media(max-width:520px){.hub-phone{overflow:visible}.hub-phone>.phone-scroll{overflow:visible}.hub-phone>.phone-scroll>header{position:sticky;top:0;z-index:6}}

/* Letsy and Théo brand: reserve room for the portrait logo and music tools. */
@media(max-width:360px){.hub-phone .welcome-letsy{right:0}}
.phone-scroll>header>.logo{width:180px;height:86px;max-width:none;object-fit:contain;flex-shrink:0}
.hub-phone .phone-scroll>header{height:auto;min-height:108px;flex-wrap:wrap;justify-content:space-between;gap:8px}
.article-header:not(.game-header){height:108px}
.article-header:not(.game-header)>a:first-child{display:flex;align-items:center;min-width:0}
.article-header:not(.game-header)>a:first-child img{width:180px;height:86px;max-width:100%;object-fit:contain}
@media(max-width:400px){.hub-phone .phone-scroll>header{display:grid;grid-template-columns:minmax(0,1fr) 40px;padding-top:max(10px,env(safe-area-inset-top));padding-bottom:10px}.hub-phone .phone-scroll>header>.logo{grid-column:1;grid-row:1;justify-self:start}.hub-phone header>.share-button{grid-column:2;grid-row:1}.hub-phone header>.music-player{grid-column:1 / -1;grid-row:2;width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px}.hub-phone .music-player>span{font-size:11px;text-align:left;flex:1}.hub-phone .music-buttons{flex-shrink:0}}

footer nav a[href$="termos/"] span{white-space:nowrap;text-wrap:nowrap}

.music-player{width:48px;flex:0 0 48px}.music-player .music-buttons button{border-radius:14px;background:#e3f5f9}.phone-scroll>header>.logo{max-width:calc(100% - 110px)}

.music-player #track-name{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

.hub-header-actions{display:flex;align-items:center;gap:4px;margin-left:auto;flex-shrink:0}.hub-header-actions .music-player{margin:0}

/* Compact on scroll, matching the games' 62px header. */
.hub-phone .phone-scroll>header{--hub-safe-top:0px;display:flex;flex-wrap:nowrap;height:calc(108px + var(--hub-safe-top));min-height:calc(108px + var(--hub-safe-top));padding:calc(10px + var(--hub-safe-top)) 16px 10px;transition:height .22s ease,min-height .22s ease,padding .22s ease}
.hub-phone .phone-scroll>header>.logo{min-width:0;width:180px;height:86px;max-width:calc(100% - 108px);transition:width .22s ease,height .22s ease}
.hub-phone .phone-scroll>header.is-compact{height:calc(62px + var(--hub-safe-top));min-height:calc(62px + var(--hub-safe-top));padding-top:calc(7px + var(--hub-safe-top));padding-bottom:7px}
.hub-phone .phone-scroll>header.is-compact>.logo{width:96px;height:46px}
@media(max-width:520px){.hub-phone .phone-scroll>header{--hub-safe-top:env(safe-area-inset-top,0px)}}
@media(prefers-reduced-motion:reduce){.hub-phone .phone-scroll>header,.hub-phone .phone-scroll>header>.logo{transition:none}}

/* Avoid accidental text selection during repeated taps, while keeping fields editable. */
body,body *{-webkit-user-select:none;user-select:none}
input,textarea,[contenteditable]:not([contenteditable="false"]),[contenteditable]:not([contenteditable="false"]) *{-webkit-user-select:text;user-select:text}
