/* ============================================================ 家书 FamilyBook · 界面样式 配色取自图标:宣纸米 / 砖红封面 / 深褐书脊 / 纸白 原则:扁平、留白充足、字重克制(正文 400,标题 500-600) ============================================================ */ :root { --paper: #F7F3EA; --surface: #FFFFFF; --ink: #2C231D; --muted: #7E6B5A; --faint: #A8988A; --brand: #A84A28; --brand-2: #C96F45; --brand-ink:#6E3820; --green: #6F9E5C; --red: #C0533F; /* 🔴 v40(用户 2026-10-10):「影院管理部分…编辑使用蓝色的背景,删除使用红色的背景。」 ⇒ 新增一个中性的"操作蓝"(不是链接蓝、也不是模块品牌色)—— 它是**语义色**: 蓝=编辑、红=删除,全站统一,跟着模块换肤也不该变。 ⚠️ 暖纸底上要够暗才压得住白字:这里取 #2F6FB0(对比度 ≈ 4.9:1)。 */ --blue: #2F6FB0; /* 🔴 v41(用户 2026-10-10):旅程详情页四种动作按钮各一种底色 (计划=蓝 / 实际=绿 / 编辑=黄 / 删除=红)。蓝、绿(--green)、红已有; 这里补"编辑黄"。 ⚠️ 纯黄(#FFD400 之类)配白字几乎看不清(对比度 ≈ 1.3:1)。 取偏琥珀的深黄 #B8860B(DarkGoldenrod 系),暖纸底上白字对比度 ≈ 3.6:1, 且不会和品牌暖棕 (`--brand` #A84A28) 混淆 —— 后者明显更红。 ⚠️ "实际=绿"用既有的 `--green` (#6F9E5C),它在白字下对比度 ≈ 3.0:1, 深一步更保险 —— 见 `.btn-actual` 里单独取的 #4E7C3F(≈ 4.6:1)。 */ --yellow: #B8860B; --line: rgba(44, 35, 29, .10); --line-2: rgba(44, 35, 29, .06); --radius: 16px; --radius-s: 10px; --shadow: 0 1px 2px rgba(44, 35, 29, .05); --shadow-l: 0 4px 16px rgba(44, 35, 29, .08); /* ---- 动作按钮的统一度量 ---- 用户提过三次「设置按钮和记一场电影按钮高度要一致」。为杜绝再犯, 这里把按钮高度拆成 4 个变量,并算出唯一的高度: --act-h = 上下内边距 + 行高 + 上下边框 = 9*2 + 14*1.7 + 1*2 = 43.8px 文字按钮靠 padding + line-height 自然撑到这个高度; **只有图标的方形按钮**(.btn-icon)显式写高度,但取的是同一个 --act-h, 这样两边永远相等,改一处就同步。 */ --act-pad-y: 9px; --act-pad-x: 16px; --act-font: 14px; --act-line: 1.7; --act-h: calc(var(--act-pad-y) * 2 + var(--act-font) * var(--act-line) + 1px * 2); } * { box-sizing: border-box; } html, body { height: 100%; } body { margin: 0; background: var(--paper); color: var(--ink); font: 15px/1.7 -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", sans-serif; -webkit-font-smoothing: antialiased; } a { color: var(--brand); text-decoration: none; } a:hover { text-decoration: underline; } /* ---------------- 顶栏 ---------------- */ .topbar { position: sticky; top: 0; z-index: 20; background: var(--surface); border-bottom: 1px solid var(--line); } .topbar-inner { max-width: 1080px; margin: 0 auto; padding: 0 24px; height: 60px; display: flex; align-items: center; gap: 24px; } .brand { display: flex; align-items: center; gap: 10px; color: var(--ink); } .brand:hover { text-decoration: none; } .brand img { width: 30px; height: 30px; border-radius: 8px; display: block; } .brand span { font-size: 16px; font-weight: 600; letter-spacing: .5px; } .nav { display: flex; gap: 4px; margin-left: 8px; } .nav a { padding: 6px 12px; border-radius: 999px; color: var(--muted); font-size: 14px; } .nav a:hover { background: var(--line-2); text-decoration: none; } .nav a.on { background: var(--brand); color: #fff; } .topbar-right { margin-left: auto; display: flex; align-items: center; gap: 12px; } .who { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 14px; } /* 姓名 + 头像是个下拉菜单的「把手」——hover 时给点反馈,让人知道它可点 */ .who-menu { position: relative; } .who-menu > summary { list-style: none; cursor: pointer; padding: 4px 6px; border-radius: 999px; } .who-menu > summary::-webkit-details-marker { display: none; } .who-menu > summary:hover { } /* 统一段处理 */ .who-menu > summary:hover .who-name { color: var(--brand); } .who-menu[open] > summary { background: var(--line-2); } .who-menu[open] > summary .caret { transform: rotate(180deg); } .who img { width: 30px; height: 30px; border-radius: 50%; object-fit: cover; } .who img { transition: box-shadow .15s ease; } .who-menu > summary:hover img { box-shadow: 0 0 0 2px var(--brand-2); } /* 那个小三角:没有它,用户不知道"名字能点开" */ .caret { width: 0; height: 0; margin-left: -2px; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 5px solid var(--faint); transition: transform .15s ease; } .menu-list { position: absolute; right: 0; top: calc(100% + 8px); z-index: 30; min-width: 148px; padding: 6px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-s); box-shadow: var(--shadow-l); display: flex; flex-direction: column; } .menu-list a { padding: 8px 12px; border-radius: 8px; color: var(--ink); font-size: 14px; white-space: nowrap; } .menu-list a:hover { background: var(--line-2); text-decoration: none; color: var(--brand); } /* 退出放在最下面并隔一条线:它是"离开",和上面几个"改点什么"不是一类动作 */ .menu-list .menu-exit { margin-top: 4px; padding-top: 9px; border-top: 1px solid var(--line-2); border-radius: 0 0 8px 8px; color: var(--muted); } .menu-list .menu-exit:hover { color: var(--brand); } /* ---- 观影页的「设置」下拉:图标按钮 + 永远贴右 ---- 用户明确要求(2026-10-01): · 去掉「设置」二字,只留**三条横线**图标(☰); · 在**所有页面都排在最右侧**(位置统一); · 点开后的每条条目,**文字前都要有图标**; · 除设置外,其它按钮都要**有颜色**,跟设置区分开。 贴右的做法:`margin-left:auto` 把它推到动作区最右端 —— 这样无论各页把片段 require 在 actions 的哪个位置(有的写在最前、有的写在最后),它都贴右, 不必逐页调顺序,也就不会有"某个页面漏了"的情况。 */ .movie-set { position: relative; margin-left: auto; } .movie-set > summary { list-style: none; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 6px; } .movie-set > summary::-webkit-details-marker { display: none; } .movie-set[open] > summary { border-color: var(--brand); color: var(--brand); } /* 方形图标按钮:只有图标、无文字。高度**必须**取 --act-h, 与「记一场电影」等实心按钮同高(那个高度由 --act-pad-y/--act-font/--act-line 推出)。 ⚠️ 别在这里另写一个数字(曾写死 40px,比文字按钮的 43.8px 矮了 3.8px,被用户连续投诉)。 */ .btn-icon { background: #fff; color: var(--ink); border: 1px solid var(--line); padding: 0 !important; width: var(--act-h); height: var(--act-h); min-width: var(--act-h); display: inline-flex; align-items: center; justify-content: center; line-height: 1; } .btn-icon:hover { color: var(--brand); border-color: var(--brand); } /* 底色交给统一段 */ .btn-icon svg { display: block; } /* 观影设置菜单:从右上角改成**按钮下方右对齐**(按钮贴右,菜单也贴右才不会跑出屏外) */ .movie-set .menu-list { left: auto; right: 0; top: calc(100% + 8px); } .movie-set .menu-list a { display: flex; align-items: center; gap: 10px; } .movie-set .menu-list a .mi { flex: 0 0 16px; color: var(--muted); } .movie-set .menu-list a:hover .mi, .movie-set .menu-list a.on .mi { color: currentColor; } .movie-set .menu-list a.on { color: var(--brand); background: var(--line-2); } /* ---- 日程页的设置下拉(v24 用户 2026-10-03 第 4、5 条)---- 它比观影/任务那个 ☰ 内容多:里面有个**表单**(默认视图 + 显示哪些本子)。 本子清单会随共享/新建变长,所以给列表一个最大高度 + 滚动, 否则菜单会顶出屏幕、底下的「保存」按钮够不着。 */ .cal-set .menu-list { min-width: 260px; max-width: min(320px, 92vw); } .cal-set-list { padding: 10px; gap: 0; } .cal-set-form { display: block; } .cal-set-block { padding: 6px 2px; } .cal-set-block + .cal-set-block { border-top: 1px solid var(--line-2); margin-top: 4px; } .cal-set-h { font-size: 12px; color: var(--muted); margin-bottom: 6px; } .cal-set-views { display: flex; gap: 12px; flex-wrap: wrap; } .cal-set-view { display: inline-flex; align-items: center; gap: 5px; font-size: 13px; cursor: pointer; } .cal-set-view input { accent-color: var(--brand); } /* 本子清单:最多占 42vh,超了内部滚动 —— 菜单本身不滚,否则保存按钮会被推出可视区 */ .cal-set-books { max-height: 42vh; overflow-y: auto; } .cal-set-book { display: flex; align-items: center; gap: 7px; padding: 5px 4px; font-size: 13px; cursor: pointer; border-radius: 6px; white-space: normal; } .cal-set-book:hover { background: var(--line-2); } .cal-set-book input { accent-color: var(--brand); flex: 0 0 auto; } .cal-set-book .color-preview { width: 11px; height: 11px; border-radius: 3px; flex: 0 0 auto; } .cal-set-book .cal-name { overflow: hidden; text-overflow: ellipsis; } .cal-set-book .node-badge { margin-left: auto; flex: 0 0 auto; } .cal-set-foot { margin-top: 10px; } .cal-set-foot .btn { width: 100%; justify-content: center; } .cal-set-links { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--line-2); } .cal-set-links a { display: flex; align-items: center; gap: 10px; white-space: normal; } .cal-set-links a .mi { flex: 0 0 16px; color: var(--muted); } .cal-set-links a:hover .mi { color: currentColor; } /* 点了日历空白处就建日程(能力保留,见 templates/calendar/index.php 的 data-new-at)。 🔴 v48(用户 2026-10-14 第 3 条):「现在鼠标放在视图上时,变成了一个十字。 我感觉这个没必要,不用有这样的变化。」 ⇒ **去掉十字光标**。原来给 `.rt-writable`(能写的人)挂 `cursor: crosshair` 是想"让人看出这里能点",但用户明确不要这个视觉变化。 ⚠️ 只删光标、**不删能力**:点击建日程的 JS 与 `data-new-at` 一律不动 (那是第 2 条要修好、而不是要撤掉的东西)。 ⚠️ 连 `.rt-writable` 类本身也留着 —— 它还被别处引用,且是"这个人能不能写" 这一状态在 DOM 上的标记位,删类名会牵连样式与断言。 */ .link-quiet { color: var(--muted); font-size: 14px; } .link-quiet:hover { color: var(--brand); } /* 长得像链接的**按钮**(v48)。`.link-quiet` 本来是给 / 写的, 直接套在