<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>カジコミ | オンラインカジノの口コミ・評判掲示板【2026年最新】</title>
<meta name="description" id="metaDesc" content="【2026年最新】オンラインカジノのリアルな口コミ・評判を完全匿名で投稿・閲覧｜出金速度・サポート・ボーナス等カテゴリ別評価｜スロット天国・コニベット等人気サイトの生の声を確認｜カジノ選びのポイント・攻略法も解説">
<meta name="keywords" content="オンラインカジノ,口コミ,評判,掲示板,出金,ボーナス,スロット天国,コニベット,ベラジョン,レビュー">
<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
<meta name="ai-content-declaration" content="original, human-reviewed">
<meta name="author" content="カジコミ運営事務局">
<link rel="apple-touch-icon" sizes="180x180" href="/favicon-180x180.png?v=20260728">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png?v=20260728">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png?v=20260728">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#c2452d">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="apple-mobile-web-app-title" content="カジコミ">
<meta name="mobile-web-app-capable" content="yes">

<!-- Canonical & hreflang -->
<link rel="canonical" href="https://cajikomi.com/">
<link rel="alternate" hreflang="ja" href="https://cajikomi.com/">
<link rel="alternate" hreflang="x-default" href="https://cajikomi.com/">

<!-- Open Graph -->
<meta property="og:title" content="カジコミ | オンラインカジノの口コミ・評判掲示板【2026年最新】">
<meta property="og:description" content="【2026年最新】オンラインカジノのリアルな口コミ・評判を匿名で投稿・閲覧。出金速度、サポート対応、ボーナス条件など生の声をチェック。スロット天国、コニベット等の評価も。">
<meta property="og:type" content="website">
<meta property="og:url" content="https://cajikomi.com/">
<meta property="og:site_name" content="カジコミ">
<meta property="og:locale" content="ja_JP">
<meta property="og:image" content="https://cajikomi.com/og-image.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="カジコミ - オンラインカジノの口コミ・評判掲示板">

<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="カジコミ | オンラインカジノの口コミ・評判掲示板【2026年最新】">
<meta name="twitter:description" content="オンラインカジノのリアルな口コミ・評判を匿名で投稿・閲覧。出金速度、サポート対応、ボーナス条件など生の声をチェック。">
<meta name="twitter:image" content="https://cajikomi.com/og-image.jpg">
<meta name="twitter:image:alt" content="カジコミ - オンラインカジノの口コミ・評判掲示板">

<!-- Structured Data: WebSite -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "@id": "https://cajikomi.com/#website",
  "name": "カジコミ",
  "alternateName": "cajikomi",
  "url": "https://cajikomi.com/",
  "description": "オンラインカジノのリアルな口コミ・評判を匿名で投稿・閲覧できる掲示板サイト",
  "inLanguage": "ja",
  "dateModified": "2026-04-01",
  "publisher": { "@id": "https://cajikomi.com/#organization" },
  "potentialAction": {
    "@type": "SearchAction",
    "target": "https://cajikomi.com/?q={search_term_string}",
    "query-input": "required name=search_term_string"
  }
}
</script>

<!-- Structured Data: Organization (E-E-A-T) -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://cajikomi.com/#organization",
  "name": "カジコミ",
  "alternateName": "カジコミ - オンラインカジノ口コミサイト",
  "url": "https://cajikomi.com/",
  "logo": {
    "@type": "ImageObject",
    "url": "https://cajikomi.com/logo.png",
    "width": 512,
    "height": 512
  },
  "image": "https://cajikomi.com/og-image.jpg",
  "sameAs": [
    "https://casino-ranking-jp.com/",
    "https://crypto-card.club/"
  ],
  "description": "オンラインカジノの口コミ・評判を実際のプレイヤーから集めた日本最大級のレビューサイト。すべての口コミは運営事務局が内容を確認しています。",
  "foundingDate": "2025",
  "address": {
    "@type": "PostalAddress",
    "addressCountry": "JP"
  },
  "contactPoint": {
    "@type": "ContactPoint",
    "contactType": "Customer Service",
    "availableLanguage": "Japanese",
    "url": "https://cajikomi.com/about/"
  },
  "publishingPrinciples": "https://cajikomi.com/about/#editorial-policy"
}
</script>

<!-- Structured Data: ReviewBoard -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "name": "カジコミ | オンラインカジノの口コミ・評判掲示板",
  "description": "オンラインカジノのリアルな口コミ・評判を匿名で投稿・閲覧できる掲示板",
  "url": "https://cajikomi.com/",
  "mainContentOfPage": {
    "@type": "WebPageElement",
    "@id": "#reviews",
    "description": "オンラインカジノの口コミレビュー一覧"
  },
  "breadcrumb": {
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "トップ",
        "item": "https://cajikomi.com/"
      },
      {
        "@type": "ListItem", 
        "position": 2,
        "name": "口コミ一覧",
        "item": "https://cajikomi.com/#reviews"
      }
    ]
  }
}
</script>

<!-- Dynamic Review Structured Data (injected by JS) -->
<script id="review-structured-data" type="application/ld+json"></script>

<!-- Structured Data: FAQ -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "オンラインカジノの口コミはどこで確認できますか？",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "カジコミでは、実際のプレイヤーによるオンラインカジノの口コミ・評判を匿名で投稿・閲覧できます。出金速度、サポート対応、ボーナス条件など、カテゴリ別に口コミをチェックできます。"
      }
    },
    {
      "@type": "Question",
      "name": "おすすめのオンラインカジノはどこですか？",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "2026年の口コミ評価では、スロット天国（PayPay入金対応・ドリームポットシステム）、コニベット（高リベート率・24時間サポート）、ビットカジノ（仮想通貨対応・即時出金）などが高評価です。詳しいランキングと最新情報はcasino-ranking-jp.comをご覧ください。"
      }
    },
    {
      "@type": "Question",
      "name": "オンラインカジノの出金は安全ですか？",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "正規ライセンスを取得したオンラインカジノであれば、出金は安全に行えます。ただし、KYC（本人確認）が必要なカジノでは書類の提出が求められる場合があります。出金トラブルを避けるため、口コミで評判を確認することをおすすめします。"
      }
    },
    {
      "@type": "Question",
      "name": "カジコミへの口コミ投稿は無料ですか？",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "はい、完全無料です。匿名で投稿でき、会員登録も不要です。口コミ投稿やQ&A回答でポイントが貯まる仕組みもあります。"
      }
    },
    {
      "@type": "Question",
      "name": "入金不要ボーナスがもらえるカジノはありますか？",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "はい、2026年現在も多くのオンラインカジノが入金不要ボーナスを提供しています。スロット天国は5,000円（出金条件25倍）、コニベットは$50＋フリースピン30回、ベラジョンカジノは3,000円の入金不要ボーナスがあります。最新のボーナス情報はcasino-ranking-jp.comで確認できます。"
      }
    }
  ]
}
</script>

