/* ==========================================================
   frame.css — 共通装飾
   ベース / 金枠ウィンドウ / パネル / バー / ボタン / タブ /
   メッセージウィンドウ / キャラスプライト
   ========================================================== */

/* ---------- ベース ---------- */
*,*::before,*::after{ box-sizing:border-box; margin:0; padding:0; }
html{ -webkit-text-size-adjust:100%; }
body{
  font-family:var(--font-body);
  color:var(--ink);
  background:var(--bg-0);
  background-image:
    radial-gradient(ellipse 120% 60% at 50% -10%, rgba(94,61,150,.28), rgba(0,0,0,0) 60%),
    radial-gradient(ellipse 100% 80% at 50% 110%, rgba(46,33,80,.5), rgba(0,0,0,0) 55%);
  min-height:100dvh;
  line-height:1.7;
  overflow-x:hidden;
}
img,svg{ display:block; max-width:100%; }
button,input,select,textarea{ font:inherit; color:inherit; }
:focus-visible{ outline:2px solid var(--gold-hi); outline-offset:2px; border-radius:2px; }
::selection{ background:var(--amethyst-deep); color:var(--ink); }

/* 星のまたたき（box-shadowの粒。reduced-motionで静止） */
.starfield{ position:fixed; inset:0; pointer-events:none; z-index:0; }
.starfield::before,.starfield::after{
  content:""; position:absolute; width:2px; height:2px; border-radius:50%;
  background:transparent;
}
.starfield::before{
  box-shadow:
    8vw 12vh 0 rgba(237,227,200,.5), 22vw 6vh 0 rgba(185,139,236,.45),
    34vw 18vh 0 rgba(237,227,200,.3), 47vw 9vh 0 rgba(237,227,200,.5),
    61vw 15vh 0 rgba(185,139,236,.35), 76vw 7vh 0 rgba(237,227,200,.45),
    90vw 13vh 0 rgba(237,227,200,.35), 5vw 38vh 0 rgba(237,227,200,.3),
    18vw 46vh 0 rgba(185,139,236,.3), 88vw 41vh 0 rgba(237,227,200,.4),
    95vw 55vh 0 rgba(185,139,236,.3), 9vw 68vh 0 rgba(237,227,200,.35),
    27vw 88vh 0 rgba(237,227,200,.3), 71vw 92vh 0 rgba(185,139,236,.3),
    93vw 78vh 0 rgba(237,227,200,.4), 3vw 90vh 0 rgba(237,227,200,.3);
  animation:twinkle 4.2s ease-in-out infinite;
}
.starfield::after{
  width:1px; height:1px;
  box-shadow:
    14vw 22vh 0 rgba(237,227,200,.4), 41vw 30vh 0 rgba(237,227,200,.3),
    55vw 5vh 0 rgba(237,227,200,.35), 68vw 24vh 0 rgba(185,139,236,.3),
    83vw 31vh 0 rgba(237,227,200,.3), 12vw 55vh 0 rgba(237,227,200,.25),
    37vw 72vh 0 rgba(185,139,236,.25), 52vw 84vh 0 rgba(237,227,200,.3),
    64vw 64vh 0 rgba(237,227,200,.25), 81vw 70vh 0 rgba(237,227,200,.3),
    97vw 24vh 0 rgba(237,227,200,.3), 45vw 96vh 0 rgba(185,139,236,.25);
  animation:twinkle 5.6s ease-in-out -2s infinite;
}
@keyframes twinkle{ 0%,100%{ opacity:1; } 50%{ opacity:.45; } }

