:root{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;color:#293348;background:#fff8eb;font-synthesis:none;-webkit-tap-highlight-color:transparent}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;min-height:100vh;overflow-x:hidden}
button,a{font:inherit}
button{cursor:pointer}
button:disabled{cursor:default}
a{color:inherit}
button:focus-visible,a:focus-visible,summary:focus-visible{outline:4px solid #366fe5;outline-offset:4px}
[hidden]{display:none!important}
.background-decor{position:fixed;z-index:-1;pointer-events:none;border-radius:50%;filter:blur(1px)}
.decor-one{width:420px;height:420px;background:#ffe4ca;top:-210px;right:-130px;opacity:.55}
.decor-two{width:340px;height:340px;background:#e5eaff;bottom:-190px;left:-140px;opacity:.65}
.shell{width:min(1150px,calc(100% - 48px));margin:0 auto}
.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:27px 0 12px}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;font-weight:850;font-size:21px;letter-spacing:.02em}
.brand-mark{display:grid;place-items:center;width:42px;height:42px;border-radius:15px;background:#ff9e70;color:#fff;font-size:30px;line-height:1;box-shadow:0 5px 0 #e98458}
.sound-toggle{display:flex;align-items:center;gap:8px;border:2px solid #e8dfd2;background:#fffdf8;border-radius:999px;padding:11px 17px;font-weight:700;color:#485167;box-shadow:0 3px 0 #ece1d2}
.sound-toggle[aria-pressed="false"]{opacity:.65}
.screen{min-height:calc(100vh - 168px)}
.home-screen{padding:38px 0 18px}
.intro{text-align:center;margin:0 auto 37px;max-width:680px}
.eyebrow{margin:0 0 9px;color:#d36c48;font-weight:850;letter-spacing:.12em;font-size:13px}
h1,h2,h3,p{margin-top:0}
h1{font-size:clamp(37px,5vw,64px);letter-spacing:-.055em;line-height:1.12;margin-bottom:14px;font-weight:900}
.sparkle{display:inline-block;color:#f7b94b;margin-left:7px;font-size:.65em;vertical-align:top;animation:spin-in 8s linear infinite}
.intro-copy{font-size:17px;color:#697385;line-height:1.65;margin:0}
.game-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.game-card{min-width:0;min-height:398px;border:2px solid rgba(255,255,255,.65);border-radius:31px;padding:23px 24px 24px;text-align:left;color:#283248;display:flex;flex-direction:column;position:relative;overflow:hidden;box-shadow:0 14px 30px rgba(62,52,51,.07),0 5px 0 rgba(61,49,55,.1);transition:transform .2s ease,box-shadow .2s ease}
.game-card:hover{transform:translateY(-5px);box-shadow:0 18px 34px rgba(62,52,51,.1),0 7px 0 rgba(61,49,55,.1)}
.game-card:active{transform:translateY(2px)}
.learn-card{background:#ffddc8}.match-card{background:#dcf2e9}.tap-card{background:#e4e4ff}
.card-top{display:flex;align-items:center;justify-content:space-between;gap:10px;position:relative;z-index:1}
.card-number{font-weight:900;opacity:.65;font-size:17px}.card-tag{padding:8px 12px;border-radius:999px;background:rgba(255,255,255,.68);font-size:12px;font-weight:850}
.card-art{height:174px;margin:16px 0 14px;display:flex;align-items:center;justify-content:center;position:relative}
.learn-art .art-shape{position:absolute;box-shadow:0 9px 0 rgba(34,34,51,.1)}
.red-dot{width:98px;height:98px;border-radius:50%;background:#f78579;left:25%;top:36px;transform:rotate(-12deg)}
.blue-square{width:84px;height:84px;border-radius:23px;background:#679de9;right:22%;top:55px;transform:rotate(16deg)}
.yellow-star{font-size:112px;line-height:1;color:#f6c54e;left:calc(50% - 45px);top:-11px;text-shadow:0 9px 0 rgba(34,34,51,.1);transform:rotate(-14deg)}
.pair-card{display:grid;place-items:center;position:absolute;width:113px;height:126px;border-radius:22px;background:#fffaf1;font-size:74px;border:3px solid rgba(255,255,255,.7);box-shadow:0 11px 0 #abdbca}
.pair-left{left:18%;top:28px;transform:rotate(-11deg)}.pair-right{right:18%;top:32px;transform:rotate(10deg)}.pair-spark{position:absolute;color:#edbb52;top:4px;right:27%;font-size:56px}
.tap-bubble{position:absolute;display:grid;place-items:center;border-radius:50%;box-shadow:0 10px 0 rgba(43,36,84,.1)}
.tap-bubble-a{width:126px;height:126px;background:#fff8ee;font-size:70px;left:21%;top:30px}.tap-bubble-b{width:77px;height:77px;background:#f4c96f;color:#a66e25;font-size:45px;right:18%;top:7px}.tap-bubble-c{width:67px;height:67px;background:#b3d8f3;font-size:38px;right:19%;bottom:5px}
.card-title{font-size:31px;font-weight:900;letter-spacing:-.04em;margin-top:auto}.card-copy{font-size:14px;color:#596374;margin-top:5px;line-height:1.5}
.card-action{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-top:24px;border-radius:16px;background:#fffefa;padding:14px 17px;font-weight:850;font-size:15px;box-shadow:0 4px 0 rgba(55,49,59,.1)}
.card-action span{font-size:21px;line-height:1}
.home-note{text-align:center;color:#89919d;font-size:13px;margin:27px 0 0}
.play-screen{padding:28px 0 28px;max-width:920px;margin:auto}
.screen-heading{display:flex;align-items:center;gap:20px;margin-bottom:21px}
.screen-heading h2{font-size:clamp(31px,4vw,43px);line-height:1;margin-bottom:0;letter-spacing:-.05em}
.screen-heading .eyebrow{margin-bottom:5px}
.back-button{width:55px;height:55px;flex:none;border:2px solid #e8ddca;background:#fffdf8;color:#485167;border-radius:18px;font-weight:900;font-size:28px;box-shadow:0 4px 0 #e7dbc8}
.pill-tabs{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:22px}
.pill-tabs button,.level-pills button{border:2px solid #ebe5d8;background:#fffef8;color:#697184;border-radius:999px;padding:12px 17px;font-size:15px;font-weight:800;box-shadow:0 3px 0 #ede5d9;transition:transform .15s ease,background .15s ease,color .15s ease}
.pill-tabs button:hover,.level-pills button:hover{transform:translateY(-2px)}
.pill-tabs button.is-active{background:#405fbd;border-color:#405fbd;color:white;box-shadow:0 3px 0 #324c9d}
.game-panel{background:#fffef9;border:2px solid #f0e8d9;min-height:430px;border-radius:31px;padding:28px;box-shadow:0 13px 0 #f2e7d5,0 23px 35px rgba(90,73,51,.07)}
.prompt-wrap{text-align:center}.prompt-kicker{font-weight:850;font-size:12px;color:#d97756;letter-spacing:.1em}
.prompt-wrap h3,.subhead h3{font-size:clamp(25px,4vw,37px);line-height:1.25;margin:7px 0 15px;letter-spacing:-.04em}
.repeat-button,.small-action{border:0;background:#f1f3ff;color:#465eb1;border-radius:999px;padding:11px 17px;font-size:14px;font-weight:850}
.learn-choices{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin:27px 0 8px}
.choice{min-height:195px;border:3px solid #ece9e2;background:#fbf9f2;border-radius:25px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:15px;box-shadow:0 7px 0 #e6e0d5;transition:transform .16s ease,border-color .16s ease}
.choice:hover{transform:translateY(-3px)}.choice:active{transform:translateY(3px);box-shadow:0 3px 0 #e6e0d5}
.choice.is-correct{border-color:#65c5a5;background:#effcf5}.choice.is-try-again{animation:wobble .4s ease}
.choice-visual{display:grid;place-items:center;min-height:96px;font-size:77px;line-height:1}.choice-label{font-size:16px;font-weight:850;color:#5a6272}
.visual-color{width:92px;height:92px;border-radius:50%;box-shadow:inset 0 -9px 0 rgba(0,0,0,.11),0 6px 0 #e5dfd2;border:4px solid white}
.visual-shape{width:96px;height:96px;background:var(--shape-color,#799ee7);clip-path:var(--shape-clip);filter:drop-shadow(0 6px 0 rgba(0,0,0,.12))}
.count-visual{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:0;max-width:120px;font-size:43px;line-height:1.15}
.feedback{min-height:28px;text-align:center;font-size:18px;font-weight:850;color:#2b9c74;margin:17px 0 0}
.feedback.try-again{color:#ce795b}
.subhead{display:flex;align-items:start;justify-content:space-between;gap:15px;margin-bottom:20px}.subhead h3{margin-bottom:0}
.pair-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;max-width:640px;margin:0 auto;perspective:800px}
.pair-tile{height:132px;border:3px solid #e9dfd5;border-radius:21px;background:#ffdfba;display:grid;place-items:center;box-shadow:0 6px 0 #edc397;font-size:61px;transition:transform .25s ease,background .25s ease,border-color .25s ease}
.pair-tile:hover{transform:translateY(-3px)}.pair-tile.is-open,.pair-tile.is-matched{background:#fff7e9;border-color:#f4cfad;transform:rotateY(0)}.pair-tile.is-matched{background:#e8f9ee;border-color:#99ddbb;box-shadow:0 6px 0 #b6e3c9}
.pair-tile:not(.is-open):not(.is-matched){color:#cc885c}.pair-tile:disabled{opacity:1}
.pair-back{font-size:44px;color:#cf8e62}.level-pills{display:flex;justify-content:center;gap:9px;flex-wrap:wrap;margin-top:16px}
.level-pills button{padding:8px 13px;font-size:13px}.level-pills button.is-active{background:#ffdcb7;color:#955c37;border-color:#f4c695;box-shadow:0 3px 0 #e7b27d}
.sort-piece{min-height:135px;display:grid;place-items:center}.sort-piece .visual-shape{width:112px;height:112px}.sort-bins{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:17px;max-width:600px;margin:0 auto}
.sort-bin{height:145px;border:3px dashed #b9c8dc;background:#f2f6ff;border-radius:24px;font-size:23px;font-weight:850;color:#4d6491;box-shadow:0 7px 0 #e5ebf5;display:flex;align-items:center;justify-content:center;gap:11px;transition:transform .15s ease,background .15s ease}
.sort-bin:hover{transform:translateY(-3px)}.sort-bin.is-correct{background:#e8faeb;border-color:#76c898}.sort-bin.is-try-again{animation:wobble .4s ease}
.tap-panel{text-align:center}.tap-instruction{font-weight:750;color:#8790a1;margin:0 0 18px}
.tap-stage{width:min(440px,100%);min-height:345px;margin:auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;border:3px solid rgba(255,255,255,.9);border-radius:34px;background:#ebf4ff;box-shadow:0 12px 0 #d4e4f4,0 22px 32px rgba(48,82,140,.1);color:#293348;transition:transform .15s ease,background .2s ease}
.tap-stage:hover{transform:translateY(-3px)}.tap-stage:active{transform:translateY(5px);box-shadow:0 5px 0 #d4e4f4}
.tap-symbol{font-size:clamp(105px,19vw,145px);line-height:1.2;min-height:170px;display:grid;place-items:center}.tap-symbol .choice-visual{font-size:clamp(105px,19vw,145px);min-height:170px}.tap-symbol .visual-shape{width:130px;height:130px}.tap-symbol .visual-color{width:135px;height:135px}.tap-symbol .count-visual{font-size:clamp(54px,11vw,78px);max-width:260px}
.tap-name{font-size:33px;font-weight:900}.tap-hint{font-size:14px;font-weight:750;color:#667285}.tap-stage.is-pop .tap-symbol{animation:pop .38s ease}
.footer{display:flex;justify-content:space-between;align-items:flex-start;gap:15px;border-top:1px solid #e9e1d6;margin-top:30px;padding:20px 0 29px;color:#8a8f9a;font-size:12px}
.footer details{max-width:440px;text-align:right}.footer summary{cursor:pointer;font-weight:700}.footer details p{text-align:left;line-height:1.65;background:#fffdf8;padding:14px;border-radius:12px;color:#697385;margin:12px 0 0}.footer a{color:#435da5}
#confetti-layer{pointer-events:none;position:fixed;inset:0;overflow:hidden;z-index:20}.confetti{position:absolute;width:10px;height:16px;border-radius:3px;animation:confetti-fall .85s ease-out forwards}
@keyframes confetti-fall{0%{transform:translate(0,0) rotate(0);opacity:1}100%{transform:translate(var(--dx),var(--dy)) rotate(var(--rot));opacity:0}}
@keyframes pop{0%{transform:scale(.75)}55%{transform:scale(1.15)}100%{transform:scale(1)}}
@keyframes wobble{0%,100%{transform:translateX(0)}25%{transform:translateX(-8px)}75%{transform:translateX(8px)}}
@keyframes spin-in{to{transform:rotate(360deg)}}
@media(max-width:850px){.game-grid{grid-template-columns:1fr;max-width:580px;margin:auto}.game-card{min-height:245px;padding:20px 23px}.card-art{height:116px;position:absolute;right:8px;top:42px;width:43%;margin:0;opacity:.82}.red-dot{width:70px;height:70px}.blue-square{width:62px;height:62px}.yellow-star{font-size:78px;left:calc(50% - 32px)}.pair-card{width:75px;height:85px;font-size:48px}.pair-left{left:9%}.pair-right{right:12%}.tap-bubble-a{width:83px;height:83px;font-size:50px;left:10%}.tap-bubble-b{width:56px;height:56px;font-size:32px;right:12%}.tap-bubble-c{width:49px;height:49px;font-size:26px;right:10%}.card-title,.card-copy,.card-action{position:relative;z-index:1;max-width:55%}.card-title{margin-top:46px}.card-action{margin-top:19px;max-width:100%;width:100%}}
@media(max-width:600px){.shell{width:min(100% - 28px,470px)}.topbar{padding:17px 0 8px}.brand{font-size:17px}.brand-mark{width:36px;height:36px;border-radius:12px;font-size:26px}.sound-toggle{padding:9px 12px;font-size:12px}.sound-label{display:none}.home-screen{padding:30px 0 8px}.intro{margin-bottom:24px}.intro-copy{font-size:14px;max-width:310px;margin:auto}.game-grid{gap:16px}.game-card{min-height:229px;border-radius:25px}.card-title{font-size:26px;margin-top:36px}.card-copy{font-size:12px}.card-action{padding:12px 14px;margin-top:15px}.home-note{line-height:1.5}.play-screen{padding:18px 0}.screen-heading{gap:13px}.back-button{width:47px;height:47px;border-radius:15px;font-size:24px}.eyebrow{font-size:11px}.pill-tabs{gap:7px;margin-bottom:16px}.pill-tabs button{padding:10px 12px;font-size:13px}.game-panel{padding:22px 15px;min-height:415px;border-radius:25px}.prompt-wrap h3,.subhead h3{font-size:26px}.learn-choices{gap:8px;margin-top:23px}.choice{min-height:148px;border-radius:19px;padding:7px;gap:4px}.choice-visual{min-height:81px;font-size:58px}.choice-label{font-size:13px}.visual-color{width:65px;height:65px}.visual-shape{width:69px;height:69px}.count-visual{font-size:30px;max-width:74px}.feedback{font-size:16px}.subhead{align-items:center}.small-action{padding:8px 10px;font-size:11px;white-space:nowrap}.pair-grid{gap:8px}.pair-tile{height:93px;border-radius:15px;font-size:48px}.pair-back{font-size:31px}.sort-piece{min-height:130px}.sort-bins{gap:9px}.sort-bin{height:115px;border-radius:18px;font-size:18px;gap:5px}.tap-stage{min-height:330px}.footer{flex-direction:column;align-items:center;text-align:center;gap:8px}.footer details{text-align:center}}
@media(max-width:360px){.pill-tabs button{font-size:12px;padding:8px 10px}.choice{min-height:135px}.pair-tile{height:80px}.card-art{opacity:.62}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}
