:root{
  --bg1:#fef6ec; --bg2:#f4ecff; --ink:#3a3140; --muted:#8a7f97;
  --card:#ffffff; --line:#eadff5;
  --shadow:0 8px 20px rgba(80,60,90,.14),0 2px 6px rgba(80,60,90,.10);
  --shadow-lift:0 20px 40px rgba(80,60,90,.24),0 6px 14px rgba(80,60,90,.16);
  --tabbar-h:84px; --topbar-h:64px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{height:100%;margin:0;}
body{
  font-family:-apple-system,"Hiragino Maru Gothic ProN","Hiragino Sans",sans-serif;
  color:var(--ink);
  background:
    radial-gradient(120% 90% at 15% 0%,#fff7ee 0%,transparent 55%),
    radial-gradient(120% 90% at 100% 100%,#efe7ff 0%,transparent 55%),
    linear-gradient(135deg,var(--bg1),var(--bg2));
  overflow:hidden;user-select:none;-webkit-user-select:none;
}
#topbar{position:fixed;top:0;left:0;right:0;height:var(--topbar-h);z-index:5;
  display:flex;align-items:center;padding:0 20px;padding-top:env(safe-area-inset-top);}
.app-title{font-size:22px;font-weight:800;opacity:.6;}
.icon-btn{margin-left:auto;border:none;background:#fff;border-radius:16px;
  width:64px;height:64px;font-size:24px;box-shadow:var(--shadow);cursor:pointer;}
#screen{position:fixed;top:var(--topbar-h);left:0;right:0;bottom:var(--tabbar-h);
  overflow:auto;-webkit-overflow-scrolling:touch;padding:14px;}
#tabbar{position:fixed;left:0;right:0;bottom:0;height:var(--tabbar-h);z-index:5;
  display:flex;background:rgba(255,255,255,.85);backdrop-filter:blur(10px);
  border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);}
.tab{flex:1;border:none;background:none;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:3px;font-size:14px;font-weight:800;
  color:var(--muted);cursor:pointer;min-height:64px;}
