/* ============================================================
   KakoBlog — site.css（第 3 稿）
   Kakoのいろいろやったこと記 (kakovail.info)
   フォント: 和文 Noto Sans JP / 英文 Inter / コード JetBrains Mono
   テーマ: CSS 変数で定義。既定はシステム設定、<html data-theme="light|dark"> で上書き
   差し色: オレンジ 1 色（--accent）
   ============================================================ */

/* ---------- 1. トークン ---------- */
:root, [data-theme="light"]{
  --font-sans:"Inter","Noto Sans JP",system-ui,-apple-system,"Hiragino Sans",sans-serif;
  --font-mono:"JetBrains Mono","Noto Sans JP",ui-monospace,SFMono-Regular,Menlo,monospace;

  --bg:#FBF8F3;            /* 淡い紙色 */
  --bg-elev:#FFFDFA;       /* ホバー時のカードなど */
  --bg-sunken:#F3EDE4;     /* 目次・プレースホルダー */
  --fg:#2A2622;
  --fg-muted:#6B625A;      /* 5.2:1 */
  --fg-faint:#7F766D;      /* 小さなラベル用 4.5:1 */
  --line:#ECE5DB;
  --line-strong:#D9D0C4;

  --accent:#C2410C;        /* オレンジ（#FBF8F3 上で 5.0:1） */
  --accent-hover:#9A3412;
  --accent-fg:#FFFFFF;
  --accent-soft:#FCEADF;

  --code-bg:#F0EAE1;       /* 本文背景より一段沈んだ暖色グレー */
  --code-fg:#2A2622;
  --code-line:#DED5C8;
  --code-bar:#E8E1D5;
  --code-inline-bg:#F0EAE1;

  /* C# ハイライト（.hl-keyword / .hl-string / .hl-comment / .hl-number / .hl-type / .hl-method）
     オレンジ系は string だけ。他は plum / steel / green / indigo で温度を揃える */
  --hl-keyword:#9D3B8E;
  --hl-string:#A64F00;
  --hl-comment:#7B7268;
  --hl-number:#2F6F8F;
  --hl-type:#1A7A5E;
  --hl-method:#4F46B8;

  --radius:8px;
  --radius-lg:14px;
  --measure:40em;          /* 本文の行長 = 全角 40 字 */
  color-scheme:light;
}
[data-theme="dark"]{
  --bg:#2A241E;            /* 暖色チャコール（黒に寄せない） */
  --bg-elev:#352E27; --bg-sunken:#312A23;
  --fg:#EFE6DA;            /* クリーム 13:1 */
  --fg-muted:#C4B6A4;      /* 砂色 7.7:1 */
  --fg-faint:#9C8F80;      /* 4.8:1 */
  --line:#3E362E; --line-strong:#55493F;
  --accent:#FB923C; --accent-hover:#FDBA74; --accent-fg:#2A1A0E; --accent-soft:#3F2C1E;
  --code-bg:#2E2721;       /* 地より半段明るい。黒い穴にしない */
  --code-fg:#EAE0D3; --code-line:#45392F; --code-bar:#352C25; --code-inline-bg:#3A312A;
  /* 紙にインクを乗せたような、彩度を落とした配色 */
  --hl-keyword:#C9A0D0; --hl-string:#E3B47E; --hl-comment:#A0948A; --hl-number:#9DB8C4; --hl-type:#A3C4A8; --hl-method:#B4AEDB;
  color-scheme:dark;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --bg:#2A241E;            /* 暖色チャコール（黒に寄せない） */
    --bg-elev:#352E27; --bg-sunken:#312A23;
    --fg:#EFE6DA;            /* クリーム 13:1 */
    --fg-muted:#C4B6A4;      /* 砂色 7.7:1 */
    --fg-faint:#9C8F80;      /* 4.8:1 */
    --line:#3E362E; --line-strong:#55493F;
    --accent:#FB923C; --accent-hover:#FDBA74; --accent-fg:#2A1A0E; --accent-soft:#3F2C1E;
    --code-bg:#2E2721;       /* 地より半段明るい。黒い穴にしない */
    --code-fg:#EAE0D3; --code-line:#45392F; --code-bar:#352C25; --code-inline-bg:#3A312A;
    /* 紙にインクを乗せたような、彩度を落とした配色 */
    --hl-keyword:#C9A0D0; --hl-string:#E3B47E; --hl-comment:#A0948A; --hl-number:#9DB8C4; --hl-type:#A3C4A8; --hl-method:#B4AEDB;
    color-scheme:dark;
  }
}

