@charset "UTF-8";

/* ==========================================================================
   鳥貴族 40TH × au PAY  食べ飲みFESTIVAL2026 — LP スタイルシート

   構成
     1. Tailwind 基盤レイヤー（theme / base）
     2. 使用中のユーティリティ・共通スタイル
     3. リセット & LP 本体スタイル（全10セクション共通）
     4. テーマ変数

   整理メモ
     - Webフォントは index.html の <head> の <link> で読み込む。
       旧版は @font-face 877件が /_next/static/media/*.woff2 を指していたが
       そのファイル群は同梱されておらず全て読み込み失敗していたため削除した。
       （Google Fonts の @import も @font-face より後ろにあり CSS 仕様上
         無視されていた。）
     - セクション3は旧版では HTML 内に10回・この CSS 内に10回、
       合計20回重複していた。全セクションが共有する .imported-html-block
       を軸に1つへ統合。
     - LP Studio の編集画面専用スタイル（[data-field-key] のホバー枠、
       lp-studio-flash、body の背景透過、.aurbit-itn-editing、
       .part-hl / .ins-pill などの編集オーバーレイ）は削除した。
     - LP Studio のコンポーネントライブラリ（rt-p-* / part-* / anim-* / bc-*）
       と未使用の Tailwind ユーティリティを削除した。この LP には
       JavaScript が無く動的なクラス付与が起こらないため、HTML に存在しない
       クラス・要素・属性にしか一致しないルールは到達不能と判定できる。
       セレクタ2,785件のうち2,746件が到達不能で、残る39件を保持している。
       実際に使われているユーティリティは .w-full のみ。
       参照ゼロになった @keyframes 142件・@property 60件超も削除した。
     - @layer properties（全要素に --tw-* を約70個セットするブロック）は
       var(--tw-*) の参照が0件のため全削除。@layer theme は177変数のうち
       実際に参照される4つだけに縮小した。
     - 上記の削減により、このファイルを LP Studio へ再取り込みすること
       （ラウンドトリップ）は想定できなくなっている点に注意。

   画像について
     - assets/icon-arrow.svg 〜 image-59.png（計60件）を参照している。
       必要な画像の一覧と用途は assets-spec.md を参照。
   ========================================================================== */

/* ==========================================================================
   1. Tailwind 基盤レイヤー（theme / base）
   ========================================================================== */
/* Tailwind のテーマ変数のうち、このLPで実際に参照される4つだけを残している。
   旧版は177変数を定義していたが、参照は下記2つの --default-* 経由のみ
   （@layer base の `:host, html` と `code, kbd, pre, samp` のフォント指定）。
   併せて @layer properties（全要素に --tw-* を約70個セットするブロック）も
   var(--tw-*) の参照が0件になったため削除した。 */
@layer theme {
  :host, :root {
    --font-sans: ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
    --font-mono: ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
    --default-font-family: var(--font-sans);
    --default-mono-font-family: var(--font-mono);
  }
}
@layer base {
  *, ::backdrop, ::after, ::before { box-sizing: border-box; border: 0px solid; margin: 0px; padding: 0px; }
  ::file-selector-button { box-sizing: border-box; border: 0px solid; margin: 0px; padding: 0px; }
  :host, html { text-size-adjust: 100%; tab-size: 4; line-height: 1.5; font-family: var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"); font-feature-settings: var(--default-font-feature-settings,normal); font-variation-settings: var(--default-font-variation-settings,normal); -webkit-tap-highlight-color: transparent; }
  hr { height: 0px; color: inherit; border-top-width: 1px; }
  abbr:where([title]) { text-decoration: underline dotted; }
  h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; }
  a { color: inherit; text-decoration: inherit; }
  b, strong { font-weight: bolder; }
  code, kbd, pre, samp { font-family: var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace); font-feature-settings: var(--default-mono-font-feature-settings,normal); font-variation-settings: var(--default-mono-font-variation-settings,normal); font-size: 1em; }
  small { font-size: 80%; }
  sub, sup { vertical-align: baseline; font-size: 75%; line-height: 0; position: relative; }
  sub { bottom: -0.25em; }
  sup { top: -0.5em; }
  table { text-indent: 0px; border-color: inherit; border-collapse: collapse; }
  progress { vertical-align: baseline; }
  summary { display: list-item; }
  menu, ol, ul { list-style: none; }
  audio, canvas, embed, iframe, img, object, svg, video { vertical-align: middle; display: block; }
  img, video { max-width: 100%; height: auto; }
  button, input, optgroup, select, textarea { font: inherit; letter-spacing: inherit; color: inherit; opacity: 1; background-color: rgba(0, 0, 0, 0); border-radius: 0px; }
  ::file-selector-button { font: inherit; letter-spacing: inherit; color: inherit; opacity: 1; background-color: rgba(0, 0, 0, 0); border-radius: 0px; }
  :where(select:is([multiple], [size])) optgroup { font-weight: bolder; }
  :where(select:is([multiple], [size])) optgroup option { padding-inline-start: 20px; }
  ::file-selector-button { margin-inline-end: 4px; }
  ::placeholder { opacity: 1; }
  @supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px) {
  ::placeholder { color: currentcolor; }
  @supports (color:color-mix(in lab,red,red)) {
  ::placeholder { color: color-mix(currentcolor, transparent); }
}
}
  textarea { resize: vertical; }
  ::-webkit-search-decoration { appearance: none; }
  ::-webkit-date-and-time-value { min-height: 1lh; text-align: inherit; }
  ::-webkit-datetime-edit { display: inline-flex; }
  ::-webkit-datetime-edit-fields-wrapper { padding: 0px; }
  ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field { padding-block: 0px; }
  ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-month-field { padding-block: 0px; }
  ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field { padding-block: 0px; }
  ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-second-field { padding-block: 0px; }
  ::-webkit-datetime-edit-meridiem-field { padding-block: 0px; }
  ::-webkit-calendar-picker-indicator { line-height: 1; }
  button, input:where([type="button"], [type="reset"], [type="submit"]) { appearance: button; }
  ::file-selector-button { appearance: button; }
  ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; }
  [hidden]:where(:not([hidden="until-found"])) { display: none !important; }
}
@layer components;

/* ==========================================================================
   2. 使用中のユーティリティ・共通スタイル
   ========================================================================== */

