:root {
  /* 核心 token（锁定，与执法监管系统 V1.31 一致） */
  --bg: #ffffff;
  --surface: #f5f5f7;
  --surface-warm: #fbfbfd;
  --fg: #1d1d1f;
  --fg-2: #424245;
  --muted: #6e6e73;
  --meta: #86868b;
  --border: #d2d2d7;
  --border-soft: #e8e8ed;
  --accent: #0071e3;
  --accent-on: #ffffff;
  --accent-hover: #0077ed; /* 锁定保留，界面不引用 */
  --accent-active: #0066cc;
  --success: #16a34a;
  --warn: #eab308;
  --danger: #dc2626;

  /* 派生 token（公式锁定）：此处为按公式预计算的静态值，供不支持 color-mix() 的环境回退；
     公式见文末 @supports，是唯一事实源，改核心 token 或公式时同步重算静态值。 */
  --glass-bg: rgba(255, 255, 255, 0.6);
  --glass-bg-strong: rgba(255, 255, 255, 0.8);
  --glass-border: rgba(227, 227, 228, 0.83);
  --glass-shadow: 0 14px 36px rgba(29, 29, 31, 0.16);
  --glass-shadow-sm: 0 5px 18px rgba(29, 29, 31, 0.11);
  --accent-soft: rgba(0, 113, 227, 0.12);
  --accent-ink: #005bb6;
  --accent-glass-ink: #254c96;
  --focus-ring: 0 0 0 4px rgba(0, 113, 227, 0.35);
  --scrim: rgba(29, 29, 31, 0.24);
  --control-focus-border: #5c5c60; /* = color-mix(in oklch, --fg 58%, --bg) 的静态回退（D-01 指针聚焦描边，对 --fill-soft 与 --bg 均 ≥3:1） */
  --success-soft: rgba(22, 163, 74, 0.13);
  --success-ink: #085b26;
  --warn-soft: rgba(234, 179, 8, 0.18);
  --warn-ink: #654b01;
  --danger-soft: rgba(220, 38, 38, 0.11);
  --danger-ink: #bf2020;
  --fg-soft: rgba(29, 29, 31, 0.05);
  --fill-soft: #f2f2f2;
  --fill-accent-soft: #e8f1fe;
  --fill-success-soft: #ebf6ed;
  --fill-warn-soft: #fdf6e9;
  --fill-danger-soft: #fff0ee;
  --dashboard-card-bg: #fbfbfc;

  /* 字体与字号（px ÷ 16 = rem） */
  --font-display: "SF Pro Display","SF Pro Icons","PingFang SC","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;
  --font-body: "SF Pro Text","SF Pro Icons","PingFang SC","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;
  --font-mono: "SF Mono",ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;
  --text-page-title: 1.75rem;     /* 28px */
  --text-dialog-title: 1.1875rem; /* 19px */
  --text-card-title: 0.9375rem;   /* 15px */
  --text-kpi: 2.125rem;           /* 34px */
  --text-body: 0.9375rem;         /* 15px */
  --text-table: 0.84375rem;       /* 13.5px */
  --text-caption: 0.78125rem;     /* 12.5px */
  --text-label: 0.75rem;          /* 12px */

  /* 间距、圆角、阴影与动效 */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 20px;
  --space-6: 24px;
  --space-8: 32px;
  --space-12: 48px;
  --radius-sm: 8px;
  --radius-md: 12px;
  --radius-lg: 18px;
  --radius-panel: 22px;
  --radius-pill: 980px;
  --elev-flat: none;
  --elev-ring: 0 0 0 1px var(--border);
  --motion-fast: 150ms;
  --motion-base: 220ms;
  --ease-standard: cubic-bezier(0.28, 0, 0.22, 1);
  --ease-exit: cubic-bezier(0.78, 0, 0.72, 1);

  /* 五段阶段色；正在／已与监管表达已于 2026-10-19 经 P3 确认冻结。 */
  --map-tier-none: #97A1AE;
  --map-tier-none-fill: rgba(151, 161, 174, 0.4);
  --map-tier-none-line: #7E8B9C;
  --map-tier-none-soft: #EEF1F5;
  --map-tier-none-ink: #5C6B7E;
  --map-tier-acquired: #E06D12;
  --map-tier-acquired-fill: rgba(224, 109, 18, 0.55);
  --map-tier-acquired-line: #B85408;
  --map-tier-acquired-soft: #FBEADB;
  --map-tier-acquired-ink: #9C4A08;
  --map-tier-converted: #EFC93B;
  --map-tier-converted-fill: rgba(239, 201, 59, 0.55);
  --map-tier-converted-line: #C4A31E;
  --map-tier-converted-soft: #FAF3D4;
  --map-tier-converted-ink: #846B0F;
  --map-tier-reserved: #6FBD8B;
  --map-tier-reserved-fill: rgba(111, 189, 139, 0.55);
  --map-tier-reserved-line: #4C9A6C;
  --map-tier-reserved-soft: #E4F3EA;
  --map-tier-reserved-ink: #2D784D;
  --map-tier-meeting: #1E7A4A;
  --map-tier-meeting-fill: rgba(30, 122, 74, 0.62);
  --map-tier-meeting-line: #15603A;
  --map-tier-meeting-soft: #DDEFE5;
  --map-tier-meeting-ink: #1B6A41;
  --map-tier-supplied: #A6B5C8;
  --map-tier-supplied-fill: rgba(166, 181, 200, 0.3);
  --map-tier-supplied-line: #8B9CB3;
  --map-tier-supplied-soft: #EDF1F6;
  --map-tier-supplied-ink: #5D6D81;
  --map-tier-acquiring: var(--map-tier-acquired);
  --map-tier-acquiring-fill: rgba(224, 109, 18, 0.25);
  --map-tier-acquiring-line: var(--map-tier-acquired-line);
  --map-tier-acquiring-soft: var(--map-tier-acquired-soft);
  --map-tier-acquiring-ink: var(--map-tier-acquired-ink);
  --map-tier-converting: var(--map-tier-converted);
  --map-tier-converting-fill: rgba(239, 201, 59, 0.25);
  --map-tier-converting-line: var(--map-tier-converted-line);
  --map-tier-converting-soft: var(--map-tier-converted-soft);
  --map-tier-converting-ink: var(--map-tier-converted-ink);
  --map-tier-reserving: var(--map-tier-reserved);
  --map-tier-reserving-fill: rgba(111, 189, 139, 0.25);
  --map-tier-reserving-line: var(--map-tier-reserved-line);
  --map-tier-reserving-soft: var(--map-tier-reserved-soft);
  --map-tier-reserving-ink: var(--map-tier-reserved-ink);
  --map-tier-supplying: var(--map-tier-supplied);
  --map-tier-supplying-fill: rgba(166, 181, 200, 0.45);
  --map-tier-supplying-line: var(--map-tier-supplied-ink);
  --map-tier-supplying-soft: var(--map-tier-supplied-soft);
  --map-tier-supplying-ink: var(--map-tier-supplied-ink);
  --map-tier-supervised: var(--map-tier-supplied);
  --map-tier-supervised-fill: rgba(166, 181, 200, 0.4);
  --map-tier-supervised-line: var(--map-tier-supplied-ink);
  --map-tier-supervised-soft: var(--map-tier-supplied-soft);
  --map-tier-supervised-ink: var(--map-tier-supplied-ink);
  --map-tier-recalling: var(--fg-2);
  --map-tier-recalling-fill: rgba(66, 66, 69, 0.3);
  --map-tier-recalling-line: var(--fg-2);
  --map-tier-recalling-soft: var(--fill-soft);
  --map-tier-recalling-ink: var(--fg-2);
  /* 宗地白色衬底：描边外侧 1px，“正在”类与描边同节奏虚线（影像适配窗口，2026-10-20 冻结） */
  --map-plot-casing: #ffffff;

  /* 叠加标记与交互 */
  --map-plan: #E03B3B;
  --map-plan-ink: #C22F2F;
  --map-ggs: #8A5BC8;
  --map-ggs-soft: #F0E8FA;
  --map-ggs-ink: #6538A2;
  --map-selection-halo: #ffffff;
  --map-selection-underlay: rgba(29, 29, 31, 0.45); /* 暂定，待与执法监管系统核对 */

  /* 示意底图（仅原型，不是界面色） */
  --map-water-deep: #54779b;
  --map-water: #6f97b8;
  --map-water-shallow: #8db4cc;
  --map-sand: #d8caa5;
  --map-land: #b7bd9f;
  --map-land-2: #aab48c;
  --map-farm-1: #a4b672;
  --map-farm-2: #c0c98d;
  --map-farm-3: #8fa465;
  --map-farm-4: #b5c183;
  --map-urban: #a9aca7;
  --map-urban-2: #969c98;
  --map-street: #e9e6dd;
  --map-road: #f2efe6;
  --map-road-case: #c6c1b2;
  --map-hill: #71895c;
  --map-hill-2: #5d764c;

  /* OpenDesign 通用槽位（兼容别名） */
  --text-xs: var(--text-label);
  --text-sm: var(--text-table);
  --text-base: var(--text-body);
  --text-lg: var(--text-card-title);
  --text-xl: var(--text-dialog-title);
  --text-2xl: var(--text-dialog-title);
  --text-3xl: var(--text-page-title);
  --text-4xl: var(--text-kpi);
  --leading-body: 1.47;
  --leading-tight: 1.2;
  --tracking-display: -0.02em;
  --elev-raised: var(--glass-shadow-sm);
  --section-y-desktop: 30px;
  --section-y-tablet: 26px;
  --section-y-phone: 22px;
  --container-max: none;
  --container-gutter-desktop: clamp(2.125rem, 2vw, 3rem);
  --container-gutter-tablet: 24px;
  --container-gutter-phone: 16px;
}