/* ---------- 2. ベース ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--bg);color:var(--fg);
  font-family:var(--font-sans);font-size:1.0625rem;line-height:1.8;
  font-synthesis:none;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  overflow-wrap:anywhere;   /* 長い URL でページが横に伸びない */
}
.site{min-height:100vh;display:flex;flex-direction:column;background:var(--bg);color:var(--fg)}
a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.22em;text-decoration-color:color-mix(in srgb,var(--accent) 40%,transparent)}
a:hover{color:var(--accent-hover);text-decoration-color:currentColor}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.wrap{width:100%;max-width:72rem;margin-inline:auto;padding-inline:1.5rem}

/* ---------- 3. ヘッダー ---------- */
.site-header{position:relative;z-index:2;border-bottom:1px solid var(--line)}
.site-header .wrap{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1.75rem;min-height:4.5rem;padding-block:.875rem}
.brand{margin-right:auto;color:var(--fg);text-decoration:none;font-weight:600;font-size:1.0625rem;line-height:1.3;font-feature-settings:"palt"}
.brand:hover{color:var(--fg)}
.brand small{display:block;margin-top:.2rem;font:500 .6875rem/1.2 var(--font-mono);letter-spacing:.08em;color:var(--fg-faint)}
.nav{display:flex;gap:1.5rem;font-size:.9375rem}
.nav a{color:var(--fg-muted);text-decoration:none;padding:.25rem 0;white-space:nowrap;border-bottom:2px solid transparent}
.nav a:hover{color:var(--fg)}
.nav a[aria-current="page"]{color:var(--fg);border-bottom-color:var(--accent)}
.theme-toggle{appearance:none;width:2.5rem;height:2.5rem;display:inline-grid;place-items:center;background:transparent;border:1px solid var(--line);border-radius:999px;color:var(--fg-muted);cursor:pointer;transition:border-color .15s,color .15s}
.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}
.theme-toggle svg{width:18px;height:18px}
.theme-toggle .icon-moon{display:none}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .theme-toggle .icon-sun{display:none}
  :root:not([data-theme="light"]) .theme-toggle .icon-moon{display:block}
}
[data-theme="dark"] .theme-toggle .icon-sun{display:none}
[data-theme="dark"] .theme-toggle .icon-moon{display:block}
[data-theme="light"] .theme-toggle .icon-sun{display:block}
[data-theme="light"] .theme-toggle .icon-moon{display:none}

/* ---------- 4. メイン／フッター ---------- */
.site-main{flex:1;padding-block:3rem 5rem}
.site-footer{border-top:1px solid var(--line);padding-block:2.25rem 2.5rem;font-size:.8125rem;color:var(--fg-muted)}
.site-footer .wrap{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1.25rem 2rem}
.site-footer nav{display:flex;flex-wrap:wrap;gap:1.25rem}
.site-footer a{color:var(--fg-muted);text-decoration:none}
.site-footer a:hover{color:var(--accent)}
.author{display:flex;align-items:center;gap:.875rem;color:var(--fg);text-decoration:none}
.author:hover{color:var(--fg)}
.author__avatar{width:2.5rem;height:2.5rem;border-radius:50%;object-fit:cover;flex:none;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent);border:1px solid var(--line);font:600 .9375rem/1 var(--font-sans);overflow:hidden}
.author__name{display:block;font-weight:600;font-size:.875rem;line-height:1.3}
.author__bio{display:block;font-size:.8125rem;line-height:1.4;color:var(--fg-muted)}
.footer-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1.5rem}
.copyright{margin:0;font-family:var(--font-mono);letter-spacing:.02em;color:var(--fg-faint)}

