/* ===========================================================
   DEEP Diver 2「Deep Hunter」 スタイル
   黒(#07080d) × オレンジ(#ff7a18) / スマホ縦持ち最適
   担当B1: タイトル→拠点→ダイブ(深度ラン)の中心ループ
   =========================================================== */

:root{
  --bg:#07080d; --panel:#10131e; --panel2:#171b29;
  --orange:#ff7a18; --orange2:#ffb15c; --ink:#eef3fb; --dim:#9aa6b8;
  --line:rgba(255,255,255,.08); --good:#36d399; --bad:#ff5a5a;
  --c-blue:#3aa0ff; --c-red:#ff4d4d; --c-silver:#c8d2dc; --c-purple:#b06bff;
  /* 武器カラー */
  --w-harpoon:#ffb15c; --w-laser:#ff5a7a; --w-torpedo:#5cc8ff; --w-sonic:#46e0c0;
  /* 海中ワールド層の段階変数（fx.js が深度で更新。既定=海面の明るい基調） */
  --w-light:1; --w-godray:1; --w-press:0; --w-vig:.18; --w-tense:0;
  --w-top:#8fdcff; --w-bot:#2f7fbf;
}

*{box-sizing:border-box; -webkit-tap-highlight-color:transparent}
html,body{margin:0; height:100%; background:#04111f; color:var(--ink);
  font-family:-apple-system,"Hiragino Sans","Yu Gothic",system-ui,sans-serif;
  overscroll-behavior:none; user-select:none}
/* 数値は等幅（タビュラー）数字で表示し、桁が変わってもガタつかない＝一流ゲームの数字の見せ方。
   HUD・スコア・HP・ダメージ・価格などの可変数値に効かせる。 */
.chip b, .lv-val b, .my-lv-val b, .ds b, .best-card .bv, .ms-comp b, .ms-own b, .ms-val b,
.depth-meter b, .dive-stats b, #pHpTxt, #eHpTxt, #shopWallet, #garageWallet, #gachaPaid, #gachaPt,
.dmg, .float-dmg, .dex-rate-val b, .reward, .tally b, .gacha-wallet b, .price, .pt-cost{
  font-variant-numeric:tabular-nums; font-feature-settings:"tnum" 1, "lnum" 1;
  letter-spacing:.01em}

#app{position:relative; max-width:480px; margin:0 auto; height:100dvh; height:100vh;
  background:var(--bg); overflow:hidden; box-shadow:0 0 60px rgba(0,0,0,.6)}

/* ===========================================================
   海中の没入ワールド層（全画面共通の最背面・UI全刷新 v3）
   光のカーテン / コースティクス / 神々しい光 / 泡 / 漂う粒子 / 魚影。
   明るめ基調。深く潜るほど 神秘+重厚+緊張感が段階的に増す（fx.js が変数を更新）。
   =========================================================== */
.world-bg{position:absolute; inset:0; z-index:0; overflow:hidden; pointer-events:none;
  transition:filter 1.2s ease}
