@charset "UTF-8";
/* =====================================================================
   nzw.jp 共通サイトヘッダー（site-header）
   ---------------------------------------------------------------------
   全ページで同じマークアップ・同じ JS・同じブレークポイントを使う。
   色だけスキン 2 種を CSS 変数で切り替える。

     .site-header--paper   技術書 / グッズ / 開発ノート（紙 + インク）
     .site-header--glass   トップページ（白ガラス。夜テーマで暗転する。位置は fixed）
     .site-header--plain   白い本文のページ（開発ノート / デザインシステム）
     .site-header--ink     暗い面のページ（apps）

   1024px 以上   横並びリンクを表示し、ハンバーガーを隠す
   1024px 未満   ハンバーガーだけ表示し、全項目をパネルに出す
   この値は「ナビ 5 本 + ロゴ + 右側ボタンが 1 行に収まる幅」。
   実測（2026-09-14・全ページを幅を下げながら測った）では、いちばん狭いのが
   CTA を持つ書籍の巻ページで 900px。そこに余裕を取って 1024px にしてある。
   ★ 項目を増やしたら測り直して上げること（site-nav.js の DESKTOP_QUERY も同じ値にする）。
     8 本まで増やしたときに測り直さないまま 1180px が据え置かれていて、
     コメントだけ「7 本」のまま残っていた。数だけ足して測らない、をやらない。
   「畳んだ項目がどこからも辿れない」状態を作らないこと。旧実装は
   640px 未満でリンクごと消えていた（＝モバイルでナビが無かった）。

   使い方:
     <link rel="stylesheet" href="/static/css/design-system.css">
     <link rel="stylesheet" href="/static/css/site-nav.css">
     <script src="/static/js/site-nav.js" defer></script>
   リンク・パネル・ログインの入口・パンくずは site-nav.js が生成する。マークアップは
   html/static/notes/index.html の <header class="site-header"> を参照。
   ===================================================================== */

/* ---------------------------------------------------------------
   1. 骨格（スキン非依存）
   --------------------------------------------------------------- */

.site-header {
  position: sticky;
  top: 0;
  z-index: var(--nzw-z-header, 100);
  background: var(--sh-bg);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--sh-border);
}

.site-header-inner {
  max-width: 1080px;
  margin: 0 auto;
  padding: 12px 24px;
  display: flex;
  align-items: center;
  gap: 16px;
  /* 開いたパネルの上に帯を残す */
  position: relative;
  z-index: 3;
}

.site-header-logo {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
  font-size: 15px;
  font-weight: 900;
  color: var(--sh-ink);
  text-decoration: none;
  transition: color 0.15s;
}
.site-header-logo:hover { color: var(--sh-accent); text-decoration: none; }

/* リンク列は «ロゴと右のボタン群のあいだ» で中央に寄せる。
   flex: 1 で余白を全部とり、その中で justify-content: center。
   ★ margin-left の追い出し（28px）は置かない。左だけ広げると中央が 14px 右へ
     ずれて «中央寄せ» にならない。ロゴとの間隔は .site-header-inner の
     gap 16px が左右そろって受け持つ。
   ★ actions 側の margin-left: auto はそのままでよい。こちらが flex: 1 で
     余白を吸うので auto の出番が無くなるだけで、1024px 未満（ナビが
     display:none）では今までどおり効く。 */
.site-header-nav {
  display: none;
  align-items: center;
  gap: 18px;
  flex: 1;
  justify-content: center;
  min-width: 0;
}

.site-header-actions {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-left: auto;
  flex-shrink: 0;
}

.site-header-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  font-weight: 700;
  color: var(--sh-ink-sub);
  text-decoration: none;
  white-space: nowrap;
  transition: color 0.15s;
  /* 現在地の下線を文字から離すための余白（デザインシステムの
     --nzw-underline-offset）。下線はこの箱の «下端» に引かれるので、
     ここを 0 にすると線が文字に触れて窮屈になる。
     ★ 上下そろえて入れること。align-items: center の中で片側だけ広げると、
       文字がロゴやボタンに対して浮き上がる。
     ★ 現在地の項目«だけ»に付けないこと。項目ごとに箱の高さが変わり、
       並びの重心がずれる。 */
  padding-top: var(--nzw-underline-offset, 4px);
  padding-bottom: var(--nzw-underline-offset, 4px);
  /* 現在地の下線（::after）の基準 */
  position: relative;
}
.site-header-link:hover { color: var(--sh-accent); text-decoration: none; }
.site-header-link svg { width: 14px; height: 14px; flex-shrink: 0; }
.site-header-link img { width: 15px; height: 15px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }

/* --- 群の色分け（site-nav.js の ITEMS の group をそのまま使う）---------
   ★ 新しい色は足さない。スキンが 4 つ（紙・白・夜・暗）あるので、1 色足すと
     4 か所で調整が要り、どれかが必ず浮く。各スキンが «すでに持っている»
     ink / accent の段だけで 3 群を分ける。

     つくったもの : 既定（文字 ink-sub / アイコン ink-mid）
     その裏側     : アイコンを accent に、文字を 1 段濃く。ここだけ色を持つ
     作り手について: アイコンを薄く落とす

   その裏側（開発ノート・デザインシステム）を目立たせるのが目的なので、
   目立たせたい側を上げるだけでなく、隣を下げて «差» を作っている。 */
/* ★ 文字の色は群で変えないこと。現在地（aria-current）が --sh-ink で、
     そこへ近い濃さを別の項目に与えると «どれが現在地か» が読めなくなる。
     実際 notes.css のページ（--nzw-accent が #23232a のインク）で、
     開発ノート（現在地 #0d0d11）とデザインシステム（#23232a）が
     見分けられなくなった。強弱はアイコンだけで付ける。 */
.site-header-link svg { color: var(--sh-ink-mid); opacity: .72; }

/* その裏側。色が使えるスキンでは accent、使えないページでも «いちばん濃い»
   アイコンとして残る（色相と濃さの 2 本立てにしておく理由がこれ）。 */
.site-header-link[data-group="behind"] svg {
  color: var(--sh-accent);
  opacity: 1;
}

.site-header-link[data-group="who"] svg { opacity: .45; }