/* ---------- 5. 広告スロット ----------
   AdSense 自動広告の差し込み先。幅は常に親に追従（固定幅なし）。
   .ad--placeholder はモック表示用。本番では <div class="ad"></div> だけ置くか、要素自体を出力しない。 */
.ad{margin:2.5rem 0;min-width:0}
.post-list~.ad,.page-head~.ad,.other-cats~.ad{margin-inline:auto;max-width:46rem}
.ad--placeholder{display:flex;align-items:center;justify-content:center;min-height:5.5rem;border:1px dashed var(--line-strong);border-radius:var(--radius);color:var(--fg-faint);font:500 .6875rem/1 var(--font-mono);letter-spacing:.1em}

/* ---------- 6. 記事 ---------- */
.article{max-width:46rem;margin-inline:auto;min-width:0}
.article-header{margin-bottom:2.5rem}
.meta{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .875rem;font:500 .8125rem/1.5 var(--font-mono);color:var(--fg-muted)}
.cats{display:flex;flex-wrap:wrap;gap:.375rem}
.cat{display:inline-block;padding:.05rem .65rem;border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);border-radius:999px;color:var(--accent);text-decoration:none;font:500 .75rem/1.7 var(--font-mono);transition:background-color .15s,border-color .15s}
.cat:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
.cat.is-current{background:var(--accent);border-color:var(--accent);color:var(--accent-fg)}
.article-title{margin:.875rem 0 0;font-size:clamp(1.625rem,1.25rem + 1.5vw,2.125rem);line-height:1.45;font-weight:700;letter-spacing:-.005em;font-feature-settings:"palt"}

/* 本文（Markdown 変換後の HTML を .prose で包む） */
.prose{min-width:0}
.prose>*{max-width:var(--measure);min-width:0}          /* 文章は 40 字幅、 */
.prose>.code,.prose>figure,.prose>.ad,.prose>.toc,.prose>.table-wrap{max-width:none}  /* コード・画像はコンテナ幅いっぱい */
.prose p{margin:0 0 1.5em}
.prose h2,.prose h3,.comments h2{font-feature-settings:"palt";line-height:1.5;letter-spacing:-.005em}
.prose h2,.comments h2{border-left:3px solid var(--accent);padding-left:.6em;margin:3.25rem 0 1rem;font-size:1.4375rem;font-weight:700}
.prose h3{margin:2.25rem 0 .75rem;font-size:1.125rem;font-weight:600}
.prose ul,.prose ol{margin:0 0 1.5em;padding-left:1.5em}
.prose li{margin:.3em 0}
.prose li::marker{color:var(--fg-faint)}
.prose blockquote{margin:0 0 1.5em;padding:.25em 0 .25em 1.25em;border-left:3px solid var(--line-strong);color:var(--fg-muted)}
.prose hr{border:0;border-top:1px solid var(--line);margin:3rem 0}
.prose strong{font-weight:600}
.prose code{font-family:var(--font-mono);font-size:.875em;background:var(--code-inline-bg);padding:.1em .4em;border-radius:5px}
.prose a code{color:inherit}
.table-wrap{overflow-x:auto;margin:0 0 1.5em}
.prose table{border-collapse:collapse;font-size:.9375rem;min-width:100%}
.prose th,.prose td{padding:.5em .75em;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.prose th{font-weight:600;color:var(--fg-muted);font-size:.8125rem}

/* 目次（静的。見出し 3 つ以上のときだけジェネレーターが出力） */
.toc{margin:0 0 2.75rem;padding:1.25rem 1.5rem 1.375rem;background:var(--bg-sunken);border-radius:var(--radius-lg)}
.toc__title{margin:0 0 .625rem;font:500 .6875rem/1 var(--font-mono);letter-spacing:.14em;color:var(--fg-muted)}
.toc ol{margin:0;padding-left:1.5em;font-size:.9375rem;line-height:1.75}
.toc ol ol{padding-left:1.25em;margin-top:.1em;font-size:.875rem}
.toc li{margin:.15em 0}
.toc li::marker{color:var(--accent);font-family:var(--font-mono);font-size:.85em;font-weight:500}
.toc a{color:var(--fg);text-decoration:none}
.toc a:hover{color:var(--accent);text-decoration:underline}

/* コードブロック
   <div class="code"><div class="code__bar"><span class="code__lang">C#</span><button class="code__copy">…</button></div><pre><code class="language-csharp">…</code></pre></div> */
.code{margin:0 0 1.875em;min-width:0;background:var(--code-bg);color:var(--code-fg);border:1px solid var(--code-line);border-radius:var(--radius-lg);overflow:hidden}
.code__bar{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.3rem .375rem .3rem 1.125rem;background:var(--code-bar);border-bottom:1px solid var(--code-line)}
.code__lang{font:500 .6875rem/1 var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted)}
.code__copy{appearance:none;display:inline-flex;align-items:center;gap:.4rem;min-height:2rem;padding:.4rem .7rem;background:transparent;border:1px solid transparent;border-radius:var(--radius);color:var(--fg-muted);font:500 .75rem/1 var(--font-mono);cursor:pointer;transition:color .15s,background-color .15s,border-color .15s}
.code__copy svg{width:14px;height:14px}
.code__copy:hover{color:var(--fg);background:var(--bg-elev);border-color:var(--code-line)}
.code__copy.is-copied{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}
.code pre{margin:0;padding:1.125rem 1.25rem;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin}  /* 横スクロールは枠内だけ */
.code pre code{display:block;padding:0;background:none;border-radius:0;font:400 .875rem/1.7 var(--font-mono);white-space:pre;tab-size:4}
.hl-keyword{color:var(--hl-keyword)}
.hl-string{color:var(--hl-string)}
.hl-comment{color:var(--hl-comment);font-style:italic}
.hl-number{color:var(--hl-number)}
.hl-type{color:var(--hl-type)}
.hl-method{color:var(--hl-method)}