@layer utilities {
  .w-full { width: 100%; }
}
:root { --ins-pill-line-op: .28; --ins-pill-btn-op: .42; }
.lp-gap-standard { --section-pad-y: 32px; }
@media (max-width: 1024px) {
  .lp-gap-standard { --section-pad-y: 28px; }
}
@media (max-width: 767px) {
  .lp-gap-standard { --section-pad-y: 24px; }
}
:root { --ease-spring: linear(0,.0377,.1279,.2438,.3674,.4871,.5961,.6908,.7703,.8349,.8859,.9251,.9542,.9752,.9898,.9994,1.0054,1.0086,1.01,1.0101,1.0095,1.0085,1.0073,1.006,1.0048,1.0038,1.0028,1.0021,1); --ease-spring-snappy: linear(0,.0629,.2005,.3603,.5132,.6454,.7522,.8341,.8941,.9364,.9649,.9833,.9945,1.0007,1.0038,1.0049,1.0049,1.0044,1.0036,1.0028,1.0021,1); --ease-spring-flat: linear(0,.1175,.3275,.5249,.6796,.7905,.8661,.9158,.9478,.968,.9805,.9882,.9929,.9958,.9975,1); --dur-instant: 80ms; --dur-fast: .12s; --ease-spring-dur: .731s; --ease-spring-snappy-dur: .465s; --ease-spring-flat-dur: .35s; --dur-exit: .2s; --ease-exit: cubic-bezier(.4,0,1,1); --color-primary: #f60; --color-primary-rgb: 255 102 0; --color-primary-light: #ff8c00; --color-primary-dark: #e55a00; --color-background: #fff8f0; --color-background-deep: #ffe8cc; --color-surface: #fff; --color-text: #1a1a1a; --color-text-muted: #888; --color-ink: #3e2a15; --shadow-pop-offset: 0 4px 0; --font-num: var(--font-anton,"Anton"),"Noto Sans JP",sans-serif; --font-pop: var(--font-mplus,"M PLUS Rounded 1c"),"Noto Sans JP",sans-serif; --c-header: #0f1117; --c-header-2: #1c2333; --c-header-3: #2d3748; --c-primary: #f97316; --c-primary-hover: #ea6c10; --c-primary-tint: #fff3e8; --c-primary-mid: #fed7aa; --c-bg: #f8f9fa; --c-surface: #fff; --c-surface-2: #f8f9fa; --c-surface-3: #f3f4f6; --c-border: #e9ecef; --c-border-light: #f1f3f5; --c-text: #212529; --c-text-2: #343a40; --c-text-3: #6c757d; --c-text-4: #adb5bd; --c-success: #2e7d32; --c-success-bg: #e8f5e9; --c-warning: #c77700; --c-warning-bg: #fff3cd; --c-danger: #c62828; --c-danger-bg: #ffebee; --c-info: #1565c0; --c-info-bg: #e3f2fd; --c-ai: #5e35b1; --c-ai-bg: #ede7f6; --shadow-sm: 0 1px 3px #0000000f,0 1px 2px #0000000a; --shadow-md: 0 4px 12px #00000014,0 2px 4px #0000000a; --shadow-lg: 0 8px 32px #0000001a,0 2px 8px #0000000a; --r-xs: 4px; --r-sm: 6px; --r-md: 8px; --r-lg: 12px; --r-xl: 16px; --badge-band-bg: #f60; --badge-band-color: #fff; --section-title-bg: #f60; --section-title-bg-color-1: #f60; --section-title-border-width: 0px; --section-title-border-color: transparent; --section-title-shadow: none; --section-title-text-color: #fff; --section-title-mb: 0px; --section-title-display: inline-block; --section-title-width: auto; --section-title-container-align: center; --c-st-saving: #888; --c-st-dirty: #f59e0b; --c-st-saved: #10b981; --c-st-error: #ef4444; --c-st-published: #22c55e; --c-toast-ok: #10b981; --c-toast-err: #ef4444; --c-canvas: #fff; --c-note-bg: #fff7f0; --c-note-border: #ffe0cc; --c-note-text: #9a5b2d; --c-bezel-ring: transparent; }
* { box-sizing: border-box; text-wrap: pretty; }
body { font-family: var(--font-noto,"Noto Sans JP"),"Hiragino Sans","Yu Gothic",sans-serif; background: var(--c-bg); color: var(--c-text); -webkit-font-smoothing: antialiased; }
a, button, h1, h2, h3, h4, h5, h6, label, li, p, span, td, th { word-break: auto-phrase; }
::-webkit-scrollbar-track { background: 0px 0px; }
::-webkit-scrollbar-thumb:hover { background: var(--c-text-4); }
.lp-page, .lp-preview { --lp-press-scale: .97; --lp-press-dur: 90ms; --lp-hover-lift-y: -2px; --lp-hover-dur: .14s; --lp-ease: cubic-bezier(.22,1,.36,1); }
.lp-page [role="button"]:not([aria-disabled="true"]), .lp-page a[href], .lp-page button:not(:disabled), .lp-preview [role="button"]:not([aria-disabled="true"]), .lp-preview a[href], .lp-preview button:not(:disabled) { transition: scale var(--lp-press-dur) var(--lp-ease); }
.lp-page [role="button"]:not([aria-disabled="true"]):active, .lp-page a[href]:active, .lp-page button:not(:disabled):active, .lp-preview [role="button"]:not([aria-disabled="true"]):active, .lp-preview a[href]:active, .lp-preview button:not(:disabled):active { scale: var(--lp-press-scale); }
.lp-page [role="button"]:focus-visible, .lp-page a[href]:focus-visible, .lp-page button:not(:disabled):focus-visible, .lp-preview [role="button"]:focus-visible, .lp-preview a[href]:focus-visible, .lp-preview button:not(:disabled):focus-visible { outline: 2px solid var(--color-primary,#f60); outline-offset: 2px; }
@media (hover: hover) and (pointer: fine) {
  .lp-page [role="button"]:not([aria-disabled="true"]), .lp-page a[href], .lp-page button:not(:disabled), .lp-preview [role="button"]:not([aria-disabled="true"]), .lp-preview a[href], .lp-preview button:not(:disabled) { transition: scale var(--lp-press-dur) var(--lp-ease),translate var(--lp-hover-dur) var(--lp-ease); }
  .lp-page [role="button"]:not([aria-disabled="true"]):hover, .lp-page a[href]:hover, .lp-page button:not(:disabled):hover, .lp-preview [role="button"]:not([aria-disabled="true"]):hover, .lp-preview a[href]:hover, .lp-preview button:not(:disabled):hover { translate: 0 var(--lp-hover-lift-y); }
  .lp-page [role="button"]:not([aria-disabled="true"]):active, .lp-page a[href]:active, .lp-page button:not(:disabled):active, .lp-preview [role="button"]:not([aria-disabled="true"]):active, .lp-preview a[href]:active, .lp-preview button:not(:disabled):active { translate: 0px; }
}
@media (prefers-reduced-motion: reduce) {
  .lp-page, .lp-preview { --lp-press-scale: 1; --lp-press-dur: .01ms; --lp-hover-lift-y: 0px; --lp-hover-dur: .01ms; }
}
:root { --color-primary: #f97316; --color-primary-light: #fff3e8; --color-primary-dark: #ea6c10; --color-primary-rgb: 249 115 22; }
* { scrollbar-width: thin; scrollbar-color: rgb(229, 231, 235) transparent; }
::-webkit-scrollbar { width: 4px; height: 4px; }
::-webkit-scrollbar-thumb { background: rgb(229, 231, 235); border-radius: 2px; }
:root { --dur-aux: .01ms; }
@media (prefers-reduced-motion: reduce) {
  :root, :root.motion-level-high, :root.motion-level-low, :root.motion-level-mid, :root.motion-level-off { --dur-instant: .01ms; --dur-fast: .01ms; --ease-spring-dur: .01ms; --ease-spring-snappy-dur: .01ms; --ease-spring-flat-dur: .01ms; --dur-exit: .01ms; --dur-aux: .01ms; --press-scale: 1; --press-dur: .01ms; --shift-dur: .01ms; --page-dur: .01ms; }
}
:root { --press-scale: 1; --press-dur: .01ms; --press-ease: linear; --shift-dur: .01ms; --shift-ease: linear; --page-dur: .01ms; }
:root { --color-primary: #F97316; --color-primary-light: #FFF3E8; --color-primary-dark: #EA6C10; --color-primary-ring: #FED7AA; }
html, body { margin: 0px; padding: 0px; box-sizing: border-box; }
* { box-sizing: border-box; }
html { scrollbar-width: thin; overflow-y: scroll; }

/* ==========================================================================
   3. リセット & LP 本体スタイル（全10セクション共通）
      旧版: HTML内 10回 + CSS内 10回 = 20重複 → 1つに統合
   ========================================================================== */

.imported-html-block {
  line-height: 1.15;
  -webkit-text-size-adjust: 100%;
}

.imported-html-block {
  margin: 0;
}

main {
  display: block;
}

h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

hr {
  -webkit-box-sizing: content-box;
          box-sizing: content-box;
  height: 0;
  overflow: visible;
}

pre {
  font-family: monospace, monospace;
  font-size: 1em;
}

a {
  background-color: transparent;
}

abbr[title] {
  border-bottom: none;
  text-decoration: underline;
  -webkit-text-decoration: underline dotted;
          text-decoration: underline dotted;
}

b,
strong {
  font-weight: bolder;
}

code,
kbd,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}

small {
  font-size: 80%;
}

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

img {
  border-style: none;
}

button,
input,
optgroup,
select,
textarea {
  font-family: inherit;
  font-size: 100%;
  line-height: 1.15;
  margin: 0;
}

button,
input {
  overflow: visible;
}

button,
select {
  text-transform: none;
}

button,
[type=button],
[type=reset],
[type=submit] {
  -webkit-appearance: button;
}

button::-moz-focus-inner,
[type=button]::-moz-focus-inner,
[type=reset]::-moz-focus-inner,
[type=submit]::-moz-focus-inner {
  border-style: none;
  padding: 0;
}

button:-moz-focusring,
[type=button]:-moz-focusring,
[type=reset]:-moz-focusring,
[type=submit]:-moz-focusring {
  outline: 1px dotted ButtonText;
}

fieldset {
  padding: 0.35em 0.75em 0.625em;
}

legend {
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  color: inherit;
  display: table;
  max-width: 100%;
  padding: 0;
  white-space: normal;
}

progress {
  vertical-align: baseline;
}

textarea {
  overflow: auto;
}

[type=checkbox],
[type=radio] {
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  padding: 0;
}

[type=number]::-webkit-inner-spin-button,
[type=number]::-webkit-outer-spin-button {
  height: auto;
}

[type=search] {
  -webkit-appearance: textfield;
  outline-offset: -2px;
}

[type=search]::-webkit-search-decoration {
  -webkit-appearance: none;
}

::-webkit-file-upload-button {
  -webkit-appearance: button;
  font: inherit;
}

details {
  display: block;
}

summary {
  display: list-item;
}

template {
  display: none;
}

[hidden] {
  display: none;
}

._disp-ib {
  display: inline-block !important;
}

@media (max-width: 1117px) {
  ._view-cw-high {
    display: none !important;
  }
}
@media (min-width: 1118px) {
  ._view-cw-low {
    display: none !important;
  }
}
@media (max-width: 1279px) {
  ._view-xl-high {
    display: none !important;
  }
}
@media (min-width: 1280px) {
  ._view-xl-low {
    display: none !important;
  }
}
@media (max-width: 1023px) {
  ._view-lg-high {
    display: none !important;
  }
}
@media (min-width: 1024px) {
  ._view-lg-low {
    display: none !important;
  }
}
@media (max-width: 767px) {
  ._view-md-high {
    display: none !important;
  }
}
@media (min-width: 768px) {
  ._view-md-low {
    display: none !important;
  }
}
@media (max-width: 479px) {
  ._view-sm-high {
    display: none !important;
  }
}
@media (min-width: 480px) {
  ._view-sm-low {
    display: none !important;
  }
}
._clearfix {
  zoom: 1;
}
._clearfix:after {
  content: "";
  display: block;
  clear: both;
  overflow: auto;
}

._center {
  text-align: center !important;
}

._left {
  text-align: left !important;
}

._right {
  text-align: right !important;
}

._float-l {
  float: left !important;
}

._float-r {
  float: right !important;
}

._clear {
  clear: both !important;
}

._hidden {
  display: none !important;
}

._disp-ib {
  display: inline-block !important;
}

._margin0 {
  margin: 0 !important;
}

._padding0 {
  padding: 0 !important;
}

._border0 {
  border: none !important;
}

._fixed {
  position: absolute !important;
}

._absolute {
  position: absolute !important;
}

._static {
  position: static !important;
}

._xsmall {
  font-size: 75% !important;
}

._small {
  font-size: 88% !important;
}

._large {
  font-size: 113% !important;
}

._xlarge {
  font-size: 133% !important;
}

._nowrap {
  white-space: nowrap !important;
}

._nobg {
  background: none !important;
}

._full {
  width: 100% !important;
}

.imported-html-block {
  font-size: min(16px, 1.5640273705vw);
}
@media (max-width: 767px) {
  .imported-html-block {
    font-size: 4.2666666667vw;
  }
}

.imported-html-block *,
*::before,
*::after {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

.imported-html-block,
h1,
h2,
h3,
h4,
h5,
h6,
ul,
ol,
dl,
li,
dt,
dd,
p,
div,
span,
img,
a,
table,
tr,
th,
td,
small,
button,
time,
figure {
  border: 0;
  margin: 0;
  padding: 0;
  vertical-align: baseline;
}

.imported-html-block {
  min-width: 320px;
  padding: 0;
  color: black;
  font-family: "Noto Sans JP", "Noto Sans CJK JP", "Hiragino Kaku Gothic ProN", "ヒラギノ角ゴ ProN W3", "ヒラギノ角ゴ ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ Pro W3", "ヒラギノ角ゴ Pro", "Hiragino Sans", "游ゴシック体", "YuGothic", "游ゴシック", "Yu Gothic", sans-serif;
  font-size: 1rem;
  line-height: 1.5;
}

img {
  max-width: 100%;
  height: auto;
  vertical-align: bottom;
}

a {
  color: inherit;
  cursor: pointer;
  text-decoration: none;
  -webkit-transition: opacity 0.15s ease-out;
  transition: opacity 0.15s ease-out;
}
a:hover {
  opacity: 0.7;
}

em {
  font-style: normal;
}

ol,
ul {
  list-style: none;
}

li,
dd {
  list-style-type: none;
}

header,
footer,
nav,
section,
article,
aside,
figure,
figcaption {
  display: block;
}

a.-telink,
a.js-telink {
  cursor: default;
  opacity: 1 !important;
}

body._ios a:hover {
  opacity: 1;
}

.l-page-container {
  position: relative;
}

.l-page-contents {
  max-width: 1020px;
  margin-left: auto;
  margin-right: auto;
  position: relative;
  padding: 0 2.5rem;
}
@media (max-width: 767px) {
  .l-page-contents {
    padding: 0 1.25rem;
  }
}

.l-page-contents-point {
  max-width: 1190px;
  margin-left: auto;
  margin-right: auto;
  position: relative;
  padding: 0 2.5rem;
}
@media (max-width: 767px) {
  .l-page-contents-point {
    padding: 0 1.25rem;
  }
}


.footer-menu {
  text-align: center;
  padding: 1.875rem 0;
  background: rgba(0, 0, 0, 0.2);
}
.footer-menu__links {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-column-gap: 4.375rem;
     -moz-column-gap: 4.375rem;
          column-gap: 4.375rem;
}
.footer-menu__link {
  color: #000b36;
  display: inline-block;
  padding-right: 0.875rem;
  position: relative;
  font-size: 0.9375rem;
}
.footer-menu__link::before {
  position: absolute;
  display: inline-block;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  width: 0.5625rem;
  height: 1rem;
  background: currentColor;
  content: "";
  -webkit-mask-image: url("assets/icon-arrow.svg");
          mask-image: url("assets/icon-arrow.svg");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: 50%;
          mask-position: 50%;
  -webkit-mask-size: contain;
          mask-size: contain;
  width: 0.375rem;
  height: 0.6875rem;
  right: 0;
  top: 50%;
  -webkit-transform: translateY(-50%);
      -ms-transform: translateY(-50%);
          transform: translateY(-50%);
}
.footer-menu__copyright {
  font-size: 0.75rem;
  margin-top: 1.875rem;
  font-weight: 400;
  display: block;
}
@media (max-width: 767px) {
  .footer-menu__links {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    row-gap: 0.875rem;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
  .footer-menu__link {
    font-size: 0.8125rem;
  }
  .footer-menu__copyright {
    font-size: 0.6875rem;
  }
}

.footer-app {
  background: #FDF1BD;
  padding: 2.375rem 0;
}
.footer-app__title {
  text-align: center;
  line-height: 1.58;
  font-size: 1.5rem;
  font-weight: bold;
}
.footer-app__title > span {
  display: inline-block;
  text-align: center;
  color: #333;
  padding: 0 2.5rem;
  position: relative;
}
.footer-app__title > span::before, .footer-app__title > span::after {
  content: "";
  position: absolute;
  width: 1.375rem;
  height: 2.125rem;
  bottom: 0.25rem;
}
.footer-app__title > span::before {
  left: 0;
  background: url("assets/deco-app.svg") center bottom no-repeat;
  background-size: contain;
  -webkit-transform: scale(-1, 1);
      -ms-transform: scale(-1, 1);
          transform: scale(-1, 1);
}
.footer-app__title > span::after {
  right: 0;
  background: url("assets/deco-app.svg") center bottom no-repeat;
  background-size: contain;
}
.footer-app__links {
  margin-top: 1.5rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  /* 幅を揃えた結果、2枚の高さが変わるので上下中央で合わせる */
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-column-gap: 2.5rem;
     -moz-column-gap: 2.5rem;
          column-gap: 2.5rem;
}
/* キャンペーン内のDL枠と同じく、高さを揃える側に寄せている。 */
.footer-app__link {
  display: block;
}
.footer-app__link > img {
  display: block;
  height: 5.1875rem;
  width: auto;
}
@media (max-width: 767px) {
  .footer-app__title {
    font-size: 1.0625rem;
    margin-left: -0.375rem;
    margin-right: -0.375rem;
  }
  .footer-app__title > span {
    padding: 0 1.375rem;
  }
  .footer-app__title > span::before, .footer-app__title > span::after {
    width: 0.9375rem;
    height: 1.5rem;
  }
  .footer-app__links {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    row-gap: 1.5rem;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}

.deco-img {
  position: absolute;
  content: "";
  z-index: 2;
}
/* 旧素材は斜めの串を描いたイラストで、1枚ごとに縦横比が違った。
   新素材（yakitori_01〜05）は縦向きの写真で比率が揃っているので、
   高さだけ決めて幅は比率に任せる。傾きは .-right / .-left で付ける。 */
.deco-img img {
  height: 12.5rem;
  width: auto;
}
/* 串は素材では真っ直ぐ縦を向いている。そのまま置くと置物に見えるので、
   外側へ倒して「見出しの角から覗いている」形にする。左右で向きは対称。
   傾きはこの箱に掛ける。中の img には ふわふわ（mo-float）が別に掛かるので、
   同じ要素に transform を二重に書くと片方が消える。 */
.deco-img.-right {
  top: -2.5rem;
  right: 2rem;
  transform: rotate(-25deg);
}
.deco-img.-left {
  top: -2.75rem;
  left: 2rem;
  transform: rotate(25deg);
}
/* 同じ角度だと判で押したように見えるので、少しずつ散らす */
.deco-img.-deco03 { transform: rotate(-32deg); }
.deco-img.-deco06 { transform: rotate(-17deg); }
.deco-img.-deco07 { transform: rotate(18deg); }

/* 飲み物（drink_01〜03）は串と扱いが違う。
   1. 傾けない。グラスを倒すと中身がこぼれて見えるので、-right / -left の
      回転をここで打ち消す。動きは mo-float のごく浅い揺れだけに任せる。
      （この規則は上の角度指定より後に置くこと。詳細度が同じなので順番で決まる）
   2. 串より低くする。グラスは横に太いので、同じ高さにすると赤帯を覆ってしまう。 */
.deco-img.-drink {
  transform: none;
}
.deco-img.-drink img {
  height: 9.375rem;
}
.deco-img.-pt10 {
  padding-top: 0.625rem;
}
.deco-img.-pt15 {
  padding-top: 0.9375rem;
}
.deco-img.-deco01 {
  top: -1.875rem;
}

@media (max-width: 767px) {
  /* 寸法は .deco-img img の height 一本で決める。
     ここで持つのは位置だけ。端から少しはみ出させて覗かせている
     （はみ出しは .campaign の overflow: hidden で切られる）。 */
  /* 当選人数を必ず次の行へ送る（440px未満のときだけ）。

     放っておくと「4〜10位」は1行に収まり「11〜100位」から折り返す、
     という不揃いが起きる（実機で指摘を受けた）。実測すると、
     いちばん長い「301〜1,000位 410P（1品分）700名様」が1行に収まるのは
     440px から。440px 以上では4行とも収まるので手を出さない。
     440px 未満では、収まる行と収まらない行が混ざるくらいなら
     全部折り返したほうが目が揃う。
     （収まるまで文字を小さくする手もあるが、「41,000P」という
     主役の数字まで小さくなるので採らない。）

     市販のスマホは widest でも430px なので、実機はすべてこちら側に入る。

     li::after は flex コンテナの子なので、それ自体がフレックス
     アイテムになる。幅いっぱいの空アイテムを挟んで改行を作り、
     人数は order で必ずその後ろへ送る。 */
  @media (max-width: 439px) {
    .campaign__point-high li::after,
    .campaign__point-low li::after {
      content: "";
      flex-basis: 100%;
      height: 0;
    }
    .campaign__point-high .count,
    .campaign__point-low .count {
      order: 1;
      margin-left: 0;
      margin-top: 0.125rem;
    }
  }

  .deco-img img {
    height: 6.25rem;
  }
  .deco-img.-drink img {
    height: 5rem;
  }
  .deco-img.-deco01 {
    top: -1.5rem;
    right: -0.625rem;
  }
  /* 飲み物を置いた2か所。串より太いので端に寄せすぎない */
  .deco-img.-deco04 {
    top: -1.75rem;
    left: -0.5rem;
  }
  .deco-img.-deco05 {
    top: -1.75rem;
    left: -0.5rem;
  }
  .deco-img.-deco02 {
    top: -2.25rem;
    left: -1rem;
  }
  .deco-img.-deco03 {
    top: -2.25rem;
    right: -1rem;
  }
  .deco-img.-deco06 {
    top: -2rem;
    right: -0.625rem;
  }
  /* 後半（対象店舗・よくある質問）に足したぶん。前半と同じ寸法に揃える。 */
  .deco-img.-deco07 {
    top: -2.25rem;
    left: -1rem;
  }
  .deco-img.-deco08 {
    top: -2.25rem;
    right: -1rem;
  }
}

.c-list > li {
  position: relative;
  padding-left: 0.875rem;
  line-height: 1.7;
}
.c-list > li > em {
  color: #BF1D20;
  font-weight: bold;
}
.c-list > li + li {
  margin-top: 0.5rem;
}
.c-list > li::before {
  content: "";
  position: absolute;
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 0.5rem;
  background: #BF1D20;
  left: 0;
  top: calc(0.85em - 0.25rem);
}
@media (max-width: 767px) {
  .c-list > li {
    font-size: 0.9375rem;
  }
}
.c-list.-sm > li {
  font-size: 0.9375rem;
}
.c-list.-sm > li + li {
  margin-top: 0.25rem;
}
@media (max-width: 767px) {
  .c-list.-sm > li {
    font-size: 0.875rem;
  }
}
.c-list.-au > li::before {
  background: #FA5902;
}
.c-list.-attention > li::before {
  background: #BF1D20;
}

.c-sublist > li {
  padding-left: 0.875rem;
  position: relative;
  margin-top: 0.5rem;
  font-size: 0.9375rem;
  line-height: 1.7;
}
@media (max-width: 767px) {
  .c-sublist > li {
    font-size: 0.875rem;
  }
}
.c-sublist > li::before {
  position: absolute;
  content: "";
  width: 0.5rem;
  height: 0.125rem;
  border-radius: 3.125rem;
  background: #BF1D20;
  left: 0;
  top: calc(0.85em - 0.0625rem);
}

.c-notes-list {
  padding-left: 1em;
  text-indent: -1em;
}

.c-button {
  display: inline-block;
  background: #FA5902;
  color: #fff;
  width: 23.75rem;
  max-width: 100%;
  font-size: 1.25rem;
  font-weight: bold;
  border-radius: 6.25rem;
  position: relative;
  padding: 1rem 2.25rem;
  text-align: center;
}
.c-button::before {
  position: absolute;
  display: inline-block;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  width: 0.5625rem;
  height: 1rem;
  background: currentColor;
  content: "";
  -webkit-mask-image: url("assets/icon-arrow.svg");
          mask-image: url("assets/icon-arrow.svg");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: 50%;
          mask-position: 50%;
  -webkit-mask-size: contain;
          mask-size: contain;
  top: 50%;
  -webkit-transform: translateY(-50%);
      -ms-transform: translateY(-50%);
          transform: translateY(-50%);
  right: 1.625rem;
}
.c-button.-black {
  background: black;
}
@media (max-width: 767px) {
  .c-button {
    font-size: 1rem;
    width: 20rem;
  }
}

.c-button-b {
  display: inline-block;
  background: #0065B2;
  color: #fff;
  max-width: 100%;
  font-size: 1.25rem;
  font-weight: bold;
  border-radius: 6.25rem;
  position: relative;
  padding: 0.9375rem 3.4375rem 0.9375rem 2.8125rem;
  line-height: 1.5;
  text-align: center;
}
.c-button-b::before {
  position: absolute;
  display: inline-block;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  width: 0.5625rem;
  height: 1rem;
  background: currentColor;
  content: "";
  -webkit-mask-image: url("assets/icon-arrow.svg");
          mask-image: url("assets/icon-arrow.svg");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: 50%;
          mask-position: 50%;
  -webkit-mask-size: contain;
          mask-size: contain;
  width: 0.5rem;
  height: 0.9375rem;
  top: 50%;
  -webkit-transform: translateY(-50%) rotate(90deg);
      -ms-transform: translateY(-50%) rotate(90deg);
          transform: translateY(-50%) rotate(90deg);
  right: 1.625rem;
}
@media (max-width: 767px) {
  .c-button-b {
    font-size: 1rem;
  }
}

.c-indent1 {
  line-height: 1.7;
}
.c-indent1 > li {
  padding-left: 1em;
  text-indent: -1em;
  margin-top: 0.375rem;
}

.mv {
  width: 100%;
  background-color: #FCD600;
  position: relative;
}
/* KV は画面いっぱいに表示する。旧版は max-width 59.9375rem で中央寄せ
   だったため左右に地色が出ていた。
   img に width: 100% を指定しているのは、リセットの max-width: 100% だけでは
   元画像（PC.png 1200px / SP.png 750px）より大きく引き伸ばせないため。 */
.mv__inner {
  display: block;
  width: 100%;
  margin: 0;
  padding: 0;
  position: relative;
  z-index: 50;
}
.mv__inner picture {
  display: block;
  width: 100%;
}
.mv__inner img {
  display: block;
  width: 100%;
  height: auto;
}


.campaign {
  overflow: hidden;
  position: relative;
  /* 旧版は image-6.webp（縦リピートの柄）。素材が無いので、バナー部
     （bg-banner.png）と同じ「黄＋白ドット」の意匠をCSSで再現している。
     PCだけ地色が無く灰色に抜けていたのも、これで解消。 */
  background-color: #FCD600;
  /* 大小2サイズの水玉。大きい粒だけだと等間隔の格子に見えて機械的なので、
     半目ずらした位置に小さい粒を足している。

     柄に線（ストライプ・市松）を使わないのは、この区間では
     「さらに8がつく順位には追加ポイント！」のように文字が白箱の外、
     背景の上に直接乗るため。連続した線は文字のストロークと干渉して
     読みにくくなる。独立した粒なら干渉しない。 */
  background-image:
    radial-gradient(circle, rgba(255, 255, 255, 0.5) 18%, transparent 19%),
    radial-gradient(circle, rgba(255, 255, 255, 0.34) 9%, transparent 10%);
  background-size: 2rem 2rem, 2rem 2rem;
  background-position: 0 0, 1rem 1rem;
  /* 下余白は後半の章（.campaign__chapter2）側で持つ。
     ここに持たせると、章の地の下に黄色の帯が残ってしまう。 */
  padding: 3rem 0 0;
}
@media (max-width: 767px) {
  .campaign {
    /* SP版も PC と同じ柄。画面が狭いぶん粒の間隔を詰める。
       2層あるので size / position を両方とも指定し直すこと。 */
    background-size: 1.5rem 1.5rem, 1.5rem 1.5rem;
    background-position: 0 0, 0.75rem 0.75rem;
  }
}

/* ==========================================================================
   後半（確かめる・読む）の地
   全長の約4分の3が同じ黄色の水玉だったため、どこまで読んだのかの
   手がかりが無かった。順位表から先は「探す・確認する」作業の章なので、
   地をクリームに落として章の切れ目を作る。

   ねらい
     ・赤い順位パネルが黄色の上より際立つ
     ・店舗カード（白）が地から浮いて読みやすくなる
     ・水玉の意匠は残して、前半との連続性は保つ
   ドットは白のままだとクリーム地でほぼ消えるので、ブランドの赤を
   ごく薄く敷いている。
   ========================================================================== */
.campaign__chapter2 {
  /* 地はクリームではなく「彩度を落とした黄」。
     白に近いクリームにしたところ、ドットがほぼ見えず
     LPの途中で急に素のページになったように見えてしまった。
     前半と同じ「白ドット」の意匠のまま、地の彩度だけを落として
     章の違いを出している。白ドットは地が明るいぶん濃いめ。 */
  background-color: #FBE3A8;
  /* 柄は前半と同じ大小2サイズの水玉。地が明るいぶん粒は濃いめ。 */
  background-image:
    radial-gradient(circle, rgba(255, 255, 255, 0.95) 18%, transparent 19%),
    radial-gradient(circle, rgba(255, 255, 255, 0.6) 9%, transparent 10%);
  background-size: 2rem 2rem, 2rem 2rem;
  background-position: 0 0, 1rem 1rem;
  /* 章の切れ目はここだけ余白を広く取る。
     .campaign__block の 4.375rem より明確に広いこと。 */
  margin-top: 6.25rem;
  /* 下余白は .campaign から引き取っている（黄色の帯を残さないため） */
  padding: 5rem 0 6.25rem;
  /* 豆提灯を章の上端に吊るすための基準 */
  position: relative;
}

/* 章の入口に渡す豆提灯。
   素材（deco-garland.webp 950×180）は左右がつながるタイル。元画像から
   提灯4つぶんを切り出し、その鏡像を右に継いで作ってある。こうすると
   タイルの左端と右端が同じ列になるので、敷き詰めても紐が途切れない
   （元画像の左右端は紐の高さが14pxずれていて、そのままでは継げない）。

   高さを固定して横に敷くので、画面が広くなっても提灯は大きくならない。
   紐が章の境目に乗るよう、帯の上端を章の外へ出している。
   クリックを吸わないよう pointer-events は無効。 */
.chapter2__garland {
  position: absolute;
  left: 0;
  width: 100%;
  height: 7.5rem;
  /* 紐は画像の上端にある。帯の高さの2割ほど上へ出すと境界線に乗る。 */
  top: -1.5rem;
  background-image: url("assets/deco-garland.webp");
  background-repeat: repeat-x;
  background-position: left top;
  /* 幅を auto にして高さで合わせる。でないと提灯が横に潰れる。 */
  background-size: auto 100%;
  pointer-events: none;
  z-index: 3;
}
@media (max-width: 767px) {
  .chapter2__garland {
    height: 3.25rem;
    top: -0.625rem;
  }
}
@media (max-width: 767px) {
  .campaign__chapter2 {
    background-size: 1.5rem 1.5rem, 1.5rem 1.5rem;
    background-position: 0 0, 0.75rem 0.75rem;
    margin-top: 3.75rem;
    padding: 2.5rem 0 3.75rem;
  }
}
/* 章の先頭ブロックは、章じたいの padding があるので上余白を持たせない */
.campaign__chapter2 > .l-page-contents > .campaign__rank-block {
  margin-top: 0;
}

/* 見出しは白文字＋「＝＝」装飾の透過画像（886〜959×66〜69px）。
   赤帯の上に重ねる。img の max-width: 100% はリセットで効いているため、
   SP で帯より広くなることはない。 */
.campaign__heading {
  position: relative;
  text-align: center;
  margin: 0 auto;
  background-color: #BF1D20;
  padding: 1.5625rem 0.9375rem 1.375rem;
}
.campaign__inner {
  padding: 2.1875rem 3.3125rem 2.9375rem;
}
.campaign__block {
  margin-top: 4.375rem;
  position: relative;
  z-index: 2;
}

/* 1〜2行しかない事実の箱（キャンペーン期間・ポイント加算時期）。
   独立した大箱が同じ間隔で続くと、冒頭が細切れに見えてリズムが悪い。
   余白を詰めて前の箱とひとまとまりにし、「キャンペーンの基本情報」
   というかたまりに見せる。見出しは探す手がかりなので消さない。 */
.campaign__block.-compact {
  margin-top: 1.875rem;
}
.campaign__block.-compact .campaign__inner {
  padding-top: 1.375rem;
  padding-bottom: 1.625rem;
}
.campaign__block:first-child {
  margin-top: 0 !important;
}
/* 訴求バナーは複数枚を縦に積む（トリキ晩餐会 / 鳥貴族公式アプリ）。 */
.campaign__bnr {
  max-width: 51.625rem;
  margin: -1.25rem auto -3.75rem;
  display: grid;
  gap: 1.25rem;
}
/* バナーと、その下に付く補足文（公式アプリの翠ジンフェス告知）のセット。 */
.campaign__bnr-item {
  display: grid;
  gap: 0.75rem;
}
.campaign__bnr-note {
  padding: 0.875rem 1.25rem;
  border: 0.125rem solid #BF1D20;
  border-radius: 0.5rem;
  background: #fff;
  color: #3E2A15;
  font-weight: bold;
  font-size: 1rem;
  line-height: 1.7;
  text-align: center;
}
@media (max-width: 767px) {
  .campaign__bnr-item {
    gap: 0.5rem;
  }
  .campaign__bnr-note {
    padding: 0.75rem 0.875rem;
    font-size: 0.875rem;
    line-height: 1.6;
    text-align: left;
    /* 3文とも SP では折り返すので、対応ブラウザでは文節で折る。
       未対応でも通常の折り返しになるだけで崩れない。 */
    word-break: auto-phrase;
  }
}

/* 鳥貴族公式アプリのインストール動線。 */
.campaign__appdl {
  text-align: center;
}
.campaign__appdl-title {
  font-weight: bold;
  font-size: 1.0625rem;
  line-height: 1.5;
  color: #3E2A15;
}
.campaign__appdl-links {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0.75rem 1.5rem;
  margin-top: 0.75rem;
}
.campaign__appdl-link {
  display: inline-block;
  /* ストアバッジ自体は42pxなので、上下に余白を足して44px以上にする */
  padding: 0.125rem 0;
  border-radius: 0.5rem;
  transition: transform 0.15s, box-shadow 0.15s;
}
/* バッジ画像は App Store 448×166、Google Play 558×166 と縦横比が違うため、
   幅と高さの両方は揃えられない。高さを揃える側に寄せている
   （Apple・Google のバッジガイドラインが想定する扱い）。 */
.campaign__appdl-link > img {
  display: block;
  height: 3.25rem;
  width: auto;
}
.campaign__appdl-link:hover,
.campaign__appdl-link:focus-visible {
  transform: translateY(-0.125rem);
  box-shadow: 0 0.25rem 0.625rem rgba(0, 0, 0, 0.2);
}
.campaign__appdl-link:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: 0.1875rem;
}
@media (max-width: 767px) {
  .campaign__appdl-title {
    font-size: 0.9375rem;
  }
  .campaign__appdl-links {
    gap: 0.625rem 1rem;
    margin-top: 0.625rem;
  }
  .campaign__appdl-link > img {
    height: 2.625rem;
  }
}

/* 各バナーは画像に「タップして詳細を確認する」等が入っているので、
   カード全体を遷移先へのリンクにしている。 */
.campaign__bnr-link {
  display: block;
  border-radius: 0.75rem;
  overflow: hidden;
  transition: transform 0.15s, box-shadow 0.15s;
}
.campaign__bnr-link img {
  display: block;
  width: 100%;
  height: auto;
}
.campaign__bnr-link:hover,
.campaign__bnr-link:focus-visible {
  transform: translateY(-0.125rem);
  box-shadow: 0 0.375rem 1rem rgba(0, 0, 0, 0.2);
}
.campaign__bnr-link:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: 0.1875rem;
}
/* 押したときに沈む。スマホには hover が無いので、これが
   「反応した」と分かる唯一の手がかりになる。 */
.campaign__bnr-link:active {
  transform: scale(0.985);
  box-shadow: 0 0.125rem 0.375rem rgba(0, 0, 0, 0.18);
}

/* ==========================================================================
   バナー下端の誘導帯
   絵だけのバナーは「押せる」と伝わらない、とTLから指摘があった。
   このLPには既に答えがある。Pontaバナー（.banner__more）は
   白帯＋オレンジ文字＋矢印で、そこだけ指摘が出ていない。
   同じ作りを、文字の入っていない2つのバナーにも広げる。

   帯はリンク（<a>）の内側に置くこと。外に出すと、帯だけが押せるのか
   絵も押せるのかが分からなくなる。矢印は .c-button と同じ
   icon-arrow.svg をマスクで使い、ページ内の矢印の形を揃えている。
   ========================================================================== */
.bnr-cta {
  display: block;
  position: relative;
  background: #fff;
  color: #FA5902;
  font-weight: bold;
  font-size: 1.125rem;
  line-height: 1.4;
  text-align: center;
  /* 右の矢印と重ならないよう、左右の余白を矢印のぶん広く取る */
  padding: 1rem 3rem;
}
.bnr-cta::after {
  content: "";
  position: absolute;
  top: 50%;
  right: 1.625rem;
  transform: translateY(-50%);
  width: 0.5625rem;
  height: 1rem;
  background: currentColor;
  -webkit-mask-image: url("assets/icon-arrow.svg");
          mask-image: url("assets/icon-arrow.svg");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: 50%;
          mask-position: 50%;
  -webkit-mask-size: contain;
          mask-size: contain;
}
@media (max-width: 767px) {
  .bnr-cta {
    font-size: 0.9375rem;
    padding: 0.8125rem 2.25rem;
  }
  .bnr-cta::after {
    right: 1rem;
  }
}
@media (max-width: 767px) {
  .campaign__bnr {
    margin: 0 auto;
  }
}
.campaign__box {
  position: relative;
  background: white;
  border: solid 0.3125rem #BF1D20;
}
.campaign__text {
  text-align: center;
  font-size: 1.375rem;
  line-height: 1.7272727273;
  font-weight: bold;
}



/* ========== カウントダウン ==========
   countdown.js が data-cd="…" に数字とラベルを書き、
   .countdown の data-state を before / during / ended に切り替える。
   JSが動かなくても before のまま「--」で出るだけなので崩れない。

   before（開催前）… 開始までの残り時間
   during（開催中）… 終了までの残り時間。赤をより強く出して煽る
   ended （終了後）… 数字を伏せて終了メッセージに差し替え。配色も落とす */
/* KV 下端の「キャンペーン期間」帯からそのまま続いて見えるよう、
   カード（白地＋枠＋影）をやめて全幅の赤帯にしている。 */
.countdown {
  width: 100%;
  padding: 1.25rem 1.25rem 1.5rem;
  background: #B81C22;   /* KV画像下端の赤をスポイトした値。境目を出さないため */
  text-align: center;
  box-sizing: border-box;
}

.countdown__label {
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: clamp(1rem, 2.4vw, 1.5rem);
  letter-spacing: 0.08em;
  line-height: 1.4;
  color: #FFF3B1;
}
.countdown__list {
  display: flex;
  align-items: flex-end;
  justify-content: center;
  gap: clamp(0.5rem, 1.6vw, 1.25rem);
  margin-top: 0.75rem;
}
.countdown__list li {
  display: flex;
  align-items: baseline;
  gap: 0.15em;
  font-family: "M PLUS 1";
  font-weight: 800;
}
.countdown__list b {
  display: inline-block;
  min-width: 1.6em;
  padding: 0.1em 0.25em;
  background: #fff;
  color: #BF1D20;
  border-radius: 0.375rem;
  font-size: clamp(1.75rem, 5.2vw, 3.25rem);
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
}
.countdown__list span {
  font-size: clamp(0.8125rem, 1.8vw, 1.125rem);
  color: #fff;
}

/* --- 終了メッセージ。ended 以外では出さない --- */
.countdown__ended {
  display: none;
  font-family: "M PLUS 1";
  font-weight: 800;
  line-height: 1.4;
}
.countdown__ended-main {
  display: block;
  font-size: clamp(1.125rem, 2.8vw, 1.75rem);
  letter-spacing: 0.06em;
  color: #fff;
}
.countdown__ended-sub {
  display: block;
  margin-top: 0.5rem;
  font-size: clamp(0.8125rem, 1.8vw, 1.0625rem);
  font-weight: bold;
  color: #F0D8C8;
}

/* --- during（開催中）: 終了が近いことを示すため、より濃い赤に --- */
.countdown[data-state="during"] {
  background: #8E1518;
}

/* --- ended（終了後）: 数字を伏せ、赤を沈めて役目を終えた見た目に --- */
.countdown[data-state="ended"] {
  background: #7A6B5C;
}
.countdown[data-state="ended"] .countdown__label,
.countdown[data-state="ended"] .countdown__list {
  display: none;
}
.countdown[data-state="ended"] .countdown__ended {
  display: block;
}

@media (max-width: 767px) {
  .countdown {
    padding: 0.875rem 0.75rem 1rem;
  }
  .countdown__list {
    margin-top: 0.5rem;
  }
}
.campaign__text.-important {
  margin-top: 1.875rem;
  color: #BF1D20;
}
.campaign__text a {
  color: #BF1D20;
  text-decoration-line: underline;
  text-decoration-style: solid;
}
.campaign__text.small {
  font-size: 1.125rem;
  margin: 10px auto -10px;
}
@media (max-width: 767px) {
  .campaign__text.small {
    font-size: 14px;
    margin: 10px auto 0;
  }
}
.campaign__subBox {
  margin: 1.75rem auto 0;
  padding: 1.5625rem 2.5rem;
  background: #F0F0F0;
  border-radius: 0.25rem;
}
.campaign__subBox .c-list.-sm > li {
  font-size: 1rem;
}
@media (max-width: 767px) {
  .campaign__subBox .c-list.-sm > li {
    font-size: 0.875rem;
  }
}
.campaign__subBox .-red {
  color: #BF1D20;
  font-weight: bold;
}
.campaign__iphoneImg {
  margin: 1.5625rem auto 0;
  width: 26.25rem;
  display: block;
}
/* ========== セクションナビ ==========
   旧 .rank-btn（button.webp の画像1枚）を置き換えたページ内目次。
   「最新の順位」は -main で塗りつぶし、他は白抜きにして主従を付ける。 */
.secnav {
  margin-bottom: -1.25rem;
}
@media (max-width: 767px) {
  .secnav {
    margin-bottom: -0.5rem;
  }
}
/* 主導線。旧 button.webp の位置に相当する赤いボタン。 */
.secnav__main {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 0.25rem;
  max-width: 51.625rem;
  margin: 0 auto;
  padding: 1rem 1.5rem;
  border: 0.1875rem solid #BF1D20;
  border-radius: 10rem;
  background: #BF1D20;
  color: #fff;
  box-shadow: 0 0.25rem 0 #8E1417;
  font-family: "M PLUS 1";
  font-weight: 800;
  line-height: 1.3;
  text-decoration: none;
  transition: background-color 0.15s, border-color 0.15s, transform 0.15s;
}
.secnav__main:hover {
  background: #FA5902;
  border-color: #FA5902;
  box-shadow: 0 0.25rem 0 #C24602;
  transform: translateY(-0.125rem);
}
.secnav__main:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: 0.1875rem;
}
.secnav__label {
  font-size: clamp(1.25rem, 3.2vw, 1.75rem);
}
.secnav__sub {
  font-size: clamp(0.9375rem, 2vw, 1.1875rem);
}

/* サブ項目。PCでは5つを1行に収める。
   折り返さないぶん、幅に応じて文字と余白を詰める（clamp）。 */
/* 7項目あるので1行には入らない。以前は5項目を nowrap で1行に収めていたが、
   「鳥貴族のおトク情報」と「もらえるポイント」を足した時点で成立しなくなった。
   無理に詰めると文字が潰れるので、折り返しを許して2行にしている。 */
.secnav__list {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: clamp(0.5rem, 1vw, 0.75rem);
  max-width: 58rem;
  margin: 0.75rem auto 0;
  padding: 0;
  list-style: none;
}
.secnav__item {
  display: block;
  padding: 0.625rem clamp(0.625rem, 1.2vw, 1rem);
  border: 0.1875rem solid #BF1D20;
  border-radius: 10rem;
  background: #fff;
  color: #BF1D20;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: clamp(0.875rem, 1.3vw, 1rem);
  line-height: 1.3;
  white-space: nowrap;
  text-decoration: none;
  transition: background-color 0.15s, color 0.15s, transform 0.15s;
}
.secnav__item:hover {
  background: #BF1D20;
  color: #fff;
  transform: translateY(-0.125rem);
}
.secnav__item:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: 0.1875rem;
}

/* ===== いま読んでいるセクション =====
   motion.js が aria-current="location" を付け替える。

   これは装飾ではなく道案内なので、:root[data-anim="on"] の
   配下には置かないこと。動きを減らす設定の人にも出す必要がある。

   リングを白にしているのは、このナビが黄色（#FCD600）の上に
   乗っているため。金色のリングでは地と同化して見えない。
   ホバーも同じ赤塗りになるので、リングの有無で区別している。 */
.secnav__item[aria-current] {
  background: #BF1D20;
  color: #fff;
  box-shadow: 0 0 0 0.1875rem #fff;
}
.secnav__main[aria-current] {
  box-shadow: 0 0.25rem 0 #8E1417, 0 0 0 0.1875rem #fff;
}

/* SPは1行に収まらないので折り返す。 */
@media (max-width: 767px) {
  .secnav__main {
    padding: 0.875rem 1rem;
  }
  /* SPはピルの一覧を出さない。
     追従CTAに「目次」が常にあり、そこから全8項目へ飛べるので、
     同じものを上にもう一度並べると画面の上の271pxが目次で埋まる。

     残す赤いボタン（.secnav__main）は目次ではなく主導線。
     これで役割が分かれて重複が無くなる。
       最新の順位 … 赤いボタン
       対象店舗   … 追従CTAの主リンク（開催前の状態）
       残り6項目  … 追従CTAの目次シート
     PCには追従CTAが出ないので、PCでは7項目とも出したまま。 */
  .secnav__list {
    display: none;
  }
}
@media (max-width: 767px) {
  .campaign {
    /* 下余白は .campaign__chapter2 側に持たせている */
    padding: 1.875rem 0 0;
  }
  .campaign__heading {
    padding: 0.9375rem 0.625rem 0.75rem;
  }
  .campaign__inner {
    padding: 0.9375rem 1.25rem 1.25rem;
  }
  .campaign__block {
    margin-top: 2.5rem;
  }
  .campaign__block.-compact {
    margin-top: 1.125rem;
  }
  .campaign__block.-compact .campaign__inner {
    padding-top: 0.75rem;
    padding-bottom: 0.875rem;
  }
  .campaign__box {
    border-width: 0.1875rem;
  }
  .campaign__text {
    font-size: 1rem;
    line-height: 1.6;
  }
  .campaign__text.-important {
    margin-top: 0.9375rem;
    color: #BF1D20;
  }
  .campaign__subBox {
    padding: 1.25rem 1rem;
  }
}

.campaign__point-block {
  position: relative;
  background: url("assets/image-10.webp") no-repeat center center/100%;
  padding: 3.75rem 0 2.5rem;
}
.campaign__point-block > img {
  width: 100%;
}
@media (max-width: 767px) {
  /* 親（.l-page-contents-point）の左右余白1.25remを打ち消して画面いっぱいに出す。
     100vw だとスクロールバーの幅まで含んでしまい、
     幅の狭い端末（320px級）で横スクロールが発生する。 */
  .campaign__point-block > img {
    width: calc(100% + 2.5rem);
    max-width: none;
    margin: 0 -1.25rem;
  }
}
.campaign__point-box {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  max-width: 48.9375rem;
  width: 100%;
  margin: 1.25rem auto 0;
  font-family: "M PLUS 1";
  line-height: 1.6;
  font-weight: 800;
}
.campaign__point-high {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  row-gap: 0.875rem;
}
.campaign__point-high li {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.campaign__point-high .rank {
  font-size: 1.375rem;
  color: #fff;
  padding: 0.125rem 1rem 0.3125rem;
  background-color: #BF1D20;
  border-radius: 30px;
}
.campaign__point-high .point {
  font-size: 2rem;
  margin-left: 0.8125rem;
}
.campaign__point-high .note {
  font-size: 1.75rem;
}
/* 当選人数。金額より一段下の情報なので小さく、少し離して置く。
   行が長くなるので、入りきらないときは折り返させる（下の li の flex-wrap）。 */
.campaign__point-high .count,
.campaign__point-low .count {
  margin-left: 0.625rem;
  padding: 0.0625rem 0.625rem 0.1875rem;
  border-radius: 10rem;
  background: rgba(191, 29, 32, 0.1);
  color: #BF1D20;
  font-size: 1rem;
  white-space: nowrap;
}
.campaign__point-high li,
.campaign__point-low li {
  flex-wrap: wrap;
  row-gap: 0.25rem;
}

/* Pontaポイントの履歴に出る名称の一覧。
   利用者が自分の履歴と1文字ずつ見比べる場所なので、
   本文と混ざらないよう枠で囲い、行ごとに切って読みやすくする。 */
.campaign__ptname {
  max-width: 34rem;
  margin: 1rem auto 0;
  padding: 1rem 1.25rem;
  border: 0.125rem solid #E2D9CE;
  border-radius: 0.625rem;
  background: #FFFBF2;
  list-style: none;
  text-align: left;
}
/* 全角なので長い。狭い画面では折り返す。
   そのとき2行目を字下げしないと、次の名称との境目が分からなくなる。
   ぶら下げインデントで、1件が1かたまりに見えるようにする。 */
.campaign__ptname > li {
  padding-left: 1.25em;
  text-indent: -1.25em;
  font-family: "Noto Sans JP";
  font-weight: bold;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: #3E2A15;
}
.campaign__ptname > li + li {
  margin-top: 0.5rem;
}
@media (max-width: 767px) {
  .campaign__ptname {
    padding: 0.875rem 1rem;
  }
  .campaign__ptname > li {
    font-size: 0.8125rem;
  }
}

/* 「期間中の決済金額 上位1,000位の方にプレゼント」。
   表の前提条件。これが無いと下の追加ポイントとの区別がつかない。 */
.campaign__point-lead {
  max-width: 48.9375rem;
  width: 100%;
  margin: 0 auto 1rem;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: clamp(0.9375rem, 1.8vw, 1.25rem);
  line-height: 1.5;
  text-align: center;
  color: #BF1D20;
}
.campaign__point-low {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  row-gap: 0.875rem;
}
.campaign__point-low li {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.campaign__point-low .rank {
  font-size: 1.125rem;
  color: #BF1D20;
  padding: 0.125rem 1rem 0.3125rem;
  background-color: #fff;
  border-radius: 30px;
}
.campaign__point-low .point {
  font-size: 1.5rem;
  margin-left: 0.8125rem;
}
.campaign__point-low .note {
  font-size: 1.375rem;
}

/* 2026年版スペックで追加。8がつく順位への追加ポイント。
   ポイント表（.campaign__point-box）の直下に置き、同じ M PLUS 1 / 800 の
   字面と赤ピル（#BF1D20）のあしらいを踏襲している。
   見出し用の画像素材が無いためテキストで組み、clamp() で幅に追従させる。 */
.campaign__bonus {
  max-width: 48.9375rem;
  width: 100%;
  margin: 2.5rem auto 0;
  font-family: "M PLUS 1";
  font-weight: 800;
  line-height: 1.6;
  text-align: center;
}
.campaign__bonus-title {
  font-size: clamp(1.125rem, 2.6vw, 1.75rem);
  color: #BF1D20;
  margin-bottom: 1.25rem;
}
/* inline-flex で最長行の幅に縮め、親の text-align: center で全体を中央に置く。
   各行は左揃えなので、ピルと金額の開始位置が3行で揃う。 */
.campaign__bonus-list {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  row-gap: 0.875rem;
  text-align: left;
}
.campaign__bonus-list li {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  column-gap: 0.8125rem;
  row-gap: 0.25rem;
}
.campaign__bonus-list .rank {
  font-size: 1.375rem;
  color: #fff;
  padding: 0.125rem 1rem 0.3125rem;
  background-color: #BF1D20;
  border-radius: 30px;
  min-width: 7rem;
  text-align: center;
  flex: none;
}
.campaign__bonus-list .point {
  font-size: clamp(1.0625rem, 2.1vw, 1.625rem);
}
/* 当選人数。金額と同じ行に、小さいピルで添える。 */
.campaign__bonus-list .count {
  display: inline-block;
  padding: 0.0625rem 0.625rem 0.1875rem;
  border-radius: 10rem;
  background: #FFF3B1;
  color: #BF1D20;
  font-size: 0.875rem;
  white-space: nowrap;
  flex: none;
}

/* 2つある追加ポイントの小見出し。
   「末尾が8の順位すべて」と「8位・88位・888位ちょうど」は別の賞なので、
   ここで言い切らないと同じものだと誤解される。 */
.campaign__bonus-sub {
  margin-bottom: 0.625rem;
  font-size: clamp(0.875rem, 1.7vw, 1.0625rem);
  color: #3E2A15;
}
.campaign__bonus-list + .campaign__bonus-sub {
  margin-top: 1.5rem;
}
.campaign__bonus-note {
  margin-top: 1rem;
  font-family: "Noto Sans JP";
  font-weight: bold;
  font-size: 0.8125rem;
  line-height: 1.6;
  color: #3E2A15;
}
@media (max-width: 767px) {
  .campaign__bonus-list .note {
    margin-left: 0.375rem;
    font-size: 0.75rem;
  }
  .campaign__bonus-note {
    margin-top: 0.75rem;
    text-align: left;
  }
}

@media (max-width: 767px) {
  .campaign__bonus {
    margin-top: 1.5rem;
  }
  .campaign__bonus-title {
    margin-bottom: 0.875rem;
  }
  .campaign__bonus-list {
    row-gap: 0.625rem;
  }
  .campaign__bonus-list .rank {
    font-size: 1.125rem;
    min-width: 4.75rem;
  }
}

@media (max-width: 767px) {
  .campaign__point-block {
    padding: 1.25rem 0 1.875rem;
    background: none;
    position: relative;
  }
  .campaign__point-block::before {
    display: block;
    content: "";
    width: calc(100% + 2.5rem);
    height: 29.875rem;
    background: url("assets/image-11.webp") no-repeat center center/100%;
    position: absolute;
    top: -7.5rem;
    left: -1.25rem;
  }
  .campaign__point-block img {
    position: relative;
  }
  .campaign__point-box {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    margin-top: 0;
  }
  .campaign__point-high {
    row-gap: 0.625rem;
    margin-top: 0.625rem;
  }
  .campaign__point-high li {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    padding-left: 2.25rem;
    position: relative;
  }
  .campaign__point-high .rank {
    position: absolute;
    top: calc(50% - 1.125rem);
    left: calc(50% - 6.875rem);
    font-size: 1.125rem;
  }
  .campaign__point-high .point {
    font-size: 1.75rem;
  }
  .campaign__point-high .note {
    font-size: 1.5rem;
    margin-top: -0.3125rem;
  }
  .campaign__point-low {
    margin: 1.25rem auto 1rem;
  }
  .campaign__point-low li {
    margin: 0 auto;
  }
  .campaign__point-low .rank {
    font-size: 1rem;
  }
  .campaign__point-low .point {
    font-size: 1.25rem;
  }
  .campaign__point-low .note {
    font-size: 1.125rem;
  }
}

.campaign__rank-block {
  background-color: #BF1D20;
  padding: 1.875rem 3.4375rem 3.125rem;
  max-width: 51.625rem;
  width: 100%;
  display: block;
  margin: 0 auto;
  /* シャインの帯をパネルの内側で切るため。
     帯は ::after で、位置の基準もはみ出しの処理もここで持つ。 */
  position: relative;
  overflow: hidden;
}
@media (max-width: 767px) {
  .campaign__rank-block {
    padding: 1.875rem 0.9375rem 1.875rem;
  }
}
/* 「最新順位はこちら」はここだけ画像（rank.webp）のまま。 */
.campaign__rank-block > img {
  width: 26.8125rem;
  max-width: 100%;
  display: block;
  margin: 0 auto;
}
.campaign__rank-text {
  margin-top: 1.25rem;
  font-family: "M PLUS 1";
  color: #fff;
  font-weight: 800;
  text-align: center;
  line-height: 1.2;
}
.campaign__rank-text > .-heading {
  font-size: 2rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  gap: 0.125rem;
}
.campaign__rank-text > .-heading::before, .campaign__rank-text > .-heading::after {
  display: inline-block;
  content: "";
  height: 1.8125rem;
  width: 0.9375rem;
  background: url("assets/image-12.webp") no-repeat center bottom/100% 100%;
}
.campaign__rank-text > .-heading::before {
  margin-right: 0.625rem;
}
.campaign__rank-text > .-heading::after {
  -webkit-transform: scale(-1, 1);
      -ms-transform: scale(-1, 1);
          transform: scale(-1, 1);
}
@media (max-width: 767px) {
  .campaign__rank-text > .-heading {
    font-size: 1.125rem;
  }
  .campaign__rank-text > .-heading::before, .campaign__rank-text > .-heading::after {
    width: 0.625rem;
    height: 1.25rem;
  }
}
.campaign__rank-text > .-kikan {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  gap: 0.625rem;
  font-size: 1.375rem;
  margin-top: 0.75rem;
}
.campaign__rank-text > .-kikan > span {
  background: white;
  border-radius: 0.25rem;
  color: #BF1D20;
  display: inline-block;
  padding: 0 0.4375rem 0.125rem;
}
@media (max-width: 767px) {
  .campaign__rank-text > .-kikan {
    font-size: 1rem;
    gap: 0.375rem;
  }
  .campaign__rank-text > .-kikan > span {
    padding: 0 0.1875rem 0.125rem;
  }
}
.campaign__rank-text > .-date {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  gap: 0.75rem;
  font-size: 1.875rem;
  margin-top: 1.5rem;
}
.campaign__rank-text > .-date::before, .campaign__rank-text > .-date::after {
  display: inline-block;
  content: "";
  height: 0.625rem;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  background: url("assets/image-13.webp") no-repeat center center/100% 100%;
}
@media (max-width: 767px) {
  .campaign__rank-text > .-date {
    font-size: 1.125rem;
    margin-top: 1.25rem;
    gap: 0.5rem;
  }
  .campaign__rank-text > .-date::before, .campaign__rank-text > .-date::after {
    height: 0.375rem;
  }
}
.campaign__rank-notes {
  margin-top: 1.5625rem;
}
@media (max-width: 767px) {
  .campaign__rank-notes {
    font-size: 0.9375rem;
  }
}
.campaign__rank-notes li {
  color: #fff;
}
.campaign__rank-box {
  width: calc(100% + 1rem);
  margin-left: -0.5rem;
  margin-top: 0.75rem;
  border-collapse: separate;
  border-spacing: 0.5rem;
  font-family: "M PLUS 1";
  font-weight: 800;
  line-height: 1.4;
}
@media (max-width: 767px) {
  .campaign__rank-box {
    border-spacing: 0.1875rem;
    width: calc(100% + 0.5rem);
    margin-left: -0.25rem;
  }
}
.campaign__rank-box .-number {
  font-size: 1.875rem;
  text-align: center;
}
@media (max-width: 767px) {
  .campaign__rank-box .-number {
    font-size: 1rem;
  }
}
.campaign__rank-box th, .campaign__rank-box td {
  padding: 0.625rem 1.5625rem;
}
@media (max-width: 767px) {
  .campaign__rank-box th, .campaign__rank-box td {
    padding: 0.625rem 0.375rem;
  }
}
.campaign__rank-box th {
  background-color: #FFF3B1;
  font-size: 1.75rem;
}
@media (max-width: 767px) {
  .campaign__rank-box th {
    font-size: 1rem;
  }
}
.campaign__rank-box td {
  position: relative;
  background-color: #fff;
  font-size: 2rem;
}
.campaign__rank-box td:not(.-number) {
  text-align: end;
}
@media (max-width: 767px) {
  .campaign__rank-box td {
    font-size: 1.125rem;
  }
}
/* ========== 次回更新までのカウントダウン ==========
   順位表の上に置く1行。KV下の赤帯と役割がぶつからないよう、
   あちらは「期限」、こちらは「次に情報が出る時刻」に徹して小さく出す。
   中身は countdown.js が更新日程表から拾って入れる。 */
.rank-next[hidden] {
  display: none;
}
.rank-next {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  margin: 1rem auto 0;
  padding: 0.5rem 1.125rem;
  width: -webkit-fit-content;
  width: fit-content;
  max-width: 100%;
  border: 0.125rem solid rgba(255, 243, 177, 0.6);
  border-radius: 10rem;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1rem;
  line-height: 1.4;
  color: #fff;
}
.rank-next__label {
  padding: 0.125rem 0.625rem;
  border-radius: 0.25rem;
  background: #FFF3B1;
  color: #BF1D20;
  font-size: 0.875rem;
}
.rank-next__time > b {
  margin: 0 0.125rem;
  color: #FFF3B1;
  font-size: 1.25rem;
}
@media (max-width: 767px) {
  .rank-next {
    gap: 0.375rem;
    padding: 0.5rem 0.875rem;
    font-size: 0.8125rem;
  }
  .rank-next__label {
    padding: 0.125rem 0.4375rem;
    font-size: 0.75rem;
  }
  .rank-next__time > b {
    font-size: 1rem;
  }
}

/* 数字が入るまでの仮置き。鳥貴族のシンボルである ∞ を置き、
   データではないことが分かるよう色を落として少し小さくしている。 */
.campaign__rank-box td.-tbd {
  /* 値ではないので、数字の右寄せではなく中央に置く */
  text-align: center;
  color: #C9A227;
  font-size: 2.25rem;
  letter-spacing: 0.05em;
}
@media (max-width: 767px) {
  .campaign__rank-box td.-tbd {
    font-size: 1.375rem;
  }
}
.campaign__rank-tbd {
  margin-top: 0.75rem;
  text-align: center;
  font-weight: bold;
  font-size: 0.875rem;
  line-height: 1.5;
  color: rgba(255, 255, 255, 0.85);
}
.campaign__rank-tbd > b {
  margin-right: 0.125rem;
  color: #FFF3B1;
  font-size: 1.125rem;
}

/* ========== ラッキー賞 ==========
   パネルも表も通常ランキングと同じクラス（.campaign__rank-block /
   .campaign__rank-box）を使っている。ここはその差分だけ。
   見出しが画像（rank.webp）ではなくテキストなので、その分の指定が主。 */
/* 通常ランキングの後ろに続く特別枠。破線で区切るより金枠のほうが
   「別の賞」であることが伝わるので、囲みだけで分けている。 */
.campaign__lucky-block {
  margin-top: 2.5rem;
  padding: 1.75rem 1.5rem 1.5rem;
  border: 0.1875rem solid #FFF3B1;
  border-radius: 0.75rem;
  background: rgba(0, 0, 0, 0.12);
  /* 提灯を金枠の肩から吊るすための基準 */
  position: relative;
}
@media (max-width: 767px) {
  .campaign__lucky-block {
    margin-top: 1.75rem;
    padding: 1.25rem 0.75rem 1rem;
  }
}

/* ==========================================================================
   祭提灯（ラッキー賞の金枠の肩に吊るす）
   枠の上端に半分かかる位置に置くと「吊り下がっている」ように見える。

   地が赤パネル（#BF1D20）なので、提灯の赤い胴は沈む。読めているのは
   黒い金具と白い「祭」の丸で、その2つが枠線にかかる高さに置くこと。
   親は .campaign__rank-block（overflow: hidden）の内側にあるが、
   枠はパネルの余白より内側なので切られない。
   ========================================================================== */
/* top は width の半分のマイナス。こうすると枠線が提灯の胴の中ほどを通り、
   枠から吊り下がっているように見える。大きさを変えるときは top も連動させること。 */
.lantern {
  position: absolute;
  top: -3.25rem;
  width: 6.5rem;
  z-index: 4;
  pointer-events: none;
}
.lantern img {
  display: block;
  width: 100%;
  height: auto;
}
.lantern.-l1 { left: 1.25rem; }
/* 左右で少し大きさと高さを変えると、並んで吊るした感じが出る */
.lantern.-l2 { right: 1.25rem; width: 5.5rem; top: -2.75rem; }

@media (max-width: 767px) {
  /* SPは枠が狭く、中央の「8がつく順位の方には」との間が詰まる。
     PCほど大きくはできない。 */
  .lantern {
    width: 3.75rem;
    top: -1.875rem;
  }
  .lantern.-l1 { left: 0.25rem; }
  .lantern.-l2 { right: 0.25rem; width: 3.125rem; top: -1.5625rem; }
}
.campaign__lucky-lead {
  margin-top: 0.75rem;
  text-align: center;
  font-family: "M PLUS 1";
  font-weight: 800;
  line-height: 1.5;
  font-size: clamp(0.875rem, 1.9vw, 1.25rem);
  color: #fff;
}
.campaign__lucky-lead > b {
  color: #FFF3B1;
}
/* 888位は3つの中でいちばん手前。そこだけ目印を出す。 */
.campaign__rank-box .-pick > td {
  background-color: #FFF8D0;
}
.campaign__rank-box .-pick > td.-number::after {
  position: absolute;
  content: "ねらいめ";
  left: 50%;
  bottom: -0.5rem;
  transform: translateX(-50%);
  padding: 0.0625rem 0.5rem;
  border-radius: 10rem;
  background: #FA5902;
  color: #fff;
  font-size: 0.75rem;
  line-height: 1.5;
  white-space: nowrap;
}
@media (max-width: 767px) {
  .campaign__rank-box .-pick > td.-number::after {
    bottom: -0.4375rem;
    padding: 0 0.3125rem;
    font-size: 0.625rem;
  }
}

/* 通常ランキング。パネル先頭（rank.webp と次回更新の直後）に来る。 */
.campaign__rank-main {
  margin-top: 1.5rem;
}
@media (max-width: 767px) {
  .campaign__rank-main {
    margin-top: 1.25rem;
  }
}
.campaign__rank-subtitle {
  text-align: center;
  font-family: "M PLUS 1";
  font-weight: 800;
  line-height: 1.25;
  color: #fff;
  font-size: clamp(1.25rem, 3vw, 1.875rem);
}
.campaign__lucky-title {
  font-family: "M PLUS 1";
  font-weight: 800;
  text-align: center;
  line-height: 1.25;
  color: #fff;
}
.campaign__lucky-title > .-sub {
  display: block;
  font-size: clamp(0.875rem, 1.9vw, 1.25rem);
}
.campaign__lucky-title > .-main {
  display: block;
  margin-top: 0.25rem;
  color: #FFF3B1;
  font-size: clamp(1.875rem, 4.6vw, 2.875rem);
  letter-spacing: 0.08em;
}
.campaign__rank-box .king {
  z-index: 5;
  line-height: 1;
  vertical-align: bottom;
  text-shadow: 0.125rem 0.125rem 0 white, -0.125rem 0.125rem 0 white, 0.125rem -0.125rem 0 white, -0.125rem -0.125rem 0 white;
}
@media (max-width: 767px) {
  .campaign__rank-box .king {
    text-shadow: 0.0625rem 0.0625rem 0 white, -0.0625rem 0.0625rem 0 white, 0.0625rem -0.0625rem 0 white, -0.0625rem -0.0625rem 0 white;
  }
}
.campaign__rank-box .king::after {
  position: absolute;
  content: "";
  width: 4.5rem;
  height: 3.5rem;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
      -ms-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
  z-index: -1;
}
@media (max-width: 767px) {
  .campaign__rank-box .king::after {
    width: 3.5rem;
    height: 2.5rem;
  }
}
.campaign__rank-box .king-01::after {
  background: url("assets/rank1.svg") no-repeat center center/100% auto;
}
.campaign__rank-box .king-02::after {
  background: url("assets/rank2.svg") no-repeat center center/100% auto;
}
.campaign__rank-box .king-03::after {
  background: url("assets/rank3.svg") no-repeat center center/100% auto;
}

/* ==========================================================================
   順位の目安チェッカー
   赤パネルの中に置くので、ラッキー賞の金枠と同じ囲みの作法に合わせる。
   ただし「入力して使う道具」なので、賞の枠より枠線を薄くして、
   ポイントの金額より目立たないようにしている。
   ========================================================================== */
.rankcheck {
  margin-top: 2.5rem;
  padding: 1.75rem 1.5rem 1.5rem;
  border: 0.125rem solid rgba(255, 243, 177, 0.55);
  border-radius: 0.75rem;
  background: rgba(0, 0, 0, 0.12);
  text-align: center;
}
.rankcheck[hidden] {
  display: none;
}
.rankcheck__title {
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: clamp(1.0625rem, 2.2vw, 1.375rem);
  line-height: 1.4;
  color: #FFF3B1;
}
.rankcheck__lead {
  margin-top: 0.5rem;
  font-family: "Noto Sans JP";
  font-weight: bold;
  font-size: 0.8125rem;
  line-height: 1.6;
  color: #fff;
}
/* 赤い地の上で、白い地の文に対して淡い黄色というだけでは
   「押せる」と伝わらない（太さも地の文と同じ bold）。
   決済履歴の締めのリンクは下線付きなので、そちらに揃える。 */
.rankcheck__lead > a {
  color: #FFF3B1;
  text-decoration: underline;
  text-underline-offset: 0.15em;
}

.rankcheck__form {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 0.625rem;
  margin-top: 1rem;
}
/* 入力欄と「円」をひとかたまりの白い箱に見せる */
.rankcheck__field {
  display: flex;
  align-items: center;
  gap: 0.25rem;
  padding: 0 0.875rem;
  border-radius: 0.625rem;
  background: #fff;
}
.rankcheck__field:focus-within {
  box-shadow: 0 0 0 0.1875rem #FCD600;
}
.rankcheck__input {
  width: 9rem;
  min-height: 3rem;
  border: 0;
  background: transparent;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1.25rem;
  text-align: right;
  color: #3E2A15;
}
.rankcheck__input:focus {
  outline: none;
}
.rankcheck__unit {
  flex: none;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1rem;
  color: #3E2A15;
}
.rankcheck__btn {
  flex: none;
  min-height: 3rem;
  padding: 0 1.75rem;
  border: 0;
  border-radius: 10rem;
  background: #FCD600;
  color: #BF1D20;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1.0625rem;
  cursor: pointer;
  transition: transform 0.15s, filter 0.15s;
}
.rankcheck__btn:hover {
  filter: brightness(1.06);
}
.rankcheck__btn:active {
  transform: scale(0.97);
}
.rankcheck__btn:focus-visible {
  outline: 0.1875rem solid #fff;
  outline-offset: 0.1875rem;
}

.rankcheck__result {
  margin-top: 1rem;
  padding: 0.875rem 1rem;
  border-radius: 0.625rem;
  background: #FFF8E1;
  font-family: "Noto Sans JP";
  font-weight: bold;
  font-size: 0.9375rem;
  line-height: 1.7;
  color: #3E2A15;
}
.rankcheck__result[hidden] {
  display: none;
}
/* 順位と差額だけ赤く大きく。ここだけ読めば用が足りるようにする。 */
.rankcheck__result b {
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1.25em;
  color: #BF1D20;
}
/* 集計前の案内。入力欄を止めている理由をここで言う。 */
.rankcheck__wait {
  margin-top: 1rem;
  padding: 0.75rem 1rem;
  border-radius: 0.625rem;
  background: rgba(255, 255, 255, 0.14);
  font-family: "Noto Sans JP";
  font-weight: bold;
  font-size: 0.875rem;
  line-height: 1.6;
  color: #FFF3B1;
}
.rankcheck__wait[hidden] {
  display: none;
}
/* 使えない状態。入力欄とボタンを沈めて、押せないことを見た目で伝える。 */
.rankcheck.-waiting .rankcheck__field,
.rankcheck.-waiting .rankcheck__btn {
  opacity: 0.45;
}
.rankcheck.-waiting .rankcheck__btn {
  cursor: default;
}

.rankcheck__note {
  margin-top: 0.875rem;
  font-family: "Noto Sans JP";
  font-weight: bold;
  font-size: 0.75rem;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.85);
}

@media (max-width: 767px) {
  .rankcheck {
    margin-top: 1.75rem;
    padding: 1.25rem 0.875rem 1rem;
  }
  .rankcheck__input {
    width: 7.5rem;
    font-size: 1.125rem;
  }
  .rankcheck__btn {
    padding: 0 1.25rem;
    font-size: 1rem;
  }
}

/* 更新日程。「次回更新まで」のカウントダウンと同じ話題なので、
   赤パネル（.campaign__rank-block）の中に入れている。
   上に破線を引いて、ランキング／ラッキー賞と区切る。 */
.campaign__date-block {
  margin-top: 2.5rem;
  padding-top: 2.1875rem;
  border-top: 0.125rem dashed rgba(255, 255, 255, 0.45);
}
@media (max-width: 767px) {
  .campaign__date-block {
    margin-top: 1.75rem;
    padding-top: 1.5rem;
  }
}
/* 旧版は PC/SP で別画像（<picture>）だったが、支給されたのは
   title-cp05_sp.png の1点のみ。両方で共用している。 */
/* 見出しは画像（title-cp05_sp.png）。白フチ付きの黒文字なので赤地でも読める。 */
.campaign__date-block > img {
  width: 38.4375rem;
  max-width: 100%;
  display: block;
  margin: 0 auto;
}
@media (max-width: 767px) {
  .campaign__date-block > img {
    width: auto;
    /* 325px を上限にしつつ、赤パネルの内寸を超えないようにする。
       固定値だけだと幅の狭い端末で親からはみ出す。 */
    max-width: min(20.3125rem, 100%);
  }
}
.campaign__date-box {
  width: 100%;
  margin: 1.5625rem auto 0;
  max-width: 27.5rem;
  border-collapse: separate;
  border-spacing: 0.375rem;
  line-height: 1.4;
}
.campaign__date-box th, .campaign__date-box td {
  padding: 0.625rem 0.3125rem;
  text-align: center;
}
.campaign__date-box th {
  background-color: #231814;
  font-size: 1.125rem;
  font-weight: bold;
  color: #fff;
}
@media (max-width: 767px) {
  .campaign__date-box th {
    font-size: 1rem;
  }
}
.campaign__date-box td {
  background-color: #FFF8D0;
  font-size: 1.125rem;
}
@media (max-width: 767px) {
  .campaign__date-box td {
    font-size: 1rem;
  }
}
/* 次に来る更新日の行。data-next は countdown.js が付け替える。 */
.campaign__date-box tr[data-next] > td {
  position: relative;
  background-color: #FFE066;
  box-shadow: inset 0 0 0 0.125rem #FA5902;
  font-weight: bold;
}
.campaign__date-box tr[data-next] > td:first-child::after {
  position: absolute;
  content: "次回";
  top: -0.5rem;
  left: -0.25rem;
  padding: 0 0.4375rem;
  border-radius: 10rem;
  background: #FA5902;
  color: #fff;
  font-size: 0.75rem;
  font-weight: bold;
  line-height: 1.6;
}
.campaign__date-notes {
  margin-top: 1.5625rem;
  text-align: center;
  /* 赤パネルの中に入ったので、文字は白系にする */
  color: rgba(255, 255, 255, 0.85);
}
@media (max-width: 767px) {
  .campaign__date-notes {
    font-size: 0.9375rem;
    text-align: left;
  }
}

.bg-attention-top {
  margin-top: 4.375rem;
}

.bg-attention-top,
.bg-attention-bottom {
  position: relative;
  z-index: 50;
}

.attention {
  background-color: #FDF1BD;
  padding: 3.125rem;
  position: relative;
  z-index: 50;
}
.attention__box {
  background-color: #fff;
  position: relative;
  padding: 3.125rem 2.8125rem;
}
/* 赤文字＋黄マーカーの透過画像（795×80px）。淡黄（#FDF1BD）の上に重ねる。 */
/* 「本キャンペーン注意事項」。旧版は title-attention.webp
   （赤文字＋黄色のマーカー）。背景のグラデーションで再現している。 */
.attention__title {
  margin: 0 auto;
  position: relative;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: clamp(1.25rem, 3.4vw, 1.875rem);
  line-height: 1.3;
  color: #BF1D20;
  text-align: center;
}
.attention__title > span,
.attention__title.-text {
  background: linear-gradient(transparent 62%, #FFF066 62%);
}
.attention__title.-text {
  display: block;
  width: -webkit-fit-content;
  width: fit-content;
  max-width: 100%;
  padding: 0 0.25rem;
}
.attention__body {
  padding: 1.875rem 0 0;
}
.attention__notes {
  padding-left: 1em;
  text-indent: -1em;
  margin-top: 0.5rem;
}
@media (max-width: 767px) {
  .attention {
    padding: 0.625rem;
  }
  .attention__box {
    padding: 1.875rem 1.25rem;
  }
  .attention__title {
    width: 80%;
  }
  .attention__notes {
    font-size: 0.9375rem;
  }
}

.conditions {
  position: relative;
  padding: 6.25rem 0;
  /* 旧版は四隅に4枚（image-17〜20.webp）だったが素材が無い。
     bg-conditions01/02 が上下1枚ずつの帯でその代わりになる。
     PNGのまま使っているのは、透過＋平坦な図形のため
     WebPに変換すると約2倍に増えるため（実測 95KB → 182KB）。 */
  background: url("assets/bg-conditions01.png") no-repeat top center/100% auto,
              url("assets/bg-conditions02.png") no-repeat bottom center/100% auto;
}
/* 「＼＼ au PAY ご利用条件 ／／」は画像（title-conditions.png, 818×77）のまま。
   width: 90% で、幅 456px 未満のときは親に追従して縮む。 */
/* 「＼＼ au PAY ご利用条件 ／／」。旧版は title-conditions.png。
   前後の斜線は ::before / ::after で描いている。 */
.conditions__title {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
  margin: 0 auto;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: clamp(1.375rem, 3.6vw, 2.125rem);
  line-height: 1.3;
  color: #3E2A15;
  text-align: center;
}
.conditions__title::before,
.conditions__title::after {
  content: "";
  flex: none;
  width: 0.1875rem;
  height: 1.3em;
  border-radius: 10rem;
  background: #3E2A15;
}
.conditions__title::before {
  transform: rotate(-22deg);
}
.conditions__title::after {
  transform: rotate(22deg);
}
.conditions__text {
  margin: 2rem auto 0;
  width: 39.625rem;
  max-width: 100%;
  display: block;
}
.conditions__model {
  margin-top: 1.5rem;
  font-weight: bold;
  text-align: center;
}
.conditions__button {
  margin-top: 3.125rem;
  text-align: center;
}
@media (max-width: 767px) {
  .conditions {
    padding: 3.125rem 0;
    background: url("assets/bg-conditions01.png") no-repeat top center/100% auto,
                url("assets/bg-conditions02.png") no-repeat bottom center/100% auto;
  }
  .conditions__title {
    max-width: 17.5rem;
  }
  .conditions__text {
    margin-top: 1.5rem;
  }
  .conditions__model {
    font-size: 0.875rem;
    text-align: left;
    line-height: 1.6;
  }
  .conditions__button {
    margin-top: 1.875rem;
  }
}

.conditionsNotesBox {
  margin: 1.875rem auto 0;
  max-width: 52.5rem;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  border: solid 0.5rem #EBEBEB;
  padding: 1.5rem 2.5rem;
  border-radius: 1.25rem;
  background: white;
}
.conditionsNotesBox__title {
  font-weight: bold;
  font-size: 1.1875rem;
  padding-left: 1.9375rem;
  position: relative;
  letter-spacing: 0.05em;
}
.conditionsNotesBox__title::before {
  position: absolute;
  content: "";
  background: url("assets/icon-exclamation.svg") center center no-repeat;
  background-size: contain;
  width: 1.625rem;
  height: 1.4375rem;
  left: 0;
  top: 50%;
  -webkit-transform: translateY(-50%);
      -ms-transform: translateY(-50%);
          transform: translateY(-50%);
}
.conditionsNotesBox__notes {
  margin-top: 0.5rem;
  padding-bottom: 1.5rem;
  margin-bottom: 1.25rem;
  position: relative;
}
.conditionsNotesBox__notes::before {
  position: absolute;
  content: "";
  width: 100%;
  height: 0.125rem;
  left: 0;
  bottom: 0;
  background-color: #ffffff;
  background-image: radial-gradient(circle, #333333 0.0625rem, transparent 0.0625rem);
  background-position: center;
  background-size: 0.4375rem 0.4375rem;
}
.conditionsNotesBox__note {
  padding-left: 1.25rem;
  position: relative;
}
.conditionsNotesBox__note::before {
  position: absolute;
  content: "※";
  color: #E8380D;
  left: 0;
  top: 0;
}
.conditionsNotesBox__note + .conditionsNotesBox__note {
  margin-top: 0.25rem;
}
@media (max-width: 767px) {
  .conditionsNotesBox {
    padding: 1.25rem;
    border-width: 0.375rem;
    border-radius: 1rem;
  }
  .conditionsNotesBox__title {
    font-size: 1.0625rem;
  }
  .conditionsNotesBox__note {
    font-size: 0.9375rem;
  }
}

.contact {
  background: black;
  padding: 2.8125rem 0 3.125rem;
  text-align: center;
}
.contact__title {
  text-align: center;
  color: white;
  font-weight: bold;
  font-size: 1.875rem;
}
.contact__lead {
  color: #fff;
  font-weight: 400;
  margin-top: 1.25rem;
}
.contact__wrap {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  margin-top: 2.5rem;
  -webkit-column-gap: 4.25rem;
     -moz-column-gap: 4.25rem;
          column-gap: 4.25rem;
}
.contact__item {
  width: 23.75rem;
  max-width: calc(50% - 2.125rem);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.contact__text {
  margin-top: 1.5rem;
  line-height: 2;
  font-weight: 400;
  color: #fff;
  font-size: 0.9375rem;
  text-align: left;
}
@media (max-width: 767px) {
  .contact {
    padding: 2.5rem 0;
  }
  .contact__title {
    font-size: 1.25rem;
  }
  .contact__lead {
    font-size: 0.8125rem;
  }
  .contact__wrap {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    row-gap: 1.875rem;
    margin-top: 1.875rem;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
  .contact__item {
    width: 100%;
    max-width: none;
  }
  .contact__text {
    font-size: 0.8125rem;
    text-align: center;
    margin-top: 1rem;
    line-height: 1.7;
  }
}

.banner-head {
  padding: 1.625rem 1.25rem 1.5rem;
}
.banner-head__text {
  max-width: 46.625rem;
  margin: 0 auto;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: clamp(1.0625rem, 2.8vw, 1.75rem);
  line-height: 1.4;
  color: #3E2A15;
  text-align: center;
}
@media (max-width: 767px) {
  .banner-head {
    padding: 1rem 0.5rem 0.875rem;
  }
}

.banner {
  display: block;
  background: url("assets/bg-banner.png") repeat-x top center, #FFF055;
  background-size: 65.875rem auto;
  text-align: center;
  -webkit-transition: 0.3s;
  transition: 0.3s;
}
/* transition だけ書かれていて、変化する状態が無かった。
   リンクとして押せることが伝わるよう、hover と押下の反応を足す。 */
.banner:hover,
.banner:focus-visible {
  -webkit-filter: brightness(1.03);
          filter: brightness(1.03);
}
.banner:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: -0.1875rem;
}
.banner:active {
  -webkit-transform: scale(0.99);
          transform: scale(0.99);
}
.banner__main {
  padding: 2.5rem 1.25rem 1.875rem;
  max-width: 62.75rem;
  margin: 0 auto;
}
.banner__main img {
  display: block;
}
.banner__more {
  background: white;
  padding: 1.625rem 1.25rem 1.5rem;
}
.banner__moreText {
  max-width: 57.9375rem;
  margin: 0 auto;
}
.banner__moreText img {
  display: block;
}
@media (max-width: 767px) {
  .banner {
    background-size: cover;
  }
  .banner__main {
    padding: 1.25rem 0;
  }
  .banner__more {
    padding: 1rem 0.75rem;
  }
}

/* ==========================================================================
   対象店舗検索
   store-search.js がチップ・カード・ページングを描画する。
   ロゴは .storecard__logo のプレースホルダ。画像が届いたら
   background-image を差し替えるか、JSで <img> を入れる。
   ========================================================================== */

/* .campaign__box の中に入るので、枠は付けず背景だけ敷く。
   キャンペーン内容ブロックの .campaign__subBox と同じ扱い。 */
.storesearch__notice {
  margin-top: 1.25rem;
  padding: 1rem 1.25rem;
  border-radius: 0.75rem;
  background: #FFF3B1;
  font-size: 0.9375rem;
  line-height: 1.7;
  text-align: left;
}
.storesearch__notice-title {
  color: #BF1D20;
  font-weight: bold;
  margin-bottom: 0.25rem;
}

/* 検索ボックス。虫眼鏡は CSS だけで描いている（円＋柄）。 */
.storesearch__search {
  margin-top: 1.25rem;
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.875rem 1.25rem;
  border: 0.125rem solid #E2D9CE;
  border-radius: 10rem;
  background: #fff;
}
.storesearch__search:focus-within {
  border-color: #BF1D20;
}
.storesearch__search-ico {
  flex: none;
  position: relative;
  width: 1.125rem;
  height: 1.125rem;
  border: 0.1875rem solid #8a6d3b;
  border-radius: 50%;
  box-sizing: border-box;
}
.storesearch__search-ico::after {
  content: "";
  position: absolute;
  right: -0.375rem;
  bottom: -0.25rem;
  width: 0.5rem;
  height: 0.1875rem;
  background: #8a6d3b;
  border-radius: 0.1875rem;
  transform: rotate(45deg);
}
.storesearch__input {
  flex: 1 1 auto;
  min-width: 0;
  border: 0;
  outline: 0;
  background: transparent;
  font-size: 1rem;
  font-family: inherit;
  color: inherit;
}
.storesearch__input::placeholder {
  color: #a79b8d;
}

.storesearch__filter-label {
  margin-top: 1.25rem;
  text-align: left;
  font-weight: bold;
  font-size: 0.9375rem;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem;
}
.storesearch__tag {
  display: inline-block;
  padding: 0.25rem 0.75rem;
  border-radius: 0.375rem;
  background: #FA5902;
  color: #fff;
  font-size: 0.875rem;
}

/* エリア選択と現在地ボタンの横並び。狭い画面では折り返して縦に積む。
   align-items: stretch で現在地ボタンの高さをプルダウンに揃えている。 */
.storesearch__filter-row {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  gap: 0.75rem;
  margin-top: 0.75rem;
}

/* エリアのプルダウン。矢印は ::after で描いて、select 自体の
   既定の矢印は appearance: none で消している。 */
.storesearch__select {
  position: relative;
  flex: 1 1 13rem;
  max-width: 20rem;
}
.storesearch__select::after {
  content: "";
  position: absolute;
  top: 50%;
  right: 1.125rem;
  width: 0.5rem;
  height: 0.5rem;
  margin-top: -0.375rem;
  border-right: 0.1875rem solid #BF1D20;
  border-bottom: 0.1875rem solid #BF1D20;
  transform: rotate(45deg);
  pointer-events: none;
}
.storesearch__area {
  width: 100%;
  padding: 0.8125rem 2.75rem 0.8125rem 1.25rem;
  border: 0.125rem solid #E2D9CE;
  border-radius: 10rem;
  background: #fff;
  color: #3E2A15;
  font-family: inherit;
  font-size: 1rem;
  font-weight: bold;
  line-height: 1.4;
  cursor: pointer;
  /* 幅が足りないときは折り返さず省略記号にする（横並び時の高さズレ防止） */
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
}
.storesearch__area:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: 0.125rem;
}

/* SP は文字サイズと余白を詰める。 */
@media (max-width: 767px) {
  .storesearch__filter-row {
    gap: 0.5rem;
  }
  .storesearch__select {
    flex: 1 1 0;
    min-width: 0;
  }
  .storesearch__area {
    padding: 0.75rem 1.875rem 0.75rem 0.8125rem;
    font-size: 0.875rem;
  }
  .storesearch__select::after {
    right: 0.8125rem;
  }
}


/* 前回のエリアを復元したときの知らせ。
   勝手に絞られていると気付けないと「店舗が少ない」と誤解されるので、
   件数の真上に置いて、その場で解除できるようにしている。
   黄色の付箋のような見た目にして、検索結果そのものとは区別する。 */
.storesearch__restored {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 0.5rem 0.75rem;
  margin-top: 1.25rem;
  padding: 0.75rem 1rem;
  border: 0.125rem solid #F2D98B;
  border-radius: 0.625rem;
  background: #FFF8E1;
  color: #6B5424;
  font-size: 0.875rem;
  font-weight: bold;
  line-height: 1.5;
  text-align: left;
}
.storesearch__restored[hidden] {
  display: none;
}
.storesearch__restored-body > b {
  color: #BF1D20;
}
.storesearch__restored-undo {
  flex: none;
  padding: 0.375rem 0.875rem;
  border: 0.125rem solid #FA5902;
  border-radius: 10rem;
  background: #fff;
  color: #FA5902;
  font-family: inherit;
  font-size: 0.8125rem;
  font-weight: bold;
  cursor: pointer;
}
.storesearch__restored-undo:hover {
  background: #FA5902;
  color: #fff;
}
.storesearch__restored-undo:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: 0.125rem;
}

.storesearch__meta {
  text-align: left;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  margin-top: 1.25rem;
}
.storesearch__count {
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1.125rem;
}
.storesearch__count b {
  color: #BF1D20;
  font-size: 1.375rem;
}
.storesearch__pager {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  font-weight: bold;
  font-size: 0.9375rem;
}
/* タップしやすいよう高さ44px以上を確保する（iOSの推奨値）。 */
.storesearch__pager button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2.75rem;
  padding: 0.375rem 1.125rem;
  border: 0.125rem solid #E2D9CE;
  border-radius: 10rem;
  background: #fff;
  font-family: inherit;
  font-size: 0.875rem;
  font-weight: bold;
  color: #3E2A15;
  cursor: pointer;
}
.storesearch__pager button:disabled {
  opacity: 0.4;
  cursor: default;
}

.storesearch__list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1rem;
  margin-top: 1rem;
}
.storesearch__empty {
  margin-top: 1.5rem;
  text-align: center;
  font-weight: bold;
  color: #8a6d3b;
}
.storesearch__empty[hidden] {
  display: none;
}
/* 0件のときに行き止まりにならないよう、絞り込みを戻す導線を置く。 */
.storesearch__clear {
  margin-top: 0.75rem;
  padding: 0.5rem 1.25rem;
  border: 0.125rem solid #FA5902;
  border-radius: 10rem;
  background: #fff;
  color: #FA5902;
  font-family: inherit;
  font-size: 0.875rem;
  font-weight: bold;
  cursor: pointer;
}
.storesearch__clear:hover {
  background: #FA5902;
  color: #fff;
}
.storesearch__clear:focus-visible {
  outline: 0.1875rem solid #BF1D20;
  outline-offset: 0.125rem;
}

/* 市区町村の2段目。都道府県の下に続ける。 */
.storesearch__select.-city {
  margin-top: 0.5rem;
}
.storesearch__select.-city[hidden] {
  display: none;
}

/* 対象外店舗。一覧の下に置く。 */
.storesearch__excluded {
  margin-top: 1.75rem;
  padding: 1rem 1.25rem;
  border-radius: 0.75rem;
  background: #FFF3B1;
  text-align: left;
}
.storesearch__excluded[hidden] {
  display: none;
}
.storesearch__excluded-title {
  margin-bottom: 0.375rem;
  color: #BF1D20;
  font-weight: bold;
  font-size: 0.9375rem;
}
/* 店名の後ろに添える補足（※臨時休業中 など）。店名と区別して小さく。 */
.storesearch__excluded-note {
  margin-left: 0.375rem;
  color: #8a6d3b;
  font-weight: normal;
  font-size: 0.8125rem;
}

/* カード全体が Googleマップへのリンク。クリックは store-search.js が
   横取りして確認モーダルを挟む。 */
.storecard {
  display: flex;
  /* ロゴをテキスト側の高さに対して上下中央に置く */
  align-items: center;
  gap: 0.875rem;
  padding: 1rem;
  border: 0.125rem solid #F0E6DA;
  border-radius: 0.75rem;
  background: #fff;
  color: inherit;
  text-decoration: none;
  cursor: pointer;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.storecard:hover,
.storecard:focus-visible {
  border-color: #BF1D20;
  box-shadow: 0 0.125rem 0.5rem rgba(191, 29, 32, 0.15);
}
.storecard:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: 0.125rem;
}
/* 「地図を見る ›」。カードがリンクであることを示す手がかり。 */
.storecard__map {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  margin-top: 0.5rem;
  color: #FA5902;
  font-size: 0.8125rem;
  font-weight: bold;
}
.storecard__map::after {
  content: "";
  width: 0.3125rem;
  height: 0.5rem;
  background: currentColor;
  -webkit-mask: url("assets/icon-arrow.svg") no-repeat center / contain;
          mask: url("assets/icon-arrow.svg") no-repeat center / contain;
}
/* 店舗ロゴ（torikizoku_logo.jpg / 256×256 の正方形）。
   枠も正方形にして、ロゴ自体の黄色地が端まで出るようにしている。
   正方形以外のロゴに差し替えても object-fit: contain で収まる。 */
.storecard__logo {
  display: block;
  flex: none;
  width: 4.5rem;
  height: 4.5rem;
  border: 0.0625rem solid #E2D9CE;
  border-radius: 0.375rem;
  overflow: hidden;
  background: #fff;
}
.storecard__logo img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.storecard__body {
  display: block;
  min-width: 0;
  flex: 1 1 auto;
}
.storecard__pref {
  display: inline-block;
  padding: 0.125rem 0.75rem;
  border-radius: 10rem;
  background: #BF1D20;
  color: #fff;
  font-size: 0.75rem;
  font-weight: bold;
}
.storecard__name {
  display: block;
  margin-top: 0.375rem;
  font-weight: bold;
  font-size: 1rem;
  line-height: 1.4;
}
.storecard__addr {
  display: block;
  margin-top: 0.25rem;
  padding-bottom: 0.5rem;
  border-bottom: 0.0625rem dashed #E2D9CE;
  color: #6b5d4e;
  font-size: 0.8125rem;
  line-height: 1.6;
  overflow-wrap: anywhere;
}

@media (max-width: 767px) {
  .storesearch {
    padding: 2.5rem 0 3rem;
  }
  .storesearch__list {
    grid-template-columns: minmax(0, 1fr);
  }
  .storesearch__meta {
    margin-top: 1rem;
  }
  .storecard__logo {
    width: 3.75rem;
    height: 3.75rem;
  }
}

/* ==========================================================================
   外部サイト遷移の確認モーダル
   開閉は hidden 属性の付け外しだけ（JSはクラスを触らない）。
   <dialog> を使っていないのは、このLPが iOS12 以上を対象にしているため
   （<dialog> は iOS15.4 以降）。
   ========================================================================== */
.modal[hidden] {
  display: none;
}
.modal {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.25rem;
  box-sizing: border-box;
}
.modal__overlay {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.55);
}
.modal__panel {
  position: relative;
  width: 100%;
  max-width: 26rem;
  box-sizing: border-box;
  padding: 1.75rem 1.5rem 1.5rem;
  background: #fff;
  border: 0.25rem solid #BF1D20;
  border-radius: 1rem;
  text-align: center;
  box-shadow: 0 0.75rem 2rem rgba(0, 0, 0, 0.3);
}
.modal__title {
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1.125rem;
  color: #BF1D20;
  line-height: 1.4;
}
.modal__store {
  margin-top: 0.875rem;
  padding: 0.5rem 0.75rem;
  background: #FFF3B1;
  border-radius: 0.5rem;
  font-weight: bold;
  font-size: 1rem;
  line-height: 1.5;
  overflow-wrap: anywhere;
}
.modal__text {
  margin-top: 0.875rem;
  font-size: 0.875rem;
  line-height: 1.7;
  color: #3E2A15;
}
.modal__actions {
  display: flex;
  gap: 0.75rem;
  margin-top: 1.5rem;
}
.modal__btn {
  flex: 1 1 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.875rem 0.5rem;
  border: 0;
  border-radius: 10rem;
  font-family: inherit;
  font-size: 0.9375rem;
  font-weight: bold;
  line-height: 1.3;
  text-decoration: none;
  cursor: pointer;
}
.modal__btn.-cancel {
  background: #EFE9E1;
  color: #6b5d4e;
}
.modal__btn.-go {
  background: #FA5902;
  color: #fff;
}
.modal__btn:focus-visible {
  outline: 0.1875rem solid #BF1D20;
  outline-offset: 0.125rem;
}
@media (max-width: 767px) {
  .modal__panel {
    padding: 1.5rem 1.125rem 1.25rem;
  }
  .modal__actions {
    gap: 0.5rem;
  }
  .modal__btn {
    font-size: 0.875rem;
    padding: 0.8125rem 0.375rem;
  }
}

.magazine {
  background: #DF5510;
}
.magazine__btn {
  display: block;
  margin: 0 auto;
  max-width: 85.375rem;
  transition: transform 0.15s, filter 0.15s;
}
.magazine__btn:hover,
.magazine__btn:focus-visible {
  filter: brightness(1.03);
}
.magazine__btn:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: -0.1875rem;
}
.magazine__btn:active {
  transform: scale(0.99);
}

/* ==========================================================================
   4. テーマ変数
      旧版では .lp-preview の style 属性に1行で書かれていたもの。
      ファイル末尾に置くことで、--section-pad-y を含め
      .lp-gap-* プリセットより後勝ちになる（旧版の inline style と同じ挙動）。
   ========================================================================== */

.lp-preview {
  /* カラー */
  --color-primary: #FF6600;
  --color-primary-rgb: 255 102 0;
  --color-primary-light: #FF8C00;
  --color-primary-dark: #E55A00;
  --color-background: #FFF8F0;
  --color-background-deep: #FFE8CC;
  --color-surface: #FFFFFF;
  --color-text: #1A1A1A;
  --color-text-muted: #666666;
  --color-heading: #1A1A1A;
  --color-link: #FF6600;
  --color-border: #FFE8CC;
  --color-ink: #3E2A15;
  --color-ink-soft: rgb(120, 106, 91);
  --on-primary: #1a1a1a;

  /* バッジ */
  --color-badge: #FF6600;
  --color-badge-text: #FFFFFF;
  --badge-band-bg: #FF6600;
  --badge-band-color: #FFFFFF;

  /* セクションタイトル */
  --section-title-bg: #FF6600;
  --section-title-bg-color-1: #FF6600;
  --section-title-border-width: 0px;
  --section-title-border-color: #000000;
  --section-title-shadow: none;
  --section-title-text-color: #FFFFFF;

  /* タイポグラフィ */
  --font-family: 'Noto Sans JP', sans-serif;
  --heading-weight: 800;
  --body-size: 14px;
  --font-num: var(--font-anton, 'Anton'), 'Noto Sans JP', sans-serif;
  --font-pop: var(--font-mplus, 'M PLUS Rounded 1c'), 'Noto Sans JP', sans-serif;

  /* 角丸・影 */
  --radius-card: 12px;
  --radius-button: 8px;
  --radius-badge: 20px;
  --card-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
  --block-shadow: none;
  --shadow-pop-offset: 0 4px 0;

  /* 余白 */
  --section-pad-y: 24px;

  min-height: 100%;

  /* LP全体の地色。旧版は body の #F8F9FA（寒色グレー）がそのまま透けていたが、
     黄（#FCD600）・赤（#BF1D20）・淡黄（#FDF1BD）の配色に対して浮いていたため、
     テーマの --color-background と同じ暖色のクリームに揃えた。
     背景を敷いていないセクション（conditions / contact 周りの余白など）が
     すべてこの色になる。 */
  background: var(--color-background);
}

/* セクション枠（旧版では各セクションの style 属性に直接書かれていた）。
   background: transparent は既定値のため省略。 */
.imported-html-block {
  position: relative;
  isolation: isolate;
  overflow-x: clip;
}

/* ==========================================================================
   SP固定CTA
   SPだけ画面下に追従させる。出す1本は <html data-campaign="…">（countdown.js）
   で決まり、JSはクラスを触らない。
   時計は載せない。常時視界に残るので数字が動くとノイズになる。
   PCでは display: none。モーダル（z-index 1000）より下に置く。
   ========================================================================== */
.sticky-cta {
  display: none;
}
.sticky-cta__link {
  display: none;
}

@media (max-width: 767px) {
  .sticky-cta {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 100;
    /* 主ボタンと「目次」を横に並べる。高さは主ボタンのまま変えない。 */
    display: flex;
    align-items: stretch;
    gap: 0.5rem;
    padding: 0.5rem 0.75rem;
    padding-bottom: calc(0.5rem + env(safe-area-inset-bottom));
    background: rgba(255, 255, 255, 0.92);
    -webkit-backdrop-filter: blur(0.375rem);
            backdrop-filter: blur(0.375rem);
    box-shadow: 0 -0.125rem 0.75rem rgba(0, 0, 0, 0.18);
  }
  :root[data-campaign="before"] .sticky-cta__link.-before,
  :root[data-campaign="during"] .sticky-cta__link.-during,
  :root[data-campaign="ended"] .sticky-cta__link.-ended {
    display: flex;
    flex: 1 1 auto;
    min-width: 0;
  }
  /* 目次ボタン。主ボタンの優先度を落とさないよう、白抜きで控えめに。 */
  .sticky-cta__menu {
    flex: none;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.1875rem;
    width: 4.25rem;
    min-height: 3.25rem;
    padding: 0.25rem;
    border: 0.125rem solid #FA5902;
    border-radius: 10rem;
    background: #fff;
    color: #FA5902;
    font-family: "M PLUS 1";
    font-weight: 800;
    font-size: 0.75rem;
    line-height: 1.2;
    cursor: pointer;
  }
  .sticky-cta__menu:focus-visible {
    outline: 0.1875rem solid #BF1D20;
    outline-offset: 0.125rem;
  }
  /* 三本線のアイコン。画像を増やさずCSSだけで描く。 */
  .sticky-cta__menu-ico {
    width: 1.125rem;
    height: 0.75rem;
    background:
      linear-gradient(currentColor, currentColor) top/100% 0.125rem no-repeat,
      linear-gradient(currentColor, currentColor) center/100% 0.125rem no-repeat,
      linear-gradient(currentColor, currentColor) bottom/100% 0.125rem no-repeat;
  }
  .sticky-cta__link {
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.0625rem;
    min-height: 3.25rem;
    padding: 0.375rem 1rem;
    border-radius: 10rem;
    background: #FA5902;
    color: #fff;
    font-family: "M PLUS 1";
    font-weight: 800;
    line-height: 1.25;
    text-align: center;
    text-decoration: none;
  }
  .sticky-cta__link:focus-visible {
    outline: 0.1875rem solid #BF1D20;
    outline-offset: 0.125rem;
  }
  .sticky-cta__sub {
    font-size: 0.6875rem;
    opacity: 0.9;
  }
  .sticky-cta__main {
    font-size: 1.0625rem;
  }
  /* 追従バーが最後のコンテンツに重ならないよう、その分だけ足元を空ける。 */
  body {
    padding-bottom: 4.5rem;
    padding-bottom: calc(4.5rem + env(safe-area-inset-bottom));
  }
}

/* ==========================================================================
   順位表まわりの補助UI（rank-tools.js）
   ========================================================================== */

/* 前回見たときから更新されていたときのバッジ。赤パネルの中に置く。 */
.rank-updated[hidden] {
  display: none;
}
/* 再訪したときに「今週の順位は新しい」と分かるのが一番価値のある情報なので、
   小さなピルではなく、金枠のパネルとして見せる。
   出るのは中身が入れ替わったときだけ（rank-tools.js が判定）。 */
.rank-updated {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
  width: -webkit-fit-content;
  width: fit-content;
  max-width: 100%;
  margin: 1.25rem auto 0;
  padding: 0.75rem 1.25rem;
  border: 0.1875rem solid #FFF3B1;
  border-radius: 0.75rem;
  background: rgba(0, 0, 0, 0.14);
  text-align: left;
}
.rank-updated__tag {
  flex: none;
  padding: 0.1875rem 0.625rem;
  border-radius: 0.25rem;
  background: #FFF3B1;
  color: #BF1D20;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 0.875rem;
  line-height: 1.4;
  letter-spacing: 0.04em;
  /* 一度だけ軽く光らせる。繰り返さないのでうるさくならない。 */
  animation: rank-updated-pop 1.1s ease-out 2;
}
.rank-updated__body > b {
  display: block;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1.0625rem;
  line-height: 1.4;
  color: #fff;
}
.rank-updated__body > span {
  display: block;
  margin-top: 0.125rem;
  font-weight: bold;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: rgba(255, 255, 255, 0.85);
}
@keyframes rank-updated-pop {
  0%, 100% { transform: scale(1); }
  40% { transform: scale(1.12); }
}
@media (prefers-reduced-motion: reduce) {
  .rank-updated__tag {
    animation: none;
  }
}
@media (max-width: 767px) {
  .rank-updated {
    gap: 0.5rem;
    padding: 0.625rem 0.875rem;
  }
  .rank-updated__tag {
    font-size: 0.75rem;
    padding: 0.125rem 0.5rem;
  }
  .rank-updated__body > b {
    font-size: 0.9375rem;
  }
  .rank-updated__body > span {
    font-size: 0.75rem;
  }
}


/* ==========================================================================
   決済履歴の確認手順
   ========================================================================== */
.howto {
  margin-top: 1.25rem;
  text-align: left;
}
.howto__step {
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
  padding: 0.75rem 0;
  border-top: 0.0625rem dashed #E2D9CE;
}
.howto__step:last-child {
  border-bottom: 0.0625rem dashed #E2D9CE;
}
.howto__num {
  flex: none;
  width: 1.875rem;
  height: 1.875rem;
  border-radius: 50%;
  background: #BF1D20;
  color: #fff;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1.0625rem;
  line-height: 1.875rem;
  text-align: center;
}
.howto__body {
  display: block;
  line-height: 1.5;
}
.howto__body > b {
  display: block;
  font-weight: bold;
  font-size: 1.0625rem;
  color: #3E2A15;
}
.howto__body > span {
  display: block;
  margin-top: 0.125rem;
  font-size: 0.875rem;
  color: #8a6d3b;
}
.howto__links {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.75rem;
  margin-top: 1.25rem;
}
.howto__link {
  display: inline-block;
  padding: 0.6875rem 1.25rem;
  border: 0.125rem solid #FA5902;
  border-radius: 10rem;
  background: #fff;
  color: #FA5902;
  font-weight: bold;
  font-size: 0.9375rem;
  line-height: 1.3;
  text-decoration: none;
}
.howto__link:hover {
  background: #FA5902;
  color: #fff;
}
.howto__link:focus-visible {
  outline: 0.1875rem solid #BF1D20;
  outline-offset: 0.1875rem;
}
.howto__after {
  margin-top: 1rem;
  font-weight: bold;
  font-size: 0.9375rem;
  line-height: 1.7;
}
.howto__after > a {
  color: #BF1D20;
  text-decoration: underline;
  text-underline-offset: 0.125rem;
}
@media (max-width: 767px) {
  .howto__body > b {
    font-size: 0.9375rem;
  }
  .howto__body > span {
    font-size: 0.8125rem;
  }
  .howto__links {
    flex-direction: column;
    align-items: stretch;
    gap: 0.5rem;
  }
  .howto__link {
    text-align: center;
  }
  .howto__after {
    font-size: 0.875rem;
    text-align: left;
  }
}

/* ==========================================================================
   よくある質問
   <details>/<summary> の標準機能で開閉するのでJSは無い。
   ========================================================================== */
/* 画像素材のないテキスト見出し。画像版と同じ赤帯に揃える。 */
.campaign__heading.-text {
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: clamp(1.25rem, 3vw, 1.75rem);
  line-height: 1.3;
  color: #fff;
}
.faq {
  text-align: left;
}
.faq__item {
  border-bottom: 0.0625rem solid #E2D9CE;
}
.faq__item:first-child {
  border-top: 0.0625rem solid #E2D9CE;
}
.faq__q {
  position: relative;
  display: block;
  padding: 1rem 2.5rem 1rem 1.75rem;
  font-weight: bold;
  font-size: 1.0625rem;
  line-height: 1.5;
  color: #3E2A15;
  cursor: pointer;
  list-style: none;
}
/* Safari の既定マーカーを消す */
.faq__q::-webkit-details-marker {
  display: none;
}
.faq__q:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: -0.1875rem;
}
/* 行頭の Q */
.faq__q::before {
  position: absolute;
  content: "Q";
  top: 1rem;
  left: 0;
  color: #BF1D20;
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1.125rem;
  line-height: 1.4;
}
/* 右端の開閉マーク。開いたら縦棒を消して「−」にする。 */
.faq__q::after {
  position: absolute;
  content: "";
  top: 50%;
  right: 0.5rem;
  width: 0.875rem;
  height: 0.875rem;
  margin-top: -0.4375rem;
  background:
    linear-gradient(#BF1D20, #BF1D20) center/100% 0.1875rem no-repeat,
    linear-gradient(#BF1D20, #BF1D20) center/0.1875rem 100% no-repeat;
  transition: transform 0.2s;
}
.faq__item[open] .faq__q::after {
  background: linear-gradient(#BF1D20, #BF1D20) center/100% 0.1875rem no-repeat;
  transform: rotate(180deg);
}
.faq__a {
  padding: 0 0 1.125rem 1.75rem;
  font-size: 0.9375rem;
  line-height: 1.8;
  color: #3E2A15;
}
.faq__a > p + p {
  margin-top: 0.5rem;
}
.faq__a a {
  color: #BF1D20;
  font-weight: bold;
  text-decoration: underline;
  text-underline-offset: 0.125rem;
}
.faq__more {
  margin-top: 1.25rem;
  text-align: center;
  font-weight: bold;
  font-size: 0.9375rem;
}
@media (max-width: 767px) {
  .faq__q {
    padding: 0.875rem 2rem 0.875rem 1.5rem;
    font-size: 0.9375rem;
  }
  .faq__q::before {
    top: 0.875rem;
    font-size: 1rem;
  }
  .faq__a {
    padding-left: 1.5rem;
    font-size: 0.875rem;
  }
}

/* ==========================================================================
   判定結果のシェア
   ========================================================================== */
.bcshare[hidden] {
  display: none;
}
/* 赤パネルの中に直接置くので、文字は白系で組む。 */
.bcshare {
  margin-top: 1.75rem;
  padding-top: 1.25rem;
  border-top: 0.125rem dashed rgba(255, 255, 255, 0.45);
}
.bcshare__title {
  font-family: "M PLUS 1";
  font-weight: 800;
  font-size: 1.0625rem;
  color: #fff;
}
.bcshare__links {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.5rem;
  margin-top: 0.625rem;
}
/* タップしやすいよう高さ44px以上を確保する（iOSの推奨値）。 */
.bcshare__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2.75rem;
  padding: 0.5rem 1.25rem;
  border: 0;
  border-radius: 10rem;
  font-family: inherit;
  font-size: 0.875rem;
  font-weight: bold;
  line-height: 1.4;
  text-decoration: none;
  color: #fff;
  cursor: pointer;
}
.bcshare__btn.-x {
  background: #000;
}
.bcshare__btn.-line {
  background: #06C755;
}
.bcshare__btn.-native {
  background: transparent;
  box-shadow: inset 0 0 0 0.125rem #fff;
}
.bcshare__btn[hidden] {
  display: none;
}
.bcshare__btn:hover {
  opacity: 0.85;
}
.bcshare__btn:focus-visible {
  outline: 0.1875rem solid #FA5902;
  outline-offset: 0.1875rem;
}
.bcshare__note {
  margin-top: 0.75rem;
  font-size: 0.75rem;
  line-height: 1.7;
  color: rgba(255, 255, 255, 0.85);
}

/* ページ内リンクの移動をなめらかにする。動きを抑える設定なら即時移動。 */
@media (prefers-reduced-motion: no-preference) {
  html {
    scroll-behavior: smooth;
  }
}



/* 順位表の画像シェア。パネルと同じ赤だと面が消えるので金色にする。 */
.bcshare__btn.-img {
  background: #FFF3B1;
  color: #BF1D20;
}
.bcshare__btn:disabled {
  opacity: 0.6;
  cursor: progress;
}
.bcshare__msg:empty {
  display: none;
}
.bcshare__msg {
  margin-top: 0.625rem;
  font-weight: bold;
  font-size: 0.8125rem;
  line-height: 1.6;
  color: #FFF3B1;
}
.bcshare__preview[hidden] {
  display: none;
}
.bcshare__preview {
  margin: 0.75rem auto 0;
  max-width: 24rem;
}
.bcshare__preview img {
  display: block;
  width: 100%;
  height: auto;
  border: 0.0625rem solid #E2D9CE;
  border-radius: 0.5rem;
}

/* ==========================================================================
   モーションシステム

   motion.js が <html data-anim="on"> を付けたときだけ有効になる。
   JSが動かない環境では、この節の指定ごと効かないので要素は見えたまま。

   動かすのは transform と opacity だけに限っている。
   全長が約14,700pxあるページなので、レイアウトや塗りを毎フレーム
   起こすプロパティ（width / top / box-shadow など）は使わない。

   常時ループする動きは意図的に数を絞っている（デコ4枚・∞・王冠3つ・
   「ねらいめ」バッジ）。増やすほど安っぽくなり、端末も熱くなる。
   ========================================================================== */
:root {
  /* 減速。ふつうの登場はこれ */
  --mo-ease: cubic-bezier(0.22, 0.8, 0.3, 1);
  /* 少しだけ行き過ぎて戻る。出現を強調したいものだけ */
  --mo-ease-spring: cubic-bezier(0.34, 1.4, 0.5, 1);
  --mo-dur: 0.58s;
}

/* ---- 登場 ----------------------------------------------------------
   方向は motion.js が data-fade の値で指定する。
   連なりの遅延は --mo-delay（同じく motion.js がインラインで入れる）。 */
:root[data-anim="on"] [data-fade] {
  opacity: 0;
  transform: translate3d(0, 1.75rem, 0);
  transition:
    opacity var(--mo-dur) var(--mo-ease) var(--mo-delay, 0ms),
    transform var(--mo-dur) var(--mo-ease) var(--mo-delay, 0ms);
}
:root[data-anim="on"] [data-fade="left"]  { transform: translate3d(-1.5rem, 0, 0); }
:root[data-anim="on"] [data-fade="right"] { transform: translate3d(1.5rem, 0, 0); }
:root[data-anim="on"] [data-fade="scale"] { transform: scale(0.9); }
:root[data-anim="on"] [data-fade="rise"] {
  transform: translate3d(0, 2.5rem, 0) scale(0.97);
  transition-timing-function: var(--mo-ease-spring);
}
:root[data-anim="on"] [data-fade][data-shown] {
  opacity: 1;
  transform: none;
}

/* ---- 金額のカウントアップ中 ----------------------------------------
   桁ごとに字幅が違うと数字が踊るので、等幅の数字に切り替える。
   幅そのものは motion.js が min-width で押さえている。 */
:root[data-anim="on"] [data-countup] {
  font-variant-numeric: tabular-nums;
}

/* 桁めくり（秒が変わるたびに数字を差し替える演出）はここにあったが、
   毎秒アニメーションが走り続けるため取りやめた。 */

/* ---- デコレーションのふわふわ --------------------------------------
   焼き鳥の串6本。位相をずらして、揃って動かないようにする。
   傾きは .deco-img（親）側なので、ここは img に掛けて二重取りを避ける。 */
@keyframes mo-float {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0deg); }
  50%      { transform: translate3d(0, -0.5rem, 0) rotate(-2.5deg); }
}
:root[data-anim="on"] .deco-img img {
  animation: mo-float 4.2s ease-in-out infinite;
}
:root[data-anim="on"] .-deco02 img { animation-duration: 5s;   animation-delay: -1.4s; }
:root[data-anim="on"] .-deco03 img { animation-duration: 4.6s; animation-delay: -2.6s; }
:root[data-anim="on"] .-deco06 img { animation-duration: 5.4s; animation-delay: -0.8s; }
:root[data-anim="on"] .-deco04 img { animation-duration: 5.8s; animation-delay: -2.2s; }
:root[data-anim="on"] .-deco05 img { animation-duration: 4.4s; animation-delay: -3.6s; }
:root[data-anim="on"] .-deco07 img { animation-duration: 4.8s; animation-delay: -3.1s; }
:root[data-anim="on"] .-deco08 img { animation-duration: 5.2s; animation-delay: -2.0s; }