/* 群の変わり目。細い縦罫を 1 本入れる。
   ::before は link（inline-flex・gap 6px）の子になるので、罫の «前» は
   ナビの gap 18px、«後ろ» は gap 6px + margin 12px = 18px で釣り合う。 */
.site-header-link[data-group-start]::before {
  content: "";
  width: 1px;
  height: 13px;
  margin-right: 12px;
  background: var(--sh-border-strong);
  opacity: .55;
  flex-shrink: 0;
}

/* パネル（1024px 未満）は小見出しが群を説明しているので、色は控えめに揃える。
   ここで accent まで持たせると、小見出しと色が二重に同じことを言う。 */
.site-nav-panel-link[data-group="behind"] svg { color: var(--sh-accent); }
.site-nav-panel-link[data-group="who"] svg { opacity: .6; }

/* 現在地。下線で示す（色だけだと紙スキンでコントラストが足りない）

   ★ box-shadow でも background でも引かないこと。どちらも箱の «中» にしか
     描けないので、«中身より少し外まで引く»（--nzw-underline-bleed）が作れない。
     文字の幅と線の幅がぴったり同じだと «測っている» ように見えて落ち着かない。
   ★ bottom: 0 は padding ボックスの下端。リンクの padding-bottom が
     --nzw-underline-offset なので、下げ幅はそのまま効く。 */
.site-header-link[aria-current="page"] { color: var(--sh-ink); }
.site-header-link[aria-current="page"]::after {
  content: "";
  position: absolute;
  left: calc(-1 * var(--nzw-underline-bleed, 4px));
  right: calc(-1 * var(--nzw-underline-bleed, 4px));
  bottom: 0;
  height: var(--nzw-underline-weight, 2px);
  background: var(--sh-accent);
}
.site-header-link[data-group-start][aria-current="page"]::after {
  /* 群の先頭は箱の左端に縦罫が入っているので、そのぶん内側から始める。
     ★ 19px ＝ 縦罫 1px + その margin-right 12px + リンクの gap 6px。
       gap を忘れると線がアイコンの左から生える（13px しか引いていなかった）。
     そこから bleed のぶんだけ外へ戻す。上の [data-group-start]::before と
     .site-header-link の gap に合わせること。 */
  left: calc(19px - var(--nzw-underline-bleed, 4px));
}

/* --- 横並びで畳んだ項目の開閉 ------------------------------------
   項目が 8 本まで増えて 1 行が重くなったので、«その裏側» の 3 本を
   開発ノートの下に畳んだ（畳み方の指示は site-nav.js の inlineUnder）。

   ★ リンクと開閉ボタンは «別の要素»。ラベルは行き先を持ったまま
     /static/notes/ へ飛び、開閉は隣の小さなボタンが持つ。
   ★ 見た目は .brand-menu（ロゴ → トップのデザイン切替）と同じ値にする。
     同じヘッダーにドロップダウンが 2 つある状態なので、別々の姿にしない。
     色は --sh-* で持つので紙・白・夜・暗の 4 スキンに自動で追従する
     （上の「新しい色は足さない」を守れる）。 */
.site-header-sub {
  position: relative;   /* ポップオーバーの基準 */
  display: inline-flex;
  align-items: center;
  gap: 2px;
}

.site-header-sub-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  padding: 0;
  border: 0;
  border-radius: 5px;
  background: none;
  color: var(--sh-ink-sub);
  cursor: pointer;
  transition: color .15s, background .15s;
}
.site-header-sub-toggle:hover,
.site-header-sub-toggle:focus-visible { color: var(--sh-accent); background: var(--sh-hover, rgba(15, 23, 42, .05)); }
.site-header-sub-caret {
  width: 12px;
  height: 12px;
  transition: transform .18s ease-out;
}
.site-header-sub-toggle[aria-expanded="true"] .site-header-sub-caret { transform: rotate(180deg); }

