/* 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: 232px; flex: none; display: flex; flex-direction: column; padding: 22px 0 14px; border-right: 1px solid rgba(var(--ink-rgb), .1); } /* 🔴 lockup 底色(實測發現):`arcrun-lockup-h-paper-on-ink.png` **自帶不透明 Ink 底板** (左上像素 RGBA=23,24,26,255),它的設計前提是「貼在純 Ink 表面上」。 我們的背景有紙張紋理 ⇒ 直接放會看到一個突兀的方塊(leo 截圖裡那個白/黑框)。 ⇒ 深色模式下把品牌區做成純 Ink 表面,與該圖的底板無縫接合。 淺色模式用 `-ink.png`(左上像素 alpha=0,透明)⇒ 不需要處理。 */ #side .brand { padding: 14px 22px 18px; } #side .brand img { height: 22px; display: block; } :root[data-theme="dark"] #side .brand { background: var(--ink); } #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; } /* 側邊欄項目:選中用 Relation(CIS 唯一強調色,≤5% 畫面 ⇒ 一次只有一項) */ #side nav { display: flex; flex-direction: column; gap: 2px; padding: 0 12px; } #side .nav { display: flex; align-items: center; gap: 11px; padding: 10px 14px; border-radius: 999px; font-size: 14.5px; color: rgba(var(--ink-rgb), .62); cursor: pointer; user-select: none; } #side .nav:hover { background: var(--well); color: var(--ink); } #side .nav.on { background: var(--amber); color: var(--knob); font-weight: 600; } #side .nav .ic { width: 18px; text-align: center; font-size: 15px; opacity: .9; } #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; } /* ── 元件 ── */ button { border: 1px solid rgba(var(--ink-rgb), .16); background: transparent; color: var(--ink); padding: 8px 15px; border-radius: 8px; font-size: 14px; cursor: pointer; transition: background .12s, border-color .12s; } button:hover { background: var(--well); } button.primary { background: var(--amber); border-color: var(--amber); color: var(--knob); font-weight: 600; } button.primary:hover { filter: brightness(1.06); } button.ghost { border-color: transparent; color: rgba(var(--ink-rgb), .45); padding: 6px 9px; font-size: 13px; } button.ghost:hover { color: var(--err); background: transparent; } .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; } .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; } .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; } 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; }