/* ---- 豆提灯のたわみ -------------------------------------------------
   全幅に渡した紐なので、回すと端が見えてしまう。上下にごく浅く
   揺らして、風で紐がたわむ程度に留める。
   位置は top で取っているので、ここは transform だけを動かせばよい。 */
@keyframes mo-garland {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(0.25rem); }
}

/* ---- 祭提灯の揺れ ---------------------------------------------------
   吊り紐の位置（上端中央）を支点に振る。transform-origin を変えないと
   中心で回ってしまい、浮いているように見えてしまう。
   左右で周期をずらして、同じ振り子に見えないようにする。 */
@keyframes mo-lantern {
  0%, 100% { transform: rotate(-2.2deg); }
  50%      { transform: rotate(2.2deg); }
}
:root[data-anim="on"] .lantern {
  transform-origin: 50% 6%;
  animation: mo-lantern 3.6s ease-in-out infinite;
}
:root[data-anim="on"] .lantern.-l2 {
  animation-duration: 4.3s;
  animation-delay: -1.2s;
}
:root[data-anim="on"] .chapter2__garland {
  animation: mo-garland 6s ease-in-out infinite;
}

/* ---- ∞（集計中）のゆらぎ -------------------------------------------
   motion.js が ∞ を <span class="mo-tbd"> で包み、その span を動かす。
   セルそのものではなく文字だけを包むので背景は影響を受けず、
   opacity なので塗り直しではなく合成処理で済む。
   なぜ td に直接かけないかは motion.js の initTbd に書いてある。 */
