/*
 * tsuzuri Markdown Preview 既定スタイル (Ember テーマ)
 *
 * 参照用に %APPDATA%\tsuzuri\theme.default.css として起動時に書き出されます (編集しても起動時に戻ります)。
 * カスタマイズは同じフォルダの theme.css に書いてください。theme.css は既定値より後に読み込まれるので、
 * 変えたい部分だけ書けば上書きできます。保存すると再起動なしで反映されます (Ctrl+, で設定フォルダを開けます)。
 *
 * Ember の方針: 見出しは本文と同サイズ (ウェイト 600、色 text-bright) で、記号 (# - 1.) だけ琥珀にする。
 * インラインコードは緑 1 色 (背景なし)。角丸・影・アニメーションは使わない。
 * Preview 行では隠れている見出し記号を ::before で琥珀の "#" として出すので、raw と見た目が揃います。
 * 見出しを大きくしたい場合は theme.css で --md-h1-size 等を上書きしてください。
 *
 * 主なセレクタ:
 *   .cm-h1 〜 .cm-h6      見出し行           .cm-raw            カーソルがあり raw 表示中の行
 *   .cm-md-mark           raw 行の見出し記号   .cm-list-mark      raw 行の箇条書き記号
 *   .cm-hmark             Preview の見出し記号 (# = --md-hmark-icon の mask、数字 = data-level)
 *   .cm-strong / .cm-em   太字 / 斜体         .cm-strike         打消し
 *   .cm-inline-code       インラインコード     .cm-link           リンク (Ctrl+クリックで開く)
 *   .cm-quote             引用行              .cm-hr             水平線
 *   .cm-codeblock         コードブロック行 (開始行の上辺と終了行の下辺に --gutter の破線)   .cm-lang-label   言語ラベル
 *   .cm-bullet            箇条書きの記号       .cm-task           チェックボックス
 *   .cm-list-num          番号リストの番号     .cm-table-widget   テーブル
 *   .cm-file-sep          ファイルの見出し (日付) 兼区切り線
 *   .cm-attach            添付ファイル (.cm-attach-media 画像・動画 / .cm-attach-file チップ /
 *                         .cm-attach-missing 未同期 / .cm-attach-handle 拡縮ハンドル / .cm-attach-nosync 同期対象外)
 *
 * サイドバー (base.css 側で定義。theme.css から上書き可):
 *   .sb-month / .sb-month-label / .sb-month-line   月見出し「YYYY · MM ───」
 *   .sb-file-title > .sb-day / .sb-wd              日付行の「日」と「曜日」
 *   .sb-heading > .sb-hash / .sb-heading-text      見出し行の「#」(階層 = # の数) とテキスト
 *
 * 注意: 行 (.cm-h1 や .cm-quote など) やブロック widget に margin を付けないでください。
 *       CodeMirror の行高計測に含まれないため、クリック位置やカーソルの上下移動がずれます。余白は padding で。
 *
 * 記号 (箇条書きの点・チェックマーク等) は文字ではなく SVG (data:image/svg+xml を mask-image に指定) で描いています。
 * 差し替えるときは --md-bullet-icon / --md-bullet-nested-icon / --md-task-check-icon / --md-hmark-icon に url("data:image/svg+xml,...") を
 * 指定してください。色は mask の下の background-color (--md-bullet-color / --md-mark-color 等) で変わります。
 * Preview の見出し行の帯は --md-heading-band (transparent で消える)、縦線は --md-heading-bar-color / --md-heading-bar-width。上辺の 1px 線は --border。
 */