/* 画像 */
.fig{margin:0 0 2em}
.fig img,.fig__ph{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:var(--radius-lg)}
.fig__ph{aspect-ratio:16/9;display:grid;place-items:center;padding:1rem;background:var(--bg-sunken);color:var(--fg-faint);font:500 .8125rem/1.6 var(--font-mono);text-align:center}
.fig figcaption{margin-top:.625rem;font-size:.8125rem;line-height:1.6;color:var(--fg-muted);text-align:center}

/* 記事末尾 */
.article-footer{margin-top:3.5rem;padding-top:2rem;border-top:1px solid var(--line)}
.post-nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.post-nav a{display:block;padding:1rem 1.125rem;border:1px solid var(--line);border-radius:var(--radius-lg);color:var(--fg);text-decoration:none;font-size:.9375rem;line-height:1.55;font-feature-settings:"palt";transition:border-color .15s,background-color .15s}
.post-nav a:hover{border-color:var(--accent);background:var(--bg-elev);color:var(--fg)}
.post-nav small{display:block;margin-bottom:.3rem;font:500 .6875rem/1 var(--font-mono);letter-spacing:.1em;color:var(--accent)}
.post-nav .next{text-align:right}

/* ---------- 7. 一覧（トップ／カテゴリ） ---------- */
.page-head{max-width:46rem;margin:0 auto 1.5rem}
.page-head .eyebrow{margin:0 0 .375rem;font:500 .6875rem/1 var(--font-mono);letter-spacing:.14em;color:var(--accent)}
.page-head h1{margin:0 0 .5rem;font-size:1.75rem;line-height:1.4;font-weight:700;font-feature-settings:"palt"}
.page-head .lead{margin:0;color:var(--fg-muted);font-size:.9375rem}
.page-head .count{font-family:var(--font-mono);font-size:.875rem;font-weight:500;color:var(--fg-faint);margin-left:.5rem}
.other-cats{display:flex;flex-wrap:wrap;gap:.375rem;max-width:46rem;margin:0 auto 1.5rem}
.post-list{list-style:none;margin:0 auto;padding:0;max-width:46rem}
.post-list>li{padding:1.625rem 0;border-top:1px solid var(--line)}
.post-list>li:last-child{border-bottom:1px solid var(--line)}
.post-item .meta{font-size:.75rem;margin-bottom:.45rem}
.post-item :is(h2,h3){margin:0 0 .4rem;font-size:1.1875rem;line-height:1.5;font-weight:600;font-feature-settings:"palt"}
.post-item :is(h2,h3) a{color:var(--fg);text-decoration:none}
.post-item :is(h2,h3) a:hover{color:var(--accent)}
.post-item p{margin:0;font-size:.9375rem;line-height:1.7;color:var(--fg-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.post-item code{font-family:var(--font-mono);font-size:.875em;background:var(--code-inline-bg);padding:.1em .4em;border-radius:5px}
.pagination{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:.25rem;max-width:46rem;margin:2.5rem auto 0;font:500 .875rem/1 var(--font-mono)}
.pagination a,.pagination span{min-width:2.5rem;height:2.5rem;display:inline-grid;place-items:center;padding:0 .75rem;border-radius:var(--radius);color:var(--fg-muted);text-decoration:none}
.pagination a:hover{background:var(--accent-soft);color:var(--accent)}
.pagination [aria-current="page"]{background:var(--accent);color:var(--accent-fg)}
.pagination .ellipsis{min-width:1.75rem;padding:0}

/* ---------- 8. 固定ページ ---------- */
.page{max-width:46rem;margin-inline:auto;min-width:0}
.page-title{margin:0;font-size:1.75rem;line-height:1.4;font-weight:700;font-feature-settings:"palt"}
.page-updated{margin:.5rem 0 0;font:500 .8125rem/1.5 var(--font-mono);color:var(--fg-muted)}
.lang-nav{display:flex;flex-wrap:wrap;gap:.375rem;margin:1.5rem 0 2.5rem}
.lang-nav a{display:inline-flex;align-items:center;min-height:2.125rem;padding:0 .85rem;border:1px solid var(--line-strong);border-radius:999px;color:var(--fg-muted);text-decoration:none;font-size:.8125rem;transition:border-color .15s,color .15s}
.lang-nav a:hover{color:var(--accent);border-color:var(--accent)}
.lang-nav a[aria-current="true"]{background:var(--accent);border-color:var(--accent);color:var(--accent-fg)}
.lang-section+.lang-section{margin-top:3.5rem;padding-top:3rem;border-top:1px solid var(--line)}
.lang-section h2{margin-top:0;display:flex;align-items:baseline;gap:.75rem}
.lang-section h2 .lang-code{font:500 .6875rem/1 var(--font-mono);letter-spacing:.12em;color:var(--accent)}
.lang-section:lang(en),.lang-section:lang(es),.lang-section:lang(fr),.lang-section:lang(de){line-height:1.65}
.totop{display:inline-block;margin-top:1rem;font:500 .75rem/1 var(--font-mono);color:var(--fg-faint);text-decoration:none}
.totop:hover{color:var(--accent)}

/* ---------- 9. 404 ---------- */
.site-main--center{display:flex;flex-direction:column;justify-content:center}
.notfound{max-width:46rem;margin:2rem auto;text-align:center}
.notfound__code{margin:0;font:500 clamp(4.5rem,10vw,7rem)/1 var(--font-mono);letter-spacing:-.04em;color:var(--accent);opacity:.85}
.notfound h1{margin:1.25rem 0 .75rem;font-size:1.5rem;line-height:1.4;font-weight:700;font-feature-settings:"palt"}
.notfound p{margin:0 auto 2rem;max-width:30em;color:var(--fg-muted)}
.notfound .path{display:inline-block;margin-bottom:2rem;padding:.35rem .75rem;border-radius:var(--radius);background:var(--bg-sunken);font:400 .8125rem/1.5 var(--font-mono);color:var(--fg-muted)}
.actions{display:flex;flex-wrap:wrap;justify-content:center;gap:.75rem}
.btn{display:inline-flex;align-items:center;gap:.5rem;min-height:2.75rem;padding:0 1.375rem;border-radius:999px;background:var(--accent);color:var(--accent-fg);text-decoration:none;font-weight:600;font-size:.9375rem;transition:background-color .15s}
.btn:hover{background:var(--accent-hover);color:var(--accent-fg)}
.btn--ghost{background:transparent;color:var(--fg-muted);border:1px solid var(--line-strong)}
.btn--ghost:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}

/* ---------- 10. モバイル（〜640px） ---------- */
@media (max-width:640px){
  body{font-size:1rem;line-height:1.85}
  .wrap{padding-inline:1.125rem}
  .site-header .wrap{padding-block:.625rem;gap:.375rem 1rem;min-height:3.75rem}
  .brand{font-size:1rem}
  .nav{order:3;width:100%;gap:1.125rem;font-size:.875rem;overflow-x:auto;scrollbar-width:none;padding-bottom:.125rem}
  .site-main{padding-block:1.75rem 3.5rem}
  .article-title{font-size:1.5rem}
  .prose h2,.comments h2{font-size:1.25rem;margin-top:2.75rem}
  .prose h3{font-size:1.0625rem}
  .toc{padding:1rem 1.125rem}
  .code{border-radius:var(--radius)}
  .code__bar{padding:.2rem .2rem .2rem .875rem}
  .code__copy{min-height:2.75rem;padding:.5rem .875rem;font-size:.8125rem}   /* 44px タップ領域 */
  .code pre{padding:.875rem 1rem}
  .code pre code{font-size:.8125rem;line-height:1.65}
  .post-nav{grid-template-columns:minmax(0,1fr)}
  .post-nav .next{text-align:left}
  .page-head h1,.page-title{font-size:1.5rem}
  .other-cats .cat{min-height:2rem;display:inline-flex;align-items:center}
  .post-list>li{padding:1.375rem 0}
  .post-item :is(h2,h3){font-size:1.0625rem}
  .pagination a,.pagination span{min-width:2.75rem;height:2.75rem}
  .lang-nav a{min-height:2.5rem}
  .notfound h1{font-size:1.3125rem}
  .actions{flex-direction:column;align-items:stretch}
  .btn{justify-content:center}
  .site-footer .wrap{flex-direction:column;align-items:flex-start}
}

/* ---------- 11. 動きは控えめに ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none!important}
}

/* 生成コンテンツ用。コピーする記号と表示を一致させる。 */
code, pre { font-variant-ligatures: none; font-feature-settings: "calt" 0, "liga" 0, "dlig" 0; }
.ad:empty{height:0;margin:0}
.prose img{max-width:100%;height:auto}
.prose iframe{max-width:100%}
.category-list{list-style:none;max-width:46rem;margin:0 auto;padding:0;display:flex;flex-wrap:wrap;gap:.75rem}
.category-list p{margin:.5rem 0 0;color:var(--fg-muted);font-size:.9375rem}
.past-comments{margin-top:3rem;padding-top:2rem;border-top:1px solid var(--line)}
.post-nav .next{grid-column:2}
@media(max-width:640px){.post-nav .next{grid-column:1}}

.brand{display:flex;align-items:center;gap:.65rem}
.brand__logo{width:32px;height:32px;flex:none;border-radius:50%;object-fit:cover;border:1px solid var(--line)}
.prose .linkcard{display:flex;align-items:stretch;overflow:hidden;margin:0 0 1.5em;background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius-lg);color:var(--fg);text-decoration:none;transition:border-color .15s}
.prose .linkcard:hover{border-color:var(--accent)}
.linkcard__body{display:flex;flex-direction:column;gap:.4rem;min-width:0;flex:1;padding:1rem 1.125rem}
.linkcard__title{font-weight:600;line-height:1.5}
.linkcard__desc{font-size:.875rem;line-height:1.6;color:var(--fg-muted);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.linkcard__site{margin-top:auto;font:500 .75rem/1.5 var(--font-mono);color:var(--fg-faint)}
.prose .linkcard__img{width:160px;max-width:30%;height:auto;object-fit:cover;flex:none;align-self:stretch}
.prose details{margin:0 0 1.5em;padding:1rem 1.125rem;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--bg-elev)}
.prose summary{cursor:pointer;font-weight:600;list-style:disclosure-closed}
.prose details[open]>summary{list-style:disclosure-open;margin-bottom:1rem}
.prose summary::marker{color:var(--accent)}
@media(max-width:640px){
  .prose .linkcard{flex-direction:column}
  .prose .linkcard__img{order:-1;width:100%;max-width:100%;height:160px}
}