@keyframes mo-tbd {
  0%, 100% { opacity: 0.5; }
  50%      { opacity: 1; }
}
:root[data-anim="on"] .mo-tbd {
  display: inline-block;
  animation: mo-tbd 2.6s ease-in-out infinite;
}
/* 行ごとに少しずらして、表全体が一斉に明滅しないようにする */
:root[data-anim="on"] tr:nth-child(2n) .mo-tbd { animation-delay: -0.6s; }
:root[data-anim="on"] tr:nth-child(3n) .mo-tbd { animation-delay: -1.3s; }

/* ---- 王冠のきらめき -------------------------------------------------
   1〜3位だけ。位置決めの translate(-50%,-50%) を打ち消さないよう、
   キーフレーム側にも同じ translate を書いている。 */
@keyframes mo-crown {
  0%, 100% { transform: translate(-50%, -50%) scale(1)    rotate(0deg); }
  50%      { transform: translate(-50%, -50%) scale(1.07) rotate(-3deg); }
}
:root[data-anim="on"] .campaign__rank-box .king::after {
  animation: mo-crown 3.2s ease-in-out infinite;
}
:root[data-anim="on"] .campaign__rank-box .king-02::after { animation-delay: -1s; }
:root[data-anim="on"] .campaign__rank-box .king-03::after { animation-delay: -2s; }