<!-- Preload critical API -->
<link rel="dns-prefetch" href="//cajikomi.com">
<link rel="preconnect" href="https://cajikomi.com">
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:"Hiragino Sans","Hiragino Kaku Gothic ProN","Yu Gothic","Meiryo",sans-serif;background:#f5f5f0;color:#333;min-height:100vh;font-size:14px}
a{color:#c2452d;text-decoration:none}
a:hover{text-decoration:underline}

/* Header - tabelog orange */
.header{background:#fff;border-bottom:3px solid #c2452d;padding:0}
.header-inner{max-width:960px;margin:0 auto;padding:12px 16px;display:flex;align-items:center;justify-content:space-between}
.logo{font-size:22px;font-weight:900;color:#c2452d;letter-spacing:1px}
.logo small{font-size:11px;color:#888;font-weight:400;display:block;letter-spacing:0}
.header-right{font-size:12px;color:#888}

/* Breadcrumb */
.breadcrumb{max-width:960px;margin:0 auto;padding:8px 16px;font-size:11px;color:#999}
.breadcrumb a{color:#666}

/* Layout */
.container{max-width:960px;margin:0 auto;padding:0 16px 40px;display:flex;gap:20px}
.main-col{flex:1;min-width:0}
.side-col{width:260px;flex-shrink:0}

/* Ranking sidebar */
.side-box{background:#fff;border:1px solid #ddd;border-radius:4px;margin-bottom:16px}
.side-box-title{background:#c2452d;color:#fff;padding:8px 12px;font-size:13px;font-weight:700;border-radius:4px 4px 0 0}
.side-box-title.gray{background:#666}
.rank-list{list-style:none}
.rank-item{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid #eee;cursor:pointer;transition:background .15s}
.rank-item:hover{background:#fff8f0}
.rank-item.active{background:#fff3e8}
.rank-num{width:22px;height:22px;border-radius:50%;background:#c2452d;color:#fff;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.rank-num.n2{background:#888}.rank-num.n3{background:#b87333}
.rank-num.n4,.rank-num.n5,.rank-num.n6,.rank-num.n7,.rank-num.n8,.rank-num.n9{background:#ccc;color:#666}
.rank-info{flex:1;min-width:0}
.rank-name{font-size:13px;font-weight:700;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rank-score{color:#c2452d;font-weight:900;font-size:15px}
.rank-stars{color:#ffa500;font-size:12px}
.rank-count{font-size:11px;color:#999}
.rank-item-all{justify-content:center;font-size:13px;color:#c2452d;font-weight:700;cursor:pointer;padding:10px}
.rank-item-all:hover{background:#fff3e8}

/* Add site link */
.add-site-link{display:block;padding:10px 12px;text-align:center;font-size:12px;color:#c2452d;cursor:pointer;border-top:1px solid #eee}
.add-site-link:hover{background:#fff8f0}

/* Tabs / filters */
.rtype-toggle{display:flex;gap:8px;margin-bottom:18px}
.rtype-btn{flex:1;padding:11px 8px;font-size:14px;font-weight:700;font-family:inherit;background:#fff;color:#8a8377;border:1px solid #ddd;border-radius:6px;cursor:pointer;transition:all .15s}
.rtype-btn.active{background:#c2452d;color:#fff;border-color:#c2452d;box-shadow:0 2px 0 #96331f}
.filter-bar{background:#fff;border:1px solid #ddd;border-radius:4px;padding:10px 14px;margin-bottom:12px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.filter-bar label{font-size:12px;color:#888;font-weight:700}
.filter-bar select{padding:4px 8px;border:1px solid #ccc;border-radius:4px;font-size:12px;font-family:inherit;background:#fff}
.cat-tabs{display:flex;gap:0;border:1px solid #ccc;border-radius:4px;overflow:hidden}
.cat-tab{padding:5px 12px;font-size:12px;background:#fff;border:none;border-right:1px solid #ccc;cursor:pointer;font-family:inherit;color:#666}
.cat-tab:last-child{border-right:none}
.cat-tab.active{background:#c2452d;color:#fff}

/* Site header when filtered */
.site-header{background:#fff;border:1px solid #ddd;border-radius:4px;padding:16px;margin-bottom:12px;display:none}
.site-header.show{display:flex;align-items:center;gap:16px}
.site-header .sh-score{text-align:center}
.site-header .sh-num{font-size:36px;font-weight:900;color:#c2452d;line-height:1}
.site-header .sh-stars{color:#ffa500;font-size:16px;margin-top:2px}
.site-header .sh-info{flex:1}
.site-header .sh-name{font-size:18px;font-weight:900}
.site-header .sh-count{font-size:12px;color:#888;margin-top:2px}
.site-header .sh-bars{margin-top:8px}
.bar-row{display:flex;align-items:center;gap:6px;margin-bottom:3px;font-size:11px}
.bar-row .bar-label{width:50px;color:#666}
.bar-track{flex:1;height:8px;background:#eee;border-radius:4px;overflow:hidden}
.bar-fill{height:100%;border-radius:4px}
.bar-fill.good{background:#4caf50}.bar-fill.ok{background:#ffa500}.bar-fill.bad{background:#f44336}

/* Post button */
.post-btn{display:block;width:100%;padding:12px;background:#c2452d;color:#fff;border:none;border-radius:4px;font-size:15px;font-weight:700;cursor:pointer;font-family:inherit;margin-bottom:12px;transition:background .2s}
.post-btn:hover{background:#a83a25}

/* Post form */
.post-form{display:none;background:#fff;border:1px solid #ddd;border-radius:4px;padding:16px;margin-bottom:12px}
.post-form.open{display:block}
.post-form h3{font-size:15px;border-bottom:2px solid #c2452d;padding-bottom:6px;margin-bottom:14px;color:#333}
.form-row{margin-bottom:12px}
.form-row label{display:block;font-size:12px;color:#666;margin-bottom:4px;font-weight:700}
.form-row input,.form-row select,.form-row textarea{width:100%;padding:8px 10px;border:1px solid #ccc;border-radius:4px;font-family:inherit;font-size:14px;background:#fff}
.form-row textarea{height:100px;resize:vertical}
.form-row input:focus,.form-row select:focus,.form-row textarea:focus{outline:none;border-color:#c2452d}
.star-input{display:flex;gap:2px;flex-direction:row-reverse;justify-content:flex-end}
.star-input span{cursor:pointer;font-size:28px;color:#ddd;transition:color .1s}
.star-input span.on{color:#ffa500}
.submit-btn{width:100%;padding:10px;background:#c2452d;color:#fff;border:none;border-radius:4px;font-size:14px;font-weight:700;cursor:pointer;font-family:inherit}
.submit-btn:disabled{opacity:.5}
.form-msg{text-align:center;padding:8px;margin-top:8px;border-radius:4px;font-size:13px;display:none}
.form-msg.success{display:block;background:#e8f5e9;color:#2e7d32}
.form-msg.error{display:block;background:#fce4ec;color:#c62828}

/* Review cards — tabelog style */
.review-card{background:#fff;border:1px solid #ddd;border-radius:4px;padding:0;margin-bottom:10px;overflow:hidden}
.rc-header{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid #f0f0f0}
.rc-avatar{width:36px;height:36px;border-radius:50%;background:#f0e6d3;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:#c2452d;flex-shrink:0}
.rc-meta{flex:1}
.rc-user{font-size:13px;font-weight:700;color:#333}
.rc-date{font-size:11px;color:#aaa}
.rc-site{font-size:11px;color:#c2452d;font-weight:500}
.rc-cat{display:inline-block;padding:1px 6px;border-radius:3px;font-size:10px;font-weight:700;margin-left:4px;vertical-align:middle}
.cat-withdrawal{background:#e8f5e9;color:#2e7d32}
.cat-support{background:#e3f2fd;color:#1565c0}
.cat-bonus{background:#fff8e1;color:#f57f17}
.cat-overall{background:#f3e5f5;color:#7b1fa2}
.rc-score{text-align:center;padding:0 10px}
.rc-score-num{font-size:20px;font-weight:900;color:#c2452d}
.rc-score-stars{color:#ffa500;font-size:11px}
.rc-body{padding:10px 14px 14px;font-size:14px;line-height:1.8;color:#444}
.rc-actions{padding:0 14px 10px;text-align:right}
.rc-delete{font-size:11px;color:#ccc;cursor:pointer;background:none;border:none;font-family:inherit}
.rc-delete:hover{color:#c2452d}

.empty{text-align:center;padding:40px;color:#999;font-size:14px;background:#fff;border:1px solid #ddd;border-radius:4px}
#reviews{min-height:300px}#rankList{min-height:200px}#qaCards{min-height:200px}.container{min-height:400px}

/* Add site modal */
.modal-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:100;justify-content:center;align-items:center}
.modal-overlay.open{display:flex}
.modal{background:#fff;border-radius:8px;padding:24px;width:90%;max-width:400px}
.modal h3{font-size:16px;margin-bottom:14px;border-bottom:2px solid #c2452d;padding-bottom:6px}
.modal .form-row{margin-bottom:12px}

/* CTA */
.cta-banner{background:#c2452d;color:#fff;text-align:center;padding:20px;margin-top:20px;border-radius:4px}
.cta-banner a{color:#fff;font-size:18px;font-weight:900;text-decoration:none}
.cta-banner small{display:block;font-size:11px;margin-top:4px;opacity:.8}

/* Main nav tabs */
.main-nav{max-width:960px;margin:0 auto;display:flex;gap:0;padding:0 16px}
.main-nav-tab{padding:10px 24px;font-size:15px;font-weight:700;cursor:pointer;border:none;background:none;font-family:inherit;color:#888;border-bottom:3px solid transparent;transition:all .2s}
.main-nav-tab.active{color:#c2452d;border-bottom-color:#c2452d}
.main-nav-tab:hover{color:#c2452d}

/* Q&A styles */
.qa-section{display:none}
.qa-section.show{display:block}
.review-section{display:block}
.review-section.hide{display:none}
.points-section{display:none}
.points-section.show{display:block}

/* Points page */
.pts-card{background:#fff;border:1px solid #ddd;border-radius:4px;padding:16px;margin-bottom:12px}
.pts-card h3{font-size:15px;border-bottom:2px solid #c2452d;padding-bottom:6px;margin-bottom:14px;color:#333}
.pts-balance{text-align:center;padding:20px 0}
.pts-balance .pts-num{font-size:48px;font-weight:900;color:#c2452d}
.pts-balance .pts-label{font-size:14px;color:#888;margin-top:4px}
.pts-history-item{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #f0f0f0;font-size:13px}
.pts-history-item:last-child{border-bottom:none}
.pts-plus{color:#4caf50;font-weight:700}
.pts-rank-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid #f0f0f0}
.pts-rank-row:last-child{border-bottom:none}
.pts-rank-medal{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:900;color:#fff;flex-shrink:0}
.pts-rank-medal.g{background:#c2452d}.pts-rank-medal.s{background:#888}.pts-rank-medal.b{background:#b87333}.pts-rank-medal.d{background:#ccc;color:#666}
.pts-rank-name{flex:1;font-size:14px;font-weight:700}
.pts-rank-pts{font-size:16px;font-weight:900;color:#c2452d}
.crypto-rate{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid #f0f0f0;font-size:14px}
.crypto-rate:last-child{border-bottom:none}
.crypto-badge{display:inline-block;padding:2px 8px;border-radius:12px;font-size:10px;font-weight:700;background:#fff3e8;color:#f57f17}
.pts-check-row{display:flex;gap:8px;margin-bottom:16px}
.pts-check-row input{flex:1;padding:10px;border:1px solid #ccc;border-radius:4px;font-size:14px;font-family:inherit}
.pts-check-row button{padding:10px 20px;background:#c2452d;color:#fff;border:none;border-radius:4px;font-size:14px;font-weight:700;cursor:pointer;font-family:inherit}

/* Best answer button */
.qa-best-btn{display:inline-block;padding:4px 10px;border:1px solid #4caf50;border-radius:4px;background:#fff;color:#4caf50;font-size:11px;cursor:pointer;font-family:inherit;margin-left:8px}
.qa-best-btn:hover{background:#e8f5e9}

/* Point badge on answers */
.pts-earned-badge{display:inline-block;font-size:10px;color:#4caf50;font-weight:700;margin-left:6px}

.qa-cat-pills{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.qa-pill{padding:6px 14px;border-radius:20px;font-size:12px;border:1px solid #ddd;background:#fff;cursor:pointer;font-family:inherit;color:#666;transition:all .15s}
.qa-pill.active{background:#c2452d;color:#fff;border-color:#c2452d}
.qa-pill:hover{border-color:#c2452d}

.qa-sort-bar{display:flex;gap:8px;margin-bottom:12px;align-items:center}
.qa-sort-btn{padding:5px 12px;font-size:12px;border:1px solid #ddd;border-radius:4px;background:#fff;cursor:pointer;font-family:inherit;color:#666}
.qa-sort-btn.active{background:#333;color:#fff;border-color:#333}

.qa-card{background:#fff;border:1px solid #ddd;border-radius:4px;padding:14px;margin-bottom:10px;cursor:pointer;transition:border-color .15s}
.qa-card:hover{border-color:#c2452d}
.qa-card-top{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.qa-badge{display:inline-block;padding:2px 8px;border-radius:3px;font-size:10px;font-weight:700;flex-shrink:0}
.badge-deposit{background:#e8f5e9;color:#2e7d32}
.badge-bonus{background:#fff8e1;color:#f57f17}
.badge-beginner{background:#e3f2fd;color:#1565c0}
.badge-trouble{background:#fce4ec;color:#c62828}
.badge-site{background:#f3e5f5;color:#7b1fa2}
.badge-general{background:#f5f5f5;color:#666}
.qa-title{font-size:15px;font-weight:700;color:#333;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qa-body-preview{font-size:13px;color:#888;line-height:1.5;margin-bottom:8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.qa-card-meta{display:flex;gap:12px;font-size:11px;color:#aaa}
.qa-card-meta span{display:flex;align-items:center;gap:3px}
.qa-answers-count{color:#c2452d;font-weight:700}

/* Q&A detail */
.qa-detail{display:none}
.qa-detail.show{display:block}
.qa-detail-q{background:#fff;border:1px solid #ddd;border-radius:4px;padding:20px;margin-bottom:16px}
.qa-detail-q .qa-badge{margin-bottom:8px}
.qa-detail-q h2{font-size:18px;margin-bottom:10px;line-height:1.5}
.qa-detail-q .qa-body{font-size:14px;line-height:1.8;color:#444;margin-bottom:12px;white-space:pre-wrap}
.qa-detail-q .qa-q-meta{font-size:12px;color:#aaa}

.qa-answer-card{background:#fff;border:1px solid #ddd;border-radius:4px;padding:16px;margin-bottom:8px;position:relative}
.qa-answer-card.best{border-color:#4caf50;border-width:2px}
.qa-best-label{display:inline-block;background:#4caf50;color:#fff;font-size:10px;font-weight:700;padding:2px 8px;border-radius:3px;margin-bottom:8px}
.qa-answer-body{font-size:14px;line-height:1.8;color:#444;white-space:pre-wrap;margin-bottom:10px}
.qa-answer-meta{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#aaa}
.qa-like-btn{display:flex;align-items:center;gap:4px;padding:4px 10px;border:1px solid #ddd;border-radius:20px;background:#fff;cursor:pointer;font-size:12px;color:#666;font-family:inherit;transition:all .15s}
.qa-like-btn:hover{border-color:#c2452d;color:#c2452d}
.qa-like-btn.liked{background:#fce4ec;border-color:#c2452d;color:#c2452d}

.qa-answer-form{background:#fff;border:1px solid #ddd;border-radius:4px;padding:16px;margin-top:16px}
.qa-answer-form h3{font-size:15px;border-bottom:2px solid #c2452d;padding-bottom:6px;margin-bottom:14px}
.qa-back-btn{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;font-size:13px;color:#666;background:#fff;border:1px solid #ddd;border-radius:4px;cursor:pointer;font-family:inherit;margin-bottom:12px}
.qa-back-btn:hover{border-color:#c2452d;color:#c2452d}

/* Q&A post modal */
.qa-modal{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:100;justify-content:center;align-items:center}
.qa-modal.open{display:flex}
.qa-modal-inner{background:#fff;border-radius:8px;padding:24px;width:90%;max-width:500px;max-height:90vh;overflow-y:auto}

.footer{text-align:center;padding:20px 16px;font-size:11px;color:#aaa;max-width:960px;margin:0 auto}

/* Admin bar */
.admin-bar{max-width:960px;margin:0 auto;padding:4px 16px;display:none;font-size:11px;color:#888}
.admin-bar.show{display:block}
.admin-bar input{padding:3px 6px;border:1px solid #ccc;border-radius:3px;font-size:11px;width:140px}
.admin-bar button{padding:3px 8px;border:1px solid #ccc;border-radius:3px;background:#fff;font-size:11px;cursor:pointer}

/* Auth styles */
.auth-btn{padding:6px 14px;background:#c2452d;color:#fff;border:none;border-radius:4px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit}
.auth-btn:hover{background:#a83a25}
.user-menu{position:relative;display:inline-block}
.user-menu-btn{padding:6px 14px;background:#fff;border:1px solid #ddd;border-radius:4px;font-size:13px;cursor:pointer;font-family:inherit;color:#333;font-weight:700}
.user-menu-btn:hover{border-color:#c2452d}
.user-dropdown{display:none;position:absolute;right:0;top:100%;margin-top:4px;background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 8px rgba(0,0,0,.1);min-width:180px;z-index:50}
.user-dropdown.open{display:block}
.user-dropdown-item{display:block;padding:10px 14px;font-size:13px;color:#333;border-bottom:1px solid #f0f0f0;cursor:pointer;width:100%;text-align:left;background:none;border-left:none;border-right:none;border-top:none;font-family:inherit}
.user-dropdown-item:last-child{border-bottom:none}
.user-dropdown-item:hover{background:#fff8f0}
.user-dropdown-item.logout{color:#c2452d}
.auth-modal{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:100;justify-content:center;align-items:center}
.auth-modal.open{display:flex}
.auth-modal-inner{background:#fff;border-radius:8px;padding:24px;width:90%;max-width:400px;max-height:90vh;overflow-y:auto}
.auth-tabs{display:flex;gap:0;border:1px solid #ccc;border-radius:4px;overflow:hidden;margin-bottom:16px}
.auth-tab{flex:1;padding:10px;font-size:13px;font-weight:700;border:none;background:#fff;cursor:pointer;font-family:inherit;color:#666;text-align:center}
.auth-tab.active{background:#c2452d;color:#fff}
.auth-tab:not(:last-child){border-right:1px solid #ccc}
.auth-panel{display:none}
.auth-panel.active{display:block}
/* removed google-btn */
.login-hint{font-size:11px;color:#888;text-align:center;margin-top:8px;padding:8px;background:#fff8f0;border-radius:4px}

@media(max-width:768px){
  .container{flex-direction:column}
  .side-col{width:100%;order:-1}
  .rank-list{display:flex;overflow-x:auto;gap:0}
  .rank-item{flex-shrink:0;min-width:120px;flex-direction:column;text-align:center;gap:4px;border-bottom:none;border-right:1px solid #eee}
  .rank-item-all{min-width:80px}
  .side-col .side-box:nth-child(n+2){display:none}
}

/* ===================================================================
   2026 REDESIGN — 口コミ・レビューサイト調 (overrides layered on top)
   既存クラス名は全て維持。パレット/余白/装飾のみ刷新。
=================================================================== */
body{background:#f3f0e9;color:#333}
a{color:#2860a8}
a:hover{color:#c2452d}
.container{max-width:1160px;gap:22px;padding:0 16px 48px}
.side-col{width:300px}

/* --- 上部ユーティリティバー --- */
.util-bar{background:#faf8f3;border-bottom:1px solid #e8e3d7}
.util-inner{max-width:1160px;margin:0 auto;padding:5px 16px;display:flex;justify-content:space-between;align-items:center;font-size:11px;color:#8a8377;flex-wrap:wrap;gap:6px}
.util-inner a{color:#77705f}
.util-inner a:hover{color:#c2452d}

/* --- ヘッダー（ロゴ＋検索＋投稿ボタン） --- */
.header{border-bottom:1px solid #e8e3d7;background:#fff}
.header-inner{max-width:1160px;padding:14px 16px;gap:24px;justify-content:flex-start}
.logo small{color:#a09884}
.hdr-search{flex:1;display:flex;max-width:520px;border:2px solid #c2452d;border-radius:4px;overflow:hidden;background:#fff}
.hdr-search input{flex:1;border:none;outline:none;padding:9px 12px;font-size:13px;min-width:0;font-family:inherit}
.hdr-search .sep{width:1px;background:#e5ddce;margin:7px 0;flex-shrink:0}
.hdr-search button{background:#c2452d;color:#fff;border:none;padding:0 22px;font-size:14px;font-weight:700;cursor:pointer;font-family:inherit}
.hdr-search button:hover{background:#d55238}
.hdr-cta{margin-left:auto;display:flex;align-items:center;gap:10px;flex-shrink:0}
.hdr-post-btn{background:#c2452d;color:#fff;font-size:13px;font-weight:800;padding:10px 18px;border-radius:4px;box-shadow:0 2px 0 #96331f;border:none;cursor:pointer;font-family:inherit;white-space:nowrap}
.hdr-post-btn:hover{background:#d55238;text-decoration:none;color:#fff}

/* --- 赤いメインナビ（ページリンク＋SPAタブ） --- */
.main-nav{max-width:1160px;background:#fff;border-bottom:3px solid #c2452d;padding:0 16px;gap:0;flex-wrap:wrap}
.main-nav a.nav-link{padding:11px 18px;font-size:13.5px;color:#4a463d;font-weight:400}
.main-nav a.nav-link:hover{background:#f8f1ec;color:#c2452d;text-decoration:none}
.main-nav-tab{padding:11px 18px;font-size:13.5px;font-weight:700;border-bottom:none;color:#4a463d}
.main-nav-tab:hover{background:#f8f1ec;color:#c2452d}
.main-nav-tab.active{background:#c2452d;color:#fff;border-bottom:none}

/* --- パンくず／H1メタ --- */
.breadcrumb{max-width:1160px;padding:10px 16px 0;font-size:11px;color:#a09884}
.breadcrumb a{color:#a09884}
.breadcrumb a:hover{color:#c2452d}
.hero-meta{max-width:1160px;margin:6px auto 0;padding:0 16px;font-size:11px;color:#a09884;text-align:right}
.hero-meta b{color:#c2452d;font-size:13px}

/* --- カード共通の暖色ボーダー --- */
.side-box,.review-card,.qa-card,.pts-card,.filter-bar,.site-header,.qa-detail-q,.qa-answer-card,.qa-answer-form,.empty,.qa-modal-inner,.auth-modal-inner,.modal{border-color:#ddd6c6}
.side-box{border-radius:4px;margin-bottom:14px;box-shadow:0 1px 2px rgba(80,60,20,.04)}
.side-box-title{font-size:13px;font-weight:800;padding:9px 12px}
.side-box-title.gray{background:#8a7f66}

/* --- ランキング（サイドバー、リッチ寄せ） --- */
.rank-item{padding:11px 12px;gap:9px}
.rank-item:hover{background:#faf5ee}
.rank-item.active{background:#fbf1e9}
.rank-num{border-radius:3px}
.rank-num.n2{background:#9aa2ad}.rank-num.n3{background:#b3805a}
.rank-name{color:#333}
.rank-score{color:#ef7c00;font-family:Verdana,Arial,sans-serif}
.rank-stars{color:#f19100}
.rank-item-all{color:#c2452d}

/* --- スコア系はオレンジに（レビューサイト調） --- */
.rc-score-num{color:#ef7c00;font-family:Verdana,Arial,sans-serif}
.rc-score-stars{color:#f19100}
.sh-num{color:#ef7c00;font-family:Verdana,Arial,sans-serif}
.sh-stars{color:#f19100}
.pts-num{color:#ef7c00 !important;font-family:Verdana,Arial,sans-serif}
.pts-rank-pts{color:#ef7c00;font-family:Verdana,Arial,sans-serif}

/* --- レビューカードのアバターを彩色 --- */
.rc-avatar{background:#c2452d;color:#fff}

/* --- 投稿ボタン（影付き） --- */
.post-btn{box-shadow:0 2px 0 #96331f}
.post-btn:hover{background:#d55238}

/* --- CTAバナー（体験談） --- */
.cta-experience{background:#fdf3e4;border:1px solid #edd8b0;border-radius:4px;padding:18px 20px;display:flex;align-items:center;gap:16px;justify-content:space-between;flex-wrap:wrap;margin-top:20px}
.cta-experience .cx-txt{font-size:15px;font-weight:800;color:#333}
.cta-experience .cx-sub{font-size:11.5px;color:#8a8377;margin-top:4px}
.cta-experience .cx-sub b{color:#c2452d}
.cta-experience a.cx-btn{background:#c2452d;color:#fff;font-size:14px;font-weight:800;padding:11px 26px;border-radius:4px;box-shadow:0 2px 0 #96331f;flex-shrink:0}
.cta-experience a.cx-btn:hover{background:#d55238;color:#fff;text-decoration:none}

/* --- サイドバー：小カードのリスト行 --- */
.mini-row{padding:9px 0;border-bottom:1px dashed #e8e1d0}
.mini-row:last-child{border-bottom:none}
.mini-chip{font-size:9.5px;border-radius:2px;padding:1px 6px;white-space:nowrap;border:1px solid;display:inline-block}
.mini-title{display:block;font-size:12px;font-weight:700;line-height:1.5;margin-top:5px}
.mini-meta{display:block;font-size:10px;color:#a09884;margin-top:3px}
.related-links{display:flex;flex-direction:column;gap:8px;padding:9px 12px 12px;font-size:11.5px}

/* --- 4カラムフッター＋ダーク免責 --- */
.footer-cols{background:#fff;border-top:1px solid #e0d9c8;margin-top:36px}
.footer-cols-inner{max-width:1160px;margin:0 auto;padding:26px 16px;display:grid;grid-template-columns:repeat(4,1fr);gap:24px}
.footer-cols h4{font-size:12.5px;font-weight:800;color:#333;margin-bottom:10px}
.footer-cols .fc-links{display:flex;flex-direction:column;gap:7px;font-size:11.5px}
.disclaimer-bar{background:#3b342c;color:#c9c0ae}
.disclaimer-inner{max-width:1160px;margin:0 auto;padding:14px 16px;font-size:10.5px;line-height:1.7}
.disclaimer-inner .dc-bottom{margin-top:8px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px}

/* --- 比較表 --- */
.compare-wrap{background:#fff;border:1px solid #ddd6c6;border-radius:4px;overflow:hidden;margin-top:12px}
.compare-wrap table{width:100%;border-collapse:collapse;font-size:12px}
.compare-wrap thead tr{background:#f3eddd}
.compare-wrap th{padding:9px 12px;text-align:left;color:#6b5d3f;font-size:11.5px;border-bottom:1px solid #e2d8ba;white-space:nowrap}
.compare-wrap td{padding:9px 12px;border-bottom:1px solid #efe9da}
.compare-wrap tbody tr:nth-child(even){background:#fbf9f2}
.sec-h{margin:0 0 4px;font-size:17px;font-weight:800;color:#333;border-bottom:2px solid #c2452d;padding-bottom:8px;display:flex;align-items:baseline;justify-content:space-between}
.sec-h .sec-sub{font-size:11px;color:#a09884;font-weight:400;margin-left:8px}

@media(max-width:768px){
  .hdr-search{order:3;max-width:100%;flex-basis:100%}
  .hdr-cta{margin-left:0}
  .footer-cols-inner{grid-template-columns:1fr 1fr}
  .hero-meta{text-align:left}
}

/* --- メインカラム 評価ランキング（大カード, デザインコンプ準拠） --- */
.rk-wrap{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.rk-card{background:#fff;border:1px solid #ddd6c6;border-radius:4px;padding:14px 16px;display:flex;gap:14px;align-items:flex-start}
.rk-card.top{border-color:#d9bd6a}
.rk-badge{width:42px;height:42px;flex-shrink:0;color:#fff;display:flex;align-items:baseline;justify-content:center;border-radius:3px;padding-top:8px;background:#948d80}
.rk-badge b{font-size:19px;font-weight:800;line-height:1}
.rk-badge i{font-size:10px;font-weight:700;font-style:normal;margin-left:1px}
.rk-tile{width:126px;height:94px;flex-shrink:0;border-radius:3px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;text-align:center;padding:4px;overflow:hidden}
.rk-tile b{font-size:25px;font-weight:800;line-height:1.05}
.rk-tile i{font-size:8.5px;letter-spacing:1.5px;opacity:.85;margin-top:6px;font-style:normal}
.rk-body{flex:1;min-width:0}
.rk-name-row{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.rk-name{font-size:17.5px;font-weight:800;color:#2860a8}
.rk-type{font-size:10.5px;color:#a09884}
.rk-rate{display:flex;align-items:center;gap:8px;margin-top:6px;flex-wrap:wrap}
.rk-stars{position:relative;display:inline-block;font-size:16px;letter-spacing:1px;color:#ddd5c2;line-height:1}
.rk-stars .on{position:absolute;left:0;top:0;overflow:hidden;white-space:nowrap;color:#f19100}
.rk-score{font-size:21px;font-weight:800;color:#ef7c00;font-family:Verdana,Arial,sans-serif;line-height:1}
.rk-revlink{font-size:11.5px}
.rk-tags{display:flex;gap:6px;margin-top:9px;flex-wrap:wrap}
.rk-tag{font-size:10.5px;color:#7a6a4d;background:#f7f2e5;border:1px solid #e8ddc4;border-radius:2px;padding:2px 7px;white-space:nowrap}
.rk-cta{width:150px;flex-shrink:0;display:flex;flex-direction:column;gap:6px;text-align:center}
.rk-official{display:block;background:#e8571f;color:#fff;font-size:13px;font-weight:800;padding:10px 6px;border-radius:4px;box-shadow:0 2px 0 #b8430f}
.rk-official:hover{background:#f36a33;color:#fff;text-decoration:none}
.rk-note{font-size:9.5px;color:#a09884}
.rk-review-btn{display:block;font-size:11px;border:1px solid #cdc5b2;border-radius:4px;padding:6px;color:#5c564a;background:#fff}
.rk-review-btn:hover{border-color:#c2452d;color:#c2452d;text-decoration:none}
@media(max-width:768px){
  .rk-card{flex-wrap:wrap;gap:10px 12px;padding:12px 13px}
  .rk-badge{order:1;width:36px;height:36px;padding-top:7px}
  .rk-badge b{font-size:16px}
  .rk-tile{order:2;width:84px;height:52px;padding:2px}
  .rk-tile b{font-size:17px}.rk-tile i{display:none}
  .rk-cta{order:3;width:auto;margin-left:auto;flex-direction:row;align-items:center;gap:8px}
  .rk-official{padding:8px 16px}
  .rk-note,.rk-review-btn{display:none}
  .rk-body{order:4;flex-basis:100%}
  .rk-name{font-size:16px}
}
</style>
<!-- GA4 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-8CT10MC32Q"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-8CT10MC32Q');
</script>
</head>
<body>

<!-- 上部ユーティリティバー -->
<div class="util-bar">
  <div class="util-inner">
    <span>オンラインカジノの口コミ・評判掲示板【2026年最新】 — 完全匿名で投稿できます</span>
    <div style="display:flex;gap:16px;align-items:center">
      <a href="/casino-application/">掲載依頼</a>
      <a href="/about/">運営者情報</a>
      <span class="header-right" id="headerAuth"><button class="auth-btn" onclick="openAuthModal()">ログイン / 登録</button></span>
    </div>
  </div>
</div>

<!-- ヘッダー：ロゴ＋検索＋投稿ボタン -->
<div class="header">
  <div class="header-inner">
    <a href="/" class="logo" style="display:inline-flex;flex-direction:column;align-items:flex-start;text-decoration:none;line-height:1;flex-shrink:0"><img src="/logo-wordmark.png?v=20260728b" alt="カジコミ - オンラインカジノの口コミ・評判掲示板" style="height:46px;width:auto;display:block"><small>オンカジの口コミ・評判掲示板</small></a>
    <div class="hdr-search">
      <input id="hdrSearchSite" placeholder="カジノ名（例: スロット天国）" onkeydown="if(event.key==='Enter')runHeaderSearch()">
      <span class="sep"></span>
      <input id="hdrSearchKw" placeholder="キーワード（例: 出金 早い）" onkeydown="if(event.key==='Enter')runHeaderSearch()">
      <button onclick="runHeaderSearch()">検索</button>
    </div>
    <div class="hdr-cta">
      <button class="hdr-post-btn" onclick="switchTab('reviews');document.getElementById('postForm').classList.add('open');document.getElementById('postForm').scrollIntoView({behavior:'smooth'})">口コミを投稿</button>
    </div>
  </div>
</div>

<!-- 赤いメインナビ -->
<div class="main-nav">
  <button class="main-nav-tab active" id="navReviews" onclick="switchTab('reviews')">口コミ</button>
  <button class="main-nav-tab" id="navQA" onclick="switchTab('qa')">Q&A</button>
  <button class="main-nav-tab" id="navPoints" onclick="switchTab('points')">ポイント</button>
  <a class="nav-link" href="/casino-guide/">カジノガイド</a>
  <a class="nav-link" href="/payment-guide/">決済ガイド</a>
  <a class="nav-link" href="/blog/">ブログ</a>
  <a class="nav-link" href="/casino-application/">掲載依頼</a>
</div>

<div class="breadcrumb">
  <a href="#" onclick="goHome();return false">カジコミ トップ</a> › <span id="breadSite">すべての口コミ</span>
</div>

<div class="admin-bar" id="adminBar">
  管理者: <input type="password" id="adminKey" placeholder="管理キー"> 
  <button onclick="toggleAdmin()">認証</button>
  <span id="adminStatus"></span>
  <button onclick="loadAdminUsers()" style="margin-left:8px">ユーザー一覧</button>
</div>
<div id="adminUsersSection" style="display:none;max-width:960px;margin:0 auto;padding:8px 16px">
  <div class="pts-card"><h3>登録ユーザー一覧</h3><div id="adminUsersTable" style="overflow-x:auto"></div></div>
</div>

<div class="container">
  <div class="main-col">
    <div style="display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:8px;margin:0 0 16px 0">
      <div>
        <h1 style="font-size:22px;color:#333;margin:0;font-weight:800;letter-spacing:.3px">オンラインカジノの口コミ・評判掲示板 <span style="font-size:15px;color:#c2452d">【2026年最新】</span></h1>
        <p style="margin:6px 0 0;font-size:12.5px;color:#7d766a">実際のプレイヤーによるリアルな口コミを完全匿名で投稿・閲覧。出金速度・サポート対応・ボーナス条件をカテゴリ別に評価しています。</p>
      </div>
      <div class="hero-meta" id="heroMeta" style="margin:0;padding:0"></div>
    </div>

    <!-- Pickup Casino Banners -->
    <div style="display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap;justify-content:center">
      <a href="https://sloten.io?referral=mOAo" target="_blank" rel="noopener" onclick="if(typeof gtag==='function')gtag('event','affiliate_click',{casino:'sloten',link_url:this.href,page_path:'/',link_text:'pickup_banner'})" style="flex:1;min-width:150px;max-width:220px;border-radius:10px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.15);transition:transform .2s" onmouseover="this.style.transform='translateY(-2px)'" onmouseout="this.style.transform=''"><img src="/images/partners/sloten777.jpg" alt="カジコミ × 777スロット天国" loading="lazy" style="width:100%;height:auto;display:block"></a>
      <a href="https://tracker-pm2.konibet.com/link?btag=6031994_490733" target="_blank" rel="noopener" onclick="if(typeof gtag==='function')gtag('event','affiliate_click',{casino:'konibet',link_url:this.href,page_path:'/',link_text:'pickup_banner'})" style="flex:1;min-width:150px;max-width:220px;border-radius:10px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.15);transition:transform .2s" onmouseover="this.style.transform='translateY(-2px)'" onmouseout="this.style.transform=''"><img src="/images/partners/konibet.jpg" alt="カジコミ × コニベット" loading="lazy" style="width:100%;height:auto;display:block"></a>
      <a href="https://tracker-pm2.casino-wonder.com/link?btag=6706046_490730" target="_blank" rel="noopener" onclick="if(typeof gtag==='function')gtag('event','affiliate_click',{casino:'wonder',link_url:this.href,page_path:'/',link_text:'pickup_banner'})" style="flex:1;min-width:150px;max-width:220px;border-radius:10px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.15);transition:transform .2s" onmouseover="this.style.transform='translateY(-2px)'" onmouseout="this.style.transform=''"><img src="/images/partners/wonder.jpg" alt="カジコミ × ワンダーカジノ" loading="lazy" style="width:100%;height:auto;display:block"></a>
      <a href="/casino-guide/eldoah/" onclick="if(typeof gtag==='function')gtag('event','affiliate_click',{casino:'eldoah',link_url:this.href,page_path:'/',link_text:'pickup_banner'})" style="flex:1;min-width:150px;max-width:220px;border-radius:10px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.15);transition:transform .2s" onmouseover="this.style.transform='translateY(-2px)'" onmouseout="this.style.transform=''"><img src="/images/partners/eldoah.jpg" alt="カジコミ × エルドアカジノ" loading="lazy" style="width:100%;height:auto;display:block"></a>
    </div>

    <!-- Q&A Section -->
    <div class="qa-section" id="qaSection">
      <!-- Q&A List -->
      <div id="qaList">
        <div class="qa-cat-pills" id="qaCatPills">
          <button class="qa-pill active" data-cat="all">全て</button>
          <button class="qa-pill" data-cat="deposit">入出金</button>
          <button class="qa-pill" data-cat="bonus">ボーナス</button>
          <button class="qa-pill" data-cat="beginner">初心者</button>
          <button class="qa-pill" data-cat="trouble">トラブル</button>
          <button class="qa-pill" data-cat="site">サイト選び</button>
          <button class="qa-pill" data-cat="general">その他</button>
        </div>
        <div class="qa-sort-bar">
          <button class="qa-sort-btn active" data-sort="new">新着</button>
          <button class="qa-sort-btn" data-sort="popular">人気</button>
          <button class="qa-sort-btn" data-sort="unanswered">未回答</button>
        </div>
        <button class="post-btn" onclick="openQAModal()">質問する</button>
        <div id="qaCards"></div>
      </div>

      <!-- Q&A Detail -->
      <div class="qa-detail" id="qaDetail">
        <button class="qa-back-btn" onclick="backToQAList()">← 一覧に戻る</button>
        <div id="qaDetailContent"></div>
      </div>
    </div>

    <!-- Points Section -->
    <div class="points-section" id="pointsSection">
      <div class="pts-card">
        <h3>ポイント確認</h3>
        <div class="pts-check-row">
          <input type="text" id="ptsNickname" placeholder="ニックネームを入力" maxlength="20">
          <button onclick="checkPoints()">確認</button>
        </div>
        <div id="ptsResult" style="display:none">
          <div class="pts-balance">
            <div class="pts-num" id="ptsNum">0</div>
            <div class="pts-label"><span id="ptsUser"></span>さんの保有ポイント</div>
          </div>
          <h4 style="font-size:13px;color:#888;margin-bottom:8px">獲得履歴</h4>
          <div id="ptsHistory"></div>
        </div>
      </div>
      <div class="pts-card">
        <h3>ポイントランキング TOP10</h3>
        <div id="ptsRanking">読み込み中...</div>
      </div>
      <div class="pts-card">
        <h3>仮想通貨と交換 <span class="crypto-badge">準備中</span></h3>
        <p style="font-size:13px;color:#888;margin-bottom:12px">ポイントが貯まったら仮想通貨に交換できるようになります！</p>
        <div class="crypto-rate">1,000 pt → <strong>0.0001 BTC</strong></div>
        <div class="crypto-rate">5,000 pt → <strong>0.001 ETH</strong></div>
        <div class="crypto-rate">10,000 pt → <strong>1 USDT</strong></div>
        <p style="font-size:11px;color:#aaa;margin-top:12px">※ 交換機能は近日実装予定です。今のうちにポイントを貯めておきましょう！</p>
      </div>
      <div class="pts-card">
        <h3>ポイントの貯め方</h3>
        <div style="font-size:13px;line-height:2;color:#555">
          口コミを投稿 → <strong style="color:#c2452d">+5 pt</strong><br>
          質問を投稿 → <strong style="color:#c2452d">+5 pt</strong><br>
          回答を投稿 → <strong style="color:#c2452d">+10 pt</strong><br>
          回答にいいねをもらう → <strong style="color:#c2452d">+2 pt</strong><br>
          ベストアンサーに選ばれる → <strong style="color:#c2452d">+50 pt</strong>
        </div>
        <p style="font-size:11px;color:#aaa;margin-top:8px">※ ポイント獲得にはログインが必要です。<a href="#" onclick="openAuthModal();return false" style="color:#c2452d">ログイン / 登録はこちら</a></p>
      </div>
    </div>

    <!-- Review Section -->
    <div class="review-section" id="reviewSection">
    <!-- 口コミの種類切り替え（サイト / プロモ） -->
    <div class="rtype-toggle" id="rtypeToggle">
      <button id="rtypeSite" class="rtype-btn active" onclick="switchReviewType('site')">サイトの口コミ</button>
      <button id="rtypePromo" class="rtype-btn" onclick="switchReviewType('promo')">プロモの口コミ</button>
    </div>
    <!-- 評価ランキング（大カード） -->
    <section id="rankingSection" style="margin-bottom:28px">
      <h2 class="sec-h"><span>オンラインカジノ 評価ランキング<span class="sec-sub">口コミ評価の平均点順</span></span></h2>
      <div class="rk-wrap" id="rankingCards"></div>
      <div style="margin-top:10px;text-align:right;font-size:11px"><a href="#" onclick="openAddSite();return false" style="color:#8a8377">＋ 掲載されていないサイトを追加する</a></div>
    </section>
    <!-- Site header (shown when filtered) -->
    <div class="site-header" id="siteHeader">
      <div class="sh-score">
        <div class="sh-num" id="shNum">-</div>
        <div class="sh-stars" id="shStars"></div>
      </div>
      <div class="sh-info">
        <div class="sh-name" id="shName"></div>
        <div class="sh-count" id="shCount"></div>
        <div class="sh-bars" id="shBars"></div>
      </div>
    </div>

    <div class="filter-bar">
      <div class="cat-tabs" id="catTabs">
        <button class="cat-tab active" data-cat="all">すべて</button>
        <button class="cat-tab" data-cat="withdrawal">出金</button>
        <button class="cat-tab" data-cat="support">対応</button>
        <button class="cat-tab" data-cat="bonus">ボーナス</button>
        <button class="cat-tab" data-cat="overall">総合</button>
      </div>
      <label>並び替え</label>
      <select id="sortSelect" onchange="loadReviews()">
        <option value="new">新しい順</option>
        <option value="old">古い順</option>
        <option value="high">評価が高い順</option>
        <option value="low">評価が低い順</option>
      </select>
    </div>

    <button class="post-btn" onclick="toggleForm()">口コミを投稿する</button>

    <div class="post-form" id="postForm">
      <h3>口コミを投稿</h3>
      <div class="form-row">
        <label>サイト名 *</label>
        <select id="f-site"></select>
      </div>
      <div class="form-row">
        <label>ニックネーム（空欄で「匿名」）</label>
        <input type="text" id="f-nickname" placeholder="匿名さん" maxlength="20">
        <div class="login-hint" id="reviewLoginHint" style="display:none">ログインするとポイントが貯まります</div>
      </div>
      <div class="form-row">
        <label>カテゴリ</label>
        <select id="f-category">
          <option value="overall">総合</option>
          <option value="withdrawal">出金</option>
          <option value="support">サポート対応</option>
          <option value="bonus">ボーナス</option>
        </select>
      </div>
      <div class="form-row">
        <label>評価 *</label>
        <div class="star-input" id="starInput">
          <span data-v="5" class="on" onclick="setStar(5)">★</span>
          <span data-v="4" class="on" onclick="setStar(4)">★</span>
          <span data-v="3" class="on" onclick="setStar(3)">★</span>
          <span data-v="2" class="on" onclick="setStar(2)">★</span>
          <span data-v="1" class="on" onclick="setStar(1)">★</span>
        </div>
      </div>
      <div class="form-row">
        <label>口コミ内容 *</label>
        <textarea id="f-body" placeholder="実際に使ってみた感想を自由に書いてください..."></textarea>
      </div>
      <button class="submit-btn" id="submitBtn" onclick="submitReview()">この内容で投稿する</button>
      <div class="form-msg" id="formMsg"></div>
    </div>

    <div id="reviews"></div>

    </div><!-- end review-section -->

    <div class="cta-banner" id="siteCta" style="display:none">
      <a id="siteCtaLink" href="#" target="_blank">▶ 公式サイトはこちら</a>
      <small>登録無料 ・ 最短30秒</small>
    </div>

    <!-- 体験談CTA -->
    <div class="cta-experience">
      <div>
        <div class="cx-txt">あなたの体験談が、誰かのカジノ選びの参考になります</div>
        <div class="cx-sub">完全匿名OK・会員登録不要。口コミ投稿で <b>+5pt</b> 貯まります。</div>
      </div>
      <a class="cx-btn" href="#" onclick="switchTab('reviews');document.getElementById('postForm').classList.add('open');document.getElementById('postForm').scrollIntoView({behavior:'smooth'});return false">口コミを投稿する</a>
    </div>

    <!-- 比較表 -->
    <section style="margin-top:28px">
      <h2 class="sec-h">オンラインカジノ比較表<span class="sec-sub">【2026年最新】</span></h2>
      <div class="compare-wrap">
        <table>
          <thead>
            <tr><th>カジノ名</th><th>入金不要ボーナス</th><th>出金速度</th><th>KYC</th><th>主な入金方法</th></tr>
          </thead>
          <tbody>
            <tr><td><a href="/casino/sloten/">スロット天国</a></td><td style="font-weight:700;color:#c2452d;white-space:nowrap">3,000円</td><td style="white-space:nowrap">即日</td><td style="white-space:nowrap">不要</td><td style="color:#5c564a">PayPay / コンビニ / 仮想通貨 / 銀行</td></tr>
            <tr><td><a href="/casino/konibet/">コニベット</a></td><td style="font-weight:700;color:#c2452d;white-space:nowrap">$50+FS30回</td><td style="white-space:nowrap">数分〜1時間</td><td style="white-space:nowrap">必要</td><td style="color:#5c564a">銀行 / 仮想通貨 / Payz</td></tr>
            <tr><td><a href="/casino/wonder/">ワンダーカジノ</a></td><td style="font-weight:700;color:#c2452d;white-space:nowrap">$30</td><td style="white-space:nowrap">最短30秒</td><td style="white-space:nowrap">EASY版不要</td><td style="color:#5c564a">銀行 / 仮想通貨 / Payz</td></tr>
          </tbody>
        </table>
      </div>
      <div style="font-size:10.5px;color:#a09884;margin-top:6px">※ 2026年7月時点の情報です。最新情報は各カジノ公式サイトをご確認ください。</div>
    </section>
  </div>

  <div class="side-col">
    <div class="side-box">
      <div class="side-box-title">評価ランキング</div>
      <ul class="rank-list" id="rankList"></ul>
      <div class="add-site-link" onclick="openAddSite()">＋ サイトを追加する</div>
    </div>
    <div class="side-box">
      <div class="side-box-title">ポイントの貯め方</div>
      <div style="padding:4px 12px 10px">
        <div class="mini-row" style="display:flex;align-items:center;justify-content:space-between;gap:8px"><span style="font-size:12px;color:#55503f">口コミを投稿</span><span style="font-size:12.5px;font-weight:800;color:#ef7c00;font-family:Verdana,Arial,sans-serif">+5pt</span></div>
        <div class="mini-row" style="display:flex;align-items:center;justify-content:space-between;gap:8px"><span style="font-size:12px;color:#55503f">質問を投稿</span><span style="font-size:12.5px;font-weight:800;color:#ef7c00;font-family:Verdana,Arial,sans-serif">+5pt</span></div>
        <div class="mini-row" style="display:flex;align-items:center;justify-content:space-between;gap:8px"><span style="font-size:12px;color:#55503f">回答を投稿</span><span style="font-size:12.5px;font-weight:800;color:#ef7c00;font-family:Verdana,Arial,sans-serif">+10pt</span></div>
        <div class="mini-row" style="display:flex;align-items:center;justify-content:space-between;gap:8px"><span style="font-size:12px;color:#55503f">ベストアンサー</span><span style="font-size:12.5px;font-weight:800;color:#ef7c00;font-family:Verdana,Arial,sans-serif">+50pt</span></div>
        <div style="font-size:10px;color:#a09884;line-height:1.6;padding-top:8px">貯まったポイントは仮想通貨（BTC / ETH / USDT）との交換機能を近日実装予定。<a href="#" onclick="switchTab('points');return false">詳しく見る</a></div>
      </div>
    </div>
    <div class="side-box">
      <div class="side-box-title gray">投稿統計</div>
      <div style="padding:12px;font-size:12px;color:#666" id="statsBox">読み込み中...</div>
    </div>
    <div class="side-box">
      <div class="side-box-title">関連サイト</div>
      <div class="related-links">
        <a href="https://casino-ranking-jp.com" target="_blank" rel="noopener">カジノランキングJP — 専門家によるオンカジ徹底比較</a>
        <a href="https://casino-ranking-jp.com/blog/online-casino-fast-withdrawal/" target="_blank" rel="noopener">出金が早いカジノランキング【2026】</a>
        <a href="https://casino-ranking-jp.com/blog/casino-bonus-comparison-2026/" target="_blank" rel="noopener">入金不要ボーナスまとめ【2026年最新】</a>
        <a href="https://crypto-card.club/" target="_blank" rel="noopener">crypto-card.club — 仮想通貨カード・入金ガイド</a>
      </div>
    </div>
  </div>
</div>

<footer class="footer-cols" role="contentinfo">
  <div class="footer-cols-inner">
    <div>
      <h4>口コミ・Q&amp;A</h4>
      <div class="fc-links">
        <a href="/reviews/">口コミ一覧</a>
        <a href="/qa/">Q&amp;A掲示板</a>
        <a href="#" onclick="switchTab('reviews');return false">評価ランキング</a>
        <a href="#" onclick="switchTab('reviews');document.getElementById('postForm').classList.add('open');return false">口コミを投稿する</a>
      </div>
    </div>
    <div>
      <h4>ガイド</h4>
      <div class="fc-links">
        <a href="/casino-guide/">カジノガイド</a>
        <a href="/payment-guide/">決済ガイド</a>
        <a href="/blog/">ブログ</a>
        <a href="/seo-blog/">SEOガイド</a>
      </div>
    </div>
    <div>
      <h4>カジコミについて</h4>
      <div class="fc-links">
        <a href="/about/">運営者情報</a>
        <a href="/about/">編集方針</a>
        <a href="/casino-application/">カジノ掲載依頼</a>
        <a href="/about/">お問い合わせ</a>
      </div>
    </div>
    <div>
      <h4>関連サイト</h4>
      <div class="fc-links">
        <a href="https://casino-ranking-jp.com" target="_blank" rel="noopener">カジノランキングJP</a>
        <a href="https://casino-ranking-jp.com/blog/online-casino-fast-withdrawal/" target="_blank" rel="noopener">出金が早いカジノランキング</a>
        <a href="https://casino-ranking-jp.com/blog/casino-bonus-comparison-2026/" target="_blank" rel="noopener">ボーナス比較2026</a>
        <a href="https://crypto-card.club/" target="_blank" rel="noopener">crypto-card.club</a>
      </div>
    </div>
  </div>
</footer>
<div class="disclaimer-bar">
  <div class="disclaimer-inner">
    <div>※ 口コミは個人の感想であり、内容の正確性を保証するものではありません。カジコミは実際のプレイヤーによる口コミを掲載し、すべての投稿を運営事務局が確認しています。オンラインカジノの利用は自己責任で行ってください。</div>
    <div class="dc-bottom"><span>© 2026 カジコミ運営事務局</span><span>最終更新: 2026年7月31日</span></div>
  </div>
</div>

<!-- Q&A post modal -->
<div class="qa-modal" id="qaModal">
  <div class="qa-modal-inner">
    <h3>質問を投稿</h3>
    <div class="form-row">
      <label>ニックネーム（空欄で「匿名」）</label>
      <input type="text" id="qa-nickname" placeholder="匿名" maxlength="20">
    </div>
    <div class="form-row">
      <label>カテゴリ</label>
      <select id="qa-category">
        <option value="beginner">初心者</option>
        <option value="deposit">入出金</option>
        <option value="bonus">ボーナス</option>
        <option value="site">サイト選び</option>
        <option value="trouble">トラブル</option>
        <option value="general">その他</option>
      </select>
    </div>
    <div class="form-row">
      <label>タイトル *</label>
      <input type="text" id="qa-title" placeholder="質問のタイトルを入力" maxlength="100">
    </div>
    <div class="form-row">
      <label>質問内容 *</label>
      <textarea id="qa-body" placeholder="質問の詳細を書いてください..."></textarea>
    </div>
    <button class="submit-btn" id="qaSubmitBtn" onclick="submitQuestion()">質問を投稿する</button>
    <div class="form-msg" id="qaFormMsg"></div>
    <br>
    <button style="width:100%;padding:8px;border:1px solid #ccc;border-radius:4px;background:#fff;cursor:pointer;font-family:inherit" onclick="closeQAModal()">キャンセル</button>
  </div>
</div>

<!-- Auth modal -->
<div class="auth-modal" id="authModal">
  <div class="auth-modal-inner">
    <div class="auth-tabs">
      <button class="auth-tab active" onclick="switchAuthTab('login')">ログイン</button>
      <button class="auth-tab" onclick="switchAuthTab('register')">新規登録</button>
    </div>
    <div class="auth-panel active" id="authLoginPanel">
      <div class="form-row">
        <label>メールアドレス</label>
        <input type="email" id="login-email" placeholder="email@example.com">
      </div>
      <div class="form-row">
        <label>パスワード</label>
        <input type="password" id="login-password" placeholder="パスワード">
      </div>
      <button class="submit-btn" onclick="doLogin()">ログイン</button>
      <div class="form-msg" id="loginMsg"></div>
    </div>
    <div class="auth-panel" id="authRegisterPanel" style="display:none">
      <div class="form-row">
        <label>メールアドレス *</label>
        <input type="email" id="reg-email" placeholder="email@example.com">
      </div>
      <div class="form-row">
        <label>ニックネーム *（2〜20文字）</label>
        <input type="text" id="reg-nickname" placeholder="ニックネーム" maxlength="20">
      </div>
      <div class="form-row">
        <label>パスワード *（6文字以上）</label>
        <input type="password" id="reg-password" placeholder="パスワード">
      </div>
      <button class="submit-btn" onclick="doRegister()">登録する</button>
      <div class="form-msg" id="regMsg"></div>
    </div>
    <br>
    <button style="width:100%;padding:8px;border:1px solid #ccc;border-radius:4px;background:#fff;cursor:pointer;font-family:inherit" onclick="closeAuthModal()">閉じる</button>
  </div>
</div>

<!-- Add site modal -->
<div class="modal-overlay" id="addSiteModal">
  <div class="modal">
    <h3>サイトを追加</h3>
    <div class="form-row">
      <label>サイト名 *</label>
      <input type="text" id="as-name" placeholder="例：カジ旅" maxlength="50">
    </div>
    <div class="form-row">
      <label>URL（任意）</label>
      <input type="text" id="as-url" placeholder="https://...">
    </div>
    <button class="submit-btn" onclick="addSite()">追加する</button>
    <div class="form-msg" id="asMsg"></div>
    <br>
    <button style="width:100%;padding:8px;border:1px solid #ccc;border-radius:4px;background:#fff;cursor:pointer;font-family:inherit" onclick="closeAddSite()">キャンセル</button>
  </div>
</div>

<script>
// ===== AUTH =====
let currentUser = null;

function getToken() { return localStorage.getItem('cajikomi_token'); }
function setToken(t) { localStorage.setItem('cajikomi_token', t); }
function clearToken() { localStorage.removeItem('cajikomi_token'); }

async function checkAuth() {
  const token = getToken();
  if (!token) { updateAuthUI(null); return; }
  try {
    const r = await fetch('/api/auth/me', { headers: { 'Authorization': 'Bearer ' + token } });
    if (r.ok) { const d = await r.json(); currentUser = d.user; updateAuthUI(currentUser); }
    else { clearToken(); currentUser = null; updateAuthUI(null); }
  } catch(e) { updateAuthUI(null); }
}

function updateAuthUI(user) {
  const el = document.getElementById('headerAuth');
  if (user) {
    el.innerHTML = `<div class="user-menu">
      <button class="user-menu-btn" onclick="toggleUserMenu()">${esc(user.nickname)}</button>
      <div class="user-dropdown" id="userDropdown">
        <div class="user-dropdown-item" style="color:#c2452d;font-weight:900">${user.points} pt</div>
        <button class="user-dropdown-item" onclick="switchTab('points')">ポイント詳細</button>
        <button class="user-dropdown-item logout" onclick="doLogout()">ログアウト</button>
      </div>
    </div>`;
    // Pre-fill nickname fields and make read-only
    ['f-nickname','qa-nickname'].forEach(id => {
      const inp = document.getElementById(id);
      if (inp) { inp.value = user.nickname; inp.readOnly = true; inp.style.background = '#f5f5f0'; }
    });
    // Hide login hints
    const hint = document.getElementById('reviewLoginHint');
    if (hint) hint.style.display = 'none';
  } else {
    el.innerHTML = '<button class="auth-btn" onclick="openAuthModal()">ログイン / 登録</button>';
    ['f-nickname','qa-nickname'].forEach(id => {
      const inp = document.getElementById(id);
      if (inp) { inp.readOnly = false; inp.style.background = '#fff'; }
    });
    const hint = document.getElementById('reviewLoginHint');
    if (hint) hint.style.display = 'block';
  }
}

function toggleUserMenu() {
  const dd = document.getElementById('userDropdown');
  dd.classList.toggle('open');
}
document.addEventListener('click', e => {
  const dd = document.getElementById('userDropdown');
  if (dd && !e.target.closest('.user-menu')) dd.classList.remove('open');
});

function openAuthModal() { document.getElementById('authModal').classList.add('open'); }
function closeAuthModal() { document.getElementById('authModal').classList.remove('open'); }

function switchAuthTab(tab) {
  document.querySelectorAll('.auth-tab').forEach((t,i) => t.classList.toggle('active', (tab==='login'?i===0:i===1)));
  document.getElementById('authLoginPanel').classList.toggle('active', tab==='login');
  document.getElementById('authRegisterPanel').classList.toggle('active', tab==='register');
}

async function doLogin() {
  const msg = document.getElementById('loginMsg');
  msg.className='form-msg'; msg.style.display='none';
  const email = document.getElementById('login-email').value;
  const password = document.getElementById('login-password').value;
  try {
    const r = await fetch('/api/auth/login', { method:'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify({email,password}) });
    const d = await r.json();
    if (d.success) {
      setToken(d.token);
      msg.className='form-msg success'; msg.textContent='ログイン成功！'; msg.style.display='block';
      setTimeout(() => { closeAuthModal(); checkAuth(); }, 1000);
    } else {
      msg.className='form-msg error'; msg.textContent=''+(d.error||'エラー'); msg.style.display='block';
    }
  } catch(e) { msg.className='form-msg error'; msg.textContent='通信エラー'; msg.style.display='block'; }
}

async function doRegister() {
  const msg = document.getElementById('regMsg');
  msg.className='form-msg'; msg.style.display='none';
  const email = document.getElementById('reg-email').value;
  const nickname = document.getElementById('reg-nickname').value;
  const password = document.getElementById('reg-password').value;
  try {
    const r = await fetch('/api/auth/register', { method:'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify({email,nickname,password}) });
    const d = await r.json();
    if (d.success) {
      setToken(d.token);
      msg.className='form-msg success'; msg.textContent=''+d.message; msg.style.display='block';
      setTimeout(() => { closeAuthModal(); checkAuth(); }, 1000);
    } else {
      msg.className='form-msg error'; msg.textContent=''+(d.error||'エラー'); msg.style.display='block';
    }
  } catch(e) { msg.className='form-msg error'; msg.textContent='通信エラー'; msg.style.display='block'; }
}

function doLogout() {
  clearToken(); currentUser = null; updateAuthUI(null);
}

async function loadAdminUsers() {
  if (!adminKey) { alert('管理キーを入力してください'); return; }
  const sec = document.getElementById('adminUsersSection');
  sec.style.display = sec.style.display === 'none' ? 'block' : 'none';
  if (sec.style.display === 'none') return;
  try {
    const r = await fetch('/api/admin/users', { headers: { 'X-Admin-Key': adminKey } });
    const d = await r.json();
    if (d.error) { document.getElementById('adminUsersTable').innerHTML = '<p style="color:red">'+d.error+'</p>'; return; }
    const users = d.users || [];
    if (!users.length) { document.getElementById('adminUsersTable').innerHTML = '<p style="color:#aaa">登録ユーザーなし</p>'; return; }
    let html = '<table style="width:100%;font-size:12px;border-collapse:collapse;margin-top:8px"><tr style="background:#f5f5f0"><th style="padding:6px;border:1px solid #ddd">ID</th><th style="padding:6px;border:1px solid #ddd">メール</th><th style="padding:6px;border:1px solid #ddd">ニックネーム</th><th style="padding:6px;border:1px solid #ddd">認証</th><th style="padding:6px;border:1px solid #ddd">IP</th><th style="padding:6px;border:1px solid #ddd">ポイント</th><th style="padding:6px;border:1px solid #ddd">登録日</th></tr>';
    users.forEach(u => {
      html += `<tr><td style="padding:6px;border:1px solid #ddd">${u.id}</td><td style="padding:6px;border:1px solid #ddd">${esc(u.email)}</td><td style="padding:6px;border:1px solid #ddd">${esc(u.nickname)}</td><td style="padding:6px;border:1px solid #ddd">${u.auth_method}</td><td style="padding:6px;border:1px solid #ddd">${esc(u.ip_address||'')}</td><td style="padding:6px;border:1px solid #ddd">${u.points}</td><td style="padding:6px;border:1px solid #ddd">${u.created_at}</td></tr>`;
    });
    html += '</table>';
    document.getElementById('adminUsersTable').innerHTML = html;
  } catch(e) { document.getElementById('adminUsersTable').innerHTML = '<p style="color:red">エラー</p>'; }
}

const CAT_LABELS={withdrawal:'出金',support:'サポート',bonus:'ボーナス',overall:'総合'};
const CAT_CLASS={withdrawal:'cat-withdrawal',support:'cat-support',bonus:'cat-bonus',overall:'cat-overall'};
let currentSite='all',currentCat='all',selectedStars=5,sitesData=[],adminKey='',currentReviewType='site';

function switchReviewType(t){
  currentReviewType=(t==='promo')?'promo':'site';
  const isPromo=currentReviewType==='promo';
  const sBtn=document.getElementById('rtypeSite'),pBtn=document.getElementById('rtypePromo');
  if(sBtn)sBtn.classList.toggle('active',!isPromo);
  if(pBtn)pBtn.classList.toggle('active',isPromo);
  // ランキング/サイトヘッダーはサイトの口コミ専用（プロモでは非表示）
  const rk=document.getElementById('rankingSection');if(rk)rk.style.display=isPromo?'none':'';
  const sh=document.getElementById('siteHeader');if(sh&&isPromo)sh.classList.remove('show');
  // フォーム/ボタンの文言をプロモ用に切り替え
  const postBtn=document.querySelector('.post-btn');if(postBtn)postBtn.textContent=isPromo?'プロモの口コミを投稿する':'口コミを投稿する';
  const formH=document.querySelector('#postForm h3');if(formH)formH.textContent=isPromo?'プロモの口コミを投稿':'口コミを投稿';
  const bodyEl=document.getElementById('f-body');if(bodyEl)bodyEl.placeholder=isPromo?'受け取ったボーナス／プロモの内容や、賭け条件・出金しやすさなどの感想を書いてください...':'実際に使ってみた感想を自由に書いてください...';
  currentCat='all';
  document.querySelectorAll('.cat-tab').forEach(b=>b.classList.toggle('active',b.dataset.cat==='all'));
  loadReviews();
}

async function loadSites(){
  try{const r=await fetch('/api/sites');const d=await r.json();sitesData=d.sites||[];renderRanking();populateSelect();updateStats()}catch(e){}
}

function renderRanking(){
  const forceOrder={konibet:1,eldoah:2,mystino:3,sloten:4};
  const ranked=[...sitesData].filter(s=>s.review_count>0).sort((a,b)=>{
    const oa=forceOrder[a.id]||99,ob=forceOrder[b.id]||99;
    if(oa!==ob)return oa-ob;
    return (b.avg_stars||0)-(a.avg_stars||0);
  });
  const el=document.getElementById('rankList');
  let html=`<li class="rank-item rank-item-all ${currentSite==='all'?'active':''}" onclick="selectSite('all')">すべて表示</li>`;
  ranked.forEach((s,i)=>{
    const nc=i===0?'':i===1?'n2':i===2?'n3':'n'+(i+1);
    html+=`<li class="rank-item ${currentSite===s.id?'active':''}" onclick="selectSite('${s.id}')">
      <span class="rank-num ${nc}">${i+1}</span>
      <span class="rank-info"><span class="rank-name">${esc(s.name)}</span><br><span class="rank-stars">${'★'.repeat(Math.round(s.avg_stars||0))}</span> <span class="rank-count">${s.review_count}件</span></span>
      <span class="rank-score">${s.avg_stars||'-'}</span>
      <a href="/casino/${s.id}/" style="font-size:10px;color:#c2452d;margin-left:4px" title="${esc(s.name)}の詳細ページ">詳細→</a>
    </li>`;
  });
  // Sites with 0 reviews
  sitesData.filter(s=>s.review_count===0).forEach(s=>{
    html+=`<li class="rank-item ${currentSite===s.id?'active':''}" onclick="selectSite('${s.id}')">
      <span class="rank-num n9">-</span>
      <span class="rank-info"><span class="rank-name">${esc(s.name)}</span><br><span class="rank-count">口コミなし</span></span>
    </li>`;
  });
  el.innerHTML=html;
  renderRankingCards();
}

const CASINO_META={
  sloten:{tile:'#5a3ea6',en:'SLOT TENGOKU',short:'スロ天',type:'スロット特化・PayPay対応',tags:['入金不要3,000円','PayPay対応','KYC不要']},
  konibet:{tile:'#b03535',en:'KONIBET',short:'コニベ',type:'総合型・ライブカジノ充実',tags:['$50+FS30回','高リベート率','24h日本語サポート']},
  wonder:{tile:'#1f8a70',en:'WONDER CASINO',short:'ワンダ',type:'ハイローラー向け・高速出金',tags:['$30入金不要','出金最短30秒','EASY版KYC不要']},
  stake:{tile:'#2f3542',en:'STAKE',short:'ステーク',type:'仮想通貨特化・スポーツ対応',tags:['仮想通貨メイン','レーキバック','本人確認不要']},
  eldoah:{tile:'#c0392b',en:'ELDOAH',short:'エルド',type:'老舗・ライブ充実',tags:['銀行入金対応','日本語サポート']},
  mystino:{tile:'#c75d92',en:'MYSTINO',short:'ミスティ',type:'初心者向け・出金条件ゆるめ',tags:['$10+FS60回','デイリースピン','条件1倍']},
  amusevip:{tile:'#b8860b',en:'AMUSE VIP',short:'AMUSE',type:'VIP向け・高還元',tags:['VIP優遇','高還元']}
};
function casinoMeta(s){
  const m=CASINO_META[s.id]||{};
  const short=m.short||String(s.name||'').replace(/（.*?）/g,'').replace(/カジノ$/,'').slice(0,4);
  return {short,tile:m.tile||'#948d80',en:m.en||String(s.id||'').toUpperCase(),type:m.type||'',tags:m.tags||[]};
}
function renderRankingCards(){
  const box=document.getElementById('rankingCards');
  if(!box)return;
  const sec=document.getElementById('rankingSection');
  if(currentSite!=='all'){ if(sec)sec.style.display='none'; return; }
  if(sec)sec.style.display='';
  const badge=['#c9a13b','#9aa2ad','#b3805a'];
  const forceOrder={konibet:1,eldoah:2,mystino:3,sloten:4};
  const ranked=[...sitesData].filter(s=>s.review_count>0).sort((a,b)=>{
    const oa=forceOrder[a.id]||99,ob=forceOrder[b.id]||99;
    if(oa!==ob)return oa-ob;
    return (b.avg_stars||0)-(a.avg_stars||0);
  }).slice(0,6);
  box.innerHTML=ranked.map((s,i)=>{
    const m=casinoMeta(s);
    const score=(s.avg_stars||0).toFixed(2);
    const pct=((s.avg_stars||0)/5*100).toFixed(1)+'%';
    const url=s.url||('/casino/'+s.id+'/');
    const tags=m.tags.map(t=>`<span class="rk-tag">${esc(t)}</span>`).join('');
    return `<div class="rk-card ${i===0?'top':''}">
      <div class="rk-badge" style="background:${i<3?badge[i]:'#948d80'}"><b>${i+1}</b><i>位</i></div>
      <div class="rk-tile" style="background:${m.tile}"><b>${esc(m.short)}</b><i>${esc(m.en)}</i></div>
      <div class="rk-body">
        <div class="rk-name-row"><a href="/casino/${s.id}/" class="rk-name">${esc(s.name)}</a>${m.type?`<span class="rk-type">${esc(m.type)}</span>`:''}</div>
        <div class="rk-rate"><span class="rk-stars">★★★★★<span class="on" style="width:${pct}">★★★★★</span></span><span class="rk-score">${score}</span><a href="#" onclick="selectSite('${s.id}');return false" class="rk-revlink">口コミ${s.review_count}件</a></div>
        ${tags?`<div class="rk-tags">${tags}</div>`:''}
      </div>
      <div class="rk-cta">
        <a href="${esc(url)}" target="_blank" rel="noopener" class="rk-official" onclick="if(typeof gtag==='function')gtag('event','affiliate_click',{casino:'${s.id}',link_url:this.href,page_path:'/',link_text:'ranking_official'})">公式サイト ▶</a>
        <span class="rk-note">登録無料・最短30秒</span>
        <a href="#" onclick="selectSite('${s.id}');return false" class="rk-review-btn">口コミを見る</a>
      </div>
    </div>`;
  }).join('');
}

function populateSelect(){
  const sel=document.getElementById('f-site');
  sel.innerHTML='<option value="">-- サイトを選択 --</option>'+sitesData.map(s=>`<option value="${s.id}" ${currentSite===s.id?'selected':''}>${esc(s.name)}</option>`).join('');
}

function updateStats(){
  const total=sitesData.reduce((s,x)=>s+x.review_count,0);
  const avgAll=sitesData.filter(s=>s.avg_stars).reduce((s,x)=>s+x.avg_stars*x.review_count,0)/Math.max(total,1);
  document.getElementById('statsBox').innerHTML=`
    <div style="margin-bottom:8px"><strong>総口コミ数:</strong> ${total}件</div>
    <div style="margin-bottom:8px"><strong>全体平均:</strong> <span style="color:#c2452d;font-weight:900">${avgAll.toFixed(1)}</span></div>
    <div><strong>登録サイト:</strong> ${sitesData.length}サイト</div>`;
  const hm=document.getElementById('heroMeta');
  if(hm){
    const today=new Date();
    const ds=`${today.getFullYear()}年${today.getMonth()+1}月${today.getDate()}日`;
    hm.innerHTML=`最終更新: ${ds}｜掲載 <b>${sitesData.length}</b> サイト・口コミ <b>${total.toLocaleString()}</b> 件`;
  }
}

function selectSite(id){
  currentSite=id;
  renderRanking();
  populateSelect();
  updateSiteHeader();
  document.getElementById('breadSite').textContent=id==='all'?'すべての口コミ':(sitesData.find(s=>s.id===id)?.name||id);
  loadReviews();
}

function updateSiteHeader(){
  const sh=document.getElementById('siteHeader');
  const cta=document.getElementById('siteCta');
  if(currentSite==='all'){sh.classList.remove('show');cta.style.display='none';updateSiteAggregateRating(null);return}
  const s=sitesData.find(x=>x.id===currentSite);
  if(!s){sh.classList.remove('show');cta.style.display='none';updateSiteAggregateRating(null);return}
  if(s.url){cta.style.display='block';document.getElementById('siteCtaLink').href=s.url;document.getElementById('siteCtaLink').textContent='▶ '+s.name+' 公式サイトはこちら'}else{cta.style.display='none'}
  sh.classList.add('show');
  document.getElementById('shNum').textContent=s.avg_stars||'-';
  document.getElementById('shStars').textContent='★'.repeat(Math.round(s.avg_stars||0))+'☆'.repeat(5-Math.round(s.avg_stars||0));
  document.getElementById('shName').textContent=s.name;
  document.getElementById('shCount').textContent=`${s.review_count}件の口コミ`;
  const good=s.good_count||0,bad=s.bad_count||0,mid=s.review_count-good-bad;
  const t=Math.max(s.review_count,1);
  document.getElementById('shBars').innerHTML=`
    <div class="bar-row"><span class="bar-label">高評価</span><div class="bar-track"><div class="bar-fill good" style="width:${good/t*100}%"></div></div><span>${good}</span></div>
    <div class="bar-row"><span class="bar-label">普通</span><div class="bar-track"><div class="bar-fill ok" style="width:${mid/t*100}%"></div></div><span>${mid}</span></div>
    <div class="bar-row"><span class="bar-label">低評価</span><div class="bar-track"><div class="bar-fill bad" style="width:${bad/t*100}%"></div></div><span>${bad}</span></div>`;
  updateSiteAggregateRating(s);
}

// Site AggregateRating structured data
function updateSiteAggregateRating(site) {
  let scriptEl = document.getElementById('site-aggregate-rating');
  if (!scriptEl) {
    scriptEl = document.createElement('script');
    scriptEl.id = 'site-aggregate-rating';
    scriptEl.type = 'application/ld+json';
    document.head.appendChild(scriptEl);
  }
  
  if (!site || !site.review_count) {
    scriptEl.textContent = '';
    return;
  }
  
  const structuredData = {
    "@context": "https://schema.org",
    "@type": "Product",
    "name": site.name,
    "category": "オンラインカジノ",
    "url": site.url || ("https://cajikomi.com/casino/" + site.id),
    "aggregateRating": {
      "@type": "AggregateRating",
      "ratingValue": site.avg_stars || 0,
      "reviewCount": site.review_count || 0,
      "bestRating": 5,
      "worstRating": 1
    }
  };
  
  scriptEl.textContent = JSON.stringify(structuredData);
}

// Cat tabs
document.querySelectorAll('.cat-tab').forEach(btn=>{
  btn.addEventListener('click',()=>{
    document.querySelectorAll('.cat-tab').forEach(b=>b.classList.remove('active'));
    btn.classList.add('active');
    currentCat=btn.dataset.cat;
    loadReviews();
  });
});

function toggleForm(){document.getElementById('postForm').classList.toggle('open')}

function setStar(n){
  selectedStars=n;
  document.querySelectorAll('#starInput span').forEach(l=>{l.classList.toggle('on',parseInt(l.dataset.v)<=n)});
}

async function loadReviews(){
  const p=new URLSearchParams();
  p.set('type',currentReviewType);
  if(currentSite!=='all')p.set('site',currentSite);
  if(currentCat!=='all')p.set('cat',currentCat);
  p.set('sort',document.getElementById('sortSelect').value);
  try{
    const r=await fetch('/api/reviews?'+p);
    const d=await r.json();
    renderReviews(d.reviews||[]);
  }catch(e){document.getElementById('reviews').innerHTML='<div class="empty">読み込みエラー</div>'}
}

function renderReviews(reviews){
  const el=document.getElementById('reviews');
  if(!reviews.length){el.innerHTML='<div class="empty">'+(currentReviewType==='promo'?'まだプロモの口コミがありません。最初の投稿者になりましょう！':'まだ口コミがありません。最初の投稿者になりましょう！')+'</div>';updateReviewStructuredData([]);return}
  updateReviewStructuredData(reviews);
  el.innerHTML=reviews.map(r=>{
    const init=(r.nickname||'匿名')[0];
    const d=new Date(r.created_at+'Z');
    const ds=`${d.getFullYear()}/${(d.getMonth()+1+'').padStart(2,'0')}/${(d.getDate()+'').padStart(2,'0')}`;
    const stars='★'.repeat(r.stars)+'☆'.repeat(5-r.stars);
    const cat=r.category||'overall';
    const delBtn=adminKey?`<div class="rc-actions"><button class="rc-delete" onclick="deleteReview(${r.id})">削除</button></div>`:'';
    return `<div class="review-card">
      <div class="rc-header">
        <div class="rc-avatar">${init==='匿'?'匿':esc(init)}</div>
        <div class="rc-meta">
          <div class="rc-user">${esc(r.nickname||'匿名')}さん <span class="rc-cat ${CAT_CLASS[cat]}">${CAT_LABELS[cat]}</span></div>
          <div class="rc-site">${esc(r.site_name||'')}</div>
          <div class="rc-date">${ds}</div>
        </div>
        <div class="rc-score">
          <div class="rc-score-num">${r.stars}.0</div>
          <div class="rc-score-stars">${stars}</div>
        </div>
      </div>
      <div class="rc-body">${esc((r.body||'').replace(/\\n/g,'\n'))}</div>
      ${delBtn}
    </div>`;
  }).join('');
}

function esc(s){const d=document.createElement('div');d.textContent=s;return d.innerHTML}

async function submitReview(){
  const btn=document.getElementById('submitBtn'),msg=document.getElementById('formMsg');
  btn.disabled=true;msg.className='form-msg';msg.style.display='none';
  const body={site_id:document.getElementById('f-site').value,nickname:document.getElementById('f-nickname').value,category:document.getElementById('f-category').value,stars:selectedStars,body:document.getElementById('f-body').value,review_type:currentReviewType};
  try{
    const hdrs={'Content-Type':'application/json'};if(getToken())hdrs['Authorization']='Bearer '+getToken();
    const r=await fetch('/api/reviews',{method:'POST',headers:hdrs,body:JSON.stringify(body)});
    const d=await r.json();
    if(d.success){
      msg.className='form-msg success';msg.textContent=''+d.message;msg.style.display='block';
      document.getElementById('f-body').value='';document.getElementById('f-nickname').value='';setStar(5);
      loadReviews();loadSites();
      setTimeout(()=>{document.getElementById('postForm').classList.remove('open');msg.style.display='none'},2000);
    }else{msg.className='form-msg error';msg.textContent=''+(d.error||'エラー');msg.style.display='block'}
  }catch(e){msg.className='form-msg error';msg.textContent='送信失敗';msg.style.display='block'}
  btn.disabled=false;
}

async function deleteReview(id){
  if(!confirm('この口コミを削除しますか？'))return;
  try{
    const r=await fetch(`/api/reviews?id=${id}&key=${encodeURIComponent(adminKey)}`,{method:'DELETE'});
    const d=await r.json();
    if(d.success){loadReviews();loadSites()}else{alert(d.error||'削除失敗')}
  }catch(e){alert('削除失敗')}
}

function toggleAdmin(){
  adminKey=document.getElementById('adminKey').value;
  document.getElementById('adminStatus').textContent=adminKey?'認証済み':'';
  loadReviews();
}

// Show admin bar on ?admin
if(location.search.includes('admin'))document.getElementById('adminBar').classList.add('show');

function openAddSite(){document.getElementById('addSiteModal').classList.add('open')}
function closeAddSite(){document.getElementById('addSiteModal').classList.remove('open');document.getElementById('asMsg').className='form-msg'}

async function addSite(){
  const msg=document.getElementById('asMsg');
  msg.className='form-msg';msg.style.display='none';
  const name=document.getElementById('as-name').value.trim();
  const url=document.getElementById('as-url').value.trim();
  if(!name){msg.className='form-msg error';msg.textContent='サイト名を入力してください';msg.style.display='block';return}
  try{
    const r=await fetch('/api/sites',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({name,url})});
    const d=await r.json();
    if(d.success){
      msg.className='form-msg success';msg.textContent=''+d.message;msg.style.display='block';
      document.getElementById('as-name').value='';document.getElementById('as-url').value='';
      loadSites();
      setTimeout(closeAddSite,1500);
    }else{msg.className='form-msg error';msg.textContent=d.error||'エラー';msg.style.display='block'}
  }catch(e){msg.className='form-msg error';msg.textContent='エラー';msg.style.display='block'}
}

// ===== Q&A FUNCTIONALITY =====
const QA_CAT_LABELS = {deposit:'入出金',bonus:'ボーナス',beginner:'初心者',trouble:'トラブル',site:'サイト選び',general:'その他'};
const QA_BADGE_CLASS = {deposit:'badge-deposit',bonus:'badge-bonus',beginner:'badge-beginner',trouble:'badge-trouble',site:'badge-site',general:'badge-general'};
let currentQACat = 'all', currentQASort = 'new', currentTab = 'reviews';

function switchTab(tab) {
  currentTab = tab;
  document.getElementById('navReviews').classList.toggle('active', tab === 'reviews');
  document.getElementById('navQA').classList.toggle('active', tab === 'qa');
  document.getElementById('navPoints').classList.toggle('active', tab === 'points');
  document.getElementById('reviewSection').classList.toggle('hide', tab !== 'reviews');
  document.getElementById('qaSection').classList.toggle('show', tab === 'qa');
  document.getElementById('pointsSection').classList.toggle('show', tab === 'points');
  if (tab === 'qa') {
    document.getElementById('breadSite').textContent = 'Q&A';
    document.getElementById('metaDesc').content = 'カジコミ Q&A - オンラインカジノに関する疑問・質問を匿名で投稿・回答。';
    document.title = 'Q&A | カジコミ - オンカジの疑問を解決';
    loadQuestions();
  } else if (tab === 'points') {
    document.getElementById('breadSite').textContent = 'ポイント';
    document.title = 'ポイント | カジコミ';
    loadRanking();
  } else {
    document.getElementById('breadSite').textContent = currentSite === 'all' ? 'すべての口コミ' : (sitesData.find(s=>s.id===currentSite)?.name||'');
    document.getElementById('metaDesc').content = 'カジコミ - オンラインカジノのリアルな口コミ・評判を匿名で投稿・閲覧。';
    document.title = 'カジコミ | オンカジの口コミ・評判掲示板';
  }
}

function goHome() {
  selectSite('all');
  switchTab('reviews');
}

function runHeaderSearch() {
  const q = (document.getElementById('hdrSearchSite').value || '').trim();
  switchTab('reviews');
  if (!q) { selectSite('all'); return; }
  const m = sitesData.find(s => s.name && (s.name.indexOf(q) >= 0 || q.indexOf(s.name) >= 0));
  if (m) { selectSite(m.id); }
  else { selectSite('all'); }
  document.getElementById('reviewSection').scrollIntoView({behavior:'smooth'});
}

// Q&A category pills
document.querySelectorAll('.qa-pill').forEach(btn => {
  btn.addEventListener('click', () => {
    document.querySelectorAll('.qa-pill').forEach(b => b.classList.remove('active'));
    btn.classList.add('active');
    currentQACat = btn.dataset.cat;
    loadQuestions();
  });
});

// Q&A sort buttons
document.querySelectorAll('.qa-sort-btn').forEach(btn => {
  btn.addEventListener('click', () => {
    document.querySelectorAll('.qa-sort-btn').forEach(b => b.classList.remove('active'));
    btn.classList.add('active');
    currentQASort = btn.dataset.sort;
    loadQuestions();
  });
});

async function loadQuestions() {
  const p = new URLSearchParams();
  if (currentQACat !== 'all') p.set('category', currentQACat);
  p.set('sort', currentQASort);
  try {
    const r = await fetch('/api/qa?' + p);
    const d = await r.json();
    renderQuestions(d.questions || []);
  } catch(e) {
    document.getElementById('qaCards').innerHTML = '<div class="empty">読み込みエラー</div>';
  }
}

function renderQuestions(questions) {
  const el = document.getElementById('qaCards');
  if (!questions.length) {
    el.innerHTML = '<div class="empty">まだ質問がありません。最初の質問者になりましょう！</div>';
    return;
  }
  el.innerHTML = questions.map(q => {
    const d = new Date(q.created_at + 'Z');
    const ds = `${d.getFullYear()}/${(d.getMonth()+1+'').padStart(2,'0')}/${(d.getDate()+'').padStart(2,'0')}`;
    const cat = q.category || 'general';
    const badgeCls = QA_BADGE_CLASS[cat] || 'badge-general';
    const delBtn = adminKey ? `<button class="rc-delete" onclick="event.stopPropagation();deleteQuestion(${q.id})" style="margin-left:auto">削除</button>` : '';
    return `<div class="qa-card" onclick="viewQuestion(${q.id})">
      <div class="qa-card-top">
        <span class="qa-badge ${badgeCls}">${QA_CAT_LABELS[cat] || 'その他'}</span>
        <span class="qa-title">${esc(q.title)}</span>
        ${delBtn}
      </div>
      <div class="qa-body-preview">${esc(q.body)}</div>
      <div class="qa-card-meta">
        <span class="qa-answers-count">${q.answer_count}件の回答</span>
        <span>${q.views}</span>
        <span>${ds}</span>
        <span>${esc(q.nickname)}</span>
      </div>
    </div>`;
  }).join('');
}

async function viewQuestion(id) {
  document.getElementById('qaList').style.display = 'none';
  const detail = document.getElementById('qaDetail');
  detail.classList.add('show');
  detail.querySelector('#qaDetailContent').innerHTML = '<div class="empty">読み込み中...</div>';

  try {
    const r = await fetch(`/api/qa/${id}`);
    const d = await r.json();
    if (d.error) { detail.querySelector('#qaDetailContent').innerHTML = '<div class="empty">質問が見つかりません</div>'; return; }
    renderQuestionDetail(d.question, d.answers);
    // Update page title for SEO
    document.title = d.question.title + ' | Q&A | カジコミ';
  } catch(e) {
    detail.querySelector('#qaDetailContent').innerHTML = '<div class="empty">読み込みエラー</div>';
  }
}

function renderQuestionDetail(q, answers) {
  const d = new Date(q.created_at + 'Z');
  const ds = `${d.getFullYear()}/${(d.getMonth()+1+'').padStart(2,'0')}/${(d.getDate()+'').padStart(2,'0')}`;
  const cat = q.category || 'general';
  const badgeCls = QA_BADGE_CLASS[cat] || 'badge-general';

  let html = `<div class="qa-detail-q">
    <span class="qa-badge ${badgeCls}">${QA_CAT_LABELS[cat] || 'その他'}</span>
    <h2>${esc(q.title)}</h2>
    <div class="qa-body">${esc((q.body||'').replace(/\\n/g,'\n'))}</div>
    <div class="qa-q-meta">${esc(q.nickname)} ・ ${ds} ・ ${q.views}回閲覧</div>
  </div>`;

  html += `<h3 style="font-size:14px;color:#666;margin-bottom:10px">回答 ${answers.length}件</h3>`;

  if (answers.length === 0) {
    html += '<div class="empty" style="margin-bottom:16px">まだ回答がありません。最初に回答しましょう！</div>';
  } else {
    html += answers.map(a => {
      const ad = new Date(a.created_at + 'Z');
      const ads = `${ad.getFullYear()}/${(ad.getMonth()+1+'').padStart(2,'0')}/${(ad.getDate()+'').padStart(2,'0')}`;
      const bestBtn = (!a.is_best && adminKey) ? `<button class="qa-best-btn" onclick="markBestAnswer(${q.id},${a.id})">ベストアンサーに選ぶ</button>` : '';
      return `<div class="qa-answer-card ${a.is_best ? 'best' : ''}">
        ${a.is_best ? '<span class="qa-best-label">ベストアンサー</span><span class="pts-earned-badge">+50pt</span>' : ''}
        <div class="qa-answer-body">${esc((a.body||'').replace(/\\n/g,'\n'))}</div>
        <div class="qa-answer-meta">
          <span>${esc(a.nickname)} ・ ${ads}<span class="pts-earned-badge">+10pt</span></span>
          <span><button class="qa-like-btn" onclick="likeAnswer(${q.id},${a.id},this)"><span>${a.likes}</span></button>${bestBtn}</span>
        </div>
      </div>`;
    }).join('');
  }

  // Answer form
  html += `<div class="qa-answer-form">
    <h3>回答する</h3>
    <div class="form-row">
      <label>ニックネーム（空欄で「匿名」）</label>
      <input type="text" id="ans-nickname" placeholder="匿名" maxlength="20" ${currentUser ? 'value="'+esc(currentUser.nickname)+'" readonly style="background:#f5f5f0"' : ''}>
      ${!currentUser ? '<div class="login-hint">ログインするとポイントが貯まります</div>' : ''}
    </div>
    <div class="form-row">
      <label>回答内容 *</label>
      <textarea id="ans-body" placeholder="回答を入力してください..."></textarea>
    </div>
    <button class="submit-btn" onclick="submitAnswer(${q.id})">回答を投稿する</button>
    <div class="form-msg" id="ansFormMsg"></div>
  </div>`;

  document.getElementById('qaDetailContent').innerHTML = html;
}

function backToQAList() {
  document.getElementById('qaDetail').classList.remove('show');
  document.getElementById('qaList').style.display = 'block';
  document.title = 'Q&A | カジコミ - オンカジの疑問を解決';
  loadQuestions();
}

async function likeAnswer(qid, aid, btn) {
  try {
    const r = await fetch(`/api/qa/${qid}/answers/${aid}/like`, { method: 'POST' });
    const d = await r.json();
    if (d.success) {
      btn.querySelector('span').textContent = d.likes;
      btn.classList.add('liked');
    }
  } catch(e) {}
}

async function submitAnswer(qid) {
  const msg = document.getElementById('ansFormMsg');
  const body = { nickname: document.getElementById('ans-nickname').value, body: document.getElementById('ans-body').value };
  try {
    const hdrs3={'Content-Type':'application/json'};if(getToken())hdrs3['Authorization']='Bearer '+getToken();
    const r = await fetch(`/api/qa/${qid}/answers`, { method: 'POST', headers: hdrs3, body: JSON.stringify(body) });
    const d = await r.json();
    if (d.success) {
      msg.className = 'form-msg success'; msg.textContent = '回答を投稿しました！'; msg.style.display = 'block';
      document.getElementById('ans-body').value = '';
      setTimeout(() => { viewQuestion(qid); }, 1000);
    } else {
      msg.className = 'form-msg error'; msg.textContent = '' + (d.error || 'エラー'); msg.style.display = 'block';
    }
  } catch(e) { msg.className = 'form-msg error'; msg.textContent = '送信失敗'; msg.style.display = 'block'; }
}

function openQAModal() { document.getElementById('qaModal').classList.add('open'); }
function closeQAModal() { document.getElementById('qaModal').classList.remove('open'); document.getElementById('qaFormMsg').className = 'form-msg'; }

async function submitQuestion() {
  const msg = document.getElementById('qaFormMsg');
  const btn = document.getElementById('qaSubmitBtn');
  btn.disabled = true; msg.className = 'form-msg'; msg.style.display = 'none';
  const body = {
    nickname: document.getElementById('qa-nickname').value,
    category: document.getElementById('qa-category').value,
    title: document.getElementById('qa-title').value,
    body: document.getElementById('qa-body').value
  };
  try {
    const hdrs2={'Content-Type':'application/json'};if(getToken())hdrs2['Authorization']='Bearer '+getToken();
    const r = await fetch('/api/qa', { method: 'POST', headers: hdrs2, body: JSON.stringify(body) });
    const d = await r.json();
    if (d.success) {
      msg.className = 'form-msg success'; msg.textContent = '質問を投稿しました！'; msg.style.display = 'block';
      document.getElementById('qa-title').value = '';
      document.getElementById('qa-body').value = '';
      document.getElementById('qa-nickname').value = '';
      setTimeout(() => { closeQAModal(); loadQuestions(); }, 1500);
    } else {
      msg.className = 'form-msg error'; msg.textContent = '' + (d.error || 'エラー'); msg.style.display = 'block';
    }
  } catch(e) { msg.className = 'form-msg error'; msg.textContent = '送信失敗'; msg.style.display = 'block'; }
  btn.disabled = false;
}

async function deleteQuestion(id) {
  if (!confirm('この質問を削除しますか？')) return;
  try {
    const r = await fetch(`/api/qa/${id}`, { method: 'DELETE', headers: {'X-Admin-Key': adminKey} });
    const d = await r.json();
    if (d.success) loadQuestions(); else alert(d.error || '削除失敗');
  } catch(e) { alert('削除失敗'); }
}

// ===== POINTS FUNCTIONALITY =====
async function checkPoints() {
  const nickname = document.getElementById('ptsNickname').value.trim();
  if (!nickname) return;
  try {
    const r = await fetch('/api/points?nickname=' + encodeURIComponent(nickname));
    const d = await r.json();
    document.getElementById('ptsResult').style.display = 'block';
    document.getElementById('ptsNum').textContent = d.points || 0;
    document.getElementById('ptsUser').textContent = nickname;
    const hEl = document.getElementById('ptsHistory');
    if (d.history && d.history.length) {
      hEl.innerHTML = d.history.map(h => {
        const dt = new Date(h.created_at + 'Z');
        const ds = `${dt.getMonth()+1}/${dt.getDate()} ${dt.getHours()}:${(dt.getMinutes()+'').padStart(2,'0')}`;
        return `<div class="pts-history-item"><span>${esc(h.reason)}</span><span><span class="pts-plus">+${h.points}</span> <small style="color:#aaa">${ds}</small></span></div>`;
      }).join('');
    } else {
      hEl.innerHTML = '<div style="text-align:center;color:#aaa;padding:12px;font-size:13px">まだ履歴がありません</div>';
    }
  } catch(e) {}
}

async function loadRanking() {
  try {
    const r = await fetch('/api/points/ranking');
    const d = await r.json();
    const el = document.getElementById('ptsRanking');
    if (!d.ranking || !d.ranking.length) { el.innerHTML = '<div style="text-align:center;color:#aaa;padding:12px">まだランキングデータがありません</div>'; return; }
    el.innerHTML = d.ranking.map((u, i) => {
      const mc = i === 0 ? 'g' : i === 1 ? 's' : i === 2 ? 'b' : 'd';
      return `<div class="pts-rank-row"><span class="pts-rank-medal ${mc}">${i+1}</span><span class="pts-rank-name">${esc(u.nickname)}</span><span class="pts-rank-pts">${u.points} pt</span></div>`;
    }).join('');
  } catch(e) {}
}

async function markBestAnswer(qid, aid) {
  if (!adminKey) return;
  if (!confirm('この回答をベストアンサーに選びますか？（+50pt）')) return;
  try {
    const r = await fetch(`/api/qa/${qid}/answers/${aid}/best`, { method: 'POST', headers: {'X-Admin-Key': adminKey} });
    const d = await r.json();
    if (d.success) viewQuestion(qid); else alert(d.error || 'エラー');
  } catch(e) { alert('エラー'); }
}

// Check hash for Q&A tab
if (location.hash === '#qa') switchTab('qa');
else if (location.hash === '#points') switchTab('points');

// Update Review structured data
function updateReviewStructuredData(reviews) {
  if (!reviews.length) {
    document.getElementById('review-structured-data').textContent = '';
    return;
  }
  
  // Take first 10 reviews for structured data (avoid too large JSON-LD)
  const reviewsForSD = reviews.slice(0, 10);
  
  const structuredData = {
    "@context": "https://schema.org",
    "@graph": reviewsForSD.map(r => ({
      "@type": "Review",
      "itemReviewed": {
        "@type": "Product",
        "name": r.site_name || "オンラインカジノ",
        "category": "オンラインカジノ",
        "url": "https://cajikomi.com/casino/" + (r.site_id || "")
      },
      "author": {
        "@type": "Person",
        "name": r.nickname || "匿名"
      },
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": r.stars,
        "bestRating": 5,
        "worstRating": 1
      },
      "reviewBody": (r.body || "").replace(/\\n/g, "\n").slice(0, 500),
      "datePublished": r.created_at,
      "publisher": {
        "@type": "Organization",
        "name": "カジコミ",
        "url": "https://cajikomi.com"
      }
    }))
  };
  
  document.getElementById('review-structured-data').textContent = JSON.stringify(structuredData);
}

loadSites();loadReviews();checkAuth();
</script>

<!-- Static SEO Content Section -->
<div style="max-width:960px;margin:40px auto 0;padding:0 16px 60px">

<section style="background:#fff;border:1px solid #ddd;border-radius:4px;padding:24px;margin-bottom:20px">
<h2 style="font-size:20px;font-weight:900;color:#c2452d;margin-bottom:16px;border-bottom:2px solid #c2452d;padding-bottom:8px">オンラインカジノ 口コミ・評判の見方ガイド</h2>

<p style="line-height:1.8;margin-bottom:12px">オンラインカジノを選ぶ際に最も重要なのは、<strong>実際のプレイヤーによるリアルな口コミ・評判</strong>を確認することです。公式サイトの情報だけでは分からない、出金速度の実態、サポートの対応品質、ボーナスの使いやすさなどは、口コミでしか知ることができません。</p>

<p style="line-height:1.8;margin-bottom:12px">カジコミでは、<strong>匿名で投稿されたオンラインカジノの口コミ</strong>を「出金」「サポート」「ボーナス」「ゲーム」「総合」の5カテゴリで評価しています。各カジノの総合評価はこれらのカテゴリの平均値で算出され、ランキング形式で表示されます。</p>

<h3 style="font-size:16px;font-weight:700;margin:20px 0 10px">口コミを参考にする際のポイント</h3>

<p style="line-height:1.8;margin-bottom:12px"><strong>1. 口コミの件数を確認する</strong>：口コミ件数が少ないカジノの評価は参考程度にとどめましょう。10件以上の口コミがあるカジノは信頼性の高い評価と言えます。</p>

<p style="line-height:1.8;margin-bottom:12px"><strong>2. 最新の口コミを重視する</strong>：オンラインカジノは頻繁にサービス内容が変わります。半年以上前の口コミよりも、直近1〜3ヶ月の口コミの方が現状を正確に反映しています。</p>

<p style="line-height:1.8;margin-bottom:12px"><strong>3. カテゴリ別に見る</strong>：総合評価だけでなく、自分が重視するカテゴリ（出金速度を重視するなら「出金」カテゴリ）の評価もチェックしましょう。</p>

<p style="line-height:1.8;margin-bottom:12px"><strong>4. ネガティブな口コミも確認する</strong>：良い口コミだけでなく、低評価の口コミも必ず確認しましょう。トラブル時の対応がカジノの真の実力を示します。</p>

<p style="line-height:1.8;margin-bottom:12px"><strong>5. 自分でも口コミを投稿する</strong>：カジコミは利用者参加型のプラットフォームです。あなたの体験を共有することで、他のプレイヤーの参考になります。口コミ投稿でポイントも貯まります。</p>

<h3 style="font-size:16px;font-weight:700;margin:20px 0 10px">オンラインカジノの選び方</h3>

<p style="line-height:1.8;margin-bottom:12px">口コミだけでなく、以下のポイントも確認してカジノを選びましょう。</p>

<ul style="line-height:2;padding-left:20px;margin-bottom:12px">
<li><strong>ライセンス</strong>：キュラソー、マルタなどの正規ライセンスを取得しているか</li>
<li><strong>入出金方法</strong>：銀行振込、仮想通貨、PayPayなど自分に合った決済手段があるか</li>
<li><strong>ボーナス条件</strong>：入金不要ボーナスの賭け条件は現実的か</li>
<li><strong>日本語サポート</strong>：24時間日本語対応しているか</li>
<li><strong>ゲームの種類</strong>：好みのスロットやテーブルゲームが揃っているか</li>
</ul>

<p style="line-height:1.8">詳しいカジノ比較ランキングは <a href="https://casino-ranking-jp.com" target="_blank" rel="noopener">casino-ranking-jp.com</a> でご覧いただけます。</p>
</section>

<section style="background:#fff;border:1px solid #ddd;border-radius:4px;padding:24px;margin-bottom:20px">
<h2 style="font-size:20px;font-weight:900;color:#c2452d;margin-bottom:16px;border-bottom:2px solid #c2452d;padding-bottom:8px">オンラインカジノ比較表【2026年最新】</h2>

<div style="overflow-x:auto">
<table style="width:100%;border-collapse:collapse;font-size:13px">
<thead>
<tr style="background:#c2452d;color:#fff">
<th style="padding:10px 8px;text-align:left">カジノ名</th>
<th style="padding:10px 8px;text-align:center">入金不要ボーナス</th>
<th style="padding:10px 8px;text-align:center">出金速度</th>
<th style="padding:10px 8px;text-align:center">KYC</th>
<th style="padding:10px 8px;text-align:center">入金方法</th>
<th style="padding:10px 8px;text-align:center">おすすめ度</th>
</tr>
</thead>
<tbody>
<tr style="border-bottom:1px solid #eee">
<td style="padding:10px 8px;font-weight:700"><a href="https://sloten.io?referral=mOAo" target="_blank" rel="noopener">スロット天国</a></td>
<td style="padding:10px 8px;text-align:center">3,000円</td>
<td style="padding:10px 8px;text-align:center">即日</td>
<td style="padding:10px 8px;text-align:center">不要</td>
<td style="padding:10px 8px;text-align:center">PayPay/コンビニ/仮想通貨/銀行</td>
<td style="padding:10px 8px;text-align:center;color:#ffa500">★★★★★</td>
</tr>
<tr style="border-bottom:1px solid #eee;background:#fafafa">
<td style="padding:10px 8px;font-weight:700"><a href="https://tracker-pm2.konibet.com/link?btag=6031994_490733" target="_blank" rel="noopener">コニベット</a></td>
<td style="padding:10px 8px;text-align:center">$50+FS30</td>
<td style="padding:10px 8px;text-align:center">数分〜1h</td>
<td style="padding:10px 8px;text-align:center">必要</td>
<td style="padding:10px 8px;text-align:center">銀行/仮想通貨/Payz</td>
<td style="padding:10px 8px;text-align:center;color:#ffa500">★★★★★</td>
</tr>
<tr style="border-bottom:1px solid #eee">
<td style="padding:10px 8px;font-weight:700"><a href="https://tracker-pm2.casino-wonder.com/link?btag=6706046_490730" target="_blank" rel="noopener">ワンダーカジノ</a></td>
<td style="padding:10px 8px;text-align:center">$30</td>
<td style="padding:10px 8px;text-align:center">最短30秒</td>
<td style="padding:10px 8px;text-align:center">EASY版不要</td>
<td style="padding:10px 8px;text-align:center">銀行/仮想通貨/Payz</td>
<td style="padding:10px 8px;text-align:center;color:#ffa500">★★★★☆</td>
</tr>
<tr style="border-bottom:1px solid #eee;background:#fafafa">
<td style="padding:10px 8px;font-weight:700"><a href="https://stake.jp/?c=b006924f24" target="_blank" rel="noopener">ステークカジノ</a></td>
<td style="padding:10px 8px;text-align:center">—</td>
<td style="padding:10px 8px;text-align:center">数分</td>
<td style="padding:10px 8px;text-align:center">不要</td>
<td style="padding:10px 8px;text-align:center">仮想通貨メイン</td>
<td style="padding:10px 8px;text-align:center;color:#ffa500">★★★★☆</td>
</tr>
<tr style="border-bottom:1px solid #eee">
<td style="padding:10px 8px;font-weight:700">ベラジョンカジノ</td>
<td style="padding:10px 8px;text-align:center">$30</td>
<td style="padding:10px 8px;text-align:center">1〜3日</td>
<td style="padding:10px 8px;text-align:center">必要</td>
<td style="padding:10px 8px;text-align:center">銀行/クレカ/Payz</td>
<td style="padding:10px 8px;text-align:center;color:#ffa500">★★★☆☆</td>
</tr>
<tr style="background:#fafafa">
<td style="padding:10px 8px;font-weight:700">ミスティーノ</td>
<td style="padding:10px 8px;text-align:center">$10+FS60</td>
<td style="padding:10px 8px;text-align:center">数時間</td>
<td style="padding:10px 8px;text-align:center">必要</td>
<td style="padding:10px 8px;text-align:center">銀行/クレカ/仮想通貨</td>
<td style="padding:10px 8px;text-align:center;color:#ffa500">★★★★☆</td>
</tr>
</tbody>
</table>
</div>
<p style="margin-top:12px;font-size:12px;color:#888">※2026年2月時点の情報です。最新情報は各カジノ公式サイトをご確認ください。</p>
<p style="margin-top:8px;font-size:13px">詳しいランキングと各カジノのレビューは <a href="https://casino-ranking-jp.com" target="_blank" rel="noopener">casino-ranking-jp.com</a> をご覧ください。</p>
</section>

<section style="background:#fff;border:1px solid #ddd;border-radius:4px;padding:24px;margin-bottom:20px">
<h2 style="font-size:20px;font-weight:900;color:#c2452d;margin-bottom:16px;border-bottom:2px solid #c2452d;padding-bottom:8px">オンラインカジノ選びのポイント</h2>

<h3 style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px;margin-top:20px">1. ライセンスと安全性</h3>
<p style="line-height:1.8;margin-bottom:16px">まず最重要なのが正規ライセンスの確認です。キュラソー、マルタ、ジブラルタルなどの信頼できるライセンスを取得しているかチェックしましょう。<a href="https://sloten.io?referral=mOAo" target="_blank" rel="noopener">スロット天国</a>や<a href="https://tracker-pm2.konibet.com/link?btag=6031994_490733" target="_blank" rel="noopener">コニベット</a>など、口コミで評判の良いサイトは全て正規ライセンスを取得しています。</p>

<h3 style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px">2. 出金速度と実績</h3>
<p style="line-height:1.8;margin-bottom:16px">出金トラブルは絶対に避けたいポイント。口コミで「出金できた」「出金が早い」という評価が多いサイトを選びましょう。特に<a href="https://tracker-pm2.casino-wonder.com/link?btag=6706046_490730" target="_blank" rel="noopener">ワンダーカジノ</a>は出金速度の評価が高く、多くのプレイヤーから支持されています。</p>

<h3 style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px">3. ボーナス条件の優しさ</h3>
<p style="line-height:1.8;margin-bottom:16px">高額なボーナスに惑わされず、出金条件（賭け条件）の厳しさを確認しましょう。<a href="https://sloten.io?referral=mOAo" target="_blank" rel="noopener">スロット天国</a>は出金条件25倍と業界平均より優しく、キャッシュバックの出金条件はわずか1倍です。詳しい攻略法は <a href="https://casino-ranking-jp.com/blog/casino-bonus-wagering-strategy" target="_blank" rel="noopener">ボーナス出金条件攻略ガイド</a> をご覧ください。</p>

<h3 style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px">4. ゲーム数と品質</h3>
<p style="line-height:1.8;margin-bottom:16px">スロット、ライブカジノ、テーブルゲームの充実度も重要です。Evolution Gaming、Pragmatic Play、NetEntなど有名プロバイダーのゲームが揃っているかチェック。<a href="https://casino-ranking-jp.com/blog/live-casino-ranking-2026" target="_blank" rel="noopener">ライブカジノランキング2026</a> も参考にしてください。</p>

<h3 style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px">5. 日本語サポートの質</h3>
<p style="line-height:1.8;margin-bottom:16px">トラブル時にすぐ日本語で相談できるかは非常に重要。24時間サポートがあるか、チャット・メールでの対応は迅速かを口コミで確認しましょう。</p>
</section>

<section style="background:#fff;border:1px solid #ddd;border-radius:4px;padding:24px;margin-bottom:20px">
<h2 style="font-size:20px;font-weight:900;color:#c2452d;margin-bottom:16px;border-bottom:2px solid #c2452d;padding-bottom:8px">効果的な口コミ投稿ガイド</h2>

<h3 style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px;margin-top:20px">具体的な体験を書く</h3>
<p style="line-height:1.8;margin-bottom:16px">「良い」「悪い」だけでなく、具体的な体験を書くと他のユーザーに役立ちます。例：「出金申請から12時間で着金した」「サポートに質問したら3分で返信があった」など。</p>

<h3 style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px">カテゴリ別に評価する</h3>
<p style="line-height:1.8;margin-bottom:16px">出金速度、サポート対応、ボーナス条件、ゲーム品質など、カテゴリ別に評価することで、他のプレイヤーが自分のニーズに合ったカジノを見つけやすくなります。</p>

<h3 style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px">プレイ期間と金額を明記</h3>
<p style="line-height:1.8;margin-bottom:16px">「3ヶ月プレイして総額10万円入金」など、プレイ期間と金額を書くと口コミの信頼性が向上します。</p>

<h3 style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px">良い点・悪い点を両方書く</h3>
<p style="line-height:1.8;margin-bottom:16px">完璧なカジノは存在しません。良い点と改善してほしい点を両方書くことで、バランスの取れた有益な口コミになります。</p>

<p style="background:#fff8f0;padding:12px;border-radius:4px;border-left:4px solid #c2452d;margin-top:16px">
<strong>ポイント：</strong> 詳しいカジノの選び方や初心者向けの攻略法は <a href="https://casino-ranking-jp.com/blog/beginner-winning-strategies-2026" target="_blank" rel="noopener">オンラインカジノ初心者の勝ち方完全ガイド</a> で解説しています。
</p>
</section>

<section style="background:#fff;border:1px solid #ddd;border-radius:4px;padding:24px;margin-bottom:20px">
<h2 style="font-size:20px;font-weight:900;color:#c2452d;margin-bottom:16px;border-bottom:2px solid #c2452d;padding-bottom:8px">よくある質問（FAQ）</h2>

<details style="margin-bottom:12px;border:1px solid #eee;border-radius:4px;padding:12px">
<summary style="font-weight:700;cursor:pointer">オンラインカジノの口コミはどこで確認できますか？</summary>
<p style="margin-top:8px;line-height:1.8">カジコミでは、実際のプレイヤーによるオンラインカジノの口コミ・評判を匿名で投稿・閲覧できます。出金速度、サポート対応、ボーナス条件など、カテゴリ別に口コミをチェックできます。</p>
</details>

<details style="margin-bottom:12px;border:1px solid #eee;border-radius:4px;padding:12px">
<summary style="font-weight:700;cursor:pointer">おすすめのオンラインカジノはどこですか？</summary>
<p style="margin-top:8px;line-height:1.8">口コミ評価が高いカジノとして、<a href="https://sloten.io?referral=mOAo" target="_blank" rel="noopener">スロット天国</a>（PayPay入金対応・KYC不要）、<a href="https://tracker-pm2.konibet.com/link?btag=6031994_490733" target="_blank" rel="noopener">コニベット</a>（高リベート率）、<a href="https://tracker-pm2.casino-wonder.com/link?btag=6706046_490730" target="_blank" rel="noopener">ワンダーカジノ</a>（出金速度最速）などが人気です。</p>
</details>

<details style="margin-bottom:12px;border:1px solid #eee;border-radius:4px;padding:12px">
<summary style="font-weight:700;cursor:pointer">オンラインカジノの出金は安全ですか？</summary>
<p style="margin-top:8px;line-height:1.8">正規ライセンスを取得したオンラインカジノであれば、出金は安全に行えます。ただし、KYC（本人確認）が必要なカジノでは書類の提出が求められる場合があります。出金トラブルを避けるため、口コミで評判を確認することをおすすめします。</p>
</details>

<details style="margin-bottom:12px;border:1px solid #eee;border-radius:4px;padding:12px">
<summary style="font-weight:700;cursor:pointer">カジコミへの口コミ投稿は無料ですか？</summary>
<p style="margin-top:8px;line-height:1.8">はい、完全無料です。匿名で投稿でき、会員登録も不要です。口コミ投稿やQ&A回答でポイントが貯まる仕組みもあります。</p>
</details>

<details style="margin-bottom:12px;border:1px solid #eee;border-radius:4px;padding:12px">
<summary style="font-weight:700;cursor:pointer">入金不要ボーナスがもらえるカジノはありますか？</summary>
<p style="margin-top:8px;line-height:1.8">はい、多くのオンラインカジノが入金不要ボーナスを提供しています。<a href="https://sloten.io?referral=mOAo" target="_blank" rel="noopener">スロット天国</a>は3,000円、コニベットは$50＋フリースピン30回の入金不要ボーナスがあります。詳しくは <a href="https://casino-ranking-jp.com/blog/no-deposit-bonus-latest-2026" target="_blank" rel="noopener">入金不要ボーナスまとめ</a> をご覧ください。</p>
</details>

<details style="margin-bottom:12px;border:1px solid #eee;border-radius:4px;padding:12px">
<summary style="font-weight:700;cursor:pointer">ライブカジノでおすすめのサイトはどこですか？</summary>
<p style="margin-top:8px;line-height:1.8">本物のディーラーとリアルタイムで対戦できるライブカジノでは、<a href="https://sloten.io?referral=mOAo" target="_blank" rel="noopener">スロット天国</a>が最もおすすめです。Evolution Gaming、Pragmatic Play Liveなど主要プロバイダーが揃っており、24時間いつでも空きテーブルがあります。詳しくは <a href="https://casino-ranking-jp.com/blog/live-casino-ranking-2026" target="_blank" rel="noopener">ライブカジノランキング2026</a> をご確認ください。</p>
</details>

<details style="margin-bottom:12px;border:1px solid #eee;border-radius:4px;padding:12px">
<summary style="font-weight:700;cursor:pointer">カジノボーナスの出金条件を攻略する方法はありますか？</summary>
<p style="margin-top:8px;line-height:1.8">ボーナスの出金条件を効率的にクリアするには、高RTP（還元率）のゲームを選択し、低ボラティリティスロットで安定したプレイを心がけることが重要です。Blood Suckers（RTP98%）やStarburst（RTP96.1%）などがおすすめ。詳しい攻略法は <a href="https://casino-ranking-jp.com/blog/casino-bonus-wagering-strategy" target="_blank" rel="noopener">カジノボーナス出金条件攻略ガイド</a> で解説しています。</p>
</details>

<details style="margin-bottom:12px;border:1px solid #eee;border-radius:4px;padding:12px">
<summary style="font-weight:700;cursor:pointer">オンラインカジノ初心者が勝つためのコツはありますか？</summary>
<p style="margin-top:8px;line-height:1.8">初心者の方は、まず資金管理を徹底すること（1%ルール：総資金の1%でベット）、ハウスエッジの低いゲーム（ブラックジャック、バカラ）を選ぶこと、感情的にならないことが重要です。具体的な勝ち方は <a href="https://casino-ranking-jp.com/blog/beginner-winning-strategies-2026" target="_blank" rel="noopener">オンラインカジノ初心者の勝ち方完全ガイド</a> で詳しく解説しています。</p>
</details>

<details style="margin-bottom:12px;border:1px solid #eee;border-radius:4px;padding:12px">
<summary style="font-weight:700;cursor:pointer">スロット天国の特別プロモーションについて教えてください</summary>
<p style="margin-top:8px;line-height:1.8"><a href="https://sloten.io?referral=mOAo" target="_blank" rel="noopener">スロット天国</a>では、毎週キャッシュバック（出金条件1倍）、VIPプログラム、限定トーナメント（賞金総額$50,000）など豊富なプロモーションを提供しています。2026年の最新プロモーション情報は <a href="https://casino-ranking-jp.com/blog/sloten-exclusive-promotions-2026" target="_blank" rel="noopener">スロット天国特別プロモーション解説</a> でご確認いただけます。</p>
</details>

<details style="margin-bottom:12px;border:1px solid #eee;border-radius:4px;padding:12px">
<summary style="font-weight:700;cursor:pointer">悪質なオンラインカジノを見分ける方法はありますか？</summary>
<p style="margin-top:8px;line-height:1.8">正規ライセンスの確認、運営歴、口コミ評判、サポート対応の質、出金実績をチェックしましょう。特に「出金拒否」や「サポート無視」の口コミが多いサイトは要注意です。安全なカジノの選び方は <a href="https://casino-ranking-jp.com/blog/online-casino-safety-guide" target="_blank" rel="noopener">オンラインカジノ安全性ガイド</a> で詳しく解説しています。</p>
</details>
</section>

<section style="background:#fff;border:1px solid #ddd;border-radius:4px;padding:24px">
<h2 style="font-size:18px;font-weight:900;color:#333;margin-bottom:12px">関連サイト</h2>
<ul style="line-height:2.2;padding-left:20px">
<li><a href="https://casino-ranking-jp.com" target="_blank" rel="noopener">カジノランキングJP</a> — オンラインカジノ総合ランキング・レビューサイト</li>
<li><a href="https://casino-ranking-jp.com/blog/beginner-guide-online-casino" target="_blank" rel="noopener">オンラインカジノ初心者ガイド</a></li>
<li><a href="https://casino-ranking-jp.com/blog/no-deposit-bonus-latest-2026" target="_blank" rel="noopener">入金不要ボーナスまとめ【2026年最新】</a></li>
<li><a href="https://casino-ranking-jp.com/blog/fast-withdrawal-ranking-2026" target="_blank" rel="noopener">出金が早いカジノランキング</a></li>
<li><a href="https://casino-ranking-jp.com/blog/paypay-casino-deposit-guide" target="_blank" rel="noopener">PayPay入金対応カジノ特集</a></li>
<li><a href="https://casino-ranking-jp.com/blog/live-casino-ranking-2026" target="_blank" rel="noopener">ライブカジノおすすめランキング2026</a></li>
<li><a href="https://casino-ranking-jp.com/blog/casino-bonus-wagering-strategy" target="_blank" rel="noopener">カジノボーナス出金条件攻略ガイド</a></li>
<li><a href="https://casino-ranking-jp.com/blog/beginner-winning-strategies-2026" target="_blank" rel="noopener">オンラインカジノ初心者の勝ち方完全ガイド</a></li>
<li><a href="https://casino-ranking-jp.com/blog/sloten-exclusive-promotions-2026" target="_blank" rel="noopener">スロット天国特別プロモーション解説</a></li>
<li><a href="https://crypto-card.club/" target="_blank" rel="noopener">crypto-card.club</a> — 仮想通貨カード・クリプト入金ガイド</li>
</ul>
</section>

</div>
<script>
(function(){if(!sessionStorage.getItem('lp')){sessionStorage.setItem('lp',location.pathname);sessionStorage.setItem('ref',document.referrer||'');sessionStorage.setItem('sid',Math.random().toString(36).slice(2));}})();
document.addEventListener('click',function(e){
  var link=e.target.closest('a[href]');if(!link)return;
  var href=link.href,casino='';
  if(href.includes('sloten.io'))casino='sloten';
  else if(href.includes('konibet.com'))casino='konibet';
  else if(href.includes('casino-wonder.com'))casino='wonder';
  else if(href.includes('stake.jp'))casino='stake';
  else return;
  if(typeof gtag==='function')gtag('event','affiliate_click',{casino:casino,link_url:href,page_path:location.pathname,link_text:link.textContent.trim().slice(0,50)});
  fetch('/api/track',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({site:'cajikomi',landing_page:sessionStorage.getItem('lp')||'',click_page:location.pathname,casino:casino,link_id:'',referrer:sessionStorage.getItem('ref')||'',session_id:sessionStorage.getItem('sid')||''})}).catch(function(){});
});
</script>

<!-- カジコミ community popup -->
<div id="ccPopup" style="display:none;position:fixed;inset:0;background:rgba(0,0,0,.62);z-index:9999;justify-content:center;align-items:center;padding:20px;box-sizing:border-box">
  <div style="position:relative;width:100%;max-width:420px;background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 18px 50px rgba(0,0,0,.4)">
    <button aria-label="閉じる" onclick="ccClose()" style="position:absolute;top:8px;right:8px;width:34px;height:34px;border:none;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;font-size:20px;line-height:1;cursor:pointer;z-index:2">×</button>
    <a href="https://t.me/+HRLj2OoU08BjYjJl" target="_blank" rel="noopener" onclick="ccJoined()" style="display:block">
      <img src="/cajikomi-community.jpg" alt="カジコミ！！全サイトのプロモーション情報をお届けするコミュニティ" style="width:100%;display:block">
    </a>
    <div style="padding:14px 16px 16px;text-align:center">
      <a href="https://t.me/+HRLj2OoU08BjYjJl" target="_blank" rel="noopener" onclick="ccJoined()" style="display:block;background:#229ED9;color:#fff;text-decoration:none;font-weight:700;font-size:16px;padding:13px;border-radius:10px">Telegramコミュニティに参加する ▶</a>
    </div>
  </div>
</div>
<script>
(function(){
  try{
    var KEY='cajikomi_community_popup_dismissed';
    var last=localStorage.getItem(KEY);
    if(last && (Date.now()-parseInt(last,10)) < 86400000) return;
  }catch(e){}
  window.ccClose=function(){try{localStorage.setItem('cajikomi_community_popup_dismissed',String(Date.now()));}catch(e){}var el=document.getElementById('ccPopup');if(el)el.style.display='none';};
  window.ccJoined=function(){try{localStorage.setItem('cajikomi_community_popup_dismissed',String(Date.now()));}catch(e){}if(typeof gtag==='function')gtag('event','community_join_click',{page_path:location.pathname});};
  setTimeout(function(){
    var el=document.getElementById('ccPopup');if(!el)return;
    el.style.display='flex';
    el.addEventListener('click',function(e){if(e.target===el)window.ccClose();});
  },1200);
})();
</script>
<div id="tgBar" style="display:none;position:fixed;left:0;right:0;bottom:0;z-index:9998;justify-content:center;align-items:flex-end;pointer-events:none">
  <div style="position:relative;pointer-events:auto;width:100%;max-width:560px;margin:0 8px 8px">
    <a href="https://t.me/+HRLj2OoU08BjYjJl" target="_blank" rel="noopener" onclick="tgBarJoin()" aria-label="Telegramコミュニティに参加する" style="display:block">
      <img src="/tg-banner.webp" alt="カジコミ｜全サイトのプロモーション情報をお届け Telegramはこちら" width="1400" height="437" style="display:block;width:100%;height:auto;border-radius:12px;box-shadow:0 6px 22px rgba(0,0,0,.38)">
    </a>
    <button type="button" onclick="tgBarClose()" aria-label="閉じる" style="position:absolute;top:-9px;right:-7px;width:26px;height:26px;border:none;border-radius:50%;background:#333;color:#fff;font-size:15px;line-height:26px;cursor:pointer;box-shadow:0 2px 6px rgba(0,0,0,.4)">×</button>
  </div>
</div>
<script>
(function(){
  var KEY='cajikomi_tgbar_dismissed';
  try{var last=localStorage.getItem(KEY);if(last&&(Date.now()-parseInt(last,10))<86400000)return;}catch(e){}
  window.tgBarClose=function(){try{localStorage.setItem(KEY,String(Date.now()));}catch(e){}var el=document.getElementById('tgBar');if(el)el.style.display='none';};
  window.tgBarJoin=function(){try{localStorage.setItem(KEY,String(Date.now()));}catch(e){}if(typeof gtag==='function')gtag('event','tgbar_join_click',{page_path:location.pathname});};
  var el=document.getElementById('tgBar');if(el)el.style.display='flex';
})();
</script>
</body>
</html>
