/* =====================================================================
   觀籀 · 組件與版面（依賴 tokens.css，本檔不得出現裸色値）
   ---------------------------------------------------------------------
   組件命名一律 g- 前綴；一個組件一個註釋塊，寫明用途與變體。
   全檔使用 CSS logical properties（inline/block），直排模式纔能零成本成立。
   ===================================================================== */

*{box-sizing:border-box}
html{font-size:17px}
body{
  margin:0;
  background:var(--c-paper);
  color:var(--c-ink);
  font-family:var(--font-serif);
  font-size:var(--fs-body);
  line-height:var(--lh-prose);
  -webkit-font-smoothing:antialiased;
}
/* 文種回退：lang 屬性由庫內 lang 欄直出，字體交給回退鏈 */
:lang(lzh),:lang(zh){font-family:var(--font-serif)}
:lang(sa-Latn),:lang(fr),:lang(de),:lang(pt){font-family:var(--font-latin)}
:lang(th){font-family:var(--font-thai)}
:lang(bo){font-family:var(--font-tibetan);line-height:2.3}

a{color:var(--c-dai);text-decoration:none}
a:hover{color:var(--c-dai-deep);text-decoration:underline;text-underline-offset:.2em}

/* ============ 印章標識（純 CSS，無圖片資產） ============ */
.g-seal{
  display:inline-flex;align-items:center;justify-content:center;
  inline-size:2.35em;block-size:2.35em;
  background:var(--c-zhu);color:var(--c-paper-high);
  border-radius:var(--r-s);
  font-size:.95em;font-weight:700;line-height:1.08;letter-spacing:.08em;
  writing-mode:vertical-rl;text-orientation:upright;
  box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--c-paper-high) 55%,transparent);
  user-select:none;
}
.g-seal span{display:inline}   /* 單一直行：觀上籀下 */

/* ============ 站頭 ============ */
.g-header{
  background:var(--c-paper-high);
  border-block-end:1px solid var(--c-line);
  padding:var(--sp-3) var(--sp-4);
  display:flex;gap:var(--sp-3);align-items:center;flex-wrap:wrap;
}
.g-header .g-brand{display:flex;gap:var(--sp-2);align-items:center;color:var(--c-ink);font-weight:700}
.g-header .g-brand:hover{text-decoration:none}
.g-brand-text{display:flex;flex-direction:column;line-height:1.3}
.g-brand-name{font-size:1.12em;letter-spacing:.14em}
.g-brand-sub{font-size:var(--fs-ui);color:var(--c-ink-3);font-weight:400;font-family:var(--font-sans)}
.g-nav{display:flex;gap:var(--sp-3);margin-inline-start:var(--sp-4);font-size:var(--fs-note)}
.g-nav a{color:var(--c-ink-2)}
.g-nav a[aria-current]{color:var(--c-zhu);font-weight:700}
.g-header .g-search{margin-inline-start:auto}
.g-search input{
  font:inherit;font-size:var(--fs-note);font-family:var(--font-sans);
  padding:.3em .8em;inline-size:15em;
  border:1px solid var(--c-line-2);border-radius:var(--r-s);
  background:var(--c-paper-low);color:var(--c-ink);
}
.g-search input:focus{outline:2px solid var(--c-dai);outline-offset:1px;background:var(--c-paper-high)}

/* ============ 版面容器 ============ */
.g-main{max-inline-size:var(--measure-read);margin-inline:auto;padding:var(--sp-4) var(--sp-4) var(--sp-6)}
.g-main.wide{max-inline-size:var(--measure-wide)}
.g-crumb{color:var(--c-ink-3);font-size:var(--fs-ui);font-family:var(--font-sans);margin-block-end:var(--sp-3)}
.g-crumb a{color:var(--c-ink-3)}
.g-crumb a:hover{color:var(--c-dai)}

/* ============ 篇題區 ============ */
.g-titleblock{margin-block-end:var(--sp-4)}
.g-titleblock h1{font-size:var(--fs-h1);margin:0 0 var(--sp-1);letter-spacing:.06em;font-weight:700}
.g-titleblock .g-meta{color:var(--c-ink-3);font-size:var(--fs-ui);font-family:var(--font-sans);
  display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap}

/* ============ 版本來源 ============ */
.g-editions{margin-block:calc(-1 * var(--sp-2)) var(--sp-4);padding:var(--sp-3);
  border:1px solid var(--c-line);border-radius:var(--r-s);background:var(--c-paper-high)}
