/* =========================================================================
   style.css -- 濃いピンク×ゴールド / 可愛い / スマホ縦対応
   UI装飾(バー/ハート/カード枠/ボタン/リング)はCSSでOK。
   人物はimgのみ(CSS/SVGで人物を手描きしない)。
   ========================================================================= */
:root{
  --pink:#ff4f9a; --pink-deep:#d63384; --gold:#ffcf4d; --gold-deep:#e0a800;
  --bg:#1a0c18; --bg2:#2a0f24; --card:#fff4fa; --ink:#3a1530; --muted:#9a6f8a;
  --A:#33c777; --B:#3aa0ff; --C:#ffab2e; --X:#9aa0ac;
  --shadow:0 8px 24px rgba(0,0,0,.35);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  font-family:"Hiragino Maru Gothic ProN","Rounded Mplus 1c","Segoe UI",system-ui,sans-serif;
  background:
    radial-gradient(1200px 600px at 50% -10%, #3a1430 0%, transparent 60%),
    linear-gradient(160deg,var(--bg) 0%, var(--bg2) 100%);
  color:#fff; min-height:100vh; overflow-x:hidden;
}
.wrap{max-width:480px; margin:0 auto; padding:14px 14px 40px; position:relative}

/* ---- ヘッダー ---- */
.topbar{
  display:flex; align-items:center; gap:8px; margin-bottom:10px;
  background:linear-gradient(90deg,var(--pink-deep),var(--pink));
  border:2px solid var(--gold); border-radius:16px; padding:10px 12px;
  box-shadow:var(--shadow);
}
.topbar h1{font-size:16px; margin:0; letter-spacing:.5px; text-shadow:0 1px 0 rgba(0,0,0,.25)}
.topbar .sub{font-size:10.5px; opacity:.95; margin-top:2px}
.topbar .crown{font-size:22px; filter:drop-shadow(0 2px 0 rgba(0,0,0,.2))}
.badge-mock{
  margin-left:auto; font-size:9.5px; background:var(--gold); color:#5a3b00;
  font-weight:800; padding:3px 8px; border-radius:999px; white-space:nowrap;
}

/* ---- ロースター説明 ---- */
.concept{
  background:rgba(255,255,255,.06); border:1px dashed rgba(255,207,77,.5);
  border-radius:14px; padding:10px 12px; font-size:11.5px; line-height:1.7; margin-bottom:12px;
}
.concept b{color:var(--gold)}

/* ---- 全体進捗ダッシュボード ---- */
.dash{
  background:linear-gradient(135deg,rgba(255,79,154,.16),rgba(255,207,77,.10));
  border:1px solid rgba(255,207,77,.4); border-radius:16px; padding:11px 13px; margin-bottom:12px;
  box-shadow:var(--shadow);
}
.dash-head{font-size:11px; font-weight:800; color:var(--gold); margin-bottom:8px}
.dash-ring-row{display:flex; align-items:center; gap:16px}
.ring{
  --p:0; width:74px; height:74px; border-radius:50%; flex:0 0 auto; position:relative;
  background:conic-gradient(var(--gold) calc(var(--p)*1%), rgba(255,255,255,.10) 0);
  display:flex; align-items:center; justify-content:center;
  transition:background .6s ease;
}
.ring::after{content:""; position:absolute; inset:8px; border-radius:50%; background:#23102063}
.ring-num{position:relative; font-size:20px; font-weight:900; color:#fff}
.ring-num small{font-size:10px; font-weight:800; opacity:.8}
.dash-stats{display:flex; gap:14px; flex-wrap:wrap}
.ds{display:flex; flex-direction:column; align-items:center; min-width:48px}
.ds b{font-size:20px; font-weight:900; color:var(--gold); line-height:1}
.ds span{font-size:9px; color:rgba(255,255,255,.75); margin-top:3px}

/* ---- 適性凡例 ---- */
.legend{display:flex; flex-wrap:wrap; gap:6px; margin-bottom:10px}
.legend .chip{font-size:10px; padding:4px 8px; border-radius:999px; font-weight:800; color:#1a0c18}
.fit-A{background:var(--A)} .fit-B{background:var(--B)} .fit-C{background:var(--C)} .fit-X{background:var(--X)}
.legend .chip small{font-weight:600; opacity:.85}

/* ---- 絞り込み・ソート ---- */
.controls{margin-bottom:12px}
.filters{display:flex; flex-wrap:wrap; gap:6px; margin-bottom:8px}
.fchip{
  font-size:10.5px; font-weight:800; padding:6px 11px; border-radius:999px; cursor:pointer;
  background:rgba(255,255,255,.08); color:#fff; border:1px solid rgba(255,255,255,.18);
  transition:all .12s ease;
}
.fchip.on{background:var(--gold); color:#5a3b00; border-color:var(--gold); box-shadow:0 2px 8px rgba(255,207,77,.4)}
.control-row{display:flex; align-items:center; gap:8px; flex-wrap:wrap}
.ctl-label{font-size:10px; color:rgba(255,255,255,.8); display:flex; align-items:center; gap:6px}
.sel{
  font-size:11px; font-weight:700; padding:6px 8px; border-radius:10px; cursor:pointer;
  background:#3a1a30; color:#fff; border:1px solid rgba(255,207,77,.4);
}
.ctl-btn{
  font-size:10.5px; font-weight:800; padding:6px 11px; border-radius:999px; cursor:pointer;
  background:rgba(255,255,255,.08); color:#fff; border:1px solid rgba(255,255,255,.18); margin-left:auto;
}
.ctl-btn.on{background:var(--gold); color:#5a3b00; border-color:var(--gold)}

/* ---- ロースターグリッド ---- */
.grid{display:grid; grid-template-columns:1fr 1fr; gap:10px}
.empty{font-size:11px; color:rgba(255,255,255,.6); text-align:center; padding:24px 0}
.card{
  background:var(--card); color:var(--ink); border-radius:16px; overflow:hidden;
  box-shadow:var(--shadow); border:2px solid transparent; cursor:pointer; position:relative;
  transition:transform .12s ease, box-shadow .12s ease;
}
.card:hover{transform:translateY(-2px); box-shadow:0 12px 28px rgba(0,0,0,.45)}
.card:active{transform:scale(.97)}
.card .portrait{
  height:118px; display:flex; align-items:center; justify-content:center; position:relative;
  background:linear-gradient(160deg, var(--ct-sub,#ffe6f3), var(--ct-main,#ff9bc4));
}
.card .portrait img{width:100%; height:100%; object-fit:cover; display:block}
.ph{ /* 立ち絵プレースホルダ */
  position:absolute; inset:6px; border:2px dashed rgba(255,255,255,.85); border-radius:12px;
  display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center;
  color:#fff; font-size:9.5px; line-height:1.5; padding:6px; background:rgba(0,0,0,.12);
}
.ph .ph-ico{font-size:24px; filter:drop-shadow(0 2px 3px rgba(0,0,0,.3))}
.ph-state{
  display:inline-block; margin-top:2px; font-size:9px; font-weight:800;
  background:rgba(255,255,255,.22); padding:1px 7px; border-radius:999px;
}
.card .fit-tag{
  position:absolute; top:6px; right:6px; width:24px; height:24px; border-radius:50%;
  display:flex; align-items:center; justify-content:center; font-weight:900; font-size:13px;
  color:#1a0c18; box-shadow:0 2px 6px rgba(0,0,0,.3);
}
/* お気に入りボタン(左上) */
.fav-btn{
  position:absolute; top:5px; left:5px; width:26px; height:26px; border-radius:50%;
  border:none; cursor:pointer; font-size:14px; line-height:1; z-index:3;
  background:rgba(0,0,0,.28); color:#fff; display:flex; align-items:center; justify-content:center;
  transition:transform .12s ease;
}
.fav-btn.on{background:rgba(255,207,77,.95); filter:drop-shadow(0 0 4px rgba(255,207,77,.7))}
.fav-btn:active{transform:scale(.85)}
/* 進捗バッジ(右下) */
.prog-badge{
  position:absolute; bottom:5px; right:5px; font-size:9px; font-weight:900; z-index:3;
  background:rgba(0,0,0,.45); color:#fff; padding:2px 7px; border-radius:999px;
  border:1px solid rgba(255,255,255,.25);
}
.prog-badge.maxed{background:linear-gradient(90deg,var(--gold),var(--gold-deep)); color:#3a1530}
.card .body{padding:8px 9px 10px}
.card .name{font-size:13px; font-weight:900; line-height:1.2}
.card .genre{font-size:10px; color:var(--muted); margin-top:2px}
.card .hc{font-size:9px; color:#b07a9b; margin-top:4px}
.card .fitline{font-size:9.5px; margin-top:5px; font-weight:700}
/* カード内ミニ好感度バー */
.cardmeter{height:5px; background:rgba(58,21,48,.12); border-radius:999px; overflow:hidden; margin-top:6px}
.cardfill{height:100%; background:linear-gradient(90deg,var(--ct-main,var(--pink)),var(--gold)); border-radius:999px; transition:width .5s ease}
.card.warn{outline:2px solid #ff5e5e33}
.card .ng-ribbon{
  position:absolute; left:-26px; top:10px; transform:rotate(-30deg);
  background:#e23b3b; color:#fff; font-size:8px; font-weight:800; padding:2px 26px; letter-spacing:1px; z-index:2;
}

/* ---- プレイ画面 ---- */
.screen{display:none}
.screen.active{display:block; animation:fade .25s ease}
@keyframes fade{from{opacity:0; transform:translateY(6px)}to{opacity:1; transform:none}}

.play-head{
  display:flex; align-items:center; gap:10px; margin-bottom:10px;
  background:linear-gradient(90deg,var(--ct-main,var(--pink)),var(--ct-sub,var(--gold)));
  border:2px solid var(--gold); border-radius:16px; padding:8px 10px; color:#fff;
  text-shadow:0 1px 2px rgba(0,0,0,.4);
}
.ph-titles{flex:1 1 auto; min-width:0}
.back-btn{
  background:rgba(0,0,0,.28); color:#fff; border:none; border-radius:999px;
  padding:7px 12px; font-size:12px; font-weight:800; cursor:pointer; white-space:nowrap;
}
.play-head .nm{font-size:15px; font-weight:900}
.play-head .gn{font-size:10px; opacity:.95}
.fav-play{
  background:rgba(0,0,0,.28); color:#fff; border:none; border-radius:50%;
  width:34px; height:34px; font-size:17px; cursor:pointer; flex:0 0 auto;
}
.fav-play.on{background:rgba(255,207,77,.95); filter:drop-shadow(0 0 5px rgba(255,207,77,.7))}

/* 量産思想の可視化バー */
.swap-note{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  background:rgba(0,0,0,.28); border:1px solid rgba(255,207,77,.35); border-radius:12px;
  padding:7px 10px; margin-bottom:10px; font-size:10px; line-height:1.5;
}
.swap-tag{
  background:var(--gold); color:#5a3b00; font-weight:900; font-size:9.5px;
  padding:2px 8px; border-radius:999px; white-space:nowrap;
}
.swap-body{color:rgba(255,255,255,.88)}
.swap-body b{color:var(--gold)}
.swatch{display:inline-block; width:11px; height:11px; border-radius:3px; vertical-align:-1px; margin:0 1px; border:1px solid rgba(255,255,255,.5)}

/* 立ち絵ステージ */
.stage{
  position:relative; border-radius:16px; overflow:hidden; height:240px; margin-bottom:10px;
  background:linear-gradient(160deg,var(--ct-sub,#ffe6f3),var(--ct-main,#ff9bc4));
  box-shadow:var(--shadow); display:flex; align-items:flex-end; justify-content:center;
  transition:box-shadow .5s ease;
}
.stage img{height:100%; object-fit:contain; display:block}
.stage .ph{inset:14px}
.stage .ph .ph-ico{font-size:40px}
.stage .ph-state{font-size:11px; margin-top:4px}
/* Lvに応じた“状態変化”グロー(立ち絵が映える下地。人物は描かない) */
.stage.glow-2{box-shadow:0 0 0 0 rgba(0,0,0,0), inset 0 0 40px rgba(255,255,255,.10), var(--shadow)}
.stage.glow-3{box-shadow:inset 0 0 60px rgba(255,143,193,.25), var(--shadow)}
.stage.glow-4{box-shadow:inset 0 0 80px rgba(255,79,154,.35), 0 0 18px rgba(255,79,154,.25), var(--shadow)}
.stage.glow-5{box-shadow:inset 0 0 90px rgba(255,207,77,.45), 0 0 26px rgba(255,207,77,.45), var(--shadow); animation:stagePulse 2.4s ease-in-out infinite}
@keyframes stagePulse{0%,100%{filter:saturate(1)}50%{filter:saturate(1.25) brightness(1.05)}}

/* 好感度メーター + Lv */
.meter-wrap{margin-bottom:10px}
.meter-top{display:flex; align-items:center; justify-content:space-between; font-size:11px; margin-bottom:4px}
.lv-pill{
  background:var(--gold); color:#5a3b00; font-weight:900; font-size:11px;
  padding:2px 10px; border-radius:999px;
}
.lv-name{color:var(--gold); font-weight:800}
.meter{
  height:16px; background:rgba(255,255,255,.12); border-radius:999px; overflow:hidden;
  border:1px solid rgba(255,207,77,.4); position:relative;
}
.meter .fill{
  height:100%; width:0%; border-radius:999px;
  background:linear-gradient(90deg,var(--pink),var(--gold)); transition:width .5s ease;
}
.ticks{position:absolute; inset:0; pointer-events:none}
.tick{position:absolute; top:2px; bottom:2px; width:1.5px; background:rgba(255,255,255,.45); border-radius:2px}
.hearts{margin-top:6px; font-size:13px; letter-spacing:2px}
.hearts .on{color:var(--pink); filter:drop-shadow(0 0 3px rgba(255,79,154,.6))}
.hearts .off{color:rgba(255,255,255,.18)}

/* 会話ボックス */
.dialog{
  background:rgba(255,255,255,.95); color:var(--ink); border-radius:16px;
  padding:12px 14px; box-shadow:var(--shadow); margin-bottom:10px; min-height:96px;
}
.dialog .narr{font-size:11px; color:#7a4f6b; margin-bottom:6px}
.dialog .line{font-size:13.5px; font-weight:800; line-height:1.6}

/* 選択肢 */
.choices{display:flex; flex-direction:column; gap:8px}
.choice{
  background:linear-gradient(90deg,#fff,#fff0f7); color:var(--ink); border:2px solid var(--pink);
  border-radius:14px; padding:11px 12px; font-size:13px; font-weight:800; cursor:pointer;
  text-align:left; box-shadow:0 3px 0 var(--pink-deep); transition:transform .08s;
}
.choice:active{transform:translateY(2px); box-shadow:0 1px 0 var(--pink-deep)}
.choice .pt{float:right; color:var(--pink-deep); font-size:11px}
.choice .pt.ng{color:#9aa0ac}

/* 解放リスト */
.unlocks{background:rgba(255,255,255,.06); border-radius:14px; padding:10px 12px; margin-top:12px}
.unlocks h3{font-size:11px; margin:0 0 6px; color:var(--gold)}
.unlocks ul{margin:0; padding:0; list-style:none; font-size:11px; line-height:1.9}
.unlocks li{display:flex; gap:6px; align-items:center}
.unlocks li.locked{opacity:.4}
.unlocks li.open{animation:none}
.unlocks li .u-ico{width:16px; text-align:center}
.cg-note{font-size:9.5px; color:var(--gold); opacity:.9; margin-top:4px}

.warn-banner{
  background:#3a1414; border:1px solid #e23b3b; color:#ffb4b4; font-size:11px;
  border-radius:12px; padding:9px 11px; margin-bottom:10px; line-height:1.6;
}

.reset-row{margin-top:14px; text-align:center}
.reset-btn{background:none; border:1px solid rgba(255,255,255,.3); color:#cda; font-size:10.5px;
  padding:6px 12px; border-radius:999px; cursor:pointer}

/* トースト */
.toast{
  position:fixed; left:50%; bottom:24px; transform:translateX(-50%) translateY(40px);
  background:linear-gradient(90deg,var(--gold),var(--pink)); color:#3a1530;
  font-weight:900; font-size:13px; padding:12px 20px; border-radius:999px;
  box-shadow:0 10px 30px rgba(0,0,0,.4); opacity:0; transition:all .35s ease; z-index:50;
  border:2px solid #fff; max-width:90%; text-align:center;
}
.toast.show{opacity:1; transform:translateX(-50%) translateY(0)}

/* Lv UP 解放トースト(中央・大きめ) */
.levelup{
  position:fixed; inset:0; display:flex; align-items:center; justify-content:center;
  pointer-events:none; opacity:0; z-index:60; transition:opacity .25s ease;
}
.levelup.show{opacity:1}
.lu-card{
  background:linear-gradient(160deg,#fff,#fff0f7); color:var(--ink);
  border:3px solid var(--gold); border-radius:20px; padding:18px 26px; text-align:center;
  box-shadow:0 20px 60px rgba(0,0,0,.5); transform:scale(.7);
  animation:luPop .5s cubic-bezier(.2,1.3,.4,1) forwards;
}
.levelup.show .lu-card{transform:scale(1)}
@keyframes luPop{0%{transform:scale(.6); opacity:0}60%{transform:scale(1.08)}100%{transform:scale(1); opacity:1}}
.lu-spark{font-size:30px}
.lu-lv{font-size:20px; font-weight:900; color:var(--pink-deep); margin-top:2px}
.lu-name{font-size:15px; font-weight:900; color:var(--gold-deep)}
.lu-unlock{margin-top:8px; font-size:11px; font-weight:800; color:#7a4f6b;
  background:rgba(255,207,77,.25); border-radius:10px; padding:5px 10px}

/* 演出レイヤー(ハート/紙吹雪) */
.fx{position:fixed; inset:0; pointer-events:none; overflow:hidden; z-index:55}
.fh{position:absolute; bottom:46%; font-size:26px; font-weight:900;
  animation:fhRise 1.1s ease-out forwards; text-shadow:0 0 6px rgba(255,79,154,.5)}
@keyframes fhRise{0%{transform:translateY(0) scale(.6); opacity:0}
  20%{opacity:1}100%{transform:translateY(-160px) scale(1.2); opacity:0}}
.confetti{position:absolute; top:-20px; font-weight:900;
  animation:confFall 1.6s linear forwards}
@keyframes confFall{0%{transform:translateY(-20px) rotate(0); opacity:0}
  12%{opacity:1}100%{transform:translateY(105vh) rotate(420deg); opacity:0}}

.footer{text-align:center; font-size:9px; color:rgba(255,255,255,.4); margin-top:24px; line-height:1.6}

/* PCでも縦スマホ感を維持 */
@media(min-width:520px){ .wrap{box-shadow:0 0 0 1px rgba(255,255,255,.06)} }

/* 動きを減らす設定を尊重 */
@media (prefers-reduced-motion: reduce){
  .stage.glow-5{animation:none}
  .confetti,.fh,.lu-card{animation-duration:.01ms !important}
}
