/* ==========================================================
   tex4ht の出力に重ねるスタイル

   フォントは二系統。
   - 数式・記号（math 要素内）: PDF 版と同じ Latin Modern を同梱して用いる。
   - 地の文（body）: M PLUS Rounded 1c。和文込みの丸ゴシックで、
     Google 側が unicode-range ごとに数百のサブセットに分割配信するため
     （Latin Modern は欧文のみ・4ファイルで済むため同梱しているが、
     フルの和文丸ゴシックを同様に同梱するのは現実的でない）、
     Google Fonts を経由する（<link> は inject-sidebar.py が挿入）。
   ========================================================== */

@font-face{
  font-family:'LM Roman'; font-weight:normal; font-style:normal;
  src:url('fonts/lmroman10-regular.woff2') format('woff2'); font-display:swap;
}
@font-face{
  font-family:'LM Roman'; font-weight:bold; font-style:normal;
  src:url('fonts/lmroman10-bold.woff2') format('woff2'); font-display:swap;
}
@font-face{
  font-family:'LM Roman'; font-weight:normal; font-style:italic;
  src:url('fonts/lmroman10-italic.woff2') format('woff2'); font-display:swap;
}
@font-face{
  font-family:'LM Math'; font-weight:normal; font-style:normal;
  src:url('fonts/latinmodern-math.woff2') format('woff2'); font-display:swap;
}

:root{
  --fg:#1a1a1a; --muted:#666; --line:#dcdcdc; --accent:#0a7d4f; --bg:#fff;
  --rule:#333; --side:#fafafa; --sidew:19rem; --gutter:6px;
  --pad:clamp(1rem, 3.5vw, 4rem);
  --figw:34rem;
  /* 図の配色は地の色（黒/白）とこの1色のみに統一する。#0d9488 はこのサイトの
     実サーフェス色（#fff / #161616）双方に対して dataviz スキルの
     validate_palette.js で検証済み（明度帯・彩度下限・コントラストとも合格、
     単色のためCVD分離チェックは対象外）。ライト/ダークで同一値のまま両方通る。 */
  --fig-accent:#0d9488;
}
@media (prefers-color-scheme:dark){
  :root{--fg:#e4e4e4; --muted:#9a9a9a; --line:#333; --accent:#4fc48c;
        --bg:#161616; --rule:#bbb; --side:#1c1c1c}
}

*{box-sizing:border-box}

body{
  margin:0; padding:0;
  background:var(--bg); color:var(--fg);
  font-family:'M PLUS Rounded 1c',"Hiragino Maru Gothic ProN","Noto Sans CJK JP",sans-serif;
  line-height:1.85; font-size:16.5px;
  -webkit-text-size-adjust:100%;
  /* tex4ht の book.css が body{max-width:80ch} を課しており、
     #content の margin-left(サイドバー分)と合わさって本文が極端に狭くなる。
     ここで打ち消さないと #content 側の max-width:none は効かない。 */
  max-width:none;
}

/* ---------- 目次サイドバー ---------- */
#toc{
  position:fixed; top:0; left:0; width:var(--sidew); height:100vh;
  overflow-y:auto; overscroll-behavior:contain;
  background:var(--side); border-right:1px solid var(--line);
  padding:0 0 3rem; font-size:.83rem; line-height:1.6;
  scrollbar-width:thin;
}
.toc-head{
  position:sticky; top:0; z-index:2;
  display:flex; align-items:center; justify-content:space-between;
  padding:.9rem 1.1rem .7rem; background:var(--side);
  border-bottom:1px solid var(--line); font-size:.9rem; font-weight:600;
}
.toc-head a{color:var(--fg); text-decoration:none}
#toc-close{
  display:none; background:none; border:0; color:var(--muted);
  font-size:1.4rem; line-height:1; cursor:pointer; padding:0 .2rem;
}
#toc ul{list-style:none; margin:.5rem 0 0; padding:0}
#toc li{margin:0}
#toc a{
  display:block; padding:.24rem 1.1rem;
  color:var(--muted); text-decoration:none; overflow-wrap:anywhere;
}
#toc a:hover{background:rgba(128,128,128,.12); color:var(--fg)}
#toc .tn{color:var(--muted); opacity:.7; margin-right:.35em;
  font-variant-numeric:tabular-nums}