.g-editions h2{margin:0 0 var(--sp-1);font-size:var(--fs-note);font-family:var(--font-sans)}
details.g-editions{padding:var(--sp-2) var(--sp-3)}
details.g-editions summary{cursor:pointer;font-size:var(--fs-note);font-family:var(--font-sans);color:var(--c-ink-3)}
details.g-editions[open] summary{margin-block-end:var(--sp-1)}
.g-editions ul{list-style:none;margin:0;padding:0}
.g-editions li+li{margin-block-start:var(--sp-1);padding-block-start:var(--sp-1);border-block-start:1px dashed var(--c-line)}
.g-editions .g-chip{margin-inline-start:var(--sp-1)}
.g-edition-meta{display:block;color:var(--c-ink-3);font-size:var(--fs-ui);font-family:var(--font-sans)}
.g-editions p{margin:0;color:var(--c-ink-3);font-size:var(--fs-ui);font-family:var(--font-sans)}

/* ============ 按鈕 ============ */
.g-btn{
  cursor:pointer;font:inherit;font-size:var(--fs-ui);font-family:var(--font-sans);
  color:var(--c-ink-2);background:var(--c-paper-high);
  border:1px solid var(--c-line-2);border-radius:var(--r-s);
  padding:.28em .8em;line-height:var(--lh-ui);
}
.g-btn:hover{border-color:var(--c-zhu);color:var(--c-zhu)}
.g-btn.primary{background:var(--c-zhu);border-color:var(--c-zhu);color:var(--c-paper-high)}
.g-btn.primary:hover{background:var(--c-zhu-deep)}
.g-btn.quiet{border-color:transparent;background:transparent}

