@charset "utf-8";

/* ==============================
   KEYFRAMES
============================== */
@keyframes shimmer {
  0%   { background-position: -500px 0; }
  100% { background-position:  500px 0; }
}
@keyframes crownFloat {
  0%, 100% { transform: translateY(0px); }
  50%       { transform: translateY(-2px); }
}
@keyframes crownFloat-subtle {
  0%, 100% { transform: translateY(0px); }
  50%       { transform: translateY(-1px); }
}
@keyframes starTwinkle {
  0%, 100% { opacity: 0;    transform: scale(0.4) rotate(0deg); }
  50%       { opacity: 1;   transform: scale(1)   rotate(20deg); }
}
@keyframes starTwinkle-dim {
  0%, 100% { opacity: 0;    transform: scale(0.5) rotate(0deg); }
  50%       { opacity: 0.6; transform: scale(0.85) rotate(12deg); }
}
@keyframes pulseGlow {
  0%, 100% { box-shadow: var(--glow-lo); }
  50%       { box-shadow: var(--glow-hi); }
}

/* ==============================
   SHARED STRUCTURE
============================== */
.badge-wrapper {
  position: relative;
  width: 290px;
  margin: 0 auto;
  top: 0.5em;
  clear: both;
}
.badge-wrapper::before,
.badge-wrapper::after {
  content: "";
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 0;
  filter: drop-shadow(0 2px 3px rgba(0,0,0,0.4));
}
.badge-wrapper::before { left: -22px; clip-path: polygon(0 50%, 16px 0, 100% 0, 100% 100%, 16px 100%); }
.badge-wrapper::after  { right: -22px; clip-path: polygon(0 0, calc(100% - 16px) 0, 100% 50%, calc(100% - 16px) 100%, 0 100%); }
.badge--entry::before, .badge--entry::after { display: none; }
.badge--grand::before, .badge--grand::after { display: none; }

.badge-body {
  position: relative; z-index: 1;
  margin: 0 auto;
  border-radius: 23px;
  width: 290px; height: 46px;
  animation: pulseGlow 3s ease-in-out infinite;
}
.badge-inner {
  position: absolute;
  top: 3px; left: 3px; right: 3px; bottom: 3px;
  border-radius: 20px;
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}
.badge-inner::before {
  content: ""; position: absolute; inset: 0;
  border-radius: inherit; pointer-events: none;
}
.badge-inner::after {
  content: ""; position: absolute; inset: 0;
  background-size: 700px 100%; border-radius: inherit;
  pointer-events: none; animation: shimmer 5s linear infinite;
}
.badge-ring {
  position: relative; z-index: 2;
  width: calc(100% - 6px); height: calc(100% - 10px);
  border-radius: 16px;
  display: flex; align-items: center; justify-content: center;
}
.badge-text {
  margin: 0; display: flex; align-items: center;
  justify-content: center; gap: 0; white-space: nowrap;
}
.badge-label, .badge-year {
  color: #fff;
  text-shadow: 0 1px 2px rgba(0,0,0,0.75), 0 -1px 2px rgba(0,0,0,0.5),
               1px 0 2px rgba(0,0,0,0.5), -1px 0 2px rgba(0,0,0,0.5);
  line-height: 1; display: inline-flex; align-items: center;
}
.badge-label { font-family: 'Noto Serif JP', serif; font-size: 12.5px; font-weight: 700; }
.badge-year  { font-family: 'Cinzel', serif; font-size: 17px; font-weight: 700; letter-spacing: 0.06em; margin: 0 0 0 6px; position: relative; top: 2px; }