/* 支持 color-mix() 时以公式覆盖静态值（色彩「兼容回退」）。 */
@supports (color: color-mix(in oklch, white, black)) {
  :root {
    --glass-bg: color-mix(in oklch, var(--bg) 60%, transparent);
    --glass-bg-strong: color-mix(in oklch, var(--bg) 80%, transparent);
    --glass-border: color-mix(in oklch, var(--bg) 74%, var(--fg) 9%);
    --glass-shadow: 0 14px 36px color-mix(in oklch, var(--fg) 16%, transparent);
    --glass-shadow-sm: 0 5px 18px color-mix(in oklch, var(--fg) 11%, transparent);
    --accent-soft: color-mix(in oklch, var(--accent) 12%, transparent);
    --accent-ink: color-mix(in oklch, var(--accent-active), black 8%);
    --accent-glass-ink: color-mix(in oklch, var(--accent-ink) 80%, var(--fg));
    --focus-ring: 0 0 0 4px color-mix(in oklch, var(--accent) 35%, transparent);
    --scrim: color-mix(in oklch, var(--fg) 24%, transparent);
    --control-focus-border: color-mix(in oklch, var(--fg) 58%, var(--bg));
    --success-soft: color-mix(in oklch, var(--success) 13%, transparent);
    --success-ink: color-mix(in oklch, var(--success), black 34%);
    --warn-soft: color-mix(in oklch, var(--warn) 18%, transparent);
    --warn-ink: color-mix(in oklch, var(--warn), black 46%);
    --danger-soft: color-mix(in oklch, var(--danger) 11%, transparent);
    --danger-ink: color-mix(in oklch, var(--danger), black 10%);
    --fg-soft: color-mix(in oklch, var(--fg) 5%, transparent);
    --fill-soft: color-mix(in oklch, var(--fg) 5%, var(--bg));
    --fill-accent-soft: color-mix(in oklch, var(--accent) 10%, var(--bg));
    --fill-success-soft: color-mix(in oklch, var(--success) 10%, var(--bg));
    --fill-warn-soft: color-mix(in oklch, var(--warn) 12%, var(--bg));
    --fill-danger-soft: color-mix(in oklch, var(--danger) 8%, var(--bg));
    --dashboard-card-bg: color-mix(in oklch, var(--bg) 60%, var(--surface));
    --map-tier-none-fill: color-mix(in srgb, var(--map-tier-none) 40%, transparent);
    --map-tier-acquired-fill: color-mix(in srgb, var(--map-tier-acquired) 55%, transparent);
    --map-tier-converted-fill: color-mix(in srgb, var(--map-tier-converted) 55%, transparent);
    --map-tier-reserved-fill: color-mix(in srgb, var(--map-tier-reserved) 55%, transparent);
    --map-tier-meeting-fill: color-mix(in srgb, var(--map-tier-meeting) 62%, transparent);
    --map-tier-supplied-fill: color-mix(in srgb, var(--map-tier-supplied) 30%, transparent);
    --map-tier-acquiring-fill: color-mix(in srgb, var(--map-tier-acquired) 25%, transparent);
    --map-tier-converting-fill: color-mix(in srgb, var(--map-tier-converted) 25%, transparent);
    --map-tier-reserving-fill: color-mix(in srgb, var(--map-tier-reserved) 25%, transparent);
    --map-tier-supplying-fill: color-mix(in srgb, var(--map-tier-supplied) 45%, transparent);
    --map-tier-supervised-fill: color-mix(in srgb, var(--map-tier-supplied) 40%, transparent);
    --map-tier-recalling-fill: color-mix(in srgb, var(--fg-2) 30%, transparent);
    --map-selection-underlay: color-mix(in oklch, var(--fg) 45%, transparent);
  }
}
