/* 願樂欲聞 — © 無勝法齋 — CC BY-NC-SA 4.0 — https://study.ajita.site/ */
/* 調色只在這一檔：整站單一色系——灰白宣紙、墨字、黛青只給選中／計數／卷號、朱砂只給命中（紙上唯一的暖色）。
   其他 css 檔一律引用這些變數，不寫顏色字面值。 */
:root{
  --bg:#f4f3ef;            /* 紙 */
  --bg2:#ecebe5;           /* 內凹的欄位（輸入框、標籤底） */
  --s1:#fbfbf8;            /* 卡片漸層下端 */
  --s2:#fefefc;            /* 卡片漸層上端 */
  --s3:#f0efea;            /* 懸停面 */
  --ln:#dfddd5;            /* 邊線 */
  --ln2:#c5c2b8;           /* 亮一階的邊線（懸停、選中的窗） */
  --t1:#1e1d1a;            /* 墨 */
  --t2:#4a4842;
  --t3:#87847b;
  --acc:#4d6b78;           /* 黛青：選中、連結、計數、卷號 */
  --acc2:#2c4652;
  --acc-dim:rgba(77,107,120,.13);
  --acc-bg:linear-gradient(180deg,#e8eff1,#d7e2e6);   /* 選中態的底 */
  --hit:#b3453a;           /* 朱砂：命中字 */
  --hit2:#8a2f25;
  --hit-dim:rgba(179,69,58,.13);
  --hit-fg:#fff8ee;        /* 當前命中（朱砂底）上的字 */
  --ink:#2a2c2e;           /* 等待墨點 */
  --ov:rgba(58,48,30,.34); /* 浮出卡片後面的暗幕 */
  --hi:inset 0 1px 0 rgba(255,255,255,.85);
  --sh:0 1px 2px rgba(40,45,50,.07),0 10px 26px -14px rgba(40,45,50,.22);
  --sh2:0 2px 10px rgba(40,45,50,.12),0 14px 34px -14px rgba(40,45,50,.3);   /* 浮出的卡片、浮框 */
  --sunk:inset 0 1px 2px rgba(30,35,40,.09),inset 0 0 0 1px rgba(30,35,40,.04);
  --raise:linear-gradient(180deg,var(--s2),var(--s1));
  --paper:radial-gradient(120% 80% at 50% -10%,#fcfcfa 0%,var(--bg) 60%);
  --bg0:rgba(244,243,239,0);   /* 紙色的全透明端（箭頭光暈） */
  --rule:linear-gradient(90deg,var(--bg0),var(--ln2) 14%,var(--ln2) 86%,var(--bg0));   /* 表頭／頁腳的分隔線：兩端淡出，不畫死板的一條 */
}

/* 基礎：reset、按鈕、輸入框、chip、浮出卡片、等待墨點。版面在 layout.css，顏色在 theme.css */
:root{--r:.5em;--gap:10px;--m:clamp(12px,1.9vw,30px);--ww:min(34rem,calc((100% - var(--gap)) / 2))}
html{font-size:20px;background:var(--bg);color-scheme:light;-webkit-text-size-adjust:100%}
html,body{height:100%;overflow:hidden;margin:0}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{background:var(--paper) fixed,var(--bg);color:var(--t1);font-family:"DS Sung",serif;line-height:1.55;display:flex;flex-direction:column;position:relative}
a{color:var(--acc)}
::selection{background:var(--acc-dim)}
button,input{font:inherit;color:inherit;margin:0}
input:focus{outline:none}
button:focus-visible,.card:focus-visible,.hit:focus-visible,sup.n:focus-visible,.rt .nm:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
svg.i{width:1.05em;height:1.05em;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
mark{background:var(--hit-dim);color:var(--hit2);border-radius:.2em;box-shadow:0 1px 0 var(--hit)}
mark.cur{background:var(--hit);color:var(--hit-fg)}

/* 按鈕 */
.b{background:var(--raise);box-shadow:var(--hi),var(--sh);border:1px solid var(--ln);border-radius:var(--r);padding:.175em .55em .125em;cursor:pointer;color:var(--t2);line-height:1.4;display:inline-flex;align-items:center;justify-content:center;gap:.3em;text-decoration:none;white-space:nowrap}
.b:hover{border-color:var(--ln2);color:var(--t1)}
.b.on{border-color:var(--acc);color:var(--acc2);background:var(--acc-bg)}
.b[disabled]{opacity:.35;pointer-events:none}
.b.ic{width:1.9em;height:1.9em;padding:0;flex:none}   /* 圖示鈕永遠正方：在擠的 flex 列（手機範圍面板表頭）不可被壓成長方形（Owner 2026-09-17） */
.seg{display:inline-flex;gap:5px}
.seg.mode .b{font-size:.85em;padding-inline:.45em}
/* chip：圓角膠囊（範圍、分佈、卷號、閱讀開關） */
.body,.list,.qw .res,.rt,.rtoc,#pcr,.ovb{--ft:0px;--fb:0px;-webkit-mask-image:linear-gradient(180deg,transparent,#000 var(--ft),#000 calc(100% - var(--fb)),transparent);mask-image:linear-gradient(180deg,transparent,#000 var(--ft),#000 calc(100% - var(--fb)),transparent)}   /* 直向捲動區：哪邊還有內容那邊淡出（core.js fadeY 設 --ft／--fb），不是硬切（Owner 2026-09-17） */
.chip{display:inline-flex;align-items:center;gap:.35em;padding:.145em .7em .095em;border-radius:999px;border:1px solid var(--ln2);background:var(--raise);box-shadow:var(--hi);font-size:.86em;line-height:1.6;color:var(--t2);white-space:nowrap;max-width:100%;cursor:pointer}
/* .b 與 .chip 的上下 padding 差 .05em：行高是 1.4／1.6 倍字級，半行距幾乎都是小數，兩家瀏覽器都把上半截的小數丟掉、字往上浮平均半個像素（Owner 2026-09-18 抓到「上窄下寬」）；量過 4 種尺寸 × 2 種 DPR × 兩家，上多 .025em 剛好補回。#top 的鈕固定 20px、行距是整數，不補。 */
#top .b{padding-block:.15em}
.chip b{font-weight:400;color:var(--t1);min-width:0;overflow:hidden;text-overflow:ellipsis}
.chip .n{color:var(--acc);font-variant-numeric:tabular-nums}
.chip.on{border-color:var(--acc);background:var(--acc-bg);color:var(--acc2)}
.chip.on b{color:var(--acc2)}
.chip.x{color:var(--t3);cursor:default}
.chip:hover{border-color:var(--acc)}
.chip.add{color:var(--acc);border-style:dashed}
.chip .by{color:var(--t3);font-size:.82em;margin-left:.2em;max-width:12em;overflow:hidden;text-overflow:ellipsis}
.chip .rm{margin-left:.2em;color:var(--t3);font-size:.9em;line-height:1;padding:0 .1em;border-radius:50%}
.chip .rm:hover{color:var(--hit2)}
/* 輸入框（搜尋窗表頭、面板） */
.sb{position:relative;flex:1;min-width:0}
.sb>svg{position:absolute;left:.6em;top:50%;transform:translateY(-50%);color:var(--acc);pointer-events:none;fill:var(--acc-dim)}
.q{width:100%;background:var(--bg2);box-shadow:var(--sunk);border:1px solid var(--ln);border-radius:var(--r);padding:.3em 2.2em .3em 2.1em;outline:none;-webkit-appearance:none;appearance:none}
.q:focus{border-color:var(--acc)}
.q::placeholder{color:var(--t3);opacity:1}
.q::-webkit-search-cancel-button{-webkit-appearance:none;display:none}
.qx{position:absolute;right:.3em;top:50%;transform:translateY(-50%);border-color:transparent;background:none;box-shadow:none}
.q:placeholder-shown+.qx{display:none}
/* 標籤（卡片上的辭典名、僅供參考） */
.tag{font-size:.72em;color:var(--t2);border:1px solid var(--ln);background:var(--bg2);box-shadow:var(--sunk);border-radius:var(--r);padding:0 .45em;line-height:1.6;white-space:nowrap;flex:none}
.tag.nt{color:var(--t3)}
/* 等待：墨點暈開 */
.ld{display:block;width:1.1em;height:1.1em;margin:2em auto;border-radius:50%;background:radial-gradient(circle,var(--ink) 0%,rgba(42,44,46,.55) 45%,rgba(42,44,46,0) 72%);animation:ink 1.6s ease-out infinite;filter:blur(.3px)}
.ld.in{display:inline-block;margin:0 .3em;vertical-align:-.15em;width:.9em;height:.9em}
@keyframes ink{0%{transform:scale(.35);opacity:.9}70%{transform:scale(1.25);opacity:.15}100%{transform:scale(1.4);opacity:0}}
@keyframes pulse{0%,100%{opacity:.35}50%{opacity:1}}
/* 浮出卡片（部件面板、資料來源、範圍、命中分佈、安裝說明共用）：暗幕＋置中卡片，四周留外距，手機也一樣 */
.ov{position:fixed;inset:0;z-index:9;display:flex;align-items:center;justify-content:center;background:var(--ov);backdrop-filter:blur(3px);padding:calc(var(--m) + env(safe-area-inset-top, 0px)) max(var(--m), env(safe-area-inset-right, 0px)) calc(var(--m) + env(safe-area-inset-bottom, 0px)) max(var(--m), env(safe-area-inset-left, 0px))}
.ovc{width:min(44rem,100%);max-height:100%;display:flex;flex-direction:column;min-height:0;background:var(--raise);border:1px solid var(--ln2);border-radius:var(--r);box-shadow:var(--hi),var(--sh2);animation:rise .22s ease-out;overflow:hidden}
@keyframes rise{from{opacity:0;transform:translateY(10px)}}
.ovc>header{display:flex;align-items:center;gap:.9em;padding:.45em .7em;min-height:3.2em;background:var(--rule) bottom/100% 1px no-repeat}   /* 與 .win>header 同高同線 */
.ovc>header svg.i{color:var(--acc);fill:var(--acc-dim)}
.ovc>header h2{margin:0;font-size:1em;font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ovc>header .x{margin-left:auto}
.ovc>header:has(.sb) h2{flex:none}
.ovc>header .sb{flex:0 1 18rem;margin-left:auto}   /* 搜尋框不拉滿、靠右，元素之間留空（Owner 2026-09-17） */
.ovc>header:has(.sb) .x{margin-left:0}
.ovc>header .sb .q{padding-block:.2em}
.ovb{padding:.6em .9em .8em;overflow-y:auto;overflow-x:hidden;min-height:0;line-height:1.5;font-size:.9em;overscroll-behavior:contain;flex:1}
.ovb>div.li{position:relative;margin:.35em 0;padding-left:1.1em}   /* 每條前一顆小圓點，續行對齊文字、不突出 */
.ovb>div.li::before{content:"";position:absolute;left:.15em;top:.62em;width:.35em;height:.35em;border-radius:50%;background:var(--acc)}
.ovb a{color:var(--acc);text-decoration:underline;text-decoration-color:transparent;text-underline-offset:.18em}
.ovb a:hover{text-decoration-color:var(--acc)}
.ovf{display:flex;gap:.6rem;align-items:center;padding:.5rem .9rem;background:var(--rule) top/100% 1px no-repeat;font-size:.9em;flex:none}
.ovf .sum{flex:1;color:var(--t2);font-size:.9em}
.ovo{display:flex;gap:.4rem;padding:.5rem .9rem;background:var(--rule) bottom/100% 1px no-repeat;flex-wrap:wrap;align-items:center;flex:none}
.ovo .sum{color:var(--t3);font-size:.85em;margin-left:auto}
.empty{color:var(--t3);text-align:center;padding:1.4rem 0 1rem}
@media (prefers-reduced-motion:reduce){.ld,.ovc,.grp,body::before{animation-duration:.01s}}

/* 版面：頂列與工具列、窗（並列、左右箭頭）、頁底告示、反白工具列、浮框、手機 */
#top{position:relative;display:flex;align-items:center;gap:var(--gap);font-size:20px;padding-block:calc(var(--m) + env(safe-area-inset-top, 0px)) 0;padding-inline:max(var(--m), env(safe-area-inset-left, 0px)) max(var(--m), env(safe-area-inset-right, 0px));z-index:2}
#tools{position:relative;display:flex;align-items:center;gap:7px;margin-left:auto;font-size:20px}   /* 浮出的 #tp／#ip 靠齊工具列右緣（在外距內），不貼視窗邊 */   /* 工具列不跟著字級縮放：拉字級滑桿時它自己不能動 */
#tp{display:inline-flex;align-items:center;gap:7px}
#ip{position:absolute;right:0;top:calc(100% + 8px);z-index:6;display:flex;flex-direction:column;align-items:stretch;gap:8px;padding:10px;background:var(--raise);border:1px solid var(--ln2);border-radius:var(--r);box-shadow:var(--hi),var(--sh2);font-size:.85em}   /* ⓘ 的小卡：資料來源、回報錯誤 */
#ip .b{font-size:1em;text-align:center}
#ip .abt{width:min(22em, calc(100vw - var(--m) * 2 - 20px));display:flex;flex-direction:column;gap:.45em;line-height:1.5;color:var(--t2)}   /* 站的介紹：寫在 index.html 裡（搜尋引擎讀得到），平常收在 ⓘ 小卡 */
#ip .abt h1{font-size:1.15em;margin:0;color:var(--t1);font-weight:600}
#ip .abt p{margin:0}
#fsg{display:inline-flex;align-items:center;gap:8px}
/* 字級滑桿：一條墨線（兩端淡出，同 --rule）＋一顆方角小印當滑塊（同 .jv 的方格），兩端一小一大「字」——不做圓珠加粗槽（Owner 2026-09-17：那樣廉價） */
#fsw{display:inline-flex;align-items:center;gap:.45em}
#fsw .g{color:var(--t3);font-size:.7em;line-height:1}
#fsw .g.l{font-size:1.15em}
#fsr{width:150px;height:1.9em;margin:0;-webkit-appearance:none;appearance:none;background:none;cursor:pointer}
#fsr::-webkit-slider-runnable-track{height:1px;background:linear-gradient(90deg,transparent,var(--ln2) 12%,var(--ln2) 88%,transparent)}
#fsr::-moz-range-track{height:1px;background:linear-gradient(90deg,transparent,var(--ln2) 12%,var(--ln2) 88%,transparent)}
#fsr::-webkit-slider-thumb{-webkit-appearance:none;width:.95em;height:.95em;margin-top:calc(-.475em + .5px);border-radius:.25em;background:var(--raise);border:1px solid var(--acc);box-shadow:var(--hi),var(--sh),inset 0 0 0 .18em var(--s1),inset 0 0 0 .3em var(--acc)}
#fsr::-moz-range-thumb{width:.95em;height:.95em;border-radius:.25em;background:var(--raise);border:1px solid var(--acc);box-shadow:var(--hi),var(--sh),inset 0 0 0 .18em var(--s1),inset 0 0 0 .3em var(--acc)}
#fsr:focus-visible{outline:none}
#fsr:focus-visible::-webkit-slider-thumb{box-shadow:var(--hi),var(--sh),0 0 0 2px var(--ln2)}
#tb{display:none}   /* 手機的工具鈕：方角小卡（同其他 .b），不做圓球（Owner 2026-09-17：圓球跟這套不搭） */
#tb.on{border-color:var(--acc);color:var(--acc2)}
#off{display:inline-flex;align-items:center;justify-content:center;width:1.9em;height:1.9em;color:var(--t2);margin-left:.15rem}
#off svg.i{width:1.15em;height:1.15em}
#off[data-st=none]{display:none}
#off[data-st=dl] .ok,#off[data-st=dl] .er,#off[data-st=ok] .dl,#off[data-st=ok] .er,#off[data-st=fail] .dl,#off[data-st=fail] .ok{display:none}
#off[data-st=fail]{cursor:pointer;border-radius:var(--r)}
#off[data-st=fail].on{color:var(--acc)}
#op{position:absolute;right:0;top:calc(100% + 8px);z-index:6;width:min(20em,calc(100vw - var(--m) * 2 - 20px));display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:10px;background:var(--raise);border:1px solid var(--ln2);border-radius:var(--r);box-shadow:var(--hi),var(--sh2);font-size:.85em;line-height:1.5;color:var(--t2)}   /* 離線圖示的失敗卡（同 #ip 的小卡） */
#op p{margin:0}
#op .b{font-size:1em}
#off[data-st=dl] .dl{animation:pulse 1.4s ease-in-out infinite}
#off[data-st=ok]{color:var(--acc)}
#off[data-st=ok] svg.i{fill:var(--acc-dim)}
#prog{position:fixed;top:0;left:0;height:2px;width:0;background:var(--acc);opacity:0;transition:width .4s,opacity .6s;z-index:9;pointer-events:none}
#prog.on{opacity:1}

main{flex:1;display:flex;min-height:0;padding-block:var(--gap);padding-inline:max(var(--m), env(safe-area-inset-left, 0px)) max(var(--m), env(safe-area-inset-right, 0px));position:relative;z-index:1}
#wb{position:relative;flex:1;min-width:0;min-height:0;display:flex}
#wins{position:relative;flex:1;display:flex;gap:var(--gap);overflow-x:auto;overflow-y:hidden;min-width:0;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;--fl:0px;--fr:0px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 var(--fl),#000 calc(100% - var(--fr)),transparent);mask-image:linear-gradient(90deg,transparent,#000 var(--fl),#000 calc(100% - var(--fr)),transparent)}   /* 被切在左右緣的卡片淡出（win.js navArrows 依哪邊還有窗設 --fl／--fr），不是一條硬線（Owner 2026-09-17） */
@media (max-width:700px){#wins{-webkit-mask-image:none;mask-image:none}}
#wins::-webkit-scrollbar{display:none}
.wn{position:absolute;top:50%;transform:translateY(-50%);z-index:3;border-radius:50%;border-color:var(--ln2);box-shadow:var(--hi),var(--sh2)}
.wn::before{content:"";position:absolute;inset:-1.1em;border-radius:50%;background:radial-gradient(circle,var(--bg) 42%,var(--bg0) 70%);z-index:-1;pointer-events:none}   /* 壓在窗框上的過渡：紙色光暈往外淡出，不是一圈硬邊 */
#wl{left:.5rem}
#wr{right:.5rem}
.win{flex:0 0 var(--ww);min-width:0;display:flex;flex-direction:column;background:var(--raise);box-shadow:var(--hi),var(--sh);border:1px solid var(--ln);border-radius:var(--r);min-height:0;scroll-snap-align:start;position:relative}
.win.on{border-color:var(--ln2)}
.win>header{display:flex;align-items:center;gap:.45em;padding:.45em .7em;min-height:3.2em;background:var(--rule) bottom/100% 1px no-repeat;flex:none}   /* 各種窗的表頭同一個高度（搜尋窗的輸入框撐到 3.2em，其他窗跟齊） */
.win h2{margin:0;font-size:1.1em;font-weight:600;flex:1;min-width:4em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}   /* 標題至少留 4em，塞不下的是辭典標籤去縮（全名在窗的小卡裡） */
.win>header .tg{flex:0 1 auto;min-width:0;overflow:hidden}
.win>header .tg .tag{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.body{overflow-y:auto;padding:.6em .9em .8em;flex:1;min-height:0;overscroll-behavior-y:contain;overflow-wrap:anywhere}
.win.qw .body{display:flex;flex-direction:column;gap:.45rem;overflow:hidden;padding:.6em .7em}
.body .retry{display:flex;margin:2em auto}

#note{font-size:14px;color:var(--t3);padding-block:0 calc(var(--m) / 2 + env(safe-area-inset-bottom, 0px));padding-inline:max(var(--m), env(safe-area-inset-left, 0px)) max(var(--m), env(safe-area-inset-right, 0px));line-height:1.4;display:flex;flex-direction:column;align-items:flex-start;gap:.4em;position:relative;z-index:1}
#note .b{font-size:1em;padding:.1em .5em}
#note .bt{display:flex;flex-wrap:wrap;gap:.5em}
#igbtn:disabled{opacity:.5}
/* 反白工具列：查辭典／查經文；在經文窗裡再多引用複製／複製 */
#selbar{position:fixed;display:flex;gap:.25rem;background:var(--raise);border:1px solid var(--ln2);border-radius:var(--r);padding:.2em;z-index:9;box-shadow:var(--hi),var(--sh2)}
#selbar.dock{left:50%!important;top:auto!important;bottom:calc(.75rem + env(safe-area-inset-bottom, 0px));transform:translateX(-50%);padding:.3em .35em;gap:.35rem;display:grid;grid-template-columns:1fr 1fr;width:max-content;max-width:calc(100vw - 1.5rem)}   /* 兩欄：查三藏／查辭典一列、引用複製／複製一列（經文窗外只有前兩顆＝一列）；兩側各留 .75rem，不貼手機邊（Owner 2026-09-17） */   /* 觸控裝置：停靠底部中央，系統自己的選字工具列貼在反白處，兩個不會疊 */
#selbar.dock .b{font-size:.95em;padding:.25em .7em}
#selbar .b{font-size:.85em}
/* 浮框：校勘註／預覽（#tip）、經文校勘（#np） */
#tip,#np{position:fixed;max-width:min(22rem,calc(100vw - 1rem));background:var(--raise);border:1px solid var(--ln2);border-radius:var(--r);padding:.35em .7em;font-size:.85em;line-height:1.45;z-index:9;overflow-wrap:anywhere;box-shadow:var(--hi),var(--sh2)}
#tip{white-space:pre-line}
#tip.pv{color:var(--t2);white-space:normal}
#np{max-width:min(26rem,calc(100vw - 2rem));border-color:var(--acc);line-height:1.6}
#np .k{color:var(--acc);margin-right:.5em}
#jp{position:fixed;z-index:9;width:max-content;max-width:min(24rem,calc(100vw - 2rem));max-height:min(60vh,26rem);overflow-y:auto;overscroll-behavior:contain;background:var(--raise);border:1px solid var(--ln2);border-radius:var(--r);padding:.5em .6em;box-shadow:var(--hi),var(--sh2)}
#jp .jv{padding:0}
.win>header{touch-action:none;user-select:none;-webkit-user-select:none}
.win>header input{user-select:text;-webkit-user-select:text}   /* 表頭可拖（桌面按住、觸控長按）；橫滑切窗由 wbox 的 touchend 備援接手 */
.win.drag{opacity:.3;box-shadow:none;transition:none}   /* 拖動中：真的那張留在原格當佔位 */
.win.ghost{position:fixed;z-index:8;margin:0;pointer-events:none;box-shadow:var(--hi),var(--sh2),0 1.2rem 2.4rem rgba(0,0,0,.18);opacity:.96;transition:none;will-change:transform}   /* 拿起來的分身掛在 body 上：壓在頂列、告示與所有窗之上（win.js dragLift） */
body.dragging{cursor:grabbing}
body.dragging .win{scroll-snap-align:none}
body.dragging #wins{scroll-snap-type:none}
#jp .rg{display:flex;padding:0 0 .4rem}
#jp .rg input{width:4.5em;background:var(--bg2);border:1px solid var(--ln);border-radius:.35em;padding:.1em .4em;text-align:center;box-shadow:var(--sunk);font-size:.9em}

@media (max-width:700px){
  :root{--m:12px;--ww:100%}
  #note{padding-bottom:calc(var(--m) + env(safe-area-inset-bottom, 0px))}   /* 手機底部維持一整格（Owner 2026-09-17：手機維持現狀） */
  .wn{display:none}
  #tb{display:inline-flex}
  #tp{display:none;position:absolute;right:0;top:calc(100% + 8px);z-index:6;flex-direction:column;align-items:stretch;gap:10px;padding:11px;background:var(--raise);border:1px solid var(--ln2);border-radius:var(--r);box-shadow:var(--hi),var(--sh2)}
  #tools.open #tp{display:flex}
  #tp .seg{justify-content:center}
  #fsb{display:none}
  #fsw{display:flex!important;width:100%}
  #fsr{flex:1;width:auto}
  .ov{padding:calc(1rem + env(safe-area-inset-top, 0px)) max(1rem, env(safe-area-inset-right, 0px)) calc(1rem + env(safe-area-inset-bottom, 0px)) max(1rem, env(safe-area-inset-left, 0px))}   /* 手機也留一圈：貼滿就不像卡片 */
}

/* 辭典：搜尋窗的 tab 與卡片、條目窗的內文裝飾（渲染時加的 class，資料不動） */
.tabs{display:flex;flex-wrap:wrap;gap:.25rem;flex:none}
.tab{font-size:.85em}
.tab small{font-size:.85em;color:var(--t3)}
.tab.on small{color:var(--acc)}
.list{flex:1;min-height:0;min-width:0;overflow-y:auto;display:flex;flex-direction:column;gap:.4rem;overscroll-behavior-y:contain}
.more{align-self:flex-start;font-size:.85em}
.card{background:var(--raise);box-shadow:var(--hi),var(--sh);border:1px solid var(--ln);border-radius:var(--r);padding:.4em .7em;cursor:pointer;min-width:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:.2em .5em}
.card:hover{border-color:var(--ln2)}
.card.on{border-color:var(--acc)}
.card h3{margin:0;font-size:1.05em;font-weight:600;line-height:1.35;overflow-wrap:anywhere;flex:1 1 auto;min-width:0}
.card .tg{display:inline-flex;gap:.3em;flex:none;margin-left:auto}
.card mark{background:none;color:var(--hit2);box-shadow:none}

.body p{margin:.35em 0}
.body p:empty{display:none}
.body p.in{padding-left:1.5em}
.body hr{display:none}
.body hr+*{margin-top:.9em}
.body .lbl{color:var(--t3);font-size:.78em}
.body img{max-width:100%;vertical-align:middle;mix-blend-mode:multiply}
.body img.g{height:1.15em;vertical-align:-.15em}
.body table{border-collapse:collapse;margin:.4em 0}
.body th,.body td{border:1px solid var(--ln);padding:.15em .5em;text-align:left;font-weight:normal}
.body sup,.body sub{font-size:.65em;line-height:0;color:var(--t3)}
.body sup.n{display:inline-flex;align-items:center;justify-content:center;min-width:1.5em;height:1.5em;margin:0 .2em;text-indent:0;border:1px solid var(--acc);border-radius:.35em;background:var(--acc);color:var(--s2);font-weight:700;font-size:.8em;line-height:0;vertical-align:middle;cursor:pointer;box-shadow:var(--hi),var(--sh)}
.body sup.n:hover{background:var(--acc2);border-color:var(--acc2)}
.body sup.n.d{background:none;color:var(--acc2);font-weight:400;font-size:.72em;min-width:1.7em;height:1.7em}   /* 辭典自己的註（康熙／說文的校注）：空心「註」；實心「？」留給人工核實 */
.body sup.n.d:hover{background:var(--acc-dim)}
.body .rev{border-bottom:1px dotted var(--ln2)}
.body details{margin:.35em 0}
.body summary{cursor:pointer;color:var(--t2);font-size:.85em;list-style:none;display:inline-flex;align-items:center;gap:.4em;user-select:none}
.body summary::-webkit-details-marker{display:none}
.body summary::before{content:"";width:.35em;height:.35em;border-right:1px solid currentColor;border-bottom:1px solid currentColor;transform:rotate(-45deg);margin-left:.1em}
.body details[open]>summary::before{transform:rotate(45deg)}
.body summary:hover{color:var(--t1)}
.body details>p{padding-left:1em}
.body p.hd{display:flex;flex-wrap:wrap;align-items:baseline;gap:.2em .6em;margin:.9em 0 .5em}
.body p.hd mark.hw{font-size:1.45em;font-weight:600;line-height:1.2;background:none;color:var(--t1);box-shadow:none}
.body p.hd sup{align-self:flex-start}
.body .fld{display:inline-flex;align-items:baseline;gap:.1em;border:1px solid var(--ln);border-radius:var(--r);background:var(--bg2);box-shadow:var(--sunk);padding:.05em .5em;margin:.15em .35em .15em 0;line-height:1.5;vertical-align:middle;font-size:.85em}
.body .fld .lbl{font-size:1em}   /* 整顆同一個字級：標籤與冒號 t3、值 t1（Owner 2026-09-17） */
.body p.kv{display:inline;margin:0}
.body .sec{display:inline-block;color:var(--acc);font-size:.8em;letter-spacing:.06em;margin-right:.6em;white-space:nowrap}
.body p.s{border-top:1px solid var(--ln);padding-top:.6em;margin-top:.7em}
.body p.pos{margin-top:.9em;color:var(--acc);font-size:.85em;letter-spacing:.06em}
.body p.pos b{font-weight:normal}
.body p.sn{padding-left:1.7em;text-indent:-1.7em}
.body p.sn>b:first-child{color:var(--acc);font-weight:normal;display:inline-block;width:1.7em;text-indent:0}
.body p.mk{padding-left:2.2em;text-indent:-2.2em}
.body .lbl:not(.fld *){display:inline-block;text-indent:0;min-width:1.9em;padding:0 .3em;margin-right:.35em;color:var(--acc2);border:1px solid var(--ln);border-radius:var(--r);text-align:center;line-height:1.5;vertical-align:.05em}   /* 欄位 chip 以外的標籤一律同一種小框 */
.body .bk{color:var(--acc2)}
.body mark.hw{background:none;box-shadow:none}
/* 出處 pill ＋ 緊接的 CBETA 鈕：同一個高度、同一個基線，接成一顆 */
.body .cit{display:inline-flex;align-items:center;height:1.75em;border:1px solid var(--ln);border-radius:var(--r);background:var(--bg2);box-shadow:var(--sunk);padding:0 .45em;font-size:.85em;line-height:1;color:var(--t2);vertical-align:middle;white-space:nowrap}
.body .cit:has(+.cb){border-radius:var(--r) 0 0 var(--r);border-color:var(--acc);border-right-color:var(--acc-dim);box-shadow:var(--hi),var(--sh);background:var(--s2)}
.body p.s .cit{margin-left:.1em}
a.e{color:inherit;text-decoration:underline;text-decoration-color:var(--ln2);text-underline-offset:.18em;cursor:pointer}
a.e[data-d]{color:var(--acc);text-decoration-color:transparent}
a.e:hover{text-decoration-color:var(--acc)}
.cb{display:inline-flex;align-items:center;justify-content:center;gap:.25em;height:1.75em;padding:0 .5em;margin:0 .15em;border:1px solid var(--acc);border-radius:var(--r);color:var(--acc2);background:var(--acc-bg);box-shadow:var(--hi),var(--sh);font-size:.85em;line-height:1;letter-spacing:.04em;text-decoration:none;white-space:nowrap;vertical-align:middle;cursor:pointer}
.body .cit+.cb{border-radius:0 var(--r) var(--r) 0;margin-left:-1px}
.cb:hover{border-color:var(--acc2);color:var(--acc2)}
.cb svg.i{width:.9em;height:.9em;fill:var(--acc-dim)}
.warn{color:var(--hit);font-size:.8em;margin-right:.15em}

/* 藏經：搜尋窗的三藏模式（.win.qw[data-mode=k]）、範圍面板（#sp）、經文窗（.win.jw） */
.qw .stat{display:flex;align-items:center;flex-wrap:wrap;gap:.3em .4em;color:var(--t3);font-size:.82em;min-height:1.6em;line-height:1.6;font-variant-numeric:tabular-nums;flex:none}
.qw .stat:empty{display:none}
.qw .stat .chip{font-size:1.02em}
.qw .stat b{color:var(--t2);font-weight:400}
.qw .stat .dbg{opacity:.75;white-space:nowrap}
.qw .res{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:.6rem;overscroll-behavior-y:contain}
.grp{padding:0;background:var(--raise);border:1px solid var(--ln);border-radius:var(--r);box-shadow:var(--hi),var(--sh);animation:fadein2 .35s ease-out}
@keyframes fadein2{from{opacity:0}}
.grp h3{margin:0;padding:.5rem .7rem;font-size:.9em;font-weight:400;color:var(--t2);display:flex;gap:.55em;align-items:center;flex-wrap:wrap;cursor:pointer}
.grp h3 .dn,.jh .dn{font-size:.8em}
.jg{border-top:1px solid var(--ln);padding:.25rem .7rem .3rem}
.jh{display:flex;align-items:center;gap:.5em;padding:.15rem 0;font-size:.85em;cursor:pointer}
.jh .j{color:var(--acc)}
.jg.fold>.hit{display:none}
.grp.fold>.jg{display:none}
.grp h3 b{font-weight:400;color:var(--t1);font-size:1.08em}
.grp h3 .j{color:var(--acc)}
.grp h3 .by{color:var(--t3);font-size:.9em}
.hit{display:flex;align-items:baseline;gap:.5em;padding:.4rem 0;border-top:1px solid var(--ln);text-align:left;width:100%;color:var(--t1);line-height:1.65;overflow-wrap:anywhere;background:none;border-left:0;border-right:0;border-bottom:0;cursor:pointer}
.jh+.hit{border-top:0}
.hit .tx{flex:1;min-width:0}
.hit mark{padding:0 .08em}
.hit:hover .tx{color:#000}
.qw .more{color:var(--t3);text-align:center;font-size:.85em;padding:.5rem;align-self:stretch}
/* 經名／作譯者直接命中（在結果最上面）：點經名開第一卷、點作譯者展開他的作品 */
.wk-hits{flex:none;padding:0;background:var(--raise);border:1px solid var(--ln);border-radius:var(--r);box-shadow:var(--hi),var(--sh);animation:fadein2 .35s ease-out}   /* 查的字是某部經的名字：自己一張卡，可收起，跟下面一部一卡同款（Owner 2026-09-17） */
.wk-hits h3{margin:0;padding:.5rem .7rem;font-size:.9em;font-weight:400;color:var(--t2);display:flex;gap:.55em;align-items:center;cursor:pointer}
.wk-hits h3 .dn{font-size:.8em}
.wk-hits .wkb{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center;padding:.4rem .7rem;border-top:1px solid var(--ln)}
.wk-hits.fold .wkb{display:none}
.wk-hits .chip{font-size:.8em}
.hist{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center;flex:none}
.hist .chip{font-size:.8em}
.hist .b.ic.hx{width:1.7em;height:1.7em;color:var(--t3)}
/* 範圍面板 */
.sec{margin:.4rem 0 .9rem}
.sec h4{margin:0 0 .4rem;font-size:.8em;font-weight:400;color:var(--t3);letter-spacing:.06em}
.sec h4 span{color:var(--t2)}
.sec .row{display:flex;flex-wrap:wrap;gap:.4rem .45rem}
.wk{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;margin-bottom:.3rem}
.wk .chip{max-width:70%}
.wk .chip b{overflow:hidden;text-overflow:ellipsis}
.wk .sub{flex:1;min-width:0;color:var(--t3);font-size:.8em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 展開／收起：方角小鈕＋山形箭頭（與部件面板 .pdn 同一種），不用圓圈配三角字 */
.dn{width:1.6em;height:1.6em;border-radius:.35em;color:var(--t3);display:inline-flex;align-items:center;justify-content:center;font-size:.85em;border:1px solid var(--ln);background:var(--raise);box-shadow:var(--hi),var(--sh);cursor:pointer;padding:0;flex:none}
.dn::before{content:"";width:.38em;height:.38em;border-right:1px solid currentColor;border-bottom:1px solid currentColor;transform:translateY(-.12em) rotate(45deg);transition:transform .18s}
.dn:hover{border-color:var(--ln2);color:var(--t1)}
.dn.open{color:var(--acc);border-color:var(--acc)}
.dn.open::before{transform:translateY(.1em) rotate(225deg)}
.jv{flex-basis:100%;display:none;flex-wrap:wrap;gap:.3rem;padding:.3rem 0 .4rem 1.2rem;align-items:center}
.jv.open{display:flex}
/* 卷格子：等寬方格排成一片（一位數與三位數同一個形狀），選中的填黛青 */
.jv .chip[data-j]{font-size:.78em;min-width:2.7em;justify-content:center;padding:.02em .3em;border-radius:.3em;box-shadow:var(--hi),var(--sh)}
.jv .chip[data-j] b{font-variant-numeric:tabular-nums}
.jv .rg .chip{font-size:.78em;padding:.02em .55em}
.jv .rg{flex-basis:100%;display:flex;align-items:center;gap:.3em;color:var(--t3);font-size:.8em}   /* 「從 N 到 M 卷」自成一列，格子從下一列整齊排起 */
.jv .rg input{width:3.2em;background:var(--bg2);border:1px solid var(--ln);border-radius:.35em;padding:.05em .3em;text-align:center;box-shadow:var(--sunk);font-size:.95em}
/* 命中分佈卡：勾選要看哪幾部、哪幾卷 */
/* 經文窗 */
.jw h2{display:flex;gap:.6em;align-items:baseline;font-size:1.05em}
.jw h2 .by{color:var(--t3);font-size:.75em;overflow:hidden;text-overflow:ellipsis}
.jw .jn{display:inline-flex;gap:.2em;flex:none;align-items:center}
.jw .jn .jc{font-size:.85em;color:var(--acc);padding-inline:.5em;white-space:nowrap}
.jw .body{display:flex;flex-direction:column;padding:0;overflow:hidden}
.ro{display:flex;flex-direction:column;gap:.35rem;padding:.45rem .7rem;background:var(--rule) bottom/100% 1px no-repeat;flex:none}   /* 定死兩列：.r1 選項＋CBETA、.r2 搜尋框＋本卷本經＋收合鈕（Owner 2026-09-17） */
.ro .r1,.ro .r2{display:flex;gap:.4rem;align-items:center;flex-wrap:nowrap;min-width:0}   /* 兩列都不換行：第一列擠不下就 chip 的字 …，不掉成第三列（Owner 2026-09-17） */
.ro .r1 .chip{min-width:0}
.ro .chip{font-size:.78em}
.ro a.cb{font-size:.78em;text-decoration:none;margin:0 0 0 auto}   /* 同法相條目裡的 CBETA 鈕一套樣式；靠右 */
.ro .sb{flex:1;min-width:6rem;display:flex;align-items:center}
.ro .rofold{margin-left:auto;flex:none}
.ro .rofold .i{transition:transform .2s}
.jw>header .rofold .i{transform:rotate(180deg)}   /* 收起時鈕在表頭（✕ 左邊）、山形朝下；整列 .ro 藏掉（reader.js applyOpt） */
.ro .sb .q{padding-block:.15em;font-size:.9em;padding-right:5.2em}
.ro .rqn{position:absolute;right:2.6em;top:50%;transform:translateY(-50%);color:var(--t3);font-size:.75em;white-space:nowrap}
.ro .rqp,.ro .rqm{position:absolute;top:50%;transform:translateY(-50%);width:1.3em;height:1.3em;border-radius:50%;color:var(--t2);background:none;border:0;cursor:pointer;padding:0;font-size:.9em}
.ro .rqp{right:1.35em}.ro .rqm{right:.2em}
.ro .rqp:hover,.ro .rqm:hover{background:var(--s3);color:var(--t1)}
.ro .seg .b{font-size:.78em}
.rm{flex:1;min-height:0;display:flex;position:relative}
.rtoc{flex:none;width:13rem;border-right:1px solid var(--ln);font-size:.85em;padding:.5rem .6rem 1rem;line-height:1.6;overflow-y:auto;overscroll-behavior-y:contain}
.rtoc button{display:block;width:100%;text-align:left;color:var(--t2);padding:.15em .3em;border-radius:.3em;overflow-wrap:anywhere;background:none;border:0;cursor:pointer}
.rtoc button:hover{background:var(--s3);color:var(--t1)}
.rtoc .l1{color:var(--t1)}
.rtoc .l2{padding-left:1em}.rtoc .l3{padding-left:2em}.rtoc .l4{padding-left:3em}.rtoc .l5{padding-left:4em}.rtoc .l6,.rtoc .l7,.rtoc .l8,.rtoc .l9{padding-left:5em}
.rt{flex:1;min-width:0;font-size:1.02em;line-height:1.9;padding:.6rem 1.1rem 1.4rem;overflow-wrap:anywhere;overflow-y:auto;overscroll-behavior-y:contain}
.rt .b{margin:.45em 0;background:none;box-shadow:none;border:0;padding:0;cursor:auto;display:block;color:inherit;line-height:inherit;white-space:normal}
.rt .b.i{margin:.25em 0}
.rt .b.jh{font-size:1.25em;text-align:center;color:var(--t1);margin:.6em 0 .4em}
.rt .b.by{color:var(--t2);margin-left:2em}
.rt .b.h{color:var(--acc2);font-size:1.08em;margin:1.1em 0 .4em}
.rt .b.tr{color:var(--t2);text-align:center;margin:.8em 0}
.rt .b.dh{letter-spacing:.06em}
.rt .b.r{text-align:right}
.rt .lg{margin:.6em 0 .6em 1em}
.rt .lg .l{display:block}
.rt .cs{display:inline-block;width:1.6em}
.rt .nt{font-size:.78em;color:var(--t2);line-height:1.3}
.rt .nt::before{content:"（"}.rt .nt::after{content:"）"}
.rt .nm{color:var(--acc);font-size:.68em;vertical-align:super;line-height:0;margin:0 .1em;cursor:pointer;white-space:nowrap;user-select:none}
.rt .nm:hover{color:var(--acc2)}
.rt .lem{text-decoration:underline dotted var(--ln2);text-underline-offset:.2em}
.rt .lem:hover{text-decoration-color:var(--acc)}
.rt .q{width:auto;background:none;box-shadow:none;border:0;padding:0;color:var(--t2)}
.rt .sd,.rt .rj{font-family:"CB Siddam",serif;font-size:1.15em;line-height:1}
.rt .rj{font-family:"CB Ranjana",serif}
.rt .gj{font-size:.72em;color:var(--t2);border:1px solid var(--ln2);border-radius:.3em;padding:0 .2em;margin:0 .1em;vertical-align:.1em}
.rt .gn{text-decoration:underline dotted var(--ln2);text-underline-offset:.2em}
.rt .un{color:var(--t3)}
.rt .fig{color:var(--t3);font-size:.8em;border:1px dashed var(--ln2);border-radius:.3em;padding:0 .4em}
.rt table{border-collapse:collapse;margin:.6em 0}
.rt td{border:1px solid var(--ln);padding:.15em .5em;vertical-align:top}
.rt .lh{display:none;color:var(--t3);font-variant-numeric:tabular-nums;user-select:none;letter-spacing:.02em}
.rt br{display:none}
.rt.br br{display:inline}
.rt.br .b.i{display:inline;margin:0}
.rt.br .rb{padding-left:5.2rem}
.rt.br .b,.rt.br .l{margin:.2em 0}
.rt.br .lg{margin-left:0}
.rt.br .lh{display:inline-block;width:5.2rem;margin-left:-5.2rem;text-align:left;font-size:.72rem;vertical-align:baseline}
.rt.br .b.jh,.rt.br .b.by,.rt.br .b.tr{text-align:left}
.rt.nont .nm{display:none}
.rt.nont .lem{text-decoration:none}
.rt.nopc .pc{display:none}
.rn{margin-top:1.4em;border-top:1px solid var(--ln);padding-top:.6em;font-size:.84em;color:var(--t2);line-height:1.6}
.rn h4{margin:0 0 .3em;font-weight:400;color:var(--t3);font-size:.9em;letter-spacing:.06em}
.rn div{padding:.1em 0}
.rn .k{color:var(--acc);margin-right:.5em;font-variant-numeric:tabular-nums}
.rt.nont .rn{display:none}
@media (max-width:700px){.ro{padding-inline:.5rem}.ro .r1,.ro .r2{gap:.3rem}.ro .r1 .chip{padding-inline:.45em}.ro a.cb{padding-inline:.35em}.jw h2 .by{display:none}.rt{padding:.4rem .7rem 1rem}.rt.br .rb{padding-left:4.2rem}.rt.br .lh{width:4.2rem;margin-left:-4.2rem;font-size:.66rem}.rtoc{position:absolute;inset:0;width:auto;background:var(--s1);z-index:2}}

/* 部件面板：拆解（上）＋組合（下）；點結果複製到剪貼簿 */
#pch{font-size:.8em;color:var(--t3);line-height:1.4;min-height:1.4em}
#pch.on{color:var(--acc)}
#ptb{font-size:17px;height:38px}
#ptc{height:min(40rem,100%)}
.ps{display:flex;flex-direction:column;gap:.5rem;padding:.6em .7em;min-height:0}
.ps>.sb{flex:none}
#pd{flex:none;background:var(--rule) bottom/100% 1px no-repeat}
#pc{flex:1}
.chips{display:flex;flex-wrap:wrap;gap:.35rem;align-content:flex-start}
#pdt{gap:.5rem}
#pdt .row{display:flex;flex-wrap:wrap;gap:.35rem;width:100%}
#pdt .row.ir .ch{border-style:dashed;color:var(--t2)}
#pcr{overflow-y:auto;flex:1;min-height:0;overscroll-behavior:contain;padding-bottom:.2em}
/* 部件 chip：容器裝一或兩顆鈕（字、▾ 往下拆）——鈕不巢狀，Firefox 會把鈕內子元素的點擊改指到鈕本身 */
.ch{background:var(--raise);box-shadow:var(--hi),var(--sh);border:1px solid var(--ln);border-radius:var(--r);height:2em;min-width:2em;color:var(--t1);font-size:1.25em;line-height:1;display:inline-flex;align-items:stretch}
.ch:hover{border-color:var(--ln2)}
.ch.on{border-color:var(--acc);color:var(--acc2);background:var(--acc-bg)}
.ch>button{background:none;border:0;box-shadow:none;padding:0 .3em;color:inherit;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex:1;min-width:1.4em;border-radius:var(--r)}
.ch>.pdn{flex:none;min-width:0;width:1em;padding:0;border-left:1px solid var(--ln);border-radius:0 var(--r) var(--r) 0;color:var(--t3)}
.ch>.pdn::before{content:"";width:.3em;height:.3em;border-right:1px solid currentColor;border-bottom:1px solid currentColor;transform:rotate(45deg) translate(-.05em,-.05em)}
.ch>.pdn:hover{color:var(--acc)}
#pcr .ch:not(.x0){color:var(--t2)}   /* 精確組成的字全亮，多帶部件的字暗一階 */

/* 水墨點綴（三張 webp 在 art/，全部 multiply 貼在紙上）：山在視窗右下、松在主窗空白時、竹只在部件面板右下（Owner 2026-09-17；舟已刪——佛教徒不釣魚）。
   三張的墨色要一致：山那張本來就淡（.45），松與竹的原圖墨重，用 ::before 帶透明度壓到同一個深淺（Owner 2026-09-17：松明顯比山與竹深） */
body::before{content:"";position:fixed;right:-4vw;bottom:calc(-.5rem + env(safe-area-inset-bottom, 0px));width:min(1100px,90vw);height:min(26vh,360px);background:url(art/ink-mountains.webp) no-repeat center bottom/contain;mix-blend-mode:multiply;opacity:0;animation:fadein 1.6s ease-out .2s forwards;pointer-events:none;z-index:0}
@keyframes fadein{to{opacity:.45}}
.win.blank .body{position:relative}
.win.blank .body::before{content:"";position:absolute;left:0;bottom:0;width:min(70%,18rem);aspect-ratio:1;background:url(art/ink-pine.webp) no-repeat left bottom/contain;mix-blend-mode:multiply;opacity:.32;pointer-events:none}   /* 空白時只有松（Owner 2026-09-17：竹不放這裡） */
#ptc{position:relative}
#ptc::before{content:"";position:absolute;right:2rem;bottom:0;height:70%;aspect-ratio:1/2;background:url(art/ink-bamboo.webp) no-repeat right bottom/contain;mix-blend-mode:multiply;opacity:.9;pointer-events:none}   /* 竹只在部件面板：高七成、離右緣 2rem（Owner 2026-09-17：太小太靠右不協調；資料來源卡與清單卡都不放） */
@media (max-width:700px){body::before{display:none}#ptc::before{height:55%;right:1rem}}   /* 手機：窗蓋滿畫面，山只會透在告示文字後面 */