.site-nav-submenu {
  position: absolute;
  top: calc(100% + 10px);
  /* トリガーの中央から出す。列の中ほどにあるので左端合わせだと寄って見える */
  left: 50%;
  transform: translateX(-50%);
  z-index: 70;
  min-width: 208px;
  padding: 6px;
  background: var(--sh-bg, #fff);
  border: 1px solid var(--sh-border, rgba(15, 23, 42, .10));
  border-radius: 14px;
  box-shadow: 0 14px 40px rgba(15, 23, 42, .16);
}
.site-nav-submenu[hidden] { display: none; }

.site-nav-sub-link {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 9px 12px;
  border-radius: 10px;
  font-size: 13px;
  font-weight: 700;
  white-space: nowrap;
  text-decoration: none;
  color: var(--sh-ink, #0f172a);
}
.site-nav-sub-link svg { width: 15px; height: 15px; flex-shrink: 0; color: var(--sh-ink-mid); opacity: .72; }
.site-nav-sub-link:hover,
.site-nav-sub-link:focus-visible { background: var(--sh-hover, rgba(15, 23, 42, .05)); text-decoration: none; }
/* いま見ているページ。押せるが、どこに居るかは分かるようにする */
.site-nav-sub-link[aria-current="page"] { color: var(--sh-accent); }
.site-nav-sub-link[aria-current="page"] svg { opacity: 1; color: var(--sh-accent); }

/* --- 右端のマーク（別ドメイン） -----------------------------------
   zerohalf.jp。文字の列に並べると «サイト内の 1 セクション» に見えるので、
   丸ロゴだけを右のボタン群の隣に置く。markup は site-nav.js が
   .site-header-actions の先頭へ差す（ページ側の HTML は触らない）。
   1024px 未満では消す。その幅ではパネルの「作り手について」に出るので、
   二重に見せない。 */
.site-header-mark {
  display: none;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  /* ★ 白い円盤に載せること。zerohalf のロゴは «濃紺の線画» なので、
     地の色に直に置くと暗いスキン（apps の --ink、地は #0D0E0C）でほぼ消える。
     文字ラベルを外してマーク 1 個にしたぶん、読めないと «何も無い» と同じになる。
     色を足すのではなく地を敷く形にしてあるので、4 スキンで同じに読める。 */
  background: #fff;
  border: 1px solid var(--sh-border, rgba(15, 23, 42, .10));
  transition: transform .15s, box-shadow .15s;
}
.site-header-mark:hover { transform: scale(1.06); box-shadow: 0 2px 8px rgba(15, 23, 42, .18); }
.site-header-mark img { width: 21px; height: 21px; border-radius: 50%; object-fit: cover; }

/* 「トップへ」など、ページ側が置く CTA。手描きの矩形に見せる非対称の角丸 */
.site-header-cta {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  white-space: nowrap;
  font-size: 13px;
  font-weight: 700;
  padding: 8px 16px;
  border-radius: 3px 9px 4px 8px;
  background: var(--sh-ink);
  color: var(--sh-cta-fg);
  border: 1.5px solid var(--sh-ink);
  text-decoration: none;
  transition: transform 0.15s, box-shadow 0.15s, background 0.15s;
}
.site-header-cta:hover {
  background: var(--sh-ink-mid);
  color: var(--sh-cta-fg);
  text-decoration: none;
  transform: translate(-1px, -1px);
  box-shadow: 3px 3px 0 var(--sh-border-strong);
}
.site-header-cta svg { width: 14px; height: 14px; }

/* ログインの入口（トップ以外）。site-nav.js が差し込む。
   ハンバーガーと同じ形・同じ大きさで、右肩のボタン列として揃える。 */
.site-header-login {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  border-radius: var(--nzw-radius-full, 9999px);
  background: var(--sh-btn-bg);
  border: 1px solid var(--sh-border-strong);
  color: var(--sh-ink-sub);
  transition: background 0.15s, color 0.15s;
}
.site-header-login:hover { background: var(--sh-btn-bg-hover); color: var(--sh-accent); text-decoration: none; }
.site-header-login:focus-visible { outline: 2px solid var(--sh-accent); outline-offset: 2px; }
.site-header-login svg { width: 17px; height: 17px; }

/* ---------------------------------------------------------------
   1-b. パンくず（site-nav.js が生成）
   ---------------------------------------------------------------
   1024px 未満ではナビがハンバーガーに畳まれるので、開かない限り
   現在地がどこにも出ない。ヘッダーの直下に細い帯で常に出しておく。
   色はヘッダーと同じスキン変数で描くので、紙・白・暗のどれでも合う。 */

/* パンくずはヘッダーの「中」（帯の直下・パネルの上）に入る。地と外枠は
   .site-header が持っているものをそのまま使い、ここでは持たない。自前で
   background を持たせると、帯とのあいだに継ぎ目が見える。
   仕切りは帯とのあいだの上罫 1 本だけ。 */
.site-crumbs {
  border-top: 1px solid var(--sh-border);
  /* 開いたパネルの上に残す（.site-header-inner と同じ扱い） */
  position: relative;
  z-index: 3;
}

.site-crumbs-inner {
  max-width: 1080px;
  margin: 0 auto;
  padding: 9px 24px;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 2px 8px;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--sh-ink-sub);
}

.site-crumbs a {
  color: var(--sh-ink-sub);
  text-decoration: none;
  /* 指で押せる高さを確保する。文字が小さいぶん当たり判定で補う */
  padding: 4px 0;
}
.site-crumbs a:hover { color: var(--sh-accent); text-decoration: underline; }
.site-crumbs a:focus-visible { outline: 2px solid var(--sh-accent); outline-offset: 2px; }

.site-crumbs-sep { color: var(--sh-ink-sub); opacity: 0.45; }

/* 末端＝今いるところ。ここだけ濃くする */
.site-crumbs [aria-current="page"] {
  color: var(--sh-ink);
  font-weight: 700;
}

/* ---------------------------------------------------------------
   1-c. 単独のパンくず（共通ヘッダーを持たないページ）
   ---------------------------------------------------------------
   アプリの LP・更新履歴は 1 枚ずつ配色もナビも違うので共通ヘッダーを
   載せていない。そこにヘッダーごと持ち込むのではなく、パンくずだけを
   自前の地と罫で 1 本の帯として置く。中身は site-nav.js が同じ ITEMS
   から組むので、ヘッダー付きのページと文言・リンク先がズレない。

   スキン変数はヘッダー要素に定義してあり、ここには降ってこない。
   中間色だけを自分で持ち、ページ側が上書きできるようにしておく:
     <nav class="site-crumbs site-crumbs--standalone"
          style="--sh-accent:#8A5A38; --crumbs-max:42rem"
          data-site-crumbs="apps" data-site-crumbs-page="Bearise"></nav> */
.site-crumbs--standalone {
  --sh-border:  rgba(0, 0, 0, 0.08);
  --sh-ink:     #0f172a;
  --sh-ink-sub: #64748b;
  --sh-accent:  #0284c7;

  border-top: 0;
  border-bottom: 1px solid var(--sh-border);
  background: var(--crumbs-bg, transparent);
  /* JS は defer で後から埋める。先に高さを取っておかないと本文が飛ぶ。
     46px は埋まったあとの実測（帯 9px*2 + リンクの当たり判定 4px*2 +
     12.5px*1.5 の行 + 下罫 1px）。中身を変えたら測り直すこと。 */
  min-height: 46px;
  box-sizing: border-box;   /* 罫線ぶんを含めて測る。予約した高さと実寸を一致させる */

  /* 置き先のページはたいてい要素セレクタで `nav { position: sticky; ... }`
     を書いている。この帯もまた nav なので、そのまま巻き込まれる。
     クラスの方が強いとはいえ、当たった分だけ打ち消しておく。 */
  position: relative;
  top: auto;
  z-index: 3;
  margin: 0;
  padding: 0;
  box-shadow: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

/* 本文の幅に揃えられるようにしておく。既定はヘッダーと同じ 1080px */
.site-crumbs--standalone .site-crumbs-inner {
  max-width: var(--crumbs-max, 1080px);
  padding-left: var(--crumbs-pad-x, 24px);
  padding-right: var(--crumbs-pad-x, 24px);
  font-weight: 400;
}


/* ---------------------------------------------------------------
   お知らせ（ベル）
   ログインのボタンと同じ丸い 36px。未読は右上の小さな丸い数字。
   ドロップダウンは .site-header の中（sticky の枠）に絶対配置し、右端に寄せる。
   --------------------------------------------------------------- */
.site-header-bell {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  padding: 0;
  flex-shrink: 0;
  cursor: pointer;
  border-radius: var(--nzw-radius-full, 9999px);
  background: var(--sh-btn-bg);
  border: 1px solid var(--sh-border-strong);
  color: var(--sh-ink-sub);
  transition: background 0.15s, color 0.15s;
}
.site-header-bell:hover,
.site-header-bell[aria-expanded="true"] { background: var(--sh-btn-bg-hover); color: var(--sh-accent); }
.site-header-bell:focus-visible { outline: 2px solid var(--sh-accent); outline-offset: 2px; }
.site-header-bell svg { width: 17px; height: 17px; }
.site-header-bell-badge {
  position: absolute;
  top: -5px;
  right: -5px;
  min-width: 17px;
  height: 17px;
  padding: 0 4px;
  box-sizing: border-box;
  border-radius: 9999px;
  background: #e5484d;
  color: #fff;
  font: 700 10px/17px system-ui, sans-serif;
  text-align: center;
  box-shadow: 0 0 0 2px var(--sh-bg, #fff);
}
.site-header-bell-badge[hidden] { display: none; }

.site-news {
  position: absolute;
  top: 100%;
  right: 12px;
  z-index: 4;
  width: min(380px, calc(100vw - 24px));
  max-height: min(70vh, 520px);
  overflow-y: auto;
  margin-top: 6px;
  background: var(--sh-panel-bg);
  border: 1px solid var(--sh-border-strong);
  border-radius: 14px;
  box-shadow: var(--nzw-shadow-lg, 0 10px 24px rgba(0, 0, 0, 0.14));
  color: var(--sh-ink);
  -webkit-overflow-scrolling: touch;
}
.site-news[hidden] { display: none; }
.site-news-head { margin: 0; padding: 12px 16px 6px; font-size: 12px; font-weight: 700; letter-spacing: 0.06em; color: var(--sh-ink-sub); }
.site-news-empty { margin: 0; padding: 14px 16px 18px; font-size: 13px; color: var(--sh-ink-sub); }
.site-news-item {
  display: block;
  padding: 10px 16px;
  color: inherit;
  text-decoration: none;
  border-top: 1px solid var(--sh-border);
}
.site-news-item:hover { background: var(--sh-panel-hover); text-decoration: none; }
.site-news-meta { display: flex; align-items: center; gap: 8px; margin-bottom: 3px; font-size: 11.5px; color: var(--sh-ink-sub); }
.site-news-tag {
  padding: 1px 8px;
  border-radius: 9999px;
  font-size: 10.5px;
  font-weight: 700;
  background: var(--sh-border);
  color: var(--sh-ink-mid);
}
.site-news-tag--feature, .site-news-tag--release { background: color-mix(in srgb, var(--sh-accent) 18%, transparent); color: var(--sh-accent); }
.site-news-title { display: block; font-size: 13.5px; font-weight: 700; line-height: 1.5; }
.site-news-all {
  display: block;
  padding: 11px 16px 13px;
  border-top: 1px solid var(--sh-border);
  font-size: 12.5px;
  font-weight: 700;
  text-align: center;
  color: var(--sh-accent);
  text-decoration: none;
}
.site-news-all:hover { background: var(--sh-panel-hover); text-decoration: none; }

/* メニュー（ハンバーガー）の「お知らせ」行の未読数 */
.site-nav-count {
  margin-left: auto;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  box-sizing: border-box;
  border-radius: 9999px;
  background: #e5484d;
  color: #fff;
  font: 700 11px/18px system-ui, sans-serif;
  text-align: center;
}

/* ---------------------------------------------------------------
   2. ハンバーガー
   --------------------------------------------------------------- */

.site-header-burger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  padding: 0;
  border-radius: var(--nzw-radius-full, 9999px);
  background: var(--sh-btn-bg);
  border: 1px solid var(--sh-border-strong);
  color: var(--sh-ink-sub);
  cursor: pointer;
  transition: background 0.15s, color 0.15s;
}
.site-header-burger:hover { background: var(--sh-btn-bg-hover); color: var(--sh-accent); }
.site-header-burger:focus-visible { outline: 2px solid var(--sh-accent); outline-offset: 2px; }

/* 3 本線 → ×。JS は aria-expanded を切り替えるだけで、形は CSS が持つ */
.site-header-burger-box {
  position: relative;
  width: 16px;
  height: 12px;
  pointer-events: none;
}
.site-header-burger-box span {
  position: absolute;
  left: 0;
  width: 100%;
  height: 2px;
  border-radius: 1px;
  background: currentColor;
  transition: transform 0.2s ease, opacity 0.15s ease, top 0.2s ease;
}
.site-header-burger-box span:nth-child(1) { top: 0; }
.site-header-burger-box span:nth-child(2) { top: 5px; }
.site-header-burger-box span:nth-child(3) { top: 10px; }

.site-header-burger[aria-expanded="true"] .site-header-burger-box span:nth-child(1) {
  top: 5px;
  transform: rotate(45deg);
}
.site-header-burger[aria-expanded="true"] .site-header-burger-box span:nth-child(2) {
  opacity: 0;
}
.site-header-burger[aria-expanded="true"] .site-header-burger-box span:nth-child(3) {
  top: 5px;
  transform: rotate(-45deg);
}

/* ---------------------------------------------------------------
   3. ドロップパネル（1024px 未満）
   --------------------------------------------------------------- */

.site-nav-panel {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  z-index: 2;
  background: var(--sh-panel-bg);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-bottom: 1px solid var(--sh-border);
  box-shadow: var(--nzw-shadow-lg, 0 10px 24px rgba(0, 0, 0, 0.12));
  padding: 8px 0 12px;
  /* 画面の高さを超える分はパネル内でスクロールさせる（背後は固定したまま）。
     実際の上限は開いた時点で site-nav.js が実測して入れる。ここの値は
     JS が動く前の保険で、iOS の vh は URL バーを勘定に入れない点に注意。 */
  max-height: 78dvh;
  overflow-y: auto;
  overscroll-behavior: contain;
  /* iOS で慣性スクロールを効かせる */
  -webkit-overflow-scrolling: touch;
  opacity: 0;
  transform: translateY(-8px);
  transition: opacity 0.18s ease, transform 0.18s ease;
}
.site-nav-panel[data-open] { opacity: 1; transform: translateY(0); }

/* まだ下に続くことを見せる印（.site-nav-more、site-nav.js が生成する実体の
   DOM 要素）。
   ★ 以前は透明→パネル色のグラデーションを帯（高さ34px）で敷いていたが、
     position:sticky で常にビューポート下端に張り付くため、ちょうど重なった
     ボタンの行（アイコン+ラベルで44px）が透明側に向かって黒く溶けて消えて
     見えていた（「隙間がある」「影が乗っている」という報告の実体。
     2026-09-30）。帯ではなく、行に重ならない小さな下矢印の印に変える。
   ★ 丸いバッジ + 差し色 + バウンドは「主張しすぎ・ダサい」、文字だけの
     矢印は「小さすぎ／尖って見える」、半透明の枠は「透明に見える」と
     二転三転した。最終形: 丸みのある矢印 SVG + はっきり見える半透明の
     丸枠、色は --sh-ink から作るのでどのテーマでも一定の濃さで見える。
   ★ ::before/::after の疑似要素は pointer-events:none でしか作れず、
     タップがそのまま下のボタンに突き抜けていた。疑似要素をやめて実体の
     <div> にし、タップ自体をここで受け止める（押すと少し下へスクロール
     する、実用も兼ねた着地点にした）。
   .has-more は site-nav.js が付け外しする（CSS からは判定できない）。 */
.site-nav-more {
  position: sticky;
  bottom: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  margin: -34px auto 0;
  border-radius: 999px;
  background: color-mix(in srgb, var(--sh-ink) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--sh-ink) 24%, transparent);
  color: var(--sh-ink-mid);
  padding: 0;
  font: inherit;
  cursor: pointer;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.18s ease, background 0.15s ease;
}
.site-nav-more svg { width: 20px; height: 20px; }
.site-nav-more:hover,
.site-nav-more:focus-visible {
  background: color-mix(in srgb, var(--sh-ink) 24%, transparent);
}
.site-nav-panel.has-more .site-nav-more { opacity: 1; pointer-events: auto; }

.site-nav-panel-list {
  max-width: 1080px;
  margin: 0 auto;
  padding: 0 12px;
}

.site-nav-panel-link {
  display: flex;
  align-items: center;
  gap: 12px;
  /* タップ領域を 44px 以上に保つ */
  min-height: 48px;
  padding: 0 12px;
  border-radius: var(--nzw-radius-md, 0.5rem);
  font-size: 15px;
  font-weight: 700;
  color: var(--sh-ink);
  text-decoration: none;
  transition: background 0.15s, color 0.15s;
}
.site-nav-panel-link:hover,
.site-nav-panel-link:focus-visible {
  background: var(--sh-panel-hover);
  color: var(--sh-accent);
  text-decoration: none;
}
.site-nav-panel-link svg { width: 18px; height: 18px; flex-shrink: 0; color: var(--sh-ink-sub); }
.site-nav-panel-link img { width: 18px; height: 18px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }

.site-nav-panel-link[aria-current="page"] {
  background: var(--sh-panel-hover);
  color: var(--sh-accent);
}
.site-nav-panel-link[aria-current="page"] svg { color: var(--sh-accent); }

/* 外部リンクの矢印は右端へ逃がす */
.site-nav-panel-ext {
  margin-left: auto;
  width: 13px;
  height: 13px;
  color: var(--sh-ink-sub);
  opacity: 0.7;
}

/* パネルの小見出し。並び順の理由を言葉で出す */
.site-nav-panel-group {
  margin: 14px 12px 4px;
  font-family: var(--nzw-font-mono, ui-monospace, monospace);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.16em;
  color: var(--sh-ink-sub);
  opacity: 0.75;
}
/* 先頭だけは上の余白を詰める */
.site-nav-panel-list > .site-nav-panel-group:first-child { margin-top: 4px; }

/* パネル内の表示設定（時間帯・天気）。スキン変数で描くので、
   ヘッダーの ⚙ 側（Tailwind の白いパネル）と違い夜テーマでも沈まない。
   状態表示の .active-setting はページ側の CSS が付ける。 */
.site-nav-set {
  display: flex; align-items: center; gap: 12px;
  padding: 6px 12px;
  min-height: 44px;
}
.site-nav-set-label {
  font-size: 13px; font-weight: 700; color: var(--sh-ink-sub);
  flex: 0 0 3.5em;
}
/* 画面の切り替えだけは文字の札（アイコンではない）。
   ★ width:auto / min-width:44px にしないこと。5 列のグリッドの中で幅が
     暴れ、「カード」が「カー／ド」と 2 行に折れて行の高さも揃わなくなる。
     他の行と同じ 1 列ぶんに収め、日本語が字の途中で折れないようにする。 */
.site-nav-set-opt.is-here,
a.site-nav-set-opt {
  min-width: 0;
  padding: 0 4px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .02em;
  text-decoration: none;
  white-space: nowrap;
  word-break: keep-all;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
/* いま開いている画面。
   ★ 他の行の「押されている」（.active-setting）と同じ見た目にすること。
     ここだけ別の青を敷いていたので、同じパネルの中で ON の言い方が
     2 通りあった。詳細度は .active-setting 側に合わせる */
.site-nav-panel .site-nav-set-opts .site-nav-set-opt.is-here {
  background: var(--sh-btn-bg-hover);
  color: var(--sh-accent);
  box-shadow: var(--nzw-shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.06));
}

.site-nav-set-opts {
  display: grid; grid-template-columns: repeat(5, 1fr);
  gap: 4px; flex: 1;
  padding: 4px;
  border-radius: var(--nzw-radius-md, 0.5rem);
  background: var(--sh-panel-hover);
}
/* 天気だけ 6 列（site-nav.js が opts.length > 5 のときだけ付ける）。
   5 列のままだと 6 個目が次の行に単独で折り返り、右側が隙間になる。 */
.site-nav-set-opts.site-nav-set-opts-6 {
  grid-template-columns: repeat(6, 1fr);
}
/* アイコンの下に短い言葉（site-nav.js の .site-nav-set-opt-label）。
   高さは文字のぶん 34px → 44px。画面の行（文字だけの札）も同じ高さでそろう */
.site-nav-set-opt {
  display: flex; flex-direction: column; gap: 3px;
  align-items: center; justify-content: center;
  height: 44px; padding: 0;
  border: 0; border-radius: var(--nzw-radius-sm, 0.375rem);
  background: transparent; color: var(--sh-ink-sub);
  font-size: 14px; cursor: pointer;
  transition: background 0.15s, color 0.15s;
}
.site-nav-set-opt-label {
  font-size: 10px; font-weight: 700; line-height: 1;
  white-space: nowrap;
}
.site-nav-set-opt:hover { color: var(--sh-accent); }
.site-nav-set-opt:focus-visible { outline: 2px solid var(--sh-accent); outline-offset: 1px; }
/* ページ側が付ける選択状態。トップの .setting-opt.active-setting（白塗り・
   時間帯ごとの色）が後から当たるので、詳細度を 1 段上げてパネルの地に戻す。
   暗いパネルに白いチップが乗ると、そこだけ別のUIに見える。 */
.site-nav-panel .site-nav-set-opts .site-nav-set-opt.active-setting {
  background: var(--sh-btn-bg-hover);
  color: var(--sh-accent);
  box-shadow: var(--nzw-shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.06));
}