/* ---- 数え上がりきった瞬間のポップ -----------------------------------
   1〜3位の金額だけ。motion.js がカウントアップを終えたときに
   data-mo-pop を付ける。連なりの遅延が80msあるので、
   上から順に3回弾んで着地する。

   ※ここは当初「金色の光が流れる」演出にしていたが、
     background-clip:text は文字色が不透明だと光が文字の裏に隠れて
     見えず、文字色を透明にすると今度は文字が消える。
     黄色いパネルに黒い文字という組み合わせでは濁るだけなので、
     確実に伝わるポップに変えた。 */
@keyframes mo-pop-num {
  0%   { transform: scale(1); }
  40%  { transform: scale(1.14); }
  100% { transform: scale(1); }
}
:root[data-anim="on"] .campaign__point-high .point[data-mo-pop] {
  animation: mo-pop-num 0.44s var(--mo-ease-spring);
}

/* ---- シャイン（最新順位パネル全体を光が横切る） ---------------------
   このLPの主役である最新順位セクションの1箇所だけ。
   増やすと安っぽくなるので、他のセクションには付けないこと。

   対象はパネル全体（SPで約315×2,796px＝7.4画面分）。
   ラッキー賞も更新日程表もこの中にあるので、まとめて光が通る。

   ■ 傾きを -8deg と浅くしている理由
   skewX は要素の中心を軸にねじるので、ずれる量は高さに比例する。
   見出しだけ（高さ50px）なら -22deg でも数十pxだが、
   2,796px のパネルで同じ角度にすると上下端が±565pxもずれて、
   光の筋ではなく巨大な斜めのワイプになってしまう。
   -8deg なら上下端のずれは±196pxで、画面1つ分では
   ちょうど斜めに横切って見える。

   ■ 帯は「広いぼかしの中に細い芯」
   等間隔の3点グラデーション（0 → 0.3 → 0）だと明るい部分が帯の幅
   いっぱいに広がって輪郭が見え、光ではなく四角が横切っているように
   見える。実際そうなった。
   mix-blend-mode: screen も試したが、白との screen は
   ほぼ同じ結果になるだけで効果がないので使っていない。

   ■ 周期
   6.5秒のうち0%→22%（約1.4秒）で走り抜け、残り約5秒は何も起きない。
   面積が大きいぶん、見出しだけのときより間を長く取らないと、
   順位表を読んでいる最中に何度も光って気が散る。
   動かすのは transform だけなので塗り直しは発生しない。 */