:root {
  /* 見出しサイズ (本文 = 1em)。Ember では本文と同サイズ */
  --md-h1-size: 1em;
  --md-h2-size: 1em;
  --md-h3-size: 1em;
  --md-h4-size: 1em;
  --md-h5-size: 1em;
  --md-h6-size: 1em;
  /* 見出しの上下余白 (padding の shorthand)。Ember では 0 (22px の行グリッドを崩さず、行番号と見出しが揃う)。空行で間隔を取る。
     注意: 行の装飾に margin は使わないこと。CodeMirror の行高計測に含まれず、クリック位置や上下移動がずれる */
  --md-h1-padding: 0;
  --md-h2-padding: 0;
  --md-h3-padding: 0;
  --md-h-padding: 0;
  --md-heading-weight: 600;
  --md-heading-color: var(--text-bright);
  --md-h1-border: none;
  /* 見出し記号 (Preview、docs/design-spec-heading-c3.md)。# は SVG を mask で描き (文字だと斜めになるため)、右に階層の数字。色は --md-mark-color。
     消すなら --md-heading-mark-display: none */
  --md-hmark-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 12'%3E%3Crect x='2.4' y='0' width='1.5' height='12' fill='%23000'/%3E%3Crect x='6.1' y='0' width='1.5' height='12' fill='%23000'/%3E%3Crect x='0' y='3.2' width='10' height='1.5' fill='%23000'/%3E%3Crect x='0' y='7.3' width='10' height='1.5' fill='%23000'/%3E%3C/svg%3E");
  --md-hmark-width: 8.5px;
  --md-hmark-height: 10px;
  --md-hmark-level-size: 9px; /* 階層の数字 */
  --md-hmark-level-gap: 0.5px; /* # と数字の間隔 */
  --md-heading-mark-display: inline-flex;
  --md-mark-color: var(--accent);
  /* 見出し行の帯と縦線 (Preview のみ)。帯を消すなら --md-heading-band: transparent */
  --md-heading-band: var(--chrome);
  --md-heading-bar-color: var(--accent);
  --md-heading-bar-width: 2px;

  --md-code-bg: transparent;
  --md-code-fg: var(--secondary);
  --md-codeblock-bg: var(--chrome);
  /* フェンス行 (言語名の行と終了行) の背景。既定は中身と同じ。一段明るくするなら color-mix(in srgb, var(--chrome) 55%, var(--bg))
     (docs/design-spec-codeblock-frame.md) */
  --md-codeblock-fence-bg: var(--md-codeblock-bg);
  --md-codeblock-radius: 0;
  --md-quote-border: 2px solid var(--gutter);
  --md-quote-color: var(--text);
  --md-link-color: var(--link);
  --md-link-underline: var(--link-underline);
  --md-hr-color: var(--gutter);
  /* 箇条書きの記号 (SVG)。1 階層目は塗り丸、2 階層目以降は輪郭丸。色は --md-bullet-color */
  --md-bullet-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='3.4' fill='%23000'/%3E%3C/svg%3E");
  --md-bullet-nested-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='2.6' fill='none' stroke='%23000' stroke-width='1.6'/%3E%3C/svg%3E");
  --md-bullet-color: var(--accent);
  /* タスクのチェックマーク (SVG)。色は --md-task-check-color、枠は --md-task-border */
  --md-task-check-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --md-task-check-color: var(--chrome);
  --md-task-border: 1px solid var(--gutter);
  --md-task-bg-checked: var(--accent);
  --md-task-radius: 0;
  --md-table-border: 1px solid var(--border);
  --md-table-head-bg: var(--chrome);
  /* 添付ファイル (docs/design-spec-attachments.md)。幅を指定していない画像・動画の上限と、拡縮ハンドル */
  --md-attach-max-height: 60vh;
  --md-attach-handle-size: 8px;
  --md-attach-handle-color: var(--accent);
  --md-attach-border: 1px solid var(--border);

  /* ファイルの見出し兼区切り線 (各ファイルの 1 行目の上。左に日付、右に線。上下余白は padding) */
  --sep-color: var(--border);
  --sep-label-color: var(--text-bright);
  --sep-label-size: 1em;
  --sep-label-weight: 600;
  --sep-padding-top: 22px;
  --sep-padding-bottom: 11px;
}

/* ---- 見出し ---- */
.cm-heading {
  font-weight: var(--md-heading-weight);
  color: var(--md-heading-color);
}
.cm-line.cm-h1 { font-size: var(--md-h1-size); padding: var(--md-h1-padding); border-bottom: var(--md-h1-border); }
.cm-line.cm-h2 { font-size: var(--md-h2-size); padding: var(--md-h2-padding); }
.cm-line.cm-h3 { font-size: var(--md-h3-size); padding: var(--md-h3-padding); }
.cm-line.cm-h4 { font-size: var(--md-h4-size); padding: var(--md-h-padding); }
.cm-line.cm-h5 { font-size: var(--md-h5-size); padding: var(--md-h-padding); }
.cm-line.cm-h6 { font-size: var(--md-h6-size); padding: var(--md-h-padding); }
/* Preview の見出し行: 縦線から右端まで帯 (--chrome)。縦線は本文左余白の左端 (行番号欄との境) に置く。
   raw 行 (カーソルあり) には付けない。行番号欄には何も付けない */
