/* ========================================================================== vibevideo — brand tokens -------------------------------------------------------------------------- 每个组件必须引用这个文件。所有尺寸写成 calc(N * var(--u)) 的形式, 不要写死 px —— 这是横屏/竖屏/任意分辨率都能共用同一个组件的前提。 ========================================================================== */ :root { /* --- 画布尺寸(由 hv build 写进 assets/canvas.css,随 aspect 变) --- --stage-w / --stage-h: 舞台宽高,无单位数字。 用到 width/height 时记得补 * 1px,否则是非法值会被浏览器丢掉。 --u: 基准单位 = 短边 / 1080,所以 1080p 横竖都是 1px,缩放安全 */ --stage-w: 1920; --stage-h: 1080; --u: calc(min(var(--stage-w), var(--stage-h)) / 1080 * 1px); /* 面板宽度:横屏取宽边的 88%,竖屏取宽边的 88%,但不超过高的 1.35 倍, 这样代码在两种画幅下都不会挤成一条。 */ --panel-w: calc(min(var(--stage-w) * 0.88, var(--stage-h) * 1.35) * 1px); /* --- 色板:暗色技术风 --- */ --bg: #0a0a0c; --bg-elevated: #131317; --surface: #16161b; --surface-2: #1c1c22; --border: #26262e; --border-strong: #34343f; --text: #ededf0; --text-dim: #a1a1ad; --text-faint: #7d7d8a; --text-ghost: #6a6a78; --accent: #d97757; /* 强调色,暖陶土 */ --accent-dim: #8f4c37; --accent-glow: rgba(217, 119, 87, 0.18); /* 语义色 */ --ok: #7fb069; --warn: #e5a54b; --err: #e06c6c; --info: #6ba3d6; /* --- 代码高亮 --- */ --syn-plain: #d4d4dc; --syn-comment: #5d5d6b; --syn-keyword: #c98fdb; --syn-string: #9ece6a; --syn-number: #ff9e64; --syn-func: #7aa2f7; --syn-type: #7dcfff; --syn-punct: #8b8b99; --syn-var: #e0af68; /* --- 字体:优先系统已装,回退链保证可移植 --- */ --font-sans: "Inter", "Noto Sans CJK SC", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; --font-mono: "JetBrainsMono Nerd Font Mono", "JetBrains Mono", "DejaVu Sans Mono", Menlo, Consolas, monospace; /* --- 动效基准时长(秒)--- */ --d-fast: 0.18; --d-base: 0.32; --d-slow: 0.55; } /* 竖屏时留更多安全边距 */ :root[data-aspect="portrait"] { --pad-x: calc(96 * var(--u)); --pad-y: calc(160 * var(--u)); } :root:not([data-aspect="portrait"]) { --pad-x: calc(120 * var(--u)); --pad-y: calc(96 * var(--u)); }