#toc .t-part>a{
  color:var(--fg); font-weight:600; font-size:.9rem;
  margin-top:.9rem; padding-top:.5rem; border-top:1px solid var(--line);
}
#toc .t-chap>a{color:var(--fg); font-weight:500}
#toc .t-sec>a{padding-left:2.2rem; font-size:.8rem}
#toc li.active>a{
  color:var(--accent); background:rgba(10,125,79,.09);
  box-shadow:inset 3px 0 0 var(--accent);
}

#toc-toggle{
  display:none; position:fixed; top:.7rem; left:.7rem; z-index:20;
  width:2.4rem; height:2.4rem; border:1px solid var(--line); border-radius:5px;
  background:var(--bg); color:var(--fg); font-size:1.1rem; cursor:pointer;
}

/* サイドバーの境界。ドラッグで幅を変えられる */
#toc-resize{
  position:fixed; top:0; left:calc(var(--sidew) - var(--gutter)/2);
  width:var(--gutter); height:100vh; z-index:16;
  cursor:col-resize; background:transparent;
}
#toc-resize:hover,#toc-resize.dragging{background:var(--accent); opacity:.35}
body.resizing{user-select:none; cursor:col-resize}

/* ---------- 本文 ---------- */
/* 幅はウィンドウに追従させる。行長の上限は設けない。 */
#content{
  margin-left:var(--sidew);
  padding:2.2rem var(--pad) 6rem;
  max-width:none;
}

.wip{
  border:1px solid var(--line); border-left:3px solid var(--accent);
  border-radius:3px; padding:.6rem .9rem; margin:0 0 2rem;
  font-size:.82rem; line-height:1.7; color:var(--muted);
}
.wip strong{color:var(--fg)}
.wip a{color:var(--accent)}

h1,h2,h3,h4{line-height:1.5; font-weight:600; margin:2.3rem 0 .8rem}
h1{font-size:1.55rem}
h2{font-size:1.25rem; padding-bottom:.3rem; border-bottom:1px solid var(--line)}
h3{font-size:1.06rem}
h4{font-size:1rem; color:var(--muted)}
.chapterHead,.partHead,.likechapterHead{margin-top:.6rem}
.titlemark{display:block; font-size:.82rem; color:var(--muted); font-weight:400}

p{margin:0 0 1rem}
p.indent{text-indent:1em}
a{color:var(--accent)}

.theorem,.proposition,.definition,.remark,.example,.corollary{
  margin:1.2rem 0; padding:.1rem 0 .1rem .9rem;
  border-left:3px solid var(--line);
}
.proof{margin:1rem 0 1.4rem; color:var(--muted)}

table{border-collapse:collapse; margin:1.3rem 0; font-size:.9rem}
table.equation{border:0; margin:1.2rem 0; width:100%}
td,th{padding:.4rem .7rem; vertical-align:top}
.hline td,.cline td{border-top:1px solid var(--rule)}
.lefthead,.righthead{white-space:nowrap}
/* tex4ht は booktabs の罫線を表ごとに tr#TBL-N-M- {border-color:#000} という
   ID セレクタで個別出力する（本文中だけで395件）。ID セレクタはクラスより
   詳細度が高く、かつ色が #000 に固定されているためダークモードで背景に溶けて
   見えなくなる。属性セレクタ＋!important で一括して打ち消す。 */
table tr[id^="TBL-"]{border-color:var(--rule) !important}

/* 参考文献の番号 [n]。tex4ht は [ と ] の間に改行を含む形で出力するため、
   book.css の .thebibliography dl{grid-auto-columns:min-content ...} が
   「[1」の幅で列を決めてしまい ] だけが次行に落ちる
   （番号をリンクにして <a> が挟まったことで折り返し位置が生まれた）。 */
