/* ==========================================================================
   tokens.css — 工程师星球「村子」功能 设计令牌
   来源：design-village/02-design-tokens.md §7「快速粘贴：CSS 变量块」完整搬运
   --------------------------------------------------------------------------
   单位说明（给原型渲染用）：
   本原型 .screen 为 750 × 1623 的设计稿 1:1 画布，即 **1rpx = 1px**。
   因此下面每个变量的「数值」与令牌文档完全一致，仅把单位 rpx 写成 px，
   浏览器才能解析。绝不允许改动数值或自造色值。
   ========================================================================== */

/* ========== 0. 分叉开关 ========== */
/* v2.5（客户第六轮）：备选背景「暖纸沙盘 / diorama」整套移除，只保留定稿的
   「冷灰旷野 / slg」。版图根节点固定 data-map-theme="slg"，不再有第二个主题。
   v2.1 旧值 archipelago / orbit 更早已随隐喻替换作废。 */

:root {
  /* ---- 1.1.1 品牌主色 ---- */
  --ep-orange-500: #FA6A1C;
  --ep-orange-100: #FFECD5;
  --ep-orange-700: #C24E0C;

  /* ---- 1.1.2 中性 ---- */
  --ep-white: #FFFFFF;
  --ep-black: #000000;
  --ep-fill-1: rgba(0,0,0,0.02);
  --ep-fill-2: rgba(0,0,0,0.04);
  --ep-line-1: rgba(0,0,0,0.06);
  --ep-line-2: rgba(0,0,0,0.12);
  --ep-mask:   rgba(0,0,0,0.45);

  /* ---- 1.1.3 文字 ---- */
  --ep-text-1: rgba(0,0,0,0.88);
  --ep-text-2: rgba(0,0,0,0.65);
  --ep-text-3: rgba(0,0,0,0.45);
  --ep-text-4: rgba(0,0,0,0.25);
  --ep-text-inverse: #FFFFFF;

  /* ---- 1.1.4 语义 ---- */
  --ep-success: #24855A;
  --ep-warning: #9E5E00;
  --ep-danger:  #C0392B;
  --ep-info:    #3A6EA5;

  /* ---- 1.2 圆角 ---- */
  --ep-radius-page:    38px; /* 38rpx */
  --ep-radius-capsule: 31px; /* 31rpx */
  --ep-radius-card:    23px; /* 23rpx */
  --ep-radius-button:  46px; /* 46rpx */
  --ep-radius-chip:    12px; /* 12rpx */
  --ep-radius-pill:    999px;/* 999rpx */

  /* ---- 1.3 间距 ---- */
  --ep-space-1: 4px;   --ep-space-2: 8px;   --ep-space-3: 12px;
  --ep-space-4: 16px;  --ep-space-5: 20px;  --ep-space-6: 24px;
  --ep-space-8: 32px;  --ep-space-10: 40px; --ep-space-12: 48px;
  --ep-space-16: 64px; --ep-space-24: 96px; --ep-space-page: 38px;

  /* ---- 1.4 阴影 ---- */
  --ep-shadow-base:    0px 0px 23px 0px rgba(0,0,0,0.04);
  --ep-shadow-surface: 0px 8px 24px 0px rgba(0,0,0,0.06);
  --ep-shadow-float:   0px 12px 38px 0px rgba(0,0,0,0.10);
  --ep-ring-selected:  0px 0px 0px 6px rgba(250,106,28,0.16);

  /* ---- 1.5 Z-index ---- */
  --ep-z-map-bg: 0;      --ep-z-map-texture: 1;  --ep-z-map-route: 2;
  --ep-z-map-surface: 3; --ep-z-map-flag: 4;     --ep-z-map-plate: 5;
  /* v4：--ep-z-camp-rail 随营地航线模块删除 */
  --ep-z-tabbar: 100;    --ep-z-fab: 110;        --ep-z-modal: 300;
  --ep-z-toast: 400;

  /* ---- 1.6 字号 ----
     v2.4（客户第五轮）：整档 +2~3rpx，对齐真机项目（真机项目用的字号比原令牌大一档）。
     ⚠️ 越界备案：`--ep-fs-display: 40px` 已越过 02-design-tokens §5.1 第 13 条
     「字号 > 38rpx 禁用」的红线，这是「照着项目来」的直接后果；
     同屏 > 4 种字号的约束也随之放宽。两处偏差都在 04-revision-log 第十四节备案。

     ⚠️ 闭合性备案：本档是**封闭枚举**（…17 / 19 / 21 / 24 / 25 / 29 / 31 / 34 / 38…），
     `--ep-fs-micro` 只能取 **21**，不存在 20 —— 21 与 19 之间没有中间档。
     （这一档只被底部 tabbar 文案消费，21rpx 无布局影响。） */
  --ep-fs-display: 40px;   --ep-fs-h1: 36px;      --ep-fs-h2: 32px;
  --ep-fs-h3: 30px;        --ep-fs-body-l: 28px;  --ep-fs-body: 26px;
  --ep-fs-caption: 24px;   --ep-fs-mini: 22px;    --ep-fs-micro: 21px;
  /* 组件级字号（v2.4 新增）：真机项目的按钮 / 胶囊有独立的字面规格（30 / 26rpx），
     §1.6 的九档语义词里没有对应项，与其在 screens.css 里散落字面值，
     不如在这里各登记一个具名词令，后续要对齐项目只改这里。 */
  --ep-fs-btn: 30px;       --ep-fs-cap: 26px;

  /* ---- 1.7 字重 ---- */
  --ep-fw-regular: 400; --ep-fw-medium: 500; --ep-fw-semibold: 600;

  /* ---- 1.8 动效 ---- */
  --ep-dur-fast: 160ms; --ep-dur-base: 240ms;
  --ep-ease: cubic-bezier(0.22, 0.61, 0.36, 1);

  /* ---- 3. 热区 ---- */
  --ep-hit-min: 140px;
}