/* staging FTPS resilience verification */

/* お問い合わせ: Google Form 埋め込み（唯一許可する iframe） */
.contact{margin:1.5rem 0}
.contact fieldset{margin:0;padding:0;border:0;min-width:0}
.contact label{display:block;margin-bottom:1.25rem}
.contact input,.contact textarea{display:block;box-sizing:border-box;width:100%;min-width:0;margin-top:.5rem;padding:.75rem;background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);color:var(--fg);font:inherit}
.contact textarea{resize:vertical}
.contact input:focus,.contact textarea:focus{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:2px}
.contact button{padding:.75rem 1.5rem;border:0;border-radius:var(--radius);background:var(--accent);color:var(--accent-fg);font:inherit;cursor:pointer}
.contact button:hover:not(:disabled){background:var(--accent-hover)}
.contact button:disabled{opacity:.65;cursor:default}
.contact__error{color:var(--fg)}

.contact-pending{color:var(--fg-muted)}

/* ---------- 12. ランディング（トップ） ----------
   .hero / .section / .apps / .services — site.css の末尾に追記する分 */
.hero{max-width:46rem;margin:0 auto 3.5rem;display:flex;align-items:center;gap:1.5rem}
.hero__logo{width:4.5rem;height:4.5rem;flex:none;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent);border:1px solid var(--line);font:700 1.5rem/1 var(--font-sans)}
.hero__logo img{width:100%;height:100%;object-fit:cover;display:block}
.hero__name{margin:0;font-size:1.5rem;line-height:1.35;font-weight:700;font-feature-settings:"palt"}
.hero__tagline{margin:.375rem 0 0;max-width:var(--measure);color:var(--fg-muted);font-size:.9375rem;line-height:1.7}
.hero__links{display:flex;flex-wrap:wrap;gap:.25rem 1.125rem;margin:.625rem 0 0;padding:0;list-style:none;font:500 .8125rem/1.6 var(--font-mono)}
.hero__links a{color:var(--fg-muted);text-decoration:none}
.hero__links a:hover{color:var(--accent);text-decoration:underline}