/* ---------- アプリ外枠（アール・デコ） ---------- */
.app{
  position:relative;
  max-width:var(--app-w);
  margin:0 auto;
  min-height:100dvh;
  padding:14px 12px calc(var(--tab-h) + 96px);
  z-index:1;
}
.deco-frame{ position:fixed; top:4px; bottom:4px; left:50%; transform:translateX(-50%);
  width:min(100% - 8px, calc(var(--app-w) - 4px));
  pointer-events:none; z-index:2;
  border:1px solid rgba(201,168,75,.5); border-radius:14px;
}
.deco-frame::before{
  content:""; position:absolute; inset:3px;
  border:1px solid rgba(201,168,75,.22); border-radius:11px;
}
.deco-frame i{
  position:absolute; width:9px; height:9px;
  border:1px solid var(--gold-line); background:var(--bg-0);
  transform:rotate(45deg);
  box-shadow:0 0 6px rgba(244,217,138,.35);
}
.deco-frame i:nth-child(1){ top:-5px; left:14px; }
.deco-frame i:nth-child(2){ top:-5px; right:14px; }
.deco-frame i:nth-child(3){ bottom:-5px; left:14px; }
.deco-frame i:nth-child(4){ bottom:-5px; right:14px; }
.deco-frame em{
  position:absolute; top:-9px; left:50%; transform:translateX(-50%);
  font-style:normal; font-size:11px; line-height:1;
  color:var(--amethyst); text-shadow:0 0 8px rgba(155,107,217,.9);
  background:var(--bg-0); padding:2px 6px;
}

/* ---------- ヘッダー ---------- */
.app-head{ text-align:center; margin-bottom:var(--sp-4); }
.app-title{
  font-family:var(--font-deco); font-weight:700;
  font-size:clamp(20px, 5.6vw, 26px);
  letter-spacing:.06em;
  background:linear-gradient(180deg, var(--gold-hi), var(--gold) 58%, var(--gold-deep));
  -webkit-background-clip:text; background-clip:text; color:transparent;
  filter:drop-shadow(0 2px 0 rgba(0,0,0,.55));
}
.app-title .tw{ color:var(--gold); -webkit-text-fill-color:var(--gold); font-size:.62em; vertical-align:.2em; padding:0 .35em; }
.app-banner{
  display:inline-block; margin-top:6px;
  font-family:var(--font-mincho); font-weight:600; font-size:11.5px;
  letter-spacing:.32em; text-indent:.32em; color:var(--ink-gold);
  background:linear-gradient(180deg, var(--panel-hi), var(--panel));
  border-top:1px solid rgba(201,168,75,.55); border-bottom:1px solid rgba(201,168,75,.55);
  padding:3px 18px;
  clip-path:polygon(7px 0, calc(100% - 7px) 0, 100% 50%, calc(100% - 7px) 100%, 7px 100%, 0 50%);
}

/* 上部ピル（ストリーク・通貨） */
.top-bar{ display:flex; justify-content:center; gap:var(--sp-2); margin-top:var(--sp-3); }
.pill{
  display:inline-flex; align-items:center; gap:5px;
  font-family:var(--font-num); font-size:9px; color:var(--ink);
  background:rgba(36,26,56,.85); border:1px solid rgba(201,168,75,.4);
  border-radius:999px; padding:4px 10px;
  box-shadow:inset 0 1px 0 rgba(244,217,138,.12), 0 2px 6px rgba(0,0,0,.35);
}
.pill .icon{ margin-top:-1px; }
.pill.streak{ color:var(--streak); border-color:rgba(240,132,60,.5); }

/* ---------- パネル / 金枠ウィンドウ ---------- */
.panel{
  position:relative;
  background:linear-gradient(180deg, var(--panel-hi), var(--panel) 72%);
  border:1px solid var(--gold-line);
  border-radius:var(--rad);
  box-shadow:inset 0 0 0 1px rgba(244,217,138,.1), inset 0 12px 22px rgba(0,0,0,.16), var(--shadow-panel);
  padding:20px 14px 14px;
  margin-bottom:var(--sp-5);
}
.panel::before{
  content:""; position:absolute; inset:4px; pointer-events:none;
  border:1px solid rgba(201,168,75,.18);
  border-radius:calc(var(--rad) - 4px);
}
.panel-title{
  position:absolute; top:0; left:50%; transform:translate(-50%,-52%);
  font-family:var(--font-mincho); font-weight:700; font-size:13px;
  letter-spacing:.18em; text-indent:.18em; color:var(--ink-gold); white-space:nowrap;
  background:linear-gradient(180deg, var(--panel-hi), var(--panel));
  border:1px solid var(--gold-line); border-radius:999px;
  padding:3px 16px;
  box-shadow:0 2px 8px rgba(0,0,0,.5), inset 0 1px 0 rgba(244,217,138,.18);
}
.panel-title::before{ content:"✦ "; color:var(--gold); }
.panel-title::after{ content:" ✦"; color:var(--gold); }