/* ========== 2.0 共用绘制令牌（主题无关，v2.0 新增） ========== */
:root {
  /* 2.0.1 墨线三级 —— 暖褐 #4A3A2C，不用纯黑（stroke-width 单位 = SVG user unit = rpx） */
  --ep-ink-1: rgba(74, 58, 44, 0.62); /* 主轮廓 */
  --ep-ink-2: rgba(74, 58, 44, 0.38); /* 结构线 */
  --ep-ink-3: rgba(74, 58, 44, 0.20); /* 纹理线 */
  --ep-ink-w-1: 2;    --ep-ink-w-2: 1.25;  --ep-ink-w-3: 0.75;

  /* 2.0.2 版图专用补偿色（唯一在所有可放置地形上 ≥3:1 的橙系深描边色） */
  --ep-orange-800: #A33F08;

  /* 建筑通用（A/B 共用） */
  --ep-settle-win-off: #B8BCC0;
  --ep-settle-win-on:  #FFD79A;
  --ep-settle-door-frame: #8B6B4A;
  --ep-settle-locked-veil: #DCD8CF;

  /* ---- 2.0.3 帐篷（v2.1 新增；A/B 两套完全共用，不随主题变） ----
     客户原话「把房子改成帐篷」：村落 = 1 大帐篷 + 周围 4 小帐篷，村子 = 1 帐篷。
     实测关键：篷体亮面压在素背景上只有 1.15:1 —— 帐篷不是靠填充「贴」上去的，
     是靠墨线（3.31:1）「刻」出来的。所以主轮廓必须闭合连续，不允许断线或用填充代替。 */
  --ep-tent-body:        #FBF7EE;   /* 篷体亮面 */
  --ep-tent-body-shade:  #E8DFCC;   /* 篷体暗面（背光侧） */
  /* 篷顶左右坡：v2.1 首版差值只有 6%，渲染出来是块「平三角」没有体积感。
     拉开到约 14%（#FDFAF3 / #D9CBB0），帐篷才立得起来。 */
  --ep-tent-roof-l:      #FDFAF3;   /* 篷顶左坡（受光） */
  --ep-tent-roof-r:      #D9CBB0;   /* 篷顶右坡（背光） */
  --ep-tent-pole:        #8B6B4A;   /* 骨架杆 */
  --ep-tent-cord:        #B5A88C;   /* 拉绳 */
  --ep-tent-tie:         #A99268;   /* 门帘束带 */
  --ep-tent-mat:         #E9E2D2;   /* 地垫 */
  --ep-tent-mat-edge:    #D8CFBA;   /* 地垫边 */
  --ep-tent-door-dark:   #B7A88A;   /* 门帘内里（暗）—— 首版 #C9BCA2 与篷面太近，门洞看不出来 */
  --ep-tent-flap:        #F0E9DC;   /* 翻开的外门帘 */
  --ep-settle-foundation:       #E9E2D2;  /* 兼容旧变量名 → 地垫 */
  --ep-settle-foundation-shade: #D8CFBA;
  --ep-settle-wall:             #FBF7EE;  /* 兼容 → 篷体亮面 */
  --ep-settle-wall-shade:       #E8DFCC;
  --ep-settle-roof:             #F3EBDC;  /* 兼容 → 篷顶 */
  --ep-settle-roof-ridge:       #C9BFA9;
  --ep-settle-roof-tile:        #DED3C0;
  --ep-settle-roof-eave:        #E4D9C3;
  --ep-settle-door:             #C9BCA2;
  --ep-settle-main:             #F3EBDC;
  --ep-settle-wall-crenel:      #E8DFCC;
  --ep-settle-gate:             #C9BCA2;
  --ep-settle-plaque:           #E9E2D2;
  --ep-settle-lantern:          #C9C2B2;

  /* ---- 2.0.4 火把（v2.1 新增；取代已废弃的 lit-mode 亮灯 / 橙瓦） ----
     客户原话「用点亮火把的方式表示已经加入的村子」。
     未加入 = 空火盆（暗空盆 4.59:1，本身可见，不会「找不到火把」）
     已加入 = 点燃（外焰必须带 3rpx #A33F08 描边，单靠填充只有 2.11:1 不达标） */
  --ep-torch-pole:         #8B6B4A;
  --ep-torch-wrap:         #A99268;
  --ep-torch-bowl:         #8B6B4A;
  --ep-torch-bowl-in:      #6F6656;   /* 未点燃的空盆内里 4.59:1 */
  --ep-torch-flame-out:    #FA6A1C;
  --ep-torch-flame-mid:    #FFD08A;
  --ep-torch-flame-core:   #FFF3D6;
  --ep-torch-flame-stroke: #A33F08;
  --ep-torch-glow:         rgba(250, 106, 28, 0.16);

  /* 3.1 聚落卡片尺寸 / 名牌 */
  --ep-settle-size-lg: 240px;  --ep-settle-size-sm: 160px;
  --ep-settle-plate-lg-w: 220px; --ep-settle-plate-lg-h: 96px;
  /* v2.1：152 装不下「头像 28 + 间距 6 + 昵称 8 字 152 + 内边距 16 + 描边 4」，
     硬下限 = 212rpx（再加 ±2° 旋转外扩 7 → 219），取 220 留余量。 */
  --ep-settle-plate-sm-w: 220px; --ep-settle-plate-sm-h: 118px;
  --ep-settle-torch-gap: 40px;   /* 火把额外横向占位，排布时必须算进单元总宽 */
  --ep-settle-plate-gap: 8px;
  --ep-settle-plate-radius: 12px;
  /* 白底名牌（§3.1.3）：地形色会让 text-2/3/4 全部掉到达标线以下，
     所以所有文字一律收进白底名牌，禁止直接压在地形上。 */
  --ep-settle-plate-bg: rgba(255, 255, 255, 0.96);
  --ep-settle-avatar: 28px;
  --ep-settle-badge-w: 56px;   --ep-settle-badge-h: 40px;

  /* 3.3 航线 */
  --ep-route-color: #FA6A1C;
  --ep-route-width: 4px;
  --ep-route-stroke: #A33F08;      /* v2.0 增补：航线跨越水系必需 */
  --ep-route-stroke-w: 3px;
  --ep-route-dash: 12px; --ep-route-gap: 10px;
  --ep-route-opacity: 0.8;
  --ep-route-dot-r: 12px; --ep-route-dot-stroke: 3px;
}

