:root{
  --ocean:#59c9f4;
  --ocean-deep:#188ed8;
  --ocean-dark:#0d5594;
  --sky:#bfeeff;
  --white:#ffffff;
  --ink:#103f79;
  --muted:#71869b;
  --card-line:#d1eaf8;
  --green:#45be82;
  --yellow:#ffd36b;
  --purple:#8b79e9;
  --pink:#ef79a4;
  --sand:#fff6d8;
}
*{box-sizing:border-box}
body{
  margin:0;background:#eaf7ff;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--ink)
}
button{font:inherit;cursor:pointer}
.app{width:min(100%,590px);min-height:100vh;margin:0 auto;background:#effaff;position:relative;overflow:hidden}
.hidden{display:none!important}

/* ===== Unified Ocean Header ===== */
.oceanHeader{
  height:188px;
  position:relative;
  overflow:hidden;
  background:
    radial-gradient(circle at 10% 15%,rgba(255,255,255,.88) 0 8%,transparent 9%),
    radial-gradient(circle at 88% 16%,rgba(255,255,255,.86) 0 7%,transparent 8%),
    linear-gradient(#69d2f6 0%,#48b9ed 56%,#2aa5e6 57%,#188fd5 100%);
}
.oceanHeader:after{
  content:"";position:absolute;left:-10%;right:-10%;bottom:-12px;height:54px;
  background:radial-gradient(ellipse at center,#8de8ff 0 44%,transparent 46%) 0 0/110px 55px repeat-x;
  opacity:.65
}
.returnBtn{
  position:absolute;left:14px;top:14px;z-index:4;border:0;background:rgba(255,255,255,.92);
  color:#1a70b7;border-radius:999px;padding:8px 11px;font-size:11px;font-weight:900
}
.progressPill{
  position:absolute;right:14px;top:14px;z-index:4;
  background:rgba(255,255,255,.95);border:2px solid rgba(255,255,255,.85);
  color:#184e8e;border-radius:999px;padding:8px 12px;font-size:11px;font-weight:950;
  box-shadow:0 4px 10px rgba(16,87,145,.12)
}
.progressPill img{width:25px;height:25px;object-fit:contain;display:block}
.woodSign{
  position:absolute;left:50%;top:35px;transform:translateX(-50%);
  min-width:250px;max-width:74%;padding:16px 25px;
  background:linear-gradient(#f8c978,#e5a951);
  border:4px solid #c88733;border-radius:18px;
  color:#5a2608;text-align:center;font-size:28px;font-weight:1000;
  box-shadow:0 5px 0 #a76b24,0 9px 16px rgba(90,61,18,.18);
  z-index:3
}
.woodSign:before,.woodSign:after{
  content:"";position:absolute;top:-39px;width:8px;height:42px;
  background:repeating-linear-gradient(90deg,#9b682d 0 3px,#c7924d 3px 6px);
  border-radius:5px
}
.woodSign:before{left:34px}.woodSign:after{right:34px}
/* 木牌图片版标题（Story / Sight Words / Games，show() 按 WOOD_SIGN_IMGS 注入） */
.woodSign.imgSign{min-width:0;max-width:86%;padding:0;background:transparent;border:0;border-radius:0;box-shadow:none}
.woodSign.imgSign:before,.woodSign.imgSign:after{display:none}
.woodSign.imgSign img{display:block;width:auto;height:86px;filter:drop-shadow(0 6px 12px rgba(90,61,18,.28))}
body.oceanPageMode:not(.homeMode) .woodSign.imgSign{top:36px}
body.oceanPageMode:not(.homeMode) .woodSign.imgSign img{height:80px}
body.homeMode .woodSign.imgSign{display:block!important;top:96px}
body.homeMode .woodSign.imgSign img{height:96px}
.whale{
  position:absolute;right:20px;bottom:15px;z-index:3;font-size:64px;
  filter:drop-shadow(0 5px 4px rgba(11,79,130,.12))
}
.seaDecor{
  position:absolute;left:9px;bottom:4px;z-index:2;font-size:36px;opacity:.9
}

/* ===== shared content ===== */
.content{padding:14px 14px 88px}
.sectionTitle{font-size:17px;font-weight:1000;color:#124f8f;margin:13px 3px 9px}
.card{
  background:#fff;border:1.5px solid var(--card-line);border-radius:22px;
  box-shadow:0 6px 16px rgba(33,110,163,.07)
}
.bigChoice{
  padding:16px;display:flex;align-items:center;gap:13px;text-align:left;margin-bottom:10px
}
.bigIcon{
  width:68px;height:68px;border-radius:20px;display:grid;place-items:center;
  font-size:34px;flex:0 0 auto
}
.schoolIcon{background:linear-gradient(145deg,#b8e5ff,#6dbcf0)}
.originalIcon{background:linear-gradient(145deg,#ddd5ff,#a791f0)}
.bigChoice strong{display:block;font-size:19px;color:#135293;margin-bottom:3px}
.bigChoice span{display:block;color:#6d8297;font-size:11px;line-height:1.45}
.chev{margin-left:auto;color:#4a9bdd;font-size:27px;font-weight:900}
.smallBanner{
  background:linear-gradient(145deg,#fffbed,#fff4cc);border:1.5px solid #f4dfa5;
  border-radius:19px;padding:13px;margin-top:10px;display:flex;gap:10px;align-items:center
}
.smallBanner strong{font-size:13px;color:#7d5e13}.smallBanner span{display:block;font-size:10px;color:#877a58;margin-top:2px}

/* ===== Root Home ===== */
.todayCard{
  padding:14px;display:flex;align-items:center;gap:11px
}
.todayIcon{
  width:56px;height:56px;border-radius:17px;background:#e7f7ff;display:grid;place-items:center;font-size:29px
}
.todayInfo{flex:1}.todayInfo strong{display:block;font-size:14px;color:#135293}.todayInfo span{font-size:10px;color:#75899c}
.playBtn{
  border:0;background:linear-gradient(#42a8f8,#218de8);color:#fff;border-radius:13px;
  padding:9px 13px;font-weight:900;font-size:11px
}

/* ===== Textbook versions ===== */
.list{display:grid;gap:10px}
.listCard{
  padding:13px;display:flex;align-items:center;gap:12px;text-align:left
}
.versionIcon,.bookIcon{
  width:58px;height:58px;border-radius:17px;background:linear-gradient(145deg,#cdeeff,#7fc9f5);
  display:grid;place-items:center;color:#135293;font-weight:1000;font-size:16px;flex:0 0 auto
}
.listCard strong{display:block;font-size:15px;color:#135293}
.listCard span{display:block;font-size:10px;color:#73879a;margin-top:3px}

/* ===== book/unit ===== */
.unitTabs{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px}
.unitTabs button{
  border:1.5px solid #d6ebf8;background:#fff;border-radius:14px;padding:10px 5px;
  color:#2268a9;font-weight:900
}
.unitTabs button.active{
  background:linear-gradient(#ffe38b,#ffd265);color:#7c5b05;border-color:#f5c84c
}
.module{
  padding:13px;display:flex;align-items:center;gap:11px;margin-bottom:9px
}
.moduleIcon{
  width:54px;height:54px;border-radius:16px;display:grid;place-items:center;color:#fff;font-weight:1000;font-size:22px
}
.words .moduleIcon{background:#67cc79}
.reading .moduleIcon{background:#5fa6e3}
.writing .moduleIcon{background:#ef7972}
.moduleInfo{flex:1}.moduleInfo strong{font-size:15px;color:#14508e}.moduleInfo span{display:block;font-size:10px;color:#71859a;margin-top:3px}
.freeTag{background:#fff3cd;color:#977113;padding:6px 8px;border-radius:999px;font-size:10px;font-weight:900}

/* ===== Original worlds ===== */
.worldCard{padding:14px;display:flex;align-items:center;gap:12px;margin-bottom:10px;text-align:left}
.worldArt{
  width:72px;height:72px;border-radius:21px;display:grid;place-items:center;font-size:38px;flex:0 0 auto
}
.sightArt{background:linear-gradient(145deg,#8ae1ff,#41afe9)}
.readArt{background:linear-gradient(145deg,#9de1b6,#57bd86)}
.bookArt{background:linear-gradient(145deg,#ffd2a0,#eda75f)}
.phonicsArt{background:linear-gradient(145deg,#c9bbff,#9278e8)}
.worldInfo{flex:1}.worldInfo strong{display:block;font-size:17px;color:#114f90}.worldInfo span{display:block;font-size:10px;color:#72879b;line-height:1.45;margin-top:3px}
.worldProgress{display:inline-block;margin-top:7px;background:#edf8ff;color:#2168a8;font-size:9px;font-weight:900;padding:5px 7px;border-radius:999px}

/* ===== My ===== */
.profileTop{padding:14px;display:flex;align-items:center;gap:12px}
.avatar{width:68px;height:68px;border-radius:50%;background:#dff7ff;display:grid;place-items:center;font-size:38px}
.profileInfo strong{display:block;font-size:20px;color:#124e8f}.profileInfo span{font-size:10px;color:#74889c}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}
.stat{padding:11px 5px;text-align:center}
.stat strong{display:block;font-size:18px;color:#124e8f}.stat span{font-size:9px;color:#73869a}

/* ===== Sight words integrated world ===== */
.storyCard{padding:13px;display:flex;gap:11px;align-items:center}
.storyCover{width:76px;height:90px;border-radius:13px;background:linear-gradient(145deg,#ffe3a7,#ffc66a);display:grid;place-items:center;font-size:34px}
.storyInfo{flex:1}.storyInfo strong{display:block;font-size:15px;color:#124f8f}.storyInfo span{font-size:10px;color:#71859a}
.wordchips{display:flex;gap:5px;flex-wrap:wrap;margin-top:7px}
.wordchips b{background:#edf7ff;color:#2b6ca9;padding:5px 7px;border-radius:8px;font-size:9px}
.libraryItem{padding:10px;display:flex;gap:9px;align-items:center;margin-bottom:8px}
.libCover{width:52px;height:58px;border-radius:10px;background:#ffe0a4;display:grid;place-items:center;font-size:23px}
.libInfo{flex:1}.libInfo strong{font-size:12px;color:#15508e}.libInfo span{display:block;font-size:9px;color:#71869a}
.gameGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.gameCard{padding:11px 6px;text-align:center}
.gameCard div{font-size:31px}.gameCard strong{display:block;font-size:10px;color:#14508e;margin-top:4px}
.collectionGrid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}
.wordTile{background:#bfeaff;color:#0d4d8a;border-radius:9px;padding:8px 3px;text-align:center;font-size:10px;font-weight:800}
.wordTile.off{background:#e7ebf0;color:#7c8795}

/* ===== Real sight-words reader (ocean storybook) ===== */
.readerTop{display:flex;align-items:center;gap:8px;margin:2px 3px 10px}
.readerTop strong{flex:1;font-size:14px;color:#124f8f;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pagePill{background:#fff;border:1.5px solid var(--card-line);color:#2168a8;font-size:10px;font-weight:900;padding:5px 9px;border-radius:999px;white-space:nowrap}

.readerCard{padding:12px;position:relative;overflow:hidden;background:linear-gradient(#ffffff 0%,#f6fbff 100%)}
.readerCard:before{
  content:"";position:absolute;left:0;right:0;top:0;height:18px;
  background:radial-gradient(ellipse at center,#dff3ff 0 46%,transparent 48%) 0 0/58px 30px repeat-x;opacity:.85
}
.pageFrame{
  margin-top:8px;border-radius:16px;overflow:hidden;border:2px solid #cfeaf9;
  background:linear-gradient(#eaf7ff,#dff2ff);
  box-shadow:inset 0 2px 10px rgba(33,110,163,.12);line-height:0
}
.pageFrame img{width:100%;display:block}

/* 正文：沙滩色卷轴 + 海洋蓝目标词块 */
.readingText{
  margin-top:12px;padding:12px 14px;border-radius:16px;position:relative;
  background:linear-gradient(#fffaea,#fff2cf);border:1.5px solid #f4e0a6;
  font-size:16px;line-height:1.75;color:#4b3a12;font-weight:750;
  white-space:pre-line
}
.readingText:after{content:"🫧";position:absolute;right:10px;bottom:5px;font-size:14px;opacity:.5}
.readingText mark{
  background:linear-gradient(#63cdf7,#1f92e3);color:#fff;border-radius:6px;
  padding:1px 6px;font-weight:900;box-shadow:0 2px 5px rgba(31,146,227,.28)
}

/* 页进度条 */
.pageBar{height:6px;border-radius:999px;background:#e1f1fb;margin-top:11px;overflow:hidden}
.pageBar i{display:block;height:100%;width:8%;border-radius:999px;background:linear-gradient(90deg,#7fd9f8,#1f92e3);transition:width .3s}

.readerBar{display:flex;gap:18px;align-items:center;justify-content:center;margin-top:13px}
.triBtn{
  width:38px;height:38px;padding:0;border-radius:50%;
  border:1.5px solid #cde9f8;background:linear-gradient(#fff,#f0faff);color:#3d8ecd;
  font-size:18px;font-weight:900;line-height:1;display:grid;place-items:center;
  box-shadow:0 3px 8px rgba(33,110,163,.10)
}
.triBtn:active{transform:translateY(1px)}
.playTri{
  width:42px;height:42px;padding:0;border:0;border-radius:50%;
  background:radial-gradient(circle at 32% 28%,#93dfff,#3ea9ef 58%,#1f8be0);
  color:#fff;font-size:15px;line-height:1;display:grid;place-items:center;
  box-shadow:0 3px 8px rgba(24,142,216,.22),inset 0 -2px 4px rgba(0,0,0,.08)
}
.playTri:active{transform:scale(.94)}
.playTri.playing{
  background:radial-gradient(circle at 32% 28%,#ffdd93,#ffc04f 58%,#f3aa3c);
  box-shadow:0 3px 8px rgba(240,168,60,.22),inset 0 -2px 4px rgba(0,0,0,.06)
}
.miniBtn{border:1.5px solid #cfe8f8;background:#fff;color:#2168a9;border-radius:999px;padding:5px 10px;font-size:10px;font-weight:900;white-space:nowrap}
.miniBtn.wide{display:block;margin:12px auto 0;padding:7px 15px;font-size:11px}
.miniBtn.on{background:linear-gradient(#ffd977,#ffc94d);border-color:#f2bd3d;color:#7a5606}
.storyCover,.libCover{overflow:hidden;padding:0}
.storyCover img,.libCover img{width:100%;height:100%;object-fit:cover;display:block}
.storyCover{display:block}

/* ===== nav ===== */
.bottomNav{
  position:fixed;left:50%;bottom:0;transform:translateX(-50%);width:min(590px,100%);
  height:68px;background:rgba(255,255,255,.98);border-top:1px solid #d4e8f6;
  display:grid;grid-template-columns:repeat(5,1fr);z-index:50
}
.bottomNav button{
  border:0;background:transparent;color:#8a98ac;font-size:9px;font-weight:850;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px
}
.bottomNav .ico{width:28px;height:28px;display:grid;place-items:center}.bottomNav .ico img{width:100%;height:100%;object-fit:contain;display:block;filter:grayscale(.55) saturate(.75);opacity:.72}.bottomNav button.active{color:#157fdc}.bottomNav button.active .ico img{filter:none;opacity:1;transform:scale(1.08)}
.toast{
  position:fixed;left:50%;bottom:80px;transform:translateX(-50%);background:#23425f;color:#fff;
  padding:9px 13px;border-radius:999px;font-size:10px;font-weight:850;z-index:99
}
.returnBtn{text-decoration:none;display:inline-block}
.profileInfo b{color:#2168a8}

/* ===== Play 屏：游戏卡片（用抠出来的素材图标） ===== */
.gameGrid2{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.gameCard2{padding:9px 5px 10px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:3px}
.gameCard2 img{width:58px;height:58px;object-fit:contain;filter:drop-shadow(0 3px 5px rgba(20,110,160,.22))}
.gameCard2 strong{font-size:11px;color:#12508f;font-weight:900;line-height:1.15}
.gameCard2 span{font-size:9px;color:var(--muted)}
.heroArt img{width:76px;height:76px;object-fit:contain;filter:drop-shadow(0 4px 7px rgba(20,110,160,.25))}
.todayWords{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;margin-top:2px}
.todayWords i{
  font-style:normal;background:#eaf6ff;border:1.5px solid #cfe7f8;border-radius:11px;
  padding:5px 10px;font-size:12px;font-weight:900;color:#1d6bb0
}

/* ===== Bubble Pop 游戏（全屏，盖住底部导航） ===== */
.gameScreen{
  position:fixed;left:0;right:0;top:0;bottom:0;margin:0 auto;max-width:590px;z-index:60;
  display:flex;flex-direction:column;background:#0d5594;overflow:hidden
}
#sightGame.gameScreen{background:#147fbb url("../generated/bubble-ocean-bg.webp") center top/cover no-repeat}
#sightWC.gameScreen{background:#0e6ea8 url('../generated/word-clear-bg-no-side-seal.webp') center top/cover no-repeat}
.gameTop{
  flex:0 0 auto;height:178px;display:flex;align-items:flex-start;justify-content:space-between;gap:8px;padding:18px 12px 0;
  background:transparent;color:#0b4a86;z-index:9;pointer-events:none
}
.gameTop .gameBack,.gameTop .gameCount{pointer-events:auto}
.bubbleGameTitle{position:absolute;left:50%;top:8px;transform:translateX(-50%);width:min(292px,63vw);height:auto;z-index:8;pointer-events:none;filter:drop-shadow(0 5px 10px rgba(0,61,115,.22))}
.gameTop strong{flex:1 1 auto;text-align:center;font-size:17px;font-weight:1000;letter-spacing:.3px}
.gameBack{
  flex:0 0 auto;border:0;background:transparent;width:36px;height:36px;
  font-size:28px;line-height:1;color:#08406e;font-weight:900;
  text-shadow:0 1px 4px rgba(255,255,255,.85),0 0 10px rgba(255,255,255,.6);
  display:flex;align-items:center;justify-content:center;padding:0 0 3px
}
.gameCount{flex:0 0 auto;font-size:14px;font-weight:1000;color:#08406e;min-width:54px;text-align:right;text-shadow:0 1px 4px rgba(255,255,255,.85),0 0 10px rgba(255,255,255,.6)}
.gameStage{
  position:relative;flex:1 1 auto;overflow:hidden;background:transparent
}
.gamePrompt{
  position:absolute;left:50%;top:68px;transform:translateX(-50%);z-index:6;
  width:auto;max-width:82%;padding:6px 15px;border-radius:999px;
  background:rgba(255,255,255,.95);box-shadow:0 5px 14px rgba(6,80,130,.22);
  text-align:center;font-size:13px;font-weight:800;color:#416e95;white-space:nowrap
}
.gamePrompt b{font-size:19px;color:#0b3f78;margin-left:6px;font-weight:1000}
.gamePrompt{cursor:pointer;-webkit-tap-highlight-color:transparent}
.gamePrompt:active{transform:translateX(-50%) scale(.985)}
.gamePrompt b.targetHidden{display:none}
.promptToggle{
  width:24px;height:24px;margin-left:6px;padding:0;border:0;border-radius:50%;
  background:rgba(225,245,255,.96);color:#0b5c9a;font-size:13px;font-weight:1000;
  display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;
  box-shadow:inset 0 0 0 1px rgba(62,160,218,.24),0 2px 5px rgba(6,80,130,.12);
  cursor:pointer;line-height:1;transition:transform .16s ease,background .16s ease
}
.promptToggle:active{transform:scale(.92)}
.promptToggle.isHidden{transform:rotate(-90deg);background:rgba(255,255,255,.96)}

.gameDots{position:absolute;left:50%;top:106px;transform:translateX(-50%);z-index:6;display:flex;gap:7px}
.gameDots img{width:24px;height:24px;opacity:.25;transition:opacity .25s,transform .25s;filter:drop-shadow(0 2px 4px rgba(6,80,130,.22))}
.gameDots img.on{opacity:1;transform:scale(1.18);filter:drop-shadow(0 3px 6px rgba(255,145,0,.35))}
/* Bubble Pop：标题烙在底图里（底边≈15.5%视口高），prompt/dots 直接锚定屏幕、贴标题正下方；
   不能留在 gameStage 内——stage 有 overflow:hidden，且 390 宽视口下标题底边已进入头部区 */
#sightGame .gamePrompt{top:106px;padding:5px 14px;min-width:170px;max-width:72%;font-size:12px;box-shadow:0 4px 12px rgba(6,80,130,.20)}
#sightGame .gameDots{top:143px}
.gameWhale{
  position:absolute;left:50%;bottom:1.5%;transform:translateX(-50%);
  width:38%;max-width:212px;pointer-events:none;opacity:.98;
  filter:drop-shadow(0 8px 14px rgba(5,60,100,.3));z-index:2
}
.gbubble{
  position:absolute;left:0;top:0;display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  border:0;
  background:transparent url(../game/bubble-glass-empty-v2.webp) center/contain no-repeat;
  box-shadow:none;
  color:#06366f;font-weight:1000;will-change:transform;cursor:pointer;
  text-shadow:
    0 1px 0 rgba(255,255,255,.98),
    0 0 3px rgba(255,255,255,.78);
  -webkit-tap-highlight-color:transparent;user-select:none;-webkit-user-select:none;touch-action:none
}
.gbubble::before{
  display:none!important
}
.gbubble::after{display:none!important}
.gameWin{
  position:absolute;inset:0;z-index:9;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:11px;padding:26px;text-align:center;background:rgba(219,246,255,.93);backdrop-filter:blur(3px)
}
.gameWin img{width:34%;max-width:170px;filter:drop-shadow(0 6px 12px rgba(10,90,135,.25))}
.gameWin h2{margin:0;font-size:24px;color:#0b4a86;font-weight:1000}
.gameWin p{margin:0;font-size:13px;font-weight:800;color:#4a7ba6}
.gameWin .winBtns{display:flex;gap:9px;margin-top:5px;flex-wrap:wrap;justify-content:center}
.gameWinStars{display:flex;align-items:center;justify-content:center;gap:10px;min-height:54px;margin:2px 0 0}
.gameWinStars img{width:44px!important;height:44px!important;object-fit:contain;opacity:.20;filter:grayscale(.6) drop-shadow(0 3px 6px rgba(9,91,145,.18));transform:scale(.82)}
.gameWinStars img.on{opacity:1;filter:drop-shadow(0 4px 8px rgba(236,157,25,.42));animation:gbStarPop .48s cubic-bezier(.2,.9,.25,1.2) both}
.gameWinQuality{font-size:12px!important;color:#477da7!important;font-weight:850!important;margin-top:-4px!important}
@keyframes gbStarPop{0%{transform:scale(.45) rotate(-18deg);opacity:0}65%{transform:scale(1.18) rotate(6deg);opacity:1}100%{transform:scale(1) rotate(0);opacity:1}}
/* Bubble Pop 通关反馈：最后一个气泡破裂后，完成页轻轻弹入 */
.gameWin.gbCelebrate{animation:gbWinReveal .46s cubic-bezier(.2,.9,.25,1.12) both}
.gameWin.gbCelebrate>img{animation:gbWinHeroPop .62s cubic-bezier(.2,.9,.25,1.18) both}
.gameWin.gbCelebrate h2,.gameWin.gbCelebrate p,.gameWin.gbCelebrate .winBtns{animation:gbWinTextUp .42s ease-out both}
@keyframes gbWinReveal{0%{opacity:0}100%{opacity:1}}
@keyframes gbWinHeroPop{0%{transform:scale(.78);opacity:.25}58%{transform:scale(1.08);opacity:1}100%{transform:scale(1)}}
@keyframes gbWinTextUp{0%{transform:translateY(8px);opacity:0}100%{transform:translateY(0);opacity:1}}

/* ===== Word Clear：连词消除（6×6 冰块 · 点掉连在一起的相同单词） ===== */
.wcTop .gameBack img{width:30px;height:30px;object-fit:contain;display:block}
.wcBadge{
  flex:0 0 auto;display:flex;align-items:center;gap:5px;height:30px;padding:0 12px 0 6px;
  border-radius:999px;background:linear-gradient(180deg,#6fbdf4,#2f8fdd);
  box-shadow:0 2px 0 #1f6fb0,inset 0 0 0 2px rgba(255,255,255,.85)
}
.wcBadge img{width:23px;height:23px;display:block}
.wcBadge b{color:#fff;font-size:14px;font-weight:1000;text-shadow:0 1px 2px rgba(10,60,100,.55)}
.wcStage{
  position:relative;flex:1 1 auto;overflow:hidden;display:flex;flex-direction:column;align-items:center;
  background:transparent
}
.wcHint{
  flex:0 0 auto;margin:8px 0 2px;padding:5px 12px;border-radius:999px;
  background:rgba(255,255,255,.94);box-shadow:0 4px 12px rgba(6,80,130,.2);
  font-size:11.5px;font-weight:800;color:#416e95;white-space:nowrap
}
.wcBoardWrap{flex:1 1 auto;display:flex;align-items:center;justify-content:center;width:100%;padding:6px 10px}
.wcBoard{
  width:min(96%,432px);aspect-ratio:1/1;display:grid;
  grid-template-columns:repeat(6,1fr);grid-template-rows:repeat(6,1fr);gap:4px;padding:9px;border-radius:24px;
  background:rgba(228,247,255,.82);
  box-shadow:0 12px 28px rgba(6,60,100,.3),inset 0 0 0 3px rgba(255,255,255,.9)
}
.wcCell{
  position:relative;border-radius:12px;display:flex;align-items:center;justify-content:center;
  background:url(../wordclear/tile-plain.webp) center/100% 100% no-repeat;
  color:#0b4676;font-weight:1000;font-size:clamp(10px,2.6vw,16px);line-height:1;
  cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;
  transition:transform .12s ease-out
}
.wcCell.empty{background:rgba(12,74,124,.22);box-shadow:inset 0 3px 7px rgba(5,45,80,.32);cursor:default}
.wcCell.mark{box-shadow:0 0 0 3px rgba(255,212,74,.98),0 0 20px rgba(255,212,74,.85)}
.wcCell.pop{animation:wcPop .28s ease-in forwards}
@keyframes wcPop{60%{transform:scale(1.16)}to{transform:scale(.12);opacity:0}}
.wcCell.shake{animation:wcShake .3s}
@keyframes wcShake{25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
.wcRoad{flex:0 0 auto;width:min(92%,430px);height:54px;position:relative;margin:2px 0 6px}
.wcRoadBar{
  position:absolute;left:36px;right:58px;top:30px;height:8px;border-radius:99px;
  background:rgba(255,255,255,.9);box-shadow:inset 0 1px 3px rgba(8,60,100,.25)
}
.wcRoadFill{
  position:absolute;left:36px;right:58px;top:30px;height:8px;border-radius:99px;
  background:linear-gradient(90deg,#9fdcff,#39a9ef);transform:scaleX(0);transform-origin:left center;
  transition:transform .35s ease-out
}
.wcRoad img{position:absolute;bottom:0;filter:drop-shadow(0 4px 8px rgba(6,60,100,.32))}
.wcPenguin{left:0;width:44px;transition:left .35s ease-out}
.wcIgloo{right:0;width:56px}
.wcBottom{
  flex:0 0 auto;display:flex;gap:9px;padding:8px 12px 12px;
  background:linear-gradient(180deg,rgba(214,241,255,0),rgba(165,223,251,.9))
}
.wcBottom button{flex:1 1 0;border:0;background:transparent;padding:0;cursor:pointer}
.wcBottom img{width:100%;height:46px;object-fit:contain;display:block;filter:drop-shadow(0 3px 6px rgba(6,60,100,.28))}
.wcWin{
  position:absolute;inset:0;z-index:9;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:11px;padding:26px;text-align:center;background:rgba(224,246,255,.94);backdrop-filter:blur(3px)
}
.wcWin img.hero{width:30%;max-width:152px;filter:drop-shadow(0 6px 12px rgba(10,90,135,.25))}
.wcWin .wcStars{display:flex;gap:7px}
.wcWin .wcStars img{width:40px;height:40px;opacity:.26}
.wcWin .wcStars img.on{opacity:1;filter:drop-shadow(0 3px 7px rgba(220,160,20,.55))}
.wcWin h2{margin:0;font-size:23px;color:#0b4a86;font-weight:1000}
.wcWin p{margin:0;font-size:13px;font-weight:800;color:#4a7ba6}



/* Home v2 — approved ocean layout. Other screens keep their existing design. */
.homeGreeting,.homeWhaleArt{display:none}
body.homeMode .app{
  min-height:100vh;
  background:#0d9ee2 url("../home-ocean-hero.webp") center top/cover no-repeat;
}
body.homeMode .oceanHeader{
  min-height:224px;
  height:224px;
  position:relative;
  overflow:hidden;
  padding:18px 18px 0;
  background:transparent;
  border-bottom:none;
  box-shadow:none;
}
body.homeMode .oceanHeader:after{
  display:none;
}
body.homeMode .returnBtn,body.homeMode .woodSign,body.homeMode .whale,body.homeMode .seaDecor{display:none!important}
body.homeMode .homeGreeting{display:flex;position:absolute;left:18px;top:22px;align-items:center;gap:10px;z-index:3}
.homeAvatar{width:56px;height:56px;border-radius:50%;background:rgba(239,251,255,.96);border:4px solid white;display:grid;place-items:center;font-size:31px;box-shadow:0 5px 16px rgba(16,91,139,.2)}
.homeAvatar img{width:48px;height:48px;object-fit:contain;display:block}
.homeGreetingText{display:flex;flex-direction:column;color:#082f73;line-height:1.05}
.homeGreetingText strong{font-size:25px;font-weight:1000}
.homeGreetingText span{font-size:14px;font-weight:800;margin-top:5px}
body.homeMode .progressPill{position:absolute;right:16px;top:30px;z-index:4;display:flex;align-items:center;gap:7px;padding:7px 12px;background:#fff;border-radius:999px;color:#102d6c;font-size:16px;font-weight:1000;box-shadow:0 5px 16px rgba(16,91,139,.16)}
body.homeMode .progressPill img{width:28px;height:28px;display:block}
body.homeMode .homeWhaleArt{display:none!important}
body.homeMode #sightHome.homeContent{display:block;padding:0 14px 108px;margin-top:72px;background:transparent;position:relative;z-index:5}
body.homeMode #sightHome.hidden{display:none!important}
.homeTodayCard{display:block!important;padding:17px 15px 15px;border-radius:26px!important;background:rgba(255,255,255,.97)!important;box-shadow:0 10px 28px rgba(5,76,128,.22)!important;border:1px solid rgba(255,255,255,.98)!important;backdrop-filter:blur(5px)}
.homeStoryHeading{display:flex;align-items:center;justify-content:space-between;margin:0 2px 11px;color:#0a2871}
.homeStoryHeading strong{font-size:27px;font-weight:1000;letter-spacing:-.5px}
.homeStoryHeading span{font-size:38px;line-height:.8;font-weight:800}
.homeStoryBody{display:grid;grid-template-columns:48% minmax(0,1fr);gap:15px;align-items:center}
.homeTodayCard .storyCover{width:100%;height:auto;aspect-ratio:1.22;border-radius:19px;overflow:hidden;background:#e6f5ff;box-shadow:0 5px 12px rgba(11,69,112,.12)}
.homeTodayCard .storyCover img{width:100%;height:100%;object-fit:cover;display:block}
.homeTodayCard .storyInfo{display:flex;flex-direction:column;align-items:flex-start;min-width:0;gap:7px}
.homeTodayCard .storyInfo .bookTag{display:inline-flex;padding:4px 9px;background:#e2f3ff;border-radius:999px;color:#276295;font-size:13px;font-weight:900}
.homeTodayCard .storyInfo>strong{font-size:24px;line-height:1.12;color:#0b2671;font-weight:1000;overflow-wrap:anywhere}
.homeWordchips{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:3px 0 0!important;width:100%}
.homeWordchips>*{min-width:0!important;margin:0!important;padding:8px 4px!important;border-radius:12px!important;background:#dff3ff!important;color:#0b2671!important;text-align:center;font-size:18px!important;font-weight:1000!important}
.homeReadBtn{position:static!important;display:flex!important;align-items:center;justify-content:center;width:100%!important;margin:16px 0 0!important;border-radius:18px!important;min-height:54px!important;font-size:23px!important;font-weight:1000!important;background:linear-gradient(180deg,#39a9ff,#167df0)!important;box-shadow:0 5px 0 #0d67c9,0 8px 16px rgba(22,125,240,.2)!important}
.homeReadBtn span{margin-right:8px}
.homeShortcuts{display:grid;grid-template-columns:1fr 1fr;gap:13px;margin-top:17px}
.homeShortcut{min-height:132px;border:1px solid rgba(255,255,255,.85)!important;border-radius:24px!important;background:rgba(255,255,255,.9)!important;box-shadow:0 9px 24px rgba(5,76,128,.2)!important;display:flex!important;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:#0b2671;cursor:pointer;backdrop-filter:blur(7px)}
.homeShortcut strong{font-size:20px;font-weight:1000}
.homeShortcutIcon{font-size:48px;line-height:1}
.homeShortcut img{width:61px;height:61px;display:block}
body.homeMode .bottomNav{z-index:20}

/* Read and Collection reuse the same ocean artwork as Home. */
body.oceanPageMode:not(.homeMode) .app{min-height:100vh;background:#0d9ee2 url("../home-ocean-hero.webp") center top/cover no-repeat}
body.oceanPageMode:not(.homeMode) .oceanHeader{height:132px;min-height:132px;background:transparent;border:0;box-shadow:none}
body.oceanPageMode:not(.homeMode) .oceanHeader:after,body.oceanPageMode:not(.homeMode) .whale,body.oceanPageMode:not(.homeMode) .seaDecor{display:none}
body.oceanPageMode:not(.homeMode) .woodSign{top:49px;min-width:0;max-width:62%;padding:0;background:transparent;border:0;border-radius:0;box-shadow:none;color:#082f73;font-size:29px;line-height:1.05}
body.oceanPageMode:not(.homeMode) .woodSign:before,body.oceanPageMode:not(.homeMode) .woodSign:after{display:none}
body.oceanPageMode:not(.homeMode) .homeWhaleArt{display:block!important;position:absolute;left:12px;bottom:-7px;width:92px;height:92px;object-fit:contain;z-index:2;filter:drop-shadow(0 5px 10px rgba(7,76,126,.18))}
body.oceanPageMode:not(.homeMode) .progressPill{top:18px;right:13px;display:flex;align-items:center;gap:6px;background:rgba(255,255,255,.96);font-size:12px;padding:6px 10px}
body.oceanPageMode:not(.homeMode) .progressPill img{width:25px;height:25px;object-fit:contain}
body.oceanPageMode .content{background:transparent}
body.oceanPageMode #sightRead,body.oceanPageMode #sightCollection{padding-top:7px}
body.oceanPageMode #sightRead .sectionTitle,body.oceanPageMode #sightCollection .sectionTitle{color:#082f73;font-size:23px;margin:8px 5px 11px;text-shadow:0 1px 0 rgba(255,255,255,.55)}
body.oceanPageMode #sightCollection>.sectionTitle,body.oceanPageMode #sightRead>.sectionTitle{display:none}
body.oceanPageMode #sightRead .libraryItem,body.oceanPageMode #sightCollection .collectionCard{background:rgba(255,255,255,.94);border-color:rgba(255,255,255,.98);box-shadow:0 8px 22px rgba(5,76,128,.16);backdrop-filter:blur(6px)}
.collectionCard{padding:14px}
.collectionSetTabs{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin-bottom:12px}
.collectionSetTabs button{border:1.5px solid #c8e7f8;background:#edf8ff;color:#29669d;border-radius:13px;padding:9px 2px;font-size:11px;font-weight:1000}
.collectionSetTabs button.active{background:linear-gradient(180deg,#3fb2ff,#1685ed);border-color:#1685ed;color:#fff;box-shadow:0 4px 10px rgba(22,133,237,.25)}
.collectionSetSummary{display:flex;align-items:center;justify-content:space-between;margin:2px 2px 12px;color:#0b3276;font-weight:1000;font-size:14px}
.collectionSetSummary small{color:#5580a6;font-size:10px;font-weight:850}
.wordTile{min-height:39px;display:flex;align-items:center;justify-content:center;position:relative}
.wordTile.future{color:#91a1ae;background:rgba(231,235,240,.82)}
.wordTile .level{position:absolute;right:2px;bottom:1px;font-size:7px;line-height:1;color:#f2a900}
@media (max-width:390px){
  .homeStoryHeading strong{font-size:24px}.homeStoryBody{grid-template-columns:46% minmax(0,1fr)}.homeTodayCard .storyInfo>strong{font-size:21px}.homeWordchips>*{font-size:16px}.homeShortcut{min-height:116px}
}
/* 窄屏（≤430px）时底图木牌占宽更大，压缩顶栏两侧控件避免压到木牌 */
@media (max-width:430px){
  .gameTop{padding:0 6px}
  .gameBack{width:30px}
  .gameCount{min-width:46px;font-size:13px}
  .wcBadge{height:28px;padding:0 9px 0 4px}
  .wcBadge img{width:20px;height:20px}
  .wcBadge b{font-size:13px}
}



/* Unified ocean visual system. Bubble Pop audio/game code below is untouched from approved v18. */
:root{--unified-card:rgba(255,255,255,.95);--unified-line:rgba(188,229,250,.95);--unified-navy:#0b3f78;--unified-sub:#66819c}
body.oceanPageMode,body.homeMode{background:#078fd8 url("../generated/page-ocean-bg.webp") center top/cover fixed no-repeat!important}
body.oceanPageMode .app,body.homeMode .app{background:transparent!important}
body.oceanPageMode .oceanHeader,body.homeMode .oceanHeader{height:292px!important;min-height:292px!important;background:transparent!important;overflow:visible!important;padding:0!important}
body.oceanPageMode .oceanHeader:after,body.homeMode .oceanHeader:after{display:none!important}
body.oceanPageMode .woodSign.imgSign,body.homeMode .woodSign.imgSign{display:block!important;top:48px!important;left:50%!important;transform:translateX(-50%)!important;z-index:6!important}
body.oceanPageMode .woodSign.imgSign img,body.homeMode .woodSign.imgSign img{height:92px!important;max-width:78vw!important;width:auto!important;object-fit:contain!important;filter:drop-shadow(0 6px 12px rgba(26,83,124,.22))!important}
body.oceanPageMode .progressPill,body.homeMode .progressPill{right:18px!important;top:18px!important;background:rgba(255,255,255,.95)!important;border:2px solid rgba(255,255,255,.96)!important;padding:7px 12px 7px 8px!important;gap:6px!important;box-shadow:0 7px 18px rgba(19,92,142,.14)!important}
body.oceanPageMode .progressPill img,body.homeMode .progressPill img{width:28px!important;height:28px!important}
body.oceanPageMode .progressPill span,body.homeMode .progressPill span{font-size:15px!important;font-weight:1000!important;color:#0b3f78!important}
.homeGreeting{display:none!important}
body.oceanPageMode .homeWhaleArt,body.homeMode .homeWhaleArt{display:none!important}
body.oceanPageMode .whale,body.homeMode .whale,body.oceanPageMode .seaDecor,body.homeMode .seaDecor{display:none!important}
body.oceanPageMode #sightHome,body.oceanPageMode #sightRead,body.oceanPageMode #sightPlay,body.oceanPageMode #sightCollection,body.oceanPageMode #sightProfile,body.homeMode #sightHome{background:transparent!important}
body.oceanPageMode #sightRead,body.oceanPageMode #sightPlay,body.oceanPageMode #sightCollection,body.oceanPageMode #sightProfile{padding-top:8px!important;padding-bottom:94px!important}
body.oceanPageMode .card,body.homeMode .card,body.oceanPageMode .libraryItem,body.oceanPageMode .collectionCard,body.oceanPageMode .profileCard,body.oceanPageMode .profileInfo,body.oceanPageMode .gameCard2,body.oceanPageMode .todayGame{background:var(--unified-card)!important;border:2px solid var(--unified-line)!important;border-radius:24px!important;box-shadow:0 8px 22px rgba(6,79,126,.13)!important;backdrop-filter:blur(5px)}
body.oceanPageMode .sectionTitle,body.homeMode .sectionTitle{color:var(--unified-navy)!important;text-shadow:0 1px 0 rgba(255,255,255,.6)!important}
body.oceanPageMode .playBtn,body.homeMode .playBtn,body.oceanPageMode .libraryItem button,body.oceanPageMode .todayGame button{background:linear-gradient(180deg,#39afff,#1686ed)!important;border:0!important;color:#fff!important;border-radius:16px!important;box-shadow:0 5px 0 #0c72d0,0 8px 15px rgba(12,114,208,.2)!important}
/* Home: title + progress + Today's Story only */
body.homeMode .woodSign.imgSign{top:56px!important}
body.homeMode .woodSign.imgSign img{height:88px!important}
body.homeMode #sightHome.homeContent{margin-top:12px!important;padding:0 18px 100px!important}
body.homeMode .homeTodayCard{border:2px solid var(--unified-line)!important;border-radius:30px!important;background:rgba(255,255,255,.96)!important;box-shadow:0 10px 26px rgba(5,76,128,.16)!important;padding:18px!important}
body.homeMode .homeStoryHeading strong{font-size:29px!important;color:#0a3474!important}
body.homeMode .homeStoryHeading span{color:#0a3474!important}
body.homeMode .homeTodayCard .storyInfo>strong{color:#0a3474!important}
body.homeMode .homeWordchips>*{background:#e7f5ff!important;color:#0b4f8b!important;border-radius:14px!important}
/* Read */
body.oceanPageMode #sightRead .libraryItem{margin:0 14px 10px!important;padding:10px 12px!important;min-height:94px!important}
body.oceanPageMode #sightRead .libraryItem img{border-radius:14px!important}
/* Play */
body.oceanPageMode #sightPlay .gameGrid2{gap:10px!important}
body.oceanPageMode #sightPlay .gameCard2{min-height:140px!important}
body.oceanPageMode #sightPlay .todayGame{border-radius:28px!important}
/* Collection */
body.oceanPageMode #sightCollection .collectionCard{margin:0 14px!important;padding:16px!important;border-radius:28px!important}
body.oceanPageMode #sightCollection .wordTile.collected{background:#c9efff!important;color:#0a5793!important}
body.oceanPageMode #sightCollection .wordTile .level{font-size:0!important}
body.oceanPageMode #sightCollection .wordTile .level:after{content:'★';font-size:12px;color:#ffc21a}
/* Profile */
body.oceanPageMode #sightProfile{color:var(--unified-navy)!important}
body.oceanPageMode #sightProfile .profileCard,body.oceanPageMode #sightProfile .profileInfo{padding:16px!important}
/* Nav */
.bottomNav{background:rgba(255,255,255,.97)!important;border-top:1px solid rgba(188,229,250,.95)!important;box-shadow:0 -5px 18px rgba(5,76,128,.08)!important;height:72px!important}
.bottomNav button{font-size:10px!important}
.bottomNav .ico{width:31px!important;height:31px!important}
@media (max-width:430px){body.oceanPageMode .oceanHeader,body.homeMode .oceanHeader{height:265px!important;min-height:265px!important}body.oceanPageMode .woodSign.imgSign img,body.homeMode .woodSign.imgSign img{height:78px!important}body.homeMode .woodSign.imgSign{top:54px!important}body.homeMode .woodSign.imgSign img{height:84px!important}body.homeMode #sightHome.homeContent{margin-top:8px!important}}
/* ===== Sentence Path：独立页面 · 横版冰海完整呈现 ===== */
body[data-page="sentence-path"]{background:#083e79;overflow:hidden}
.spGame{width:min(100%,590px);height:100dvh;min-height:620px;margin:0 auto;display:flex;flex-direction:column;position:relative;overflow:hidden;background:linear-gradient(#8ddcff 0 17%,#dff7ff 17% 100%);color:#0b3f78}
.spHeader{height:98px;flex:0 0 98px;position:relative;display:flex;align-items:flex-start;justify-content:space-between;padding:14px 12px 0;background:linear-gradient(180deg,#59c8f5,#aeeaff);z-index:4}
.spBack{width:40px;height:40px;border:2px solid rgba(255,255,255,.92);border-radius:50%;background:rgba(255,255,255,.78);box-shadow:0 4px 10px rgba(10,78,130,.18);color:#0b4a86;font-size:34px;line-height:30px;font-weight:1000;z-index:2}
.spTitle{position:absolute;left:50%;top:7px;transform:translateX(-50%);width:min(61%,330px);height:78px;object-fit:contain;filter:drop-shadow(0 5px 8px rgba(7,76,128,.20))}
.spProgress{height:36px;min-width:74px;padding:0 10px;border:2px solid rgba(255,255,255,.95);border-radius:999px;background:linear-gradient(#3ba9f1,#187fcf);box-shadow:0 4px 9px rgba(10,78,130,.20),inset 0 -2px 0 rgba(3,83,150,.24);display:flex;align-items:center;justify-content:center;gap:5px;color:#fff;z-index:2}
.spProgress span{color:#ffd42a;font-size:20px;text-shadow:0 2px 2px #9a6b00}.spProgress b{font-size:14px;font-weight:1000;white-space:nowrap}
.spScene{position:relative;flex:0 0 auto;width:100%;aspect-ratio:16/9;overflow:hidden;background:#078ed4;box-shadow:0 7px 17px rgba(5,74,126,.25)}
.spBackdrop{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:contain;background:#078ed4}
.spRoad{position:absolute;left:12%;right:15%;top:45%;height:45%;display:flex;align-content:center;align-items:center;justify-content:center;gap:4px;flex-wrap:wrap;padding:3px 1%;z-index:3}
.spSlot{width:clamp(37px,9.2vw,54px);height:clamp(34px,8vw,46px);display:grid;place-items:center;background:url(../wordclear/tile-plain.webp) center/100% 100% no-repeat;filter:drop-shadow(0 3px 3px rgba(3,70,115,.26));transition:transform .2s ease}
.spRoad.many .spSlot{width:clamp(33px,8.2vw,47px);height:clamp(31px,7.4vw,42px)}
.spSlot span{max-width:94%;overflow:hidden;text-overflow:clip;color:#0a467a;font-size:clamp(10px,2.7vw,15px);line-height:1;font-weight:1000;text-shadow:0 1px 0 #fff;white-space:nowrap}
.spSlot.filled{transform:translateY(-2px);filter:drop-shadow(0 4px 4px rgba(3,70,115,.34))}.spSlot.hint{animation:spHintGlow .9s ease}
.spPenguin{--sp-step:0;position:absolute;left:4%;bottom:3%;width:clamp(44px,13vw,72px);z-index:5;filter:drop-shadow(0 5px 5px rgba(2,53,91,.34));transition:left .36s cubic-bezier(.2,.85,.35,1),top .36s cubic-bezier(.2,.85,.35,1),transform .3s,opacity .35s}
.spPenguin.step{animation:spPenguinStep .48s cubic-bezier(.2,.8,.3,1)}.spPenguin.home-jump{transition:left .58s cubic-bezier(.2,.78,.3,1),top .58s cubic-bezier(.2,.78,.3,1);animation:spPenguinHomeJump .6s cubic-bezier(.2,.78,.3,1) both}.spPenguin.home{left:84%;transform:scale(.58);opacity:.3}
.spFeedback{position:absolute;left:50%;top:12%;transform:translate(-50%,-8px);width:max-content;max-width:82%;padding:7px 12px;border-radius:14px;background:rgba(255,255,255,.94);box-shadow:0 5px 12px rgba(4,74,124,.22);font-size:13px;line-height:1.25;text-align:center;font-weight:1000;color:#0b3f78;opacity:0;z-index:7;transition:.25s}
.spFeedback.show{opacity:1;transform:translate(-50%,0)}
.spCardPanel{flex:1 1 auto;min-height:195px;padding:10px 12px 7px;background:linear-gradient(180deg,#dff6ff,#bceaff);display:flex;flex-direction:column;overflow:auto}
.spInstruction{flex:0 0 auto;margin:0 0 8px;text-align:center;color:#39739d;font-size:11px;font-weight:900;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.spCards{flex:1 1 auto;display:flex;align-content:center;align-items:stretch;justify-content:center;gap:8px;flex-wrap:wrap;padding-bottom:8px}
.spWordCard{flex:0 1 auto;min-width:76px;max-width:142px;min-height:50px;padding:7px 13px;border:2px solid #a6daf4;border-radius:15px;background:linear-gradient(#fff,#e9f8ff);box-shadow:0 4px 0 #75bfe8,0 7px 10px rgba(7,91,145,.14);color:#0b3f78;font-size:clamp(15px,4.2vw,20px);line-height:1.05;font-weight:1000;white-space:nowrap;overflow:hidden;text-overflow:clip;-webkit-tap-highlight-color:transparent}
.spWordCard:active{transform:translateY(2px);box-shadow:0 2px 0 #75bfe8}.spWordCard.used{visibility:hidden}.spWordCard.shake{animation:spWrong .32s ease}
.spControls{flex:0 0 68px;display:flex;gap:8px;padding:8px 10px calc(9px + env(safe-area-inset-bottom));background:linear-gradient(#aee4fb,#80cef3);border-top:1px solid rgba(255,255,255,.82)}
.spControls button{flex:1 1 0;min-width:0;border:2px solid rgba(255,255,255,.94);border-radius:16px;background:linear-gradient(#3eaff7,#1986db);box-shadow:0 4px 0 #0c65a9;color:#fff;font-size:12px;font-weight:1000;white-space:nowrap}.spControls button span{font-size:17px;vertical-align:-1px}
.spWin{position:absolute;inset:0;z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;padding:26px;text-align:center;background:rgba(224,247,255,.95);backdrop-filter:blur(5px)}
.spWin>img{width:min(38%,168px);filter:drop-shadow(0 7px 12px rgba(6,76,126,.25))}.spWin h1{margin:0;color:#0b3f78;font-size:28px}.spWin p{margin:0;color:#4b789c;font-size:13px;font-weight:900}
.spStars{display:flex;gap:7px}.spStars span{font-size:43px;color:#b9d1df;text-shadow:0 2px 0 #fff}.spStars span.on{color:#ffc928;text-shadow:0 3px 0 #d78a00;animation:spStar .4s ease both}
.spWinBtns{display:flex;gap:10px;margin-top:8px}.spWinBtns button{border:0;border-radius:15px;padding:11px 18px;background:linear-gradient(#3dacf5,#1884d9);box-shadow:0 4px 0 #0b64a9;color:#fff;font-weight:1000}
@keyframes spWrong{25%{transform:translateX(-5px) rotate(-1deg)}50%{transform:translateX(5px) rotate(1deg)}75%{transform:translateX(-3px)}100%{transform:none}}
@keyframes spPenguinStep{0%{transform:none}38%{transform:translateY(-15px) rotate(5deg)}72%{transform:translateY(3px) rotate(-2deg)}100%{transform:none}}
@keyframes spPenguinHomeJump{0%{transform:none}45%{transform:translateY(-20px) scale(.9) rotate(6deg)}78%{transform:translateY(3px) scale(.74) rotate(-2deg)}100%{transform:translateY(0) scale(.72);opacity:.82}}
@keyframes spHintGlow{0%,100%{filter:drop-shadow(0 3px 3px rgba(3,70,115,.26))}45%{filter:drop-shadow(0 0 10px #ffe04e);transform:scale(1.08)}}
@keyframes spStar{0%{transform:scale(.3) rotate(-20deg)}70%{transform:scale(1.18) rotate(6deg)}100%{transform:none}}
@media (max-width:430px){.spGame{min-height:580px}.spHeader{height:88px;flex-basis:88px;padding-top:10px}.spTitle{height:70px;top:5px}.spBack{width:36px;height:36px;font-size:30px}.spProgress{height:33px;min-width:68px;padding:0 8px}.spCardPanel{min-height:188px;padding-top:8px}.spControls{flex-basis:64px}.spControls button{font-size:11px}.spFeedback{font-size:12px}}

/* Sentence Path screen layout lives in sentence-path-screen.css. */
@keyframes spRotatePhone{0%,100%{transform:rotate(0)}50%{transform:rotate(90deg)}}
@keyframes spTileRise{0%{opacity:0;transform:translateY(78px) scale(.62)}70%{opacity:1;transform:translateY(-5px) scale(1.05)}100%{opacity:1;transform:none}}
@keyframes spIceBob{0%,100%{transform:translateY(0)}50%{transform:translateY(4px)}}
@keyframes spPenguinBob{0%,100%{transform:translateY(0)}50%{transform:translateY(4px)}}

/* ===== 登录 / 注册页 ===== */
.loginContent{display:flex;flex-direction:column;align-items:center;padding-top:8px}
.loginCard{width:min(100%,430px);padding:22px 22px 26px;text-align:center;border-radius:26px}
.loginMascot{width:92px;height:92px;margin:-64px auto 6px;border-radius:50%;background:radial-gradient(circle,#ffffff 0 62%,#d9f1fd 63% 100%);border:4px solid #fff;box-shadow:0 8px 18px rgba(16,87,145,.18);display:flex;align-items:center;justify-content:center}
.loginMascot img{width:72px;height:72px;object-fit:contain;animation:spPenguinBob 2.4s ease-in-out infinite}
.loginCard h2{margin:6px 0 2px;color:#0b4a86;font-size:24px}
.loginSub{margin:0 0 14px;color:var(--muted);font-size:13px;font-weight:700}
.loginTabs{display:flex;gap:8px;margin:0 auto 16px;width:max-content;background:#e3f4fe;border-radius:999px;padding:4px}
.loginTabs button{border:0;background:transparent;color:#4a7ba6;font-weight:900;font-size:14px;padding:8px 22px;border-radius:999px}
.loginTabs button.active{background:#fff;color:var(--ocean-dark);box-shadow:0 3px 8px rgba(16,87,145,.14)}
.loginField{display:flex;flex-direction:column;gap:5px;margin:0 0 12px;text-align:left}
.loginField span{font-size:12px;font-weight:900;color:#4a7ba6;padding-left:4px}
.loginField input{border:2px solid var(--card-line);border-radius:14px;background:#f4fbff;padding:12px 14px;font-size:16px;font-weight:700;color:var(--ink);outline:none}
.loginField input:focus{border-color:var(--ocean);background:#fff}
.loginMsg{min-height:18px;margin:2px 0 10px;font-size:13px;font-weight:800;color:#3d8f68}
.loginMsg.err{color:#e0596b}
.loginSubmit{width:100%;font-size:17px}
.loginSubmit:disabled{opacity:.6}
/* Profile 页退出登录按钮 */
.logoutBtn{display:block;width:min(100%,430px);margin:2px auto 14px;border:0;border-radius:16px;padding:13px;background:linear-gradient(#fff,#eef7fd);color:#5681a4;font-weight:900;font-size:14px;box-shadow:0 3px 0 #d1e6f4}