/* 1) 段階グラデ（明→神秘の深層）。深度で --w-top/--w-bot が変わる */
.world-bg .w-grad{position:absolute; inset:0;
  background:
    radial-gradient(120% 80% at 50% -10%, rgba(255,255,255,.18), transparent 46%),
    linear-gradient(180deg, var(--w-top) 0%, var(--w-bot) 72%, #04111f 100%);
  transition:background 1.4s ease}
/* 2) 水面コースティクス（揺らぐ光網）。浅いほど強い(--w-light) */
.world-bg .w-caustic{position:absolute; inset:-20%; opacity:calc(var(--w-light) * .5);
  mix-blend-mode:screen; transition:opacity 1.4s ease;
  background:
    radial-gradient(closest-side, rgba(190,240,255,.55), transparent 60%) 0 0/180px 150px repeat,
    radial-gradient(closest-side, rgba(150,225,255,.4), transparent 60%) 70px 60px/220px 180px repeat;
  filter:blur(2px); animation:caustic 14s ease-in-out infinite alternate}
@keyframes caustic{0%{transform:translate(-3%,-2%) scale(1.02)}100%{transform:translate(3%,2%) scale(1.08)}}
/* 3) 光のカーテン（斜めの光条）。2層で奥行き。浅いほど明るい */
.world-bg .w-rays{position:absolute; inset:-30% -10%; opacity:calc(var(--w-light) * .55);
  mix-blend-mode:screen; transition:opacity 1.4s ease;
  background:repeating-linear-gradient(102deg, transparent 0 38px,
    rgba(220,245,255,.10) 44px, rgba(220,245,255,.16) 52px, transparent 60px 110px);
  animation:rayswim 12s ease-in-out infinite alternate}
.world-bg .w-rays2{inset:-30% -20%; opacity:calc(var(--w-light) * .35);
  background:repeating-linear-gradient(86deg, transparent 0 60px,
    rgba(180,235,255,.08) 70px, rgba(180,235,255,.13) 82px, transparent 96px 170px);
  animation:rayswim2 18s ease-in-out infinite alternate}
@keyframes rayswim{0%{transform:translateX(-5%) skewX(-3deg)}100%{transform:translateX(5%) skewX(3deg)}}
@keyframes rayswim2{0%{transform:translateX(6%) skewX(2deg)}100%{transform:translateX(-6%) skewX(-2deg)}}
/* 4) 神々しい一条の光（海面の聖性）。浅瀬で強い(--w-godray) */
.world-bg .w-godray{position:absolute; top:-25%; left:18%; width:60%; height:150%;
  opacity:calc(var(--w-godray) * .55); mix-blend-mode:screen; transition:opacity 1.6s ease;
  background:radial-gradient(closest-side at 50% 0%, rgba(255,250,225,.5), rgba(180,235,255,.12) 45%, transparent 70%);
  transform:rotate(8deg); filter:blur(6px); animation:godpulse 9s ease-in-out infinite alternate}
@keyframes godpulse{0%{opacity:calc(var(--w-godray) * .42); transform:rotate(8deg) scaleX(.95)}
  100%{opacity:calc(var(--w-godray) * .62); transform:rotate(6deg) scaleX(1.06)}}
/* 5) 漂う粒子（マリンスノー/プランクトン） */
.world-bg .w-particles{position:absolute; inset:0}
.world-bg .w-dot{position:absolute; border-radius:50%;
  background:radial-gradient(circle at 35% 30%, rgba(235,250,255,.95), rgba(160,220,255,.25) 70%, transparent);
  box-shadow:0 0 6px rgba(180,235,255,.5);
  animation:wdrift var(--dur,16s) linear infinite}
@keyframes wdrift{0%{transform:translate(0,12px)}50%{transform:translate(var(--dx,8px),-14px)}100%{transform:translate(0,12px)}}
/* 6) 遠景の魚影シルエット（群れ） */
.world-bg .w-fish{position:absolute; inset:0}
.world-bg .w-shadow{position:absolute; left:-12%; opacity:.22; color:#06304f;
  filter:blur(1px) drop-shadow(0 4px 8px rgba(0,0,0,.25));
  animation:wfish var(--dur,36s) linear infinite}
@keyframes wfish{0%{transform:translate(-14vw, var(--fy,0)) scaleX(1)}
  48%{transform:translate(60vw, calc(var(--fy,0) * -1)) scaleX(1)}
  50%{transform:translate(62vw, var(--fy,0)) scaleX(-1)}
  100%{transform:translate(-14vw, calc(var(--fy,0) * -1)) scaleX(-1)}}
/* 7) 周辺減光（深いほど締まる＝緊張感） */
.world-bg .w-vignette{position:absolute; inset:0;
  background:radial-gradient(120% 100% at 50% 42%, transparent 52%, rgba(2,10,22,calc(var(--w-vig)*1.5)) 100%);
  transition:background 1.4s ease}
/* 8) 深層の重厚（青黒い圧）。深いほど濃い(--w-press) */
.world-bg .w-pressure{position:absolute; inset:0; opacity:var(--w-press); transition:opacity 1.6s ease;
  background:
    radial-gradient(80% 60% at 50% 8%, rgba(46,224,192,.10), transparent 55%),
    radial-gradient(90% 70% at 50% 100%, rgba(20,40,90,.5), transparent 60%),
    linear-gradient(180deg, rgba(4,14,30,.2), rgba(2,8,20,.7))}
/* 深淵では世界全体をわずかに藍へ寄せ、脈動で生命感＋緊張感（明るさは保つ） */
.world-bg[data-depth="16"],.world-bg[data-depth="17"],
.world-bg[data-depth="18"],.world-bg[data-depth="19"]{animation:abyssPulse 6s ease-in-out infinite}
@keyframes abyssPulse{0%,100%{filter:saturate(1.05) hue-rotate(0deg)}50%{filter:saturate(1.18) hue-rotate(-6deg)}}

/* ---------- 画面の基本 ---------- */
/* 画面は z-index:2 で世界層(z:0)の上。背景を持たない画面は世界層の海が透けて没入感が続く。 */
.screen{position:absolute; inset:0; display:none; flex-direction:column; z-index:2}
.screen.on{display:flex; animation:fade .25s ease}
@keyframes fade{from{opacity:0}to{opacity:1}}
/* タイトル/拠点のキービジュアルは世界層の上に“やわらかく”重ね、海のアニメを殺さない */
.fill{position:absolute; inset:0; width:100%; height:100%; object-fit:cover; opacity:.5;
  mix-blend-mode:luminosity}
/* ベールは「文字が乗る上端・下端」だけ軽く影。中央は背景がしっかり見えるよう極薄に。 */
.veil{position:absolute; inset:0; pointer-events:none; background:linear-gradient(180deg,
      rgba(7,8,13,.30) 0%, rgba(7,8,13,.04) 24%, rgba(7,8,13,.02) 62%, rgba(7,8,13,.34) 100%)}
.ink-shadow{text-shadow:0 1px 3px rgba(0,0,0,.85),0 0 12px rgba(0,0,0,.6)}
h1,h2,h3{margin:0}

/* ---------- ボタン ---------- */
.btn{appearance:none; border:none; border-radius:14px; padding:15px 18px; font-size:17px;
  font-weight:800; color:#1a0d00; background:linear-gradient(180deg,var(--orange2),var(--orange));
  box-shadow:0 6px 0 #b94e00,0 10px 22px rgba(255,122,24,.35); cursor:pointer; letter-spacing:.02em}
.btn:active{transform:translateY(4px); box-shadow:0 2px 0 #b94e00,0 6px 14px rgba(255,122,24,.3)}
.btn.ghost{background:var(--panel2); color:var(--ink); box-shadow:0 4px 0 #0b0d15,0 8px 18px rgba(0,0,0,.4);
  border:1px solid var(--line)}
.btn.ghost:active{box-shadow:0 1px 0 #0b0d15}
.btn:disabled{filter:grayscale(.7) brightness(.6); box-shadow:none; cursor:default; transform:none}
.pulse{animation:pulse 1.6s ease-in-out infinite}
@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.04)}}

/* ===========================================================
   タイトル
   =========================================================== */
#scrTitle{justify-content:flex-end; text-align:center}
.title-logo{position:absolute; top:9%; left:0; right:0; display:flex; flex-direction:column; align-items:center; gap:10px}
.title-logo img{width:96px; height:96px; border-radius:24px; box-shadow:0 0 0 2px var(--orange),0 10px 30px rgba(255,122,24,.45)}
/* 新ロゴ（横長ブランドロゴ）：タイトルの主役。旧アイコン枠スタイルを打ち消し、
   横長ロゴとして上品に大きく見せる（角丸/枠/影は付けない・ドロップシャドウのみ）。 */
img.title-logo{max-width:min(86vw,560px); width:100%; height:auto; display:block; margin:0 auto;
  border-radius:0; box-shadow:none; filter:drop-shadow(0 8px 34px rgba(0,0,0,.55))}
.brand{font-size:34px; font-weight:900; letter-spacing:.04em;
  background:linear-gradient(180deg,#fff,var(--orange2)); -webkit-background-clip:text; background-clip:text; color:transparent;
  text-shadow:0 2px 20px rgba(255,122,24,.4)}
.brand small{display:block; font-size:13px; letter-spacing:.5em; color:var(--orange2); margin-top:4px;
  -webkit-text-fill-color:var(--orange2)}
.title-cta{position:relative; padding:0 22px 34px; display:flex; flex-direction:column; gap:12px}
.tagline{color:#cfe3f2; font-size:13px; line-height:1.7; margin-bottom:6px; text-shadow:0 1px 6px rgba(0,0,0,.7)}
.foot{position:absolute; bottom:8px; left:0; right:0; text-align:center; color:#9fb4c8; font-size:11px; text-shadow:0 1px 4px rgba(0,0,0,.6); z-index:3}

/* ===========================================================
   (8) タイトル＝没入ヒーロー（title_hero_v4.png 全面 ＋ 3D演出）
   壁紙を主役にしてフルブリードで敷き、手前に深度グラデ／光条／周辺減光を重ねる。
   ロゴは立体（多層シャドウ）でクールに。世界層(#worldBg)はタイトルでは静かに沈める。
   =========================================================== */
#scrTitle.hero{justify-content:flex-end; text-align:center; overflow:hidden; z-index:3}
/* ヒーロー画像のラッパ：ゆっくりズーム＆漂いで“生きてる海”に（3D感）。 */
.hero-bg{position:absolute; inset:-4%; z-index:0; overflow:hidden}
.hero-img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
  transform:scale(1.08); transform-origin:50% 42%;
  animation:heroDrift 18s ease-in-out infinite alternate;
  filter:saturate(1.08) contrast(1.06) brightness(1.02)}
@keyframes heroDrift{
  0%{transform:scale(1.08) translateY(0)}
  100%{transform:scale(1.14) translateY(-1.5%)}}
/* 上下を深い藍で額装＝壁紙が浮き、文字も乗る（中央は被写体がしっかり見える） */
.hero-depth{position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(180deg,
    rgba(2,12,26,.66) 0%, rgba(3,16,32,.16) 22%,
    rgba(3,16,32,.02) 46%, rgba(2,12,26,.30) 70%, rgba(1,8,18,.82) 100%)}
/* 海面からの斜め光条（ゆらぐ）＝ヒーローに奥行きと神秘 */
.hero-shine{position:absolute; inset:-20% -10%; z-index:1; pointer-events:none; mix-blend-mode:screen; opacity:.5;
  background:repeating-linear-gradient(100deg, transparent 0 46px,
    rgba(190,235,255,.10) 54px, rgba(210,245,255,.18) 62px, transparent 72px 128px);
  animation:heroShine 13s ease-in-out infinite alternate}
@keyframes heroShine{0%{transform:translateX(-5%) skewX(-3deg)}100%{transform:translateX(5%) skewX(3deg)}}
/* 周辺減光で被写体（潜水艦）を中央へ締める */
.hero-vignette{position:absolute; inset:0; z-index:1; pointer-events:none;
  background:radial-gradient(120% 92% at 50% 44%, transparent 48%, rgba(1,8,18,.66) 100%)}
/* タイトルの各要素は壁紙の上（z:2〜3）。タイトルでは世界層の魚影/グラデを薄く沈める。
   ★重なり防止：ロゴ群(アイコン＋ブランド＋DEEP HUNTER)と CTA群(タグライン＋ボタン)を
   通常フローで縦に積み、十分な縦間隔を取る。基本ルールの absolute/top:9% をここで打ち消す。 */
#scrTitle.hero{justify-content:flex-end}
#scrTitle.hero .title-logo,
#scrTitle.hero .title-cta{position:relative; top:auto; left:auto; right:auto; z-index:3}
/* ロゴ群：通常フローで下寄せ。ブランド文字とタグラインが必ず離れるよう下に余白を確保。 */
#scrTitle.hero .title-logo{margin-bottom:18px}
/* CTA群：タグラインが直前のブランドへ食い込まないよう上に余白。 */
#scrTitle.hero .title-cta{padding-top:4px}
/* CTA帯の足元に薄いスクリム＝壁紙の明暗に関わらず文字とボタンを常に読みやすく */
#scrTitle.hero .title-cta::before{content:""; position:absolute; left:-22px; right:-22px; top:-12px; bottom:-40px; z-index:-1;
  background:linear-gradient(180deg, transparent 0%, rgba(2,10,22,.30) 40%, rgba(1,7,16,.72) 100%);
  pointer-events:none}
#scrTitle.hero .lang-picker{z-index:4}
/* ロゴアイコンに発光リング（壁紙の上で立つ） */
#scrTitle.hero .title-logo img{box-shadow:0 0 0 2px var(--orange),0 10px 34px rgba(255,122,24,.5),0 0 60px rgba(120,200,255,.35)}
/* 立体タイトル（多層シャドウで奥行き＝3D感） */
.brand3d{position:relative; font-size:38px;
  text-shadow:
    0 1px 0 rgba(255,255,255,.5),
    0 2px 0 rgba(255,150,60,.5),
    0 4px 10px rgba(0,0,0,.55),
    0 0 26px rgba(255,122,24,.55),
    0 0 46px rgba(90,200,255,.35)}
.brand3d small{text-shadow:0 2px 8px rgba(0,0,0,.7)}
/* タイトルCTAの可読性を壁紙の上で確保 */
#scrTitle.hero .tagline{color:#dcefff; text-shadow:0 1px 8px rgba(0,0,0,.8)}

/* ===========================================================
   拠点(ホーム/ベース)
   =========================================================== */
#scrHome .topbar, #scrHome .home-body{position:relative; z-index:2}
.topbar{display:flex; align-items:center; gap:8px; padding:12px 14px; flex-wrap:wrap;
  background:linear-gradient(180deg,rgba(7,9,16,.78),transparent)}
.chip{display:inline-flex; align-items:center; gap:6px; background:var(--panel); border:1px solid var(--line);
  border-radius:999px; padding:6px 11px; font-size:13px; font-weight:700}
.chip b{color:var(--orange2)}
.spacer{flex:1}
.home-body{flex:1; overflow-y:auto; -webkit-overflow-scrolling:touch}

/* 潜水艦を「明るい観測窓パネル」の中に置き、機体が黒く潰れず くっきり見えるようにする。
   ※ sub_lv2/3 は背景不透明の暗い画像なので、明るいパネル＋画像のブライトアップで視認性を確保。 */
/* 潜水艦を「見せる台」だけは明るい白/薄いブルーにする（会長指示）。
   周囲は黒×オレンジのまま、ここだけ展示台のように明るく浮かせる。 */
/* (15,16) 拠点の格納庫ステージも“白くてチープ”をやめ、深海ドックの没入演出へ。
   上からの探照灯＋深い藍のガラスドック＋光条。潜水艦は大きく・明るくクッキリ。 */
.sub-stage{position:relative; text-align:center; padding:18px 14px 12px; margin:10px 14px 2px;
  border-radius:20px; overflow:hidden;
  background:
    radial-gradient(80% 50% at 50% -6%, rgba(180,225,255,.30), transparent 60%),
    linear-gradient(180deg,#0f2547 0%,#0a1c39 50%,#06122a 100%);
  border:1px solid rgba(120,190,255,.32);
  box-shadow:0 12px 30px rgba(0,0,0,.5), inset 0 1px 0 rgba(180,225,255,.18), inset 0 -20px 36px rgba(2,8,22,.5)}
/* ドック天井からの探照灯（ゆらぐ光条） */
.sub-stage::before{content:""; position:absolute; top:-12%; left:50%; width:54%; height:130%; z-index:0;
  transform:translateX(-50%) rotate(4deg); pointer-events:none; mix-blend-mode:screen; opacity:.5;
  background:radial-gradient(closest-side at 50% 0%, rgba(205,238,255,.5), rgba(150,210,255,.10) 50%, transparent 74%);
  filter:blur(4px); animation:subBeam 7s ease-in-out infinite alternate}
.sub-stage > *{position:relative; z-index:1}
.sub-stage .sub-cap{color:#bcd6f0}
.sub-stage .sub-cap b{color:#eaf4ff}
.sub-viewport{position:relative; display:inline-block; margin:0 auto; width:74%; max-width:272px; aspect-ratio:1;
  border-radius:22px; overflow:hidden; border:2px solid rgba(140,200,255,.45);
  background:
    radial-gradient(70% 50% at 50% 6%, rgba(190,230,255,.32), transparent 58%),
    radial-gradient(circle at 50% 62%, #1b3a63 0%, #0e244a 56%, #07142e 100%),
    radial-gradient(36% 28% at 26% 78%, rgba(70,224,192,.16), transparent 70%);
  box-shadow:0 16px 34px rgba(0,0,0,.55), 0 0 26px rgba(120,200,255,.32), inset 0 0 40px rgba(8,24,52,.6);
  animation:bob 3.4s ease-in-out infinite}
/* 立ち上る泡 */
.sub-viewport::after{content:""; position:absolute; right:22%; bottom:8%; width:6px; height:6px; border-radius:50%; z-index:2;
  background:radial-gradient(circle at 35% 30%, rgba(255,255,255,.9), rgba(180,220,255,.2) 70%, transparent);
  box-shadow:0 -18px 0 -1px rgba(220,245,255,.5), 0 -34px 0 -2px rgba(200,235,255,.32), 0 -52px 0 -3px rgba(190,230,255,.22);
  animation:subRise 3.4s linear infinite}
.sub-viewport img{position:relative; z-index:1; width:100%; height:100%; object-fit:contain; display:block; padding:7%;
  filter:brightness(1.18) contrast(1.07) saturate(1.06)
    drop-shadow(0 10px 14px rgba(0,0,0,.5)) drop-shadow(0 0 12px rgba(120,200,255,.35));
  animation:subFloat 4.6s ease-in-out infinite}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
.sub-cap{color:var(--dim); font-size:13px; margin-top:-2px}
.sub-cap b{color:var(--ink)}

.best-row{display:flex; gap:8px; padding:10px 16px 2px; justify-content:center; flex-wrap:wrap}
.best-card{flex:1; min-width:92px; background:var(--panel); border:1px solid var(--line); border-radius:12px;
  padding:9px 6px; text-align:center}
.best-card .bl{font-size:10px; color:var(--dim); letter-spacing:.06em}
.best-card .bv{font-size:18px; font-weight:900; color:var(--orange2); margin-top:2px}

.dive-cta{padding:14px 16px 6px}
.dive-cta .btn{width:100%; font-size:19px; padding:18px}
.dive-note{text-align:center; color:var(--dim); font-size:12px; margin-top:8px; line-height:1.6}

.section-t{font-size:13px; color:var(--dim); font-weight:800; letter-spacing:.08em; margin:14px 16px 8px}
.home-actions{display:flex; gap:10px; padding:8px 14px}
.home-actions .btn{flex:1; font-size:14px; padding:13px 8px}

/* 深度プレビュー帯(拠点で「どこまで潜れるか」を見せる) */
.depth-strip{display:flex; gap:6px; overflow-x:auto; padding:4px 14px 12px; -webkit-overflow-scrolling:touch}
.depth-chip{flex:none; min-width:70px; border-radius:12px; padding:8px 6px; text-align:center; border:1px solid var(--line);
  font-size:11px; color:#cdd6e4}
.depth-chip .dn{font-weight:900; font-size:13px}
.depth-chip .dm{font-size:10px; color:var(--dim); margin-top:2px}
.depth-chip.cur{outline:2px solid var(--orange); box-shadow:0 0 14px rgba(255,122,24,.4)}

/* ===========================================================
   ダイブ(戦闘/深度ラン)
   背景はJSが深度バンドごとに切替。背景画が無い深度はCSSグラデで代替。
   =========================================================== */
#scrDive{justify-content:space-between}
.dive-bg{position:absolute; inset:0; transition:background 1.1s ease, opacity 1.1s ease}
.dive-bg img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover; opacity:0; transition:opacity 1.1s ease}
.dive-bg img.shown{opacity:1}
/* 生物発光のうっすらした層(深いほどJSで濃くする) */
.biolume{position:absolute; inset:0; pointer-events:none; opacity:0; transition:opacity 1.1s ease;
  background:radial-gradient(circle at 30% 20%, rgba(70,224,192,.10), transparent 40%),
             radial-gradient(circle at 75% 70%, rgba(122,107,255,.10), transparent 42%)}

/* 漂うスプライト層(魚/サンゴ/泡)。画像が無い時はCSSの泡だけでも生きてる感を出す */
#fxLayer{position:absolute; inset:0; pointer-events:none; overflow:hidden; z-index:1}
.fx{position:absolute; will-change:transform; opacity:.9}
.fx img{display:block; width:100%; height:auto; filter:drop-shadow(0 4px 10px rgba(0,0,0,.4))}
/* CSSだけの泡(常時) */
.bubble{position:absolute; bottom:-30px; border-radius:50%;
  background:radial-gradient(circle at 35% 30%, rgba(255,255,255,.55), rgba(180,220,255,.10) 60%, transparent 70%);
  animation:rise linear infinite}
@keyframes rise{0%{transform:translateY(0) translateX(0); opacity:0}
  10%{opacity:.7}90%{opacity:.5}100%{transform:translateY(-110vh) translateX(14px); opacity:0}}
/* CSSだけの泳ぐ魚(画像が無い深度のフォールバック・絵文字) */
.swim{position:absolute; font-size:22px; animation:swimX linear infinite; opacity:.85;
  filter:drop-shadow(0 3px 6px rgba(0,0,0,.5))}
@keyframes swimX{0%{transform:translateX(-12vw) scaleX(1)}49%{transform:translateX(60vw) scaleX(1)}
  50%{transform:translateX(60vw) scaleX(-1)}100%{transform:translateX(-12vw) scaleX(-1)}}
/* 光条(海面付近だけJSで表示) */
.lightrays{position:absolute; inset:0; pointer-events:none; opacity:0; transition:opacity 1.1s ease;
  background:linear-gradient(105deg, transparent 20%, rgba(255,240,200,.10) 38%, transparent 46%,
            transparent 60%, rgba(255,240,200,.08) 74%, transparent 82%);
  mix-blend-mode:screen; animation:rays 7s ease-in-out infinite alternate}
@keyframes rays{0%{transform:translateX(-6%)}100%{transform:translateX(6%)}}

/* 上部HUD(深度ゲージ) */
.dive-top{position:relative; z-index:3; padding:10px 14px 4px; display:flex; align-items:center; gap:8px}
.depth-meter{flex:1}
.depth-meter .dlab{display:flex; justify-content:space-between; font-size:11px; color:#cfd8e6; margin-bottom:3px}
.depth-meter .dlab b{color:var(--orange2); font-size:13px}
/* ★波4A：海域/海峡名（深度の左に出す。海らしい青で、深度数字のオレンジと区別） */
.depth-meter .dlab b.depth-strait-name{color:#7fd6ff; font-size:13px; letter-spacing:.02em}

/* ★波4A：拠点の海域マップ（今いる海域＋全海峡の踏破状況） */
.strait-panel{margin:6px 0 4px}
.strait-panel .strait-cur{font-size:13px; color:#cfe3f4; margin:2px 2px 8px}
.strait-panel .strait-cur b{color:#7fd6ff; font-size:14px}
.strait-panel .strait-row{display:flex; gap:7px; overflow-x:auto; padding:2px 1px 6px; -webkit-overflow-scrolling:touch}
.strait-panel .strait-chip{flex:0 0 auto; min-width:92px; padding:8px 9px; border-radius:12px;
  background:linear-gradient(180deg,#123a5d,#06223e); border:1px solid var(--line); color:#dce8f4}
.strait-panel .strait-chip .sn{font-size:12px; font-weight:700; white-space:nowrap}
.strait-panel .strait-chip .ss{font-size:11px; color:#9fb6cc; margin-top:3px}
.strait-panel .strait-chip.cur{border-color:#7fd6ff; box-shadow:0 0 0 1px #7fd6ff66, 0 4px 14px #0006}
.strait-panel .strait-chip.cur .sn{color:#aee6ff}
.strait-panel .strait-chip.cleared{background:linear-gradient(180deg,#13513a,#062a1e)}
.strait-panel .strait-chip.cleared .ss{color:#7fe0b0}
.strait-panel .strait-chip.locked{filter:grayscale(.6) brightness(.62); opacity:.85}
.depth-track{height:8px; border-radius:999px; background:#0008; border:1px solid var(--line); overflow:hidden}
.depth-track > i{display:block; height:100%; border-radius:999px; transition:width .6s ease;
  background:linear-gradient(90deg,#5cc8ff,#7a6bff)}
.dive-stats{display:flex; gap:6px; font-size:11px; color:#cfd8e6}
.dive-stats .ds{background:rgba(8,10,18,.55); border:1px solid var(--line); border-radius:999px; padding:4px 9px; font-weight:800}
.dive-stats .ds b{color:var(--orange2)}
.flee{margin-left:auto}

/* 敵 */
.enemy-wrap{position:relative; flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; z-index:2; min-height:0}
.enemy-card{width:88%; max-width:320px; text-align:center}
.enemy-name{font-size:21px; font-weight:900; letter-spacing:.01em;
  text-shadow:0 2px 4px #000,0 0 14px rgba(0,0,0,.85); color:#fff;
  display:flex; align-items:center; justify-content:center; gap:8px; flex-wrap:wrap}
#eName{padding:3px 12px; border-radius:999px; background:rgba(8,10,18,.55); border:1px solid var(--line)}
/* (7) 番号＋属性＋レア結晶を1行に。番号は左上ではなく属性表示の横に出す。 */
.enemy-meta{display:flex; align-items:center; justify-content:center; gap:7px; margin-top:5px; flex-wrap:wrap}
.enemy-no{font-size:11px; font-weight:900; letter-spacing:.04em; color:#cfe0f2;
  padding:3px 9px; border-radius:999px; background:rgba(8,10,18,.6); border:1px solid var(--line);
  text-shadow:0 1px 2px #000}
.crystal{width:13px; height:13px; transform:rotate(45deg); border-radius:2px; display:inline-block; box-shadow:0 0 8px currentColor}
.typebadge{font-size:11px; font-weight:800; padding:3px 9px; border-radius:999px; border:1px solid rgba(255,255,255,.25)}
/* 敵=切り抜き画像(透過のモンスター本体)を“深海の観測窓”の中に大きく見せる。
   枠（border）の色は dive.js が「その敵の属性色」で動的に設定する。 */
/* 観測窓は黒×オレンジの締まりを優先：青い発光・上部ハイライトを抑え、深い藍〜黒の台に。
   機体の視認性は背景の上部に控えめなスポットライトと img 側の明るさで確保する。 */
.enemy-img{position:relative; margin:10px auto 4px; width:78%; max-width:280px; aspect-ratio:1;
  border-radius:22px; overflow:hidden; border:3px solid rgba(255,177,92,.6);
  box-shadow:0 18px 40px rgba(0,0,0,.65), 0 0 22px rgba(255,150,70,.16), inset 0 0 0 1px rgba(255,255,255,.08),
    inset 0 -34px 56px rgba(2,8,20,.62);
  background:
    radial-gradient(circle at 50% 30%, rgba(150,200,255,.13), transparent 52%),
    radial-gradient(circle at 50% 44%, #122742 0%, #08132a 62%, #04081590 100%);
  animation:bob 3s ease-in-out infinite;
  transition:border-color .25s ease, box-shadow .25s ease}
/* 観測窓の奥にゆらぐ生物発光（敵が浮かぶ深海感） */
.enemy-img::before{content:""; position:absolute; inset:0; pointer-events:none; z-index:0;
  background:
    radial-gradient(40% 30% at 28% 24%, rgba(70,224,192,.18), transparent 70%),
    radial-gradient(46% 34% at 74% 70%, rgba(122,160,255,.16), transparent 72%);
  animation:enemyAura 5s ease-in-out infinite alternate}
@keyframes enemyAura{0%{opacity:.6; transform:scale(1)}100%{opacity:1; transform:scale(1.06)}}
/* 透過の切り抜きは contain で“全身”をきれいに見せる（cover だと端が切れる）。
   下に淡い影を落として水中に浮かぶ立体感を出す。 */
.enemy-img img{position:relative; z-index:1; width:100%; height:100%; object-fit:contain; display:block;
  padding:7%; filter:brightness(1.06) contrast(1.04) drop-shadow(0 10px 14px rgba(0,0,0,.55));
  animation:enemyFloat 4.4s ease-in-out infinite}
@keyframes enemyFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
/* 画像が全部読めなかった時の“見える代替表示”。透明のまま固定にせず、
   半透明の枠＋大きな『？』を被せて「画像は無いが何かいる」と必ず分かるようにする。
   imgWithFallback() が、読めなかった <img> の親要素に cd-img-missing-wrap を付ける。 */
.cd-img-missing-wrap::after{content:"？"; position:absolute; inset:0; z-index:3;
  display:flex; align-items:center; justify-content:center;
  font-size:clamp(34px,18%,72px); font-weight:900; color:rgba(210,228,248,.9);
  text-shadow:0 2px 8px rgba(0,0,0,.6);
  background:radial-gradient(circle at 50% 42%, rgba(60,120,180,.28), rgba(6,14,30,.5));
  border-radius:inherit; pointer-events:none}
.cd-img-missing{opacity:.18}
/* 弱点ヒットの“快感”：当てた瞬間だけ画面に属性色の光が一瞬走る（横揺れなし・明滅と拡大のみ）。 */
.crit-flash{position:absolute; inset:0; z-index:6; pointer-events:none; border-radius:inherit;
  background:radial-gradient(60% 45% at 50% 38%, var(--cf,#ffd24a), transparent 70%);
  mix-blend-mode:screen; animation:critFlash .26s ease-out forwards}
@keyframes critFlash{0%{opacity:0; transform:scale(.96)}24%{opacity:.55}100%{opacity:0; transform:scale(1.04)}}
/* 着弾の“キック”：敵カードがグッと一瞬拡大して戻る（ヒットストップ風・横には動かさない）。 */
.crit-kick{animation:critKick .24s cubic-bezier(.2,1.4,.35,1) !important}
@keyframes critKick{0%{transform:scale(1)}40%{transform:scale(1.09)}100%{transform:scale(1)}}
@media (prefers-reduced-motion: reduce){ .crit-flash,.crit-kick{animation:none !important} }
.enemy-hint{font-size:12px; color:#d9e2f0; background:rgba(0,0,0,.42); display:inline-block; padding:5px 11px; border-radius:999px; border:1px solid var(--line); margin-top:4px}
.hpbar{height:11px; border-radius:999px; background:#0008; border:1px solid var(--line); overflow:hidden; position:relative}
.hpbar > i{display:block; height:100%; border-radius:999px; transition:width .35s ease}
.hp-e > i{background:linear-gradient(90deg,#ff7a7a,#ff3b3b)}
.hp-p > i{background:linear-gradient(90deg,#5cffb0,#22d37a)}
.hp-lab{display:flex; justify-content:space-between; font-size:11px; color:#cfd8e6; margin:2px 2px 0}

.b-log{position:relative; z-index:3; text-align:center; min-height:22px; font-size:14px; font-weight:800; color:var(--orange2); text-shadow:0 1px 6px #000; padding:0 12px}

/* 自機(潜水艦)。(15,16) 白くてチープな観測窓をやめ、深海に潜っている没入感の中で
   機体を“大きく・かっこよく”見せる。スポットライトに照らされた潜水艦が深海に浮かぶ画。 */
.player-wrap{position:relative; z-index:3; padding:6px 14px 6px; display:flex; align-items:center; gap:14px}
/* 自機の“深海ステージ”。白/明るいブルーをやめ、深い藍＋上からの探照灯＋生物発光に。
   枠（border）の色だけ dive.js が「今選んでいる武器の属性色」で動的に設定する。 */
.psub-view{position:relative; z-index:1; flex:none; width:128px; height:92px; border-radius:18px; overflow:hidden;
  border:2px solid rgba(120,190,255,.42);
  background:
    radial-gradient(70% 50% at 50% 6%, rgba(170,215,255,.20), transparent 60%),  /* 上からの探照灯（控えめ） */
    radial-gradient(circle at 50% 64%, #112844 0%, #08162e 60%, #040a1c 100%),    /* 深い藍〜黒の水中 */
    radial-gradient(38% 30% at 24% 78%, rgba(70,224,192,.12), transparent 70%);    /* 生物発光（控えめ） */
  box-shadow:0 10px 22px rgba(0,0,0,.6), 0 0 16px rgba(90,170,255,.18),
    inset 0 1px 0 rgba(170,215,255,.12), inset 0 -18px 28px rgba(2,8,20,.64);
  transition:border-color .2s ease, box-shadow .2s ease}
/* 探照筒の光条（上からスッと差す光）＝深海の没入感 */
.psub-view::before{content:""; position:absolute; top:-10%; left:50%; width:64%; height:120%; z-index:0;
  transform:translateX(-50%) rotate(4deg); pointer-events:none; mix-blend-mode:screen; opacity:.55;
  background:radial-gradient(closest-side at 50% 0%, rgba(200,235,255,.5), rgba(150,210,255,.10) 50%, transparent 72%);
  filter:blur(3px); animation:subBeam 6s ease-in-out infinite alternate}
@keyframes subBeam{0%{opacity:.4; transform:translateX(-50%) rotate(2deg) scaleX(.95)}
  100%{opacity:.62; transform:translateX(-50%) rotate(6deg) scaleX(1.06)}}
/* 立ち上る泡（小さく・常時）＝水中で稼働している実感 */
.psub-view::after{content:""; position:absolute; right:18%; bottom:8%; width:5px; height:5px; border-radius:50%; z-index:2;
  background:radial-gradient(circle at 35% 30%, rgba(255,255,255,.9), rgba(180,220,255,.2) 70%, transparent);
  box-shadow:0 -14px 0 -1px rgba(220,245,255,.5), 0 -26px 0 -2px rgba(200,235,255,.35);
  animation:subRise 2.8s linear infinite}
@keyframes subRise{0%{transform:translateY(6px); opacity:0}20%{opacity:.9}100%{transform:translateY(-60px); opacity:0}}
/* 機体は contain で全身を大きく。下に影を落とし、ゆっくり浮遊＝水中で漂う。 */
.psub-view img{position:relative; z-index:1; width:100%; height:100%; object-fit:contain; display:block; padding:8% 6%;
  filter:brightness(1.16) contrast(1.06) saturate(1.05)
    drop-shadow(0 8px 12px rgba(0,0,0,.55)) drop-shadow(0 0 10px rgba(120,200,255,.35)) !important;
  animation:subFloat 4s ease-in-out infinite}
/* 横揺れ禁止（会長ルール）。機体の傾き往復をやめ、上下の浮遊（呼吸）だけにする。 */
@keyframes subFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
.player-wrap .pmeta{position:relative; z-index:1; flex:1}

/* ミサイル(発射演出)。--mx で同時2発を左右にずらす。スキンで色/輝きが変わる */
.missile{position:absolute; z-index:5; pointer-events:none;
  left:calc(50% + var(--mx, 0px)); bottom:120px;
  width:46px; height:14px; transform:translateX(-50%);
  --mcol1:#fff; --mcol2:var(--orange); --mcol3:#b94e00; --mglow:var(--orange);
  background:linear-gradient(90deg,var(--mcol1),var(--mcol2) 60%,var(--mcol3));
  border-radius:999px; box-shadow:0 0 14px var(--mglow),0 0 6px #fff}
.missile::after{content:""; position:absolute; right:-22px; top:50%; transform:translateY(-50%);
  width:22px; height:6px; border-radius:999px;
  background:linear-gradient(90deg,rgba(255,255,255,.0),var(--mglow))}
.missile.fly{animation:missileFly .42s cubic-bezier(.4,0,.7,1) forwards}
@keyframes missileFly{from{bottom:120px; opacity:1}to{bottom:55%; opacity:.2}}
/* スキン差替え(発射見た目) */
.missile.skin-aqua  {--mcol1:#dffaff; --mcol2:#36c8ff; --mcol3:#1670d0; --mglow:#36c8ff}
.missile.skin-plasma{--mcol1:#fff; --mcol2:#b06bff; --mcol3:#6a2bd0; --mglow:#b06bff}
.missile.skin-abyss {--mcol1:#9fd6ff; --mcol2:#2b6cff; --mcol3:#05122e; --mglow:#2b6cff; height:11px; width:54px}
.missile.skin-gold  {--mcol1:#fff8d0; --mcol2:#ffd34d; --mcol3:#b9860b; --mglow:#ffd34d}

/* ===========================================================
   武器ごとの別アクション＋成長で進化する弾（最重要演出）
   .wbolt … 共通の弾。--bcol=属性色 / --mx=左右ずれ / t1〜t3=ティアで太く
   b-harpoon / b-laser / b-torpedo … 武器ごとに形・動きが違う
   =========================================================== */
.wbolt{position:absolute; z-index:5; pointer-events:none;
  left:calc(50% + var(--mx,0px)); bottom:120px; transform:translateX(-50%);
  --bcol:#3aa0ff;}

/* --- ハープーン：細い銛が突き上がって刺さる。tierで太く＆穂先が鋭く --- */
.wbolt.b-harpoon{width:8px; height:34px; border-radius:6px;
  background:linear-gradient(180deg,#fff,var(--bcol) 55%,rgba(0,0,0,.2));
  box-shadow:0 0 10px var(--bcol),0 0 4px #fff;}
.wbolt.b-harpoon::before{content:""; position:absolute; top:-9px; left:50%; transform:translateX(-50%);
  border-left:6px solid transparent; border-right:6px solid transparent; border-bottom:12px solid #fff;
  filter:drop-shadow(0 0 5px var(--bcol));}
.wbolt.b-harpoon.t2{width:12px; height:40px}
.wbolt.b-harpoon.t3{width:17px; height:46px}
.wbolt.b-harpoon.go{animation:harpoonFly .42s cubic-bezier(.3,0,.6,1) var(--bdelay,0ms) forwards}
@keyframes harpoonFly{0%{bottom:120px; opacity:0}12%{opacity:1}100%{bottom:54%; opacity:.25}}

/* --- レーザー：まっすぐ伸びるビーム。tierで極太＆中心に白芯 --- */
.wbolt.b-laser{width:6px; height:0; border-radius:4px; bottom:128px;
  background:linear-gradient(180deg,#fff,var(--bcol)); box-shadow:0 0 14px var(--bcol),0 0 6px #fff;}
.wbolt.b-laser.t2{width:11px}
.wbolt.b-laser.t3{width:18px}
.wbolt.b-laser.go{animation:laserBeam .30s ease-out var(--bdelay,0ms) forwards}
@keyframes laserBeam{0%{height:0; opacity:0}20%{opacity:1}55%{height:42%; opacity:1}100%{height:42%; opacity:0}}

/* --- 魚雷：丸い弾頭が弧を描いて飛ぶ＋尾ぶき。tierで大きく --- */
.wbolt.b-torpedo{width:18px; height:11px; border-radius:999px;
  background:radial-gradient(circle at 35% 40%,#fff,var(--bcol) 60%,#3a0d0d);
  box-shadow:0 0 12px var(--bcol);}
.wbolt.b-torpedo::after{content:""; position:absolute; left:-16px; top:50%; transform:translateY(-50%);
  width:18px; height:5px; border-radius:999px; background:linear-gradient(90deg,transparent,var(--bcol)); opacity:.8}
.wbolt.b-torpedo.t2{width:24px; height:14px}
.wbolt.b-torpedo.t3{width:31px; height:18px}
.wbolt.b-torpedo.go{animation:torpedoFly .34s ease-in var(--bdelay,0ms) forwards}
@keyframes torpedoFly{0%{bottom:120px; opacity:0; transform:translateX(-50%) rotate(-78deg)}
  15%{opacity:1}100%{bottom:52%; opacity:.4; transform:translateX(-50%) rotate(-90deg)}}
/* 魚雷の着弾フラッシュ(敵カードの辺り)。--hx で着弾位置を毎回少し散らす */
.torp-flash{position:absolute; z-index:6; left:calc(50% + var(--hx,0px)); top:34%; transform:translate(-50%,-50%) scale(.2);
  width:90px; height:90px; border-radius:50%; pointer-events:none; opacity:0;
  background:radial-gradient(circle,#fff 0%,var(--bcol) 35%,transparent 70%); --bcol:#ff4d4d}
.torp-flash.t2{width:120px; height:120px}
.torp-flash.t3{width:160px; height:160px}
.torp-flash.go{animation:torpBoom .42s ease-out forwards}
@keyframes torpBoom{0%{opacity:0; transform:translate(-50%,-50%) scale(.2)}
  25%{opacity:.95}100%{opacity:0; transform:translate(-50%,-50%) scale(1.25)}}

/* --- ソニック砲：充填フラッシュ → 衝撃波リング → 余韻。最も派手 --- */
.sonic-charge{position:absolute; z-index:5; left:50%; bottom:96px; transform:translate(-50%,0) scale(.3);
  width:70px; height:70px; border-radius:50%; pointer-events:none; opacity:0; --bcol:#46e0c0;
  background:radial-gradient(circle,#fff 0%,var(--bcol) 45%,transparent 72%)}
.sonic-charge.t3{width:96px; height:96px}
.sonic-charge.go{animation:sonicCharge .26s ease-out forwards}
@keyframes sonicCharge{0%{opacity:0; transform:translate(-50%,0) scale(.3)}
  60%{opacity:1; transform:translate(-50%,0) scale(1)}100%{opacity:0; transform:translate(-50%,0) scale(1.3)}}
.sonic-ring{position:absolute; z-index:6; left:50%; top:36%; transform:translate(-50%,-50%) scale(.15);
  width:120px; height:120px; border-radius:50%; pointer-events:none; opacity:0; --bcol:#46e0c0;
  border:5px solid var(--bcol); box-shadow:0 0 22px var(--bcol),inset 0 0 22px var(--bcol)}
.sonic-ring.t2{border-width:7px}
.sonic-ring.t3{border-width:10px}
.sonic-ring.crit{box-shadow:0 0 34px var(--bcol),inset 0 0 30px var(--bcol)}
.sonic-ring.go{animation:sonicRing .85s cubic-bezier(.15,.7,.3,1) forwards}
@keyframes sonicRing{0%{opacity:0; transform:translate(-50%,-50%) scale(.15)}
  18%{opacity:.95}100%{opacity:0; transform:translate(-50%,-50%) scale(2.6)}}
/* ソニックのモーション変奏：cross=縦横へ裂ける／spiral=回しながら広がる（毎回ちがう放ち方） */
.sonic-ring.sv-cross.go{animation:sonicRingCross .9s cubic-bezier(.15,.7,.3,1) forwards}
@keyframes sonicRingCross{0%{opacity:0; transform:translate(-50%,-50%) scale(.15,.15)}
  18%{opacity:.95}100%{opacity:0; transform:translate(-50%,-50%) scale(3.2,1.6)}}
.sonic-ring.sv-spiral.go{animation:sonicRingSpiral .95s cubic-bezier(.15,.7,.3,1) forwards}
@keyframes sonicRingSpiral{0%{opacity:0; transform:translate(-50%,-50%) rotate(var(--spin,0deg)) scale(.15)}
  18%{opacity:.95}100%{opacity:0; transform:translate(-50%,-50%) rotate(calc(var(--spin,0deg) + 180deg)) scale(2.7)}}

/* ===========================================================
   攻撃モーション変奏（毎回ちがう弾道・隊形）— 担当：攻撃演出
   .mv-* … fireWeaponFx がランダムに付与。--curve で個体差、--mx で隊形ずれ。
   既存の b-harpoon/b-laser/b-torpedo の見た目はそのまま、動きだけ差し替える。
   =========================================================== */
/* 発射口のマッフルフラッシュ（自機の砲口の閃光・毎回少し位置とサイズが変わる） */
.muzzle{position:absolute; z-index:5; left:calc(50% + var(--mx,0px)); bottom:108px;
  width:34px; height:34px; border-radius:50%; pointer-events:none; opacity:0;
  transform:translate(-50%,0) scale(.4); --bcol:#9fd6ff;
  background:radial-gradient(circle,#fff 0%,var(--bcol) 45%,transparent 72%)}
.muzzle.t2{width:46px; height:46px}
.muzzle.t3{width:60px; height:60px}
.muzzle.go{animation:muzzlePop .22s ease-out forwards}
@keyframes muzzlePop{0%{opacity:0; transform:translate(-50%,0) scale(.4)}
  40%{opacity:.95; transform:translate(-50%,0) scale(1)}100%{opacity:0; transform:translate(-50%,0) scale(1.35)}}

/* --- ハープーン 弾道変奏 --- */
/* converge: 外側から斜めに中央へ集束しながら突き上がる */
.wbolt.b-harpoon.mv-converge.go{animation:harpoonConverge .44s cubic-bezier(.3,0,.6,1) var(--bdelay,0ms) forwards}
@keyframes harpoonConverge{0%{bottom:120px; opacity:0; transform:translateX(calc(-50% + var(--mx,0px)*-0.6)) rotate(calc(var(--mx,0px)*0.06deg))}
  12%{opacity:1}100%{bottom:54%; opacity:.25; transform:translateX(-50%) rotate(0)}}
/* zigzag: ジグザグに揺れながら上がる（生き物のような軌道） */
.wbolt.b-harpoon.mv-zigzag.go{animation:harpoonZig .5s ease-in-out var(--bdelay,0ms) forwards}
@keyframes harpoonZig{0%{bottom:120px; opacity:0; transform:translateX(-50%)}
  12%{opacity:1}30%{transform:translateX(calc(-50% + 14px))}55%{transform:translateX(calc(-50% - 14px))}
  80%{transform:translateX(calc(-50% + 8px))}100%{bottom:54%; opacity:.25; transform:translateX(-50%)}}

/* --- レーザー 変奏 --- */
/* sweep: 斜めから薙ぐように照射（角度がつく） */
.wbolt.b-laser.mv-sweep.go{animation:laserSweep .34s ease-out var(--bdelay,0ms) forwards; transform-origin:bottom center}
@keyframes laserSweep{0%{height:0; opacity:0; transform:translateX(-50%) rotate(calc(var(--curve,0)*16deg))}
  20%{opacity:1}55%{height:44%; opacity:1}100%{height:44%; opacity:0; transform:translateX(-50%) rotate(0)}}
/* cross: 一瞬で伸びて長く残る貫通ビーム */
.wbolt.b-laser.mv-cross.go{animation:laserCross .42s ease-out var(--bdelay,0ms) forwards}
@keyframes laserCross{0%{height:0; opacity:0}12%{opacity:1}30%{height:50%}100%{height:50%; opacity:0}}

/* --- 魚雷 弾道変奏 --- */
/* arcL / arcR: 左右へ弧を描いて回り込む */
.wbolt.b-torpedo.mv-arcL.go{animation:torpArcL .46s ease-in var(--bdelay,0ms) forwards}
@keyframes torpArcL{0%{bottom:120px; left:calc(50% + var(--mx,0px)); opacity:0; transform:translateX(-50%) rotate(-60deg)}
  15%{opacity:1}55%{left:calc(38% + var(--mx,0px))}100%{bottom:52%; left:calc(50% + var(--mx,0px)); opacity:.4; transform:translateX(-50%) rotate(-95deg)}}
.wbolt.b-torpedo.mv-arcR.go{animation:torpArcR .46s ease-in var(--bdelay,0ms) forwards}
@keyframes torpArcR{0%{bottom:120px; left:calc(50% + var(--mx,0px)); opacity:0; transform:translateX(-50%) rotate(-120deg)}
  15%{opacity:1}55%{left:calc(62% + var(--mx,0px))}100%{bottom:52%; left:calc(50% + var(--mx,0px)); opacity:.4; transform:translateX(-50%) rotate(-85deg)}}
/* spiral: くるりと回りながら突っ込む */
.wbolt.b-torpedo.mv-spiral.go{animation:torpSpiral .5s ease-in var(--bdelay,0ms) forwards}
@keyframes torpSpiral{0%{bottom:120px; opacity:0; transform:translateX(-50%) rotate(0)}
  15%{opacity:1}100%{bottom:52%; opacity:.4; transform:translateX(-50%) rotate(calc(360deg + var(--curve,0)*120deg))}}

/* ===========================================================
   画面シェイク（衝撃の手応え・ソニック砲の余韻）
   =========================================================== */
/* (23) 連打バグ修正：揺れは #fxLayer(エフェクト層)だけに限定し、
   rotate(回転)も scale(拡大)も使わない“平行移動のみ”の控えめな揺れ。
   戦闘画面そのもの(背景/敵カード/自機/HUD/コントロール)は固定＝動かさない。 */
.qshake1{animation:qshake1 .3s ease}
.qshake2{animation:qshake2 .34s ease}
.qshake3{animation:qshake3 .36s ease}
@keyframes qshake1{0%,100%{transform:translate(0,0)}25%{transform:translate(-2px,1px)}50%{transform:translate(2px,-1px)}75%{transform:translate(-1px,1px)}}
@keyframes qshake2{0%,100%{transform:translate(0,0)}20%{transform:translate(-4px,2px)}45%{transform:translate(4px,-2px)}70%{transform:translate(-2px,1px)}}
@keyframes qshake3{0%,100%{transform:translate(0,0)}18%{transform:translate(-6px,3px)}40%{transform:translate(6px,-3px)}62%{transform:translate(-3px,2px)}84%{transform:translate(2px,-1px)}}

/* 敵カードの着弾揺れをティアで強く
   (3) 連打ズーム修正(2026-06-20 会長指示)：撃つを速く連打しても画面がアップ(拡大)
   しないよう、敵カードの揺れから scale(拡大) を完全に削除し“平行移動のみ”にする。
   連打で短い間に何度も再生されても、揺れ幅が累積して拡大に見える事故が起きない。
   敵カードの大きさ(レイアウト)は常に固定。手応えは平行移動の振れだけで出す。 */
.shake2{animation:shake2 .34s}
.shake3{animation:shake3 .36s}
@keyframes shake2{0%,100%{transform:translate(0,0)}25%{transform:translate(-9px,3px)}50%{transform:translate(8px,-4px)}75%{transform:translate(-5px,4px)}}
@keyframes shake3{0%,100%{transform:translate(0,0)}20%{transform:translate(-13px,5px)}45%{transform:translate(12px,-6px)}70%{transform:translate(-8px,5px)}88%{transform:translate(5px,-3px)}}

/* ===========================================================
   商店(ショップ・課金デモ・アイテム) 担当B3 — 黒×オレンジで統一
   =========================================================== */
/* 商店/図鑑/ランキング/ガレージ/訪問 は、ベタ塗りをやめ“海中の窓”として
   半透明のディープ・パネルで世界層の海を透かす（没入感を全画面で継続）。 */
#scrShop{background:linear-gradient(180deg, rgba(6,18,34,.86), rgba(4,12,26,.92))}
.shop-head{display:flex; align-items:center; gap:10px; padding:14px}
.shop-head h2{font-weight:900}
.shop-tabs{display:flex; gap:6px; overflow-x:auto; padding:0 12px 8px; -webkit-overflow-scrolling:touch}
.shop-tab{flex:none; appearance:none; border:1px solid var(--line); background:var(--panel);
  color:var(--dim); border-radius:999px; padding:9px 14px; font-size:13px; font-weight:800; cursor:pointer}
.shop-tab.on{background:linear-gradient(180deg,var(--orange2),var(--orange)); color:#1a0d00; border-color:transparent;
  box-shadow:0 4px 12px rgba(255,122,24,.35)}
.shop-body{flex:1; overflow-y:auto; -webkit-overflow-scrolling:touch; padding:6px 14px 28px}

/* デモ注記 */
.shop-demo-note{font-size:12px; color:var(--dim); background:rgba(255,122,24,.10);
  border:1px solid rgba(255,122,24,.30); border-radius:12px; padding:9px 12px; margin:4px 0 12px; line-height:1.6}
.shop-demo-note b{color:var(--orange2)}
.shop-empty{color:var(--dim); text-align:center; padding:40px 0; font-size:14px}

/* ポイントパック(課金デモ) */
.pp-grid{display:grid; grid-template-columns:repeat(2,1fr); gap:12px}
.pp-card{position:relative; appearance:none; cursor:pointer; text-align:center;
  background:linear-gradient(180deg,var(--panel2),var(--panel)); border:1px solid var(--line);
  border-radius:18px; padding:18px 10px 14px; color:var(--ink);
  box-shadow:0 6px 18px rgba(0,0,0,.4); display:flex; flex-direction:column; align-items:center; gap:4px}
.pp-card:active{transform:translateY(2px)}
.pp-pt{font-size:24px; font-weight:900; color:var(--orange2)}
.pp-pt small{font-size:12px; color:var(--dim); font-weight:700}
.pp-label{font-size:13px; font-weight:800; color:#cdd6e4}
.pp-bonus{font-size:11px; font-weight:800; color:var(--good)}
.pp-yen{font-size:15px; font-weight:900; margin-top:6px}
.pp-buy{margin-top:8px; width:100%; border-radius:10px; padding:8px 0; font-size:13px; font-weight:900;
  color:#1a0d00; background:linear-gradient(180deg,var(--orange2),var(--orange))}
.pp-badge{position:absolute; top:-9px; right:10px; font-size:10px; font-weight:900; padding:3px 9px; border-radius:999px;
  color:#1a0d00}
.pp-badge.best{background:#ffd34d; box-shadow:0 2px 8px rgba(255,211,77,.5)}
.pp-badge.pop {background:var(--good); color:#04140c}

/* アイテム行 */
.shop-item{display:flex; align-items:center; gap:12px; background:var(--panel); border:1px solid var(--line);
  border-radius:14px; padding:12px; margin-bottom:10px}
.shop-item.equipped{border-color:var(--orange); box-shadow:0 0 0 1px var(--orange),0 0 14px rgba(255,122,24,.25)}
.it-ico{flex:none; width:42px; height:42px; border-radius:12px; background:var(--panel2); border:1px solid var(--line);
  display:flex; align-items:center; justify-content:center; font-size:20px}
.it-main{flex:1; min-width:0}
.it-name{font-size:15px; font-weight:900}
.it-eff{font-size:11px; color:var(--dim); line-height:1.5; margin-top:2px}
.it-meta{margin-top:5px; font-size:12px; font-weight:800}
.it-price{color:var(--orange2)}
/* (5) 効能・効果を分かりやすく：「効果／どれだけ／いつ」を見出し付きチップで明示 */
.it-eff-grid{display:flex; flex-direction:column; gap:4px; margin-top:6px}
.it-eff-chip{display:flex; align-items:center; gap:6px; background:rgba(255,177,92,.08);
  border:1px solid rgba(255,177,92,.22); border-radius:9px; padding:4px 8px; font-size:11px; line-height:1.35}
.it-eff-chip .iec-ic{flex:none; font-size:12px}
.it-eff-chip .iec-k{flex:none; color:var(--orange2); font-weight:900; min-width:44px}
.it-eff-chip .iec-v{color:#dfe7f2; font-weight:700}
.it-have{color:var(--good)}
.it-cnt{color:#cdd6e4}
.it-act{flex:none}
.shop-act{appearance:none; border:none; cursor:pointer; border-radius:10px; padding:10px 14px; font-size:13px; font-weight:900;
  color:#1a0d00; background:linear-gradient(180deg,var(--orange2),var(--orange)); box-shadow:0 3px 0 #b94e00}
.shop-act:active{transform:translateY(2px); box-shadow:0 1px 0 #b94e00}
.shop-act.eq{background:linear-gradient(180deg,#7fd4ff,#2b8fd0); box-shadow:0 3px 0 #14598c; color:#04121e}
.shop-act.on{background:var(--panel2); color:var(--good); border:1px solid var(--good); box-shadow:none; cursor:default}
.shop-act:disabled{filter:grayscale(.7) brightness(.55); box-shadow:none; cursor:default}

/* 一覧の上に重ねる小トースト(購入結果) */
.shop-flash{position:absolute; left:50%; bottom:24px; transform:translateX(-50%) translateY(10px);
  background:rgba(8,10,18,.94); border:1px solid var(--orange); color:var(--orange2);
  font-size:13px; font-weight:800; padding:10px 18px; border-radius:999px; opacity:0; pointer-events:none;
  transition:opacity .2s, transform .2s; z-index:20}
.shop-flash.show{opacity:1; transform:translateX(-50%) translateY(0)}

/* 課金デモ確認カードの明細・タグ */
.demo-tag{display:inline-block; font-size:11px; font-weight:900; color:#1a0d00;
  background:linear-gradient(180deg,var(--orange2),var(--orange)); padding:4px 12px; border-radius:999px; margin:2px 0 12px}
.pp-conf{text-align:left; margin:6px 0 4px}
.pp-conf .row{display:flex; justify-content:space-between; padding:8px 4px; border-bottom:1px solid var(--line); font-size:14px}
.pp-conf .row:last-child{border-bottom:none}
.pp-conf .row b{color:var(--orange2); font-weight:900}
.pp-conf .row.total{font-size:17px; font-weight:900; color:#fff}

/* コントロール */
.controls{position:relative; z-index:3; padding:10px 14px calc(14px + env(safe-area-inset-bottom)); display:flex; gap:10px; align-items:stretch; background:linear-gradient(0deg,#070a12,transparent)}
.wbtn{flex:none; width:128px; border-radius:16px; border:2px solid var(--line); background:var(--panel);
  color:var(--ink); display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; cursor:pointer; padding:8px;
  transition:border-color .2s ease}
.wbtn:active{transform:translateY(2px)}
.wbtn .wlab{font-size:10px; color:var(--dim)}
.wbtn .wname{font-size:16px; font-weight:900}
.wbtn .wstar{font-size:11px; letter-spacing:2px; margin-top:1px}
.wbtn .wmatch{font-size:9px; font-weight:800; margin-top:2px; line-height:1.2; text-align:center; min-height:11px}
.fire{flex:1; font-size:20px}
/* ダイブ中のアイテムボタン(消耗品) 担当B3 */
.itembtn{flex:none; width:58px; font-size:22px; padding:8px; position:relative}
.ib-badge{position:absolute; top:-6px; right:-6px; min-width:20px; height:20px; padding:0 5px; border-radius:999px;
  background:var(--bad); color:#fff; font-size:12px; font-weight:900; display:none; align-items:center; justify-content:center;
  box-shadow:0 2px 6px rgba(0,0,0,.5)}

.dmg{position:absolute; font-weight:900; font-size:30px; pointer-events:none; z-index:6;
  text-shadow:0 2px 6px #000; animation:fly 1s ease-out forwards}
.dmg.crit{font-size:40px; color:#ffd34d}
@keyframes fly{0%{opacity:0; transform:translateY(8px) scale(.7)}20%{opacity:1}100%{opacity:0; transform:translateY(-46px) scale(1.1)}}
.shake{animation:shake .3s}
@keyframes shake{0%,100%{transform:translate(0,0)}25%{transform:translate(-6px,2px)}50%{transform:translate(5px,-3px)}75%{transform:translate(-3px,3px)}}

/* ===========================================================
   オーバーレイ(勝利/レベルアップ/集計/遊び方)
   =========================================================== */
.ov{position:absolute; inset:0; z-index:30; display:none; align-items:center; justify-content:center; padding:24px;
  background:rgba(4,5,9,.78); -webkit-backdrop-filter:blur(3px); backdrop-filter:blur(3px)}
.ov.on{display:flex; animation:fade .25s}
.card{background:linear-gradient(180deg,var(--panel2),var(--panel)); border:1px solid var(--line); border-radius:22px;
  padding:22px; width:100%; max-width:340px; text-align:center; box-shadow:0 20px 60px rgba(0,0,0,.6)}
.card h2{font-size:23px; font-weight:900; margin-bottom:6px}
.card .big{font-size:46px; margin:6px 0}
.card .ename{font-size:16px; font-weight:800; margin:2px 0}
.card .reward{color:var(--orange2); font-weight:900; font-size:20px; margin:10px 0}
.card .sub{color:var(--dim); font-size:13px; line-height:1.6; margin:6px 0 14px}
.card .btn{width:100%}
.card .btn + .btn{margin-top:10px}

/* ============ 遊び方ガイド（全ルールをくわしく・スクロール） ============ */
.help-card{max-width:380px; text-align:left; position:relative; padding:20px 16px 16px;
  max-height:88vh; display:flex; flex-direction:column}
.help-card h2{text-align:center}
.help-card .dex-x{position:absolute; top:10px; right:10px}
.help-scroll{overflow-y:auto; -webkit-overflow-scrolling:touch; padding:4px 2px 6px; margin:8px 0 12px;
  flex:1; min-height:0}
.help-sec{background:rgba(8,10,18,.5); border:1px solid var(--line); border-radius:14px;
  padding:12px 12px 11px; margin-bottom:10px}
.help-sec.hl{border-color:rgba(255,177,92,.5); box-shadow:0 0 14px rgba(255,122,24,.14)}
.help-h{display:flex; align-items:center; gap:8px; font-size:15px; font-weight:900; color:var(--ink); margin-bottom:7px}
.help-num{flex:none; width:22px; height:22px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-size:12px; font-weight:900; color:#1a0d00; background:linear-gradient(180deg,var(--orange2),var(--orange))}
.help-p{font-size:13px; line-height:1.7; color:#cdd6e4; margin:0 0 4px}
.help-p b{color:var(--ink)}
.help-tip{font-size:12px; line-height:1.65; color:var(--orange2); background:rgba(255,122,24,.08);
  border-radius:10px; padding:8px 10px; margin:6px 0 0; font-weight:700}
.help-tip b{color:var(--orange2)}
.hl-2x{color:#ffd23a; font-size:15px}
.help-ul{margin:4px 0 0; padding-left:18px; font-size:13px; line-height:1.7; color:#cdd6e4}
.help-ul li{margin-bottom:3px}
.help-ul b{color:var(--ink)}
/* 流れ（チップ→チップ） */
.help-flow{display:flex; align-items:center; flex-wrap:wrap; gap:6px; margin:2px 0 8px}
.help-flow .hf{background:rgba(255,255,255,.05); border:1px solid var(--line); border-radius:999px;
  padding:5px 10px; font-size:12px; font-weight:800; color:var(--ink)}
.help-flow .hf-arw{color:var(--orange2); font-weight:900}
/* 属性＝色＝武器 表 */
.help-attr{display:grid; grid-template-columns:1fr 1fr; gap:7px; margin:8px 0 6px}
.ha-row{display:flex; align-items:center; gap:6px; background:rgba(255,255,255,.04);
  border:1px solid var(--line); border-radius:10px; padding:7px 8px; font-size:12px; font-weight:800}
.ha-dot{flex:none; width:12px; height:12px; border-radius:50%}
.ha-attr{font-weight:900}
.ha-eq{color:var(--dim)}
.ha-w{font-weight:900}
.ha-x{margin-left:auto; color:#ffd23a; font-weight:900; font-size:13px}
/* 武器のちがい */
.help-w{display:flex; flex-direction:column; gap:8px}
.hw-row{background:rgba(255,255,255,.04); border:1px solid var(--line); border-left:4px solid var(--orange);
  border-radius:10px; padding:8px 10px}
.hw-top{display:flex; align-items:baseline; gap:8px; flex-wrap:wrap}
.hw-top b{font-size:14px}
.hw-good{font-size:11px; font-weight:900; color:#ffd23a}
.hw-desc{font-size:12px; line-height:1.6; color:#bcc6d6; margin-top:3px}
/* 各画面の使い方 */
.help-scr{display:flex; flex-direction:column; gap:8px}
.help-scr .hs{display:flex; gap:10px; align-items:flex-start}
.help-scr .hs-i{flex:none; font-size:20px; width:26px; text-align:center}
.help-scr .hs div{font-size:12.5px; line-height:1.6}
.help-scr .hs b{display:block; color:var(--ink); font-size:13px; margin-bottom:1px}
.help-scr .hs span{color:#bcc6d6}
.help-scr .hs b + span{display:inline}
/* 図鑑＆ランキングの見方（図解） */
.help-legend{display:flex; flex-direction:column; gap:10px; margin-top:4px}
.hl-row{display:flex; align-items:center; gap:10px}
.hl-chip{position:relative; flex:none; width:54px; height:46px; border-radius:10px; background:#10131e;
  border:1px solid var(--line); display:flex; align-items:center; justify-content:center}
.hl-chip .hl-no{position:absolute; top:3px; left:4px; font-size:7px; font-weight:900; color:var(--dim)}
.hl-chip .hl-dot{position:absolute; top:4px; right:4px; width:8px; height:8px; border-radius:50%}
.hl-chip.rank{background:linear-gradient(180deg,var(--orange2),var(--orange))}
.hl-chip.rank b{color:#1a0d00; font-size:20px; font-weight:900}
.hl-txt{font-size:12.5px; line-height:1.6; color:#bcc6d6}
.hl-txt b{color:var(--ink)}

/* ラン集計の明細 */
.tally{text-align:left; margin:10px 0 14px}
.tally .row{display:flex; justify-content:space-between; padding:8px 4px; border-bottom:1px solid var(--line); font-size:14px}
.tally .row:last-child{border-bottom:none}
.tally .row b{color:var(--orange2); font-weight:900}
.tally .row.total{font-size:16px; font-weight:900; color:#fff}

/* ===========================================================
   モンスター図鑑(担当B4) — 枠ありサムネのグリッド・シルエット・詳細
   =========================================================== */
.zukan-head h2{font-weight:900}
#zReward{animation:rwGlow 2.2s ease-in-out infinite}
@keyframes rwGlow{0%,100%{text-shadow:0 0 8px rgba(255,122,24,.35)}50%{text-shadow:0 0 18px rgba(255,177,92,.8)}}

/* 図鑑の属性フィルタタブ（すべて/青/赤/黄(光)/緑） */
.zukan-tabs{display:flex; gap:6px; overflow-x:auto; padding:0 14px 8px; -webkit-overflow-scrolling:touch}
.zukan-tab{flex:none; appearance:none; border:1.5px solid var(--line); background:var(--panel);
  color:var(--ink); border-radius:999px; padding:7px 14px; font-size:13px; font-weight:800; cursor:pointer}
.zukan-tab.on{background:rgba(8,10,18,.6); font-weight:900}
.zukan-tab:active{transform:scale(.97)}

/* 並び替えバー（番号順／撃破済優先）＋発見数の早見 */
.zukan-sortbar{display:flex; align-items:center; gap:8px; padding:0 14px 8px; flex-wrap:wrap}
.zukan-sortlab{font-size:11px; font-weight:800; color:var(--dim); letter-spacing:.06em}
.zukan-sorts{display:flex; gap:6px}
.zukan-sort{appearance:none; border:1px solid var(--line); background:var(--panel); color:var(--dim);
  border-radius:999px; padding:5px 11px; font-size:12px; font-weight:800; cursor:pointer}
.zukan-sort.on{background:linear-gradient(180deg,var(--orange2),var(--orange)); color:#1a0d00;
  border-color:transparent; box-shadow:0 2px 0 #b94e00}
.zukan-sort:active{transform:scale(.97)}
.zukan-count{margin-left:auto; font-size:11px; font-weight:900; color:var(--orange2)}

.zukan-grid{flex:1; overflow-y:auto; -webkit-overflow-scrolling:touch;
  display:grid; grid-template-columns:repeat(2,1fr); align-items:start; align-content:start;
  grid-auto-rows:max-content; gap:10px; padding:2px 14px 24px}
/* セル上端に属性色の細帯（一目で属性が分かる） */
.cell{border-top:3px solid var(--attr, transparent)}
/* セル右上の属性色ドット */
.attr-dot{position:absolute; top:7px; right:8px; z-index:2; width:11px; height:11px; border-radius:50%;
  box-shadow:0 0 6px currentColor, 0 0 0 2px rgba(0,0,0,.35)}
.cell{appearance:none; cursor:pointer; text-align:center; color:var(--ink); align-self:start;
  background:linear-gradient(180deg,var(--panel2),var(--panel)); border:1px solid var(--line);
  border-radius:14px; padding:0 0 8px; position:relative; overflow:hidden;
  box-shadow:0 4px 12px rgba(0,0,0,.35); transition:transform .12s ease, box-shadow .15s ease}
.cell:active{transform:scale(.97)}
.cell .num{position:absolute; top:7px; left:8px; z-index:2; font-size:9px; font-weight:900; letter-spacing:.04em;
  color:#cdd6e4; background:rgba(6,8,14,.72); border:1px solid var(--line); border-radius:999px; padding:2px 7px}
/* 枠ありカード(thumb)を丸ごと見せる。枠そのものが図鑑カードなので contain で全体表示 */
.cimg{position:relative; width:100%; aspect-ratio:1; overflow:hidden;
  background:radial-gradient(circle at 50% 40%, #11203a, #060a13 78%)}
.cimg img{width:100%; height:100%; object-fit:cover; display:block; transition:opacity .35s ease}
.cname{font-size:11px; font-weight:900; margin-top:7px; line-height:1.25; min-height:2.3em;
  display:flex; align-items:center; justify-content:center; padding:0 6px;
  overflow:hidden}
.crow{display:flex; align-items:center; justify-content:center; gap:5px; font-size:10px; color:var(--dim); margin-top:1px}
.crow .crystal{width:9px; height:9px}
.cmeta{font-weight:800}
.cweak{font-size:11px; font-weight:800; color:var(--orange2); margin-top:3px}
.cweak.dim{color:var(--dim)}
/* 未撃破=シルエット(画像を真っ黒に潰し、？で隠す) */
.cell.locked{border-style:dashed; opacity:.95}
/* 未発見は真っ黒に潰さず“深海に沈む影絵（シルエット）”に。形がうっすら見えて「集めたい」を誘う。
   暗い藍へ寄せたシルエット＋属性色のほのかな発光で、神秘的に隠す。 */
.cell.locked .cimg img{filter:brightness(.32) saturate(0) contrast(1.15) drop-shadow(0 0 2px rgba(190,215,255,.75)); opacity:.85}
.cell.locked .cimg::after{content:"？"; position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
  font-size:38px; font-weight:900; color:rgba(150,180,220,.5); z-index:1; text-shadow:0 2px 8px #000}
/* シルエットの背後に属性色のほのかな海明かり（一目で“何色の系統か”は伝わる） */
.cell.locked .cimg{position:relative; background:
  radial-gradient(70% 60% at 50% 45%, color-mix(in srgb, var(--attr, #3aa0ff) 22%, transparent), transparent 74%)}
.cell.locked .cname{color:var(--dim)}

/* 図鑑 詳細カード(タップで開く) */
.dex-card{max-width:330px; position:relative}
.dex-x{position:absolute; top:10px; right:12px; appearance:none; border:none; background:transparent;
  color:var(--dim); font-size:20px; cursor:pointer; line-height:1; padding:4px; z-index:2}
/* (6) 図鑑詳細＝枠付きの正しい全体画像(eNNN.png)を欠けなく表示。
   元画像が四角いカードなので contain で全体を、上品な縁取りで額装する。 */
.dex-d-img{width:72%; max-width:230px; margin:2px auto 8px; aspect-ratio:1; border-radius:16px; overflow:hidden;
  background:radial-gradient(circle at 50% 38%, rgba(120,200,255,.16), transparent 64%), #0a0d16;
  border:1px solid rgba(255,177,92,.4);
  box-shadow:0 12px 26px rgba(0,0,0,.55), 0 0 16px rgba(90,170,255,.2), inset 0 0 0 1px rgba(255,255,255,.06);
  display:flex; align-items:center; justify-content:center}
.dex-d-img img{width:100%; height:100%; object-fit:contain;
  filter:drop-shadow(0 8px 16px rgba(0,0,0,.6))}
.dex-d-img.locked img{filter:brightness(0) saturate(0); opacity:.55}
.dex-d-no{font-size:11px; font-weight:900; letter-spacing:.06em; color:var(--orange2); margin-bottom:2px}
.dex-d-rows{text-align:left; margin:12px 0 4px}
.dex-d-rows .row{display:flex; justify-content:space-between; gap:10px; padding:8px 4px; border-bottom:1px solid var(--line); font-size:13px}
.dex-d-rows .row:last-child{border-bottom:none}
.dex-d-rows .row span{color:var(--dim)}
.dex-d-rows .row b{color:var(--ink); font-weight:900; text-align:right}
.dex-d-hint{font-size:12px; color:#cdd6e4; background:rgba(255,122,24,.08); border:1px solid rgba(255,122,24,.22);
  border-radius:10px; padding:9px 11px; margin:4px 0 14px; line-height:1.6; text-align:left}

/* (4) 図鑑詳細＝NFTの明細(属性の意味・物語ストーリー全文)を読みやすく表示。
   長文でもカード内でスクロールできるようにし、見出し・本文を黒×オレンジで上品に。 */
.dex-d-scroll{max-height:72vh; overflow-y:auto; overflow-x:hidden; padding:2px 4px 2px;
  margin:-2px -2px 12px; -webkit-overflow-scrolling:touch}
.dex-d-scroll::-webkit-scrollbar{width:7px}
.dex-d-scroll::-webkit-scrollbar-thumb{background:rgba(255,122,24,.4); border-radius:6px}
.dex-d-scroll::-webkit-scrollbar-track{background:rgba(255,255,255,.04)}
.dex-d-sec-h{font-size:12px; font-weight:900; letter-spacing:.08em; color:var(--orange2);
  text-align:left; margin:0 2px 7px; display:flex; align-items:center; gap:7px}
.dex-d-sec-h::before{content:""; width:4px; height:14px; border-radius:2px;
  background:linear-gradient(180deg,#ffb15c,#ff7a18); display:inline-block}
/* 属性の意味ボックス */
.dex-d-attr{text-align:left; margin:2px 0 14px}
.dex-d-attr-txt{font-size:13px; line-height:1.7; color:#dfe7f2; margin:0;
  background:rgba(90,170,255,.08); border:1px solid rgba(120,200,255,.22);
  border-radius:10px; padding:10px 12px}
/* 物語ストーリーボックス（NFTの明細・全文） */
.dex-d-story{text-align:left; margin:2px 0 6px}
.dex-d-story-jp{font-size:13.5px; line-height:1.85; color:#e8edf5; margin:0 0 4px;
  white-space:pre-line; word-break:break-word}
.dex-d-story-en-wrap{margin-top:8px}
.dex-d-story-en-wrap > summary{font-size:12px; font-weight:800; color:var(--orange2); cursor:pointer;
  list-style:none; padding:7px 10px; border:1px solid rgba(255,122,24,.28);
  border-radius:9px; background:rgba(255,122,24,.07); user-select:none}
.dex-d-story-en-wrap > summary::-webkit-details-marker{display:none}
.dex-d-story-en-wrap[open] > summary{margin-bottom:8px}
.dex-d-story-en{font-size:12.5px; line-height:1.8; color:#b9c4d4; margin:0;
  white-space:pre-line; word-break:break-word}
.dex-d-story.hidden,.dex-d-attr.hidden{display:none}

/* 図鑑ごほうび(節目の演出) */
.dex-rw-burst{font-size:52px; margin:2px 0 4px; animation:rwPop .6s cubic-bezier(.2,1.4,.4,1)}
@keyframes rwPop{0%{transform:scale(.2); opacity:0}60%{transform:scale(1.25)}100%{transform:scale(1); opacity:1}}

/* ===========================================================
   世界ランキング(担当B4) — 黒×オレンジ・日/週/月 × 指標切替・TOP100
   =========================================================== */
#scrRank{background:linear-gradient(180deg, rgba(6,18,34,.86), rgba(4,12,26,.92))}
.rank-head{display:flex; align-items:center; gap:10px; padding:14px}
.rank-head h2{font-weight:900}
.rank-tabs{display:flex; gap:7px; padding:0 14px 8px}
.rank-tab{flex:1; appearance:none; border:1px solid var(--line); background:var(--panel);
  color:var(--dim); border-radius:999px; padding:10px 0; font-size:14px; font-weight:900; cursor:pointer; transition:all .12s}
.rank-tab.on{background:linear-gradient(180deg,var(--orange2),var(--orange)); color:#1a0d00; border-color:transparent;
  box-shadow:0 4px 12px rgba(255,122,24,.35)}
.rank-metrics{display:flex; gap:6px; overflow-x:auto; padding:0 14px 10px; -webkit-overflow-scrolling:touch}
.rank-mtab{flex:none; appearance:none; border:1px solid var(--line); background:var(--panel2);
  color:var(--dim); border-radius:10px; padding:8px 13px; font-size:13px; font-weight:800; cursor:pointer; transition:all .12s}
.rank-mtab.on{background:rgba(255,122,24,.16); color:var(--orange2); border-color:rgba(255,122,24,.5)}

/* 自分の記録(順位挿入) */
.rank-me{padding:0 14px 8px}
.rank-me-card{display:flex; align-items:center; gap:12px; border-radius:14px; padding:12px 14px;
  background:linear-gradient(120deg,rgba(255,122,24,.20),rgba(255,122,24,.05));
  border:1px solid var(--orange); box-shadow:0 0 16px rgba(255,122,24,.25)}
.rmk-rank{flex:none; min-width:54px; font-size:20px; font-weight:900; color:var(--orange2); text-align:center}
.rmk-main{flex:1; min-width:0}
.rmk-name{font-size:15px; font-weight:900; display:flex; align-items:center; gap:6px}
.rmk-you{font-size:9px; font-weight:900; color:#1a0d00; background:var(--orange2); border-radius:999px; padding:1px 6px}
.rmk-sub{font-size:11px; color:var(--dim); margin-top:1px}
.rmk-val{flex:none; font-size:16px; font-weight:900; color:#fff}

/* ランキング本体 */
.rank-list{flex:1; overflow-y:auto; -webkit-overflow-scrolling:touch; padding:0 12px 26px}
.rank-row{display:flex; align-items:center; gap:10px; padding:11px 12px; border-bottom:1px solid var(--line);
  font-size:14px; border-radius:10px}
.rank-row .rk-badge{flex:none; width:30px; text-align:center; font-size:18px; font-weight:900}
.rank-row .rk-badge .rk-no{font-size:13px; color:var(--dim)}
.rank-row .rk-flag{flex:none; font-size:18px}
.rank-row .rk-name{flex:1; min-width:0; font-weight:800; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.rank-row .rk-val{flex:none; font-weight:900; color:var(--orange2)}
.rank-row.rk1{background:linear-gradient(90deg,rgba(255,211,77,.16),transparent)}
.rank-row.rk2{background:linear-gradient(90deg,rgba(200,210,220,.13),transparent)}
.rank-row.rk3{background:linear-gradient(90deg,rgba(205,127,50,.14),transparent)}
.rank-row.rk1 .rk-val{color:#ffd34d}
.rank-row.here{outline:1.5px solid var(--orange); outline-offset:-1.5px; background:rgba(255,122,24,.12)}
.rank-empty{color:var(--dim); text-align:center; padding:40px 0; font-size:14px}

/* ===========================================================
   仕上げ(担当B4) — サンゴ/海藻スプライト・遷移をなめらかに
   =========================================================== */
/* CSSだけのサンゴ礁(海面付近・画像fx_*が無くても海らしさを足す) */
.coral{position:absolute; bottom:-2px; pointer-events:none; z-index:1; transform-origin:bottom center;
  animation:sway 6s ease-in-out infinite alternate; opacity:.0; transition:opacity 1.1s ease}
.coral.show{opacity:.9}
/* 横揺れ禁止（会長ルール）。左右の首振り回転をやめ、上品な縦の伸縮（呼吸）だけにする。 */
@keyframes sway{0%{transform:scaleY(.97)}100%{transform:scaleY(1.03)}}
/* 海藻(細長い揺れ) */
.weed{position:absolute; bottom:-2px; width:10px; pointer-events:none; z-index:1; transform-origin:bottom center;
  background:linear-gradient(180deg,transparent,#1c7a4e 30%,#0e5235); border-radius:8px 8px 0 0;
  animation:sway 4.5s ease-in-out infinite alternate; opacity:0; transition:opacity 1.1s ease}
.weed.show{opacity:.7}
/* 深い帯では浮遊する微粒子(マリンスノー) */
.snowdot{position:absolute; width:3px; height:3px; border-radius:50%; background:rgba(200,225,255,.5);
  pointer-events:none; animation:snowfall linear infinite}
@keyframes snowfall{0%{transform:translateY(-10px); opacity:0}10%{opacity:.7}100%{transform:translateY(112vh); opacity:0}}

/* ============ ガレージ(潜水艦100種・変更/購入) 担当B5 ============ */
#scrGarage{background:linear-gradient(180deg, rgba(6,18,34,.86), rgba(4,12,26,.92))}
.garage-head{display:flex; align-items:center; gap:10px; padding:14px}
.garage-head h2{font-weight:900}
/* 装備中プレビュー */
.garage-eq{display:flex; align-items:center; gap:14px; margin:0 14px 10px; padding:12px 14px;
  background:linear-gradient(180deg,var(--panel2),var(--panel)); border:1px solid var(--orange);
  border-radius:16px; box-shadow:0 0 18px rgba(255,122,24,.18)}
/* 装備中プレビュー: 暗い機体画像でも見えるよう明るい観測窓パネルに入れる */
.garage-eq-pic{flex:none; width:104px; height:78px; border-radius:14px; overflow:hidden;
  border:2px solid rgba(140,200,255,.5);
  background:radial-gradient(circle at 50% 40%, #57aee8, #245f95 70%, #143f66 100%);
  box-shadow:0 6px 14px rgba(0,0,0,.45), 0 0 14px rgba(120,200,255,.3);
  display:flex; align-items:center; justify-content:center}
.garage-eq-pic img{width:100%; height:100%; object-fit:cover; animation:bob 3.4s ease-in-out infinite alternate;
  filter:brightness(1.2) contrast(1.08) saturate(1.04) !important}
.garage-eq-info{flex:1; min-width:0}
.garage-eq-lab{font-size:11px; font-weight:900; letter-spacing:.1em; color:var(--orange2)}
.garage-eq-name{font-size:18px; font-weight:900; color:var(--ink); margin:1px 0 2px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.garage-eq-meta{font-size:12px; color:var(--dim)}
/* 横揺れ禁止（会長ルール）。傾きの往復をやめ、上下の浮遊（呼吸）だけにする。 */
@keyframes bob{0%{transform:translateY(-3px)}100%{transform:translateY(3px)}}
/* フィルタタブ */
.garage-tabs{display:flex; gap:6px; padding:0 14px 8px}
.garage-tab{flex:none; appearance:none; border:1px solid var(--line); background:var(--panel);
  color:var(--dim); border-radius:999px; padding:7px 14px; font-size:13px; font-weight:800; cursor:pointer}
.garage-tab.on{background:linear-gradient(180deg,var(--orange2),var(--orange)); color:#1a0d00; border-color:transparent;
  box-shadow:0 3px 0 #b94e00}
/* グリッド */
/* grid-auto-rows:max-content を明示しないと、overflow:auto のグリッド行が
   24px に潰れてカードが表示されない(=ガレージが出ないバグの真因)。図鑑gridと同じ対策。 */
.garage-grid{flex:1; overflow-y:auto; -webkit-overflow-scrolling:touch; padding:6px 12px 28px;
  display:grid; grid-template-columns:repeat(2,1fr); align-items:start; align-content:start;
  grid-auto-rows:max-content; gap:10px}
.garage-empty{grid-column:1/-1; text-align:center; color:var(--dim); padding:30px 10px}
.garage-card{background:var(--panel); border:1px solid var(--line); border-radius:16px;
  padding:12px 10px 10px; display:flex; flex-direction:column; align-items:center; text-align:center;
  position:relative; overflow:hidden}
/* 上端の淡い差し色。color-mix は iOS Safari 16.2+ のみ → 先に無害なフォールバックを敷く。 */
.garage-card::before{content:""; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(120% 70% at 50% -10%, rgba(255,122,24,.14), transparent 70%);
  background:radial-gradient(120% 70% at 50% -10%, color-mix(in srgb, var(--tint, #ff7a18) 22%, transparent), transparent 70%)}
.garage-card.equipped{border-color:var(--orange); box-shadow:0 0 0 1px var(--orange),0 0 16px rgba(255,122,24,.28)}
.garage-card.locked{filter:saturate(.85)}
/* 一覧カードの機体: 明るい観測窓パネルに入れて、暗い機体でも100種が見えて選べるように。
   flex:none + min-height で flex の縮みを防ぎ、必ず高さ84pxを確保する(潰れ対策)。 */
.garage-c-pic{position:relative; z-index:1; flex:none; width:100%; height:84px; min-height:84px;
  border-radius:12px; overflow:hidden; border:1px solid rgba(140,200,255,.4);
  background:radial-gradient(circle at 50% 40%, #4ea6e4, #235c92 72%, #143f66 100%);
  box-shadow:inset 0 0 18px rgba(0,0,0,.25); display:flex; align-items:center; justify-content:center; margin-bottom:6px}
.garage-c-img{width:100%; height:100%; object-fit:cover; filter:brightness(1.18) contrast(1.07) saturate(1.03)}
.garage-card.locked .garage-c-img{opacity:.82; filter:brightness(1.0) contrast(1.05) saturate(.9)}
/* ミステリー艇(37番以降)：画像なし「？」表示（名前だけの謎の艇） */
.garage-c-pic.mystery, .garage-eq-pic.mystery{
  background:radial-gradient(circle at 50% 40%, #1a2740, #0b1322 78%);}
.myst-q{font-size:40px; font-weight:900; color:#3a4a66; text-shadow:0 2px 8px #000;
  display:flex; align-items:center; justify-content:center; width:100%; height:100%}
/* ミステリー艇の通し番号(？の下に小さく)。"謎だけどNoはある"でコレクション欲を出す */
.myst-no{position:absolute; left:0; right:0; bottom:6px; text-align:center;
  font-size:10px; font-weight:900; letter-spacing:.08em; color:#5a6e92}
.garage-card.mystery{opacity:.97}
.garage-c-name{position:relative; z-index:1; font-size:13px; font-weight:900; color:var(--ink); line-height:1.25;
  min-height:32px; display:flex; align-items:center; justify-content:center}
.garage-c-stats{position:relative; z-index:1; font-size:11px; color:var(--dim); margin:2px 0 4px}
.garage-c-meta{position:relative; z-index:1; font-size:11px; margin-bottom:8px; min-height:15px}
.garage-have{color:var(--good); font-weight:900}
.garage-lock{color:var(--dim); font-weight:800}
.garage-c-act{position:relative; z-index:1; width:100%}
.garage-act{appearance:none; border:none; cursor:pointer; width:100%; border-radius:10px; padding:9px 10px;
  font-size:13px; font-weight:900; color:#1a0d00;
  background:linear-gradient(180deg,var(--orange2),var(--orange)); box-shadow:0 3px 0 #b94e00}
.garage-act:active{transform:translateY(2px); box-shadow:0 1px 0 #b94e00}
.garage-act.eq{background:linear-gradient(180deg,#7fd4ff,#2b8fd0); box-shadow:0 3px 0 #14598c; color:#04121e}
.garage-act.on{display:block; background:var(--panel2); color:var(--good); border:1px solid var(--good);
  box-shadow:none; cursor:default}
.garage-act.buy:disabled{filter:grayscale(.7) brightness(.55); box-shadow:none; cursor:default}
/* フラッシュ(トースト) */
.garage-flash{position:absolute; left:50%; bottom:24px; transform:translateX(-50%) translateY(10px);
  background:rgba(8,10,18,.94); border:1px solid var(--orange); color:var(--orange2);
  font-weight:900; font-size:14px; padding:10px 18px; border-radius:999px; opacity:0;
  transition:opacity .25s ease, transform .25s ease; pointer-events:none; z-index:5}
.garage-flash.show{opacity:1; transform:translateX(-50%) translateY(0)}

.hidden{display:none!important}

/* ===========================================================
   UI全刷新 v3 — レベルHUD / 言語ピッカー / 他ユーザー訪問
   =========================================================== */

/* ---- 拠点トップの2段HUD（あなたLv と 潜水艦Lv を別カードで明確に区別） ---- */
#scrHome .topbar2{padding-top:0; padding-bottom:6px; background:transparent}
.lv-hud{display:flex; gap:8px; flex:1; min-width:0}
.lvcard{display:flex; align-items:center; gap:8px; padding:7px 11px; border-radius:14px;
  border:1px solid var(--line); background:linear-gradient(180deg, rgba(13,28,48,.82), rgba(8,18,34,.82));
  -webkit-backdrop-filter:blur(4px); backdrop-filter:blur(4px); box-shadow:0 4px 14px rgba(0,0,0,.35)}
.lvcard .lv-ic{font-size:19px; line-height:1; filter:drop-shadow(0 1px 2px rgba(0,0,0,.6))}
.lvcard .lv-meta{display:flex; flex-direction:column; line-height:1.05}
.lvcard .lv-lab{font-size:9.5px; font-weight:800; letter-spacing:.08em; color:var(--dim)}
.lvcard .lv-val{font-size:13px; font-weight:800; color:var(--ink)}
.lvcard .lv-val b{font-size:18px; font-weight:900}
/* あなた(プレイヤー)＝アクア、潜水艦(装備艇)＝オレンジ で色分け（混同しない） */
.lvcard.you{border-color:rgba(92,200,255,.55); box-shadow:0 0 0 1px rgba(92,200,255,.18),0 4px 14px rgba(0,0,0,.35)}
.lvcard.you .lv-lab{color:#9fdcff}
.lvcard.you .lv-val b{color:#7fd4ff}
.lvcard.sub{border-color:rgba(255,122,24,.5); box-shadow:0 0 0 1px rgba(255,122,24,.16),0 4px 14px rgba(0,0,0,.35)}
.lvcard.sub .lv-lab{color:var(--orange2)}
.lvcard.sub .lv-val b{color:var(--orange2)}

/* ---- ダイブ中の自機HUDタグ（あなたLv / 潜水艦Lv） ----
   (5) 「あなた Lv.◯」が暗くて見えにくい問題の修正(2026-06-20 会長指示)。
   あなたLv（＝プレイヤー自身の腕前レベル）をはっきり見えるように、文字サイズ・
   コントラスト・縁取りを上げ、明るいシアンの“塗り”ピル＋濃い文字影で常時くっきり。
   潜水艦Lv（オレンジ）とは色も塗りも分けて、ひと目で別物と分かるようにする。 */
.pl-hud{align-items:center}
.pl-tags{display:inline-flex; gap:7px; flex-wrap:wrap}
.pl-tag{font-size:12.5px; font-weight:900; padding:3px 10px; border-radius:999px; border:1.5px solid var(--line);
  background:rgba(8,12,22,.72); display:inline-flex; align-items:center; gap:4px; letter-spacing:.01em;
  text-shadow:0 1px 2px rgba(0,0,0,.85)}
.pl-tag b{font-size:16px; line-height:1}
/* あなたLv＝主役。明るいシアンの塗りピルで暗い海中でも必ず読める。 */
.pl-tag.you{border-color:#7fe0ff;
  background:linear-gradient(180deg, rgba(60,160,255,.42), rgba(20,70,140,.5));
  color:#eaf8ff; box-shadow:0 2px 8px rgba(0,0,0,.5), 0 0 12px rgba(92,200,255,.45), inset 0 0 0 1px rgba(255,255,255,.22)}
.pl-tag.you b{color:#ffffff; font-size:17px; text-shadow:0 1px 3px rgba(0,0,40,.9), 0 0 8px rgba(140,220,255,.6)}
/* 潜水艦Lv＝オレンジで明確に区別（あなたLvより一段控えめ）。 */
.pl-tag.sub{border-color:rgba(255,150,60,.7); color:#ffd9b0;
  background:linear-gradient(180deg, rgba(255,122,24,.22), rgba(120,50,10,.34))}
.pl-tag.sub b{color:#ffe7c4; text-shadow:0 1px 2px rgba(40,16,0,.9)}

/* ---- 言語ピッカー（旗ボタン・既定=日本語） ---- */
.lang-picker{display:flex; gap:5px; align-items:center}
.lang-picker.corner{position:absolute; top:calc(10px + env(safe-area-inset-top)); right:12px; z-index:5}
.lang-btn{appearance:none; cursor:pointer; border:1px solid var(--line); border-radius:10px;
  background:rgba(10,20,36,.72); -webkit-backdrop-filter:blur(4px); backdrop-filter:blur(4px);
  padding:4px 6px; line-height:1; transition:transform .1s, border-color .15s, box-shadow .15s}
.lang-btn .lang-flag{font-size:17px; filter:grayscale(.35); opacity:.7; transition:filter .15s, opacity .15s}
.lang-btn:active{transform:translateY(1px)}
.lang-btn.on{border-color:var(--orange); box-shadow:0 0 0 1px var(--orange),0 2px 10px rgba(255,122,24,.3)}
.lang-btn.on .lang-flag{filter:none; opacity:1}
.lang-picker.mini .lang-btn{padding:3px 5px}
.lang-picker.mini .lang-flag{font-size:15px}

/* ===========================================================
   🌐 地球儀 言語ピッカー（波5・会長要望31：文字でなくアイコン）
   =========================================================== */
.lang-globe{display:inline-flex; align-items:center}
.lang-globe.corner{position:absolute; top:calc(10px + env(safe-area-inset-top)); right:12px; z-index:6}
.lang-globe-btn{appearance:none; cursor:pointer; border:1px solid var(--line); border-radius:50%;
  width:38px; height:38px; display:flex; align-items:center; justify-content:center;
  background:rgba(10,20,36,.72); -webkit-backdrop-filter:blur(5px); backdrop-filter:blur(5px);
  transition:transform .12s, border-color .15s, box-shadow .15s}
.lang-globe-btn:hover{border-color:var(--orange); box-shadow:0 0 0 1px rgba(255,122,24,.35),0 2px 12px rgba(255,122,24,.25)}
.lang-globe-btn:active{transform:scale(.94)}
.lang-globe-ic{font-size:21px; line-height:1}
.lang-globe.mini .lang-globe-btn{width:32px; height:32px}
.lang-globe.mini .lang-globe-ic{font-size:18px}

/* 言語選択シート（モーダル） */
.lang-sheet-backdrop{position:fixed; inset:0; z-index:200; display:none;
  background:rgba(2,6,14,.62); -webkit-backdrop-filter:blur(3px); backdrop-filter:blur(3px);
  align-items:flex-start; justify-content:center; padding:0 14px}
.lang-sheet-backdrop.on{display:flex; animation:langFade .16s ease}
@keyframes langFade{from{opacity:0}to{opacity:1}}
.lang-sheet{margin-top:14vh; width:100%; max-width:360px; max-height:72vh; overflow:auto;
  background:linear-gradient(180deg,#0e1c30,#0a1422); border:1px solid var(--line);
  border-radius:16px; box-shadow:0 18px 60px rgba(0,0,0,.55); animation:langPop .18s ease}
@keyframes langPop{from{transform:translateY(10px) scale(.97); opacity:0}to{transform:none; opacity:1}}
.lang-sheet-head{display:flex; align-items:center; justify-content:space-between;
  padding:14px 16px; border-bottom:1px solid var(--line); position:sticky; top:0;
  background:linear-gradient(180deg,#0e1c30,#0e1c30f0)}
.lang-sheet-title{font-weight:800; font-size:15px; letter-spacing:.02em}
.lang-sheet-x{appearance:none; cursor:pointer; border:none; background:transparent;
  color:var(--dim); font-size:18px; padding:4px 8px; border-radius:8px}
.lang-sheet-x:hover{color:#fff; background:rgba(255,255,255,.08)}
.lang-sheet-list{padding:8px}
.lang-opt{appearance:none; cursor:pointer; width:100%; display:flex; align-items:center; gap:12px;
  border:1px solid transparent; border-radius:12px; background:transparent; color:#e8eef7;
  padding:11px 12px; text-align:left; font-size:15px; transition:background .12s, border-color .12s}
.lang-opt:hover{background:rgba(255,255,255,.06)}
.lang-opt.on{border-color:var(--orange); background:rgba(255,122,24,.10)}
.lang-opt-flag{font-size:22px; line-height:1; width:26px; text-align:center}
.lang-opt-label{flex:1; font-weight:600}
.lang-opt-check{color:var(--orange); font-weight:800}
/* RTL（アラビア語）でのシート内整列補正 */
html[dir="rtl"] .lang-opt{text-align:right}

/* ===========================================================
   他ユーザー訪問（マイガレージ見学）
   =========================================================== */
#scrVisit{background:linear-gradient(180deg, rgba(6,18,34,.9), rgba(3,10,22,.94))}
.visit-head{display:flex; align-items:center; gap:10px; padding:14px 14px 6px}
.visit-hero{display:flex; align-items:center; gap:14px; margin:0 14px 10px; padding:14px 16px;
  border-radius:18px; border:1px solid rgba(255,122,24,.45);
  background:linear-gradient(120deg, rgba(255,122,24,.16), rgba(13,28,48,.6));
  box-shadow:0 0 20px rgba(255,122,24,.18)}
.visit-flag{font-size:40px; line-height:1; filter:drop-shadow(0 3px 6px rgba(0,0,0,.5))}
.visit-id{flex:1; min-width:0}
.visit-name{font-size:21px; font-weight:900; color:#fff; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.visit-sub{font-size:12px; color:var(--orange2); font-weight:800; margin-top:2px}
/* ステータス帯 */
.visit-stats{display:flex; gap:8px; padding:0 14px 10px; flex-wrap:wrap}
.vstat{flex:1; min-width:74px; text-align:center; padding:8px 6px; border-radius:12px;
  background:rgba(13,24,42,.7); border:1px solid var(--line)}
.vstat .vs-lab{display:block; font-size:10px; color:var(--dim); letter-spacing:.04em}
.vstat .vs-val{display:block; font-size:18px; font-weight:900; color:var(--orange2); margin-top:2px}
.vstat.fav{flex-basis:100%}
.vstat.fav .vs-val{font-size:15px; color:#7ef9ff}
/* コレクショングリッド（見学のみ） */
.visit-grid{flex:1; overflow-y:auto; -webkit-overflow-scrolling:touch; padding:6px 12px 28px;
  display:grid; grid-template-columns:repeat(3,1fr); align-content:start; grid-auto-rows:max-content; gap:9px}
.visit-card{background:rgba(15,26,44,.78); border:1px solid var(--line); border-radius:14px;
  padding:8px 6px 9px; display:flex; flex-direction:column; align-items:center; text-align:center;
  position:relative; overflow:hidden}
.visit-card::before{content:""; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(120% 70% at 50% -10%, rgba(255,122,24,.12), transparent 70%);
  background:radial-gradient(120% 70% at 50% -10%, color-mix(in srgb, var(--tint,#ff7a18) 26%, transparent), transparent 70%)}
.visit-c-pic{position:relative; z-index:1; width:100%; height:62px; min-height:62px; border-radius:10px; overflow:hidden;
  border:1px solid rgba(140,200,255,.4);
  background:radial-gradient(circle at 50% 40%, #4ea6e4, #235c92 72%, #143f66 100%);
  display:flex; align-items:center; justify-content:center; margin-bottom:5px}
.visit-c-pic.mystery{background:radial-gradient(circle at 50% 40%, #1a2740, #0b1322 78%)}
.visit-c-pic .myst-q{font-size:30px; font-weight:900; color:#3a4a66; text-shadow:0 2px 6px #000}
.visit-c-pic .myst-no{position:absolute; left:0; right:0; bottom:4px; text-align:center;
  font-size:9px; font-weight:900; color:#5a6e92}
.visit-c-img{width:100%; height:100%; object-fit:cover; filter:brightness(1.18) contrast(1.07) saturate(1.04)}
.visit-c-name{position:relative; z-index:1; font-size:11px; font-weight:900; color:var(--ink); line-height:1.2;
  min-height:26px; display:flex; align-items:center; justify-content:center}
.visit-c-rar{position:relative; z-index:1; font-size:10px; font-weight:900; letter-spacing:.04em}

/* ランキング行：訪問できることを示す（› と押下感） */
.rank-row.visitable{cursor:pointer}
.rank-row.visitable:active{background:rgba(255,122,24,.10)}
.rank-row .rk-go{flex:none; color:var(--dim); font-size:20px; font-weight:900; width:14px; text-align:center; opacity:.7}

/* ===========================================================
   レスポンシブ（タブレット/デスクトップでも崩さない・共通ルール準拠）
   =========================================================== */
@media (min-width:560px){
  .visit-grid{grid-template-columns:repeat(4,1fr)}
}

/* ===========================================================
   PC／タブレット（縦型スマホ画面より広い時）の“額装”
   画面本体(#app)は縦型のまま中央に置き、左右の黒い余白を
   深海のグラデと淡い光で満たして「意図して額装したスマホアプリ」に見せる。
   スマホ縦持ちの体験はそのまま、PCで開いても作りかけに見えないようにする。
   =========================================================== */
@media (min-width:540px){
  html,body{background:
    radial-gradient(120% 80% at 50% -8%, rgba(120,200,255,.10), transparent 46%),
    radial-gradient(80% 60% at 50% 120%, rgba(20,50,100,.28), transparent 60%),
    linear-gradient(180deg, #06223e 0%, #061a30 42%, #04101f 78%, #03101b 100%)}
  /* 中央の本体に奥行きの影と、海面からの淡い光条をまとわせる（縦型スマホを浮かせる） */
  #app{box-shadow:0 0 0 1px rgba(140,200,255,.10), 0 30px 90px rgba(0,0,0,.6),
    0 0 120px rgba(40,110,190,.25); border-radius:18px}
  /* オープニングも本体(#app)と地続きに見せる：広い画面では左右を同じ深海の暗い背景にし、
     中央の縦長ステージを本体と同じ角丸＋影で“浮かせた縦型スマホ”として見せる（横長にしない）。 */
  #dd2Intro{background:
    radial-gradient(120% 80% at 50% -8%, rgba(120,200,255,.10), transparent 46%),
    radial-gradient(80% 60% at 50% 120%, rgba(20,50,100,.28), transparent 60%),
    linear-gradient(180deg, #06223e 0%, #061a30 42%, #04101f 78%, #03101b 100%)}
  #dd2Intro .dd2-stage{box-shadow:0 0 0 1px rgba(140,200,255,.10), 0 30px 90px rgba(0,0,0,.6),
    0 0 120px rgba(40,110,190,.25); border-radius:18px}
}
@media (max-width:359px){
  .lvcard{padding:6px 8px; gap:6px}
  .lvcard .lv-val b{font-size:16px}
  .lang-picker.mini .lang-flag{font-size:13px}
  .visit-grid{grid-template-columns:repeat(2,1fr)}
}

/* ===========================================================
   B9：ショップ拡張＋ガチャ（独立ページ）＋排出演出
   ・チープを避け、深海の重厚＝半透明ディープパネル＋レア度カラーで高級感。
   ・レインボー/ゴールドはレア感のある発光・粒子・光柱で“引きたくなる”体験に。
   レア度カラー： 青=#3aa0ff 赤=#ff4d4d 銀=#c8d2dc 紫=#b06bff 金=#ffcf3a 虹=#7ef9ff
   =========================================================== */
:root{
  --r-blue:#3aa0ff; --r-red:#ff4d4d; --r-silver:#c8d2dc; --r-purple:#b06bff;
  --r-gold:#ffcf3a; --r-rainbow:#7ef9ff; --paid:#6be7ff;
}

/* ===== ショップ：タブのアイコン ===== */
.shop-tab-ic{margin-right:5px}
.shop-sub-note,.shop-demo-note{font-size:12px; color:var(--dim); line-height:1.6;
  background:rgba(110,200,255,.08); border:1px solid rgba(110,200,255,.18);
  border-radius:12px; padding:9px 12px; margin:0 0 12px}
.shop-sub-note b{color:var(--ink)} .shop-sub-note .hl-limited{color:var(--r-rainbow)}

/* ===== ショップ：潜水艦グリッド ===== */
.ssub-grid{display:grid; grid-template-columns:repeat(2,1fr); gap:12px; padding-bottom:8px}
.ssub-card{position:relative; border-radius:16px; padding:10px 10px 12px;
  background:linear-gradient(180deg, rgba(18,30,52,.92), rgba(8,16,30,.94));
  border:1px solid var(--line); overflow:hidden;
  box-shadow:0 6px 18px rgba(0,0,0,.4), inset 0 0 0 1px rgba(255,255,255,.02)}
.ssub-card::before{content:""; position:absolute; left:0; right:0; top:0; height:3px;
  background:var(--tint); opacity:.9; box-shadow:0 0 12px var(--tint)}
.ssub-card.equipped{border-color:var(--tint); box-shadow:0 0 0 1px var(--tint),0 0 18px color-mix(in srgb,var(--tint) 45%, transparent)}
.ssub-card.locked{opacity:.96}
.ssub-rar{position:absolute; top:8px; right:8px; font-size:10px; font-weight:900; color:#08111f;
  padding:2px 8px; border-radius:999px; z-index:2; box-shadow:0 2px 6px rgba(0,0,0,.4)}
.ssub-pic{height:84px; display:flex; align-items:center; justify-content:center; position:relative;
  border-radius:12px; margin-bottom:6px;
  background:radial-gradient(120% 100% at 50% 30%, rgba(150,210,255,.18), rgba(8,16,30,.2) 70%)}
.ssub-img{max-width:100%; max-height:84px; object-fit:contain;
  filter:brightness(1.2) contrast(1.08) saturate(1.05) drop-shadow(0 6px 12px rgba(0,0,0,.5))}
.ssub-pic.mystery{background:repeating-linear-gradient(135deg, rgba(255,255,255,.03) 0 8px, rgba(255,255,255,0) 8px 16px), rgba(8,16,30,.4)}
.ssub-q{font-size:34px; font-weight:900; color:rgba(255,255,255,.5)}
.ssub-no{position:absolute; bottom:4px; font-size:10px; color:var(--dim); letter-spacing:.05em}
.ssub-name{font-size:13px; font-weight:900; color:var(--ink); line-height:1.25;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.ssub-stats{font-size:11px; color:var(--dim); margin:2px 0}
.ssub-meta{font-size:10px; color:var(--dim); min-height:13px; margin-bottom:7px; line-height:1.3}
.ssub-actwrap{margin-top:2px}
.ssub-act{display:block; width:100%; appearance:none; border:none; cursor:pointer;
  border-radius:10px; padding:9px 0; font-size:12.5px; font-weight:900; text-align:center}
.ssub-act.buy{color:#1a0d00; background:linear-gradient(180deg,var(--orange2),var(--orange)); box-shadow:0 3px 0 #b94e00}
.ssub-act.buy:disabled{filter:grayscale(.6) brightness(.7); box-shadow:none; cursor:not-allowed}
.ssub-act.eq{color:var(--ink); background:var(--panel2); border:1px solid var(--line)}
.ssub-act.on{color:#08111f; background:linear-gradient(180deg,#bfe8ff,var(--r-blue)); box-shadow:0 0 10px rgba(58,160,255,.4)}

/* whale パック演出 */
.pp-badge.whale{background:linear-gradient(180deg,#7ef9ff,#3aa0ff); color:#06223e}
.pp-card.whale{border-color:rgba(126,249,255,.5); box-shadow:0 0 0 1px rgba(126,249,255,.35),0 8px 22px rgba(0,0,0,.5)}
.pp-card.whale .pp-pt{color:var(--r-rainbow)}

/* ===========================================================
   ガチャ画面
   =========================================================== */
#scrGacha{background:
  radial-gradient(140% 90% at 50% -10%, rgba(40,90,150,.35), rgba(6,14,26,0) 60%),
  linear-gradient(180deg, rgba(7,14,26,.2), rgba(4,10,20,.55))}
.gacha-head{display:flex; align-items:center; gap:10px; padding:14px}
.gacha-head h2{font-weight:900}
.gacha-wallet{display:flex; gap:6px}
.chip.paid b{color:var(--paid)}
.chip.paid{border-color:rgba(107,231,255,.3); box-shadow:0 0 10px rgba(107,231,255,.12)}

.gacha-banners{display:flex; gap:8px; overflow-x:auto; padding:0 12px 10px; -webkit-overflow-scrolling:touch}
.gb-tab{flex:none; position:relative; appearance:none; cursor:pointer; border-radius:14px;
  padding:10px 14px; font-size:12.5px; font-weight:800; color:var(--dim);
  background:rgba(16,24,42,.85); border:1px solid var(--line)}
.gb-tab.on{color:var(--ink); border-color:var(--orange); box-shadow:0 0 0 1px var(--orange),0 0 14px rgba(255,122,24,.3)}
.gb-tab.featured.on{border-color:var(--r-rainbow); box-shadow:0 0 0 1px var(--r-rainbow),0 0 16px rgba(126,249,255,.35)}
.gb-tab-badge{display:inline-block; margin-left:6px; font-size:9px; font-weight:900; color:#06223e;
  background:linear-gradient(180deg,#7ef9ff,#3aa0ff); padding:1px 6px; border-radius:999px; vertical-align:middle}

.gacha-scroll{flex:1; overflow-y:auto; padding:0 14px 24px; -webkit-overflow-scrolling:touch}

/* ヒーロー（ピックアップ艇） */
.gacha-hero{position:relative; border-radius:20px; padding:18px 14px 16px; overflow:hidden;
  background:linear-gradient(180deg, rgba(20,36,64,.92), rgba(8,16,30,.96));
  border:1px solid color-mix(in srgb, var(--hc) 40%, var(--line));
  box-shadow:0 10px 30px rgba(0,0,0,.5), inset 0 0 40px color-mix(in srgb,var(--hc) 12%, transparent)}
.gacha-hero.featured{border-color:color-mix(in srgb,var(--hc) 70%, transparent);
  box-shadow:0 12px 36px rgba(0,0,0,.55), inset 0 0 60px color-mix(in srgb,var(--hc) 18%, transparent)}
.gh-glow{position:absolute; inset:-30% -10% auto -10%; height:70%;
  background:radial-gradient(60% 100% at 50% 0%, color-mix(in srgb,var(--hc) 35%, transparent), transparent 70%);
  filter:blur(8px); pointer-events:none; animation:ghPulse 4s ease-in-out infinite}
@keyframes ghPulse{0%,100%{opacity:.55} 50%{opacity:.9}}
.gh-banner-name{position:relative; text-align:center; font-size:15px; font-weight:900; color:var(--ink); letter-spacing:.04em}
.gh-main{position:relative; height:150px; display:flex; align-items:center; justify-content:center; margin:6px 0}
.gh-img{max-width:96%; max-height:150px; object-fit:contain;
  filter:brightness(1.18) contrast(1.08) saturate(1.06) drop-shadow(0 0 18px color-mix(in srgb,var(--hc) 60%, transparent)) drop-shadow(0 10px 20px rgba(0,0,0,.55));
  animation:ghFloat 5s ease-in-out infinite}
@keyframes ghFloat{0%,100%{transform:translateY(0)} 50%{transform:translateY(-7px)}}
.gh-q{font-size:64px; font-weight:900; color:rgba(255,255,255,.4)}
.gh-main-name{position:relative; text-align:center; font-size:14px; font-weight:900; margin-top:2px}
.gh-desc{position:relative; text-align:center; font-size:11.5px; color:var(--dim); line-height:1.6; margin-top:6px}
.gh-thumbs{position:relative; display:flex; gap:8px; justify-content:center; margin-top:12px}
.gh-thumb{flex:1; max-width:33%; border-radius:12px; padding:6px 4px 22px; position:relative; text-align:center;
  background:rgba(8,16,30,.6); border:1px solid color-mix(in srgb,var(--c) 40%, var(--line))}
.gh-thumb img{max-width:100%; max-height:46px; object-fit:contain}
.gh-thumb>span:first-child{font-size:26px}
.gh-thumb-r{position:absolute; top:4px; left:4px; font-size:8px; font-weight:900; color:#06121f; padding:1px 5px; border-radius:999px}
.gh-thumb-n{position:absolute; left:0; right:0; bottom:4px; font-size:9px; color:var(--dim);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; padding:0 3px}

/* 天井ゲージ */
.gacha-pity{margin-top:14px}
.gpity-lab{display:flex; justify-content:space-between; font-size:11px; color:var(--dim); margin-bottom:5px}
.gpity-lab b{font-size:12px}
.gpity-track{height:8px; border-radius:999px; background:rgba(255,255,255,.08); overflow:hidden}
.gpity-track i{display:block; height:100%; border-radius:999px; transition:width .4s ease; box-shadow:0 0 8px currentColor}
.gpity-sub{font-size:10px; color:var(--dim); margin-top:5px; line-height:1.5}

/* 回すボタン */
.gacha-pull{display:grid; grid-template-columns:1fr 1.25fr; gap:10px; margin-top:16px}
.g-pull{position:relative; appearance:none; cursor:pointer; border:none; border-radius:16px;
  padding:14px 8px 12px; display:flex; flex-direction:column; align-items:center; gap:3px; overflow:hidden}
.g-pull .gp-t{font-size:14px; font-weight:900}
.g-pull .gp-c{font-size:13px; font-weight:900}
.g-pull.single{color:var(--ink); background:linear-gradient(180deg,#1d3a5e,#10243e);
  border:1px solid rgba(110,200,255,.3); box-shadow:0 5px 0 #0a1626,0 8px 18px rgba(0,0,0,.4)}
.g-pull.single .gp-c{color:var(--paid)}
.g-pull.ten{color:#1a0d00; background:linear-gradient(180deg,var(--orange2),var(--orange));
  box-shadow:0 5px 0 #b94e00,0 8px 20px rgba(255,122,24,.35)}
.g-pull.ten .gp-c{color:#3a1600}
.g-pull .gp-bonus{font-size:9.5px; font-weight:900; margin-top:2px; padding:1px 7px; border-radius:999px;
  background:rgba(0,0,0,.18); color:#3a1600}
.g-pull:active{transform:translateY(3px)}
.g-pull:disabled{filter:grayscale(.55) brightness(.7); box-shadow:none; cursor:not-allowed}
.g-pull.ten::after{content:""; position:absolute; inset:0; background:linear-gradient(120deg, transparent 30%, rgba(255,255,255,.35) 50%, transparent 70%);
  transform:translateX(-120%); animation:gShine 3.2s ease-in-out infinite}
@keyframes gShine{0%,60%{transform:translateX(-120%)} 100%{transform:translateX(120%)}}

.gacha-info{display:flex; gap:10px; margin-top:14px}
.g-info-btn{flex:1; appearance:none; cursor:pointer; border-radius:12px; padding:11px 8px; font-size:12px; font-weight:800;
  color:var(--ink); background:rgba(16,24,42,.85); border:1px solid var(--line)}
.g-info-btn:active{transform:translateY(1px)}
.gacha-demo-note{font-size:11px; color:var(--dim); line-height:1.6; text-align:center; margin-top:16px}
.gacha-demo-note b{color:var(--orange2)}

.gacha-flash,.shop-flash,.garage-flash{position:fixed; left:50%; bottom:90px; transform:translateX(-50%) translateY(10px);
  background:rgba(8,12,22,.96); border:1px solid var(--orange); color:var(--orange2);
  padding:10px 18px; border-radius:999px; font-weight:900; font-size:13px; z-index:60;
  opacity:0; pointer-events:none; transition:opacity .2s, transform .2s; max-width:84%; text-align:center}
.gacha-flash.show,.shop-flash.show,.garage-flash.show{opacity:1; transform:translateX(-50%) translateY(0)}

/* ===========================================================
   排出演出（光柱＋カットイン）
   =========================================================== */
.gacha-reveal-ov{background:rgba(2,6,14,.86); backdrop-filter:blur(2px)}
.g-reveal-stage{position:relative; width:100%; height:100%; overflow:hidden; cursor:pointer;
  display:flex; align-items:center; justify-content:center}
.gr-dark{position:absolute; inset:0; background:radial-gradient(circle at 50% 55%, transparent 0%, rgba(2,6,14,.7) 70%)}
.gr-pillar{position:absolute; left:50%; top:-10%; width:14px; height:120%; transform:translateX(-50%) scaleY(0);
  transform-origin:50% 60%; background:linear-gradient(180deg, transparent, var(--rc) 30%, #fff 55%, var(--rc) 75%, transparent);
  filter:blur(3px) drop-shadow(0 0 24px var(--rc)); opacity:.0;
  animation:grPillar 1.1s cubic-bezier(.2,.8,.2,1) .05s forwards}
.gr-pillar2{width:46px; opacity:.0; filter:blur(14px) drop-shadow(0 0 40px var(--rc)); animation-delay:.02s}
@keyframes grPillar{0%{transform:translateX(-50%) scaleY(0); opacity:0}
  35%{opacity:1} 60%{transform:translateX(-50%) scaleY(1); opacity:1}
  100%{transform:translateX(-50%) scaleY(1); opacity:.85}}
.gr-burst{position:absolute; left:50%; top:50%; transform:translate(-50%,-50%) scale(0);
  font-size:120px; color:#fff; text-shadow:0 0 30px var(--rc),0 0 60px var(--rc);
  animation:grBurst 1.2s ease-out .35s forwards}
@keyframes grBurst{0%{transform:translate(-50%,-50%) scale(0); opacity:0}
  40%{transform:translate(-50%,-50%) scale(1.15); opacity:1}
  100%{transform:translate(-50%,-50%) scale(1); opacity:.95}}
.gr-rings{position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); width:0; height:0}
.gr-rings i{position:absolute; left:50%; top:50%; width:40px; height:40px; margin:-20px 0 0 -20px;
  border:2px solid var(--rc); border-radius:50%; opacity:0;
  animation:grRing 1.6s ease-out forwards}
.gr-rings i:nth-child(1){animation-delay:.4s}
.gr-rings i:nth-child(2){animation-delay:.62s}
.gr-rings i:nth-child(3){animation-delay:.84s}
@keyframes grRing{0%{transform:scale(.2); opacity:.9} 100%{transform:scale(7); opacity:0}}
.gr-text{position:absolute; left:0; right:0; bottom:24%; text-align:center; font-size:20px; font-weight:900;
  color:#fff; letter-spacing:.06em; text-shadow:0 0 18px var(--rc); opacity:0;
  animation:grText 1s ease-out .55s forwards}
@keyframes grText{0%{opacity:0; transform:translateY(10px)} 100%{opacity:1; transform:translateY(0)}}
.gr-tap{position:absolute; left:0; right:0; bottom:8%; text-align:center; font-size:11px; color:rgba(255,255,255,.55)}

/* レア度ティアで派手さを変える */
.g-reveal-stage.r-rainbow .gr-dark{background:
  radial-gradient(circle at 50% 50%, rgba(126,249,255,.18), rgba(2,6,14,.78) 65%)}
.g-reveal-stage.r-rainbow .gr-burst{animation-duration:1.6s;
  background:linear-gradient(90deg,#ff5a7a,#ffd23a,#46e0c0,#3aa0ff,#b06bff); -webkit-background-clip:text; background-clip:text; color:transparent;
  text-shadow:0 0 40px #7ef9ff}
.g-reveal-stage.r-rainbow::before{content:""; position:absolute; inset:0; pointer-events:none;
  background:conic-gradient(from 0deg, #ff5a7a, #ffd23a, #46e0c0, #3aa0ff, #b06bff, #ff5a7a);
  opacity:.14; mix-blend-mode:screen; animation:grSpin 6s linear infinite}
@keyframes grSpin{to{transform:rotate(360deg)}}
.g-reveal-stage.r-gold .gr-text{color:#ffe9a8}
.g-reveal-stage.r-normal .gr-text{font-size:16px}

/* ===========================================================
   結果一覧
   =========================================================== */
.gacha-result-card{max-width:none; width:94%; max-height:90vh; overflow:hidden; display:flex; flex-direction:column; text-align:center}
.gacha-result-head{font-size:13px; color:var(--dim); margin:2px 0 12px}
.gacha-result-head b{color:var(--ink)}
.gacha-result-grid{display:grid; grid-template-columns:repeat(5,1fr); gap:7px; overflow-y:auto; padding:2px; margin-bottom:12px}
.grc-card{position:relative; border-radius:11px; padding:6px 4px 6px;
  background:linear-gradient(180deg, rgba(18,30,52,.95), rgba(8,16,30,.96));
  border:1px solid color-mix(in srgb,var(--c) 40%, var(--line))}
.grc-card::before{content:""; position:absolute; left:0; right:0; top:0; height:3px; border-radius:11px 11px 0 0;
  background:var(--c); box-shadow:0 0 10px var(--c)}
.grc-card.grc-glow{border-color:var(--c); box-shadow:0 0 0 1px var(--c),0 0 16px color-mix(in srgb,var(--c) 55%, transparent);
  animation:grcPop .5s ease-out}
@keyframes grcPop{0%{transform:scale(.7); opacity:0} 70%{transform:scale(1.08)} 100%{transform:scale(1); opacity:1}}
.grc-card.r5::after{content:""; position:absolute; inset:0; border-radius:11px; pointer-events:none;
  background:conic-gradient(from 0deg,#ff5a7a,#ffd23a,#46e0c0,#3aa0ff,#b06bff,#ff5a7a); opacity:.16; mix-blend-mode:screen; animation:grSpin 5s linear infinite}
.grc-rar{position:absolute; top:4px; right:4px; font-size:8px; font-weight:900; color:#08111f; padding:1px 5px; border-radius:999px; z-index:2}
.grc-pic{height:48px; display:flex; align-items:center; justify-content:center; margin:6px 0 3px}
.grc-img{max-width:100%; max-height:48px; object-fit:contain; filter:brightness(1.2) drop-shadow(0 3px 6px rgba(0,0,0,.5))}
.grc-ic{font-size:30px}
.grc-name{font-size:9.5px; font-weight:800; color:var(--ink); line-height:1.2; height:24px; overflow:hidden}
.grc-state{font-size:8.5px; margin-top:3px; min-height:12px}
.grc-new{color:#36d399; font-weight:900}
.grc-dup{color:var(--dim)}
.grc-limited{display:inline-block; font-size:8px; font-weight:900; color:#06223e; background:var(--r-rainbow); padding:0 4px; border-radius:999px; margin-right:3px}

/* ===========================================================
   提供割合・かけら交換
   =========================================================== */
.gacha-info-card{max-width:none; width:92%; max-height:88vh; overflow-y:auto; text-align:left}
.gacha-rates-body,.gacha-shard-body{margin:10px 0 14px}
.grate-banner{font-size:13px; font-weight:900; color:var(--ink); margin-bottom:10px; text-align:center}
.grate-row{display:flex; align-items:center; gap:8px; margin:7px 0; font-size:12px}
.grate-dot{width:10px; height:10px; border-radius:50%; flex:none; box-shadow:0 0 6px currentColor}
.grate-r{width:62px; font-weight:900; flex:none}
.grate-bar{flex:1; height:7px; border-radius:999px; background:rgba(255,255,255,.08); overflow:hidden}
.grate-bar i{display:block; height:100%; border-radius:999px}
.grate-v{width:42px; text-align:right; color:var(--ink); flex:none}
.grate-pity{font-size:11px; color:var(--orange2); background:rgba(255,122,24,.08); border-radius:10px; padding:9px 11px; margin:12px 0; line-height:1.5}
.grate-mix-t{font-size:11px; color:var(--dim); font-weight:800; margin:10px 0 4px}
.grate-mix{display:flex; justify-content:space-between; gap:8px; font-size:11px; color:var(--dim); margin:4px 0}
.grate-mix b{flex:none}
.grate-foot{font-size:10.5px; color:var(--dim); line-height:1.55; margin-top:10px; border-top:1px solid var(--line); padding-top:8px}

.gsh-intro{font-size:11.5px; color:var(--dim); line-height:1.6; margin-bottom:12px}
.gsh-intro b{color:var(--ink)}
.gsh-row{display:flex; align-items:center; gap:10px; padding:9px; border-radius:12px; margin:7px 0;
  background:rgba(16,24,42,.7); border:1px solid color-mix(in srgb,var(--c) 30%, var(--line))}
.gsh-pic{width:46px; height:46px; flex:none; border-radius:10px; display:flex; align-items:center; justify-content:center;
  background:radial-gradient(circle at 50% 35%, rgba(150,210,255,.18), rgba(8,16,30,.3) 70%)}
.gsh-pic img{max-width:100%; max-height:44px; object-fit:contain}
.gsh-pic span{font-size:22px; color:rgba(255,255,255,.5)}
.gsh-main{flex:1; min-width:0}
.gsh-name{font-size:12.5px; font-weight:900; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.gsh-r{font-size:10px; font-weight:900}
.gsh-prog{font-size:11px; color:var(--dim); margin:3px 0}
.gsh-track{height:6px; border-radius:999px; background:rgba(255,255,255,.08); overflow:hidden}
.gsh-track i{display:block; height:100%; border-radius:999px}
.gsh-act{appearance:none; border:none; cursor:pointer; border-radius:10px; padding:9px 14px; font-size:12px; font-weight:900;
  color:#1a0d00; background:linear-gradient(180deg,var(--orange2),var(--orange))}
.gsh-act.off,.gsh-act:disabled{filter:grayscale(.6) brightness(.7); cursor:not-allowed}
.gsh-act.on{color:var(--dim); background:var(--panel2); border:1px solid var(--line)}

/* ===========================================================
   波2A：ガチャ画面の改善（会長要望 6/7/9/10/11）
   既存セレクタの上書きはこの位置（後勝ち）で行う＝元定義を消さずに強化。
   =========================================================== */

/* ---- (6) 当選/結果の戦艦画像を「3回り（約5mm相当）」大きく ---- */
/* ヒーロー（ピックアップ艇）の大型化 */
.gh-main{height:200px}                       /* 150px → 200px */
.gh-img{max-height:200px; max-width:100%}
@keyframes ghFloatBig{0%,100%{transform:translateY(0)} 50%{transform:translateY(-9px)}}
.gh-img{animation:ghFloatBig 5s ease-in-out infinite}
/* 結果カードの戦艦/アイコンを大型化（5列のまま見やすく） */
.gacha-result-grid{gap:9px}
.grc-pic{height:74px; margin:8px 0 4px}      /* 48px → 74px */
.grc-img{max-height:74px; filter:brightness(1.22) drop-shadow(0 4px 9px rgba(0,0,0,.55))}
.grc-ic{font-size:42px}
.grc-name{font-size:11px; height:26px}

/* ---- (7) 「単発」「10連まわす」ボタンの文字を枠に合わせ大きく・ワクワク装飾フォントに ---- */
.gacha-pull{gap:12px; margin-top:18px}
.g-pull{padding:18px 8px 16px; gap:5px; border-radius:18px}
.g-pull .gp-t{font-size:21px; font-weight:900; letter-spacing:.04em; line-height:1.05;
  font-family:"Hiragino Sans","Yu Gothic UI","Segoe UI",system-ui,sans-serif;
  text-shadow:0 2px 5px rgba(0,0,0,.45), 0 0 14px rgba(255,255,255,.12)}
.g-pull .gp-c{font-size:18px; font-weight:900; letter-spacing:.02em}
/* 単発：青系のキラめき文字 */
.g-pull.single .gp-t{background:linear-gradient(180deg,#eaf6ff,#9fd2ff);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  text-shadow:0 2px 6px rgba(0,0,0,.5)}
/* 10連：金オレンジの目玉文字（より大きく） */
.g-pull.ten .gp-t{font-size:23px; color:#1a0d00;
  text-shadow:0 2px 0 rgba(255,255,255,.35), 0 3px 7px rgba(120,50,0,.4)}
.g-pull .gp-bonus{font-size:11px; padding:2px 9px; margin-top:3px}
.g-pull.single .gp-bonus{background:rgba(126,200,255,.18); color:#bfe3ff}
/* 軽い鼓動でワクワク感（過剰にしない） */
@keyframes gpPulse{0%,100%{transform:scale(1)} 50%{transform:scale(1.015)}}
.g-pull.ten{animation:gpPulse 2.6s ease-in-out infinite}

/* ---- (11) 獲得品ギャラリー（中央より下の空きスペース） ---- */
.gacha-gallery{margin-top:22px; padding-top:16px; border-top:1px solid var(--line)}
.gg-head{font-size:14px; font-weight:900; color:var(--ink); display:flex; align-items:center; gap:8px; flex-wrap:wrap}
.gg-count{font-size:11px; font-weight:800; color:var(--paid); background:rgba(126,200,255,.12);
  border:1px solid rgba(126,200,255,.3); padding:2px 9px; border-radius:999px}
.gg-hint{font-size:11px; color:var(--dim); line-height:1.55; margin:6px 0 10px}
.gg-subhead{font-size:12px; font-weight:900; color:var(--ink); margin:16px 0 8px}
.gg-empty{font-size:12px; color:var(--dim); text-align:center; padding:18px 0}
.gg-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:9px}
.gg-card{position:relative; border-radius:13px; padding:8px 5px 9px; cursor:pointer; text-align:center;
  background:linear-gradient(180deg, rgba(18,30,52,.95), rgba(8,16,30,.96));
  border:1px solid color-mix(in srgb,var(--c,#3a5b86) 38%, var(--line));
  transition:transform .12s ease, box-shadow .12s ease}
.gg-card::before{content:""; position:absolute; left:0; right:0; top:0; height:3px; border-radius:13px 13px 0 0;
  background:var(--c,#3a5b86); box-shadow:0 0 9px var(--c,#3a5b86)}
.gg-card:active{transform:scale(.96)}
.gg-card.equipped{box-shadow:0 0 0 1px var(--c), 0 0 14px color-mix(in srgb,var(--c) 45%, transparent)}
.gg-rar{position:absolute; top:5px; left:5px; font-size:8px; font-weight:900; color:#08111f; padding:1px 6px; border-radius:999px; z-index:2}
.gg-dup{position:absolute; top:5px; right:5px; font-size:11px; font-weight:900; color:#1a0d00; z-index:2;
  background:linear-gradient(180deg,#ffd23a,#ff9c1a); padding:1px 7px; border-radius:999px;
  box-shadow:0 1px 4px rgba(0,0,0,.4)}
.gg-eq{position:absolute; bottom:36px; left:50%; transform:translateX(-50%); font-size:8px; font-weight:900;
  color:#06121f; background:#7ef9ff; padding:1px 7px; border-radius:999px; z-index:2}
.gg-pic{height:62px; display:flex; align-items:center; justify-content:center; margin:8px 0 4px}
.gg-pic img{max-width:100%; max-height:62px; object-fit:contain; filter:brightness(1.18) drop-shadow(0 3px 7px rgba(0,0,0,.5))}
.gg-pic.noimg, .gg-q{font-size:34px; color:rgba(255,255,255,.4)}
.gg-pic.gg-emoji span{font-size:34px}
.gg-qty{position:absolute; font-size:10px; font-weight:900; color:#fff; transform:translate(20px,16px);
  background:rgba(0,0,0,.55); padding:0 6px; border-radius:999px}
.gg-name{font-size:10px; font-weight:800; color:var(--ink); line-height:1.2; height:24px; overflow:hidden}
.gg-sell{appearance:none; border:none; cursor:pointer; margin-top:6px; width:100%;
  border-radius:9px; padding:6px 4px; font-size:10px; font-weight:900; color:#1a0d00;
  background:linear-gradient(180deg,var(--orange2),var(--orange)); box-shadow:0 2px 0 #b94e00}
.gg-sell:active{transform:translateY(2px); box-shadow:none}

/* ---- (10) 拡大オーバーレイ（クリックで大きく・気持ちいい登場アニメ） ---- */
.gz-ov{background:rgba(2,6,14,.9); backdrop-filter:blur(3px)}
.gz-card{max-width:none; width:90%; max-width:440px; text-align:center; position:relative; overflow:hidden}
.gz-body{padding:6px 2px 4px; animation:gzPop .42s cubic-bezier(.2,.9,.25,1.1)}
@keyframes gzPop{0%{transform:scale(.7); opacity:0} 60%{transform:scale(1.06)} 100%{transform:scale(1); opacity:1}}
.gz-rar{display:inline-block; font-size:12px; font-weight:900; color:#08111f; padding:3px 14px; border-radius:999px; margin-bottom:10px}
.gz-pic{position:relative; height:230px; display:flex; align-items:center; justify-content:center; margin:4px 0 8px}
.gz-img{max-width:94%; max-height:230px; object-fit:contain; position:relative; z-index:2;
  filter:brightness(1.2) drop-shadow(0 0 24px color-mix(in srgb,var(--c) 55%, transparent)) drop-shadow(0 12px 24px rgba(0,0,0,.6));
  animation:gzFloat 4.5s ease-in-out infinite}
@keyframes gzFloat{0%,100%{transform:translateY(0) rotate(-.4deg)} 50%{transform:translateY(-10px) rotate(.4deg)}}
.gz-q,.gz-emoji{font-size:110px; position:relative; z-index:2; color:rgba(255,255,255,.55)}
.gz-emoji{filter:drop-shadow(0 8px 18px rgba(0,0,0,.5))}
.gz-halo{position:absolute; inset:0; z-index:1; pointer-events:none;
  background:radial-gradient(circle at 50% 45%, color-mix(in srgb,var(--c) 32%, transparent), transparent 65%);
  animation:gzHalo 4s ease-in-out infinite}
@keyframes gzHalo{0%,100%{opacity:.6; transform:scale(1)} 50%{opacity:1; transform:scale(1.06)}}
.gz-name{font-size:20px; font-weight:900; color:var(--ink); letter-spacing:.02em}
.gz-x{font-size:14px; font-weight:900; color:#ffcf3a; vertical-align:middle}
.gz-desc{font-size:12px; color:var(--dim); line-height:1.65; margin:8px 14px 4px}
.gz-sell{margin:14px 8px 4px; padding:12px 12px 14px; border-radius:14px;
  background:rgba(16,24,42,.7); border:1px solid color-mix(in srgb,var(--c) 30%, var(--line))}
.gz-sell-cap{font-size:13px; font-weight:900; color:var(--ink)}
.gz-sell-cap b{color:#ffcf3a}
.gz-sell-price{font-size:12px; color:var(--dim); margin:5px 0 10px}
.gz-sell-price b{color:var(--paid)}
.gz-sell-btns{display:flex; gap:9px; justify-content:center; flex-wrap:wrap}
.gz-sell-btn{appearance:none; border:none; cursor:pointer; border-radius:11px; padding:11px 16px;
  font-size:13px; font-weight:900; color:#1a0d00;
  background:linear-gradient(180deg,var(--orange2),var(--orange)); box-shadow:0 3px 0 #b94e00}
.gz-sell-btn.all{color:#06121f; background:linear-gradient(180deg,#ffe07a,#ffc23a); box-shadow:0 3px 0 #c98a00}
.gz-sell-btn:active{transform:translateY(2px); box-shadow:none}
.gz-sell-note{font-size:10.5px; color:var(--dim); line-height:1.5; margin-top:9px}

/* 結果カードに「タップで大きく」のヒント（拡大可能カード） */
.grc-zoomable{cursor:pointer}
.grc-zoomable:active{transform:scale(.96)}

/* ホームのガチャCTA（目立たせる） */
.btn.gacha-cta{position:relative; overflow:hidden;
  background:linear-gradient(180deg,#2a4d7a,#16284a); color:#eaf6ff;
  border:1px solid rgba(126,249,255,.4); box-shadow:0 5px 0 #0a1626,0 0 18px rgba(126,249,255,.18)}
.btn.gacha-cta::after{content:""; position:absolute; inset:0; background:linear-gradient(120deg, transparent 35%, rgba(126,249,255,.28) 50%, transparent 65%);
  transform:translateX(-120%); animation:gShine 3.6s ease-in-out infinite}

/* スマホ最適化 */
@media (max-width:430px){
  .gacha-result-grid{grid-template-columns:repeat(5,1fr); gap:6px}
  .grc-pic{height:58px}        /* 波2A：小画面でも従来より大きく（旧48→58） */
  .grc-img{max-height:58px}
  .grc-name{font-size:9.5px}
  .gr-burst{font-size:96px}
  .gr-text{font-size:18px}
  /* (7) 小画面でも文字を大きく保つ */
  .g-pull .gp-t{font-size:18px}
  .g-pull.ten .gp-t{font-size:19px}
  .g-pull .gp-c{font-size:15px}
  /* (11) ギャラリーは3列に */
  .gg-grid{grid-template-columns:repeat(3,1fr); gap:8px}
  .gh-main{height:170px}
  .gh-img{max-height:170px}
  .gz-pic{height:190px}
  .gz-img{max-height:190px}
}
@media (max-width:360px){
  .ssub-grid{gap:9px}
  .gacha-pull{grid-template-columns:1fr 1.2fr; gap:8px}
  .g-pull .gp-t{font-size:16px}
  .g-pull.ten .gp-t{font-size:17px}
  .gg-grid{grid-template-columns:repeat(3,1fr); gap:7px}
}

/* ===========================================================
   B10：マイページ（＝マイガレージ／コレクション）＋ 進行ガイド
   ・所有潜水艦コレクション（レア度・総数・コンプ率）＝「希少艇の所有がステータス」。
   ・進行ガイド（次Lv/深度へ）を拠点・マイページ・集計に常時表示。
   ・あなたLv と 潜水艦Lv をハッキリ区別（混同の解消）。チープを避け深海の重厚感。
   レア度カラー：青=#3aa0ff 赤=#ff4d4d 銀=#cdd6e4 紫=#b985ff 金=#ffcf5a 虹=#7ef9ff
   =========================================================== */

/* ---- 進行ガイド（共通パーツ：home/mypage/result が同じ見た目） ---- */
.prog-panel{margin:0 16px 8px; padding:12px 14px; border-radius:16px;
  background:linear-gradient(160deg, rgba(20,40,66,.78), rgba(9,20,36,.86));
  border:1px solid rgba(92,200,255,.28);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05), 0 6px 18px rgba(0,0,0,.4)}
.prog-panel.result{margin:10px 0 12px}
.prog-head{display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:9px}
.prog-lv{display:inline-flex; align-items:baseline; gap:4px; font-weight:900; color:#7fd4ff; white-space:nowrap}
.prog-lvlab{font-size:10px; font-weight:800; letter-spacing:.05em; color:#9fdcff; margin-right:2px}
.prog-lv b{font-size:22px; line-height:1; color:#7fd4ff; text-shadow:0 0 10px rgba(92,200,255,.5)}
.prog-arrow{color:var(--dim); font-size:13px; margin:0 1px}
.prog-next{font-size:18px; font-weight:900; color:#cdeeff}
.prog-max{font-size:11px; font-weight:900; color:#ffcf5a; margin-left:4px;
  padding:1px 6px; border-radius:8px; background:rgba(255,207,90,.16); border:1px solid rgba(255,207,90,.5)}
.prog-goal{font-size:12.5px; font-weight:900; color:var(--orange2); text-align:right; line-height:1.3}
/* ゲージ：泡だつ海のメーター */
.prog-track{position:relative; height:16px; border-radius:10px; overflow:hidden;
  background:rgba(5,14,26,.85); border:1px solid rgba(140,200,255,.22); box-shadow:inset 0 2px 5px rgba(0,0,0,.5)}
.prog-bar{display:block; height:100%; border-radius:10px;
  background:linear-gradient(90deg, #2f9be0, #6ad0ff 70%, #b6f0ff);
  box-shadow:0 0 12px rgba(92,200,255,.6); transition:width .55s cubic-bezier(.22,1,.36,1);
  animation:progShine 2.4s linear infinite;
  background-size:200% 100%}
@keyframes progShine{0%{background-position:0% 0}100%{background-position:200% 0}}
.prog-kc{position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
  font-size:10.5px; font-weight:900; color:#eaf6ff; text-shadow:0 1px 3px rgba(0,0,0,.8); letter-spacing:.03em}
.prog-note{display:flex; align-items:center; justify-content:space-between; gap:8px; margin-top:9px; flex-wrap:wrap}
.prog-here{font-size:11px; font-weight:800; color:var(--dim)}
.prog-unlock{font-size:11.5px; font-weight:900; color:#ffcf5a;
  padding:3px 9px; border-radius:10px; background:rgba(255,207,90,.12);
  border:1px solid rgba(255,207,90,.45); box-shadow:0 0 10px rgba(255,207,90,.18);
  animation:progPulse 1.8s ease-in-out infinite}
@keyframes progPulse{0%,100%{box-shadow:0 0 8px rgba(255,207,90,.15)}50%{box-shadow:0 0 16px rgba(255,207,90,.4)}}
.prog-soon{font-size:11px; font-weight:800; color:#7fd4ff}

/* ---- マイページ画面 ---- */
#scrMypage{background:linear-gradient(180deg, rgba(6,18,34,.9), rgba(3,10,22,.94))}
.my-head{display:flex; align-items:center; gap:10px; padding:14px 14px 8px}
.my-head h2{color:#fff}
.my-show{padding:9px 12px !important; font-size:13px; flex:none;
  border-color:rgba(126,249,255,.5) !important; color:#cdeeff !important}
.my-body{flex:1; overflow-y:auto; -webkit-overflow-scrolling:touch; padding-bottom:30px}
.my-body .section-t{margin:14px 16px 8px}

/* 2本立てLv（あなたLv／潜水艦Lv：混同しない） */
.my-lvrow{display:flex; gap:10px; padding:2px 14px 4px}
.my-lvcard{flex:1; min-width:0; display:flex; align-items:center; gap:9px; padding:11px 12px; border-radius:16px;
  background:rgba(13,24,42,.72); border:1px solid var(--line); box-shadow:0 4px 14px rgba(0,0,0,.35)}
.my-lv-ic{font-size:24px; line-height:1; filter:drop-shadow(0 2px 3px rgba(0,0,0,.6))}
.my-lv-meta{display:flex; flex-direction:column; line-height:1.15; min-width:0}
.my-lv-lab{font-size:10px; font-weight:800; letter-spacing:.04em; color:var(--dim)}
.my-lv-val{font-size:14px; font-weight:800; color:var(--ink); margin-top:1px}
.my-lv-val b{font-size:22px; font-weight:900}
.my-lvcard.you{border-color:rgba(92,200,255,.55); box-shadow:0 0 0 1px rgba(92,200,255,.18),0 4px 14px rgba(0,0,0,.35)}
.my-lvcard.you .my-lv-lab{color:#9fdcff}
.my-lvcard.you .my-lv-val b{color:#7fd4ff; text-shadow:0 0 10px rgba(92,200,255,.5)}
.my-lvcard.sub{border-color:rgba(255,122,24,.5); box-shadow:0 0 0 1px rgba(255,122,24,.16),0 4px 14px rgba(0,0,0,.35)}
.my-lvcard.sub .my-lv-lab{color:var(--orange2)}
.my-lvcard.sub .my-lv-val b{color:var(--orange2)}
.my-sub-name{display:block; font-size:11px; font-weight:800; color:var(--ink); margin-top:1px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:130px}
.my-sub-rar{display:inline-block; font-size:10px; font-weight:900; margin-left:0}

/* コレクション・サマリー（コンプ率／レア／限定） */
.my-summary{display:flex; gap:9px; padding:0 14px; flex-wrap:wrap}
.my-sum-card{flex:1; min-width:96px; padding:11px 12px; border-radius:14px;
  background:rgba(13,24,42,.7); border:1px solid var(--line)}
.my-sum-card.big{flex-basis:100%}
.ms-lab{font-size:10.5px; color:var(--dim); font-weight:800; letter-spacing:.03em}
.ms-comp{display:flex; align-items:baseline; gap:10px; margin-top:3px}
.ms-comp b{font-size:30px; font-weight:900; color:#7ef9ff; line-height:1; text-shadow:0 0 14px rgba(126,249,255,.4)}
.ms-own{font-size:13px; font-weight:900; color:var(--ink)}
.ms-own b{font-size:17px; color:var(--orange2); text-shadow:none}
.ms-own span{color:var(--dim); font-weight:800}
.ms-bar{height:9px; border-radius:8px; margin-top:8px; overflow:hidden;
  background:rgba(5,14,26,.85); border:1px solid rgba(140,200,255,.2)}
.ms-bar i{display:block; height:100%; border-radius:8px;
  background:linear-gradient(90deg, #7ef9ff, #6ad0ff); box-shadow:0 0 10px rgba(126,249,255,.5);
  transition:width .6s cubic-bezier(.22,1,.36,1)}
.ms-val{margin-top:4px; text-align:center}
.ms-val b{font-size:26px; font-weight:900; line-height:1}
.ms-val.rare b{color:#b985ff; text-shadow:0 0 12px rgba(185,133,255,.45)}
.ms-val.limited b{color:#ffcf5a; text-shadow:0 0 12px rgba(255,207,90,.45)}

/* レア度別 所有内訳 */
.my-rarity{padding:10px 16px 2px; display:flex; flex-direction:column; gap:7px}
.myr-row{display:flex; align-items:center; gap:9px}
.myr-dot{flex:none; width:11px; height:11px; border-radius:50%}
.myr-name{flex:none; width:58px; font-size:11px; font-weight:900; letter-spacing:.02em}
.myr-track{flex:1; height:10px; border-radius:7px; overflow:hidden;
  background:rgba(5,14,26,.82); border:1px solid rgba(255,255,255,.07)}
.myr-track i{display:block; height:100%; border-radius:7px; opacity:.85;
  transition:width .6s cubic-bezier(.22,1,.36,1)}
.myr-num{flex:none; width:50px; text-align:right; font-size:12px; font-weight:900; color:var(--ink)}
.myr-slash{color:var(--dim); font-weight:800; font-size:11px}
.myr-row.full .myr-num{color:#7ef9ff}
.myr-row.full .myr-name{text-shadow:0 0 8px currentColor}

/* 所有コレクション・グリッド（見せたい欲） */
.my-grid{padding:6px 12px 8px; display:grid; grid-template-columns:repeat(3,1fr);
  align-content:start; grid-auto-rows:max-content; gap:9px}
.my-empty{grid-column:1/-1; text-align:center; color:var(--dim); padding:28px 14px; font-weight:800}
.my-card{background:rgba(15,26,44,.8); border:1px solid var(--line); border-radius:14px;
  padding:8px 6px 9px; display:flex; flex-direction:column; align-items:center; text-align:center;
  position:relative; overflow:hidden}
.my-card::before{content:""; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(120% 70% at 50% -10%, color-mix(in srgb, var(--rc,#ff7a18) 30%, transparent), transparent 72%)}
.my-card.r5{border-color:rgba(255,207,90,.5); box-shadow:0 0 14px rgba(255,207,90,.18)}
.my-card.r6{border-color:rgba(126,249,255,.6); box-shadow:0 0 16px rgba(126,249,255,.24)}
.my-card.r4{border-color:rgba(185,133,255,.45)}
.my-card.equipped{border-color:var(--orange); box-shadow:0 0 0 1px var(--orange),0 0 16px rgba(255,122,24,.28)}
.my-badges{position:absolute; top:5px; left:5px; right:5px; z-index:2; display:flex; gap:4px; flex-wrap:wrap}
.my-badge{font-size:8.5px; font-weight:900; padding:2px 6px; border-radius:8px; letter-spacing:.03em;
  background:rgba(8,16,28,.82); border:1px solid rgba(255,255,255,.14)}
.my-badge.eq{color:#1a0d00; background:linear-gradient(180deg,var(--orange2),var(--orange)); border-color:transparent}
.my-badge.limited{color:#ffcf5a; border-color:rgba(255,207,90,.55)}
.my-c-pic{position:relative; z-index:1; width:100%; height:62px; min-height:62px; border-radius:10px; overflow:hidden;
  border:1px solid rgba(140,200,255,.4);
  background:radial-gradient(circle at 50% 40%, #4ea6e4, #235c92 72%, #143f66 100%);
  display:flex; align-items:center; justify-content:center; margin-bottom:5px}
.my-c-pic.mystery{background:radial-gradient(circle at 50% 40%, #1a2740, #0b1322 78%)}
.my-c-pic .myst-q{font-size:30px; font-weight:900; color:#3a4a66; text-shadow:0 2px 6px #000}
.my-c-pic .myst-no{position:absolute; left:0; right:0; bottom:4px; text-align:center;
  font-size:9px; font-weight:900; color:#5a6e92}
.my-c-img{width:100%; height:100%; object-fit:cover; filter:brightness(1.18) contrast(1.07) saturate(1.04)}
.my-c-name{position:relative; z-index:1; font-size:11px; font-weight:900; color:var(--ink); line-height:1.2;
  min-height:26px; display:flex; align-items:center; justify-content:center}
.my-c-rar{position:relative; z-index:1; font-size:10px; font-weight:900; letter-spacing:.04em}

/* レスポンシブ（共通ルール準拠） */
@media (min-width:560px){
  .my-grid{grid-template-columns:repeat(4,1fr)}
}
@media (max-width:359px){
  .my-grid{grid-template-columns:repeat(2,1fr)}
  .my-lv-val b{font-size:19px}
  .ms-comp b{font-size:26px}
  .prog-lv b{font-size:19px}
}

/* ===========================================================
   戦闘モード v4（担当：戦闘モード）
   (4)BOSS出現 / (17)明背景で文字を黒 / (18)退却 /
   (21)攻撃アイテム / (22)属性オート化 / (24)アイテムボタン切替
   既存の戦闘演出・色（黒×オレンジ）を壊さず差し込む。
   =========================================================== */

/* ---- (18) 退却ボタン（浮上の隣・赤系のゴースト） ---- */
.dive-top .retreat{flex:none; border:1px solid rgba(255,90,90,.5); color:#ffd0d0}
.dive-top .retreat:active{transform:translateY(2px)}
.dive-top .flee{flex:none}
.dive-top{flex-wrap:wrap}

/* ---- (4) BOSSタグ（敵名の左）＆ボス出現バナー ---- */
.boss-tag{display:inline-block; font-size:11px; font-weight:900; letter-spacing:.12em;
  padding:3px 9px; border-radius:999px; color:#1a0d00;
  background:linear-gradient(180deg,#ffe08a,#ffcf3a); box-shadow:0 2px 10px rgba(255,207,58,.6)}
.enemy-card.is-boss .enemy-name{text-shadow:0 2px 6px #000,0 0 18px rgba(255,207,58,.6)}
.enemy-img.boss{animation:bossBob 2.6s ease-in-out infinite}
@keyframes bossBob{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}

.boss-banner{position:absolute; top:24%; left:50%; transform:translate(-50%,-12px) scale(.9);
  z-index:8; display:flex; align-items:center; gap:10px; pointer-events:none; opacity:0;
  padding:10px 20px; border-radius:14px;
  background:linear-gradient(180deg, rgba(40,18,4,.92), rgba(20,8,2,.92));
  border:2px solid rgba(255,207,58,.8); box-shadow:0 12px 40px rgba(0,0,0,.6), 0 0 30px rgba(255,207,58,.5)}
.boss-banner.show{animation:bossBanner 1.9s ease forwards}
.boss-banner .bb-tag{font-size:15px; font-weight:900; letter-spacing:.18em; color:#1a0d00;
  background:linear-gradient(180deg,#ffe08a,#ffcf3a); padding:4px 12px; border-radius:999px}
.boss-banner .bb-name{font-size:18px; font-weight:900; color:#ffe7a8; text-shadow:0 2px 6px #000}
@keyframes bossBanner{0%{opacity:0; transform:translate(-50%,-12px) scale(.9)}
  14%{opacity:1; transform:translate(-50%,0) scale(1.04)}26%{transform:translate(-50%,0) scale(1)}
  82%{opacity:1}100%{opacity:0; transform:translate(-50%,-8px) scale(1)}}

/* ---- (2) ボス撃破 専用の勝利オーバーレイ演出（通常撃破と見た目が変わる金色の祝祭） ---- */
#ovWin.boss-win .card{
  border:2px solid rgba(255,207,58,.85);
  box-shadow:0 18px 60px rgba(0,0,0,.65), 0 0 40px rgba(255,207,58,.45), inset 0 0 0 1px rgba(255,207,58,.25);
  background:linear-gradient(180deg, rgba(34,22,4,.96), rgba(16,10,2,.96));
}
#ovWin.boss-win h2{
  color:#ffe7a8; letter-spacing:.06em;
  text-shadow:0 2px 8px #000, 0 0 22px rgba(255,207,58,.7);
}
#ovWin.boss-win .big{ animation:bossWinPop 1.1s ease-in-out infinite; filter:drop-shadow(0 0 16px rgba(255,207,58,.7)); }
#ovWin.boss-win .ename{ color:#ffe7a8; text-shadow:0 1px 6px #000, 0 0 16px rgba(255,207,58,.5); }
#ovWin.boss-win .reward{
  color:#1a0d00; font-weight:900;
  background:linear-gradient(180deg,#ffe08a,#ffcf3a); border-radius:999px; padding:6px 14px; display:inline-block;
  box-shadow:0 4px 16px rgba(255,207,58,.5);
}
/* 横揺れ禁止（会長ルール）。回転往復をやめ、上品なスケールの呼吸＋発光の明滅だけで格を出す。 */
@keyframes bossWinPop{0%,100%{transform:scale(1); filter:drop-shadow(0 0 14px rgba(255,207,58,.55))}50%{transform:scale(1.14); filter:drop-shadow(0 0 30px rgba(255,224,138,.95))}}
@media (prefers-reduced-motion: reduce){ #ovWin.boss-win .big{ animation:none } }

/* ---- (24) ダイブ中アイテムボタン（左下の武器ボタンと同じ形で可視化） ---- */
.itembtn{width:96px; gap:1px; position:relative}
.itembtn .iico{font-size:24px; line-height:1.1}
.itembtn .iname{font-size:13px; font-weight:900; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:88px; text-align:center}
.itembtn .icnt{font-size:10px; color:var(--dim); font-weight:800}
.itembtn.atk{border-color:rgba(255,90,90,.65); box-shadow:0 0 12px rgba(255,90,90,.25)}
.itembtn.heal{border-color:rgba(54,211,153,.6); box-shadow:0 0 12px rgba(54,211,153,.22)}
.itembtn.empty{opacity:.6}
.itembtn .iuse{margin-top:3px; appearance:none; border:none; cursor:pointer;
  font-size:12px; font-weight:900; color:#1a0d00; border-radius:8px; padding:3px 12px;
  background:linear-gradient(180deg,var(--orange2),var(--orange)); box-shadow:0 2px 6px rgba(255,122,24,.35)}
.itembtn.empty .iuse{filter:grayscale(.7) brightness(.7); pointer-events:none}
.itembtn .iuse:active{transform:translateY(1px)}
/* 攻撃アイテムの一覧行は赤、回復は緑でアクセント */
.shop-item.diveitem.atk .it-ico{filter:drop-shadow(0 0 8px rgba(255,90,90,.7))}
.shop-item.diveitem.heal .it-ico{filter:drop-shadow(0 0 8px rgba(54,211,153,.7))}

/* ---- (22) 武器ボタンのオート化バッジ ＆ 拠点 戦艦タップのヒント ---- */
.wbtn.auto{border-color:#ffcf3a; box-shadow:0 0 14px rgba(255,207,58,.4)}
.wbtn.auto::after{content:"🧭AUTO"; position:absolute; top:-9px; right:-6px; font-size:9px; font-weight:900;
  color:#1a0d00; background:linear-gradient(180deg,#ffe08a,#ffcf3a); padding:2px 7px; border-radius:999px}
.wbtn{position:relative}
.sub-stage{position:relative; cursor:pointer}
.sub-stage-hint{margin-top:6px; font-size:11px; font-weight:800; color:var(--orange2);
  background:rgba(255,122,24,.10); border:1px solid rgba(255,122,24,.3); border-radius:999px;
  padding:4px 12px; display:inline-block}
.sub-stage-hint.on{color:#ffcf3a; background:rgba(255,207,58,.12); border-color:rgba(255,207,58,.4)}
.sub-stage:active{transform:translateY(1px)}

/* (22) オートエレメントコア購入オーバーレイ */
.auto-attr-price{font-size:13px; font-weight:800; color:var(--orange2); margin:8px 0 2px}
#btnAutoAttrBuy:disabled{filter:grayscale(.6) brightness(.7)}

/* ===========================================================
   (17) 明るい背景のとき文字を黒に切替（読めるようにする）
   #scrDive.lightbg のときだけ、戦闘の各文字・チップ・パネルを黒系へ。
   暗い背景(既定)は従来どおり白系のまま。色だけ切替・配置は不変。
   =========================================================== */
#scrDive.lightbg .depth-meter .dlab,
#scrDive.lightbg .dive-stats,
#scrDive.lightbg .hp-lab,
#scrDive.lightbg .enemy-hint{color:#0c1420}
#scrDive.lightbg .depth-meter .dlab b,
#scrDive.lightbg .dive-stats .ds b{color:#0a3a14}
#scrDive.lightbg .dive-stats .ds{background:rgba(255,255,255,.66); border-color:rgba(0,0,0,.18); color:#0c1420}
#scrDive.lightbg .enemy-hint{background:rgba(255,255,255,.62); border-color:rgba(0,0,0,.18)}
#scrDive.lightbg .enemy-name{color:#0c1420; text-shadow:0 1px 2px rgba(255,255,255,.7)}
#scrDive.lightbg #eName{background:rgba(255,255,255,.7); border-color:rgba(0,0,0,.16); color:#0c1420}
#scrDive.lightbg .b-log{color:#0a2a55; text-shadow:0 1px 2px rgba(255,255,255,.7)}
#scrDive.lightbg .pl-tag{color:#0c1420; text-shadow:0 1px 1px rgba(255,255,255,.6)}
#scrDive.lightbg .pl-tag b{color:#0a3a14}
/* (5) 明るい背景でも「あなたLv」は塗りピルのまま濃い文字で必ず見えるようにする。 */
#scrDive.lightbg .pl-tag.you{color:#06243f;
  background:linear-gradient(180deg, rgba(160,220,255,.92), rgba(110,185,250,.95));
  border-color:#2f7fd0}
#scrDive.lightbg .pl-tag.you b{color:#062a55; text-shadow:0 1px 1px rgba(255,255,255,.55)}
/* 退却/浮上は明背景でも読めるよう一段濃く */
#scrDive.lightbg .dive-top .flee,
#scrDive.lightbg .dive-top .retreat{background:rgba(255,255,255,.78); color:#0c1420; border-color:rgba(0,0,0,.2)}

/* ===========================================================
   育成と演出 v4（担当：育成と演出）で足したスタイル
   (1)(2) レベルアップ演出バナー / (3)(14) 潜水艦の成長パネル / (9) 図鑑コンプ率ゲージ
   既存の prog-* / depth-meter 等は壊さず、追加クラスだけで差し込む。
   =========================================================== */

/* (1)(2) レベルアップ：画面中央の祝福バナー（音＋声と同時に出る） */
.lvup-banner{position:fixed; inset:0; z-index:120; display:flex; align-items:center; justify-content:center;
  pointer-events:none; opacity:0; visibility:hidden;}
.lvup-banner.show{opacity:1; visibility:visible; animation:lvupFade 2.6s ease both;}
@keyframes lvupFade{0%{opacity:0} 8%{opacity:1} 82%{opacity:1} 100%{opacity:0; visibility:hidden}}
.lvup-card{position:relative; text-align:center; padding:22px 30px; border-radius:22px;
  background:radial-gradient(120% 140% at 50% 0%, rgba(255,207,90,.22), rgba(7,8,13,.92) 70%);
  border:2px solid rgba(255,207,90,.55);
  box-shadow:0 18px 60px rgba(0,0,0,.6), 0 0 50px rgba(255,207,90,.4), inset 0 0 0 1px rgba(255,255,255,.08);
  animation:lvupPop .6s cubic-bezier(.2,1.5,.4,1) both;}
@keyframes lvupPop{0%{transform:scale(.6) translateY(14px); opacity:0} 60%{transform:scale(1.06)} 100%{transform:scale(1); opacity:1}}
.lvup-burst{font-size:46px; line-height:1; filter:drop-shadow(0 0 14px rgba(255,207,90,.7));
  animation:lvupBurst 1.1s ease-in-out infinite alternate;}
/* 横揺れ禁止（会長ルール）。回転往復をやめ、スケールの呼吸＋光彩の明滅で祝祭感を出す。 */
@keyframes lvupBurst{from{transform:scale(1); filter:drop-shadow(0 0 12px rgba(255,207,90,.6))} to{transform:scale(1.14); filter:drop-shadow(0 0 26px rgba(255,224,138,.95))}}
.lvup-title{margin-top:6px; font-size:30px; font-weight:1000; letter-spacing:.06em;
  background:linear-gradient(180deg,#fff5cf,#ffcf3a 60%,#ff9d2e);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  text-shadow:0 2px 10px rgba(255,160,40,.4); animation:lvupShine 1.4s ease-in-out infinite;}
@keyframes lvupShine{0%,100%{filter:brightness(1)} 50%{filter:brightness(1.25)}}
.lvup-sub{margin-top:6px; font-size:15px; font-weight:900; color:#fff;}
.lvup-extra{margin-top:8px; display:flex; flex-direction:column; gap:4px; align-items:center;}
.lvup-line{font-size:12.5px; font-weight:900; color:#7ef9ff; text-shadow:0 0 8px rgba(126,249,255,.4);}

/* (3)(14) 潜水艦の成長パネル＝プログレスパネルの「潜水艦」配色（あなたLvはアクア、潜水艦はオレンジ寄り） */
.prog-panel.sub{border-color:rgba(255,160,60,.3);
  background:linear-gradient(180deg, rgba(40,24,10,.42), rgba(20,12,6,.5));}
.prog-lv.sub{color:#ffc06a}
.prog-lv.sub b{color:#ffc06a; text-shadow:0 0 10px rgba(255,160,60,.5)}
.prog-goal.sub{color:#ffc06a}
.prog-track.sub{box-shadow:inset 0 0 0 1px rgba(255,160,60,.18)}
.prog-bar.sub{background:linear-gradient(90deg,#ff9d2e,#ffcf5a)} /* 既定。JSが艇のレア色で上書きする */

/* (9) 図鑑コンプ率ゲージ（何%集めたかを数字＋バーで） */
.dex-rate{margin:0 14px 10px; padding:10px 13px; border-radius:14px;
  background:linear-gradient(180deg, rgba(20,30,48,.55), rgba(10,16,28,.6));
  border:1px solid rgba(127,212,255,.18);}
.dex-rate.complete{border-color:rgba(255,207,90,.5); box-shadow:0 0 18px rgba(255,207,90,.25)}
.dex-rate-top{display:flex; align-items:baseline; justify-content:space-between; gap:8px; margin-bottom:7px}
.dex-rate-lab{font-size:11.5px; font-weight:900; letter-spacing:.04em; color:#9fdcff}
.dex-rate-val{display:inline-flex; align-items:baseline; gap:8px}
.dex-rate-val b{font-size:21px; font-weight:1000; color:var(--orange2); text-shadow:0 0 10px rgba(255,140,40,.4)}
.dex-rate.complete .dex-rate-val b{color:#ffcf5a; text-shadow:0 0 12px rgba(255,207,90,.6)}
.dex-rate-frac{font-size:11.5px; font-weight:800; color:var(--dim)}
.dex-rate-frac b{font-size:13px; color:#cdeeff; text-shadow:none}
.dex-rate-track{position:relative; height:13px; border-radius:9px; overflow:hidden;
  background:rgba(0,0,0,.4); box-shadow:inset 0 0 0 1px rgba(127,212,255,.15)}
.dex-rate-track i{display:block; height:100%; border-radius:9px;
  background:linear-gradient(90deg,#ff7a18,#ffcf5a);
  box-shadow:0 0 12px rgba(255,140,40,.5); transition:width .6s cubic-bezier(.2,1,.3,1)}
.dex-rate-track i.complete{background:linear-gradient(90deg,#ffcf5a,#7ef9ff);
  box-shadow:0 0 16px rgba(255,207,90,.7)}

/* ===========================================================
   経済まわり（ログインボーナス・友達紹介・ダイヤ購入）＋マイページ乗り換え
   担当B11。黒×ダイヤ水色(--paid)を基調に、既存トーンへ馴染ませる。
   =========================================================== */

/* (13) HUDのダイヤチップ（数字タップでショップへ）。ボタンだが chip 見た目を踏襲。 */
.dia-chip{appearance:none; cursor:pointer; font-family:inherit; color:var(--ink);
  position:relative; transition:transform .12s, box-shadow .2s}
.dia-chip:active{transform:translateY(1px)}
.dia-chip::after{content:"＋"; margin-left:5px; font-weight:1000; font-size:12px;
  color:#04141f; background:var(--paid); width:15px; height:15px; line-height:15px;
  border-radius:999px; display:inline-block; text-align:center;
  box-shadow:0 0 8px rgba(107,231,255,.5)}

/* (10)(11) 拠点の無料ガチャ導線ボタン */
.econ-actions .btn{font-size:13.5px; padding:12px 8px}
.btn.econ-daily{background:linear-gradient(180deg,#1a2740,#121a2c);
  border:1px solid rgba(107,231,255,.25); color:#dff4ff}
.btn.econ-daily.ready{background:linear-gradient(180deg,#13344d,#0f2438);
  border-color:rgba(107,231,255,.6); box-shadow:0 0 16px rgba(107,231,255,.35);
  animation:diaPulse 1.8s ease-in-out infinite}
@keyframes diaPulse{0%,100%{box-shadow:0 0 12px rgba(107,231,255,.25)}50%{box-shadow:0 0 22px rgba(107,231,255,.55)}}
.btn.econ-invite{background:linear-gradient(180deg,#241a3a,#181226);
  border:1px solid rgba(176,107,255,.28); color:#ecdfff}

/* (10) ログインボーナス カード */
.daily-card{text-align:center}
.daily-card .reward{color:var(--paid)}
.daily-streak{font-size:13px; color:#ffcf5a; font-weight:800; margin:2px 0 12px; min-height:18px}
.daily-streak b{font-size:18px; color:#ffd97a}
#btnDailyClaim.done{opacity:.6}

/* (11)(12) 友達招待カード */
.invite-card{text-align:left; max-width:380px}
.invite-desc{font-size:13px; color:var(--dim); line-height:1.6; margin:4px 0 12px; text-align:center}
.invite-desc b{color:var(--paid)}
.invite-sec{background:rgba(10,16,28,.5); border:1px solid var(--line);
  border-radius:14px; padding:11px 12px; margin-bottom:11px}
.invite-lab{font-size:11px; font-weight:900; letter-spacing:.04em; color:#9fdcff; margin-bottom:8px}
.invite-code-row{display:flex; align-items:center; gap:8px; flex-wrap:wrap}
.invite-code{flex:1; min-width:120px; font-size:20px; font-weight:1000; letter-spacing:.08em;
  color:#eaf8ff; background:rgba(107,231,255,.08); border:1px dashed rgba(107,231,255,.45);
  border-radius:10px; padding:9px 12px; text-align:center; user-select:all}
.invite-mini{appearance:none; cursor:pointer; font-family:inherit; font-size:12.5px; font-weight:800;
  color:#dff4ff; background:#1a2740; border:1px solid rgba(107,231,255,.3);
  border-radius:10px; padding:9px 11px; white-space:nowrap; transition:transform .12s}
.invite-mini:active{transform:translateY(1px)}
.invite-mini.ok{background:#13344d; border-color:rgba(107,231,255,.55); color:#eaf8ff}
.invite-hint{font-size:12px; color:var(--good); font-weight:800; margin-top:8px; min-height:16px}
.btn.invite-do{font-size:14px; padding:13px 10px;
  background:linear-gradient(180deg,#13344d,#0f2438); border:1px solid rgba(107,231,255,.4); color:#eaf8ff}
.invite-meta{font-size:12px; color:var(--dim); font-weight:700; margin-top:8px}
.invite-input-row{display:flex; align-items:center; gap:8px}
.invite-input{flex:1; min-width:0; font-family:inherit; font-size:16px; font-weight:800; letter-spacing:.06em;
  color:#eaf8ff; background:rgba(0,0,0,.35); border:1px solid var(--line); border-radius:10px;
  padding:11px 12px; text-transform:uppercase}
.invite-input::placeholder{color:#5d6b80; text-transform:none; letter-spacing:0; font-weight:600}
.invite-input:focus{outline:none; border-color:rgba(107,231,255,.5); box-shadow:0 0 0 2px rgba(107,231,255,.15)}
.invite-input-hint{font-size:12px; color:var(--dim); font-weight:700; margin-top:8px; min-height:16px}

/* (13) ショップ最上段：ダイヤ購入欄（横スクロール） */
.dia-top{margin:0 0 12px; padding:11px 12px; border-radius:16px;
  background:linear-gradient(180deg, rgba(15,40,58,.6), rgba(8,18,30,.65));
  border:1px solid rgba(107,231,255,.28); box-shadow:0 0 16px rgba(107,231,255,.10)}
.dia-top-head{display:flex; align-items:baseline; justify-content:space-between; gap:8px; margin-bottom:9px}
.dia-top-t{font-size:14px; font-weight:1000; color:#eaf8ff}
.dia-top-t small{font-size:10.5px; font-weight:700; color:var(--dim); margin-left:4px}
.dia-top-bal{font-size:12px; font-weight:800; color:var(--dim)}
.dia-top-bal b{color:var(--paid); font-size:15px}
.dia-row{display:flex; gap:9px; overflow-x:auto; -webkit-overflow-scrolling:touch; padding-bottom:3px;
  scrollbar-width:none}
.dia-row::-webkit-scrollbar{display:none}
.dia-card{position:relative; flex:0 0 auto; min-width:96px; appearance:none; cursor:pointer; text-align:center;
  font-family:inherit; color:var(--ink);
  background:linear-gradient(180deg,#16243a,#101826); border:1px solid rgba(107,231,255,.22);
  border-radius:13px; padding:13px 11px 11px; transition:transform .12s, box-shadow .2s}
.dia-card:active{transform:translateY(2px)}
.dia-card.whale{border-color:rgba(255,207,90,.5); box-shadow:0 0 14px rgba(255,207,90,.2)}
.dia-amt{font-size:15px; font-weight:1000; color:var(--paid); white-space:nowrap}
.dia-bonus{display:block; font-size:11px; font-weight:900; color:var(--good); margin-top:2px}
.dia-yen{font-size:13px; font-weight:900; color:#ffd97a; margin-top:6px}
.dia-badge{position:absolute; top:-8px; right:8px; font-size:10px; font-weight:900; padding:2px 8px;
  border-radius:999px; background:#1a2740; border:1px solid rgba(107,231,255,.4); color:#dff4ff}
.dia-badge.best{background:#ffd34d; color:#1a0d00; border:none}
.dia-badge.pop{background:var(--good); color:#04140c; border:none}
.dia-badge.whale{background:linear-gradient(90deg,#ffcf5a,#ff9d2e); color:#1a0d00; border:none}
#diaConfDia, #diaDoneMsg{color:var(--paid)}

/* (19) マイページ：コレクションからの乗り換え（装備変更）ボタン＋トースト */
.my-c-actwrap{margin-top:7px}
.my-c-act{display:block; width:100%; appearance:none; cursor:pointer; font-family:inherit;
  font-size:12px; font-weight:900; border-radius:10px; padding:8px 6px; transition:transform .12s}
.my-c-act:active{transform:translateY(1px)}
.my-c-act.eq{color:#04141f; background:linear-gradient(180deg,#7fe6ff,#3aa0ff);
  border:none; box-shadow:0 2px 8px rgba(58,160,255,.3)}
.my-c-act.on{color:var(--good); background:rgba(54,211,153,.12); border:1px solid rgba(54,211,153,.35);
  cursor:default}
.my-flash{position:absolute; left:50%; bottom:24px; transform:translateX(-50%) translateY(10px);
  background:rgba(10,16,28,.95); border:1px solid rgba(107,231,255,.4); color:#eaf8ff;
  font-size:13px; font-weight:800; padding:10px 16px; border-radius:999px; z-index:20;
  opacity:0; pointer-events:none; transition:opacity .25s, transform .25s;
  box-shadow:0 6px 20px rgba(0,0,0,.5)}
.my-flash.show{opacity:1; transform:translateX(-50%) translateY(0)}

/* ===========================================================
   軽量化 v4（担当：軽量化）— カクつきを消してサクサクに
   既存の見た目・契約は壊さず、「重い処理」だけを場面ごとに止める/間引く。
   主因＝全画面共通の海(world-bg)の常時アニメ（blur/mix-blend/filter脈動が
   メニュー画面でも回りっぱなし）と、攻撃FXの過剰な合成。
   方針：
   1) 海が主役でない一覧画面(図鑑/商店/ガチャ/ランキング/マイページ/訪問/ガレージ)では
      海の常設アニメを停止（描画は残すが動かさない＝GPU負荷ゼロ）。
   2) タブが隠れている間(body.cd-hidden)は海の常設アニメを完全停止。
   3) 重い filter 脈動(abyssPulse)を全層filterから外し、合成レイヤーを固定して
      毎フレームの再ラスタライズを避ける（translateZで独立レイヤー化）。
   4) prefers-reduced-motion を尊重（端末設定で控えめ動作）。
   =========================================================== */

/* (3) 海の常設アニメ層を“自前の合成レイヤー”に固定して再描画コストを下げる。
   transform:translateZ(0) でGPUレイヤー化し、will-changeは変化する性質だけ宣言。 */
.world-bg .w-caustic,
.world-bg .w-rays,
.world-bg .w-godray,
.world-bg .w-dot,
.world-bg .w-shadow{
  transform:translateZ(0);
  will-change:transform;
  backface-visibility:hidden;
}

/* (3') 重い全層 filter 脈動(hue-rotate/saturate)を撤去し、軽い opacity 脈動に置換。
   filterアニメは合成レイヤー全体を毎フレーム作り直す最重量級。明るさ/雰囲気は
   w-pressure 等の既存層で十分出ているため、深淵の“生命感”は不透明度の微脈動で表現。 */
.world-bg[data-depth="16"],.world-bg[data-depth="17"],
.world-bg[data-depth="18"],.world-bg[data-depth="19"]{
  animation:abyssPulseLite 6s ease-in-out infinite !important;
}
@keyframes abyssPulseLite{0%,100%{opacity:1}50%{opacity:.94}}

/* (1) 海が主役でない一覧画面では、海の常設アニメを停止（要素は残るが動かない）。
   body[data-screen] は core.js の CD.show が設定する。
   一覧系＝図鑑/商店/ガチャ/ランキング/マイページ/訪問/ガレージ。 */
body[data-screen="scrZukan"] .world-bg [class^="w-"],
body[data-screen="scrZukan"] .world-bg [class*=" w-"],
body[data-screen="scrShop"]  .world-bg [class^="w-"],
body[data-screen="scrShop"]  .world-bg [class*=" w-"],
body[data-screen="scrGacha"] .world-bg [class^="w-"],
body[data-screen="scrGacha"] .world-bg [class*=" w-"],
body[data-screen="scrRank"]  .world-bg [class^="w-"],
body[data-screen="scrRank"]  .world-bg [class*=" w-"],
body[data-screen="scrMypage"] .world-bg [class^="w-"],
body[data-screen="scrMypage"] .world-bg [class*=" w-"],
body[data-screen="scrVisit"] .world-bg [class^="w-"],
body[data-screen="scrVisit"] .world-bg [class*=" w-"],
body[data-screen="scrGarage"] .world-bg [class^="w-"],
body[data-screen="scrGarage"] .world-bg [class*=" w-"],
body[data-screen="scrZukan"] .world-bg,
body[data-screen="scrShop"]  .world-bg,
body[data-screen="scrGacha"] .world-bg,
body[data-screen="scrRank"]  .world-bg,
body[data-screen="scrMypage"] .world-bg,
body[data-screen="scrVisit"] .world-bg,
body[data-screen="scrGarage"] .world-bg{
  animation-play-state:paused !important;
}

/* (2) タブ非表示中は海の常設アニメを完全停止（電池節約＋復帰時のカクつき防止）。 */
body.cd-hidden .world-bg,
body.cd-hidden .world-bg [class^="w-"],
body.cd-hidden .world-bg [class*=" w-"],
body.cd-hidden .fx,
body.cd-hidden .swim,
body.cd-hidden .bubble,
body.cd-hidden .snowdot{
  animation-play-state:paused !important;
}

/* (4) 端末が「視差効果を減らす」設定なら、海の常設アニメと装飾アニメを大幅に抑える。
   ゲーム進行に必要な発射FX等は残し、ずっと回る背景演出だけ静止させる。 */
@media (prefers-reduced-motion:reduce){
  .world-bg .w-caustic,
  .world-bg .w-rays,
  .world-bg .w-godray,
  .world-bg .w-dot,
  .world-bg .w-shadow,
  .world-bg[data-depth]{ animation:none !important; }
  .hero-bg,.hero-shine{ animation:none !important; }
  .pulse{ animation:none !important; }
}

/* ============================================================
   商店とガチャ v5（担当：商店とガチャ）
   (1) アイテム/潜水艦/ミサイルの価格を必ず分かりやすく表示
   (7) 潜水艦の拡大クローズアップ（擬似3D・ドラッグで傾けて見学）
   ============================================================ */

/* --- (1) 価格表示：商品カードに常時出す価格チップ（所持済でも価格を隠さない） --- */
.it-meta{display:flex; flex-wrap:wrap; align-items:center; gap:6px}
.it-price{display:inline-flex; align-items:center; gap:2px;
  color:#1a0d00; background:linear-gradient(180deg,var(--orange2),var(--orange));
  font-weight:900; font-size:12px; padding:2px 9px; border-radius:999px;
  box-shadow:0 1px 4px rgba(255,122,24,.35)}
.it-price.free{color:#04140c; background:linear-gradient(180deg,#8ff0c5,var(--good)); box-shadow:none}
.it-have{color:var(--good); font-size:11px; font-weight:800}
.it-cnt{color:#cdd6e4; font-size:11px; font-weight:800}

/* 潜水艦カードの価格（常時表示・所持済/装備中でも本来価格を明示） */
.ssub-price{margin:2px auto 6px; max-width:92%; text-align:center;
  font-size:12px; font-weight:900; color:#1a0d00; border-radius:999px; padding:3px 8px;
  background:linear-gradient(180deg,var(--orange2),var(--orange));
  box-shadow:0 1px 4px rgba(255,122,24,.3)}
.ssub-price.free{background:linear-gradient(180deg,#8ff0c5,var(--good)); color:#04140c; box-shadow:none}

/* 「🔍 拡大」ヒント（潜水艦アイコンの右下） */
.ssub-pic{cursor:pointer}
.ssub-zoom{position:absolute; right:4px; bottom:4px; z-index:3;
  font-size:10px; font-weight:900; color:#eaf2ff; cursor:pointer;
  background:rgba(8,14,26,.72); border:1px solid rgba(255,255,255,.16);
  border-radius:999px; padding:2px 7px; line-height:1.2;
  backdrop-filter:blur(2px); pointer-events:auto}
.ssub-zoom:active{transform:translateY(1px)}
.ssub-img{cursor:pointer}

/* --- (7) 潜水艦 拡大クローズアップ・モーダル（擬似3D） --- */
.sub-view-ov{ --sv-tint:#3aa0ff; }
.sub-view-card{
  width:min(94vw,440px); max-width:94vw; text-align:center; padding:14px 14px 16px;
  background:
    radial-gradient(120% 80% at 50% 0%, color-mix(in srgb,var(--sv-tint) 24%, transparent) 0%, transparent 60%),
    linear-gradient(180deg,#0a1322,#070b14);
  border:1px solid color-mix(in srgb,var(--sv-tint) 40%, var(--line));
  box-shadow:0 0 0 1px rgba(255,255,255,.04), 0 18px 60px rgba(0,0,0,.6),
    0 0 40px color-mix(in srgb,var(--sv-tint) 28%, transparent)}
.sv-head{display:flex; align-items:center; justify-content:center; gap:8px; flex-wrap:wrap;
  margin:2px 26px 8px}
.sv-no{font-size:11px; font-weight:800; color:var(--dim); letter-spacing:.05em}
.sv-name{font-size:17px; font-weight:900; color:var(--ink)}
.sv-rar{font-size:10px; font-weight:900; color:#08111f; padding:2px 8px; border-radius:999px}

/* 擬似3Dステージ：親に perspective、内側 model を回転 */
.sv-stage{position:relative; height:min(56vh,320px); border-radius:18px; overflow:hidden;
  perspective:900px; perspective-origin:50% 42%;
  background:
    radial-gradient(140% 70% at 50% 8%, color-mix(in srgb,var(--sv-tint) 30%, transparent) 0%, transparent 55%),
    radial-gradient(100% 120% at 50% 120%, #06304d 0%, #04101e 55%, #020912 100%);
  border:1px solid rgba(255,255,255,.06);
  cursor:grab; touch-action:none; user-select:none; -webkit-user-select:none}
.sv-stage.grabbing{cursor:grabbing}
/* 上からの探照灯っぽい光 */
.sv-stage::before{content:""; position:absolute; left:50%; top:-12%; width:62%; height:80%;
  transform:translateX(-50%); pointer-events:none;
  background:radial-gradient(60% 60% at 50% 0%, color-mix(in srgb,var(--sv-tint) 26%, transparent), transparent 70%);
  filter:blur(6px); opacity:.8}
/* 床の写り込みリング */
.sv-floor{position:absolute; left:50%; bottom:14%; width:64%; height:42px; transform:translateX(-50%);
  background:radial-gradient(ellipse at center, color-mix(in srgb,var(--sv-tint) 34%, transparent), transparent 72%);
  filter:blur(7px); opacity:.6; pointer-events:none}
.sv-model{position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
  transform-style:preserve-3d; will-change:transform;
  transform:rotateX(-8deg) rotateY(18deg) scale(1)}
.sv-img{max-width:82%; max-height:82%; object-fit:contain; -webkit-user-drag:none; user-select:none;
  filter:drop-shadow(0 16px 26px rgba(0,0,0,.55))
         drop-shadow(0 0 18px color-mix(in srgb,var(--sv-tint) 40%, transparent))}
/* 傾きに連動して動く光沢 */
.sv-shine{position:absolute; left:50%; top:50%; width:60%; height:60%;
  transform:translate(-50%,-50%); pointer-events:none; mix-blend-mode:screen;
  background:radial-gradient(40% 40% at 40% 30%, rgba(255,255,255,.5), transparent 60%);
  opacity:.35; border-radius:50%}
.sv-hint{position:absolute; left:0; right:0; bottom:8px; z-index:4; pointer-events:none;
  font-size:11px; font-weight:800; color:#cfe0f5; text-shadow:0 1px 4px #000; opacity:.92}
.sv-stat{margin:9px 0 4px; font-size:13px; font-weight:800; color:var(--orange2)}

/* 操作バー（－ 100% ＋ ／ 向きをリセット） */
.sv-ctrl{display:flex; align-items:center; justify-content:center; gap:10px; margin-top:8px}
.sv-zb{appearance:none; border:1px solid var(--line); background:var(--panel2); color:var(--ink);
  width:40px; height:40px; border-radius:12px; font-size:22px; font-weight:900; cursor:pointer; line-height:1}
.sv-zb:active{transform:translateY(1px)}
.sv-zoom{min-width:54px; font-size:13px; font-weight:900; color:var(--ink)}
.sv-reset{appearance:none; border:1px solid var(--line); background:var(--panel2); color:var(--ink);
  border-radius:12px; padding:9px 14px; font-size:12px; font-weight:800; cursor:pointer; margin-left:4px}
.sv-reset:active{transform:translateY(1px)}

@media (max-width:359px){
  .sv-stage{height:min(50vh,260px)}
  .sv-zb{width:36px; height:36px}
}
@media (prefers-reduced-motion:reduce){
  .sv-model{transition:none}
}

/* (5)(6) 提供割合パネル：潜水艦の当たりやすさ（所持数で段階的にレア）の表示 */
.grate-subdrop{margin:10px 0 4px; padding:10px 12px; border-radius:12px;
  background:rgba(58,160,255,.08); border:1px solid rgba(58,160,255,.28)}
.grate-subdrop-t{font-size:13px; font-weight:900; color:#bfe0ff}
.grate-subdrop-now{margin-top:3px; font-size:13px; color:var(--ink)}
.grate-subdrop-now b{color:var(--orange2); font-size:15px}
.grate-subdrop-note{margin-top:4px; font-size:11px; line-height:1.5; color:var(--dim)}

/* ===========================================================
   ログイン動線（パスワードゲート → ログイン選択 → 名前登録）
   ゲーム本体の最前面に被せる深海テーマの黒基調オーバーレイ。スマホ/PC両対応。
   =========================================================== */
.auth-gate{position:absolute; inset:0; z-index:60; display:none;
  align-items:center; justify-content:center; padding:24px;
  background:radial-gradient(120% 90% at 50% 0%, #0a1830 0%, #060b16 48%, #03060c 100%);
  overflow:auto; -webkit-overflow-scrolling:touch}
.auth-gate.on{display:flex; animation:fade .3s ease}
body.auth-locked{overflow:hidden}
/* 深海の漂い（控えめな光のヴェール。煽らず上品に） */
.auth-bg{position:absolute; inset:0; pointer-events:none;
  background:
    radial-gradient(60% 40% at 20% 12%, rgba(58,160,255,.10), transparent 70%),
    radial-gradient(50% 38% at 86% 22%, rgba(70,224,192,.08), transparent 72%),
    radial-gradient(80% 60% at 50% 110%, rgba(0,0,0,.55), transparent 60%)}
.auth-inner{position:relative; z-index:1; width:100%; max-width:420px;
  display:flex; flex-direction:column; align-items:stretch; gap:18px; margin:auto}

.auth-brand{text-align:center; margin-bottom:2px}
.auth-logo{font-size:40px; line-height:1; filter:drop-shadow(0 4px 16px rgba(58,160,255,.4))}
.auth-title{margin-top:8px; font-size:26px; font-weight:900; letter-spacing:.02em;
  background:linear-gradient(180deg,#fff,#bfe0ff); -webkit-background-clip:text; background-clip:text;
  color:transparent}
.auth-sub{font-size:11px; letter-spacing:.42em; color:#7fb0e0; margin-top:2px; padding-left:.42em}

.auth-step{display:none; flex-direction:column; gap:14px;
  background:linear-gradient(180deg, rgba(23,27,41,.92), rgba(16,19,30,.96));
  border:1px solid rgba(120,170,230,.16); border-radius:22px; padding:24px 22px;
  box-shadow:0 18px 50px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.04)}
.auth-step.on{display:flex; animation:fade .28s ease}

.auth-h{font-size:20px; font-weight:900; color:var(--ink); margin:0; text-align:center}
.auth-lead{font-size:13px; line-height:1.7; color:var(--dim); margin:-4px 0 2px; text-align:center}

.auth-field{display:flex; flex-direction:column; gap:6px}
.auth-lab{font-size:12px; font-weight:800; color:#9fc4ec; letter-spacing:.04em}
.auth-input{appearance:none; width:100%; box-sizing:border-box;
  background:rgba(6,12,22,.85); border:1px solid rgba(120,170,230,.24); border-radius:12px;
  padding:13px 14px; font-size:16px; color:var(--ink); outline:none;
  transition:border-color .15s, box-shadow .15s}
.auth-input::placeholder{color:#5d6c82}
.auth-input:focus{border-color:#3aa0ff; box-shadow:0 0 0 3px rgba(58,160,255,.22)}

.auth-err{min-height:18px; font-size:12.5px; line-height:1.5; color:#ff9a8a; font-weight:700}

.auth-btn{width:100%; margin-top:2px}
.auth-note{font-size:11.5px; color:var(--dim); text-align:center; margin:2px 0 0}

/* ログイン選択ボタン（各プロバイダらしい色・ロゴ風） */
.auth-prov{appearance:none; display:flex; align-items:center; gap:14px; width:100%; box-sizing:border-box;
  border-radius:14px; padding:14px 16px; font-size:16px; font-weight:800; cursor:pointer;
  border:1px solid transparent; transition:transform .08s, filter .15s, box-shadow .15s}
.auth-prov:active{transform:translateY(2px)}
.auth-prov-ic{flex:none; display:flex; align-items:center; justify-content:center;
  width:30px; height:30px; border-radius:7px; font-weight:900; font-size:15px}
.auth-prov-tx{flex:1; text-align:center; margin-right:30px}
/* Google：白地・ふちどり・G */
.auth-google{background:#ffffff; color:#1f1f1f; box-shadow:0 4px 14px rgba(0,0,0,.35)}
.auth-google:hover{filter:brightness(.97)}
.auth-ic-google{background:#fff;
  background:conic-gradient(from -45deg, #ea4335 0 25%, #fbbc05 0 50%, #34a853 0 75%, #4285f4 0 100%);
  color:#fff; position:relative}
.auth-ic-google::after{content:"G"; position:absolute; inset:5px; display:flex; align-items:center;
  justify-content:center; background:#fff; border-radius:5px; color:#4285f4; font-size:15px; font-weight:900}
/* LINE：緑 #06C755 */
.auth-line{background:#06C755; color:#fff; box-shadow:0 4px 14px rgba(6,199,85,.4)}
.auth-line:hover{filter:brightness(1.03)}
.auth-ic-line{background:rgba(255,255,255,.18); font-size:9px; letter-spacing:.02em}

/* タイトル画面の小導線（ようこそ／名前変更／ログアウト） */
.auth-acct{display:flex; align-items:center; justify-content:center; flex-wrap:wrap;
  gap:6px; margin-top:8px; font-size:11.5px; color:var(--dim)}
.auth-acct-who{color:#bfe0ff; font-weight:700}
.auth-acct-who:not(:empty){margin-right:4px}
.auth-acct-link{appearance:none; background:none; border:none; padding:2px 4px; cursor:pointer;
  font-size:11.5px; color:#9fc4ec; text-decoration:underline; font-weight:700}
.auth-acct-link:active{opacity:.7}
.auth-acct-sep{color:#46618a}

/* スマホ縦：余白を詰めて1画面に収める */
@media (max-height:640px){
  .auth-gate{padding:16px}
  .auth-inner{gap:12px}
  .auth-logo{font-size:32px}
  .auth-title{font-size:22px}
  .auth-step{padding:18px 18px; gap:11px}
}

/* ===========================================================
   コンボ（連続撃破）演出 — のめり込み度＋爽快感の強化（追加・外付け）。
   会長ルール準拠：横揺れ等の安っぽい動きはせず、上品な明滅・拡大の一過性のみ。
   =========================================================== */
/* HUDの常設チップ（2コンボ以上で点灯。節目 t1〜t5 で色と発光が強まる） */
.dive-stats .ds.combo-chip{
  border-color:rgba(255,122,24,.55);
  background:linear-gradient(180deg, rgba(255,122,24,.22), rgba(8,10,18,.6));
  color:var(--orange2); box-shadow:0 0 0 0 rgba(255,122,24,.4);
  animation:comboChipPulse .9s ease infinite;
}
.dive-stats .ds.combo-chip b{ color:#fff }
.dive-stats .ds.combo-chip.t2{ border-color:rgba(255,90,122,.6) }
.dive-stats .ds.combo-chip.t3{ border-color:rgba(176,107,255,.65); color:#e6c9ff }
.dive-stats .ds.combo-chip.t4,
.dive-stats .ds.combo-chip.t5{ border-color:rgba(70,224,192,.7); color:#bdfff0 }
@keyframes comboChipPulse{
  0%,100%{ box-shadow:0 0 6px 0 rgba(255,122,24,.25) }
  50%{ box-shadow:0 0 14px 2px rgba(255,122,24,.5) }
}

/* 撃破時に中央へ大きくポップするコンボ表示（一過性） */
.combo-pop{
  position:absolute; left:50%; top:34%; transform:translate(-50%,-50%);
  z-index:8; pointer-events:none; text-align:center; line-height:1;
  text-shadow:0 2px 10px rgba(0,0,0,.6), 0 0 18px rgba(255,122,24,.5);
  animation:comboPop 1.05s cubic-bezier(.2,.9,.25,1) forwards;
  font-variant-numeric:tabular-nums;
}
.combo-pop .cp-n{
  display:block; font-size:64px; font-weight:900; color:var(--orange2);
  -webkit-text-stroke:1.5px rgba(0,0,0,.35);
}
.combo-pop .cp-x{
  display:block; margin-top:2px; font-size:16px; font-weight:900; letter-spacing:.06em; color:#fff;
}
.combo-pop .cp-b{
  display:block; margin-top:3px; font-size:15px; font-weight:800; color:var(--good);
}
.combo-pop.t2 .cp-n{ color:#ff8aa3 }
.combo-pop.t3 .cp-n{ color:#caa0ff; font-size:72px }
.combo-pop.t4 .cp-n{ color:#7ef0db; font-size:80px }
.combo-pop.t5 .cp-n{ color:#ffe27a; font-size:90px;
  text-shadow:0 0 22px rgba(255,210,74,.85), 0 2px 12px rgba(0,0,0,.6) }
@keyframes comboPop{
  0%{ opacity:0; transform:translate(-50%,-50%) scale(.6) }
  18%{ opacity:1; transform:translate(-50%,-50%) scale(1.12) }
  34%{ transform:translate(-50%,-50%) scale(1) }
  78%{ opacity:1; transform:translate(-50%,-58%) scale(1) }
  100%{ opacity:0; transform:translate(-50%,-72%) scale(.96) }
}

/* 被弾でコンボが途切れた時の控えめな表示 */
.combo-break{
  position:absolute; left:50%; top:40%; transform:translate(-50%,-50%);
  z-index:8; pointer-events:none; font-size:15px; font-weight:800;
  color:var(--dim); text-shadow:0 2px 8px rgba(0,0,0,.6);
  animation:comboBreak .85s ease forwards;
}
@keyframes comboBreak{
  0%{ opacity:0; transform:translate(-50%,-50%) scale(1.05) }
  20%{ opacity:.9 }
  100%{ opacity:0; transform:translate(-50%,-30%) scale(.96) }
}

@media (prefers-reduced-motion: reduce){
  .combo-pop, .combo-break, .dive-stats .ds.combo-chip{ animation:none !important }
}

/* ===========================================================
   継続率・課金率の外付け施策（conf_monetize.js / missions / starter / streak / collection）
   会長ルール：黒ベース・読みやすく・煽らない。既存配色(--orange/--paid等)に合わせる。
   =========================================================== */

/* ---- 拠点：赤バッジ（受け取れる数）---- */
.home-badge{display:inline-flex; align-items:center; justify-content:center; min-width:20px; height:20px;
  padding:0 6px; margin-left:8px; border-radius:999px; background:#ff3b50; color:#fff;
  font-size:12px; font-weight:900; box-shadow:0 0 10px rgba(255,59,80,.6)}
.home-badge.hidden{display:none}

/* ---- 拠点：ミッションボタン（受け取れる時は光る）---- */
.btn.mission-cta{background:linear-gradient(180deg,#1d2b1c,#141d12);
  border:1px solid rgba(120,220,120,.28); color:#e3ffe0; position:relative}
.btn.mission-cta.ready{border-color:rgba(120,230,120,.65);
  box-shadow:0 0 16px rgba(120,230,120,.4); animation:diaPulse 1.8s ease-in-out infinite}

/* ---- 拠点：スターターCTA（買えるときだけ表示＆光る）---- */
.starter-cta-wrap.hidden{display:none}
.btn.starter-cta{background:linear-gradient(180deg,#3a2a12,#241803);
  border:1px solid rgba(255,200,90,.45); color:#fff3da; font-size:14px}
.btn.starter-cta.ready{box-shadow:0 0 18px rgba(255,190,80,.5);
  animation:diaPulse 1.9s ease-in-out infinite}

/* ---- 拠点：潜水艦コレクション パネル ---- */
.coll-panel{margin:0 16px 8px; padding:12px 14px; border-radius:16px;
  background:linear-gradient(180deg,var(--panel2),var(--panel)); border:1px solid rgba(120,200,255,.22)}
.coll-head{display:flex; justify-content:space-between; align-items:center; margin-bottom:6px}
.coll-head .coll-t{font-size:13px; font-weight:800; color:#cfe6ff}
.coll-head .coll-pct{font-size:18px; font-weight:900; color:#7fd4ff}
.coll-track{height:10px; border-radius:999px; background:rgba(255,255,255,.08); overflow:hidden}
.coll-track i{display:block; height:100%; border-radius:999px; transition:width .5s ease;
  background:linear-gradient(90deg,#3aa0ff,#7fd4ff); box-shadow:0 0 8px rgba(120,200,255,.6)}
.coll-meta{display:flex; justify-content:space-between; align-items:center; margin-top:6px; font-size:12px; color:var(--dim)}
.coll-meta .coll-num{font-weight:800; color:#cfe6ff}
.coll-next b{color:#ffd97a}
.coll-done{color:#ffd97a; font-weight:900}

/* ---- ミッション オーバーレイ ---- */
.missions-card{text-align:left; max-width:420px; width:100%}
.missions-card h2{text-align:center}
.missions-scroll{max-height:60vh; overflow:auto; -webkit-overflow-scrolling:touch; margin:6px 0 10px}
.missions-sec-t{font-size:12px; color:var(--dim); font-weight:800; letter-spacing:.06em; margin:10px 2px 6px}
.missions-list{display:flex; flex-direction:column; gap:8px}
.msn-row{display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:14px;
  background:var(--panel2); border:1px solid var(--line)}
.msn-row.done{border-color:rgba(120,230,120,.45); background:linear-gradient(180deg,#16241a,#121a14)}
.msn-row.claimed{opacity:.55}
.msn-main{flex:1; min-width:0}
.msn-label{font-size:13px; font-weight:700; color:var(--ink); margin-bottom:5px; line-height:1.4}
.msn-track{height:7px; border-radius:999px; background:rgba(255,255,255,.08); overflow:hidden}
.msn-track i{display:block; height:100%; border-radius:999px; background:linear-gradient(90deg,#6be7ff,#3aa0ff); transition:width .4s ease}
.msn-prog{font-size:10px; color:var(--dim); margin-top:4px}
.msn-rwd{font-size:13px; font-weight:900; color:#ffd97a; white-space:nowrap}
.msn-actwrap{flex:0 0 auto}
.msn-act{display:inline-block; font-size:12px; font-weight:800; padding:8px 12px; border-radius:12px; border:none; white-space:nowrap}
.msn-act.can{background:linear-gradient(180deg,var(--orange2),var(--orange)); color:#1a0d00; cursor:pointer}
.msn-act.wait{background:rgba(255,255,255,.06); color:var(--dim)}
.msn-act.done{background:rgba(120,230,120,.18); color:#9be79b}
.msn-empty{color:var(--dim); font-size:13px; padding:10px; text-align:center}
.missions-allclear-wrap{margin-top:8px}
.msn-allclear{font-size:13px; font-weight:800; padding:10px 12px; border-radius:12px; display:flex;
  align-items:center; justify-content:space-between; gap:10px}
.msn-allclear.can{background:linear-gradient(180deg,#2a2412,#1c1809); border:1px solid rgba(255,200,90,.4); color:#ffe7b0}
.msn-allclear.done{background:rgba(120,230,120,.12); color:#9be79b}
.msn-allclear.wait{background:rgba(255,255,255,.04); color:var(--dim)}
.missions-note{font-size:11px; color:var(--dim); line-height:1.6; margin-top:10px}
.missions-flash{min-height:0; font-size:13px; font-weight:800; color:#ffd97a; text-align:center;
  opacity:0; max-height:0; transition:opacity .25s, max-height .25s; overflow:hidden}
.missions-flash.show{opacity:1; max-height:40px; min-height:20px; margin:4px 0}

/* ---- スターターパック オーバーレイ ---- */
.starter-card{text-align:center; max-width:380px; width:100%}
.starter-desc{font-size:13px; color:var(--dim); line-height:1.6; margin:8px 0 12px}
.starter-body{background:rgba(255,200,90,.06); border:1px solid rgba(255,200,90,.28);
  border-radius:16px; padding:14px; margin:8px 0}
.starter-line{font-size:15px; font-weight:800; color:var(--ink); margin:6px 0}
.starter-line.big{font-size:20px; font-weight:900; color:#ffd97a}
.starter-line b{color:#fff}
.starter-mul{display:inline-block; font-size:11px; font-weight:900; color:#1a0d00;
  background:linear-gradient(180deg,var(--orange2),var(--orange)); padding:2px 8px; border-radius:999px; margin-left:4px}
.starter-sub{font-size:11px; color:var(--dim); margin:2px 0 8px}
.starter-rar{font-size:12px; font-weight:800}
.starter-price{display:flex; justify-content:space-between; align-items:center; margin:12px 2px 10px;
  font-size:13px; color:var(--dim)}
.starter-price b{font-size:20px; font-weight:900; color:var(--ink)}
.btn.starter-buy{background:linear-gradient(180deg,var(--orange2),var(--orange)); color:#1a0d00}
.btn.starter-buy.done{filter:grayscale(.6) brightness(.7)}
.starter-note{font-size:11px; color:var(--dim); line-height:1.6; margin-top:10px}

/* ---- ログイン階段（連続ログイン）---- */
.daily-ladder{margin:14px 0 4px; text-align:left}
.ladder-head{font-size:13px; font-weight:800; color:#7fd4ff; margin-bottom:8px; text-align:center}
.ladder-row{display:flex; gap:5px; justify-content:center; flex-wrap:wrap; margin-bottom:8px}
.ladder-step{flex:1 1 0; min-width:38px; max-width:60px; padding:7px 3px; border-radius:10px; text-align:center;
  background:rgba(255,255,255,.05); border:1px solid var(--line)}
.ladder-step.on{background:linear-gradient(180deg,#13344d,#0f2438); border-color:rgba(107,231,255,.5)}
.ladder-step.next{background:linear-gradient(180deg,#2a2412,#1c1809); border-color:rgba(255,200,90,.55);
  box-shadow:0 0 12px rgba(255,200,90,.3)}
.ladder-step.big{border-width:2px}
.ladder-step.big.next{box-shadow:0 0 16px rgba(255,200,90,.5)}
.ladder-day{font-size:9px; color:var(--dim); line-height:1.2}
.ladder-step.on .ladder-day{color:#bfe7ff}
.ladder-step.next .ladder-day{color:#ffe7b0}
.ladder-dia{font-size:11px; font-weight:900; color:#ffd97a; margin-top:3px}
.ladder-msg{font-size:12px; color:var(--ink); line-height:1.6; margin:6px 0 8px; text-align:center}
.ladder-msg b{color:#ffd97a}
.ladder-note{font-size:10px; color:var(--dim); line-height:1.5; margin-top:8px; text-align:center}
#btnDailyLadderClaim{width:100%}
#btnDailyLadderClaim.big{background:linear-gradient(180deg,#ffe08a,var(--orange))}
.daily-ladder-msg{font-size:12px; font-weight:800; color:#ffd97a; min-height:16px; margin:6px 0 0}

/* ---- 集計：連勝行 ---- */
#tallyStreak{color:#ffd97a; font-weight:800; font-size:13px}

/* ---- ガチャ天井：予兆（near-pity）---- */
.gpity-omen{font-size:11px; font-weight:900; margin-top:6px; letter-spacing:.04em;
  animation:omenGlow 1.6s ease-in-out infinite}
.gacha-pity.near-pity .gpity-track{box-shadow:0 0 14px currentColor}
.gacha-pity.near-pity .gpity-track i{animation:omenBar 1.6s ease-in-out infinite}
@keyframes omenGlow{0%,100%{opacity:.7}50%{opacity:1}}
@keyframes omenBar{0%,100%{filter:brightness(1)}50%{filter:brightness(1.4)}}

/* ---- 図鑑：属性ごとの収集（あと◯体でコンプ）---- */
.dex-attr-prog{margin:8px 14px 4px; padding:10px 12px; border-radius:14px;
  background:var(--panel2); border:1px solid var(--line)}
.cap-head{font-size:12px; color:var(--dim); font-weight:800; letter-spacing:.06em; margin-bottom:8px}
.cap-row{display:flex; align-items:center; gap:8px; margin:6px 0; font-size:12px}
.cap-dot{width:9px; height:9px; border-radius:50%; flex:0 0 auto; box-shadow:0 0 6px currentColor}
.cap-name{flex:0 0 44px; font-weight:800}
.cap-track{flex:1; height:7px; border-radius:999px; background:rgba(255,255,255,.08); overflow:hidden}
.cap-track i{display:block; height:100%; border-radius:999px; transition:width .4s ease}
.cap-num{flex:0 0 auto; color:var(--dim); font-size:11px}
.cap-remain{flex:0 0 auto; font-size:11px; color:var(--ink)}
.cap-remain b{color:#ffd97a}
.cap-done{color:#9be79b; font-weight:800}

@media (prefers-reduced-motion: reduce){
  .btn.mission-cta.ready, .btn.starter-cta.ready, .gpity-omen, .gacha-pity.near-pity .gpity-track i{ animation:none !important }
}

/* ===========================================================
   波1A：核ループの追加演出（進度／会心／祝福花火／救援／復活）
   会長ルール：横揺れ過剰はしない（光彩・拡大・粒子＝平行移動が主）。
   prefers-reduced-motion では動きを止め、静かな表示にする。
   =========================================================== */

/* (1) 進度チップ：HUDの「進度 ◯ ・ ボスまであと ◯体」 */
.dive-stats .prog-chip{ color:#cfe8ff }
.dive-stats .prog-chip b{ color:#7fd0ff }
.dive-stats .prog-chip.boss-near{
  border-color:#ff8a5a; color:#ffd8c4; background:rgba(60,16,8,.55);
  animation:progNear 1s ease-in-out infinite;
}
.dive-stats .prog-chip.boss-near b{ color:#ffb27a }
@keyframes progNear{0%,100%{box-shadow:0 0 0 rgba(255,138,90,0)}50%{box-shadow:0 0 12px rgba(255,138,90,.6)}}

/* (29) 会心の一撃ワード */
.crit-word{
  position:absolute; left:50%; top:30%; transform:translate(-50%,-50%) scale(.7);
  z-index:8; pointer-events:none; font-weight:900; font-size:26px; white-space:nowrap;
  color:#ffd87a; text-shadow:0 0 12px rgba(255,154,58,.9), 0 2px 6px #000;
  animation:critWord .85s cubic-bezier(.2,1.4,.35,1) forwards;
}
.crit-word .cw-spark{ margin-right:4px }
@keyframes critWord{
  0%{opacity:0; transform:translate(-50%,-50%) scale(.6)}
  25%{opacity:1; transform:translate(-50%,-58%) scale(1.12)}
  70%{opacity:1; transform:translate(-50%,-62%) scale(1)}
  100%{opacity:0; transform:translate(-50%,-72%) scale(1)}
}

/* (2) 祝福バナー「ポーン／ドーン／ドッカーン！ おめでとう！」 */
.cheer-banner{
  position:absolute; left:50%; top:38%; transform:translate(-50%,-50%) scale(.7);
  z-index:9; pointer-events:none; display:flex; align-items:center; gap:10px;
  padding:10px 18px; border-radius:18px; opacity:0;
  background:linear-gradient(180deg, rgba(255,209,74,.22), rgba(255,122,58,.16));
  border:2px solid rgba(255,209,74,.7); box-shadow:0 8px 28px rgba(0,0,0,.5), 0 0 30px rgba(255,180,80,.5);
}
.cheer-banner .ch-tx{ font-weight:900; color:#fff4cf; text-shadow:0 2px 8px #000, 0 0 14px rgba(255,180,80,.8); font-size:22px; white-space:nowrap }
.cheer-banner .ch-spark{ font-size:22px }
.cheer-banner.show{ animation:cheerPop 1.8s ease forwards }
.cheer-banner.big{ top:34% }
.cheer-banner.big .ch-tx{ font-size:28px }
.cheer-banner.big .ch-spark{ font-size:28px }
.cheer-banner.big.show{ animation:cheerPop 2.2s ease forwards }
.cheer-banner.mega{ top:32% }
.cheer-banner.mega .ch-tx{ font-size:34px }
.cheer-banner.mega .ch-spark{ font-size:34px }
.cheer-banner.mega.show{ animation:cheerPop 2.6s ease forwards }
@keyframes cheerPop{
  0%{opacity:0; transform:translate(-50%,-50%) scale(.6)}
  14%{opacity:1; transform:translate(-50%,-50%) scale(1.12)}
  28%{transform:translate(-50%,-50%) scale(1)}
  80%{opacity:1; transform:translate(-50%,-50%) scale(1)}
  100%{opacity:0; transform:translate(-50%,-56%) scale(1.02)}
}

/* (2) 花火のキャンバス（#scrDive に重ねる一時レイヤー） */
.fw-canvas{ position:absolute; inset:0; z-index:8; pointer-events:none }

/* (30) 仲間の救援バナー＆援護ミサイル */
.rescue-banner{
  position:absolute; left:50%; top:26%; transform:translate(-50%,-12px) scale(.9);
  z-index:9; pointer-events:none; display:flex; align-items:center; gap:8px; opacity:0;
  padding:8px 16px; border-radius:999px;
  background:linear-gradient(180deg, rgba(124,252,138,.22), rgba(70,224,192,.16));
  border:2px solid rgba(124,252,138,.75); box-shadow:0 8px 24px rgba(0,0,0,.5), 0 0 22px rgba(124,252,138,.5);
}
.rescue-banner .rb-ic{ font-size:20px }
.rescue-banner .rb-tx{ font-weight:900; color:#dffbe4; text-shadow:0 2px 6px #000; font-size:17px; white-space:nowrap }
.rescue-banner.show{ animation:rescueBanner 1.7s ease forwards }
@keyframes rescueBanner{
  0%{opacity:0; transform:translate(-50%,-12px) scale(.85)}
  16%{opacity:1; transform:translate(-50%,0) scale(1.06)}
  30%{transform:translate(-50%,0) scale(1)}
  80%{opacity:1}
  100%{opacity:0; transform:translate(-50%,-8px) scale(1)}
}
/* 右上 → 敵中央 へ斜めに走る援護の光弾 */
.rescue-missile{
  position:absolute; right:8%; top:8%; width:16px; height:16px; z-index:7; pointer-events:none;
  border-radius:50%; background:radial-gradient(circle, #eafff0 0%, #7CFC8A 55%, rgba(124,252,138,0) 75%);
  box-shadow:0 0 14px rgba(124,252,138,.9); opacity:0;
}
.rescue-missile.go{ animation:rescueFly .6s cubic-bezier(.4,.1,.2,1) forwards; animation-delay:var(--delay,0ms) }
@keyframes rescueFly{
  0%{opacity:0; right:6%; top:6%; transform:scale(.6)}
  12%{opacity:1; transform:scale(1)}
  100%{opacity:.2; right:46%; top:42%; transform:scale(.8)}
}

/* (28) 復活オーバーレイ */
.revive-card{ position:relative }
.revive-card h2{ color:#ffd87a }
.revive-row{ display:flex; justify-content:space-between; align-items:center; gap:10px;
  padding:8px 12px; margin:6px 0; border-radius:12px; background:rgba(8,10,18,.5); border:1px solid var(--line) }
.revive-row span{ color:var(--dim); font-size:13px }
.revive-row b{ color:var(--orange2); font-weight:900 }
.revive-short{ color:#ffb27a; font-size:13px; font-weight:700; min-height:18px; margin:4px 0 8px; text-align:center }
.revive-help{
  position:absolute; right:12px; top:12px; width:26px; height:26px; border-radius:50%;
  border:1px solid var(--line); background:rgba(8,10,18,.6); color:#cfe8ff; font-weight:900; cursor:pointer;
}
.revive-tip{
  display:none; margin:8px 0 4px; padding:10px 12px; border-radius:12px; text-align:left;
  background:rgba(8,18,30,.6); border:1px solid rgba(127,208,255,.35); color:#cfe2f2; font-size:13px; line-height:1.6;
}
.revive-tip.open{ display:block }
.revive-tip b{ color:#ffd87a }

@media (prefers-reduced-motion: reduce){
  .crit-word, .cheer-banner, .cheer-banner.show, .cheer-banner.big.show, .cheer-banner.mega.show,
  .rescue-banner.show, .rescue-missile.go, .prog-chip.boss-near{ animation-duration:.01ms !important; animation-iteration-count:1 !important }
}

/* ===========================================================
   波1B 追加スタイル（A0／5／4a／13）
   =========================================================== */

/* (4a) 左上のレベルカードを「押せる」見た目に（ニックネーム→マイページ／潜水艦Lv→艦ページ） */
.topbar .lvcard[role="button"]{ cursor:pointer; transition:transform .12s ease, box-shadow .12s ease }
.topbar .lvcard[role="button"]:active{ transform:scale(.96) }
.topbar .lvcard[role="button"]:focus-visible{ outline:2px solid #7fd4ff; outline-offset:2px }

/* (13) ランキング 300位の件数注記 */
.rank-count-note{
  text-align:center; color:var(--dim); font-size:12px; font-weight:700;
  padding:6px 8px; margin:2px 0 4px; border-radius:10px;
  background:rgba(8,18,30,.45); border:1px solid rgba(127,208,255,.18);
}

/* (5) Lv10 戦艦プレゼント「ボス退治の報酬」演出 */
.lv10gift-card{ position:relative; overflow:hidden; text-align:center; }
.lv10gift-card .lv10gift-fw{
  position:absolute; inset:0; width:100%; height:100%; pointer-events:none; z-index:0;
}
.lv10gift-card > *:not(.lv10gift-fw){ position:relative; z-index:1; }
.lv10gift-title{ font-size:22px; font-weight:900; color:#ffd87a; margin:2px 0 4px;
  text-shadow:0 0 14px rgba(255,200,90,.55); }
.lv10gift-sub{ color:var(--dim); font-size:13px; line-height:1.6; margin:2px 8px 12px; }
.lv10gift-ship{ height:150px; display:flex; align-items:center; justify-content:center; margin:4px 0; perspective:700px; }
.lv10gift-ship img{ max-width:78%; max-height:148px; object-fit:contain;
  filter:brightness(1.16) drop-shadow(0 0 18px rgba(255,207,58,.65)) drop-shadow(0 10px 18px rgba(0,0,0,.5)); }
.lv10gift-ship img.spin{ animation:lv10Spin 1.5s cubic-bezier(.18,.7,.2,1) 1 both; }
.lv10gift-name{ font-size:19px; font-weight:900; margin-top:6px; }
.lv10gift-rar{ font-size:13px; font-weight:800; margin:2px 0 12px; }
@keyframes lv10Spin{
  0%{   transform:rotateY(0deg)   scale(.55); opacity:0; }
  10%{  opacity:1; }
  70%{  transform:rotateY(1080deg) scale(1.18); }
  85%{  transform:rotateY(1080deg) scale(.94); }
  100%{ transform:rotateY(1080deg) scale(1); }
}
@media (prefers-reduced-motion: reduce){
  .lv10gift-ship img.spin{ animation:lv10Fade .5s ease 1 both; }
  @keyframes lv10Fade{ from{opacity:0; transform:scale(.9)} to{opacity:1; transform:scale(1)} }
}

/* =====================================================================
   波2B（実装B）：14 マイページのレベル／26 図鑑導線／4b 深度ボス詳細／I スタートヒーロー艦
   後勝ちで追加（既存スタイルは変えない）。
   ===================================================================== */

/* ---- (I) スタート画面ヒーロー：一番かっこいい戦艦を主役で大きく ---- */
.title-hero-stage{
  position:relative; z-index:3;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  margin:6px auto 2px; padding:0 14px; pointer-events:none;
}
.title-hero-glow{
  position:absolute; left:50%; top:46%; transform:translate(-50%,-50%);
  width:300px; height:300px; border-radius:50%; z-index:0; pointer-events:none;
  background:radial-gradient(circle,
    rgba(120,200,255,.40) 0%, rgba(120,200,255,.16) 38%, rgba(255,122,24,.12) 62%, transparent 74%);
  filter:blur(6px);
  animation:heroGlow 5.5s ease-in-out infinite;
}
.title-hero-ship{
  position:relative; z-index:1;
  width:min(78vw, 360px); height:min(46vh, 300px);
  display:flex; align-items:center; justify-content:center;
  animation:heroFloat 6s ease-in-out infinite;
}
.title-hero-ship img{
  max-width:100%; max-height:100%; object-fit:contain;
  filter:brightness(1.08)
    drop-shadow(0 0 26px rgba(120,200,255,.55))
    drop-shadow(0 16px 26px rgba(0,0,0,.55));
}
.title-hero-name{
  position:relative; z-index:1; margin-top:4px;
  font-size:13px; font-weight:900; letter-spacing:.04em;
  text-shadow:0 1px 8px rgba(0,0,0,.8);
}
/* ゆったり浮遊（縦の上下＋ごく僅かな傾き。横揺れ過剰はしない） */
@keyframes heroFloat{
  0%,100%{ transform:translateY(0) rotate(-.6deg); }
  50%{     transform:translateY(-12px) rotate(.6deg); }
}
@keyframes heroGlow{
  0%,100%{ opacity:.72; transform:translate(-50%,-50%) scale(1); }
  50%{     opacity:1;   transform:translate(-50%,-50%) scale(1.07); }
}
/* ヒーロー艦を主役にするので、ロゴは少し詰めて下に置く */
#scrTitle.hero .title-logo{ margin-top:2px; margin-bottom:12px; }
@media (prefers-reduced-motion: reduce){
  .title-hero-ship,.title-hero-glow{ animation:none !important; }
}
/* 小さい画面：主役感は保ちつつ収める */
@media (max-height:680px){
  .title-hero-ship{ height:min(38vh, 230px); width:min(70vw, 280px); }
  .title-hero-glow{ width:240px; height:240px; }
}

/* ---- 新ロゴ統一（2026-06-26）：横長ロゴを主役にし、浮く潜水艦は控えめに ----
   新ロゴ自体に潜水艦が描かれているため、浮遊艦が前面で競合すると重複感が出る。
   浮遊艦は小さく・薄く・背後に沈めて、ロゴが一番目立つように上品に整える。
   （要素は残すので wave2b の主役艦差し込み／ship3d 連携は壊さない） */
.title-hero-stage{ z-index:1; margin:2px auto 0; }
.title-hero-ship{ width:min(46vw, 200px); height:min(26vh, 168px); opacity:.42; }
.title-hero-ship img{ filter:brightness(1.0)
  drop-shadow(0 0 14px rgba(120,200,255,.30))
  drop-shadow(0 8px 16px rgba(0,0,0,.45)); }
.title-hero-glow{ width:200px; height:200px; opacity:.5; }
.title-hero-name{ opacity:.6; font-size:11px; }
/* ロゴ群は浮遊艦より前面（重なっても必ずロゴが上） */
#scrTitle.hero .title-logo{ z-index:4; }
@media (max-height:680px){
  .title-hero-ship{ height:min(20vh, 140px); width:min(40vw, 168px); }
  .title-hero-glow{ width:160px; height:160px; }
}

/* ---- (14) マイページ「あなたのレベル」ヒーロー（名前＋大きなレベル＋アイコン＋？） ---- */
.my-you-hero{
  position:relative; display:flex; align-items:center; gap:14px;
  margin:4px 14px 8px; padding:14px 16px; border-radius:18px;
  background:linear-gradient(135deg, rgba(92,200,255,.14), rgba(8,18,30,.5));
  border:1px solid rgba(92,200,255,.45);
  box-shadow:0 0 0 1px rgba(92,200,255,.16), 0 6px 20px rgba(0,0,0,.4);
}
.my-you-q{
  position:absolute; top:8px; right:10px;
  width:22px; height:22px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  font-size:13px; font-weight:900; cursor:pointer;
  color:#0b1726; background:#7fd4ff;
  box-shadow:0 0 10px rgba(92,200,255,.5);
  border:none; line-height:1; user-select:none;
}
.my-you-q:hover{ filter:brightness(1.1); }
.my-you-ava{
  flex:none; width:74px; height:74px; border-radius:50%;
  display:flex; align-items:center; justify-content:center; overflow:hidden;
  background:radial-gradient(circle at 50% 38%, rgba(127,212,255,.28), rgba(8,18,30,.7));
  border:2px solid rgba(127,212,255,.55);
  box-shadow:0 0 16px rgba(92,200,255,.35), inset 0 0 12px rgba(0,0,0,.4);
}
.my-you-ava-def{ font-size:38px; line-height:1; filter:drop-shadow(0 2px 4px rgba(0,0,0,.6)); }
.my-you-ava-img{ width:100%; height:100%; object-fit:cover; }
.my-you-ava.unlocked{ border-color:#ffd87a; box-shadow:0 0 18px rgba(255,207,58,.55), inset 0 0 12px rgba(0,0,0,.4); }
.my-you-info{ min-width:0; flex:1; display:flex; flex-direction:column; gap:4px; }
.my-you-name{
  font-size:18px; font-weight:900; color:var(--ink);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  text-shadow:0 1px 4px rgba(0,0,0,.5);
}
.my-you-lvline{ display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
.my-you-lvlab{ font-size:11px; font-weight:800; color:#9fdcff; letter-spacing:.04em; }
.my-you-lvbig{ display:inline-flex; align-items:baseline; gap:2px; }
.my-you-lvunit{ font-size:14px; font-weight:900; color:#7fd4ff; }
.my-you-lvbig b{
  font-size:40px; font-weight:900; line-height:1; color:#7fd4ff;
  text-shadow:0 0 14px rgba(92,200,255,.6);
}
@media (max-width:360px){
  .my-you-ava{ width:62px; height:62px; }
  .my-you-ava-def{ font-size:32px; }
  .my-you-lvbig b{ font-size:34px; }
  .my-you-name{ font-size:16px; }
}

/* ---- (12・波7B) レベル30で解放：自分のアイコンが「変更できる」見た目（鉛筆バッジ） ---- */
.my-you-ava.editable{ cursor:pointer; }
.my-you-ava.editable::after{
  content:"✎"; position:absolute; right:-2px; bottom:-2px;
  width:22px; height:22px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  font-size:12px; font-weight:900; color:#0b1726; background:#ffd87a;
  box-shadow:0 0 8px rgba(255,207,58,.6); border:2px solid var(--panel);
}
/* バッジは hero（position:relative）基準で右下へ。アバター自身を相対基準にする */
.my-you-hero .my-you-ava{ position:relative; }
.my-you-ava.editable:hover{ filter:brightness(1.06); }

/* ---- (12・波7B) アイコン変更ダイアログ：プレビュー・メッセージ ---- */
.avatar-card .av-preview-wrap{ display:flex; justify-content:center; margin:8px 0 4px; }
.av-preview{
  width:120px; height:120px; border-radius:50%; overflow:hidden;
  display:flex; align-items:center; justify-content:center;
  background:radial-gradient(circle at 50% 38%, rgba(127,212,255,.28), rgba(8,18,30,.7));
  border:2px solid rgba(127,212,255,.55);
  box-shadow:0 0 16px rgba(92,200,255,.35), inset 0 0 12px rgba(0,0,0,.4);
}
.av-preview-def{ font-size:58px; line-height:1; filter:drop-shadow(0 2px 4px rgba(0,0,0,.6)); }
.av-preview-img{ width:100%; height:100%; object-fit:cover; }
.av-msg{ min-height:18px; font-size:13px; font-weight:800; color:var(--dim); margin:6px 0 2px; }
.av-msg.err{ color:var(--bad); }
.avatar-card .btn.primary{ } /* 既定の .btn（オレンジ）をそのまま使用 */

/* ---- (26) マイページ → 図鑑導線ボタン ---- */
.my-zukan-row{ padding:2px 14px 6px; }
.my-zukan-cta{
  width:100%;
  background:linear-gradient(135deg, rgba(255,122,24,.16), rgba(8,18,30,.5));
  border:1px solid rgba(255,122,24,.45);
  font-weight:900;
}
.my-zukan-cta:hover{ filter:brightness(1.08); }

/* ---- (4b) 深度チップをクリック可能に（押せる感じ＋押下） ---- */
.depth-chip.clickable{ cursor:pointer; transition:transform .08s ease, box-shadow .12s ease; }
.depth-chip.clickable:hover{ box-shadow:0 0 12px rgba(127,208,255,.4); }
.depth-chip.clickable:active{ transform:scale(.95); }

/* ---- (4b) 深度ボス詳細モーダル ---- */
.dboss-card{ max-width:340px; position:relative; }
.dboss-depth{ font-size:12px; font-weight:900; letter-spacing:.08em; color:var(--orange2); margin:2px 0 2px; }
.dboss-region{ font-size:16px; font-weight:900; color:var(--ink); margin-bottom:10px; }
.dboss-img{
  width:64%; max-width:210px; margin:2px auto 8px; aspect-ratio:1; border-radius:16px; overflow:hidden;
  display:flex; align-items:center; justify-content:center;
  background:radial-gradient(circle at 50% 40%, rgba(255,207,58,.16), rgba(8,18,30,.7));
  border:1px solid rgba(255,207,58,.35);
}
.dboss-img img{ width:100%; height:100%; object-fit:contain;
  filter:brightness(1.06) drop-shadow(0 6px 14px rgba(0,0,0,.5)); }
.dboss-tag{ font-size:12px; font-weight:900; color:#ffd87a; margin:2px 0 2px;
  text-shadow:0 0 10px rgba(255,200,90,.5); }
.dboss-name{ margin:2px 0 2px; }
.dboss-no{ font-size:11px; font-weight:900; letter-spacing:.06em; color:var(--orange2); margin-bottom:2px; }
.dboss-rows{ text-align:left; margin:12px 0 4px; }
.dboss-rows .row{ display:flex; justify-content:space-between; gap:10px; padding:8px 4px;
  border-bottom:1px solid var(--line); font-size:13px; }
.dboss-rows .row:last-child{ border-bottom:none; }
.dboss-rows .row span{ color:var(--dim); }
.dboss-rows .row b{ color:var(--ink); font-weight:900; text-align:right; }
.dboss-hint{ font-size:12px; color:#cdd6e4; background:rgba(255,122,24,.08);
  border:1px solid rgba(255,122,24,.22); border-radius:10px; padding:9px 11px;
  margin:6px 0 10px; line-height:1.6; text-align:left; }
.dboss-empty{ padding:18px 6px 8px; text-align:center; }
.dboss-lock{ font-size:48px; line-height:1; opacity:.7; }
.dboss-locktxt{ font-size:17px; font-weight:900; color:#9fb3c8; margin:8px 0 4px; }
.dboss-locksub{ font-size:12.5px; color:var(--dim); line-height:1.6; margin:0 6px 8px; }

/* ===========================================================
   波4B：ワールドマップ見える化（拠点バナー＋航路画面）
   世界地図/航路風・上品（横揺れ過剰なし・脈動は上品な明滅のみ）。
   =========================================================== */

/* 拠点の現在地バナー（今いる海域名＋深度＋進捗） */
.home-here{ display:flex; align-items:center; gap:11px; margin:10px 16px 4px;
  padding:11px 13px; border-radius:16px; cursor:pointer;
  background:linear-gradient(135deg,#0e2236,#0a1626 70%);
  border:1px solid rgba(127,214,255,.28);
  box-shadow:0 6px 18px rgba(0,0,0,.4), inset 0 0 0 1px rgba(127,214,255,.06);
  position:relative; overflow:hidden; -webkit-tap-highlight-color:transparent; }
.home-here:active{ transform:translateY(1px); }
.home-here.all-clear{ border-color:rgba(127,224,176,.45); background:linear-gradient(135deg,#0c2a20,#08191a 70%); }
.home-here-ic{ font-size:30px; line-height:1; flex:0 0 auto; filter:drop-shadow(0 2px 6px rgba(0,0,0,.5)); }
.home-here-meta{ flex:1; min-width:0; }
.home-here-lab{ font-size:10.5px; color:var(--dim); letter-spacing:.08em; }
.home-here-name b{ font-size:18px; font-weight:900; color:#aee6ff; }
.home-here.all-clear .home-here-name b{ color:#9af0c4; }
.home-here-depthline{ font-size:12px; color:#cfe3f4; margin-top:1px; }
.home-here-depthline b{ color:#ffd27a; font-weight:900; font-size:14px; }
.home-here-slash{ color:var(--dim); font-size:11px; }
.home-here-bar{ position:absolute; left:0; bottom:0; height:4px; width:100%; background:rgba(255,255,255,.06); }
.home-here-fillinner{ display:block; height:100%; width:0%;
  background:linear-gradient(90deg,#3aa3ff,#7fd6ff); transition:width .5s ease; box-shadow:0 0 8px rgba(127,214,255,.5); }
.home-here.all-clear .home-here-fillinner{ background:linear-gradient(90deg,#2fc98a,#7fe0b0); }
.home-here-go{ flex:0 0 auto; font-size:12px; font-weight:800; color:#0a1626;
  background:linear-gradient(180deg,#9ddcff,#5bbdf2); border-radius:999px; padding:6px 11px;
  box-shadow:0 3px 0 #2b6f9c; white-space:nowrap; }

/* 拠点の「ワールドマップを見る」ボタン */
.btn.worldmap-cta{ background:linear-gradient(180deg,#1a3a55,#102338); color:#cfe9ff;
  border:1px solid rgba(127,214,255,.32); box-shadow:0 5px 0 #0a1726,0 9px 20px rgba(0,0,0,.42); }

/* ---- ワールドマップ画面 ---- */
#scrWorldMap{ overflow-y:auto; -webkit-overflow-scrolling:touch;
  background:radial-gradient(120% 80% at 50% -10%, #0a2238 0%, #061322 55%, #03101c 100%); }
.wm-head{ display:flex; align-items:center; gap:10px; padding:14px 16px 6px; position:sticky; top:0; z-index:2;
  background:linear-gradient(180deg,rgba(4,16,28,.96),rgba(4,16,28,.6) 80%,transparent); }
.wm-title{ font-size:18px; font-weight:900; color:var(--ink); flex:1; }
.wm-title small{ display:block; font-size:11px; font-weight:700; color:var(--dim); letter-spacing:.04em; margin-top:2px; }

/* 要約カード */
.wm-summary{ padding:4px 16px 2px; }
.wm-sum-card{ background:linear-gradient(180deg,#10263b,#0a1a2a); border:1px solid rgba(127,214,255,.22);
  border-radius:16px; padding:12px 14px; box-shadow:0 6px 16px rgba(0,0,0,.4); }
.wm-sum-row{ display:flex; align-items:center; justify-content:space-between; margin:3px 0; }
.wm-sum-lab{ font-size:12px; color:var(--dim); }
.wm-sum-val{ font-size:14px; font-weight:900; color:#cfe9ff; }
.wm-sum-val em{ font-style:normal; font-size:12px; color:#ffd27a; margin-left:4px; }
.wm-sum-next{ margin-top:8px; padding-top:8px; border-top:1px dashed rgba(255,255,255,.12);
  font-size:13px; color:#bfe3ff; }
.wm-sum-next b{ color:#aee6ff; font-weight:900; }

/* 航路（縦に海峡を並べる） */
.wm-route{ padding:8px 16px 28px; max-width:480px; margin:0 auto; }

/* 1つの海峡ノード（カード） */
.wm-node{ display:flex; align-items:center; gap:11px; position:relative;
  background:linear-gradient(135deg,#0f2236,#0a1726); border:1px solid var(--line);
  border-radius:16px; padding:11px 13px; box-shadow:0 5px 14px rgba(0,0,0,.36); }
.wm-node-no{ position:absolute; top:7px; right:11px; font-size:11px; font-weight:900; color:rgba(255,255,255,.28); }
.wm-node-ic{ font-size:28px; line-height:1; flex:0 0 auto; filter:drop-shadow(0 2px 5px rgba(0,0,0,.5)); }
.wm-node-body{ flex:1; min-width:0; }
.wm-node-top{ display:flex; align-items:center; gap:7px; flex-wrap:wrap; }
.wm-node-name{ font-size:15.5px; font-weight:900; color:#dfeeff; }
.wm-node-en{ font-size:10.5px; color:var(--dim); margin-top:1px; letter-spacing:.02em; }
.wm-node-state{ font-size:11.5px; color:#9fb6cc; margin:3px 0 6px; font-weight:700; }

/* 進捗バー（◯/100） */
.wm-bar{ height:8px; border-radius:999px; background:rgba(255,255,255,.08); overflow:hidden; }
.wm-bar-fill{ display:block; height:100%; width:0%;
  background:linear-gradient(90deg,#3aa3ff,#7fd6ff); box-shadow:0 0 8px rgba(127,214,255,.5);
  transition:width .5s ease; }
.wm-bar.done .wm-bar-fill{ background:linear-gradient(90deg,#2fc98a,#7fe0b0); box-shadow:0 0 8px rgba(127,224,176,.5); }
.wm-bar-cap{ font-size:11px; color:#bcd3e8; margin-top:4px; font-weight:700; }
.wm-bar-cap.locked{ color:var(--dim); font-weight:600; }

/* 現在地・次・制覇・未解放の状態色 */
.wm-node.cur{ border-color:#7fd6ff; box-shadow:0 0 0 1px rgba(127,214,255,.45), 0 6px 18px rgba(0,0,0,.45);
  animation:wmPulse 2.4s ease-in-out infinite; }
.wm-node.cur .wm-node-name{ color:#aee6ff; }
.wm-node.cleared{ background:linear-gradient(135deg,#10402e,#082a1e); border-color:rgba(127,224,176,.34); }
.wm-node.cleared .wm-node-name{ color:#aef0cf; }
.wm-node.cleared .wm-node-state{ color:#7fe0b0; }
.wm-node.next{ border-color:#ffd27a; }
.wm-node.locked{ filter:grayscale(.55) brightness(.66); opacity:.92; }

/* バッジ */
.wm-cur-badge{ font-size:10.5px; font-weight:900; color:#04121e;
  background:linear-gradient(180deg,#aee6ff,#5bbdf2); border-radius:999px; padding:2px 8px; }
.wm-next-badge{ font-size:10.5px; font-weight:900; color:#2a1900;
  background:linear-gradient(180deg,#ffe2a3,#ffc15c); border-radius:999px; padding:2px 8px;
  box-shadow:0 0 10px rgba(255,193,92,.4); }

/* 海峡間の矢印（次はここ への流れ） */
.wm-arrow{ text-align:center; font-size:15px; color:rgba(255,255,255,.2); line-height:1; margin:5px 0; }
.wm-arrow.lit{ color:rgba(127,224,176,.7); }

/* 上品な明滅（現在地）— 位置は動かさず光だけ脈動 */
@keyframes wmPulse{
  0%,100%{ box-shadow:0 0 0 1px rgba(127,214,255,.35), 0 6px 18px rgba(0,0,0,.45); }
  50%    { box-shadow:0 0 0 1px rgba(127,214,255,.7), 0 0 18px rgba(127,214,255,.35), 0 6px 18px rgba(0,0,0,.45); }
}
@media (prefers-reduced-motion: reduce){
  .wm-node.cur{ animation:none; }
  .home-here-fillinner, .wm-bar-fill{ transition:none; }
}

/* ===========================================================
   (波7A・H) ランキング報酬：マイページの王冠パネル
   種類＝日/週/月、順位＝金/銀/銅（--cc で色分け）、日刊は ×N を併記。
   =========================================================== */
.my-crowns{
  display:flex; flex-wrap:wrap; gap:10px; margin:6px 0 14px;
}
.my-crowns-empty{
  width:100%; padding:14px 14px; border-radius:12px;
  background:rgba(255,255,255,.04); border:1px dashed rgba(255,255,255,.14);
  color:var(--dim,#9fb0c8); font-size:13px; line-height:1.6;
}
.crown-tile{
  position:relative; display:flex; align-items:center; gap:10px;
  padding:10px 12px; min-width:138px; border-radius:14px;
  background:linear-gradient(160deg, rgba(255,255,255,.07), rgba(255,255,255,.02));
  border:1px solid color-mix(in srgb, var(--cc,#cfd8e6) 50%, transparent);
  box-shadow:0 4px 14px rgba(0,0,0,.28), inset 0 0 18px color-mix(in srgb, var(--cc,#cfd8e6) 12%, transparent);
}
.crown-tile .crown-ico{ font-size:30px; line-height:1; flex:0 0 auto; }
.crown-tile .crown-meta{ display:flex; flex-direction:column; gap:2px; line-height:1.2; }
.crown-tile .crown-period{ font-size:11px; color:var(--dim,#9fb0c8); letter-spacing:.04em; }
.crown-tile .crown-rank{ font-size:16px; font-weight:800; }
.crown-tile .crown-times{
  position:absolute; top:6px; right:8px;
  font-size:13px; font-weight:800; color:#fff;
  background:color-mix(in srgb, var(--cc,#cfd8e6) 70%, #000 30%);
  border-radius:999px; padding:1px 8px; box-shadow:0 1px 4px rgba(0,0,0,.4);
}
.crown-tile .crown-dia{
  margin-left:auto; font-size:13px; font-weight:700; color:#bfe6ff;
  white-space:nowrap;
}
/* 1位は少しだけ華やかに（上品な明滅のみ・横揺れはしない） */
.crown-tile.r1{ background:linear-gradient(160deg, rgba(255,207,58,.16), rgba(255,207,58,.03)); }
.crown-tile.r1 .crown-ico{ animation:crownGlow 2.4s ease-in-out infinite; }
@keyframes crownGlow{ 0%,100%{ filter:brightness(1) } 50%{ filter:brightness(1.35) } }

/* ===========================================================
   (波7A・H) お祝いオーバーレイ（日付確定→マイページで1回だけ）
   中央に祝福カードを淡くフェードイン→数秒で消える。横揺れ過剰はしない。
   花火は別レイヤー(.fw-canvas)が host に重ねて描く。
   =========================================================== */
.celebrate-overlay{
  position:fixed; inset:0; z-index:60; pointer-events:none;
  display:flex; align-items:center; justify-content:center;
  background:radial-gradient(ellipse at center, rgba(8,14,26,.42), rgba(2,5,12,.62));
  opacity:0; transition:opacity .42s ease;
}
.celebrate-overlay.show{ opacity:1; pointer-events:auto; }
.celebrate-card{
  text-align:center; padding:26px 30px; border-radius:20px;
  background:linear-gradient(160deg, rgba(20,30,52,.92), rgba(10,16,30,.92));
  border:1px solid rgba(255,255,255,.16);
  box-shadow:0 18px 50px rgba(0,0,0,.5), inset 0 0 40px rgba(120,180,255,.10);
  transform:translateY(10px) scale(.96); opacity:0;
  transition:transform .5s cubic-bezier(.2,.9,.25,1.2), opacity .5s ease;
  max-width:86vw;
}
.celebrate-overlay.show .celebrate-card{ transform:translateY(0) scale(1); opacity:1; }
.celebrate-title{
  font-size:30px; font-weight:900; letter-spacing:.02em;
  background:linear-gradient(90deg,#ffe08a,#fff,#9be8ff);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  text-shadow:0 2px 18px rgba(255,224,138,.25);
}
.celebrate-sub{
  margin-top:10px; font-size:15px; line-height:1.6; color:#dbe7ff;
}
@media (prefers-reduced-motion: reduce){
  .celebrate-card{ transition:opacity .3s ease; transform:none; }
  .celebrate-overlay.show .celebrate-card{ transform:none; }
  .crown-tile.r1 .crown-ico{ animation:none; }
}

/* ===========================================================
   オープニング演出（intro.js が制御）— 起動時に opening.mp4 を全画面再生し、
   終盤の「こちらを向いた瞬間」でスタート画面が“グワーッ”と迫り出して登場する。
   ・このオーバーレイは全ての画面/ゲート/モーダルの最前面（z-index 9999）。
   ・動画404/再生失敗/スキップでも必ずスタート画面へ進む（黒画面で詰まらせない保険）。
   ・横揺れ過剰なし。prefers-reduced-motion 時はフェードのみ。
   =========================================================== */
/* オーバーレイ全体＝ビューポート全面。広い画面では“ゲーム本体(#app)と同じ深海の暗い背景”を
   左右に敷き、その中央に縦長ステージ(.dd2-stage)を置く＝オープニングが横長に間延びしない。
   スマホ縦画面では .dd2-stage が全画面いっぱいに広がる（従来どおりの全画面縦長）。 */
#dd2Intro{
  position:fixed; inset:0; z-index:9999; background:#04111f; overflow:hidden;
  display:flex; align-items:center; justify-content:center;
  /* セーフエリア対応（ノッチ端末でもボタンが隠れない） */
}
/* 縦長ステージ＝ゲーム本体(#app)と同じ寸法・中央配置（最大幅480px・縦いっぱい・はみ出し切り） */
#dd2Intro .dd2-stage{
  position:relative; width:100%; max-width:480px; margin:0 auto;
  height:100dvh; height:100vh; overflow:hidden; background:#000;
}
#dd2Intro.is-fading{ animation:dd2introFade .45s ease forwards; pointer-events:none; }
@keyframes dd2introFade{ from{opacity:1} to{opacity:0} }

/* ===== カット無し（地続き）クロスフェード ============================================
   会長要望：ムービー最後の絵（潜水艦がこちらを向いた瞬間）の上に、画面を切り替えずに
   タイトルが“ブワーン”と浮かび上がる。そのとき保持フレーム（このオーバーレイ）は
   ゆっくり 1→0 でクロスフェードして送る＝つなぎ目（カット）を見せない。
   ・dd2-hold = 最終フレームを保持中（操作チップ/中央▶は隠し、絵だけを背景に）。
   ・is-crossfade = 保持フレームを静かに（約0.85秒）フェードアウト。終わったら除去。 */
#dd2Intro.dd2-hold{ background:transparent; }
#dd2Intro.dd2-hold .dd2-controls,
#dd2Intro.dd2-hold .dd2-tapstart{ display:none !important; opacity:0 !important; pointer-events:none !important; }
#dd2Intro.is-crossfade{ animation:dd2introCrossfade .85s ease forwards; pointer-events:none; }
@keyframes dd2introCrossfade{ from{opacity:1} to{opacity:0} }

/* 動画本体：縦動画を全画面に。cover で余白なく満たす（ポスターで初期黒を回避） */
#dd2Intro video{
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; background:#000; display:block;
}

/* 仕上げの発光フラッシュ（“こちらを向いた瞬間”の白フラッシュ） */
#dd2Intro .dd2-flash{
  position:absolute; inset:0; background:radial-gradient(circle at 50% 46%, #fff 0%, rgba(255,255,255,.6) 30%, rgba(180,225,255,0) 70%);
  opacity:0; pointer-events:none; mix-blend-mode:screen;
}
#dd2Intro.is-flash .dd2-flash{ animation:dd2introFlash .6s ease-out forwards; }
@keyframes dd2introFlash{ 0%{opacity:0} 18%{opacity:.95} 100%{opacity:0} }

/* 操作チップ（🔊タップで音／スキップ）— 小さく・上品に。セーフエリア内に収める */
#dd2Intro .dd2-controls{
  position:absolute; left:0; right:0; bottom:0; z-index:2;
  display:flex; justify-content:space-between; align-items:flex-end;
  padding:0 14px calc(14px + env(safe-area-inset-bottom)) 14px;
  pointer-events:none;
}
#dd2Intro .dd2-chip{
  pointer-events:auto; cursor:pointer; user-select:none; -webkit-user-select:none;
  font-size:13px; font-weight:800; letter-spacing:.02em; line-height:1;
  color:#eaf4ff; background:rgba(8,22,40,.52); border:1px solid rgba(150,200,255,.30);
  border-radius:999px; padding:9px 13px; backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
  text-shadow:0 1px 4px rgba(0,0,0,.6); box-shadow:0 4px 14px rgba(0,0,0,.35);
  transition:transform .12s ease, background .15s ease, opacity .2s ease;
}
#dd2Intro .dd2-chip:active{ transform:scale(.94); }
#dd2Intro .dd2-chip.dd2-sound{ animation:dd2introChip 1.8s ease-in-out infinite; }
#dd2Intro .dd2-chip.dd2-skip{ opacity:.9; }
@keyframes dd2introChip{ 0%,100%{opacity:.85} 50%{opacity:1; box-shadow:0 0 16px rgba(120,200,255,.45)} }
/* 最初の数秒だけ🔊チップを上品に強調（音が出せることに気づいてもらう・既存デザインは壊さない）。
   intro.js が起動直後に .dd2-hint を付け、約6秒後または音ONで外す。 */
#dd2Intro .dd2-chip.dd2-sound.dd2-hint{
  animation:dd2introChipHint 1.15s ease-in-out infinite;
  background:rgba(10,30,54,.62); border-color:rgba(150,210,255,.55);
}
@keyframes dd2introChipHint{
  0%,100%{ opacity:.92; transform:scale(1);    box-shadow:0 4px 14px rgba(0,0,0,.35); }
  50%    { opacity:1;   transform:scale(1.06); box-shadow:0 0 22px rgba(120,205,255,.70); }
}

/* 自動再生不可の端末向け：中央の大きな「タップで再生」案内 */
#dd2Intro .dd2-tapstart{
  position:absolute; inset:0; z-index:3; display:none;
  align-items:center; justify-content:center; flex-direction:column; gap:10px;
  background:rgba(0,0,0,.35); color:#eaf4ff; pointer-events:auto; cursor:pointer;
  text-shadow:0 2px 8px rgba(0,0,0,.7);
}
#dd2Intro.need-tap .dd2-tapstart{ display:flex; }
#dd2Intro .dd2-tapstart .dd2-play{
  font-size:46px; width:84px; height:84px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  background:rgba(8,22,40,.55); border:1px solid rgba(150,200,255,.35);
  box-shadow:0 6px 24px rgba(0,0,0,.45);
}
#dd2Intro .dd2-tapstart .dd2-play-label{ font-size:15px; font-weight:800; }

/* “グワーッ”と迫り出すスタート画面の登場演出（旧版・互換のため残置） */
.scrTitle-burst{ animation:dd2titleBurst .8s cubic-bezier(.18,.9,.24,1) both; transform-origin:50% 46%; will-change:transform,opacity,filter; }
@keyframes dd2titleBurst{
  0%{ opacity:0; transform:scale(1.15); filter:brightness(1.7) saturate(1.15); }
  40%{ opacity:1; }
  100%{ opacity:1; transform:scale(1); filter:none; }
}

/* ===== “ブワーン”と浮かび上がる地続きのタイトル登場（intro.js が #scrTitle に付与）=====
   会長要望：保持した最終フレームの上に、画面を切り替えずタイトル文字・ダイブ開始・最初から始める が
   不透明0→1＋scale1.08→1.0＋発光のフェードイン（約0.85秒）で“ブワーン”と浮かび上がる。
   横揺れ過剰なし。控えめなスケールと淡い発光で、保持フレームの上に静かに立ち上がる。 */
.scrTitle-bloom{ animation:dd2titleBloom .85s cubic-bezier(.16,.84,.30,1) both; transform-origin:50% 47%; will-change:transform,opacity,filter; }
@keyframes dd2titleBloom{
  0%{   opacity:0; transform:scale(1.08); filter:brightness(1.35) saturate(1.08); }
  55%{  opacity:1; filter:brightness(1.12) saturate(1.04); }
  100%{ opacity:1; transform:scale(1);    filter:none; }
}
/* タイトルの主要要素（ロゴ・タグライン・ボタン群）は気持ち遅れて立ち上げ、奥行きのある“ブワーン”に。 */
.scrTitle-bloom .title-logo,
.scrTitle-bloom .title-cta{ animation:dd2bloomRise .85s cubic-bezier(.16,.84,.30,1) both; }
.scrTitle-bloom .title-cta{ animation-delay:.08s; }
@keyframes dd2bloomRise{
  0%{   opacity:0; transform:translateY(10px) scale(1.04); filter:drop-shadow(0 0 0 rgba(120,200,255,0)); }
  60%{  opacity:1; filter:drop-shadow(0 0 18px rgba(120,200,255,.45)); }
  100%{ opacity:1; transform:translateY(0) scale(1);        filter:none; }
}

/* 入場ゲート(#authGate)が先に来る構成のときも、同じく地続きでフェードイン（カット無し）。
   主役はタイトルのブワーンを保ちつつ、ゲートは控えめに浮かび上がる。 */
.authGate-bloom{ animation:dd2gateBloom .8s cubic-bezier(.16,.84,.30,1) both; }
.authGate-bloom .auth-inner{ animation:dd2bloomRise .8s cubic-bezier(.16,.84,.30,1) both; animation-delay:.06s; }
@keyframes dd2gateBloom{
  0%{   opacity:0; transform:scale(1.05); filter:brightness(1.25); }
  60%{  opacity:1; }
  100%{ opacity:1; transform:scale(1);    filter:none; }
}

/* prefers-reduced-motion：迫り出し/発光/横揺れは素直なフェードのみに（会長ルール準拠） */
@media (prefers-reduced-motion: reduce){
  .scrTitle-burst,
  .scrTitle-bloom{ animation:fade .5s ease both; transform:none; filter:none; }
  .scrTitle-bloom .title-logo,
  .scrTitle-bloom .title-cta{ animation:none; opacity:1; transform:none; filter:none; }
  .authGate-bloom{ animation:fade .5s ease both; transform:none; filter:none; }
  .authGate-bloom .auth-inner{ animation:none; opacity:1; transform:none; filter:none; }
  #dd2Intro.is-flash .dd2-flash{ animation:none; opacity:0; }
  #dd2Intro .dd2-chip.dd2-sound{ animation:none; }
  #dd2Intro .dd2-chip.dd2-sound.dd2-hint{ animation:none; transform:none; }
  #dd2Intro.is-crossfade{ animation:fade .4s ease forwards; }
}

/* ===== オープニングのミュート切替ボタン（会長ご希望：デフォルト音ON＋「下をタップしてミュート」）=====
   ・音ON時＝「🔊 音を消す」／ミュート時＝「🔇 音を出す」。下端の押しやすい位置に、はっきりした見た目で置く。
   ・スキップは左下に小さく残す（一般タップでは飛ばない＝スキップボタンに集約）。
   ・常時パルスはやめ、落ち着いた“切替ボタン”に（注意喚起は .dd2-hint＝フォールバック時のみ）。 */
#dd2Intro .dd2-controls{ align-items:center; }            /* スキップ(小)とミュート(大)を下端で縦中央そろえ */
#dd2Intro .dd2-chip.dd2-sound{
  animation:none;                                          /* 常時パルスを止め、はっきりした切替ボタンに */
  font-size:15px; font-weight:800; padding:13px 20px; min-height:44px;  /* 指で押しやすい大きさ（44px以上） */
  display:inline-flex; align-items:center; gap:6px;
  color:#eaf4ff; background:rgba(8,26,46,.70); border:1.5px solid rgba(150,210,255,.55);
  box-shadow:0 6px 20px rgba(0,0,0,.42);
}
#dd2Intro .dd2-chip.dd2-sound.is-muted{                   /* ミュート中＝一目で分かる落ち着いた赤系 */
  color:#ffe1e1; background:rgba(70,20,20,.62); border-color:rgba(255,165,165,.55);
}
#dd2Intro .dd2-chip.dd2-skip{ font-size:12px; padding:8px 12px; opacity:.82; }  /* スキップは控えめ・小さく */

/* ===== 大きく目立つ“音ONボタン”（会長の選択：すぐ再生＋大きな音ボタン）=====================
   無音で自動再生がブロックされている間だけ、画面の中央下寄りに大きく現れる「🔊 タップで音を出す」。
   ・誰でも一目で気づける大きさ・コントラスト・余白。最初の数秒は上品に脈打つ（下品な点滅にはしない）。
   ・押すと即・音ON（intro.js が unmute）→ このボタンは消え、下端の小さなミュート切替に戻る。
   ・既定は display:none。intro.js が .show を付けたときだけ現れる（dd2-hold＝終盤の保持中は必ず隠す）。
   ・深海の世界観を壊さないよう、青系のグラス＋発光で統一（LINE緑などの異質色は使わない）。 */
#dd2Intro .dd2-bigsound{
  position:absolute; left:50%; bottom:19%; transform:translateX(-50%);
  z-index:4; display:none; align-items:center; justify-content:center; gap:8px;
  pointer-events:auto; cursor:pointer; user-select:none; -webkit-user-select:none;
  font-size:19px; font-weight:900; letter-spacing:.01em; line-height:1.15; white-space:nowrap;
  color:#eaf7ff;
  background:linear-gradient(180deg, rgba(22,78,132,.94), rgba(10,42,82,.94));
  border:2px solid rgba(150,222,255,.85); border-radius:999px;
  padding:18px 30px; min-height:58px; max-width:88%;
  box-shadow:0 10px 34px rgba(0,0,0,.50), 0 0 0 6px rgba(96,196,255,.10), 0 0 30px rgba(96,196,255,.45);
  backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
  text-shadow:0 1px 6px rgba(0,0,0,.55);
}
#dd2Intro .dd2-bigsound.show{ display:inline-flex; }
#dd2Intro .dd2-bigsound:active{ transform:translateX(-50%) scale(.96); }
#dd2Intro .dd2-bigsound.dd2-pulse{ animation:dd2bigSoundPulse 1.3s ease-in-out infinite; }
@keyframes dd2bigSoundPulse{
  0%,100%{ transform:translateX(-50%) scale(1);
           box-shadow:0 10px 34px rgba(0,0,0,.50), 0 0 0 5px rgba(96,196,255,.12), 0 0 26px rgba(96,196,255,.42); }
  50%    { transform:translateX(-50%) scale(1.06);
           box-shadow:0 12px 38px rgba(0,0,0,.50), 0 0 0 13px rgba(96,196,255,.05), 0 0 44px rgba(126,214,255,.78); }
}
/* 終盤の保持中（地続きクロスフェードへ移る瞬間）は必ず隠す＝つなぎを邪魔しない */
#dd2Intro.dd2-hold .dd2-bigsound{ display:none !important; opacity:0 !important; pointer-events:none !important; }
/* 低刺激設定：脈打ちを止め、静かに表示するだけ（会長ルール準拠） */
@media (prefers-reduced-motion: reduce){
  #dd2Intro .dd2-bigsound.dd2-pulse{ animation:none; transform:translateX(-50%); }
}
/* 小さい画面では文字と余白を少し詰めて、はみ出さず大きく見せる */
@media (max-width:360px){
  #dd2Intro .dd2-bigsound{ font-size:17px; padding:16px 22px; bottom:17%; }
}