/* v2.5：客户「只保留定稿的冷灰旷野（B），备选可以去掉了」——
   §2.1 方案 A（暖纸沙盘 / diorama）整块删除，含其 --ep-map-bg-* 与 --ep-terrain-*。
   版图从此只有一个主题 slg，不再有第二套地形变量。 */

/* ========== 2.2 方案 B：素雅旷野（冷灰纸 · 世界地图） ==========
   v2.1：去掉城墙 / 城邦 / 羊皮纸边框，改为浅色草原缓丘；同样素化到 5 色层。 */
[data-map-theme="slg"] {
  /* 版图底色（全页唯一允许的 1 处渐变，180deg） */
  --ep-map-bg-from:  #F6F6F4; --ep-map-bg-to: #ECECE9; --ep-map-bg-angle: 180deg;
  /* 地表（冷灰纸） */
  --ep-terrain-paper:       #F6F6F4; --ep-terrain-paper-line: #E2E2DD;
  --ep-terrain-base:        #ECECE9; /* 缓丘 */
  --ep-terrain-tray:        #EFEFEA; --ep-terrain-tray-line: #DEDED8;
  --ep-terrain-field:       #E7E7E0; --ep-terrain-field-line: #D8D8D0;
  --ep-terrain-paddy:       #E2E7E7; --ep-terrain-paddy-dot: #FFFFFF;
  --ep-terrain-hill:        #E4E4DF; --ep-terrain-hill-line: #D6D6CF;
  --ep-terrain-hill-shade:  #DCDCD6;
  --ep-terrain-hill-far:    #E8E8E3;
  --ep-terrain-mountain:    #E0E0DB; --ep-terrain-mountain-top: #D5D5CE;
  --ep-terrain-forest:      #E7E7E2; --ep-terrain-forest-line: #D8D8D0;
  --ep-terrain-waste:       #EFEFEA;
  --ep-terrain-water:       #DEE5E6; --ep-terrain-water-line: #C8D3D4;
  --ep-terrain-water-wave:  #FFFFFF;
  --ep-terrain-road:        #E1E1DC; --ep-terrain-road-line: #CFCFC7;
  --ep-terrain-road-dash:   #D6D6CE;
  --ep-terrain-tree:        #DCDCD6; --ep-terrain-tree-line: #CCCCC4;
  --ep-terrain-tree-dark:   #D2D2CB;
  --ep-terrain-trunk:       #8B6B4A;
  --ep-terrain-rock:        #DCDCD6; --ep-terrain-grass: #E7E7E0;
  --ep-terrain-grid:        rgba(74, 58, 44, 0.04);
  --ep-settle-ground-shadow: rgba(74, 58, 44, 0.12);
}