@keyframes mo-shine {
  0%        { transform: translateX(-250%) skewX(-8deg); }
  22%, 100% { transform: translateX(400%)  skewX(-8deg); }
}
:root[data-anim="on"] .campaign__rank-block::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 46%;
  height: 100%;
  pointer-events: none;
  background: linear-gradient(90deg,
    rgba(255, 255, 255, 0)    0%,
    rgba(255, 255, 255, 0.04) 36%,
    rgba(255, 255, 255, 0.32) 50%,
    rgba(255, 255, 255, 0.04) 64%,
    rgba(255, 255, 255, 0)    100%);
  animation: mo-shine 6.5s ease-in-out infinite;
}

/* ---- 店舗カードの入れ替わり ----------------------------------------
   検索するたびに作り直されるので、CSSアニメだけで勝手に流れる。
   1ページ8件なので遅延も8段まで。 */
@keyframes mo-card-in {
  from { opacity: 0; transform: translate3d(0, 0.75rem, 0); }
  to   { opacity: 1; transform: none; }
}
:root[data-anim="on"] .storecard {
  animation: mo-card-in 0.42s var(--mo-ease) both;
}
:root[data-anim="on"] .storecard:nth-child(2) { animation-delay: 0.04s; }
:root[data-anim="on"] .storecard:nth-child(3) { animation-delay: 0.08s; }
:root[data-anim="on"] .storecard:nth-child(4) { animation-delay: 0.12s; }
:root[data-anim="on"] .storecard:nth-child(5) { animation-delay: 0.16s; }
:root[data-anim="on"] .storecard:nth-child(6) { animation-delay: 0.2s; }
:root[data-anim="on"] .storecard:nth-child(7) { animation-delay: 0.24s; }
:root[data-anim="on"] .storecard:nth-child(8) { animation-delay: 0.28s; }