.site-nav-panel-sep {
  height: 1px;
  margin: 8px 12px;
  background: var(--sh-border);
}

/* 規約類。本文リンクより一段落とす */
.site-nav-panel-sub .site-nav-panel-link {
  min-height: 40px;
  font-size: 13px;
  font-weight: 500;
  color: var(--sh-ink-sub);
}

/* ヘッダーの外（body 直下）に置く。ヘッダーの中に入れるとヘッダー帯自身も
   覆ってしまい、帯が灰色に沈む。z-index はヘッダーの 1 つ下。 */
.site-nav-backdrop {
  position: fixed;
  inset: 0;
  z-index: calc(var(--nzw-z-header, 100) - 1);
  background: rgba(15, 23, 42, 0.28);
  opacity: 0;
  transition: opacity 0.18s ease;
}
.site-nav-backdrop[data-open] { opacity: 1; }

/* ---------------------------------------------------------------
   4. ブレークポイント
   --------------------------------------------------------------- */

/* 1024px 未満は表示設定をパネルに出すので、ヘッダーの ⚙ は畳む。
   同じ操作を 2 箇所に置かない（#display-settings-btn はトップなど一部ページだけ） */
@media (max-width: 1023px) {
  [data-display-settings] { display: none; }
}

@media (min-width: 1024px) {
  .site-header-nav { display: flex; }
  .site-header-burger { display: none; }
  /* 別ドメインのマークは横並びと同じ幅でだけ出す。畳んだ幅では
     パネルの「作り手について」に zerohalf が出るので、二重に見せない */
  .site-header-mark { display: inline-flex; }
  /* 念のため。この幅ではパネルを開けないが、JS 前に開いた状態が残っても消す */
  .site-nav-panel,
  .site-nav-backdrop { display: none; }
}