.win{
  background:linear-gradient(180deg, var(--panel-hi), var(--bg-1));
  border:2px solid var(--gold);
  border-radius:var(--rad);
  box-shadow:0 0 0 1px #3A2B12, 0 0 0 2px rgba(244,217,138,.22), var(--shadow-pop),
             inset 0 1px 0 rgba(244,217,138,.25);
}

.divider{
  display:flex; align-items:center; gap:8px;
  margin:var(--sp-3) 0; color:var(--gold-deep); font-size:10px;
}
.divider::before,.divider::after{
  content:""; flex:1; height:1px;
  background:linear-gradient(90deg, transparent, rgba(201,168,75,.45), transparent);
}

/* ---------- バー ---------- */
.bar{
  height:14px; background:#0E0A18;
  border:1px solid var(--gold-deep); border-radius:4px;
  box-shadow:inset 0 2px 4px rgba(0,0,0,.7), 0 1px 0 rgba(244,217,138,.12);
  overflow:hidden;
}
.bar>i{
  display:block; height:100%; width:0%;
  background:repeating-linear-gradient(90deg, var(--exp-a) 0 6px, var(--exp-b) 6px 8px);
  box-shadow:inset 0 2px 0 rgba(255,255,255,.22);
  transition:width .6s steps(8, end);
}
.bar.slim{ height:11px; border-radius:3px; }
.bar.stat>i{
  background:repeating-linear-gradient(90deg, var(--bar-c, var(--amethyst)) 0 6px,
              color-mix(in srgb, var(--bar-c, var(--amethyst)) 62%, #000) 6px 8px);
}

/* ---------- ボタン ---------- */
.btn-gold{
  display:block; width:100%;
  font-size:16px; letter-spacing:.22em; text-indent:.22em; color:#3B2606;
  background:linear-gradient(180deg, #FFE9A8, var(--gold) 56%, var(--gold-deep));
  border:1px solid #6B4E14; border-radius:8px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.6), inset 0 -2px 0 rgba(0,0,0,.22),
             0 3px 0 #5E430F, 0 5px 12px rgba(0,0,0,.5);
  text-shadow:0 1px 0 rgba(255,255,255,.35);
  padding:11px 10px 10px;
  cursor:pointer;
}
.btn-gold:active{
  transform:translateY(2px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.6), inset 0 -1px 0 rgba(0,0,0,.22),
             0 1px 0 #5E430F, 0 2px 6px rgba(0,0,0,.5);
}
.btn-ghost{
  display:inline-block;
  font-size:13px; color:var(--ink-gold); letter-spacing:.1em;
  background:rgba(14,10,24,.6);
  border:1px solid rgba(201,168,75,.5); border-radius:var(--rad-s);
  padding:6px 14px; cursor:pointer;
}
.btn-ghost:hover{ border-color:var(--gold); background:rgba(46,33,80,.6); }
.btn-ghost:active{ transform:translateY(1px); }
.btn-ghost.danger{ color:#E89B94; border-color:rgba(226,87,76,.5); }

/* チェックボタン（デイリークエスト） */
.check{
  flex:0 0 auto; width:24px; height:24px;
  display:flex; align-items:center; justify-content:center;
  font-size:14px; color:#3B2606;
  background:#0E0A18; border:1px solid rgba(201,168,75,.6); border-radius:5px;
  box-shadow:inset 0 2px 4px rgba(0,0,0,.6);
  cursor:pointer;
}
.check[aria-pressed="true"]{
  background:linear-gradient(180deg, #FFE9A8, var(--gold));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.5), 0 0 8px rgba(244,217,138,.4);
}
.check[aria-pressed="true"]::after{ content:"✓"; font-weight:bold; }

/* 入力 */
.input{
  width:100%;
  font-size:15px; color:var(--ink);
  background:#0E0A18;
  border:1px solid rgba(201,168,75,.45); border-radius:var(--rad-s);
  padding:9px 10px;
}
.input::placeholder{ color:#6A5E8C; }
.input:focus{ outline:2px solid var(--gold); outline-offset:1px; }
select.input{ width:auto; padding:8px 6px; }

.field-label{
  font-size:12px; color:var(--amethyst-hi); letter-spacing:.12em;
  margin:var(--sp-3) 0 var(--sp-1);
}
.field-label::before{ content:"▼ "; color:var(--gold); font-size:10px; }

/* ---------- 下部タブ ---------- */
.tabbar{
  position:fixed; bottom:0; left:50%; transform:translateX(-50%);
  width:min(100%, var(--app-w));
  display:grid; grid-template-columns:repeat(5, 1fr); gap:2px;
  background:linear-gradient(180deg, var(--panel), var(--bg-0) 85%);
  border-top:1px solid var(--gold-line);
  box-shadow:0 -6px 18px rgba(0,0,0,.55);
  padding:7px 6px calc(7px + env(safe-area-inset-bottom));
  z-index:40;
}
.tab{
  display:flex; flex-direction:column; align-items:center; gap:4px;
  padding:5px 2px 4px;
  color:var(--ink-mut); text-decoration:none;
  font-family:var(--font-num); font-size:7px; letter-spacing:.06em;
  border-radius:8px; border:1px solid transparent;
  position:relative;
}
.tab .icon{ filter:grayscale(.6) brightness(.72); }
.tab[aria-current="page"]{
  color:var(--ink-gold);
  background:linear-gradient(180deg, rgba(46,33,80,.9), rgba(36,26,56,.4));
  border-color:rgba(201,168,75,.45);
}
.tab[aria-current="page"] .icon{ filter:none; }
.tab[aria-current="page"]::before{
  content:"◆"; position:absolute; top:-11px; left:50%; transform:translateX(-50%);
  font-size:8px; color:var(--gold); text-shadow:0 0 6px rgba(244,217,138,.8);
}

/* ---------- メッセージウィンドウ ---------- */
.msg-win{
  position:fixed; left:50%;
  bottom:calc(var(--tab-h) + 14px + env(safe-area-inset-bottom));
  transform:translate(-50%, calc(100% + var(--tab-h) + 40px));
  width:min(calc(var(--app-w) - 20px), calc(100% - 20px));
  color:var(--ink);
  padding:13px 18px 15px;
  min-height:66px;
  font-size:15px; line-height:1.8;
  cursor:pointer; user-select:none;
  transition:transform .25s ease-out;
  z-index:50;
}
.msg-win.show{ transform:translate(-50%, 0); }
.msg-cursor{
  position:absolute; right:13px; bottom:7px;
  color:var(--gold);
  animation:blink .8s steps(1) infinite;
}
@keyframes blink{ 50%{ opacity:0; } }

/* ---------- レベルアップ演出 ---------- */
.lvup-overlay{
  position:fixed; inset:0; z-index:60;
  display:flex; align-items:center; justify-content:center;
  background:radial-gradient(circle, rgba(244,217,138,.5), rgba(20,16,31,.82));
  opacity:0; pointer-events:none;
  transition:opacity .2s;
}
.lvup-overlay.show{ opacity:1; }
.lvup-text{
  font-family:var(--font-num);
  font-size:clamp(20px, 6vw, 34px);
  color:#fff;
  text-shadow:3px 3px 0 var(--gold-deep), 6px 6px 0 rgba(0,0,0,.4);
  text-align:center; line-height:1.7;
}
.lvup-overlay.show .lvup-text{ animation:lvup-bounce .9s ease-out; }
.lvup-text small{
  display:block; margin-top:10px;
  font-family:var(--font-body); font-size:15px; color:#FFF3CF;
  text-shadow:2px 2px 0 rgba(0,0,0,.55);
}
@keyframes lvup-bounce{
  0%{ transform:scale(.4); opacity:0; }
  55%{ transform:scale(1.15); opacity:1; }
  100%{ transform:scale(1); }
}

/* ステータス上昇ポップ */
.stat-pop{
  position:absolute; right:2px; top:-10px;
  font-family:var(--font-num); font-size:10px; color:var(--gold-hi);
  text-shadow:1px 1px 0 rgba(0,0,0,.7), 0 0 8px rgba(244,217,138,.6);
  animation:pop-up 1.1s ease-out forwards;
  pointer-events:none; z-index:5;
}
@keyframes pop-up{
  0%{ opacity:0; transform:translateY(6px); }
  20%{ opacity:1; }
  100%{ opacity:0; transform:translateY(-16px); }
}

/* ---------- アイコン / キャラスプライト ---------- */
.icon{ display:inline-block; vertical-align:middle; flex:0 0 auto; }

.witch{
  --scale:.5;
  width:calc(232px * var(--scale));
  height:calc(252px * var(--scale));
  background-image:url(../../assets/chara.png);
  background-repeat:no-repeat;
  background-size:calc(696px * var(--scale)) calc(1008px * var(--scale));
  /* chara.png の3コマは右へ進むように描かれている（頭の中心が
     コマごとに +39 / -234 / -515 とずれる）。各コマの頭が
     つねに枠の中央へ来るよう background-position-x を補正して、
     横へ動かず「その場で足踏み」に見せる。 */
  background-position:calc(-234px * var(--scale)) 0;
  image-rendering:pixelated;
}
/* steps(1) で各コマを瞬間カットに切り替える。
   linear だと切り替えの一瞬だけ背景がスクロール途中の絵を見せてしまい、
   コマが二重に重なって“ざんぞう／ブレ”に見える。ステップ補間にして、
   キーフレーム間は完全に静止 → 25/50/75% でカクッと切る。 */
.witch.anim{ animation:witch-step 1.2s steps(1) infinite; }
@keyframes witch-step{
  0%  { background-position-x:calc(-234px * var(--scale)); } /* 休め（中央コマ） */
  25% { background-position-x:calc(  39px * var(--scale)); } /* 左足を出す */
  50% { background-position-x:calc(-234px * var(--scale)); } /* 休め */
  75% { background-position-x:calc(-515px * var(--scale)); } /* 右足を出す */
}

/* 成長段階のオーラ */
.witch-box{ position:relative; }
.witch-box.stage-2 .witch{ filter:drop-shadow(0 0 7px rgba(185,139,236,.55)); }
.witch-box.stage-3 .witch{
  filter:drop-shadow(0 0 4px rgba(244,217,138,.75)) drop-shadow(0 0 14px rgba(155,107,217,.6));
}
.witch-box .spark{ display:none; position:absolute; font-size:13px; color:var(--gold-hi);
  text-shadow:0 0 7px rgba(244,217,138,.9); pointer-events:none; }
.witch-box.stage-3 .spark{ display:block; animation:twinkle 1.6s ease-in-out infinite; }
.witch-box.stage-3 .spark.s1{ top:6%; left:8%; }
.witch-box.stage-3 .spark.s2{ top:18%; right:6%; animation-delay:-.8s; }

/* ---------- ユーティリティ ---------- */
.num{ font-family:var(--font-num); }
.muted{ color:var(--ink-mut); }
.center{ text-align:center; }
.visually-hidden{
  position:absolute; width:1px; height:1px; margin:-1px;
  clip-path:inset(50%); overflow:hidden; white-space:nowrap;
}

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.001s !important;
    animation-iteration-count:1 !important;
    transition-duration:.001s !important;
  }
  .witch.anim{ animation:none; }
  .starfield::before,.starfield::after{ animation:none; }
}