.cm-line.cm-heading:not(.cm-raw) {
  position: relative;
  background: var(--md-heading-band);
}
.cm-line.cm-heading:not(.cm-raw)::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: calc(-1 * var(--content-padding-left));
  width: var(--content-padding-left);
  background: var(--md-heading-band);
  border-left: var(--md-heading-bar-width) solid var(--md-heading-bar-color);
  box-sizing: border-box;
  pointer-events: none;
}
/* 見出し行の上辺に 1px の線 (見出しが連続したときの区切り)。raw 行には描かない。行の高さは変えない (padding / border / margin は使わない) */
.cm-line.cm-heading:not(.cm-raw)::after {
  content: "";
  position: absolute;
  top: 0;
  left: calc(-1 * var(--content-padding-left));
  right: 0;
  height: 1px;
  background: var(--border);
  pointer-events: none;
}

/* 見出し記号 (HeadingMarkWidget): まっすぐな # (SVG mask) + 階層の数字。# と数字の下端を揃える。
   margin-right は行内の inline 要素なので行高計測に影響しない */
.cm-hmark {
  display: var(--md-heading-mark-display);
  align-items: baseline;
  color: var(--md-mark-color);
  font-weight: 600;
  white-space: nowrap;
  margin-right: 1ch;
  vertical-align: baseline;
}
.cm-hmark::before {
  content: "";
  display: inline-block;
  width: var(--md-hmark-width);
  height: var(--md-hmark-height);
  vertical-align: 0;
  background-color: var(--md-mark-color);
  mask: var(--md-hmark-icon) center / 100% 100% no-repeat;
  -webkit-mask: var(--md-hmark-icon) center / 100% 100% no-repeat;
}
.cm-hmark::after {
  content: attr(data-level);
  font-size: var(--md-hmark-level-size);
  line-height: 1;
  margin-left: var(--md-hmark-level-gap);
  font-variant-numeric: tabular-nums;
  vertical-align: baseline;
}

/* ---- raw 行の Markdown 記号 (見出しの #、箇条書きの - * 1.) ---- */
.cm-md-mark,
.cm-list-mark { color: var(--md-mark-color); }

/* ---- インライン ---- */
.cm-strong { font-weight: 700; }
.cm-em { font-style: italic; }
.cm-strike { text-decoration: line-through; color: var(--text-dim); }
.cm-inline-code {
  font-family: var(--font-mono);
  background: var(--md-code-bg);
  color: var(--md-code-fg);
}
.cm-link {
  color: var(--md-link-color);
  text-decoration: underline;
  text-decoration-color: var(--md-link-underline);
  text-underline-offset: 0.15em;
}
.cm-raw .cm-link { text-decoration: none; }

/* ---- 絵文字 (:name: の Preview。既定は Unicode 文字、カスタムは画像) ---- */
.cm-emoji {
  display: inline-block;
  vertical-align: baseline;
  line-height: 1;
}
.cm-emoji-img {
  height: 1.3em;
  width: auto;
  max-width: 2.6em;
  object-fit: contain;
  vertical-align: -0.3em;
}