.thebibliography dt{white-space:nowrap}

/* マウスオーバーした文献を、番号と本文まとめて帯状にハイライトする。
   dd の左マージンはブラウザ既定の 40px なので、そのままだと番号と本文の間で
   帯が途切れる。マージンを番号側の padding に付け替えて連続させる。
   dd にホバーしたとき手前の dt を選ぶのは :has()（未対応環境では dd だけ光る）。 */
.thebibliography dd{margin-left:0}
.thebibliography dt{padding-right:2.4rem}
.thebibliography dt,.thebibliography dd{transition:background-color .12s}
.thebibliography dt:hover,
.thebibliography dt:hover + dd,
.thebibliography dd:hover,
.thebibliography dt:has(+ dd:hover){background:rgba(128,128,128,.16)}

/* ---------- 図 ---------- */
/* 図は固定サイズ。ウィンドウが狭いときのみ縮める。 */
figure,.figure{margin:1.8rem 0; text-align:center}
/* img.tikzfig は figures.js が無効な環境向けの <noscript> フォールバックとしてのみ残す
   （通常は .htmlfig が JS で描画したインラインSVGに置き換わる）。 */
img.tikzfig{
  display:block; margin:1.6rem auto;
  width:var(--figw); max-width:100%; height:auto;
}
@media (prefers-color-scheme:dark){
  img.tikzfig{filter:invert(1) hue-rotate(180deg)}
}
.caption,figcaption{font-size:.86rem; color:var(--muted); margin-top:.5rem}

/* ---------- HTML図（figures.js が描画するインラインSVG） ---------- */
.htmlfig{margin:1.8rem 0; text-align:center}
.htmlfig svg{
  display:block; width:100%; max-width:var(--figw); height:auto; margin:0 auto;
  font-family:'LM Roman',"Hiragino Maru Gothic ProN",sans-serif;
}
.htmlfig .fig-axis line{stroke:var(--rule)}
.htmlfig .fig-gridline{stroke:var(--line); stroke-width:1}
.htmlfig text.fig-tick{fill:var(--muted); font-size:.66rem}
.htmlfig .fig-label{fill:var(--fg); font-size:.78rem}
.htmlfig .fig-muted{fill:var(--muted); font-size:.72rem}
.htmlfig .fig-legend text{fill:var(--fg); font-size:.74rem}
.htmlfig .fig-crosshair{stroke:var(--muted); stroke-width:1; stroke-dasharray:none}
.htmlfig .fig-hit{fill:transparent; stroke:none; cursor:pointer}
.htmlfig .fig-mark{transition:opacity .1s}
.htmlfig .fig-mark.is-dim{opacity:.35}
.htmlfig .fig-line{fill:none; stroke-width:2; stroke-linejoin:round; stroke-linecap:round}
.htmlfig .fig-dot{stroke:var(--bg); stroke-width:2}
.htmlfig .fig-bar{stroke:none}
.htmlfig .fig-baseline{stroke:var(--rule); stroke-width:1}
.htmlfig .fig-boxfill{fill:var(--side)}
.htmlfig .fig-box{fill:none; stroke:var(--line); stroke-width:1}
.htmlfig .fig-arrow{stroke:var(--fg); stroke-width:1.4; fill:none}
.htmlfig .fig-arrowhead{fill:var(--fg)}

/* 図の配色は原則2色（地の色＝黒／白とターコイズ）に統一する。複数系列は
   原図（TikZ）と同じく色ではなく線種（実線/破線/点線/一点鎖線）で区別し、
   色と線種は独立したクラスとして組み合わせる（例: "fig-c-accent fig-p-dashed"）。 */
.fig-c-accent{fill:var(--fig-accent); stroke:var(--fig-accent); background:var(--fig-accent)}
.fig-c-fg{fill:var(--fg); stroke:var(--fg); background:var(--fg)}
/* 上の色クラスは線にも文字にも使うが、SVG の text に stroke が乗ると字が縁取られて
   太く潰れて見える。文字では stroke を消し、点の縁取り（地色の縁）も戻す。 */
