/* ========================================================================== 评论后台样式 —— 对齐 post.usj.cc(写作后台)的视觉语言 色板与度量照抄 write-server/src/app/globals.css 原则:可读性优先 · 暖白底 + 深蓝墨字(不是纯黑,降低长时间阅读的刺眼感) · 1px 细边框代替投影,只有弹层才用阴影 · 字号偏小但层级明确:11 / 12 / 13 / 15 / 22 · 圆角克制:6px(控件)/ 8px(卡片)/ 16px(登录卡) · 无装饰性动效,只保留 hover 的颜色过渡 ========================================================================== */ /* ---------------------------------------------------------- 色板 */ /* 参考 EWD 后台:白色侧栏 + 中性浅灰内容底 + 蓝色点缀 */ :root{ color-scheme: light; --bg:#f5f8f6; /* 内容区底 · 带一点绿意的浅灰 */ --surface:#edf2ee; /* 次级面 · hover / 代码底 */ --card:#ffffff; /* 卡片 / 侧栏 · 纯白 */ --text:#253830; /* 正文 · 深灰绿 */ --muted:#8b9a91; /* 次要文字 */ --line:#e3eae5; /* 分隔线 */ --accent:#2f9e63; /* 主色 · 清新绿 */ --accent-hover:#288a56; --danger:#d75a4a; --danger-hover:#c45151; --success:#39b86f; --warning:#c09a46; --on-accent:#fff; --accent-soft:rgba(47,158,99,.09); --accent-line:rgba(47,158,99,.20); --danger-soft:rgba(215,90,74,.10); --danger-line:rgba(215,90,74,.24); --ok-soft:rgba(57,184,111,.12); --pend-fg:#92400e; --pend-bg:#fef3c7; --pend-line:#fde68a; --err-fg:#991b1b; --err-bg:#fee2e2; --err-line:#fecaca; --shadow-card:0 1px 2px rgba(24,48,36,.04); --shadow-pop:0 12px 32px rgba(24,48,36,.16); --side-w:216px; --font:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; } /* 夜间模式:护眼向 —— 暖墨绿黑底、降对比、柔绿点缀,不用纯黑纯白 */ :root[data-theme="dark"]{ color-scheme: dark; --bg:#141916; /* 暖墨绿黑,比纯黑柔和 */ --surface:#1d2420; /* hover / 代码底 */ --card:#191f1b; /* 卡片 / 侧栏 */ --text:#d6ded7; /* 正文 · 柔白(不用纯白,降低刺眼感) */ --muted:#8fa093; /* 次要文字 · 灰绿 */ --line:#2a332c; /* 分隔线 · 低对比 */ --accent:#7cc9a0; /* 主色 · 柔和绿 */ --accent-hover:#98d8b4; --danger:#e39a8f; --danger-hover:#f0b6ad; --success:#8fd4a8; --warning:#e3c98f; /* 柔绿底上用深墨绿字,保证可读 */ --on-accent:#12241a; --accent-soft:rgba(124,201,160,.12); --accent-line:rgba(124,201,160,.28); --danger-soft:rgba(227,154,143,.13); --danger-line:rgba(227,154,143,.28); --ok-soft:rgba(143,212,168,.14); --pend-fg:#e3c98f; --pend-bg:rgba(227,201,143,.10); --pend-line:rgba(227,201,143,.26); --err-fg:#e39a8f; --err-bg:rgba(227,154,143,.10); --err-line:rgba(227,154,143,.26); --shadow-card:0 1px 2px rgba(0,0,0,.20); --shadow-pop:0 12px 32px rgba(0,0,0,.45); } /* ---------------------------------------------------------- 基础 */ *{box-sizing:border-box} /* 必须放最前面:.gate / .app / .modal 的 display 会盖掉 [hidden] 的 UA 样式 */ [hidden]{display:none!important} html,body{margin:0;padding:0;height:100%} body{ background:var(--bg); color:var(--text); font-family:var(--font); font-size:13px; line-height:1.65; -webkit-font-smoothing:antialiased; } h1,h2,h3,h4{margin:0;font-weight:700;line-height:1.4} a{color:var(--accent);text-decoration:none} a:hover{text-decoration:underline} ::selection{background:var(--accent-soft)} ::-webkit-scrollbar{width:6px;height:6px} ::-webkit-scrollbar-track{background:transparent} ::-webkit-scrollbar-thumb{background:var(--line);border-radius:3px} ::-webkit-scrollbar-thumb:hover{background:var(--muted)} *:focus-visible{outline:2px solid var(--accent);outline-offset:2px} .px{font-size:11px;letter-spacing:.04em;color:var(--muted);text-transform:uppercase} .mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace} /* ---------------------------------------------------------- 按钮 */ .btn{ display:inline-flex;align-items:center;justify-content:center;gap:6px; padding:7px 12px; font-family:inherit;font-size:12px;font-weight:500;line-height:1.4; color:var(--text); background:var(--card); border:1px solid var(--line); border-radius:6px; cursor:pointer;white-space:nowrap; transition:background-color .15s,color .15s,border-color .15s; } .btn:hover:not(:disabled){background:var(--surface);color:var(--accent);border-color:var(--accent-line)} .btn:disabled{opacity:.45;cursor:not-allowed} .btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:600} .btn.primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover);color:var(--on-accent)} .btn.danger:hover:not(:disabled){color:var(--danger);border-color:var(--danger-line);background:var(--danger-soft)} .btn.tiny{padding:5px 9px;font-size:11px} .btn.block{display:flex;width:100%;padding:9px 12px} .btn[data-busy]{opacity:.5;pointer-events:none} .icon-btn{ display:inline-flex;align-items:center;justify-content:center; width:28px;height:28px;padding:0; color:var(--muted);background:transparent; border:1px solid transparent;border-radius:6px; font-size:14px;line-height:1;cursor:pointer; transition:background-color .15s,color .15s; } .icon-btn:hover{background:var(--bg);color:var(--text)} /* ---------------------------------------------------------- 表单 */ input,select,textarea{ width:100%;padding:9px 11px; font-family:inherit;font-size:13px;color:var(--text); background:var(--bg); border:1px solid var(--line);border-radius:6px; outline:none; transition:border-color .15s; } input:focus,select:focus,textarea:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px var(--accent-soft)} input::placeholder,textarea::placeholder{color:var(--muted);opacity:.7} textarea{resize:vertical;min-height:88px;line-height:1.7} select{appearance:none;cursor:pointer;padding-right:28px; background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%); background-position:calc(100% - 15px) 50%,calc(100% - 10px) 50%; background-size:5px 5px,5px 5px;background-repeat:no-repeat; } .lbl{display:block;margin-bottom:6px;font-size:12px;font-weight:500;color:var(--text)} .field{display:block;margin-bottom:14px} .field-k{display:block;margin-bottom:6px;font-size:12px;font-weight:500;color:var(--text)} .alert{ padding:10px 13px;margin-bottom:16px; font-size:12px;line-height:1.6; color:var(--err-fg);background:var(--err-bg); border:1px solid var(--err-line);border-radius:6px; } .form-err{ margin:14px 0 0;padding:10px 13px; font-size:12px;color:var(--err-fg);background:var(--err-bg); border:1px solid var(--err-line);border-radius:6px; } /* ---------------------------------------------------------- 登录 */ /* 背景不做成"一张白纸",用两层柔光拉开纵深 —— 纯 CSS,零额外请求。 国内机版的后台是直连的,页面本身秒开,这里不引入任何图片。 */ .gate{ position:relative;min-height:100vh; display:flex;align-items:center;justify-content:center; padding:24px;background:var(--bg);overflow:hidden; } .gate::before,.gate::after{ content:'';position:absolute;pointer-events:none;border-radius:50%; } .gate::before{ width:560px;height:560px;left:50%;top:-200px;transform:translateX(-50%); background:radial-gradient(circle,var(--accent-soft),transparent 68%); } .gate::after{ width:440px;height:440px;right:-150px;bottom:-170px; background:radial-gradient(circle,var(--accent-soft),transparent 72%); } .login-card{ position:relative;z-index:1; width:100%;max-width:372px;padding:34px 32px 26px; background:var(--card); border:1px solid var(--line);border-radius:18px; box-shadow:0 1px 2px rgba(24,48,36,.04),0 18px 46px -20px rgba(24,48,36,.30); } /* 品牌行 —— 复用侧栏的「优」字标,视觉上前后统一 */ .login-brand{display:flex;align-items:center;gap:11px;margin-bottom:24px} .lb-mark{ display:flex;align-items:center;justify-content:center; width:38px;height:38px;flex:none;border-radius:11px; font-size:18px;font-weight:700;color:var(--on-accent); background:linear-gradient(145deg,var(--accent),var(--accent-hover)); box-shadow:0 6px 14px -7px var(--accent); } .lb-text{display:flex;flex-direction:column;line-height:1.4;min-width:0} .lb-text strong{font-size:14px;font-weight:600;color:var(--text)} .lb-text span{font-size:11px;color:var(--muted);letter-spacing:.02em} .login-head{margin-bottom:22px} .login-head h1{font-size:21px;font-weight:600;letter-spacing:-.01em;color:var(--text)} .login-head .sub{margin:6px 0 0;font-size:12px;line-height:1.6;color:var(--muted)} .login-card .field{margin-bottom:15px} .login-card .btn{margin-top:4px} .login-card .alert{margin-bottom:14px} /* 带图标的输入框 */ .lg-input{position:relative;display:flex;align-items:center} .lg-input>svg{ position:absolute;left:12px;width:15px;height:15px; color:var(--muted);pointer-events:none;transition:color .15s; } .lg-input input{ height:42px;padding:0 12px 0 36px;font-size:13px; background:var(--bg);border-radius:9px; } .lg-input input:focus{border-color:var(--accent);background:var(--card);box-shadow:0 0 0 3px var(--accent-soft)} .lg-input:focus-within>svg{color:var(--accent)} /* 有「显示密码」按钮的那一行,右边多让出 40px */ .lg-input.has-peek input{padding-right:40px} .lg-peek{ position:absolute;right:6px; display:flex;align-items:center;justify-content:center; width:30px;height:30px;padding:0; color:var(--muted);background:transparent; border:0;border-radius:7px;cursor:pointer; transition:color .15s,background-color .15s; } .lg-peek:hover{color:var(--accent);background:var(--accent-soft)} .lg-peek svg{width:15px;height:15px} .lg-opt{ margin-left:6px;padding:1px 6px;border-radius:20px; font-size:10px;font-weight:400;color:var(--muted); background:var(--surface);border:1px solid var(--line); } .lg-submit{ height:42px;margin-top:9px;border-radius:9px; font-size:13px;letter-spacing:.14em; box-shadow:0 9px 20px -12px var(--accent); } .lg-submit:hover:not(:disabled){box-shadow:0 11px 24px -12px var(--accent)} .login-foot{ display:flex;align-items:center;justify-content:center;gap:7px; margin-top:22px;padding-top:16px; border-top:1px solid var(--line); font-size:11px;color:var(--muted); } .lg-dot{width:5px;height:5px;border-radius:50%;background:var(--success);flex:none} /* ---------------------------------------------------------- 主框架 */ .app{display:flex;min-height:100vh;background:var(--bg)} .sidebar{ width:var(--side-w);flex:none; display:flex;flex-direction:column; background:var(--card); border-right:1px solid var(--line); position:fixed;inset:0 auto 0 0;z-index:50; } .side-head{ display:flex;align-items:center;gap:10px; padding:16px 16px 14px; border-bottom:1px solid var(--line); } .logo{ flex:none;width:30px;height:30px; display:flex;align-items:center;justify-content:center; background:var(--accent);color:var(--on-accent); font-size:14px;font-weight:700;border-radius:8px; } .side-tt h1{font-size:14px;color:var(--text);letter-spacing:.02em} .side-tt p{margin:0;font-size:11px;color:var(--muted)} .side-nav{flex:1;padding:10px;display:flex;flex-direction:column;gap:2px;overflow-y:auto} .tab{ display:flex;align-items:center;gap:10px;width:100%; padding:8px 11px; font-family:inherit;font-size:13px;font-weight:400;text-align:left; color:var(--text);background:transparent; border:0;border-radius:7px;cursor:pointer; transition:background-color .15s,color .15s; } .tab svg{flex:none;opacity:.75} .tab:hover{background:var(--surface);color:var(--accent)} .tab.on{background:var(--accent-soft);color:var(--accent);font-weight:500} .tab.on:hover{background:var(--accent-soft);color:var(--accent)} .tab.on svg{opacity:1} .tab .n{ margin-left:auto;padding:1px 6px; font-size:10px;line-height:1.5; background:var(--danger);color:#fff;border-radius:999px; } .tab.on .n{background:var(--danger);color:#fff} .nav-group{ padding:12px 11px 4px; font-size:10.5px;font-weight:600;letter-spacing:.6px; color:var(--muted); } .nav-sep{height:1px;margin:6px 8px;background:var(--line)} .side-foot{padding:10px 12px 12px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:2px} .sfoot-btn{ display:flex;align-items:center;gap:9px;width:100%; padding:7px 10px; font-family:inherit;font-size:12px;color:var(--muted); background:transparent;border:0;border-radius:7px;cursor:pointer; transition:background-color .15s,color .15s; } .sfoot-btn:hover{background:var(--surface);color:var(--accent)} .main{ flex:1;min-width:0;margin-left:var(--side-w); display:flex;flex-direction:column; padding:0 28px; } /* 顶栏:面包屑 + 登录身份 */ .topbar{ position:sticky;top:0;z-index:30; margin:0 -28px;padding:13px 28px; display:flex;align-items:center;gap:10px; background:var(--card); border-bottom:1px solid var(--line); } .crumb{display:flex;align-items:center;gap:7px;font-size:13px} .crumb .cg{color:var(--muted)} .crumb .sp{color:var(--line)} .crumb .pg{color:var(--text);font-weight:500} .top-right{margin-left:auto} .side-name{font-size:12px;color:var(--muted)} #view{padding-top:22px} .mobile-bar{display:none} .scrim{display:none} .foot{ margin-top:auto;padding:20px 0 24px; display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap; font-size:11px;color:var(--muted); } /* ---------------------------------------------------------- 页头 */ .page-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:0 0 18px} .page-head h2{font-size:18px} .page-head .sub{font-size:12px;color:var(--muted)} .page-head .right{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap} /* ---------------------------------------------------------- 卡片 */ .card{ background:var(--card); border:1px solid var(--line);border-radius:8px; box-shadow:var(--shadow-card); overflow:hidden; } .card-head{ display:flex;align-items:center;gap:8px; padding:12px 16px;border-bottom:1px solid var(--line); } .card-head h3{font-size:13px;font-weight:700} .card-body{padding:16px} /* ---------------------------------------------------------- 统计卡 */ .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px} .stat{ padding:16px;text-align:center; background:var(--card); border:1px solid var(--line);border-radius:8px; } .stat .k{font-size:11px;color:var(--muted);margin-bottom:4px} .stat .v{font-size:22px;font-weight:700;line-height:1.3;color:var(--accent)} .stat .x{margin-top:2px;font-size:11px;color:var(--muted)} .grid2{display:grid;grid-template-columns:1.3fr 1fr;gap:14px;margin-top:14px;align-items:start} /* ---------------------------------------------------------- 小列表 */ .mini{display:flex;flex-direction:column} .mini-i{ display:flex;align-items:baseline;gap:10px; padding:8px 0;border-bottom:1px solid var(--line); font-size:13px; } .mini-i:last-child{border-bottom:0} .mini-i .n{flex:none;width:62px;font-size:11px;color:var(--muted);white-space:nowrap} .mini-i .b{flex:1;min-width:0} .mini-i .b .nm{font-weight:500} .mini-i .b .tx{margin-left:6px;font-size:12px;color:var(--muted)} .mini-i .c{flex:none;font-weight:500;color:var(--accent)} /* ---------------------------------------------------------- 标签 */ .tag{ display:inline-block;padding:1px 6px; font-size:10px;line-height:1.6;border-radius:4px; white-space:nowrap; } .tag.acc{color:var(--accent);background:var(--accent-soft)} .tag.pink{color:var(--accent);background:var(--accent-soft)} .tag.blue{color:var(--accent);background:var(--accent-soft)} .tag.warn{color:var(--pend-fg);background:var(--pend-bg)} .tag.dang{color:var(--danger);background:var(--danger-soft)} /* SSL 管理员徽章:故意用与「编辑」不同的色(编辑是中性、管理员是主色), 一眼能分清这是第三种角色而不是某个管理员的临时标记 */ .tag.ssl{color:var(--warning);background:rgba(192,154,70,.14)} .tag.line{color:var(--muted);border:1px solid var(--line)} /* ---------------------------------------------------------- 评论列表 */ .ctool{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:14px} .ctool .grow{flex:1;min-width:180px} .ctool input,.ctool select{height:36px;padding-top:0;padding-bottom:0} .clist{display:flex;flex-direction:column;gap:8px} .citem{ padding:14px 16px; background:var(--card); border:1px solid var(--line);border-radius:10px; transition:border-color .15s; } .citem:hover{border-color:var(--accent-line)} .citem.pend{border-left:3px solid var(--warning)} .citem.pin{border-left:3px solid var(--accent)} .citem.hid{opacity:.55} /* 头像 + 内容 横排;回复嵌套画树状线,不用 margin hack */ .crow{display:flex;gap:12px;align-items:flex-start} .cavatar{ flex:none;width:38px;height:38px; border-radius:50%;object-fit:cover; background:var(--surface); border:1px solid var(--line); } .cmain{flex:1;min-width:0} .chead{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:5px} .chead .nick{font-size:13px;font-weight:600} .chead .t{margin-left:auto;font-size:11px;color:var(--muted);white-space:nowrap} .cbody{ font-size:14px;line-height:1.75;color:var(--text); word-break:break-word;white-space:pre-wrap; } .cbody .ph{color:var(--muted)} .creplies{ margin-top:11px;padding-left:14px; border-left:2px solid var(--line); display:flex;flex-direction:column;gap:8px; } .creplies .citem{background:var(--bg);border-radius:8px} .creplies .citem.pend{border-left-color:var(--warning)} .creplies .citem.pin{border-left-color:var(--accent)} .cfoot{ display:flex;align-items:center;gap:10px;flex-wrap:wrap; margin-top:9px;padding-top:9px; border-top:1px solid var(--line); font-size:11px;color:var(--muted); } .cfoot a{color:var(--muted)} .cfoot a:hover{color:var(--accent)} .cfoot .acts{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap} /* ---------------------------------------------------------- 表格 */ .tblwrap{ background:var(--card); border:1px solid var(--line);border-radius:8px; overflow-x:auto; } table{width:100%;border-collapse:collapse;font-size:13px;min-width:620px} thead th{ padding:10px 14px;text-align:left; font-size:11px;font-weight:500;color:var(--muted); border-bottom:1px solid var(--line);white-space:nowrap; } tbody td{padding:11px 14px;border-bottom:1px solid var(--line);vertical-align:middle} tbody tr:last-child td{border-bottom:0} tbody tr:hover{background:var(--surface)} td.num,th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap} td .lk{font-size:12px;color:var(--muted)} .ell{display:block;max-width:340px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} /* ---------------------------------------------------------- 分页 */ .pager{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;margin:20px 0 4px} .pager .info{font-size:12px;color:var(--muted)} .pager .info b{color:var(--text);font-weight:600} /* ---------------------------------------------------------- 空态 / 加载 */ .empty{ padding:48px 20px;text-align:center; font-size:13px;color:var(--muted); background:var(--card); border:1px dashed var(--line);border-radius:8px; } .empty b{display:block;margin-bottom:6px;font-size:12px;color:var(--text)} .loading{padding:40px;text-align:center;font-size:13px;color:var(--muted)} /* ---------------------------------------------------------- 键值表 */ .kv{display:grid;grid-template-columns:auto 1fr;gap:9px 18px;margin:0;font-size:13px} .kv dt{font-size:12px;color:var(--muted)} .kv dd{margin:0;word-break:break-all} .kv dd.ok{color:var(--success);font-weight:500} .kv dd.bad{color:var(--danger)} pre.code{ margin:0;padding:14px; background:var(--surface);color:var(--text); border:1px solid var(--line);border-radius:6px; font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:12px;line-height:1.7; overflow:auto;max-height:320px;white-space:pre; } textarea.code{ display:block;margin:0;padding:14px; background:var(--surface);color:var(--text); border:1px solid var(--line);border-radius:6px; font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:12px;line-height:1.7; white-space:pre;tab-size:2; } textarea.code:focus{outline:none;border-color:var(--accent)} /* ---------------------------------------------------------- 提示 / 模态 */ .toast{ position:fixed;left:50%;bottom:24px;transform:translateX(-50%); z-index:600;max-width:86vw; padding:10px 16px; font-size:13px; color:var(--text);background:var(--card); border:1px solid var(--line);border-radius:8px; box-shadow:var(--shadow-pop); } .toast.bad{color:var(--danger);border-color:var(--danger-line)} .modal{ position:fixed;inset:0;z-index:500; display:flex;align-items:center;justify-content:center;padding:20px; background:rgba(24,48,36,.30); backdrop-filter:blur(2px); } :root[data-theme="dark"] .modal{background:rgba(0,0,0,.55)} .modal-card{ width:100%;max-width:520px;max-height:86vh; display:flex;flex-direction:column; background:var(--card); border:1px solid var(--line);border-radius:12px; box-shadow:var(--shadow-pop); } .modal-head{ display:flex;align-items:center;gap:10px; padding:14px 18px;border-bottom:1px solid var(--line); } .modal-head h3{flex:1;font-size:14px;font-weight:700} .modal-body{padding:18px;overflow-y:auto} /* ---------------------------------------------------------- 文章编辑 */ /* 列表行里的标题:可点,悬停才显色 */ .po-t{color:var(--text);font-weight:500;cursor:pointer} .po-t:hover{color:var(--accent);text-decoration:underline;text-underline-offset:2px} .po-meta{display:flex;gap:5px;flex-wrap:wrap;align-items:center;margin-top:4px} .po-meta:empty{display:none} /* 编辑器头部的线上地址 + 真实文件路径 */ .po-url{ display:flex;align-items:baseline;gap:12px;flex-wrap:wrap; margin:-6px 0 14px;font-size:12px;color:var(--muted); } .po-url .lk{color:var(--accent)} .po-file{ margin-left:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:11px;color:var(--muted);word-break:break-all; } /* 两列字段 */ .po-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px} .po-grid .field:last-child{margin-bottom:14px} .po-ck{ display:flex;align-items:center;gap:8px; margin:2px 0 4px;font-size:13px;color:var(--text);cursor:pointer; } /* 只读的「其他字段」—— 平时收着,别喧宾夺主 */ .po-ro{ margin-top:14px;padding:11px 13px; background:var(--surface);border:1px solid var(--line);border-radius:6px; font-size:12px; } .po-ro-k{display:block;margin-bottom:8px;color:var(--muted)} .po-ro-i{display:flex;align-items:baseline;gap:10px;padding:3px 0} .po-ro-i code{ flex:none;min-width:118px; font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:11px;color:var(--accent); } .po-ro-i .t{flex:none;font-size:11px;color:var(--muted)} .po-ro-i .v{ flex:1;min-width:0;color:var(--muted); overflow:hidden;text-overflow:ellipsis;white-space:nowrap; } /* 正文编辑区:等宽 + 够高,写 Markdown 才不憋屈(14px/1.75 对齐 write-server 的阅读密度) */ .po-body{ min-height:52vh; font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace; font-size:14px;line-height:1.75; tab-size:2; } .po-hint{margin-left:auto;font-size:11px;color:var(--muted);font-weight:400} .po-foot{ display:flex;align-items:center;gap:12px;flex-wrap:wrap; margin-top:10px;font-size:12px;color:var(--muted); } .po-kbd{margin-left:auto;font-size:11px;color:var(--muted)} /* 文章列表:write-server 式卡片行(标题可点 + hover 出操作) */ .tag.ok{color:var(--success);background:rgba(57,184,111,.13)} .po-list{display:flex;flex-direction:column;gap:8px} .po-row{ display:flex;align-items:center;gap:14px; padding:12px 16px;background:var(--card); border:1px solid var(--line);border-radius:8px; transition:border-color .15s; } .po-row:hover{border-color:var(--accent)} .po-main{flex:1;min-width:0} .po-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap} .po-sub{margin-top:3px;font-size:12px;color:var(--muted)} .po-acts{display:flex;gap:2px;flex:none} .po-ic{ display:inline-flex;align-items:center;justify-content:center; width:30px;height:30px; border:none;border-radius:6px;cursor:pointer; background:transparent;color:var(--muted);text-decoration:none; transition:background .15s,color .15s; } .po-ic:hover{background:var(--surface);color:var(--accent)} .po-ic.danger:hover{color:var(--danger)} @media (min-width:861px){ .po-acts{opacity:0;transition:opacity .15s} .po-row:hover .po-acts,.po-row:focus-within .po-acts{opacity:1} } /* 编辑器:紧凑表单(对齐 write-server 的行式布局) */ .po-frow{display:grid;grid-template-columns:1fr 240px;gap:0 14px} .po-frow4{display:grid;grid-template-columns:180px 150px 110px 1fr;gap:0 14px} .po-frow .field,.po-frow4 .field{margin-bottom:12px} .po-folder{margin:-4px 0 12px;font-size:11px;color:var(--muted);word-break:break-all} /* 编辑器两栏:左主编辑 + 右快捷插入(对齐 write-server 的撰写页) */ .po-grid{display:grid;grid-template-columns:minmax(0,1fr) 196px;gap:16px;align-items:start} .po-side-t{margin:2px 0 8px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)} .po-sc{ display:flex;flex-direction:column;gap:2px;padding:6px; background:var(--card);border:1px solid var(--line);border-radius:8px; } .po-sc-b{ display:flex;align-items:center;gap:9px;width:100%; padding:7px 9px;border:none;border-radius:6px; background:transparent;cursor:pointer;text-align:left; font-size:12px;color:var(--text);opacity:.75; transition:background .15s,color .15s,opacity .15s; } .po-sc-b:hover{background:var(--surface);color:var(--accent);opacity:1} .po-sc-b .g{ flex:none;width:18px;text-align:center; font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:11px;color:var(--muted); } .po-sc-b:hover .g{color:var(--accent)} .po-note{ margin-top:14px;padding:10px 12px; background:var(--surface);border:1px solid var(--line);border-radius:8px; font-size:11px;color:var(--muted);line-height:1.7; } .po-note h4{margin:0 0 6px;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)} .po-note ul{margin:0;padding-left:14px} /* 设置页:schema 驱动的表单 */ .sf-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 18px} .sf-item{margin-bottom:12px;min-width:0} .sf-hint{display:block;margin-top:4px;font-size:11px;color:var(--muted)} .sf-ck{margin:0} .sf-em{font-style:normal;font-size:11px;color:var(--muted)} .sf-adv{font-size:13px;color:var(--muted)} .sf-adv summary{cursor:pointer;user-select:none} .sf-adv summary:hover{color:var(--text)} @media (max-width:1000px){ .stats{grid-template-columns:repeat(2,1fr)} .grid2{grid-template-columns:1fr} .main{padding:0 20px} .topbar{margin:0 -20px;padding:13px 20px} .po-grid{grid-template-columns:1fr} .po-frow,.po-frow4{grid-template-columns:1fr} .sf-grid{grid-template-columns:1fr} .po-ro-i code{min-width:90px} } @media (max-width:760px){ .mobile-bar{ display:flex;align-items:center;gap:8px; position:sticky;top:0;z-index:40; height:48px;padding:0 12px; background:var(--card);border-bottom:1px solid var(--line); } .mobile-title{font-size:13px;font-weight:700;color:var(--accent)} .scrim{display:block;position:fixed;inset:0;z-index:45;background:rgba(18,30,23,.32)} :root[data-theme="dark"] .scrim{background:rgba(0,0,0,.5)} .sidebar{ width:78%;max-width:280px; transform:translateX(-100%); transition:transform .2s ease-out; box-shadow:var(--shadow-pop); } .sidebar.open{transform:translateX(0)} .main{margin-left:0;padding:0 16px} .topbar{margin:0 -16px;padding:12px 16px;top:48px} #view{padding-top:16px} .stats{grid-template-columns:1fr 1fr;gap:10px} .stat{padding:13px 10px} .stat .v{font-size:19px} .cavatar{width:32px;height:32px} .ell{max-width:170px} .page-head h2{font-size:16px} .login-card{padding:26px 22px} } @media (prefers-reduced-motion:reduce){ *{transition:none!important} }