/* モール 管理システム スタイル */
:root{
  --bg:#f4f5f7; --panel:#fff; --ink:#1f2733; --muted:#6b7683; --line:#e2e6eb;
  --primary:#1f6feb; --primary-ink:#fff; --danger:#c8372d; --ok:#1f9d55;
  --radius:8px; --shadow:0 1px 3px rgba(20,30,45,.08),0 1px 2px rgba(20,30,45,.06);
}
*{box-sizing:border-box}
[hidden]{display:none!important}
body.admin{margin:0;background:var(--bg);color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Hiragino Kaku Gothic ProN",Meiryo,sans-serif;
  font-size:14px;line-height:1.6}
a{color:var(--primary);text-decoration:none}
a:hover{text-decoration:underline}
code{background:#eef1f4;padding:.1em .35em;border-radius:4px}

.inline{display:inline}

/* ===== 左右分割レイアウト（左=メニュー / 右=操作） ===== */
.admin-shell{display:flex;min-height:100vh;align-items:stretch}
/* position:fixed（ビューポート基準）にしておかないと、チェックボックスの静的位置が文書先頭付近になり、
   ラベルクリックでフォーカスが移った際にブラウザが「フォーカス要素を可視領域に入れる」ためページを
   先頭までスクロールしてしまう（開閉のたびにスクロール位置がリセットされる不具合の原因）。 */
.nav-toggle{position:fixed;top:0;left:0;opacity:0;pointer-events:none}

.sidebar{width:240px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--line);
  display:flex;flex-direction:column;position:sticky;top:0;align-self:flex-start;height:100vh;overflow-y:auto;z-index:50}