.htmlfig text.fig-c-accent,.htmlfig text.fig-c-fg{stroke:none}
.htmlfig circle.fig-dot{stroke:var(--bg); stroke-width:2}
/* 線種は .fig-line の丸いキャップ（両端が線幅ぶん伸びる）を見込んで間隔を取る。
   間隔が狭いと破線が実線に見え、種類どうしの区別もつかなくなる。 */
.fig-p-dashed{stroke-dasharray:10,8}
.fig-p-dotted{stroke-dasharray:0.1,6}
.fig-p-dashdot{stroke-dasharray:12,6,0.1,6}

.chart-tooltip{
  position:fixed; z-index:40; pointer-events:none;
  background:var(--bg); border:1px solid var(--line); border-radius:6px;
  padding:.5rem .7rem; font-size:.82rem; color:var(--fg);
  box-shadow:0 4px 16px rgba(0,0,0,.18);
  opacity:0; transform:translateY(2px); transition:opacity .1s, transform .1s;
  max-width:16rem;
}
.chart-tooltip.visible{opacity:1; transform:translateY(0)}
.chart-tooltip .tt-title{font-weight:600; margin-bottom:.3rem; white-space:nowrap}
.chart-tooltip .tt-row{display:flex; align-items:center; gap:.4rem; white-space:nowrap}
.chart-tooltip .tt-row+.tt-row{margin-top:.15rem}
.chart-tooltip .tt-key{width:.7rem; height:2px; flex:0 0 auto; border-radius:1px}
.chart-tooltip .tt-name{color:var(--muted)}
.chart-tooltip .tt-val{font-weight:600; margin-left:auto; padding-left:.6rem}

@media (max-width:520px){
  .htmlfig text.fig-tick{font-size:.6rem}
}

/* ---------- 数式 ---------- */
math{
  font-family:'LM Math','Latin Modern Math','LM Roman',serif;
  font-size:1.05em;
}
math[display='block']{
  /* display:block だけでは箱がコンテナ幅いっぱいに広がり、
     中身（mtable 等）は左詰めのまま残る。中身の幅に箱を合わせて
     auto マージンで中央寄せする。overflow 時は自身は伸ばさず横スクロール。 */
  display:block; width:fit-content; max-width:100%;
  margin:1.1rem auto; overflow-x:auto; overflow-y:hidden;
  /* font-size を base(1.05em) から上げると、番号付き数式（table.equation
     内で幅が eq-no 分だけ狭い）と番号なし数式とで見かけの余白バランスが
     崩れて不均一に見えたため、拡大はせず base のままに戻した。 */
}
math mo[stretchy='true']{max-height:2.4em}
math munderover,math munder,math mover{vertical-align:middle}
.equation{margin:1.2rem 0}

/* ---------- ページ送り（部レベル／章レベルの二段構成） ---------- */
/* tex4ht の crosslinks（next/prev/prev-tail/tail/up の羅列。部の境界で
   next/prev が途切れる欠陥がある）を、inject-sidebar.py が
   「前の部／次の部」（粗い粒度）と「前へ／目次／次へ」（章単位）の
   二段に作り替えたもの。部の境界でも章単位の送りが機能するよう、
   部の区切りページを飛ばして章から章へ直結させてある。 */
.pagenav{margin:1.8rem 0; padding:.6rem 0 0; border-top:1px solid var(--line)}

.pagenav-part-row{
  display:flex; justify-content:space-between; gap:.6rem;
  font-size:.8rem; margin-bottom:.6rem;
}
.pagenav-part-link{
  color:var(--muted); text-decoration:none; max-width:48%;
  padding:.15rem .2rem; transition:color .12s;
}
.pagenav-part-next{text-align:right; margin-left:auto}
.pagenav-part-link:hover{color:var(--accent)}
.pagenav-part-link.pagenav-disabled{opacity:.35}

