/* ============================================================
   theme-contract.css — 全站自定义 UI 设计令牌契约（单一事实源）
   ------------------------------------------------------------
   背景：站内长期并存两族 token，命名不同，从不冲突，因此从未被收敛：
     甲族 A = --primary / --radius / --duration（teal #0E7C7B）
              → 已由 tokens-authoritative.css 收敛
     乙族 B = --c-*（gold #E8A33D）
              → 从未收敛，散落在各模板内联 <style> 里各复制一份
                （content/docs.php 21 个 / content/status.php 27 个 /
                  home/index.php 36 个，三份已漂移）

   本文件做的事：把乙族 B 收成唯一契约，并补齐 light / dark 双主题。
   页面今后「只消费、不定义」——禁止再在模板里新立 --c-* 声明。

   取值来源（全部实证，非杜撰）：
     · dark 主题：线上首页 :root 块 + R15 设计稿 470 页扫描（零漂移）
     · light 主题：线上首页 :root[data-theme="light"] 块
     · 未被两处覆盖的令牌，按站内既有 alpha 反转范式推导
       （dark rgba(255,255,255,α) ↔ light rgba(0,0,0,α)，该范式由现有代码确立）

   加载位置：layout.php 中 tokens.css 之后（紧随 tokens-authoritative.css）
   切换机制：已有 theme.js（localStorage key = tiance-theme）+ meta.php 防闪烁脚本
   ============================================================ */

/* ── 暗色（默认主题，也是 R15 设计稿口径） ── */
:root,
:root[data-theme="dark"] {
    /* 底 */
    --c-bg:                 #0A0A0F;
    --c-bg-2:               #0F0F16;
    --c-bg-3:               #13131C;
    --c-bg-card:            rgba(255, 255, 255, 0.03);
    --c-card:               rgba(255, 255, 255, 0.03);
    --c-bg-nav:             rgba(10, 10, 15, 0.92);
    --nav-bg:               rgba(10, 10, 15, 0.82);

    /* 字 */
    --c-ink:                #FFFFFF;
    --c-ink-2:              #A0A0A0;
    --c-ink-3:              #555555;
    --c-ink-row:            rgba(255, 255, 255, 0.02);
    --c-ink-hover:          rgba(255, 255, 255, 0.04);
    --hero-sub:             #B8C2D0;
    --shot-date:            #C8C8C8;

    /* 主色（gold） */
    --c-gold:               #E8A33D;
    --c-gold-2:             #EBA648;
    --c-gold-d:             #C77E1F;
    --c-gold-deep:          #C77E1F;
    --c-gold-soft:          rgba(232, 163, 61, 0.12);
    --c-gold-tint:          rgba(232, 163, 61, 0.08);
    --c-gold-line:          rgba(232, 163, 61, 0.4);
    --c-gold-line-strong:   rgba(232, 163, 61, 0.5);
    --c-gold-shadow:        rgba(232, 163, 61, 0.3);
    --c-on-accent:          #0A0A0F;
    --btn-gold-ink:         #0A0A0F;
    --btn-gold-hover:       #EBA648;

    /* 状态 */
    --c-ok:                 #2E9E5B;
    --c-ok-tint:            rgba(46, 158, 91, 0.08);
    --c-ok-line:            rgba(46, 158, 91, 0.4);
    --c-err:                #D64545;
    --c-err-focus:          rgba(214, 69, 69, 0.15);
    --c-warn:               #E8A33D;

    /* 线面 */
    --c-border:             rgba(255, 255, 255, 0.08);
    --divider:              rgba(255, 255, 255, 0.05);
    --badge-bg:             rgba(255, 255, 255, 0.04);
    --tag-bg:               rgba(10, 10, 15, 0.78);
    --icon-bg:              rgba(255, 255, 255, 0.05);
    --ghost-border-hover:   rgba(255, 255, 255, 0.2);

    /* 光效 */
    --glow:                 0 0 0 1px rgba(255, 255, 255, 0.06), 0 8px 24px rgba(0, 0, 0, 0.5);
    --hero-glow:            radial-gradient(ellipse at center, rgba(232, 163, 61, 0.07), transparent 65%);
    --tance-glow:           radial-gradient(ellipse at center, rgba(232, 163, 61, 0.06), transparent 70%);
    --cta-glow:             radial-gradient(ellipse at center, rgba(232, 163, 61, 0.08), transparent 65%);
    --gold-grad:            linear-gradient(135deg, var(--c-gold), var(--c-gold-deep));
    --img-filter:           brightness(1.02) contrast(1.03);
    --card-hi:              inset 0 1px 0 rgba(255, 255, 255, 0.06);

    /* 浏览器示意点 */
    --browser-dot-r:        #FCA5A5;
    --browser-dot-y:        #FCD34D;
    --browser-dot-g:        #6EE7B7;

    /* 几何与字体（两主题共用，此处随暗色一并声明，light 块不重复） */
    --r-lg:                 12px;
    --r-md:                 8px;
    --r-sm:                 8px;
    --font-h:               "HarmonyOS Sans SC", "Source Han Sans SC", "MiSans", "PingFang SC", "Microsoft YaHei", sans-serif;
    --font-b:               "HarmonyOS Sans SC", "Source Han Sans SC", "MiSans", "PingFang SC", "Microsoft YaHei", sans-serif;
    --font-m:               "JetBrains Mono", "SF Mono", "Roboto Mono", ui-monospace, monospace;
}