/* ---------------------------------------------------------------
   4.5 群の帯（セクションの入口）
   ---------------------------------------------------------------
   «その裏側» の 3 つのように、組になっている行き先を «隣に何があるか»
   として本文の先頭に出す。中身は site-nav.js の renderSection が ITEMS から作る。

   ★ 色は --nzw-* だけで組むこと。この帯が乗る 3 ページはトークンを
     それぞれ上書きしている（開発ノートは紙とインクの単色、デザインシステムは
     白と Slate）。素の色を書くと、開発ノートの «色は情報として使わない» に
     反して 1 箇所だけ浮く。トークンで組めば地の言語に自動で従う。
   --------------------------------------------------------------- */
.site-section { display: block; margin-bottom: var(--nzw-space-8, 32px); }

.site-section-label {
  margin: 0 0 var(--nzw-space-3, 12px);
  font-family: var(--nzw-font-mono, ui-monospace, monospace);
  font-size: var(--nzw-text-xs, 12px);
  font-weight: 700;
  letter-spacing: .12em;
  color: var(--nzw-muted, #94a3b8);
}

.site-section-links {
  display: grid;
  /* 3 つ並ぶが、狭いところでは «1 列» に落とす。数は決め打ちしない。
     ★ 下限を 280px にしてあるのは、中途半端な 2 + 1 を作らないため。
       実測の区画は本文が 545px しかなく（research.css の --measure）、
       210px だと 2 列 + 余り 1 という «揃っていない» 並びになる。
       280px なら 2 列に 572px 要るので、そこでは素直に 1 列へ落ちる。 */
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: var(--nzw-space-3, 12px);
}

.site-section-link {
  display: flex;
  align-items: flex-start;
  gap: var(--nzw-space-3, 12px);
  padding: var(--nzw-space-4, 16px);
  border: 1px solid var(--nzw-border, #e2e8f0);
  border-radius: var(--nzw-radius-lg, 12px);
  background: var(--nzw-card, #fff);
  text-decoration: none;
  color: var(--nzw-text, #1e293b);
  transition: border-color .15s, background .15s;
}
/* ★ 現在地には当てないこと。iOS は最後にタップした要素の :hover を
     保持するので、hover と現在地を同じ姿にすると «来た元» と «いまここ» が
     並んで区別が付かなくなる（実際そうなっていた）。 */
.site-section-link:not([aria-current="page"]):hover {
  border-color: var(--nzw-border-strong, #cbd5e1);
  background: var(--nzw-surface-1, #f8fafc);
  text-decoration: none;
}

.site-section-ico { flex-shrink: 0; display: flex; padding-top: 1px; color: var(--nzw-muted, #94a3b8); }
.site-section-ico svg { width: 16px; height: 16px; }
.site-section-ico img { width: 16px; height: 16px; border-radius: 50%; object-fit: cover; }

.site-section-body { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.site-section-name {
  display: flex;
  align-items: center;
  gap: var(--nzw-space-2, 8px);
  font-size: var(--nzw-text-sm, 14px);
  font-weight: 700;
  color: var(--nzw-text-strong, #0f172a);
}
.site-section-body small {
  font-size: var(--nzw-text-xs, 12px);
  line-height: 1.6;
  color: var(--nzw-sub, #64748b);
}

/* いま見ているページ。«押せない»・«名前の下線»・«反転したバッジ» の 3 つで示す。

   ★ 面（background）で示さないこと。紙スキンだと現在地に当てていた
     --nzw-surface-1 が地（--nzw-bg）と 1.04:1 しか違わず、白のままの他の 2 枚の
     ほうが前に出てしまう。現在地が «沈んで終わったもの» に見えるという逆向き。
   ★ 寸法はヘッダーのナビと同じ --nzw-underline-*（design-system.css）を使う。
     サイト内で «現在地＝線» の語彙を 1 つにする。 */
.site-section-here {
  flex-shrink: 0;
  font-style: normal;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .08em;
  padding: 1px 6px;
  border-radius: var(--nzw-radius-full, 999px);
  background: var(--nzw-text-strong, #0f172a);
  color: var(--nzw-on-accent, #fff);
}
.site-section-link[aria-current="page"] {
  border-color: var(--nzw-border-strong, #cbd5e1);
}
.site-section-link[aria-current="page"] .site-section-ico { color: var(--nzw-text-strong, #0f172a); }

/* リンクではない（site-nav.js が here のときだけ span を出す）。
   指が乗っても矢印のままで、押せないことが先に伝わる */
span.site-section-link { cursor: default; }

/* 名前の下線。::after で引くのはヘッダーと同じ理由で、
   中身より少し外（--nzw-underline-bleed）まで引くため */
.site-section-link[aria-current="page"] .site-section-name {
  /* 下線（4px 下に 2px）が入る分の逆。説明文との間を詰めない */
  padding-bottom: var(--nzw-space-2, 8px);
}
.site-section-link[aria-current="page"] .site-section-title { position: relative; }
.site-section-link[aria-current="page"] .site-section-title::after {
  content: "";
  position: absolute;
  left: calc(-1 * var(--nzw-underline-bleed, 4px));
  right: calc(-1 * var(--nzw-underline-bleed, 4px));
  top: calc(100% + var(--nzw-underline-offset, 4px));
  height: var(--nzw-underline-weight, 2px);
  background: currentColor;
}

/* --- ページ自身の目次 ---------------------------------------------
   群の帯（上）が «隣に何があるか»、こちらが «このページに何があるか»。
   帯と同じく色は --nzw-* だけで組む。 */
.page-toc { margin-bottom: var(--nzw-space-8, 32px); }

.page-toc-label {
  margin: 0 0 var(--nzw-space-3, 12px);
  font-family: var(--nzw-font-mono, ui-monospace, monospace);
  font-size: var(--nzw-text-xs, 12px);
  font-weight: 700;
  letter-spacing: .12em;
  color: var(--nzw-muted, #94a3b8);
}

.page-toc ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--nzw-space-2, 8px) var(--nzw-space-5, 20px);
}

.page-toc a {
  display: inline-flex;
  align-items: baseline;
  gap: var(--nzw-space-2, 8px);
  font-size: var(--nzw-text-sm, 14px);
  font-weight: 700;
  text-decoration: none;
  color: var(--nzw-text, #1e293b);
  border-bottom: 1px solid transparent;
}
.page-toc a:hover { border-bottom-color: var(--nzw-border-strong, #cbd5e1); text-decoration: none; }
.page-toc a span {
  font-family: var(--nzw-font-mono, ui-monospace, monospace);
  font-size: var(--nzw-text-xs, 12px);
  font-weight: 400;
  font-variant-numeric: tabular-nums;
  color: var(--nzw-muted, #94a3b8);
}

/* ---------------------------------------------------------------
   5. スキン
   --------------------------------------------------------------- */

/* 紙 + インク。goods.css / series.css が持っていた値をそのまま引き継ぐ */
.site-header--paper {
  --sh-bg:            rgba(245, 243, 238, 0.93);
  --sh-panel-bg:      #F5F3EE;
  --sh-panel-hover:   rgba(214, 208, 194, 0.35);
  --sh-border:        #D6D0C2;
  --sh-border-strong: #D6D0C2;
  --sh-ink:           #1C1B18;
  --sh-ink-mid:       #3A3935;
  --sh-ink-sub:       #625F57;
  --sh-accent:        var(--nzw-accent-deep, #0369a1);
  --sh-cta-fg:        #F5F3EE;
  --sh-btn-bg:        rgba(255, 255, 255, 0.55);
  --sh-btn-bg-hover:  #ffffff;
  /* リング内側の塗りを紙色に合わせる（既定は #fff で、紙色の帯だと輪が浮く） */
  --nzw-icon-ring-bg: #F5F3EE;
}

/* 白系の配色。design-system.css の --nzw-* をそのまま使うので、
   本文が --nzw-bg / --nzw-card のページ（開発ノート・デザインシステム）と地色が揃う。
   --glass と --plain の違いは「位置と内寸」だけで、色はここが唯一の定義。 */
.site-header--glass,
.site-header--plain {
  --sh-bg:            rgba(255, 255, 255, 0.8);
  --sh-panel-bg:      #ffffff;
  --sh-panel-hover:   rgba(241, 245, 249, 0.9);
  --sh-border:        rgba(0, 0, 0, 0.05);
  --sh-border-strong: var(--nzw-border, #e2e8f0);
  --sh-ink:           var(--nzw-text-strong, #0f172a);
  --sh-ink-mid:       var(--nzw-text, #1e293b);
  --sh-ink-sub:       var(--nzw-sub, #64748b);
  --sh-accent:        var(--nzw-accent, #0ea5e9);
  --sh-cta-fg:        #ffffff;
  --sh-btn-bg:        rgba(255, 255, 255, 0.8);
  --sh-btn-bg-hover:  #ffffff;
  --nzw-icon-ring-bg: #ffffff;
}

/* 白ガラス。トップページ専用。
   position: fixed と内寸はトップの <main> の pt-24 前提で組まれているので、
   他ページに付けると本文がヘッダーの下に潜る。色だけ欲しいときは --plain を使う。 */
.site-header--glass {
  position: fixed;
  width: 100%;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}

/* 白い本文のページ用（開発ノート・デザインシステム）。
   色は --glass と同じだが、位置は骨格の sticky のまま・内寸も既定のまま。
   帯が白同士で沈まないよう、境界だけ --paper と同じ強さの実線にする。 */
.site-header--plain {
  --sh-border: var(--nzw-border, #e2e8f0);
}
.site-header--glass .site-header-inner {
  max-width: 80rem; /* Tailwind の max-w-7xl。トップの本文幅に合わせる */
  padding: 0 16px;
  height: 64px;     /* h-16。<main> の pt-24 がこの高さ前提で組まれている */
}
@media (min-width: 640px) {
  .site-header--glass .site-header-inner { padding: 0 24px; }
}
@media (min-width: 1024px) {
  .site-header--glass .site-header-inner { padding: 0 32px; }
}
.site-header--glass .site-header-logo {
  font-family: var(--nzw-font-mono, "JetBrains Mono", monospace);
  font-size: 24px;
  letter-spacing: -0.025em;
  gap: 12px;
}

/* 夜テーマ。トップページの body.theme-night に連動する */
body.theme-night .site-header--glass {
  --sh-bg:            rgba(15, 23, 42, 0.85);
  --sh-panel-bg:      #0f172a;
  --sh-panel-hover:   rgba(51, 65, 85, 0.6);
  --sh-border:        rgba(255, 255, 255, 0.1);
  --sh-border-strong: rgba(255, 255, 255, 0.18);
  --sh-ink:           #f1f5f9;
  --sh-ink-mid:       #e2e8f0;
  --sh-ink-sub:       #94a3b8;
  --sh-accent:        var(--nzw-accent-light, #38bdf8);
  --sh-cta-fg:        #0f172a;
  --sh-btn-bg:        rgba(30, 41, 59, 0.7);
  --sh-btn-bg-hover:  rgba(51, 65, 85, 0.9);
  --nzw-icon-ring-bg: #0f172a;
}

/* 暗い面のページ用（apps の製図台調）。紙スキンの色を反転させた関係にある */
.site-header--ink {
  --sh-bg:            rgba(13, 14, 12, 0.92);
  --sh-panel-bg:      #12130F;
  --sh-panel-hover:   rgba(255, 255, 255, 0.06);
  --sh-border:        rgba(255, 255, 255, 0.10);
  --sh-border-strong: rgba(255, 255, 255, 0.18);
  --sh-ink:           rgba(255, 255, 255, 0.92);
  --sh-ink-mid:       rgba(255, 255, 255, 0.75);
  --sh-ink-sub:       rgba(255, 255, 255, 0.48);
  --sh-accent:        #7FD8CB;
  --sh-cta-fg:        #0D0E0C;
  --sh-btn-bg:        rgba(255, 255, 255, 0.06);
  --sh-btn-bg-hover:  rgba(255, 255, 255, 0.12);
  --nzw-icon-ring-bg: #0D0E0C;
}
/* CTA は反転させる。暗い地に暗いボタンだと沈む */
.site-header--ink .site-header-cta {
  background: rgba(255, 255, 255, 0.92);
  border-color: rgba(255, 255, 255, 0.92);
}
.site-header--ink .site-header-cta:hover {
  background: #fff;
  box-shadow: 3px 3px 0 rgba(255, 255, 255, 0.18);
}

/* sticky をやめるページ用（design-system は目次側が sticky 枠を使う）。
   static ではなく relative。パネルの絶対配置がヘッダーを基準にできなくなる。 */
/* 本文を頭から敷きたいページ用（about のヒーローなど、帯の下に絵を回り込ませる）。
   本文側で帯の高さぶんの余白を確保しておくこと。 */
.site-header--fixed { position: fixed; left: 0; right: 0; }

/* ---------------------------------------------------------------
   6. モーション設定
   --------------------------------------------------------------- */

/* 背の低い端末（URL バー込みで 700px 未満）では詰める。タップ領域の下限
   44px は割らない。ここを削るより、まず入る量を増やす。 */
@media (max-height: 700px) {
  .site-nav-panel-link { min-height: 44px; font-size: 14.5px; }
  .site-nav-panel-group { margin-top: 10px; margin-bottom: 2px; }
  .site-nav-panel-sub .site-nav-panel-link { min-height: 38px; }
  .site-nav-set { min-height: 40px; padding-top: 2px; padding-bottom: 2px; }
  .site-nav-panel { padding-top: 4px; padding-bottom: 8px; }
}

@media (prefers-reduced-motion: reduce) {
  .site-header-logo,
  .site-header-link,
  .site-header-cta,
  .site-header-login,
  .site-header-burger,
  .site-header-burger-box span,
  .site-nav-panel-link,
  .site-nav-panel,
  .site-nav-backdrop { transition: none; }
  .site-header-cta:hover { transform: none; }
  .site-nav-panel { transform: none; }
}

/* ロゴから開くデザインの切り替えメニュー。
   置いてあるのはトップの 3 画面だけ（#brand-menu が無いページでは何も起きない）。 */
.site-header-brand { position: relative; display: flex; align-items: center; }
.brand-caret {
  margin-left: 5px;
  font-size: 11px;
  opacity: .55;
  transition: transform .18s ease-out, opacity .18s ease-out;
}
.site-header-logo:hover .brand-caret { opacity: 1; }
#brand-switch[aria-expanded="true"] .brand-caret { transform: rotate(180deg); opacity: 1; }

.brand-menu {
  position: absolute;
  top: calc(100% + 10px);
  left: 0;
  z-index: 70;
  min-width: 232px;
  padding: 6px;
  background: var(--sh-bg, #fff);
  border: 1px solid var(--sh-border, rgba(15, 23, 42, .10));
  border-radius: 14px;
  box-shadow: 0 14px 40px rgba(15, 23, 42, .16);
}
.brand-menu[hidden] { display: none; }
.brand-menu-item {
  display: flex;
  flex-direction: column;
  gap: 1px;
  padding: 9px 12px;
  border-radius: 10px;
  text-decoration: none;
  color: var(--sh-ink, #0f172a);
}
.brand-menu-item strong { font-size: 13px; font-weight: 700; }
.brand-menu-item small { font-size: 10.5px; opacity: .62; }
.brand-menu-item:hover,
.brand-menu-item:focus-visible { background: var(--sh-hover, rgba(15, 23, 42, .05)); }
/* いま見ている画面。押せない */
.brand-menu-item--here { cursor: default; opacity: .62; }
.brand-menu-item--here strong::before { content: "\25AA\00A0"; color: var(--sh-accent, #0ea5e9); }
.brand-menu-item--here:hover { background: none; }