/* ---- FAQ の開閉 ------------------------------------------------------
   <details> は閉じると中身が描画されなくなるため、閉じる側は
   アニメーションできない。開く側だけを動かしている。 */
@keyframes mo-faq-open {
  from { opacity: 0; transform: translate3d(0, -0.4rem, 0); }
  to   { opacity: 1; transform: none; }
}
:root[data-anim="on"] .faq__item[open] .faq__a {
  animation: mo-faq-open 0.3s var(--mo-ease);
}

/* ---- 目次シート・確認モーダルの登場 --------------------------------- */
@keyframes mo-sheet-up {
  from { opacity: 0; transform: translate3d(0, 100%, 0); }
  to   { opacity: 1; transform: none; }
}
@keyframes mo-pop {
  from { opacity: 0; transform: scale(0.9); }
  to   { opacity: 1; transform: none; }
}
@keyframes mo-veil {
  from { opacity: 0; }
  to   { opacity: 1; }
}
:root[data-anim="on"] .navsheet__panel { animation: mo-sheet-up 0.34s var(--mo-ease-spring); }
:root[data-anim="on"] .modal__panel    { animation: mo-pop 0.26s var(--mo-ease-spring); }
:root[data-anim="on"] .navsheet__overlay,
:root[data-anim="on"] .modal__overlay  { animation: mo-veil 0.24s ease; }