/* 18禁タグ（全バッジ共通・紫） */
.r18-tag {
  font-family: 'Noto Serif JP', serif;
  font-size: 10px; font-weight: 900;
  color: #fff;
  background: linear-gradient(135deg, #5a0070 0%, #8800b0 50%, #5a0070 100%);
  border: 1px solid rgba(200,100,255,0.65);
  border-radius: 3px;
  padding: 2px 4px;
  letter-spacing: 0; line-height: 1.2;
  margin-right: 6px;
  text-shadow: none;
  flex-shrink: 0;
}

/* 薔薇アイコン（共通） */
.badge-icon {
  margin-right: 4px; flex-shrink: 0;
}

/* ランク文字共通ベース */
.badge-rank {
  font-family: 'Cinzel', serif; font-weight: 900;
  letter-spacing: 0.12em; text-indent: 0.12em;
  margin: 0 4px; line-height: 1;
  display: inline-flex; align-items: center;
}

/* stars */
.star {
  position: absolute; font-size: 7px; pointer-events: none; z-index: 10;
  animation: starTwinkle 2.2s ease-in-out infinite;
}
.star.dim { animation-name: starTwinkle-dim; font-size: 6px; }
.star:nth-child(1){ top:-5px;    left:28px;   animation-delay:0s;   }
.star:nth-child(2){ top:-7px;    left:50%;    animation-delay:0.8s; }
.star:nth-child(3){ top:-5px;    right:28px;  animation-delay:1.6s; }
.star:nth-child(4){ bottom:-5px; left:60px;   animation-delay:0.4s; }
.star:nth-child(5){ bottom:-6px; right:60px;  animation-delay:1.2s; }

/* ── 大賞専用リボン span ── */
.ribbon {
  position: absolute; top: 50%; transform: translateY(-50%);
  width: 62px; height: 32px; z-index: 0;
  filter: drop-shadow(0 3px 5px rgba(0,0,0,0.55));
}
.ribbon::before, .ribbon::after { content: ""; position: absolute; inset: 0; }
.ribbon-l { left: -24px; clip-path: polygon(0 50%, 16px 0, 62px 0, 62px 32px, 16px 32px); }
.ribbon-r { right: -24px; clip-path: polygon(0 0, 46px 0, 62px 50%, 46px 32px, 0 32px); }


/* ============================================================
   1. 大賞 – 深紫×金
   ============================================================ */
.badge--grand {
  --glow-lo: 0 0 14px 5px rgba(130,0,80,0.32), 0 4px 20px rgba(30,0,20,0.60);
  --glow-hi: 0 0 26px 10px rgba(180,20,110,0.50), 0 6px 30px rgba(30,0,20,0.72);
  width: 300px;
}
/* 紫リボン・金の内側線 */
.badge--grand .ribbon {
  background: linear-gradient(90deg, #3a0040 0%, #6a0080 30%, #9010b0 55%, #6a0080 75%, #3a0040 100%);
}
.badge--grand .ribbon-l::before {
  background: linear-gradient(90deg, #c8a000 0%, #f0d040 48%, #c8a000 100%);
  clip-path: polygon(3px 50%, 17px 2px, 60px 2px, 60px 30px, 17px 30px);
}
.badge--grand .ribbon-l::after {
  background: linear-gradient(90deg, #3a0040 0%, #6a0080 30%, #9010b0 55%, #6a0080 75%, #3a0040 100%);
  clip-path: polygon(4px 50%, 18px 3px, 59px 3px, 59px 29px, 18px 29px);
}
.badge--grand .ribbon-r::before {
  background: linear-gradient(90deg, #c8a000 0%, #f0d040 48%, #c8a000 100%);
  clip-path: polygon(2px 2px, 45px 2px, 59px 50%, 45px 30px, 2px 30px);
}
.badge--grand .ribbon-r::after {
  background: linear-gradient(90deg, #3a0040 0%, #6a0080 30%, #9010b0 55%, #6a0080 75%, #3a0040 100%);
  clip-path: polygon(3px 3px, 44px 3px, 58px 50%, 44px 29px, 3px 29px);
}
.badge--grand .badge-body {
  width: 300px; height: 50px; border-radius: 25px;
  background: linear-gradient(135deg,
    #3a0050 0%, #8020a0 15%, #d080f0 35%, #a030c0 50%,
    #d080f0 65%, #8020a0 80%, #3a0050 100%
  );
}
.badge--grand .badge-inner {
  top: 3.5px; left: 3.5px; right: 3.5px; bottom: 3.5px;
  border-radius: 22px;
  background: linear-gradient(135deg, #100010 0%, #200028 40%, #2a0038 65%, #100010 100%);
}
.badge--grand .badge-inner::before {
  background: radial-gradient(ellipse at 50% -5%, rgba(180,60,220,0.18) 0%, transparent 60%);
}
.badge--grand .badge-inner::after {
  background: linear-gradient(105deg, transparent 30%, rgba(220,150,255,0.10) 50%, transparent 70%);
  background-size: 700px 100%; animation-duration: 3.5s;
}
.badge--grand .badge-ring {
  border: 1.5px solid rgba(200,120,255,0.55);
  box-shadow: inset 0 0 12px rgba(180,60,220,0.08);
  border-radius: 18px;
}
.badge--grand .rank-icon { font-size: 14px; color: #e080ff; text-shadow: 0 0 8px rgba(200,80,255,0.9); animation: crownFloat 3s ease-in-out infinite; margin-right: 2px; }
.badge--grand .badge-rank {
  font-size: 20px; letter-spacing: 0.16em; text-indent: 0.16em;
  background: linear-gradient(180deg, #ffffff 0%, #f0c0ff 22%, #c060e0 55%, #e8a0ff 100%);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
  filter: drop-shadow(0 0 1px rgba(0,0,0,0.7)) drop-shadow(1px 1px 0px rgba(0,0,0,0.6))
          drop-shadow(-1px -1px 0px rgba(0,0,0,0.5)) drop-shadow(1px -1px 0px rgba(0,0,0,0.5))
          drop-shadow(-1px 1px 0px rgba(0,0,0,0.5));
  position: relative; top: 1px;
}
.badge--grand .star { color: #e080ff; text-shadow: 0 0 7px rgba(200,80,255,0.9); }


/* ============================================================
   2. 金賞 – 元の琥珀ゴールド ＋ 紫タグ・薔薇
   ============================================================ */
.badge--gold {
  --glow-lo: 0 0 10px 3px rgba(200,160,20,0.30), 0 4px 16px rgba(60,30,0,0.50);
  --glow-hi: 0 0 22px 7px rgba(240,195,40,0.50), 0 5px 24px rgba(60,30,0,0.60);
}
.badge--gold.badge-wrapper::before,
.badge--gold.badge-wrapper::after {
  width: 58px; height: 29px;
  background: linear-gradient(90deg, #6a4008 0%, #b07820 35%, #e0b030 65%, #8c5c14 100%);
}
.badge--gold .badge-body {
  background: linear-gradient(135deg,
    #7a4c08 0%, #d4a020 15%, #fff0a0 38%, #e8c030 60%, #b08020 80%, #7a4c08 100%
  );
}
.badge--gold .badge-inner {
  background: linear-gradient(135deg, #221200 0%, #381c04 40%, #461e06 65%, #221200 100%);
}
.badge--gold .badge-inner::before {
  background: radial-gradient(ellipse at 50% -5%, rgba(255,200,60,0.20) 0%, transparent 60%);
}
.badge--gold .badge-inner::after {
  background: linear-gradient(105deg, transparent 28%, rgba(255,235,130,0.12) 50%, transparent 72%);
  background-size: 700px 100%;
}
.badge--gold .badge-ring { border: 1.5px solid rgba(230,180,50,0.55); }
.badge--gold .rank-icon  { font-size: 13px; color: #ffe040; text-shadow: 0 0 8px rgba(255,210,30,1); animation: crownFloat-subtle 3s ease-in-out infinite; margin-right: 2px; }
.badge--gold .badge-rank {
  font-size: 19px; position: relative; top: 1px;
  background: linear-gradient(180deg, #fffbe0 0%, #f8e050 25%, #c88800 58%, #f0c020 100%);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
  filter: drop-shadow(0 0 1px rgba(0,0,0,0.6)) drop-shadow(1px 1px 0px rgba(0,0,0,0.5))
          drop-shadow(-1px -1px 0px rgba(0,0,0,0.4)) drop-shadow(1px -1px 0px rgba(0,0,0,0.4))
          drop-shadow(-1px 1px 0px rgba(0,0,0,0.4));
}
.badge--gold .star { color: #ffe040; text-shadow: 0 0 6px rgba(255,210,30,0.9); }


/* ============================================================
   3. 銀賞 – 元のクールシルバー ＋ 紫タグ・薔薇
   ============================================================ */
.badge--silver {
  --glow-lo: 0 0 8px 2px rgba(160,170,190,0.22), 0 3px 12px rgba(0,0,0,0.45);
  --glow-hi: 0 0 16px 5px rgba(190,200,220,0.38), 0 4px 18px rgba(0,0,0,0.55);
}
.badge--silver.badge-wrapper::before,
.badge--silver.badge-wrapper::after {
  width: 54px; height: 27px;
  background: linear-gradient(90deg, #48505e 0%, #7e8898 35%, #a0aabb 65%, #58606e 100%);
}
.badge--silver .badge-body {
  background: linear-gradient(135deg,
    #5c6270 0%, #aab4c4 18%, #e8eef6 40%, #b8c0d0 62%, #6c7280 82%, #5c6270 100%
  );
}
.badge--silver .badge-inner {
  background: linear-gradient(135deg, #181c24 0%, #222838 40%, #2a3048 65%, #181c24 100%);
}
.badge--silver .badge-inner::before {
  background: radial-gradient(ellipse at 50% -5%, rgba(180,200,230,0.16) 0%, transparent 60%);
}
.badge--silver .badge-inner::after {
  background: linear-gradient(105deg, transparent 35%, rgba(220,230,248,0.09) 50%, transparent 65%);
  background-size: 700px 100%; animation-duration: 6.5s;
}
.badge--silver .badge-ring { border: 1px solid rgba(170,185,210,0.45); }
.badge--silver .rank-icon { font-size: 13px; color: #d8e4f4; text-shadow: 0 0 6px rgba(200,218,240,0.75); animation: crownFloat-subtle 3s ease-in-out infinite; margin-right: 2px; }
.badge--silver .badge-rank {
  font-size: 19px;
  position: relative; top: 1px;
  background: linear-gradient(180deg, #ffffff 0%, #e8f0ff 28%, #a0b0d0 58%, #dde6f4 100%);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
  filter: drop-shadow(0 0 1px rgba(0,0,0,0.6)) drop-shadow(1px 1px 0px rgba(0,0,0,0.5))
          drop-shadow(-1px -1px 0px rgba(0,0,0,0.4)) drop-shadow(1px -1px 0px rgba(0,0,0,0.4))
          drop-shadow(-1px 1px 0px rgba(0,0,0,0.4));
}
.badge--silver .star { color: #c8d8f0; text-shadow: 0 0 5px rgba(195,215,240,0.7); }
.badge--silver .star:nth-child(4),
.badge--silver .star:nth-child(5) { display: none; }
.badge--silver .star { animation-name: starTwinkle-dim; }


/* ============================================================
   4. 銅賞 – 元の赤銅色 ＋ 紫タグ・薔薇
   ============================================================ */
.badge--bronze {
  --glow-lo: 0 0 6px 2px rgba(160,70,30,0.22), 0 3px 10px rgba(50,10,0,0.50);
  --glow-hi: 0 0 12px 4px rgba(200,90,40,0.35), 0 4px 14px rgba(50,10,0,0.60);
}
.badge--bronze.badge-wrapper::before,
.badge--bronze.badge-wrapper::after {
  width: 50px; height: 25px;
  background: linear-gradient(90deg, #4e1c08 0%, #8a3414 35%, #b05030 65%, #602010 100%);
}
.badge--bronze .badge-body {
  background: linear-gradient(135deg,
    #5a1e08 0%, #a04020 15%, #e08050 38%, #b04828 60%, #6a2410 80%, #5a1e08 100%
  );
}
.badge--bronze .badge-inner {
  background: linear-gradient(135deg, #1c0a04 0%, #2c1008 40%, #381408 65%, #1c0a04 100%);
}
.badge--bronze .badge-inner::before {
  background: radial-gradient(ellipse at 50% -5%, rgba(200,90,40,0.16) 0%, transparent 60%);
}
.badge--bronze .badge-inner::after {
  background: linear-gradient(105deg, transparent 38%, rgba(220,120,70,0.08) 50%, transparent 62%);
  background-size: 700px 100%; animation-duration: 8s;
}
.badge--bronze .badge-ring { border: 1px solid rgba(180,80,40,0.42); }
.badge--bronze .rank-icon { font-size: 13px; color: #e09070; text-shadow: 0 0 5px rgba(210,100,50,0.65); animation: crownFloat-subtle 3s ease-in-out infinite; margin-right: 2px; }
.badge--bronze .badge-rank {
  font-size: 19px;
  position: relative; top: 1px;
  background: linear-gradient(180deg, #fff0e0 0%, #f0a868 28%, #c05818 60%, #f09050 100%);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
  filter: drop-shadow(0 0 1px rgba(0,0,0,0.6)) drop-shadow(1px 1px 0px rgba(0,0,0,0.5))
          drop-shadow(-1px -1px 0px rgba(0,0,0,0.4)) drop-shadow(1px -1px 0px rgba(0,0,0,0.4))
          drop-shadow(-1px 1px 0px rgba(0,0,0,0.4));
}
.badge--bronze .star { color: #e09060; text-shadow: 0 0 4px rgba(210,110,50,0.65); }
.badge--bronze .star:nth-child(3),
.badge--bronze .star:nth-child(4),
.badge--bronze .star:nth-child(5) { display: none; }
.badge--bronze .star { animation-name: starTwinkle-dim; }


/* ============================================================
   5. 入賞 – ピンク系 ＋ リボンなし
   ============================================================ */
.badge--entry {
  --glow-lo: 0 0 0 0 transparent;
  --glow-hi: 0 0 0 0 transparent;
}
.badge--entry .badge-body {
  animation: none;
  box-shadow: 0 3px 10px rgba(60,0,30,0.50);
  width: 270px;
  background: linear-gradient(135deg,
    #7a1840 0%, #c04070 18%, #f080a8 40%, #c04070 62%, #8a2050 82%, #7a1840 100%
  );
}
.badge--entry .badge-inner {
  background: linear-gradient(135deg, #1e0410 0%, #300818 40%, #3c0e20 65%, #1e0410 100%);
}
.badge--entry .badge-inner::before {
  background: radial-gradient(ellipse at 50% -5%, rgba(220,80,130,0.18) 0%, transparent 60%);
}
.badge--entry .badge-inner::after { display: none; }
.badge--entry .badge-ring { border: 1px solid rgba(220,100,150,0.45); }
.badge--entry .rank-icon { font-size: 11px; color: #ff90c8; text-shadow: 0 0 5px rgba(210,100,50,0.65); animation: crownFloat-subtle 3s ease-in-out infinite; margin-right: 2px; }
.badge--entry .badge-rank {
  font-family: 'Noto Serif JP', serif;
  font-size: 16px;
  color: #ffcce0;
  text-shadow: 0 1px 2px rgba(0,0,0,0.75), 0 -1px 2px rgba(0,0,0,0.5),
               1px 0 2px rgba(0,0,0,0.5), -1px 0 2px rgba(0,0,0,0.5);
  margin: 0 2px; position: relative; top: 0px;
}
.badge--entry .star { display: none; }