/* ── 亮色 ── */
:root[data-theme="light"] {
    /* 底 */
    --c-bg:                 #F7F8F7;
    --c-bg-2:               #FFFFFF;
    --c-bg-3:               #EFF1EF;
    --c-bg-card:            rgba(0, 0, 0, 0.02);
    --c-card:               rgba(0, 0, 0, 0.02);
    --c-bg-nav:             rgba(247, 248, 247, 0.92);
    --nav-bg:               rgba(247, 248, 247, 0.85);

    /* 字 */
    --c-ink:                #1A1A1A;
    --c-ink-2:              #4A4A4A;
    --c-ink-3:              #8A8A8A;
    --c-ink-row:            rgba(0, 0, 0, 0.02);
    --c-ink-hover:          rgba(0, 0, 0, 0.04);
    --hero-sub:             #4A4A4A;
    --shot-date:            #6A6A6A;

    /* 主色（亮底下的 gold 加深以保证对比度，取自线上既有值） */
    --c-gold:               #C77E1F;
    --c-gold-2:             #B56F1A;
    --c-gold-d:             #A3631A;
    --c-gold-deep:          #A3631A;
    --c-gold-soft:          rgba(199, 126, 31, 0.12);
    --c-gold-tint:          rgba(199, 126, 31, 0.08);
    --c-gold-line:          rgba(199, 126, 31, 0.4);
    --c-gold-line-strong:   rgba(199, 126, 31, 0.5);
    --c-gold-shadow:        rgba(199, 126, 31, 0.3);
    --c-on-accent:          #FFFFFF;
    --btn-gold-ink:         #FFFFFF;
    --btn-gold-hover:       #B56F1A;

    /* 状态（亮底加深） */
    --c-ok:                 #1F7A45;
    --c-ok-tint:            rgba(31, 122, 69, 0.08);
    --c-ok-line:            rgba(31, 122, 69, 0.4);
    --c-err:                #C0342F;
    --c-err-focus:          rgba(192, 52, 47, 0.15);
    --c-warn:               #C77E1F;

    /* 线面 */
    --c-border:             rgba(0, 0, 0, 0.08);
    --divider:              rgba(0, 0, 0, 0.06);
    --badge-bg:             rgba(0, 0, 0, 0.03);
    --tag-bg:               rgba(255, 255, 255, 0.88);
    --icon-bg:              rgba(0, 0, 0, 0.04);
    --ghost-border-hover:   rgba(0, 0, 0, 0.2);

    /* 光效 */
    --glow:                 0 0 0 1px rgba(0, 0, 0, 0.04), 0 8px 24px rgba(0, 0, 0, 0.06);
    --hero-glow:            radial-gradient(ellipse at center, rgba(199, 126, 31, 0.09), transparent 65%);
    --tance-glow:           radial-gradient(ellipse at center, rgba(199, 126, 31, 0.08), transparent 70%);
    --cta-glow:             radial-gradient(ellipse at center, rgba(199, 126, 31, 0.10), transparent 65%);
    --img-filter:           brightness(1.0) contrast(1.0);
    --card-hi:              inset 0 1px 0 rgba(255, 255, 255, 0.7);
}

/* ── 跟随系统偏好（用户未显式选择时） ──
   theme.js 与 meta.php 已把解析结果写入 data-theme，
   此处仅兜底「脚本未执行」的场景，避免首屏停在暗色默认值。 */
@media (prefers-color-scheme: light) {
    :root:not([data-theme="dark"]) {
        --c-bg: #F7F8F7;
        --c-bg-2: #FFFFFF;
        --c-bg-3: #EFF1EF;
        --c-ink: #1A1A1A;
        --c-ink-2: #4A4A4A;
        --c-ink-3: #8A8A8A;
        --c-border: rgba(0, 0, 0, 0.08);
    }
}

/* ============================================================
   ── 动效层（本轮补入契约） ──
   背景：动效 token 原先只在 tokens-authoritative.css，而它**只被走 layout 的页引用**；
        免壳页引的是本契约 ⇒ 免壳页消费 --duration-* 只能吃 fallback，拿不到 reduced-motion 降级。
   口径：与 tokens-authoritative.css 保持一致，不另立值。
   纪律：页面**只消费不定义**；prefers-reduced-motion 在**本文件内**降级，
        使"用了 token 的页面"自动获得无障碍瞬时化。
   ============================================================ */
:root,
:root[data-theme="dark"],
:root[data-theme="light"] {
    --duration-instant: 80ms;
    --duration-fast:    100ms;
    --duration-normal:  200ms;
    --duration-slow:    300ms;
    --duration-slower:  400ms;
    --duration-slowest: 600ms;

    --ease-standard:  cubic-bezier(0.2, 0, 0, 1);
    --ease-default:   cubic-bezier(0.4, 0, 0.2, 1);
    --ease-in:        cubic-bezier(0.55, 0, 1, 0.45);
    --ease-out:       cubic-bezier(0.16, 1, 0.3, 1);
    --ease-in-out:    cubic-bezier(0.65, 0, 0.35, 1);
}
/* 无障碍：减弱动画偏好 —— token 级降级，消费方的 transition/animation 自动瞬时化 */
@media (prefers-reduced-motion: reduce) {
    :root {
        --duration-instant: 0ms;
        --duration-fast:    0ms;
        --duration-normal:  0ms;
        --duration-slow:    0ms;
        --duration-slower:  0ms;
        --duration-slowest: 0ms;
        --ease-standard: linear;
        --ease-default:  linear;
        --ease-in:       linear;
        --ease-out:      linear;
        --ease-in-out:   linear;
    }
}