.sidebar__title{font-weight:700;font-size:1rem;padding:1rem 1.1rem .5rem}
.sidebar__user{padding:0 1.1rem;color:var(--muted);font-size:.85rem}
.sidebar__logout{padding:.4rem 1.1rem .6rem}
.sidebar__logout-btn{background:none;border:0;padding:0;color:var(--primary);cursor:pointer;font:inherit}
.sidebar__logout-btn:hover{text-decoration:underline}
.sidebar__rule{border:0;border-top:1px solid var(--line);margin:0}
.sidebar__nav{display:flex;flex-direction:column;flex:1}
.sidebar__link{padding:.7rem 1.1rem;color:var(--ink);font-size:.9rem}
.sidebar__link:hover{background:#eef1f4;text-decoration:none}
.sidebar__link.is-active{background:#e7f0ff;color:var(--primary);font-weight:600;box-shadow:inset 3px 0 0 var(--primary)}
.sidebar__foot{padding:1rem 1.1rem;color:var(--muted)}

.nav-scrim{display:none}

.content{flex:1;min-width:0;display:flex;flex-direction:column}
.content__bar{display:none}
.content__inner{max-width:1080px;width:100%;margin:1.5rem auto;padding:0 1.5rem;
  display:flex;flex-direction:column;gap:1.25rem}

/* ハンバーガー */
.hamburger{width:40px;height:40px;display:none;flex-direction:column;justify-content:center;gap:5px;
  padding:9px;border:1px solid var(--line);border-radius:8px;background:var(--panel);cursor:pointer}
.hamburger span{display:block;height:2px;background:var(--ink);border-radius:2px}

/* ===== タブレット・モバイル（管理ページは1180px以下をモバイル扱い） ===== */
@media (max-width:1180px){
  .sidebar{position:fixed;top:0;left:0;height:100vh;width:min(82vw,300px);
    transform:translateX(-100%);transition:transform .25s ease;border-left:0;border-right:1px solid var(--line);
    box-shadow:8px 0 24px rgba(20,30,45,.12)}
  .nav-toggle:checked ~ .sidebar{transform:translateX(0)}
  .nav-scrim{display:block;position:fixed;inset:0;background:rgba(15,20,30,.4);
    opacity:0;pointer-events:none;transition:opacity .25s ease;z-index:40}
  .nav-toggle:checked ~ .nav-scrim{opacity:1;pointer-events:auto}
  .content{width:100%}
  .content__bar{display:flex;align-items:center;gap:.75rem;background:var(--panel);
    border-bottom:1px solid var(--line);padding:.5rem .75rem;position:sticky;top:0;z-index:30}
  .content__bar-title{font-weight:700}
  .hamburger{display:flex}
  .content__inner{margin:1.1rem auto;padding:0 1rem}
}

/* centered auth */
.admin--centered{display:flex;min-height:100vh;align-items:center;justify-content:center}
.auth-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:2rem;width:min(92vw,380px)}
.auth-card__title{margin:0 0 1rem;font-size:1.15rem}
.auth-card__lead{color:var(--muted);margin-top:0}

/* panel */
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:1.25rem 1.5rem}
.panel__head{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}
.panel__head-actions{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
.panel__title{margin:0;font-size:1.1rem}
.muted{color:var(--muted)}

/* alerts */
.alert{padding:.7rem 1rem;border-radius:6px;border:1px solid transparent}
.alert--success{background:#e8f6ee;border-color:#bfe6cd;color:#186a3b}
.alert--error{background:#fdecea;border-color:#f5c6c1;color:#8f2b23}
.alert--warn{background:#fdf1dc;border-color:#f0d9a8;color:#7a5710}
.alert--warn form{margin-top:.6rem}

/* stats */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.75rem}
.stat{background:#f8fafc;border:1px solid var(--line);border-radius:6px;padding:.9rem;text-align:center}
.stat__num{display:block;font-size:1.5rem;font-weight:700}
.stat__num--money{font-size:1.25rem}
.stat__label{color:var(--muted);font-size:.8rem}

/* tables */
.table{width:100%;border-collapse:collapse}
.table th,.table td{padding:.55rem .6rem;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}
.table th{font-size:.8rem;color:var(--muted);font-weight:600}
.table .num{text-align:right;font-variant-numeric:tabular-nums}
/* 編集・削除などの操作を横並びにせず縦に積んで、列の横幅を最小限に抑える。
   align-items:stretch で全ボタンの横幅を列内で最も長いラベルに揃え、でこぼこを防ぐ */
.table .actions{display:flex;flex-direction:column;align-items:stretch;gap:.3rem}
.table .actions form{margin:0}
.table .actions .btn{width:100%;text-align:center}
/* ID+名称など、2つの値を1セルに縦積みして列数・横幅を節約する（連絡先セルと同じ考え方） */
.table .cell-id{display:block;color:var(--muted);font-size:.78rem;margin-top:.15rem}
.thumb-cell{width:56px}
.thumb{width:44px;height:44px;object-fit:cover;border-radius:4px;border:1px solid var(--line);display:block}
.thumb--empty{background:#eef1f4}

.badge{display:inline-block;padding:.1rem .5rem;border-radius:999px;background:#eef1f4;color:var(--muted);font-size:.75rem}
.badge--ok{background:#e8f6ee;color:var(--ok)}

/* forms */
.form{display:flex;flex-direction:column;gap:1rem}
.form--wide{gap:1.25rem}
.field{display:flex;flex-direction:column;gap:.3rem}
.field label{font-weight:600}
.field input[type=text],.field input[type=password],.field input[type=email],.field input[type=number],
.field input[type=date],.field input[type=tel],.field textarea,.field select{
  padding:.5rem .6rem;border:1px solid #c9d1da;border-radius:6px;font:inherit;width:100%;background:#fff}
.field input:focus,.field textarea:focus{outline:2px solid #bcd4ff;border-color:var(--primary)}
.field__hint{margin:0;color:var(--muted);font-size:.8rem}
.field__error{margin:0;color:var(--danger);font-size:.82rem}
.field--inline{flex-direction:row;align-items:center;gap:.6rem;margin:.4rem 0}
.field--inline input{width:10rem}
.req{color:var(--danger);font-size:.72rem;font-weight:600;margin-left:.25rem}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}
.fieldset{border:1px solid var(--line);border-radius:6px;padding:1rem 1.25rem;display:flex;flex-direction:column;gap:.5rem}
.fieldset legend{font-weight:700;padding:0 .4rem}
.check{display:flex;align-items:center;gap:.5rem;font-weight:400}
.check--sm{font-size:.8rem;color:var(--muted)}
.form__actions{display:flex;gap:.6rem;align-items:center}

/* パネルを複数並べたフォーム（加盟店登録・登録情報変更など）用。
   パネル内で入れ子になった .field / .grid-2 等は .form 直下の gap の対象外になり、
   タイトルとその直上の入力欄が詰まって見えるため、個別に上余白を入れて距離を取る。 */
.panel-form .field,.panel-form .grid-2,.panel-form .grid-3,.panel-form .fieldset{margin-top:10px}
.birth-date-inputs{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap}
.birth-date-inputs input{padding:.5rem .6rem;border:1px solid #c9d1da;border-radius:6px;font:inherit;background:#fff;text-align:right}

.image-slots{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1rem}
.image-slot{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--line);border-radius:6px;padding:.6rem}
.image-slot__no{font-size:.78rem;color:var(--muted)}
.image-slot__preview{width:100%;aspect-ratio:1/1;object-fit:cover;border-radius:4px;background:#eef1f4;display:block}
.image-slot__preview--empty{border:1px dashed #c9d1da}
.image-slot input[type=file]{font-size:.78rem}

/* 独自商品登録（加盟店側）: 3枠並び */
.og-slots{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1rem}
.og-slot{margin:0}
.og-slot__body{display:flex;gap:.9rem;align-items:flex-start;margin-bottom:.75rem}
.og-slot__thumb{width:64px;height:64px;flex:0 0 auto;object-fit:cover;border-radius:6px;background:#eef1f4}
.og-slot__thumb--empty{border:1px dashed #c9d1da;display:block}
.og-slot__name{font-weight:600;margin:0 0 .2rem}

/* buttons */
.btn{display:inline-block;padding:.45rem .9rem;border-radius:6px;border:1px solid #c9d1da;background:#fff;
  color:var(--ink);cursor:pointer;font:inherit;line-height:1.2;text-align:center}
.btn:hover{background:#f2f4f7;text-decoration:none}
.btn--primary{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}
.btn--primary:hover{background:#1a5fd0}
.btn--danger{background:#fff;border-color:#e2b3ae;color:var(--danger)}
.btn--danger:hover{background:#fdecea}
.btn--ghost{background:transparent;border-color:transparent;color:var(--muted)}
.btn--ghost:hover{background:#eef1f4}
.btn--sm{padding:.3rem .6rem;font-size:.82rem}
.btn--block{width:100%}

/* pager */
.pager{display:flex;gap:.25rem;margin-top:1rem;flex-wrap:wrap;align-items:center}
.pager__item{padding:.35rem .6rem;border:1px solid var(--line);border-radius:6px;color:var(--muted)}
.pager__item.is-current{background:var(--primary);color:#fff;border-color:var(--primary)}
.pager__info{margin-right:.5rem;color:var(--muted);font-size:.82rem}

/* --- 一覧・詳細の追加スタイル --- */
.panel__head-actions{display:flex;gap:.5rem;flex-wrap:wrap}
.alert--info{background:#eef4ff;border-color:#c7dbff;color:#1a4fa0}
.small{font-size:.8rem}
.muted.small,.small.muted{color:var(--muted)}
.sub{font-size:.9rem;margin:1rem 0 .35rem;color:var(--muted)}
.prewrap{white-space:pre-wrap;background:#f8fafc;border:1px solid var(--line);border-radius:6px;padding:.75rem}

.filter{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center;margin-bottom:1rem;
  background:#f8fafc;border:1px solid var(--line);border-radius:6px;padding:.75rem}
.filter input[type=text],.filter select{padding:.4rem .55rem;border:1px solid #c9d1da;border-radius:6px;font:inherit}
.filter input[type=text]{min-width:16rem;flex:1}

.table-wrap{overflow-x:auto}
.table--tight th,.table--tight td{padding:.35rem .5rem}
.table--admins th,.table--admins td{white-space:nowrap}
.table--admins th{text-align:center}

/* 並び替え画面（公式商品） */
.reorder-list{list-style:none;margin:0 0 1rem;padding:0;display:flex;flex-direction:column;gap:.5rem;max-width:640px}
.reorder-item{display:flex;align-items:center;gap:.75rem;background:var(--panel);border:1px solid var(--line);
  border-radius:6px;padding:.5rem .75rem;cursor:grab}
.reorder-item.is-dragging{opacity:.4}
.reorder-item__handle{color:var(--muted);font-size:1.15rem;line-height:1;user-select:none}
.reorder-item__thumb{width:40px;height:40px;object-fit:cover;border-radius:4px;background:#eef1f4;flex-shrink:0;display:block}
.reorder-item__thumb--empty{background:#eef1f4}
.reorder-item__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}
.reorder-item__name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.reorder-item__sub{font-size:.78rem;color:var(--muted)}
.reorder-item__moves{display:flex;flex-direction:column;gap:.15rem}
.reorder-item__moves .btn{width:1.9rem;padding:.1rem 0;font-size:.75rem;line-height:1.3}
.badge--warn{background:#fdf1dc;color:#9a6512}

.tabs{display:flex;gap:.25rem;border-bottom:1px solid var(--line);margin-bottom:1rem;flex-wrap:wrap}
.tab{padding:.45rem .9rem;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}
.tab:hover{text-decoration:none;color:var(--ink)}
.tab.is-active{color:var(--primary);border-bottom-color:var(--primary)}
.tabs--with-aside{justify-content:space-between;align-items:flex-end}
.tabs__list{display:flex;gap:.25rem;flex-wrap:wrap}
.tabs__aside{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap;padding-bottom:.35rem}

.status-row{display:flex;gap:.4rem;flex-wrap:wrap;align-items:center;margin-top:.5rem}
.approve-bar{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center;margin-top:1rem;
  padding:.85rem;background:#f8fafc;border:1px solid var(--line);border-radius:6px}
.reject-form{display:flex;gap:.4rem;align-items:center}
.reject-form input{padding:.4rem .55rem;border:1px solid #c9d1da;border-radius:6px;font:inherit;min-width:14rem}

.kv{width:100%;border-collapse:collapse}
.kv th,.kv td{border:1px solid var(--line);padding:.5rem .65rem;text-align:left;vertical-align:top}
.kv th{background:#f5f7f9;color:var(--muted);font-weight:600;white-space:nowrap;width:1%}

.readonly-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.5rem 1.25rem;
  background:#f8fafc;border:1px solid var(--line);border-radius:6px;padding:.85rem 1rem;margin-bottom:1.25rem}
.readonly-grid span{display:block;color:var(--muted);font-size:.75rem}

.request-card{border:1px solid var(--line);border-radius:8px;padding:1rem;margin-bottom:1rem}
.request-card__head{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;margin-bottom:.6rem}

.thumb-row{display:flex;gap:.6rem;flex-wrap:wrap}
.thumb--lg{width:110px;height:110px}

.todo-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.4rem}
.todo-list li{display:flex;align-items:center;gap:.5rem}

.panel--danger{border-color:#e6c2be}
.panel--danger .panel__title{color:var(--danger)}
.disclosure{margin-top:1rem}
.disclosure summary{display:inline-block;cursor:pointer;list-style:none}
.disclosure summary::-webkit-details-marker{display:none}

/* --- チャート --- */
.chart-box{width:100%}
.chart{width:100%;height:auto;display:block}
.chart__tick{fill:#6b7683;font-size:11px}
.chart__value{fill:#1f2733;font-size:11px;font-weight:600}
.chart__value--inset{fill:#fff}
.chart-legend{display:flex;gap:1.2rem;margin-bottom:.6rem;font-size:.8rem;color:var(--muted)}
.chart-legend__item{display:inline-flex;align-items:center;gap:.4rem}
.chart-legend__dot{width:10px;height:10px;border-radius:2px;display:inline-block}

/* --- 販売履歴フィルタの日付 --- */
.filter__date{display:flex;align-items:center;gap:.3rem;color:var(--muted);font-size:.82rem}
.filter__date input{padding:.35rem .5rem;border:1px solid #c9d1da;border-radius:6px;font:inherit}
.inline-form{display:flex;gap:.3rem;align-items:center;flex-wrap:wrap}
.inline-form select,.inline-form input{padding:.3rem .45rem;border:1px solid #c9d1da;border-radius:6px;font:inherit;font-size:.82rem}
.table tfoot th,.table tfoot td{border-top:2px solid var(--line);padding:.45rem .6rem}

/* --- システム設定 --- */
.settings-table td{vertical-align:top}
.setting-name{font-weight:600}
.setting-key{font-size:.72rem;color:var(--muted)}
.settings-table .mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82rem}
.settings-table input[type=text],.settings-table textarea{width:100%;max-width:28rem;padding:.4rem .55rem;border:1px solid #c9d1da;border-radius:6px;font:inherit}
.settings-table .input-num{max-width:12rem}
.settings-table tr.is-locked td{background:#f5f7f9;color:var(--muted)}

/* --- 販売ページ関連設定 --- */
.inset-form{margin-top:1rem;padding:1rem;background:#f8fafc;border:1px solid var(--line);border-radius:6px}
.setting-row{border:1px solid var(--line);border-radius:8px;padding:.9rem 1rem;margin-top:.75rem}
.setting-row__head{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}
.setting-row__head strong{margin-right:.4rem}
.cell-form{padding:.45rem .6rem}
.cell-form .inline-form input[type=text]{min-width:10rem}
.asset-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;margin-top:1rem}
.asset-card{border:1px solid var(--line);border-radius:8px;overflow:hidden;display:flex;flex-direction:column}
.asset-card__img{width:100%;aspect-ratio:4/3;object-fit:cover;background:#eef1f4}
.asset-card__img--empty{display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:.82rem}
.asset-card__meta{padding:.6rem;display:flex;flex-direction:column;gap:.2rem}
.asset-card .disclosure,.asset-card .inset-form{margin:0 .6rem .6rem;margin-top:0}
/* ロゴのような「切り抜かず全体を見せたい」画像用のバリエーション（既定の4:3クロップ表示を上書き） */
.asset-card--logo .asset-card__img{aspect-ratio:auto;height:100px;object-fit:contain;padding:.75rem;background:#f4f5f7}

@media (max-width:720px){
  .grid-2,.grid-3{grid-template-columns:1fr}
  .filter input[type=text]{min-width:100%}
  .kv th{width:auto}
}

/* ===== 二段階認証（加盟店） ===== */
.tfa-nag{position:fixed;inset:0;background:rgba(20,30,45,.55);display:flex;align-items:center;justify-content:center;
  padding:1rem;z-index:50}
.tfa-nag__box{background:var(--panel);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.5rem;max-width:420px;width:100%}
.tfa-nag__checkbox{display:flex;align-items:center;gap:.4rem;margin:.9rem 0;font-size:.88rem;color:var(--muted)}
.tfa-secret{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:1.15rem;letter-spacing:.05em;
  background:#f5f7f9;border:1px solid var(--line);border-radius:6px;padding:.7rem 1rem;display:inline-block;margin:.4rem 0}
.store-badges{display:flex;gap:.6rem;flex-wrap:wrap;margin:.6rem 0 1rem}
.store-badge{display:inline-flex;align-items:center;gap:.4rem;background:#111;color:#fff;border:1px solid #111;
  border-radius:6px;padding:.5rem .9rem;font-size:.82rem}
.store-badge:hover{background:#000;text-decoration:none}
.recovery-codes{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.5rem;margin:1rem 0;
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.recovery-codes span{background:#f5f7f9;border:1px solid var(--line);border-radius:6px;padding:.5rem;text-align:center}
.tfa-qr{width:220px;max-width:100%;margin:.6rem 0 1rem;background:#fff;border:1px solid var(--line);border-radius:6px;padding:.75rem}
.tfa-qr svg{width:100%;height:auto;display:block}
