:root{
  --font-display:'LXGW WenKai TC','Noto Sans TC',sans-serif;
  --font-body:'Noto Sans TC','PingFang TC','Microsoft JhengHei',sans-serif;
  --ink:#23402a; --ink-2:#4d6a50; --ink-3:#7a8f78;
  --kraft:#f7efdc; --kraft-2:#efe2c3; --kraft-edge:#d8c49a;
  --leaf:#4f9a3c; --leaf-d:#3b7d2c; --leaf-l:#dff1cf;
  --sun:#f2b84b; --berry:#e2645a; --sky:#3aa6c9;
  --ok:#3f9a4a; --warn:#d9822b;
  --r-sm:10px; --r:16px; --r-lg:24px;
  --shadow:0 6px 0 rgba(90,70,30,.18), 0 14px 30px rgba(40,50,20,.18);
  --t:200ms cubic-bezier(.16,1,.3,1);
  --paper:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .45 0 0 0 0 .35 0 0 0 0 .15 0 0 0 .07 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{font-family:var(--font-body);color:var(--ink);background:#cfe3b8;font-size:16px;line-height:1.55;-webkit-tap-highlight-color:transparent;overflow:hidden}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer;touch-action:manipulation}
button:focus-visible{outline:3px solid var(--sun);outline-offset:2px}
.hidden{display:none!important}
#app{position:fixed;inset:0;display:flex;flex-direction:column}

/* 背景 */
.bg{position:absolute;inset:0;z-index:0;overflow:hidden}
.bg img{width:100%;height:100%;object-fit:cover;transition:opacity .5s ease, filter .5s;}
.bg::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,250,235,.0) 40%,rgba(40,60,25,.18))}
.bg.dim img{filter:saturate(.85) brightness(.9)}