.pagenav-chapter-row{
  display:flex; align-items:stretch; gap:.6rem;
  padding:.6rem 0; border-top:1px solid var(--line); border-bottom:1px solid var(--line);
}
.pagenav-link{
  display:flex; align-items:center; gap:.4rem;
  padding:.55rem 1rem; border-radius:7px;
  color:var(--fg); text-decoration:none; font-size:.92rem;
  white-space:nowrap; transition:background .12s, border-color .12s;
  border:1px solid transparent;
}
.pagenav-prev,.pagenav-next{
  flex:1 1 0; border-color:var(--line); font-weight:500;
}
.pagenav-next{justify-content:flex-end}
.pagenav-link:hover{background:rgba(128,128,128,.12)}
.pagenav-disabled{color:var(--muted); opacity:.4; cursor:default; pointer-events:none}
.pagenav-toc{
  flex:0 0 auto; color:var(--muted); font-size:.85rem;
  justify-content:center;
}
.pagenav-toc:hover{color:var(--fg)}
@media (max-width:520px){
  .pagenav-part-row{font-size:.76rem}
  .pagenav-part-link{max-width:44%}
  .pagenav-chapter-row{flex-wrap:wrap}
  .pagenav-link{font-size:.86rem; padding:.5rem .7rem}
  .pagenav-toc{
    order:3; flex:1 1 100%; justify-content:center;
    border-top:1px solid var(--line); margin-top:.4rem; padding-top:.6rem;
  }
}

.tableofcontents{font-size:.92rem; line-height:1.9}
.tableofcontents a{text-decoration:none}

.footnotes{font-size:.88rem; color:var(--muted); margin-top:2.5rem}
.thebibliography{font-size:.9rem}
.bibitem{margin:.6rem 0}

/* ---------- 狭い画面 ---------- */
@media (max-width:900px){
  #toc{transform:translateX(-100%); transition:transform .18s ease;
    z-index:15; box-shadow:0 0 24px rgba(0,0,0,.25)}
  body.toc-open #toc{transform:translateX(0)}
  #toc-close{display:block}
  #toc-toggle{display:block}
  #toc-resize{display:none}
  #content{margin-left:0; padding:3.6rem 1.1rem 4rem}
  body{font-size:15.5px}
  table{font-size:.84rem}
  td,th{padding:.3rem .45rem}
}

/* 主要な結果の式を囲む枠。PDF では \boxed が描くが、HTML で tex4ht が出す
   <menclose notation="box"> は MathML Core に無く、Chrome と Safari では
   枠が出ず、Firefox では分数の高さに上辺が切られる。外側の div で描く。 */
/* 本稿で唯一枠で囲む式（式7.3）。tex4ht の <menclose notation="box"> は
   MathML Core に無く描画されないため、直前の段落に置いた空の印
   （\HCode{<span class="keyeq-mark"></span>}）を手がかりに、
   隣接する式の表へ枠を描く。生の <div> で囲むと <p> の入れ子が壊れ、
   make4ht の domfilter が退避してファイル全体の数式が壊れる。 */
p:has(> .keyeq-mark) + table.equation{
  border:1px solid var(--rule);
  border-radius:4px;
  margin:1.2rem 0;
  padding:.5rem .6rem;
  background:var(--side);
}
.keyeq-mark{display:none}


/* 言語切り替え。本文の先頭に置き、日本語版と英語版、および両方の PDF へ繋ぐ。 */
.langbar{
  display:flex; flex-wrap:wrap; align-items:center; gap:.6em;
  margin:0 0 .9em; padding:.35em .8em;
  font-size:.86em; line-height:1.7;
  border:1px solid var(--rule,#d7d2c8); border-radius:6px;
  background:var(--surface,#faf8f4);
}
.langbar .cur{font-weight:700}
.langbar a{text-decoration:none}
.langbar a:hover{text-decoration:underline}
.langbar .sep{opacity:.45}
@media (prefers-color-scheme: dark){
  .langbar{border-color:#3b3b3b; background:#232323}
}