.section{max-width:46rem;margin:0 auto 4rem}
.section__head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin:0 0 1rem;padding-bottom:.625rem;border-bottom:1px solid var(--line)}
.section__head h2{margin:0;font-size:1.25rem;line-height:1.4;font-weight:700;font-feature-settings:"palt"}
.section__more{font:500 .8125rem/1 var(--font-mono);color:var(--accent);text-decoration:none;white-space:nowrap}
.section__more:hover{text-decoration:underline}
.section .post-list{max-width:none}
.section .post-list>li:first-child{border-top:0}

.games{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem;list-style:none;margin:0;padding:0}
.game-card{display:flex;flex-direction:column;gap:.625rem;min-width:0;height:100%;box-sizing:border-box;padding:.875rem;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--bg-elev);color:var(--fg);text-decoration:none;transition:border-color .15s}
.game-card:hover{border-color:var(--accent);color:var(--fg)}
.game-card__thumb{display:block;aspect-ratio:1;border-radius:var(--radius-lg);overflow:hidden;background:var(--bg-sunken)}
.game-card__thumb img{display:block;width:100%;height:100%;aspect-ratio:1;object-fit:cover;border-radius:var(--radius-lg)}
.game-card__title{font-weight:600;font-size:.9375rem;line-height:1.4;font-feature-settings:"palt";overflow-wrap:anywhere}
.game-card__sub{font-size:.8125rem;line-height:1.55;color:var(--fg-muted);overflow-wrap:anywhere}