/* ---- 添付ファイル (画像・動画・その他)。仕様は docs/design-spec-attachments.md ---- */
.cm-attach {
  position: relative;
  display: inline-block;
  max-width: 100%;
  /* 上揃え: 箇条書きの点や同じ行の文字を、画像の中央ではなく 1 行目 (文字と同じ高さ) に置く */
  vertical-align: top;
}
.cm-attach-media {
  display: block;
  max-width: 100%;
  max-height: var(--md-attach-max-height);
  height: auto;
}
/* 4 隅の拡縮ハンドル。widget にマウスを乗せている間だけ出す (画像・動画のみ) */
.cm-attach-handle {
  position: absolute;
  z-index: 1;
  display: none;
  width: var(--md-attach-handle-size);
  height: var(--md-attach-handle-size);
  background: var(--md-attach-handle-color);
}
.cm-attach[data-kind="image"]:hover > .cm-attach-handle,
.cm-attach[data-kind="video"]:hover > .cm-attach-handle,
.cm-attach.cm-attach-resizing > .cm-attach-handle { display: block; }
.cm-attach-handle[data-corner="nw"] { top: 0; left: 0; cursor: nwse-resize; }
.cm-attach-handle[data-corner="ne"] { top: 0; right: 0; cursor: nesw-resize; }
.cm-attach-handle[data-corner="sw"] { bottom: 0; left: 0; cursor: nesw-resize; }
.cm-attach-handle[data-corner="se"] { bottom: 0; right: 0; cursor: nwse-resize; }
/* 上限超過で Git 同期の対象外になっているファイル。画像・動画は右下に重ね、チップは右に並べる */
.cm-attach-nosync {
  padding: 0 4px;
  background: var(--chrome);
  color: var(--text-dim);
  font-size: var(--font-size-status);
}
.cm-attach[data-kind="image"] > .cm-attach-nosync,
.cm-attach[data-kind="video"] > .cm-attach-nosync {
  position: absolute;
  right: 0;
  bottom: 0;
}
/* ファイルチップ (画像・動画以外) と、ローカルにファイルが無いときのプレースホルダ */
.cm-attach.cm-attach-missing,
.cm-attach-file {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  max-width: 100%;
  padding: 0 8px;
  border: var(--md-attach-border);
}
.cm-attach-file { color: var(--text); cursor: pointer; }
.cm-attach-file:hover { border-color: var(--accent); }
.cm-attach-file .icon { color: var(--accent); }
.cm-attach.cm-attach-missing { color: var(--text-dim); }
.cm-attach.cm-attach-missing .icon { color: var(--text-dim); }
.cm-attach-name { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.cm-attach-note,
.cm-attach-size { color: var(--text-dim); font-size: var(--font-size-status); }

/* ---- リスト ---- */
.cm-bullet::before {
  content: "";
  display: inline-block;
  width: 1.1em;
  height: 1em;
  vertical-align: -0.15em;
  background-color: var(--md-bullet-color);
  mask: var(--md-bullet-icon) center / 1em 1em no-repeat;
  -webkit-mask: var(--md-bullet-icon) center / 1em 1em no-repeat;
}
.cm-bullet[data-depth="2"]::before,
.cm-bullet[data-depth="3"]::before {
  mask-image: var(--md-bullet-nested-icon);
  -webkit-mask-image: var(--md-bullet-nested-icon);
}
.cm-list-num { color: var(--md-mark-color); font-variant-numeric: tabular-nums; }
.cm-task {
  appearance: none;
  -webkit-appearance: none;
  position: relative;
  width: 1em;
  height: 1em;
  margin: 0 0.45em 0 0;
  vertical-align: -0.12em;
  border: var(--md-task-border);
  border-radius: var(--md-task-radius);
  background: transparent;
  cursor: pointer;
}
.cm-task:hover { border-color: var(--accent); }
.cm-task:checked {
  background: var(--md-task-bg-checked);
  border-color: var(--md-task-bg-checked);
}
.cm-task:checked::before {
  content: "";
  position: absolute;
  inset: 0;
  background-color: var(--md-task-check-color);
  mask: var(--md-task-check-icon) center / 100% 100% no-repeat;
  -webkit-mask: var(--md-task-check-icon) center / 100% 100% no-repeat;
}
.cm-task:focus-visible { outline: 1px solid var(--accent); outline-offset: 1px; }

/* ---- 引用 / 水平線 ---- */
.cm-line.cm-quote {
  border-left: var(--md-quote-border);
  padding-left: 0.9em;
  color: var(--md-quote-color);
}
.cm-line.cm-hr-line { padding: 0; }
.cm-hr { display: inline-block; width: 100%; border-top: 1px solid var(--md-hr-color); vertical-align: middle; }

/* ---- コードブロック ---- */
.cm-line.cm-codeblock {
  font-family: var(--font-mono);
  background: var(--md-codeblock-bg);
  padding-left: 1em;
  padding-right: 1em;
}
/* カーソルがブロック内にあるとき (raw) は見出しの帯と同じく背景を消し、本文と同じ見え方にする。
   等幅と左右の余白は残す (文字が横にずれないように)。上下の破線 (下の ::after) も出さない */
.cm-line.cm-codeblock.cm-codeblock-raw {
  background: transparent;
}
.cm-line.cm-codeblock.cm-codeblock-raw::after {
  display: none;
}
/* フェンス行 (```lang / ```) は上下 padding を付けず 22px の行グリッドに乗せる。行番号欄の間隔が他の行と揃う。
   ブロックの内側の余白は、言語ラベルだけの開始行と空の終了行そのものが担う */
/* フェンス行 (言語名の行と終了行)。背景は既定で中身と同じ (--md-codeblock-fence-bg) */
.cm-line.cm-codeblock-start,
.cm-line.cm-codeblock-end {
  position: relative;
  background: var(--md-codeblock-fence-bg);
}
.cm-line.cm-codeblock-start { border-radius: var(--md-codeblock-radius) var(--md-codeblock-radius) 0 0; }
.cm-line.cm-codeblock-end { border-radius: 0 0 var(--md-codeblock-radius) var(--md-codeblock-radius); }
/* ブロックの上端と下端の破線 (docs/design-spec-codeblock-frame.md)。開始行の 1px 目と終了行の 22px 目に描く。
   行の高さは変えない。fold の開閉行も終了行なので、同じ破線の上に山括弧と件数が乗る */
.cm-line.cm-codeblock-start::after,
.cm-line.cm-codeblock-end::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  height: 0;
  border-top: 1px dashed var(--gutter);
  pointer-events: none;
}
.cm-line.cm-codeblock-start::after { top: 0; }
.cm-line.cm-codeblock-end::after { bottom: 0; }