/* ============ 徽章（注家）＝ 色塊單字＋名 ============ */
.g-badge{
  display:inline-flex;align-items:center;gap:.35em;
  font-size:var(--fs-ui);font-family:var(--font-sans);line-height:1;
  color:var(--c-ink-2);white-space:nowrap;
}
.g-badge .bchar{
  display:inline-grid;place-items:center;
  inline-size:1.55em;block-size:1.55em;border-radius:3px;
  background:var(--src,#888);color:var(--c-paper-high);
  font-weight:700;font-size:.95em;
}
/* 開關型徽章（工具列）：不改變佈局的 off 態 */
.g-badge.toggle{cursor:pointer;user-select:none;border:1px solid var(--c-line);
  border-radius:var(--r-s);padding:.22em .55em .22em .3em;background:var(--c-paper-high)}
.g-badge.toggle:hover{border-color:var(--src,var(--c-line-2))}
.g-badge.toggle.off{opacity:.42;border-style:dashed}
.g-badge.toggle.off .bchar{background:var(--c-ink-3)}

/* 模式籤（多家注／格律背誦 等內容屬性） */
.g-chip{
  display:inline-block;font-size:var(--fs-ui);font-family:var(--font-sans);
  color:var(--c-ink-2);background:var(--c-paper-low);
  border:1px solid var(--c-line);border-radius:999px;
  padding:.1em .75em;line-height:var(--lh-ui);white-space:nowrap;
}
.g-chip.zhu{color:var(--c-zhu);border-color:color-mix(in srgb,var(--c-zhu) 40%,transparent);
  background:var(--c-zhu-wash)}

/* ============ 工具列（閱讀頁 sticky 頂欄） ============ */
.g-toolbar{
  position:sticky;inset-block-start:0;z-index:5;
  background:color-mix(in srgb,var(--c-paper) 92%,transparent);
  backdrop-filter:blur(6px);
  border-block-end:1px solid var(--c-line);
  padding:var(--sp-2) 0;margin-block-end:var(--sp-4);
  display:flex;flex-wrap:wrap;gap:var(--sp-1) var(--sp-2);align-items:center;
}
.g-toolbar .tlabel{color:var(--c-ink-3);font-size:var(--fs-ui);font-family:var(--font-sans)}
.g-toolbar .tspacer{flex:1}

/* ============ 正文（seg） ============ */
.g-reader{margin-block:var(--sp-4)}
.g-seg{margin-block:1.05em}
.g-seg .segtext{font-size:var(--fs-verse);line-height:var(--lh-verse);letter-spacing:.05em}
.g-seg.prose .segtext{font-size:var(--fs-body)}
.g-seg.tail .segtext{font-size:var(--fs-note);color:var(--c-ink-3)}

/* 注記：橫排＝下劃線（單家點線、多家實線）；直排時見下方直排段 */
.tok{border-radius:2px}
.tok.ann{
  cursor:pointer;padding-block-end:1px;
  border-block-end:2px dotted color-mix(in srgb,var(--c-zhu) 55%,transparent);
}
.tok.ann.multi{border-block-end-style:solid}
.tok.ann:hover,.tok.hl{background:var(--c-zhu-wash)}
.tok.ann:focus-visible{outline:2px solid var(--c-dai);outline-offset:2px}

/* 段尾「注 N」入口 */
.g-segmark{
  cursor:pointer;color:var(--c-ink-3);font-size:.66em;font-family:var(--font-sans);
  border:1px solid var(--c-line);border-radius:999px;
  padding:0 .55em;margin-inline-start:.5em;vertical-align:.3em;
  background:var(--c-paper-high);white-space:nowrap;
}
.g-segmark:hover{color:var(--c-zhu);border-color:var(--c-zhu)}

/* 每行操作（背誦模式）：常隱，hover／focus 顯出，減少版面噪音 */
.g-segtools{display:inline-flex;gap:var(--sp-1);margin-inline-start:var(--sp-2);
  vertical-align:.25em;opacity:0;transition:opacity .12s}
.g-seg:hover .g-segtools,.g-seg:focus-within .g-segtools{opacity:1}
.g-segtools select{font:inherit;font-size:var(--fs-ui);font-family:var(--font-sans);
  border:1px solid var(--c-line-2);border-radius:var(--r-s);
  background:var(--c-paper-high);color:var(--c-ink-2);padding:.1em .2em}

/* 序敘摺疊 */
details.g-xu{margin-block:var(--sp-3);border-inline-start:3px solid var(--c-line);
  padding-inline-start:var(--sp-3);color:var(--c-ink-2)}
details.g-xu summary{cursor:pointer;color:var(--c-ink-3);font-size:var(--fs-ui);
  font-family:var(--font-sans);list-style-position:outside}

/* ============ 彈窗（注解卡） ============ */
.g-pop{
  position:fixed;margin:0;padding:0;
  border:1px solid var(--c-line-2);border-radius:var(--r-m);
  background:var(--c-paper-high);box-shadow:var(--shadow-pop);
  inline-size:min(480px,92vw);max-block-size:62vh;overflow-y:auto;
  font-size:var(--fs-note);
}
.g-pop .pophead{
  position:sticky;inset-block-start:0;background:var(--c-paper-high);
  border-block-end:1px solid var(--c-line);
  padding:var(--sp-2) var(--sp-3);
  display:flex;justify-content:space-between;align-items:baseline;
}
.g-pop .ptgt{font-weight:700;letter-spacing:.08em;font-size:1.05em}
.g-pop .pcnt{color:var(--c-ink-3);font-size:var(--fs-ui);font-family:var(--font-sans)}
.g-pop .entry{padding:var(--sp-2) var(--sp-3);border-block-end:1px dashed var(--c-line)}
.g-pop .entry:last-child{border-block-end:0}
.g-pop .ehead{display:flex;align-items:center;gap:.4em;flex-wrap:wrap}
.g-pop .ename{font-weight:700;font-size:.88em}
.g-pop .etgt{color:var(--c-ink-3);font-size:.85em}
.g-pop .egloss{margin:.2em 0 0;line-height:var(--lh-prose)}
.g-pop .egloss.clamped{display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.g-pop .more{cursor:pointer;color:var(--c-dai);font-size:var(--fs-ui);font-family:var(--font-sans)}
/* 子注（注上之注）：縮進＋左標線，視覺上「掛」在父注下 */
.g-pop .child{margin:.4em 0 0 1em;padding-inline-start:.7em;
  border-inline-start:2px solid var(--c-line-2);font-size:.95em}
.g-pop .ankibtn{cursor:pointer;border:none;background:none;color:var(--c-ink-3);
  font-size:.75em;font-family:var(--font-sans);padding:0;margin-inline-start:auto}
.g-pop .ankibtn:hover{color:var(--c-dai)}

/* ============ 篇級總說 ============ */
.g-notes{margin-block-start:var(--sp-5);border-block-start:1px solid var(--c-line);padding-block-start:var(--sp-4)}
.g-notes h2{font-size:var(--fs-h2);margin:0 0 var(--sp-2)}
.g-notes details{margin-block:var(--sp-2)}
.g-notes summary{cursor:pointer;display:flex;gap:.5em;align-items:center;flex-wrap:wrap}
.g-notes .ntext{font-size:var(--fs-note);color:var(--c-ink-2);margin:.35em 0 .35em 1.2em}

/* ============ 全文檢索 ============ */
.g-search-results p{font-size:var(--fs-note)}
.g-snippet mark{background:var(--c-zhu-wash);color:var(--c-zhu-deep);padding-inline:.08em}
.g-pagination{display:flex;align-items:center;justify-content:center;gap:var(--sp-2);
  margin-block-start:var(--sp-4);font-size:var(--fs-ui);font-family:var(--font-sans)}

/* ============ 格律（背誦模式） ============ */
/* 圈點：○平 ●仄 ⊙律定 ◎韻——印本圈點體例，不佔用注家色彩。
   實現為「字柱」：每字一柱，字在上、圈點在下，天然對齊；
   遞減提示只隱字形，圈點框架恆在（L4 的全部提示就是它）。 */
.g-pzcol{display:inline-flex;flex-direction:column;align-items:center;vertical-align:top}
.g-pzcol .pm{font-size:.58em;line-height:1.6;color:var(--c-ink-3);
  font-family:var(--font-sans);user-select:none}
.g-pzcol .pm.rh{color:var(--c-zhu)}           /* 韻腳圈點著朱 */
.g-pzcol .pm.odd{color:var(--c-warn)}         /* 不合常格處 */
.g-pz .rh{color:var(--c-zhu)}                 /* （圖例用） */
.g-prosody-line{
  border-inline-start:3px solid var(--c-line-2);
  background:var(--c-paper-high);border-radius:0 var(--r-s) var(--r-s) 0;
  padding:var(--sp-2) var(--sp-3);margin-block-end:var(--sp-4);
  font-size:var(--fs-note);color:var(--c-ink-2);
  display:flex;gap:var(--sp-2) var(--sp-3);align-items:baseline;flex-wrap:wrap;
}
.g-prosody-line .plegend{color:var(--c-ink-3);font-size:var(--fs-ui);font-family:var(--font-sans)}
.g-prosody-line details{font-size:var(--fs-ui);font-family:var(--font-sans);color:var(--c-ink-3)}
.g-prosody-line details summary{cursor:pointer}

/* 背誦滑桿 L0–L4：分段控制 */
.g-lslider{display:inline-flex;border:1px solid var(--c-line-2);border-radius:var(--r-s);
  overflow:hidden;font-size:var(--fs-ui);font-family:var(--font-sans)}
.g-lslider button{cursor:pointer;font:inherit;border:none;background:var(--c-paper-high);
  color:var(--c-ink-2);padding:.28em .7em;border-inline-end:1px solid var(--c-line)}
.g-lslider button:last-child{border-inline-end:none}
.g-lslider button[aria-pressed="true"]{background:var(--c-zhu);color:var(--c-paper-high)}
/* 遞減提示的遮字：保留佔位，字形隱去 */
.g-seg .segtext .hidechar{color:transparent;
  text-shadow:none;border-block-end:1px solid var(--c-line-2)}

/* ============ 首頁 ============ */
.g-hero{padding-block:var(--sp-5) var(--sp-4);display:flex;gap:var(--sp-4);align-items:flex-start}
.g-hero .g-seal{font-size:2.1em;flex:none}
.g-hero h1{font-size:var(--fs-display);margin:0 0 var(--sp-2);letter-spacing:.05em;line-height:1.4}
.g-hero .lede{color:var(--c-ink-2);max-inline-size:34em;margin:0 0 var(--sp-3)}
.g-hero .heroactions{display:flex;gap:var(--sp-2);flex-wrap:wrap}

.g-shelfhead{display:flex;align-items:baseline;gap:var(--sp-2);
  border-block-end:1px solid var(--c-line);padding-block-end:var(--sp-1);
  margin-block:var(--sp-5) var(--sp-3)}
.g-shelfhead h2{font-size:var(--fs-h2);margin:0;letter-spacing:.1em}
.g-shelfhead .shsub{color:var(--c-ink-3);font-size:var(--fs-ui);font-family:var(--font-sans)}

.g-shelf{display:grid;grid-template-columns:repeat(auto-fill,minmax(15.5em,1fr));gap:var(--sp-3)}
.g-card{
  display:flex;flex-direction:column;gap:var(--sp-1);
  background:var(--c-paper-high);border:1px solid var(--c-line);
  border-radius:var(--r-m);padding:var(--sp-3) var(--sp-4);
  box-shadow:var(--shadow-card);color:var(--c-ink);
}
a.g-card:hover{text-decoration:none;border-color:var(--c-zhu);box-shadow:var(--shadow-pop)}
.g-card .ctitle{font-size:var(--fs-h2);font-weight:700;letter-spacing:.08em}
.g-card .csub{color:var(--c-ink-3);font-size:var(--fs-ui);font-family:var(--font-sans)}
.g-card .cchips{display:flex;gap:var(--sp-1);flex-wrap:wrap;margin-block-start:auto;padding-block-start:var(--sp-2)}
.g-card.future{opacity:.62;border-style:dashed}
.g-card.future .ctitle{color:var(--c-ink-2)}

/* 首頁三欄說明 */
.g-explain{display:grid;grid-template-columns:repeat(auto-fit,minmax(14em,1fr));
  gap:var(--sp-4);margin-block:var(--sp-4)}
.g-explain h3{font-size:var(--fs-body);margin:0 0 var(--sp-1);color:var(--c-zhu)}
.g-explain p{margin:0;font-size:var(--fs-note);color:var(--c-ink-2)}

/* ============ 頁腳 ============ */
.g-footer{
  max-inline-size:var(--measure-wide);margin:var(--sp-6) auto 0;
  padding:var(--sp-3) var(--sp-4) var(--sp-5);
  color:var(--c-ink-3);font-size:var(--fs-ui);font-family:var(--font-sans);
  border-block-start:1px solid var(--c-line);line-height:1.8;
}

/* ============ 直排模式（呈現層開關；只作用於正文欄） ============ */
/* 開法：閱讀器容器加 data-writing="vertical"。
   數據層／互動層／Anki 層對直排一無所知（定案 §4.2）。 */
[data-writing="vertical"] .g-reader{
  writing-mode:vertical-rl;text-orientation:mixed;
  block-size:72vh;                /* 直排時 block 軸=水平，此為欄高 */
  overflow:auto;
  padding-block:var(--sp-2);
  border:1px solid var(--c-line);border-radius:var(--r-m);
  background:var(--c-paper-high);
}
[data-writing="vertical"] .g-seg{margin-block:0;margin-inline:0;padding-inline:.55em}
/* 直排注記：下劃線變側線不合體例，改用傳統著重點（字右側蠅頭點） */
[data-writing="vertical"] .tok.ann{
  border-block-end:none;
  -webkit-text-emphasis:dot color-mix(in srgb,var(--c-zhu) 60%,transparent);
  text-emphasis:dot color-mix(in srgb,var(--c-zhu) 60%,transparent);
}
[data-writing="vertical"] .tok.ann.multi{
  -webkit-text-emphasis:filled circle var(--c-zhu);
  text-emphasis:filled circle var(--c-zhu);
}
/* 直排下浮動彈窗改為底部固定面板（窄屏同款），不跟隨錨點 */
[data-writing="vertical"] .g-pop{
  inset-block-end:0;inset-inline:0;inset-block-start:auto;
  inline-size:auto;max-block-size:46vh;
  border-radius:var(--r-m) var(--r-m) 0 0;
}
/* 直排下每行操作、段尾注入口維持橫排小字（避免 UI 元素直立） */
[data-writing="vertical"] .g-segtools,
[data-writing="vertical"] .g-segmark{writing-mode:horizontal-tb}

/* ============ 響應式 ============ */
@media (max-width: 700px){
  html{font-size:16px}
  .g-main{padding-inline:var(--sp-3)}
  .g-header{padding-inline:var(--sp-3)}
  .g-header .g-search{margin-inline-start:0;inline-size:100%}
  .g-search input{inline-size:100%}
  .g-hero{flex-direction:column;gap:var(--sp-3)}
  /* 窄屏彈窗：固定底部抽屜，≤50dvh（定案 §3.1） */
  .g-pop{inset-block-end:0;inset-inline:0;inset-block-start:auto;
    inline-size:auto;max-block-size:50dvh;
    border-radius:var(--r-m) var(--r-m) 0 0}
  .g-segtools{opacity:1}   /* 觸屏無 hover，常顯 */
}

/* ============ 打印 ============ */
@media print{
  .g-toolbar,.g-segtools,.g-segmark,.g-header .g-search,.g-nav{display:none}
  body{background:white;color:black}
  .tok.ann{border-block-end-color:#999}
}