.apps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem;list-style:none;margin:0;padding:0}
.app-card{display:flex;flex-direction:column;gap:.625rem;min-width:0;padding:.875rem;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--bg-elev);color:var(--fg);text-decoration:none;transition:border-color .15s}
.app-card:hover{border-color:var(--accent);color:var(--fg)}
.app-card__icon{width:3.5rem;height:3.5rem;flex:none;border-radius:22%;overflow:hidden;display:grid;place-items:center;background:var(--bg-sunken);color:var(--fg-faint);border:1px solid var(--line);font:600 .6875rem/1 var(--font-mono)}
.app-card__icon img{width:100%;height:100%;display:block}
.app-card__name{font-weight:600;font-size:.9375rem;line-height:1.4;font-feature-settings:"palt"}
.app-card__desc{margin:0;font-size:.8125rem;line-height:1.55;color:var(--fg-muted)}

.services{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.services>.service-card:nth-child(3){grid-column:1/-1}
.service-card{display:flex;gap:1rem;min-width:0;padding:1.25rem;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--bg-elev);color:var(--fg);text-decoration:none;transition:border-color .15s}
.service-card>span:last-child{min-width:0;overflow-wrap:anywhere}
.service-card:hover{border-color:var(--accent);color:var(--fg)}
.service-card__icon{width:2.75rem;height:2.75rem;flex:none;border-radius:var(--radius);background:var(--accent-soft);color:var(--accent);display:grid;place-items:center}
.service-card__icon svg{width:22px;height:22px}
.service-card h3{margin:0 0 .25rem;font-size:1.0625rem;line-height:1.4;font-weight:600;font-feature-settings:"palt"}
.service-card p{margin:0;font-size:.875rem;line-height:1.6;color:var(--fg-muted)}
.service-card small{display:block;margin-top:.5rem;font:500 .75rem/1 var(--font-mono);color:var(--accent)}