/* ---- スクロール進捗バー ---------------------------------------------
   motion.js が <body> の末尾に作る。幅ではなく scaleX で伸ばす。 */
.mo-progress {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 60;
  width: 100%;
  height: 0.1875rem;
  pointer-events: none;
  background: rgba(191, 29, 32, 0.12);
}
.mo-progress > span {
  display: block;
  width: 100%;
  height: 100%;
  transform: scaleX(0);
  transform-origin: 0 50%;
  background: linear-gradient(90deg, #BF1D20, #C9A227 60%, #FCD600);
}

/* ---- 紙吹雪 ---------------------------------------------------------
   motion.js が描き終えたら canvas ごと取り除く。
   z-index はモーダル（.modal）より下に置くこと。 */
.mo-confetti {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 55;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

/* ---- 動きを減らす設定 ------------------------------------------------
   data-anim が付いていても、ここで全部打ち消す。
   motion.js 側でも起動前に抜けているので二重の守りになる。 */
@media (prefers-reduced-motion: reduce) {
  :root[data-anim="on"] [data-fade] {
    opacity: 1;
    transform: none;
    transition: none;
  }
  :root[data-anim="on"] .deco-img img,
  :root[data-anim="on"] .campaign__rank-block::after,
  :root[data-anim="on"] .chapter2__garland,
  :root[data-anim="on"] .lantern,
  :root[data-anim="on"] .mo-tbd,
  :root[data-anim="on"] .campaign__rank-box .king::after,
  :root[data-anim="on"] .campaign__point-high .point[data-mo-pop],
  :root[data-anim="on"] .storecard,
  :root[data-anim="on"] .faq__item[open] .faq__a,
  :root[data-anim="on"] .navsheet__panel,
  :root[data-anim="on"] .modal__panel,
  :root[data-anim="on"] .navsheet__overlay,
  :root[data-anim="on"] .modal__overlay {
    animation: none;
  }
  .mo-progress { display: none; }
}

/* ==========================================================================
   ページ内リンクの着地位置
   見出しが画面の最上端に張り付かないよう、少し手前で止める。
   ========================================================================== */
#campaign,
#rank,
#storesearch,
#history,
#faq,
#attention,
#contact {
  scroll-margin-top: 1.25rem;
}

/* ==========================================================================
   「ねらいめ」バッジの明滅
   888位の1箇所だけ。複数箇所でやると安っぽくなるので増やさないこと。
   ========================================================================== */
@keyframes pick-blink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}
.campaign__rank-box .-pick > td.-number::after {
  animation: pick-blink 1.8s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce) {
  .campaign__rank-box .-pick > td.-number::after {
    animation: none;
  }
}

/* ==========================================================================
   現在地レール（PCのみ）

   SPには固定CTAと目次シートがあるが、どちらも767px以下でしか出ない。
   PCに残るのはセクションナビだけで、それは position: static なので
   y=830 を過ぎると流れていく。全長15,000pxのうち最初の7%を過ぎると
   行き先が何も無くなっていた。その穴を埋めるための常駐ナビ。

   幅の設計。本文は .l-page-contents（最大1020px・左右padding 2.5rem）
   なので、768px以上なら右端に必ず2.5rem（40px）の余白がある。
   レールはその余白に収める。幅を増やすと本文に重なるので注意。
   文字は普段は出さず、ホバーと現在地のときだけ左へ開く。
   画面が1400px以上あるときは余白が足りるので、常に出す。
   ========================================================================== */
.siderail {
  display: none;
}
@media (min-width: 768px) {
  .siderail {
    display: block;
    position: fixed;
    right: 0.25rem;
    top: 50%;
    transform: translateY(-50%);
    /* 進捗バー(60)と同じ層。固定CTA(100)やモーダル(1000)より下。 */
    z-index: 60;
  }
  .siderail__list {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 0.625rem;
    /* 地の色が黄・クリーム・白・黒と変わるので、どこでも点が沈まないよう
       半透明の白を敷く。これが無いと注意事項やフッターで見えなくなる。 */
    padding: 0.75rem 0.625rem;
    /* 10rem のような大きな値にすると、縦長の箱では半径が辺の半分を超えて
       楕円に潰れる。角だけ丸める意図なので控えめな値にすること。 */
    border-radius: 0.75rem;
    background: rgba(255, 255, 255, 0.82);
    -webkit-backdrop-filter: blur(0.25rem);
            backdrop-filter: blur(0.25rem);
    box-shadow: 0 0.125rem 0.5rem rgba(0, 0, 0, 0.12);
  }
  .siderail__list a {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 0.5rem;
    text-decoration: none;
    /* 浮かせたラベルの位置の基準 */
    position: relative;
  }
  .siderail__dot {
    flex: none;
    width: 0.625rem;
    height: 0.625rem;
    border-radius: 50%;
    border: 0.125rem solid #BF1D20;
    background: #fff;
    transition: transform 0.15s, background-color 0.15s;
  }
  /* 文字は行の中に並べず、点の左へ浮かせる。
     行の中に置くと、1つ開いただけで枠全体が広がり、
     残りの行が点だけの間延びした箱になる（実機で指摘を受けた）。
     浮かせれば枠は点の幅のままで、開いた1つだけが外に出る。

     消すのは opacity だけにすること。display:none や visibility:hidden
     にすると読み上げから消えてしまう。 */
  .siderail__label {
    position: absolute;
    right: calc(100% + 0.5rem);
    top: 50%;
    transform: translateY(-50%);
    padding: 0.25rem 0.625rem;
    border-radius: 0.375rem;
    background: #fff;
    box-shadow: 0 0.125rem 0.5rem rgba(0, 0, 0, 0.18);
    white-space: nowrap;
    opacity: 0;
    pointer-events: none;
    font-size: 0.8125rem;
    font-weight: bold;
    line-height: 1.4;
    color: #BF1D20;
    transition: opacity 0.2s;
  }
  .siderail__list a:hover .siderail__label,
  .siderail__list a:focus-visible .siderail__label,
  .siderail__list a[aria-current] .siderail__label {
    opacity: 1;
  }
  .siderail__list a:hover .siderail__dot,
  .siderail__list a:focus-visible .siderail__dot {
    transform: scale(1.25);
  }
  /* 現在地。点を塗りつぶして大きくする。
     色だけで区別せず大きさも変えるのは、色覚の差で見分けられない人のため。 */
  .siderail__list a[aria-current] .siderail__dot {
    background: #BF1D20;
    transform: scale(1.35);
  }
  .siderail__list a:focus-visible {
    outline: 0.1875rem solid #FA5902;
    outline-offset: 0.125rem;
    border-radius: 10rem;
  }
}
/* 画面が広いときは余白が足りるので、浮かせるのをやめて
   行の中に戻し、8項目ぶんの名前を常に出す（普通の目次の見た目）。 */
@media (min-width: 1400px) {
  .siderail__label {
    position: static;
    transform: none;
    padding: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
    opacity: 1;
  }
}

/* ==========================================================================
   目次シート（SPのみ）
   固定CTAの「目次」から開く。下から出る板。
   PCは現在地レール（.siderail）が常駐しているので出さない。
   ========================================================================== */
.navsheet {
  display: none;
}
.navsheet[hidden] {
  display: none;
}
@media (max-width: 767px) {
  .navsheet:not([hidden]) {
    position: fixed;
    inset: 0;
    z-index: 200;   /* 固定CTA(100)より上、モーダル(1000)より下 */
    display: flex;
    align-items: flex-end;
  }
  .navsheet__overlay {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.5);
  }
  .navsheet__panel {
    position: relative;
    width: 100%;
    max-height: 80vh;
    overflow-y: auto;
    padding: 1.25rem 1rem;
    padding-bottom: calc(1.25rem + env(safe-area-inset-bottom));
    border-radius: 1rem 1rem 0 0;
    background: #fff;
    box-shadow: 0 -0.5rem 1.5rem rgba(0, 0, 0, 0.25);
  }
  .navsheet__title {
    margin-bottom: 0.75rem;
    font-family: "M PLUS 1";
    font-weight: 800;
    font-size: 1rem;
    color: #BF1D20;
    text-align: center;
  }
  /* 2列。行先が8つになった時点で、1列では小さい端末に収まらなくなった。
     320×568 で 122px、375×667 で 42px はみ出してスクロールが必要だった
     （パネルの上限が 80vh のため）。間隔を詰めるだけでは足りない
     ＝ 8項目×48px で 394px 要るので、568px の画面では成立しない。
     2列にすると4行になり、どの端末でもスクロールせずに全部見える。 */
  .navsheet__list {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.5rem;
    margin: 0;
    padding: 0;
    list-style: none;
  }
  /* 間隔は grid の gap が持つ。ここで margin を足すと二重になる */
  .navsheet__list li + li {
    margin-top: 0;
  }
  /* 2列になって1つあたりの幅が半分になったぶん、文字と左右の余白を詰める。
     高さ（3rem）は詰めないこと。指で押せる大きさが削れる。
     折り返しは許す。320px では「鳥貴族のおトク情報」だけ2行になるが、
     grid の行は高いほうに揃うので凸凹しない。 */
  .navsheet__list a {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 3rem;
    padding: 0.5rem 0.625rem;
    border: 0.125rem solid #E2D9CE;
    border-radius: 0.625rem;
    background: #fff;
    color: #3E2A15;
    font-family: "M PLUS 1";
    font-weight: 800;
    font-size: 0.8125rem;
    line-height: 1.3;
    text-align: center;
    text-decoration: none;
  }
  /* 先頭（最新の順位）は主導線なので塗りつぶす */
  /* 「最新の順位」は主導線なので目立たせるが、塗りつぶしは現在地に譲る。
     両方を赤で塗ると、どちらが「いま居る場所」なのか分からなくなる
     （実機で混同するとの指摘）。ここは枠と文字だけ赤にする。

     :not([aria-current]) は必須。この指定のほうが下の [aria-current] より
     詳細度が高いので、付けないと「最新の順位が現在地」のときに
     赤地へ赤文字が乗って読めなくなる。 */
  .navsheet__list li:first-child a:not([aria-current]) {
    border-color: #BF1D20;
    color: #BF1D20;
  }
  /* いま読んでいるセクション。シートは白地なので、
     セクションナビ（黄色地）とは逆に金色のリングが映える。 */
  .navsheet__list a[aria-current] {
    border-color: #BF1D20;
    background: #BF1D20;
    color: #fff;
    box-shadow: 0 0 0 0.1875rem #FCD600;
  }
  .navsheet__list a:focus-visible {
    outline: 0.1875rem solid #FA5902;
    outline-offset: 0.125rem;
  }
  .navsheet__close {
    display: block;
    width: 100%;
    min-height: 2.75rem;
    margin-top: 1rem;
    border: 0;
    border-radius: 10rem;
    background: #F5F1EB;
    color: #8a6d3b;
    font-family: inherit;
    font-size: 0.9375rem;
    font-weight: bold;
    cursor: pointer;
  }
  .navsheet__close:focus-visible {
    outline: 0.1875rem solid #FA5902;
    outline-offset: 0.125rem;
  }
}
