/* Arcrun 桌面 App — **版面**樣式(t193) * * 🔴 色票/字體/紙張紋理**不在這裡**——那些在 `arcrun-cis.css`(唯一真相源 * = InkStoneCo/arcrun-cis/css/arcrun-cis.css,portal/landing/install 共用同一份)。 * leo 08-04:「不會這裡又寫了一個新的 CSS?前面剛剛才說過**不要創造新的**?」 * ⇒ 本檔**只准出現版面與元件**,一律用 var(--...),**不准寫任何 hex 色碼**。 * * 版面(leo 08-04 指定,附 Google Drive 截圖): * 「可以完全模仿 gdrive,**左方側邊欄,在右方替換頁面**, * 你現在做成在底下產生 nav bar,幾乎沒看過這種 nav bar 在下方的,會令人十分不習慣」 */ html, body { overflow: hidden; height: 100%; } /* ── 骨架:左欄固定、右側換頁 ── */ #app { display: flex; height: 100vh; } #side { width: 216px; flex: none; /* 同 portal #sidenav */ display: flex; flex-direction: column; padding: 22px 0 14px; border-right: 2px solid rgba(var(--amber-rgb), .35); /* portal #sidenav 同款 */ } /* 🔴 lockup(CIS,leo 三次點名)——**用裁淨版**,且**不要底板**: ① 官方原始 PNG(1840x560)**只有 32% 高度是實際字形**,上下大量留白 ⇒ 同樣 height 看起來字很小,且留白會露出底板=leo 看到的白底。 portal 早就改用**裁淨版**(986x176,比例 5.602,四邊裁到字腔邊緣)。 ⇒ 直接用 portal 那兩張(從它的 base64 抽出,存在 arcrun-cis/trimmed/)。 ② 兩張裁淨版**都是透明底** ⇒ 深色模式**不需要**也**不可以**再墊 Ink 底板。 ③ 尺寸/切換規則逐字照 portal 的 #sidenav .logo。 */ /* 🔴 leo:「這是 Logo 旁邊**大量空白**」——圖本身已裁淨(實測四邊留白 0), 空白來自**版面**:側欄 216px 扣 padding 剩 152px,而 logo 高 24px 時只有 134px。 ⇒ 讓 lockup **填滿可用寬度**(高度由 5.602 的比例自動決定,約 27px), 並照 CIS「clear space = one chevron height」在下方留呼吸空間。 */ #side .brand { display: flex; color: var(--ink); padding: 0 32px 22px; } #side .brand img { width: 100%; height: auto; display: block; } #side .brand .wm-paper { display: none; } :root[data-theme="dark"] #side .brand .wm-ink { display: none; } :root[data-theme="dark"] #side .brand .wm-paper { display: block; } /* 側邊欄選中態:**逐字照 portal 的 #sidenav .nav.on** (leo:「參考現在 Portal 的格式⋯⋯這個比現在膠囊反紅精緻, 重點是**跟 portal 的形象符合**」) = 不是膠囊實心,而是:amber 字色 + 8% amber 底 + 右側 2px amber 邊。 */ #side nav { display: flex; flex-direction: column; gap: 4px; } #side .nav { display: flex; align-items: center; gap: 10px; padding: 13px 24px; font-size: 15px; letter-spacing: .08em; color: rgba(var(--ink-rgb), .6); border-right: 2px solid transparent; cursor: pointer; user-select: none; } #side .nav:hover { color: var(--ink); } #side .nav.on { color: var(--amber); background: rgba(var(--amber-rgb), .08); border-right-color: var(--amber); font-weight: 600; } #side .nav .ic { width: 17px; text-align: center; font-size: 14px; opacity: .85; } #side .nav .cnt { margin-left: auto; font-size: 11.5px; opacity: .7; font-family: ui-monospace, Menlo, monospace; } #side .nav .nm { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } #side .side-foot { margin-top: auto; padding: 12px 22px 0; } #side .ver { font-size: 12px; color: rgba(var(--ink-rgb), .35); font-family: ui-monospace, Menlo, monospace; } #content { flex: 1; min-width: 0; display: flex; flex-direction: column; } header { padding: 22px 28px 16px; display: flex; align-items: flex-start; gap: 18px; border-bottom: 1px solid rgba(var(--ink-rgb), .1); } .status { flex: 1; min-width: 0; } .status .big { font-size: 18px; font-weight: 600; letter-spacing: .02em; } .status .sub { margin-top: 5px; font-size: 13.5px; color: rgba(var(--ink-rgb), .5); } /* 同步中會呼吸——「看得出來在動」(issue #17) */ .status .big.syncing::after { content: ""; display: inline-block; width: 7px; height: 7px; margin-left: 9px; border-radius: 50%; background: var(--amber); vertical-align: middle; animation: pulse 1.1s ease-in-out infinite; } @keyframes pulse { 0%,100% { opacity: .25 } 50% { opacity: 1 } } main { flex: 1; overflow-y: auto; padding: 20px 28px 28px; } /* ── 元件:規格**逐字對齊 portal**(leo:「網頁的按鈕比較精緻,跟現有的差異較大」)── portal: .btn { padding:13px; font-size:16px; font-weight:600; border-radius:10px; border:none; background:var(--amber) } .btn3 { padding:11px 16px; font-size:15px; border-radius:10px; border:1px solid rgba(ink,.25); background:none } 這裡只把 padding 依桌面視窗略收(網頁是手機優先、桌面不需要那麼大的點擊區)。 */ button { padding: 10px 16px; font-size: 14.5px; border-radius: 10px; border: 1px solid rgba(var(--ink-rgb), .25); background: none; color: rgba(var(--ink-rgb), .7); cursor: pointer; transition: background .12s, color .12s, border-color .12s; } button:hover { background: var(--well); color: var(--ink); } button:disabled { opacity: .45; cursor: default; } button.primary { border: none; background: var(--amber); color: var(--knob); font-weight: 600; } button.primary:hover { filter: brightness(1.06); background: var(--amber); } button.ghost { border-color: transparent; background: none; color: rgba(var(--ink-rgb), .45); padding: 7px 10px; font-size: 13px; } button.ghost:hover { color: var(--err); background: transparent; } /* 主題切換(portal 有,daemon 也要有——leo:「它有淺色佈景?」 ⇒ 是,portal **預設淺色**,深色由使用者切換並存 localStorage。 */ #themeBtn { padding: 7px 11px; font-size: 13px; } .card { background: var(--well); border-radius: 12px; padding: 18px 20px; margin-bottom: 14px; } .card h3 { margin: 0 0 4px; font-size: 15px; } .card .d { font-size: 13.5px; color: rgba(var(--ink-rgb), .55); line-height: 1.8; } .card .row { display: flex; align-items: center; gap: 12px; } .card .row .g { flex: 1; min-width: 0; } /* 「這些檔案還讀不了」清單(G-6.2)。刻意**不用紅色/錯誤色**: 這不是使用者做錯了什麼,是我們還沒支援——語氣要是告知,不是指責。 */ .skiplist { margin: 10px 0 0; padding: 0; list-style: none; } .skiplist li { font-size: 13.5px; padding: 6px 0; border-top: 1px solid rgba(var(--ink-rgb), .08); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .skiplist li.more { color: rgba(var(--ink-rgb), .45); } .acct { padding: 4px 2px 8px; display: flex; align-items: baseline; gap: 10px; } .acct .name { font-size: 14.5px; font-weight: 600; } .acct .host { font-size: 12px; color: rgba(var(--ink-rgb), .4); font-family: ui-monospace, Menlo, monospace; } .folder { padding: 11px 15px; margin-bottom: 7px; background: var(--well); border-radius: 10px; display: flex; align-items: center; gap: 12px; } .folder .path { flex: 1; min-width: 0; font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .folder .tag { font-size: 12px; color: var(--ok); white-space: nowrap; } /* arcrun-rag#46:收回中=進行中的狀態,不是「一切正常」,所以不用綠色。 */ .folder .tag.retiring { color: rgba(var(--ink-rgb), .5); } .folder-note { margin: -3px 0 9px; padding: 0 15px; font-size: 12.5px; } .big-num { font-size: 26px; font-weight: 600; letter-spacing: .01em; } .kv { display: flex; gap: 26px; margin-top: 4px; } .kv .k { font-size: 12.5px; color: rgba(var(--ink-rgb), .45); } .empty { padding: 52px 24px; text-align: center; } .empty .t { font-size: 17px; font-weight: 600; margin-bottom: 10px; } .empty .d { font-size: 14px; color: rgba(var(--ink-rgb), .55); line-height: 1.9; margin-bottom: 20px; } /* ── 首次啟動精靈(issue #23):兩步,讓人隨時知道「我做到哪了」── 步驟點沿用首頁「狀態時間軸」同一套配色邏輯(done=--ok、on=--amber), 不另外發明一組顏色。 */ .ob { max-width: 520px; margin: 0 auto; padding-top: 36px; } .obdots { display: flex; align-items: center; justify-content: center; gap: 8px; margin-bottom: 18px; } .obdot { width: 26px; height: 26px; border-radius: 50%; flex: none; display: flex; align-items: center; justify-content: center; font-size: 12.5px; font-weight: 600; font-family: ui-monospace, Menlo, monospace; background: rgba(var(--ink-rgb), .1); color: rgba(var(--ink-rgb), .45); } .obdot.on { background: var(--amber); color: var(--knob); } .obdot.done { background: var(--ok); color: var(--knob); } .obline { width: 40px; height: 2px; background: rgba(var(--ink-rgb), .12); } .obcap { font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: rgba(var(--ink-rgb), .4); margin-bottom: 14px; } .obintro { text-align: left; max-width: 420px; margin: 0 auto 24px; } .obintro p { margin: 0 0 10px; } .obchoice { display: flex; gap: 14px; margin-top: 22px; text-align: left; flex-wrap: wrap; justify-content: center; } .obcard { flex: 1 1 200px; max-width: 240px; background: var(--well); border-radius: 12px; padding: 16px 18px; display: flex; flex-direction: column; gap: 8px; } .obcard .obh { font-size: 14.5px; font-weight: 600; } .obcard .d { margin-bottom: 4px; } .obcard button { margin-top: auto; } label.radio { display: flex; align-items: flex-start; gap: 10px; margin: 12px 0; font-size: 14px; cursor: pointer; } label.radio input { margin-top: 3px; } input[type=text], input[type=password] { width: 100%; box-sizing: border-box; padding: 9px 12px; font-size: 14px; border: 1px solid rgba(var(--ink-rgb), .18); border-radius: 8px; background: var(--paper-b); color: var(--ink); } .field { margin: 14px 0; } .field .lb { font-size: 13px; margin-bottom: 6px; color: rgba(var(--ink-rgb), .6); } .err { color: var(--err); font-size: 13px; margin-top: 10px; } .acts { display: flex; gap: 8px; margin-top: 18px; } /* 覆蓋層:只給「確認刪除」這類必須打斷的動作,設定頁一律走右側換頁 */ .overlay { position: fixed; inset: 0; background: rgba(0,0,0,.42); display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity .14s; } .overlay.on { opacity: 1; pointer-events: auto; } .sheet { width: min(460px, calc(100vw - 64px)); background: var(--paper-a); color: var(--ink); border: 1px solid rgba(var(--ink-rgb), .12); border-radius: 14px; padding: 22px 24px; box-shadow: 0 18px 50px rgba(0,0,0,.28); } .sheet h2 { margin: 0 0 6px; font-size: 16.5px; } .sheet p { margin: 0 0 4px; font-size: 14px; color: rgba(var(--ink-rgb), .55); line-height: 1.7; } .sheet .acts { justify-content: flex-end; } /* ── 每個知識庫一個獨立分頁(leo 08-04)── 「同步資料夾那個頁面如果有 2 個庫,每個庫有 30 個同步資料夾,**放得下嗎**? 應該**一個庫有一個頁簽**或是其他方法可以切換。」 「『加入資料夾』按下後**會加在哪個帳號**?**有必要每個帳號有獨立的一個頁面**。」 ⇒ 側邊欄直接列出每個知識庫;點進去就是那個庫的頁,動作全部作用在它身上,不會加錯。 */ #side .sec { padding: 16px 26px 6px; font-size: 11.5px; letter-spacing: .08em; color: rgba(var(--ink-rgb), .35); } #side .nav .cnt { margin-left: auto; font-size: 11.5px; opacity: .7; font-family: ui-monospace, Menlo, monospace; } #side .nav .nm { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* 每個庫的頁首:庫名+網址+「開啟知識庫網頁」(leo:不該放首頁,要在各庫上方) */ .libhead { display: flex; align-items: center; gap: 14px; padding-bottom: 14px; margin-bottom: 14px; border-bottom: 1px solid rgba(var(--ink-rgb), .1); } .libhead .g { flex: 1; min-width: 0; } .libhead .nm { font-size: 16px; font-weight: 600; } .libhead .host { font-size: 12px; color: rgba(var(--ink-rgb), .4); font-family: ui-monospace, Menlo, monospace; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* 狀態時間軸(leo:「如果看守、發現變化、萃取、上傳… 不同 status 在哪裡顯示?」) */ .steps { display: flex; flex-direction: column; gap: 2px; margin-top: 12px; } .step { display: flex; align-items: center; gap: 11px; padding: 7px 0; font-size: 14px; } .step .dot { width: 9px; height: 9px; border-radius: 50%; flex: none; background: rgba(var(--ink-rgb), .18); } .step.done .dot { background: var(--ok); } .step.now .dot { background: var(--amber); animation: pulse 1.1s ease-in-out infinite; } .step.now { font-weight: 600; } .step .t { flex: 1; } .step .m { font-size: 12.5px; color: rgba(var(--ink-rgb), .45); } /* 展開收合的細節區塊(
,原為 leo 2026-08-06 逐檔失敗卡所寫: 「顯示沒通過的名稱,旁邊有個三角形,點擊看到失敗細節,default 摺疊起來」)。 t210(2026-08-08)沿用同一套三角形樣式,改包「送不上去」的分類統計。 */ .fail { border-top: 1px solid rgba(var(--ink-rgb), .10); } .fail:first-child { border-top: 0; } .fail > summary { cursor: pointer; padding: 10px 2px; font-size: 14px; line-height: 1.5; word-break: break-word; list-style: revert; /* 保留原生三角形 */ } .fail > summary::marker { color: var(--amber); } .fail[open] > summary { font-weight: 600; } /* 「送不上去」展開後的分類清單:只有分類名稱與份數兩欄,不逐檔列名 (t210 leo 08-08:「不解釋細節……想看細節才展開」——展開後也只到分類為止)。 */ .breaklist { margin: 8px 0 0; padding: 0; list-style: none; } .breaklist li { display: flex; justify-content: space-between; gap: 12px; font-size: 13.5px; padding: 6px 2px; border-top: 1px solid rgba(var(--ink-rgb), .08); } .breaklist li:first-child { border-top: 0; } .breaklist li span:last-child { color: rgba(var(--ink-rgb), .55); white-space: nowrap; } /* t215(2026-08-08,leo:「在每個知識庫上顯示是否要更新」)——首頁「知識庫版本」卡、 各庫頁版本列、側邊欄警示點,三處共用同一組顏色:落後=--err(同 .err 那個紅), 不是額外發明一個「警告色」。 */ .kblist { display: flex; flex-direction: column; gap: 2px; margin-top: 10px; } .kbrow { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 9px 0; border-top: 1px solid rgba(var(--ink-rgb), .08); } .kbrow:first-child { border-top: 0; } .kbrow .nm { font-size: 14px; font-weight: 600; flex: none; } .kbrow .right { display: flex; align-items: center; gap: 10px; font-size: 13px; } .kbver { margin-bottom: 14px; font-size: 13.5px; display: flex; align-items: center; gap: 10px; } .warn { color: var(--err); font-size: 13px; } #side .nav .dot.warn { width: 7px; height: 7px; border-radius: 50%; flex: none; background: var(--err); margin-left: 4px; } /* ══════════════════════════════════════════════════════════════════════════ App 啟動器(arcrun-rag#137) leo 2026-08-24:「所有的 App 需要有一個類似 Android/iOS 的**九宮格啟動界面**, 每個 App 有一個 icon,這會運行在 portal 及 daemon。」 🔴 尺寸/圓角/間距逐項照 leo 已核准的設計稿(Launcher-Desktop.dc.html): 磁磚 88x88、圓角 22、格線 gap 32/24、hover 上浮 2px、標籤 14px 置中。 🔴 顏色**一個 hex 都不准出現**——全部走 arcrun-cis.css 的變數(本檔開頭那條規矩)。 ══════════════════════════════════════════════════════════════════════════ */ /* 頁首:知識庫名 + 幾個 App + 重新整理(同 .libhead 的結構,不另發明一種頁首) */ .apphead { display: flex; align-items: center; gap: 14px; padding-bottom: 18px; margin-bottom: 26px; border-bottom: 2px solid rgba(var(--amber-rgb), .35); /* 設計稿的 accentSoft 分隔線 */ } .apphead .g { flex: 1; min-width: 0; } .apphead .t { font-size: 22px; font-weight: 600; letter-spacing: .04em; } .apphead .s { margin-top: 5px; font-size: 13.5px; color: rgba(var(--ink-rgb), .55); } /* 多個知識庫時才出現的切換器(只有一個庫時畫面上不該有這排噪音) */ .appswitch { display: flex; gap: 8px; margin-bottom: 20px; flex-wrap: wrap; } /* 圓角用 10px(同 button),刻意**不用**膠囊——check-cis.sh 明文擋膠囊選中態 (leo 08-04 否決過),而且這排切換器與按鈕本來就該是同一種形狀語彙。 */ .appswitch .chip { padding: 6px 13px; font-size: 13px; border-radius: 10px; border: 1px solid rgba(var(--ink-rgb), .18); color: rgba(var(--ink-rgb), .6); cursor: pointer; user-select: none; } .appswitch .chip.on { border-color: var(--amber); color: var(--amber); background: rgba(var(--amber-rgb), .08); font-weight: 600; } /* 九宮格本體。auto-fill 而不是固定 4 欄:桌面視窗是可以被拉窄的(min 820px), 固定欄數會在窄視窗把磁磚擠變形。 */ .appgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(116px, 1fr)); gap: 32px 24px; } .appcell { display: flex; flex-direction: column; align-items: center; gap: 11px; } .apptile { width: 88px; height: 88px; border-radius: 22px; display: flex; align-items: center; justify-content: center; font-size: 38px; line-height: 1; background: var(--well); border: 1px solid rgba(var(--ink-rgb), .1); cursor: pointer; user-select: none; transition: border-color .12s, background .12s, transform .12s; } .apptile:hover { transform: translateY(-2px); border-color: var(--amber); background: rgba(var(--amber-rgb), .08); } /* 「加裝 App」——設計稿是虛線框+加號,語意是「這一格還沒有東西」 */ .apptile.add { background: none; border: 1.5px dashed rgba(var(--ink-rgb), .22); font-size: 28px; color: rgba(var(--ink-rgb), .45); } .appcell .nm { font-size: 14px; text-align: center; line-height: 1.4; max-width: 116px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .appcell .nm.dim { color: rgba(var(--ink-rgb), .55); } /* App 頁 */ .appview { display: flex; flex-direction: column; } .appview .head { display: flex; align-items: center; gap: 12px; padding-bottom: 14px; margin-bottom: 16px; border-bottom: 1px solid rgba(var(--ink-rgb), .1); } .appview .head .ico { font-size: 24px; line-height: 1; } .appview .head .nm { font-size: 17px; font-weight: 600; } .appview .head .vr { font-size: 12px; color: rgba(var(--ink-rgb), .4); font-family: ui-monospace, Menlo, monospace; } .appview .head .sp { flex: 1; } /* App 自帶畫面:**關在 sandbox iframe 裡**(見 main.js mountAppUI 的理由)。 高度吃滿剩下的版面,讓 App 自己決定要怎麼排。 */ /* 高度用 calc 而不是 flex:1/height:100%:#page 是 flex item + 自帶 padding, 百分比高度在那裡會多算出一段 padding 而長出一條假捲軸。 250px=頁首(約 90) + main padding(48) + App 頁首(約 60) + 呼吸。 */ .appframe { width: 100%; height: calc(100vh - 250px); min-height: 420px; border: 1px solid rgba(var(--ink-rgb), .1); border-radius: 12px; background: var(--paper-a); } /* 沒有自帶畫面的 App=列出它的工作流,一條一顆「現在執行」 (與 Portal 的系統預設畫面同一套呈現,不另立第二種) */ .wfitem { background: var(--well); border-radius: 12px; padding: 15px 18px; margin-bottom: 10px; } .wfitem .top { display: flex; align-items: baseline; gap: 12px; } .wfitem .nm { font-size: 15px; font-weight: 600; flex: 1; min-width: 0; } .wfitem .d { margin-top: 7px; font-size: 13.5px; color: rgba(var(--ink-rgb), .55); line-height: 1.7; } .wfitem .out { margin-top: 8px; font-size: 12.5px; line-height: 1.6; font-family: ui-monospace, Menlo, monospace; color: rgba(var(--ink-rgb), .55); word-break: break-all; white-space: pre-wrap; } .wfitem .out.bad { color: var(--err); } /* ══════════════════════════════════════════════════════════════════════════ 資料夾結構樹(`inkstone/InkStoneCo#44` 桌面那半;形狀規格 `inkstone/Arcrun#144`) leo 2026-08-19(驗 1.4.49 的 markmap 之後打回): 「我的需求是**向右向下**,類似 terminal 的 tree,**一列一列向下往後退縮**, 緊湊但可點擊展開,**模擬 Windows 的檔案總管的 tree**⋯⋯ 可以用滑鼠輕易操作,**不會佔用大面積**。」 ⇒ 這一段的每個數字都在服務那句話: · 一列 = 一個 flex row,靠 padding-left 退縮(縮排 16px/層,同檔案總管量級) · 行高壓到 20px 上下、字級 13px ⇒ 1080p 一個畫面塞得下數十列 · 三角形+資料夾 icon 在最左,數字與原因往右排,掃視時眼睛只走一條直線 🔴 顏色一個 hex 都不准出現(本檔開頭那條規矩)——全部走 arcrun-cis.css 的變數。 ══════════════════════════════════════════════════════════════════════════ */ .ftbox { margin: -3px 0 9px; padding: 8px 10px 6px; background: var(--well); border-radius: 10px; } .fthead { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding-bottom: 7px; margin-bottom: 5px; border-bottom: 1px solid rgba(var(--ink-rgb), .08); } .fthead button { padding: 4px 9px; font-size: 12px; } /* 樹本體:檔案總管那種「緊湊但點得到」的密度。 overflow-x 讓很深的樹自己捲,不去撐破右側版面。 */ .ftbody { overflow-x: auto; padding: 1px 0; } .ftrow { display: flex; align-items: baseline; gap: 7px; padding: 2px 4px 2px 0; font-size: 13px; line-height: 1.5; white-space: nowrap; border-radius: 5px; } /* 有子資料夾的那幾列才可點——整列都是點擊區(三角形只有 12px,滑鼠不好瞄)。 */ .ftrow.has { cursor: pointer; user-select: none; } .ftrow.has:hover { background: rgba(var(--amber-rgb), .08); } .ftrow.has:focus-visible { outline: 2px solid var(--amber); outline-offset: -2px; } /* 三角形:**用 CSS 畫,不用字元**。 leo 2026-08-19 打回 markmap 的其中一條理由就是「**展開字很小**⋯⋯ 用戶要擁有觸控板,否則很難閱讀」——▸▾ 這兩個字在不同平台的中文字型裡 大小與位置都不一樣(Windows 常被當全形處理),畫出來的則到處一致。 */ .ftrow .tw { width: 14px; flex: none; align-self: center; display: inline-flex; align-items: center; justify-content: center; } .ftrow .tw i { display: block; width: 0; height: 0; border-left: 5px solid rgba(var(--ink-rgb), .5); border-top: 4px solid transparent; border-bottom: 4px solid transparent; transition: transform .12s; } .ftrow.open .tw i { transform: rotate(90deg); } .ftrow.has:hover .tw i { border-left-color: var(--amber); } .ftrow .ic { flex: none; font-size: 12.5px; } .ftrow .nm { font-weight: 500; } .ftrow .num { font-family: ui-monospace, Menlo, monospace; font-size: 12px; color: rgba(var(--ink-rgb), .55); } /* 全部同步完=這一格沒有待辦,用完整墨色讓它從灰階裡浮出來(不另發明「成功色」)。 */ .ftrow .num.full { color: var(--ink); } /* 🔴 選擇器**不要**綁在 .ftrow 底下:頁首那句「為什麼只收這些」也用同一個 class, 綁死就只有樹裡面吃得到樣式、頁首那句會掉回 16px 的內文級——實撞過一次, 畫面上那句話比整棵樹都大聲,喧賓奪主。 */ /* 「為什麼沒上去」是次要資訊:**它可以被截斷,資料夾名字不行**。 (整棵未收的理由是一整句話,不截的話一列會長到把樹推出畫面外。) 截掉的部分留在 title 裡,滑鼠停著就看得到全文。 */ .ftbox .why { font-size: 12px; color: rgba(var(--ink-rgb), .45); flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; } .fthead .why { flex: 1; min-width: 0; line-height: 1.6; } /* 整棵沒走進去:語氣是告知不是錯誤,所以不用 --err。 */ .ftrow .skip { font-size: 11.5px; color: rgba(var(--ink-rgb), .5); border: 1px solid rgba(var(--ink-rgb), .18); border-radius: 5px; padding: 0 5px; } .ftmsg { padding: 6px 2px 2px; font-size: 12px; line-height: 1.65; color: rgba(var(--ink-rgb), .45); }