/* HUD */
.hud{position:relative;z-index:5;display:flex;align-items:center;gap:12px;padding:10px 16px;margin:10px 12px 0;background:var(--kraft) var(--paper);border:2px solid var(--kraft-edge);border-radius:var(--r);box-shadow:var(--shadow)}
.hud-spirit{display:flex;align-items:center;gap:8px;text-align:left;line-height:1.15}
.hud-spirit small{display:block;color:var(--ink-2);font-size:12px}
.hud-spirit b{font-family:var(--font-display);font-size:18px}
.hud-mini{width:42px;height:42px;display:block;background:var(--leaf-l);border-radius:50%;overflow:hidden}
.hud-mini svg{width:100%;height:100%}
.hud-stats{display:flex;gap:8px;align-items:center;flex:1;flex-wrap:wrap}
.chip{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:999px;background:#fff8e6;border:1.5px solid var(--kraft-edge);font-size:14px;font-variant-numeric:tabular-nums}
.chip.coin b{color:var(--leaf-d)}
.marks{display:flex;gap:4px;flex-wrap:wrap}
.marks .chip{padding:3px 8px;font-size:13px}
.hud-btns{display:flex;gap:6px}
.icon-btn{width:44px;height:44px;border-radius:12px;background:#fff8e6;border:1.5px solid var(--kraft-edge);font-size:20px;transition:transform var(--t)}
.icon-btn:active{transform:scale(.92)}

/* 主區 */
.view{position:relative;z-index:2;flex:1;overflow-y:auto;overflow-x:hidden;padding:14px 16px 16px;scroll-behavior:smooth}
.screen{max-width:1180px;margin:0 auto;animation:in .3s ease-out both}
@keyframes in{from{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:none}}

/* 底部選單 */
.nav{position:relative;z-index:5;display:flex;justify-content:center;gap:4px;padding:8px;margin:0 12px 10px;background:var(--kraft) var(--paper);border:2px solid var(--kraft-edge);border-radius:var(--r);box-shadow:var(--shadow);overflow-x:auto}
.nav button{display:flex;flex-direction:column;align-items:center;min-width:72px;padding:6px 8px;border-radius:12px;font-size:13px;font-weight:700;color:var(--ink-2);transition:background var(--t),transform var(--t)}
.nav button span{font-size:22px;line-height:1.2}
.nav button.on{background:var(--leaf);color:#fff;transform:translateY(-2px)}
.nav button:active{transform:scale(.95)}

/* 紙板面板 */
.panel{background:var(--kraft) var(--paper);border:2px solid var(--kraft-edge);border-radius:var(--r-lg);box-shadow:var(--shadow);padding:20px}
.panel.soft{background:rgba(247,239,220,.94) var(--paper)}
.tape{position:relative}
.tape::before{content:"";position:absolute;top:-12px;left:50%;width:90px;height:22px;transform:translateX(-50%) rotate(-2deg);background:rgba(240,215,150,.75);border:1px dashed rgba(160,120,50,.35)}
h1,h2,.display{font-family:var(--font-display);font-weight:700;line-height:1.2}
h1{font-size:clamp(30px,5vw,54px)}
h2{font-size:26px}
h3{font-size:18px;font-weight:900}
.muted{color:var(--ink-2)}
.small{font-size:14px}
.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.grid{display:grid;gap:14px}

/* 按鈕 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:10px 22px;border-radius:14px;font-weight:900;font-size:16px;background:var(--leaf);color:#fff;box-shadow:0 4px 0 var(--leaf-d);transition:transform var(--t),box-shadow var(--t),filter var(--t)}
.btn:hover{filter:brightness(1.05)}
.btn:active{transform:translateY(3px);box-shadow:0 1px 0 var(--leaf-d)}
.btn.sun{background:var(--sun);color:#4a3200;box-shadow:0 4px 0 #c88d22}
.btn.ghost{background:#fff8e6;color:var(--ink);box-shadow:0 4px 0 var(--kraft-edge);border:1.5px solid var(--kraft-edge)}
.btn.big{min-height:60px;font-size:20px;padding:12px 32px;border-radius:18px}
.btn[disabled]{filter:grayscale(.8);opacity:.55;pointer-events:none}

/* 標題畫面 */
.title-wrap{min-height:100%;display:grid;place-items:center;text-align:center}
.title-card{max-width:620px;padding:32px 28px;text-align:center}
.title-card h1{color:var(--leaf-d);text-shadow:0 2px 0 #fff}
.title-card .sub{font-family:var(--font-display);font-size:22px;color:var(--ink-2);margin:4px 0 8px}
.title-spirit{width:180px;margin:6px auto}
.pick{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:12px 0}
.pick button{min-height:48px;padding:8px 18px;border-radius:999px;background:#fff8e6;border:2px solid var(--kraft-edge);font-weight:700;transition:all var(--t)}
.pick button.on{background:var(--leaf);border-color:var(--leaf-d);color:#fff}

/* 地圖 */
.map-head{display:flex;gap:16px;align-items:flex-end;justify-content:space-between;flex-wrap:wrap;margin-bottom:14px}
.map-head .panel{padding:14px 18px}
.scene-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.scene-card{position:relative;border-radius:var(--r-lg);overflow:hidden;min-height:190px;text-align:left;border:3px solid #fff8e6;box-shadow:var(--shadow);transition:transform var(--t)}
.scene-card:hover{transform:translateY(-3px) rotate(-.3deg)}
.scene-card img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.scene-card .lab{position:absolute;left:10px;right:10px;bottom:10px;padding:10px 12px;background:rgba(247,239,220,.95) var(--paper);border-radius:14px;border:1.5px solid var(--kraft-edge)}
.scene-card .lab b{font-family:var(--font-display);font-size:22px}
.scene-card .bar{height:8px;border-radius:9px;background:#e4d6b4;overflow:hidden;margin-top:6px}
.scene-card .bar i{display:block;height:100%;background:var(--leaf);border-radius:9px}
.scene-card.locked img{filter:grayscale(1) brightness(.75)}
.scene-card.locked .lock{position:absolute;inset:0 0 auto;height:55%;display:grid;place-items:center;font-size:44px;text-shadow:0 2px 8px rgba(0,0,0,.4)}

/* 精靈伴侶 */
.buddy{position:fixed;left:18px;bottom:110px;z-index:4;display:flex;align-items:flex-end;gap:6px;pointer-events:none}
.buddy .sp{width:120px;pointer-events:auto;cursor:pointer}
.bubble{position:relative;max-width:300px;background:#fffdf5;border:2px solid var(--kraft-edge);border-radius:18px;padding:10px 14px;font-weight:500;box-shadow:0 4px 0 rgba(90,70,30,.15);margin-bottom:70px;pointer-events:auto;animation:pop .3s var(--t)}
.bubble::before{content:"";position:absolute;left:-10px;bottom:16px;border:8px solid transparent;border-right-color:var(--kraft-edge)}
@keyframes pop{from{transform:scale(.8);opacity:0}to{transform:none;opacity:1}}
.spirit-svg{width:100%;height:auto;overflow:visible}
.spirit-svg .sp-body{transform-origin:100px 200px;animation:breathe 3.2s ease-in-out infinite}
@keyframes breathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.03,.97)}}
.sp-eyes{animation:blink 5s infinite;transform-origin:100px 128px}
@keyframes blink{0%,94%,100%{transform:scaleY(1)}96%{transform:scaleY(.1)}}
.anim-jump{animation:jump .6s var(--t)}
@keyframes jump{30%{transform:translateY(-26px)}60%{transform:translateY(0)}75%{transform:translateY(-8px)}}
.anim-wiggle{animation:wiggle .6s ease}
@keyframes wiggle{20%{transform:rotate(-10deg)}40%{transform:rotate(9deg)}60%{transform:rotate(-6deg)}80%{transform:rotate(4deg)}}
.anim-spin{animation:spin .8s var(--t)}
@keyframes spin{to{transform:rotate(360deg)}}

/* 場景 */
.scene-top{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.scene-top .panel{padding:12px 18px;flex:1}
.task-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}
.task-card{position:relative;text-align:left;padding:16px;border-radius:var(--r);background:rgba(247,239,220,.96) var(--paper);border:2px solid var(--kraft-edge);box-shadow:var(--shadow);transition:transform var(--t);display:flex;gap:12px;align-items:flex-start;min-height:110px}
.task-card:hover{transform:translateY(-3px)}
.task-card .te{font-size:34px;width:54px;height:54px;flex:0 0 54px;display:grid;place-items:center;background:#fff;border-radius:14px;border:1.5px solid var(--kraft-edge)}
.task-card b{font-size:17px}
.task-card .tags{display:flex;gap:4px;margin-top:6px;flex-wrap:wrap}
.task-card .tags span{white-space:nowrap;font-size:12px;padding:2px 8px;border-radius:99px;background:#fff8e6;border:1px solid var(--kraft-edge)}
.task-card.done{background:rgba(223,241,207,.97) var(--paper);border-color:#9fcf87}
.done-stamp{position:absolute;bottom:10px;right:10px;background:#fff;font-size:12px;font-weight:900;color:var(--leaf-d);border:2px solid var(--leaf);border-radius:8px;padding:2px 6px;transform:rotate(8deg);white-space:nowrap}
.starleaf{position:absolute;z-index:3;width:46px;height:46px;font-size:28px;display:grid;place-items:center;animation:twinkle 2s ease-in-out infinite;filter:drop-shadow(0 0 8px #fff6a0)}
@keyframes twinkle{0%,100%{opacity:.55;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}

/* 任務 */
.task-wrap{max-width:900px;margin:0 auto}
.task-panel{padding:22px 24px 24px}
.task-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.task-head h2{flex:1}
.dots{display:flex;gap:6px}
.dots i{width:12px;height:12px;border-radius:50%;background:#e4d6b4}
.dots i.on{background:var(--sun)}.dots i.ok{background:var(--leaf)}
.prompt{font-size:19px;font-weight:700;margin:6px 0 14px}
.event-tag{display:inline-block;background:var(--berry);color:#fff;font-weight:900;padding:4px 12px;border-radius:999px;font-size:14px;margin-bottom:6px;animation:pop .4s var(--t)}
.intro-box{display:grid;grid-template-columns:150px 1fr;gap:18px;align-items:center}
.opts{display:grid;gap:10px}
.opt{text-align:left;padding:14px 16px;min-height:56px;border-radius:14px;background:#fffdf5;border:2px solid var(--kraft-edge);font-size:17px;font-weight:700;box-shadow:0 3px 0 var(--kraft-edge);transition:all var(--t)}
.opt:hover{border-color:var(--leaf)}
.opt.ok{background:var(--leaf-l);border-color:var(--leaf);box-shadow:0 3px 0 var(--leaf)}
.opt.no{background:#fde7df;border-color:#e9a28f;box-shadow:0 3px 0 #e9a28f;opacity:.75}
.opt.dim{opacity:.5}
.shake{animation:shake .4s}
@keyframes shake{25%{transform:translateX(-6px)}50%{transform:translateX(6px)}75%{transform:translateX(-3px)}}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-bottom:14px}
.info-card{padding:12px;border-radius:14px;background:#fff;border:2px dashed var(--kraft-edge);text-align:center}
.info-card .e{font-size:34px}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px}
.tile{position:relative;padding:12px 8px;min-height:120px;border-radius:16px;background:#fffdf5;border:2.5px solid var(--kraft-edge);box-shadow:0 3px 0 var(--kraft-edge);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;text-align:center;transition:all var(--t)}
.tile .e{font-size:38px;line-height:1.1}
.tile b{font-size:15px}
.tile small{font-size:12px;color:var(--ink-2);background:#f4ead2;padding:1px 8px;border-radius:99px}
.tile.sel{border-color:var(--sun);background:#fff4d4;box-shadow:0 3px 0 #c88d22;transform:translateY(-2px)}
.tile.good{border-color:var(--leaf);background:var(--leaf-l)}
.tile.bad{border-color:#e9a28f;background:#fde7df}
.tile .num{position:absolute;top:6px;left:8px;width:28px;height:28px;border-radius:50%;background:var(--sun);color:#4a3200;font-weight:900;display:grid;place-items:center}
.match{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.match .col{display:grid;gap:10px;align-content:start}
.mt{padding:12px 14px;min-height:56px;border-radius:14px;background:#fffdf5;border:2.5px solid var(--kraft-edge);text-align:left;font-weight:700;box-shadow:0 3px 0 var(--kraft-edge);transition:all var(--t)}
.mt.sel{border-color:var(--sun);background:#fff4d4}
.mt.done{opacity:.95;border-style:solid}
.sort-item{display:flex;flex-direction:column;align-items:center;padding:18px;margin:0 auto 16px;max-width:320px;border-radius:20px;background:#fff;border:3px solid var(--kraft-edge);box-shadow:var(--shadow)}
.sort-item .e{font-size:64px}
.sort-item b{font-size:20px}
.bins{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}
.bin{min-height:80px;border-radius:16px;padding:10px;font-weight:900;background:#fffdf5;border:2.5px solid var(--kraft-edge);box-shadow:0 4px 0 var(--kraft-edge);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;transition:all var(--t)}
.bin .e{font-size:28px}
.bin:active{transform:translateY(3px)}
.stepper{display:grid;grid-template-columns:1.3fr 1fr;gap:16px}
.prod{display:flex;align-items:center;gap:10px;padding:12px;border-radius:16px;background:#fffdf5;border:2px solid var(--kraft-edge);margin-bottom:10px}
.prod .e{font-size:36px;width:52px;text-align:center}
.prod .info{flex:1;line-height:1.3}
.prod .info small{color:var(--ink-2)}
.qty{display:flex;align-items:center;gap:6px}
.qty button{width:44px;height:44px;border-radius:12px;font-size:24px;font-weight:900;background:var(--leaf-l);border:2px solid var(--leaf);color:var(--leaf-d)}
.qty button:active{transform:scale(.9)}
.qty output{min-width:32px;text-align:center;font-size:22px;font-weight:900;font-variant-numeric:tabular-nums}
.basket{padding:14px;border-radius:16px;background:#fff;border:2px dashed var(--kraft-edge)}
.basket li{list-style:none;padding:4px 0;border-bottom:1px dashed #eadfc4;font-variant-numeric:tabular-nums}
.reveal{margin:4px 0 10px;padding:10px 12px;border-radius:12px;background:#eaf6ff;border:2px solid #9fd0ea}
.need{display:inline-block;font-weight:900;background:#fff4d4;border:1.5px solid #e6c37a;border-radius:10px;padding:4px 10px;margin-bottom:10px}
.footer{display:flex;justify-content:flex-end;gap:10px;margin-top:18px;flex-wrap:wrap}
.fb{display:flex;gap:12px;align-items:center;margin-top:16px;padding:12px 14px;border-radius:16px;animation:pop .3s var(--t)}
.fb .sp{width:76px;flex:0 0 76px}
.fb.ok{background:var(--leaf-l);border:2px solid #9fcf87}
.fb.no{background:#fff1dc;border:2px solid #f0c88a}
.fb p{font-weight:700}

/* 結果 */
.result{text-align:center}
.result .sp{width:170px;margin:0 auto}
.rewards{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:12px 0}
.rewards .chip{font-size:15px;padding:6px 12px;background:#fff}
.confetti{position:fixed;inset:0;pointer-events:none;z-index:60;overflow:hidden}
.confetti i{position:absolute;top:-30px;font-size:22px;animation:fall 2.2s linear forwards}
@keyframes fall{to{transform:translateY(110vh) rotate(540deg)}}

/* 精靈頁 */
.spirit-layout{display:grid;grid-template-columns:1fr 1.1fr;gap:16px}
.stage-spirit{position:relative;display:grid;place-items:center;min-height:420px}
.stage-spirit .sp{width:min(320px,80%);cursor:pointer}
.stage-spirit .bubble{position:absolute;top:10px;left:50%;transform:translateX(-50%);margin:0}
.stage-spirit .bubble::before{display:none}
.slots{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:10px 0}
.slots button{padding:8px;border-radius:12px;background:#fff8e6;border:2px solid var(--kraft-edge);font-weight:700;font-size:14px}
.slots button.on{background:var(--leaf);color:#fff;border-color:var(--leaf-d)}
.wardrobe{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}
.ward{padding:6px;border-radius:14px;background:#fffdf5;border:2px solid var(--kraft-edge);font-size:13px;font-weight:700;display:flex;flex-direction:column;align-items:center;min-height:110px}
.ward .pv{width:70px;height:70px}
.ward.on{border-color:var(--leaf);background:var(--leaf-l)}
.ward.lock{opacity:.5}
.progress{height:12px;border-radius:9px;background:#e4d6b4;overflow:hidden}
.progress i{display:block;height:100%;background:linear-gradient(90deg,var(--leaf),#8fd36b)}
.path-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.path-card{padding:10px;border-radius:16px;background:#fffdf5;border:2.5px solid var(--kraft-edge);text-align:center;transition:all var(--t)}
.path-card .pv{width:110px;margin:0 auto}
.path-card.rec{border-color:var(--sun);box-shadow:0 0 0 4px rgba(242,184,75,.3)}
.path-card.lock{opacity:.5}
.path-card .rtag{display:inline-block;font-size:12px;font-weight:900;background:var(--sun);color:#4a3200;border-radius:99px;padding:1px 8px}
.evo-flash{position:fixed;inset:0;z-index:70;background:radial-gradient(circle,#fff 0%,rgba(255,255,220,.9) 30%,rgba(255,255,255,0) 70%);animation:flash 1.4s ease forwards;pointer-events:none}
@keyframes flash{0%{opacity:0}30%{opacity:1}100%{opacity:0}}

/* 家園 */
.home-wrap{display:grid;grid-template-columns:1fr 280px;gap:14px}
.home-board{position:relative;border-radius:var(--r-lg);overflow:hidden;border:3px solid #fff8e6;box-shadow:var(--shadow);aspect-ratio:16/10}
.home-board>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.home-grid{position:absolute;inset:6% 4% 4%;display:grid;grid-template-columns:repeat(8,1fr);grid-template-rows:repeat(5,1fr);gap:4px}
.cell{border-radius:10px;border:2px dashed rgba(255,255,255,.55);background:rgba(255,255,255,.12);font-size:clamp(22px,3.4vw,40px);display:grid;place-items:center;transition:all var(--t)}
.cell.filled{border-color:transparent;background:transparent;filter:drop-shadow(0 4px 4px rgba(0,0,0,.25))}
.home-board.placing .cell:not(.filled){background:rgba(255,248,200,.35);border-color:#fff3b0}
.home-sp{position:absolute;width:15%;left:42%;bottom:4%;pointer-events:none}
.inv{display:grid;grid-template-columns:repeat(auto-fill,minmax(76px,1fr));gap:8px}
.inv button{padding:6px;border-radius:12px;background:#fffdf5;border:2px solid var(--kraft-edge);font-size:12px;font-weight:700;min-height:76px}
.inv button .e{font-size:28px;display:block}
.inv button.on{border-color:var(--sun);background:#fff4d4}

/* 小舖 / 圖鑑 */
.tabs{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.tabs button{min-height:44px;padding:6px 16px;border-radius:999px;background:#fff8e6;border:2px solid var(--kraft-edge);font-weight:900}
.tabs button.on{background:var(--leaf);color:#fff;border-color:var(--leaf-d)}
.shop-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.sitem{padding:10px;border-radius:16px;background:#fffdf5;border:2px solid var(--kraft-edge);text-align:center;display:flex;flex-direction:column;gap:6px;align-items:center}
.sitem .pv{width:80px;height:80px;display:grid;place-items:center;font-size:44px}
.sitem .btn{min-height:40px;padding:6px 14px;font-size:14px}
.mats{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.book-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.bk{padding:10px;border-radius:16px;background:#fffdf5;border:2px solid var(--kraft-edge);text-align:center;font-size:14px}
.bk .pv{width:100px;margin:0 auto}
.bk.unk .pv{filter:brightness(0) opacity(.25)}
.badge{font-size:40px}
.bk.unk .badge{filter:grayscale(1) opacity(.35)}

/* 小遊戲 */
.games-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}
.game-card{text-align:left;padding:18px;border-radius:var(--r-lg);background:rgba(247,239,220,.97) var(--paper);border:2px solid var(--kraft-edge);box-shadow:var(--shadow);transition:transform var(--t)}
.game-card:hover{transform:translateY(-3px) rotate(.3deg)}
.game-card .ge{font-size:46px}
.mg-hud{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;font-weight:900;font-variant-numeric:tabular-nums}
.timer{height:10px;flex:1;border-radius:9px;background:#e4d6b4;overflow:hidden}
.timer i{display:block;height:100%;background:var(--sun);transition:width .2s linear}
.mem-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.mem{aspect-ratio:4/3;border-radius:14px;background:var(--leaf) var(--paper);border:3px solid #fff8e6;color:#fff;font-weight:900;font-size:15px;padding:6px;display:grid;place-items:center;box-shadow:0 4px 0 var(--leaf-d);transition:all var(--t)}
.mem.open{background:#fffdf5;color:var(--ink);border-color:var(--sun)}
.mem.got{background:var(--leaf-l);color:var(--ink);border-color:var(--leaf);box-shadow:none}
.portion-bar{position:relative;height:56px;border-radius:16px;background:#fff;border:3px solid var(--kraft-edge);overflow:hidden;margin:18px 0}
.portion-bar .zone{position:absolute;top:0;bottom:0;background:rgba(79,154,60,.3);border-left:3px solid var(--leaf);border-right:3px solid var(--leaf)}
.portion-bar .ptr{position:absolute;top:-2px;bottom:-2px;width:8px;margin-left:-4px;background:var(--berry);border-radius:4px}
.wheel{width:220px;height:220px;margin:6px auto;border-radius:50%;border:6px solid #fff8e6;box-shadow:var(--shadow);background:conic-gradient(#8fd36b 0 60deg,#f2b84b 0 120deg,#7fd1e6 0 180deg,#e7a36f 0 240deg,#c4a3f0 0 300deg,#ffc6dc 0 360deg);transition:transform 2s cubic-bezier(.2,.8,.2,1);position:relative}
.wheel::after{content:"🌱";position:absolute;inset:0;display:grid;place-items:center;font-size:44px}
.wheel-ptr{text-align:center;font-size:30px;line-height:1}

/* 小記 */
.memory-leaves{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
.mleaf{padding:12px 14px;border-radius:18px 4px 18px 4px;background:#eef8e3;border:2px solid #b9dca2}
.mleaf .st{font-size:12px;font-weight:900;padding:2px 8px;border-radius:99px;background:#fff;display:inline-block;margin-bottom:4px}

/* 拍照 */
.photo-frame{position:relative;aspect-ratio:4/3;border-radius:14px;overflow:hidden;border:10px solid #fff;box-shadow:var(--shadow);max-width:520px;margin:0 auto}
.photo-frame>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.photo-frame .sp{position:absolute;width:44%;left:28%;bottom:4%}
.photo-frame .cap{position:absolute;left:0;right:0;top:8px;text-align:center;font-family:var(--font-display);font-size:22px;color:#fff;text-shadow:0 2px 6px rgba(0,0,0,.5)}
.photo-frame .stk{position:absolute;font-size:30px}
.photo-out{display:block;max-width:min(100%,520px);margin:10px auto 0;border-radius:12px}

/* modal / toast */
.modal{position:fixed;inset:0;z-index:50;background:rgba(30,45,20,.45);display:grid;place-items:center;padding:16px;animation:fade .2s}
@keyframes fade{from{opacity:0}}
.modal-card{width:min(640px,100%);max-height:92vh;overflow:auto;background:var(--kraft) var(--paper);border:2px solid var(--kraft-edge);border-radius:var(--r-lg);box-shadow:var(--shadow);padding:22px;animation:pop .3s var(--t)}
.modal-card.wide{width:min(900px,100%)}
.toasts{position:fixed;top:84px;left:50%;transform:translateX(-50%);z-index:80;display:grid;gap:8px;pointer-events:none}
.toast{padding:10px 18px;border-radius:999px;background:#fffdf5;border:2px solid var(--leaf);font-weight:900;box-shadow:var(--shadow);animation:toast 2.6s var(--t) forwards;text-align:center}
@keyframes toast{0%{opacity:0;transform:translateY(-10px)}10%,85%{opacity:1;transform:none}100%{opacity:0}}

@media (max-width:900px){
  .scene-grid{grid-template-columns:repeat(2,1fr)}
  .spirit-layout,.home-wrap,.stepper{grid-template-columns:1fr}
  .stage-spirit{min-height:300px}
  .buddy .sp{width:90px}
  .marks{display:none}
}
@media (max-width:560px){
  .scene-grid{grid-template-columns:1fr}
  .intro-box{grid-template-columns:1fr;text-align:center}
  .intro-box .sp{width:120px;margin:0 auto}
  .match{grid-template-columns:1fr 1fr;gap:8px}
  .nav{justify-content:space-between;gap:2px;padding:6px 4px;margin:0 8px 8px}
  .nav button{flex:1 1 0;min-width:0;font-size:11px;padding:4px 0;white-space:nowrap}
  .nav button span{font-size:20px}
  .hud{margin:8px 8px 0;padding:8px 10px}
  .view{padding:10px 10px 12px}
  .buddy{display:none}
  .hud-spirit small{display:none}
  .mem-grid{grid-template-columns:repeat(3,1fr)}
}
@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}
.mem:not(.open):not(.got){font-size:34px}