/* コードの直後にコード: 終了行の破線 1 本で切る (2 本重なると太く見える) */
.cm-line.cm-codeblock-end + .cm-line.cm-codeblock-start::after { display: none; }
/* コードの直後に見出し: 終了行の破線 1 本で切る (見出しの実線は出さない) */
.cm-line.cm-codeblock-end + .cm-line.cm-heading:not(.cm-raw)::after { display: none; }
/* 折りたたみ (```ts fold、src/editor/livePreview/codeFold.ts、docs/design-spec-codefold.md) */
/* 畳んでいるときの内容 4 行目から 6 行目: ブロック背景色を上から下へ濃くした帯を重ね、3 行で 1 本の勾配に見せる。
   下方向のグラデーションはユーザー要望による例外 (Ember の禁止事項のうち、この用途だけ許す) */
.cm-line.cm-codeblock-fade-1,
.cm-line.cm-codeblock-fade-2,
.cm-line.cm-codeblock-fade-3 { position: relative; }
.cm-line.cm-codeblock-fade-1::after,
.cm-line.cm-codeblock-fade-2::after,
.cm-line.cm-codeblock-fade-3::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.cm-line.cm-codeblock-fade-1::after {
  background: linear-gradient(to bottom, transparent, color-mix(in srgb, var(--md-codeblock-bg) 35%, transparent));
}
.cm-line.cm-codeblock-fade-2::after {
  background: linear-gradient(to bottom, color-mix(in srgb, var(--md-codeblock-bg) 35%, transparent), color-mix(in srgb, var(--md-codeblock-bg) 70%, transparent));
}
.cm-line.cm-codeblock-fade-3::after {
  background: linear-gradient(to bottom, color-mix(in srgb, var(--md-codeblock-bg) 70%, transparent), var(--md-codeblock-bg));
}

/* 終了フェンス行 = 開閉行。行全体が押せる */
.cm-line.cm-codefold-footer-line { cursor: pointer; }
.cm-fold-footer {
  display: inline-flex;
  align-items: center;
  height: 22px;
  color: var(--text-dim);
  font-size: 0.85em;
  user-select: none;
}
.cm-fold-footer .icon { width: 12px; height: 12px; margin-right: 6px; }
.cm-line.cm-codefold-footer-line:hover .cm-fold-footer { color: var(--text); }

/* 行番号欄: 畳んでいる終了フェンス行は番号の代わりに縦 3 点。数字と同じ右端に揃える */
.cm-fold-gutter-dots {
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
  height: 22px;
  color: var(--gutter);
}
#editor .cm-fold-gutter-dots .icon { width: 12px; height: 12px; stroke-width: 3.2; }
.cm-lang-label {
  font-size: 0.85em;
  color: var(--text-dim);
  text-transform: lowercase;
  user-select: none;
}
.cm-lang-name:empty::before { content: "code"; }

/* ---- テーブル ---- */
.cm-table-raw { font-family: var(--font-mono); }
.cm-table-widget { padding: 0.4em 0; cursor: text; overflow-x: auto; }
.cm-table-widget table { border-collapse: collapse; font-size: 1em; }
.cm-table-widget th,
.cm-table-widget td { border: var(--md-table-border); padding: 0.2em 0.8em; text-align: left; }
.cm-table-widget th { background: var(--md-table-head-bg); font-weight: 600; color: var(--text-bright); }
.cm-table-widget code {
  font-family: var(--font-mono);
  background: var(--md-code-bg);
  color: var(--md-code-fg);
}

/* ---- raw (編集中) 行 ---- */
.cm-raw {
  /* 例: background: var(--line-highlight); */
}