@media (max-width:640px){
  .hero{gap:1rem;margin-bottom:2.5rem;align-items:flex-start}
  .hero__logo{width:3.5rem;height:3.5rem;font-size:1.25rem}
  .hero__name{font-size:1.25rem}
  .hero__tagline{font-size:.875rem}
  .section{margin-bottom:3rem}
  .games{grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}
  .game-card{padding:.75rem}
  .apps{grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}
  .app-card{padding:.75rem}
  .app-card__icon{width:3rem;height:3rem}
  .services{grid-template-columns:minmax(0,1fr)}
}

/* ランディング内の記事一覧は h3 を使う（セクション見出しが h2 のため）。見た目は .post-item h2 と同じ */
.post-item__title{margin:0 0 .4rem;font-size:1.1875rem;line-height:1.5;font-weight:600;font-feature-settings:"palt"}
.post-item__title a{color:var(--fg);text-decoration:none}
.post-item__title a:hover{color:var(--accent)}
@media (max-width:640px){ .post-item__title{font-size:1.0625rem} }

/* ヒーローの実画像とスクロール連動の歯車 */
.hero{display:grid;grid-template-columns:4.5rem minmax(0,1fr)}
img.hero__logo{object-fit:cover}
.gear{position:fixed;top:76px;right:20px;width:48px;height:48px;pointer-events:auto;cursor:default;z-index:1;opacity:.8;fill:none;stroke:var(--accent);stroke-width:2;stroke-linejoin:round;transform-origin:center;will-change:transform;transition:transform 80ms linear}
.app-card{height:100%;overflow-wrap:anywhere}
.app-card__desc{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:640px){
  .hero{grid-template-columns:3.5rem minmax(0,1fr)}
  .gear{width:32px;height:32px;top:64px;right:12px}
  .site-header .nav{padding-right:44px}
}

.share{margin-bottom:1.5rem}
.share__x{display:inline-flex;align-items:center;gap:.4rem;min-height:2rem;padding:.55rem .8rem;border:1px solid var(--line);border-radius:var(--radius);color:var(--fg-muted);background:transparent;font:500 .8125rem/1 var(--font-sans);text-decoration:none;transition:color .15s,background-color .15s,border-color .15s}
.share__x svg{width:14px;height:14px}
.share__x:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft);text-decoration:none}

.comments{margin-top:3rem}