.tab .tab-emoji{font-size:26px;filter:grayscale(.3) opacity(.7);}
.tab.active{color:#7a5cc0;}
.tab.active .tab-emoji{filter:none;transform:translateY(-1px);}
/* 共通パーツ */
.big-btn{border:none;border-radius:22px;padding:18px 24px;font-size:20px;font-weight:800;
  box-shadow:var(--shadow);min-height:64px;cursor:pointer;background:#8f6fd6;color:#fff;width:100%;}
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:14px;margin-top:16px;}
.mini-card{position:relative;background:#fff;border-radius:20px;padding:16px 8px;text-align:center;
  box-shadow:var(--shadow);border-top:8px solid var(--accent,#ddd);cursor:pointer;}
.mini-card .m-emoji{font-size:44px;}
.mini-card .m-label{margin-top:8px;font-size:15px;font-weight:800;color:#544a5c;}
.mini-card.selected{outline:4px solid #8f6fd6;outline-offset:2px;}
.badge{position:absolute;top:8px;right:8px;background:#8f6fd6;color:#fff;font-size:11px;
  font-weight:800;padding:2px 8px;border-radius:999px;}
/* モーダル */
.modal-back{position:fixed;inset:0;background:rgba(50,40,60,.4);z-index:30;display:flex;
  align-items:center;justify-content:center;padding:16px;}
.modal{background:#fff;border-radius:26px;padding:22px;max-width:560px;width:100%;
  max-height:90vh;overflow:auto;box-shadow:var(--shadow-lift);}
.modal h2{margin:0 0 14px;font-size:22px;}
.row{margin:14px 0;}
.row .lbl{font-size:15px;font-weight:800;color:var(--muted);margin-bottom:8px;}
.emoji-pick{display:flex;flex-wrap:wrap;gap:8px;}
.emoji-pick button{width:52px;height:52px;font-size:26px;border:2px solid var(--line);
  background:#fff;border-radius:14px;cursor:pointer;}
.emoji-pick button.on{border-color:#8f6fd6;background:#f3edff;}
.color-pick{display:flex;gap:10px;flex-wrap:wrap;}
.color-pick button{width:44px;height:44px;border-radius:50%;border:3px solid #fff;
  box-shadow:0 0 0 1px var(--line);cursor:pointer;}
.color-pick button.on{box-shadow:0 0 0 3px #8f6fd6;}
input[type=text]{width:100%;font-size:20px;padding:12px 14px;border:2px solid var(--line);
  border-radius:14px;font-family:inherit;}
.modal-actions{display:flex;gap:12px;margin-top:18px;}
.btn-ghost{flex:1;background:#f2eef8;color:#8a7f97;}
.btn-primary{flex:2;background:#8f6fd6;color:#fff;}
.modal-actions button{border:none;border-radius:18px;padding:16px;font-size:18px;font-weight:800;
  min-height:64px;cursor:pointer;}
.empty{text-align:center;color:var(--muted);margin-top:60px;font-size:17px;}
.counter{font-size:20px;font-weight:800;color:#7a5cc0;text-align:center;margin:6px 0 2px;}
.hint-soft{text-align:center;color:var(--muted);font-size:14px;margin-top:8px;}

#doCanvas{position:absolute;inset:0;touch-action:none;}
.do-progress{position:absolute;top:6px;left:0;right:0;text-align:center;z-index:2;
  font-size:20px;font-weight:800;color:#7a5cc0;pointer-events:none;}
.pcard{position:absolute;width:140px;height:182px;perspective:900px;cursor:grab;touch-action:none;
  transition:box-shadow .18s ease, transform .18s cubic-bezier(.34,1.56,.64,1);}
.pcard.dragging{cursor:grabbing;transition:none;}
.pcard .pinner{position:relative;width:100%;height:100%;transform-style:preserve-3d;
  transition:transform .42s cubic-bezier(.3,.9,.35,1.2);will-change:transform;}
.pcard.flipped .pinner{transform:rotateY(180deg);}
.pface{position:absolute;inset:0;border-radius:24px;backface-visibility:hidden;
  -webkit-backface-visibility:hidden;display:flex;flex-direction:column;align-items:center;
  justify-content:center;box-shadow:var(--shadow);overflow:hidden;}
.pcard.dragging .pface{box-shadow:var(--shadow-lift);}
.pfront{background:#fff;}
.pfront::before{content:"";position:absolute;top:0;left:0;right:0;height:10px;background:var(--accent);}
.pfront .pe{font-size:60px;} .pfront .pl{margin-top:12px;font-size:18px;font-weight:800;color:#544a5c;padding:0 6px;text-align:center;}
/* 裏面: カード色を高彩度でベタ塗り＋白抜きチェック（表と明確に色が変わる） */
.pback{transform:rotateY(180deg);background:var(--accent);border:3px solid rgba(255,255,255,.6);}
.pback .pcheck{font-size:70px;color:#fff;filter:drop-shadow(0 3px 5px rgba(0,0,0,.2));}
.pback .pdone{margin-top:8px;font-size:17px;font-weight:900;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.15);}
.pcard.flipped{transform:scale(.9);z-index:0 !important;}
.pcard.flipped .pinner{filter:saturate(1.1);}
#doDone{position:fixed;inset:0;z-index:20;display:none;flex-direction:column;align-items:center;
  justify-content:center;gap:24px;background:radial-gradient(120% 120% at 50% 30%,#fffaf0,#f0e8ff);opacity:0;transition:opacity .5s;}
#doDone.show{display:flex;opacity:1;}
.done-big{font-size:42px;font-weight:900;color:#7a5cc0;text-shadow:0 3px 0 #fff,0 8px 18px rgba(122,92,192,.25);text-align:center;}
.done-sub{font-size:22px;font-weight:800;color:#e08a3c;}
.done-btns{display:flex;gap:16px;} .done-btns button{border:none;border-radius:20px;padding:16px 30px;
  font-size:20px;font-weight:800;box-shadow:var(--shadow);min-height:64px;min-width:150px;cursor:pointer;}
.done-btns .again{background:#8f6fd6;color:#fff;} .done-btns .end{background:#fff;color:#8a7f97;}
canvas.confetti{position:fixed;inset:0;z-index:19;pointer-events:none;}