/* v2.1：§2.2.4「点亮模式开关（lamp / tileroof）」整块废弃 ——
   客户改为「点亮火把」，已加入状态由 --ep-torch-* 一组变量 + 火把 SVG 承担，
   不再需要开关，也不再允许复活（02-design-tokens §5.1 第 23 条）。 */

/* ========== 3. 新增原子（主题无关） ========== */
:root {
  /* 岛屿/星球卡片（v1 旧名，v2 已由 --ep-settle-* 取代，保留仅为兼容） */
  --ep-surface-size-lg: 240px;  --ep-surface-pad-lg: 24px;
  --ep-surface-size-sm: 160px;  --ep-surface-pad-sm: 16px;
  --ep-surface-radius-lg: 46px; --ep-surface-radius-sm: 31px;

  /* 旗标 */
  --ep-flag-w: 32px;  --ep-flag-h: 24px;
  --ep-flag-pole-w: 4px; --ep-flag-pole-h: 44px;
  --ep-flag-offset-top: -8px; --ep-flag-offset-right: 12px;
  --ep-flag-sm-w: 20px; --ep-flag-sm-h: 15px;

  /* v4：顶部「我的营地」航线整块删除，--ep-camp-rail-h / --ep-camp-card-w / -h /
     -gap / --ep-camp-link-width / -dash / -gap 一并移除（无处引用）。
     --ep-z-camp-rail 同步从 §1.5 删除。 */
}

/* ==========================================================================
   基础 reset（原型宿主页面用）
   ========================================================================== */
*,
*::before,
*::after {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  padding: 0;
}

body {
  font-family: -apple-system, "PingFang SC", "Helvetica Neue", Helvetica, "Microsoft YaHei", sans-serif;
  font-size: var(--ep-fs-body);
  color: var(--ep-text-1);
  background: #F2F2F4; /* 演示宿主页面底色，不进入小程序画布 */
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, p {
  margin: 0;
  font-size: inherit;
  font-weight: inherit;
}

ul, ol {
  margin: 0;
  padding: 0;
  list-style: none;
}

button, input, textarea {
  font-family: inherit;
  font-size: inherit;
  color: inherit;
  border: 0;
  background: none;
  outline: none;
}

img, svg {
  display: block;
}

/* 小程序 scroll-view 观感：隐藏滚动条 */
.no-scrollbar {
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.no-scrollbar::-webkit-scrollbar {
  width: 0;
  height: 0;
  display: none;
}
