/* ===================================================================
   自定义光标
   ===================================================================

   ---- 为什么值得做 ----

   这一屏的每一个像素都是自己画的（图标、鱼、布景），唯独指针是操作系统的。
   系统箭头在 Windows / Mac / Linux 上是三种不同的图，而且和这套深水色调
   没有任何关系——和 icons.js 开头骂 emoji 的那三条一模一样。

   ---- 三条自律 ----

   ① **每个状态是一个独立的形状，不是同一个箭头加不同徽章。**
      上一版就是"箭头 + 右下角一枚小圆盘"，实机反馈是"看着像贴了个标"。
      问题在尺寸：光标一共 26 像素，徽章占其中 7 像素——**那么小的东西
      不参与识别**，眼睛先读到的永远是那支一模一样的箭头。
      所以现在：默认是实心箭头、可点是一片鳍、可拖是四向箭头、
      不可用是压暗的箭头加禁止环。**换的是轮廓，不是挂件。**

   ② **每个光标都描一圈深色。** 光标要在任何背景上看得见——深水缸、
      浅色卡片、白色输入框。只填亮色的话，一进浅色弹窗就消失。
      所以是"深色描边 + 亮色填充"，两笔画同一个形状。

   ③ **永远带系统关键字兜底。** `url(...) x y, pointer` ——
      data URI 失败、或者浏览器不支持自定义光标时，行为和以前一模一样。

   ---- 热点 ----

   有尖的（箭头、鳍）热点在尖上：(2,2)。
   中心对称的（四向箭头、准星）热点在正中：(15,15)——瞄准和拖动时眼睛盯的
   是图形中心，热点在角上就会"看着中心、点在角上"。

   ---- 形状取自哪儿 ----

   不是随手挑的图形，都借的游戏自己的语汇：
     可点   → 胸鳍（fishForm.buildPectoral 那套叶形轮廓 + 发散鳍条）
     可拖   → 通用的四向箭头（这一个刻意**不**借游戏语汇，见下面的说明）
     瞄准   → 神谕效果圈

   ---- 什么时候该借游戏语汇，什么时候不该 ----

   借语汇的前提是**那个形状本身还读得出来**。"可拖"试过用暗流的流线，
   四道弧在 26 像素 + 5px 描边下糊成了一个圆环——语汇是对的，载体撑不住。
   换回通用的四向箭头之后立刻成立。
   **风格统一靠的是描边、圆角、色板这些处理，不是非得每个形都来自世界观。**

   这个文件由 tools/gen-cursors.py 生成，别手改 data URI。
   =================================================================== */

:root {
  --cur-default: url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2226%22%20height=%2226%22%20viewBox=%220%200%2026%2026%22%3E%3Cpath%20d=%22M2.4%202.4%20L14.7%208.9%20L15.2%2010.6%20L15.4%2012.4%20L15.1%2013.9%20L14.3%2015.1%20L13.0%2015.9%20L11.4%2016.1%20L9.7%2015.8%20L8.1%2015.1%20Z%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%223.2%22%20stroke-linejoin=%22round%22%20stroke-linecap=%22round%22/%3E%3Cpath%20d=%22M2.4%202.4%20L14.7%208.9%20L15.2%2010.6%20L15.4%2012.4%20L15.1%2013.9%20L14.3%2015.1%20L13.0%2015.9%20L11.4%2016.1%20L9.7%2015.8%20L8.1%2015.1%20Z%22%20fill=%22%23e6eef8%22/%3E%3Cpath%20d=%22M5.3%204.6%20L12.8%2010.5%20M5.0%205.2%20L11.9%2012.6%20M4.4%205.4%20L9.7%2013.3%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%221.9%22%20stroke-linecap=%22round%22%20opacity=%220.85%22/%3E%3C/svg%3E") 2 2, default;
  --cur-pointer: url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2226%22%20height=%2226%22%20viewBox=%220%200%2026%2026%22%3E%3Cpath%20d=%22M2.4%202.4%20L15.9%205.8%20L16.5%208.2%20L16.5%2010.7%20L15.8%2013.1%20L14.3%2015.1%20L12.2%2016.5%20L9.7%2017.1%20L7.2%2016.9%20L4.8%2016.1%20Z%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%223.2%22%20stroke-linejoin=%22round%22%20stroke-linecap=%22round%22/%3E%3Cpath%20d=%22M2.4%202.4%20L15.9%205.8%20L16.5%208.2%20L16.5%2010.7%20L15.8%2013.1%20L14.3%2015.1%20L12.2%2016.5%20L9.7%2017.1%20L7.2%2016.9%20L4.8%2016.1%20Z%22%20fill=%22%23e6eef8%22/%3E%3Cpath%20d=%22M5.5%204.3%20L13.7%209.2%20M5.0%205.2%20L11.9%2012.6%20M4.1%205.6%20L8.4%2014.1%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%221.9%22%20stroke-linecap=%22round%22%20opacity=%220.85%22/%3E%3C/svg%3E") 2 2, pointer;
  --cur-grab: url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2230%22%20height=%2230%22%20viewBox=%220%200%2030%2030%22%3E%3Cpath%20d=%22M15.0%2010.8%20L15.0%202.6%20M17.9%205.5%20L15.0%202.6%20L12.1%205.5%20M15.0%2019.2%20L15.0%2027.4%20M12.1%2024.5%20L15.0%2027.4%20L17.9%2024.5%20M10.8%2015.0%20L2.6%2015.0%20M5.5%2012.1%20L2.6%2015.0%20L5.5%2017.9%20M19.2%2015.0%20L27.4%2015.0%20M24.5%2017.9%20L27.4%2015.0%20L24.5%2012.1%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%225.2%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22/%3E%3Cpath%20d=%22M15.0%2010.8%20L15.0%202.6%20M17.9%205.5%20L15.0%202.6%20L12.1%205.5%20M15.0%2019.2%20L15.0%2027.4%20M12.1%2024.5%20L15.0%2027.4%20L17.9%2024.5%20M10.8%2015.0%20L2.6%2015.0%20M5.5%2012.1%20L2.6%2015.0%20L5.5%2017.9%20M19.2%2015.0%20L27.4%2015.0%20M24.5%2017.9%20L27.4%2015.0%20L24.5%2012.1%22%20fill=%22none%22%20stroke=%22%23e6eef8%22%20stroke-width=%222.4%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22/%3E%3Ccircle%20cx=%2215%22%20cy=%2215%22%20r=%222.6%22%20fill=%22%2308111c%22/%3E%3Ccircle%20cx=%2215%22%20cy=%2215%22%20r=%221.3%22%20fill=%22%23e6eef8%22/%3E%3C/svg%3E") 15 15, grab;
  --cur-grabbing: url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2230%22%20height=%2230%22%20viewBox=%220%200%2030%2030%22%3E%3Cpath%20d=%22M15.0%209.6%20L15.0%206.3%20M17.9%209.2%20L15.0%206.3%20L12.1%209.2%20M15.0%2020.4%20L15.0%2023.7%20M12.1%2020.8%20L15.0%2023.7%20L17.9%2020.8%20M9.6%2015.0%20L6.3%2015.0%20M9.2%2012.1%20L6.3%2015.0%20L9.2%2017.9%20M20.4%2015.0%20L23.7%2015.0%20M20.8%2017.9%20L23.7%2015.0%20L20.8%2012.1%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%225.4%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22/%3E%3Cpath%20d=%22M15.0%209.6%20L15.0%206.3%20M17.9%209.2%20L15.0%206.3%20L12.1%209.2%20M15.0%2020.4%20L15.0%2023.7%20M12.1%2020.8%20L15.0%2023.7%20L17.9%2020.8%20M9.6%2015.0%20L6.3%2015.0%20M9.2%2012.1%20L6.3%2015.0%20L9.2%2017.9%20M20.4%2015.0%20L23.7%2015.0%20M20.8%2017.9%20L23.7%2015.0%20L20.8%2012.1%22%20fill=%22none%22%20stroke=%22%23e6eef8%22%20stroke-width=%222.6%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22/%3E%3Ccircle%20cx=%2215%22%20cy=%2215%22%20r=%223.6%22%20fill=%22%2308111c%22/%3E%3Ccircle%20cx=%2215%22%20cy=%2215%22%20r=%222.2%22%20fill=%22%23e6eef8%22/%3E%3C/svg%3E") 15 15, grabbing;
  --cur-aim: url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2230%22%20height=%2230%22%20viewBox=%220%200%2030%2030%22%3E%3Ccircle%20cx=%2215%22%20cy=%2215%22%20r=%229.4%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%224.6%22/%3E%3Ccircle%20cx=%2215%22%20cy=%2215%22%20r=%229.4%22%20fill=%22none%22%20stroke=%22%238fd8f0%22%20stroke-width=%222%22/%3E%3Cpath%20d=%22M15%201.8v6.2M15%2021.8v6.2M1.8%2015h6.2M21.8%2015h6.2%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%224.6%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22/%3E%3Cpath%20d=%22M15%201.8v6.2M15%2021.8v6.2M1.8%2015h6.2M21.8%2015h6.2%22%20fill=%22none%22%20stroke=%22%238fd8f0%22%20stroke-width=%222%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22/%3E%3Ccircle%20cx=%2215%22%20cy=%2215%22%20r=%222%22%20fill=%22%238fd8f0%22/%3E%3C/svg%3E") 15 15, crosshair;
  --cur-no: url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2230%22%20height=%2230%22%20viewBox=%220%200%2030%2030%22%3E%3Cpath%20d=%22M2.4%202.4%20L14.7%208.9%20L15.2%2010.6%20L15.4%2012.4%20L15.1%2013.9%20L14.3%2015.1%20L13.0%2015.9%20L11.4%2016.1%20L9.7%2015.8%20L8.1%2015.1%20Z%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%223.2%22%20stroke-linejoin=%22round%22%20stroke-linecap=%22round%22/%3E%3Cpath%20d=%22M2.4%202.4%20L14.7%208.9%20L15.2%2010.6%20L15.4%2012.4%20L15.1%2013.9%20L14.3%2015.1%20L13.0%2015.9%20L11.4%2016.1%20L9.7%2015.8%20L8.1%2015.1%20Z%22%20fill=%22%2393a3b6%22/%3E%3Ccircle%20cx=%2220.6%22%20cy=%228.2%22%20r=%226.4%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%224.8%22/%3E%3Cpath%20d=%22M16.5%2012.299999999999999%20L24.700000000000003%204.1%22%20stroke=%22%2308111c%22%20stroke-width=%224.8%22%20stroke-linecap=%22round%22/%3E%3Ccircle%20cx=%2220.6%22%20cy=%228.2%22%20r=%226.4%22%20fill=%22none%22%20stroke=%22%23f0a0a0%22%20stroke-width=%222.2%22/%3E%3Cpath%20d=%22M16.5%2012.299999999999999%20L24.700000000000003%204.1%22%20stroke=%22%23f0a0a0%22%20stroke-width=%222.2%22%20stroke-linecap=%22round%22/%3E%3C/svg%3E") 2 2, not-allowed;
  --cur-help: url("data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2230%22%20height=%2230%22%20viewBox=%220%200%2030%2030%22%3E%3Cpath%20d=%22M2.4%202.4%20L14.7%208.9%20L15.2%2010.6%20L15.4%2012.4%20L15.1%2013.9%20L14.3%2015.1%20L13.0%2015.9%20L11.4%2016.1%20L9.7%2015.8%20L8.1%2015.1%20Z%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%223.2%22%20stroke-linejoin=%22round%22%20stroke-linecap=%22round%22/%3E%3Cpath%20d=%22M2.4%202.4%20L14.7%208.9%20L15.2%2010.6%20L15.4%2012.4%20L15.1%2013.9%20L14.3%2015.1%20L13.0%2015.9%20L11.4%2016.1%20L9.7%2015.8%20L8.1%2015.1%20Z%22%20fill=%22%23e6eef8%22/%3E%3Cpath%20d=%22M5.3%204.6%20L12.8%2010.5%20M5.0%205.2%20L11.9%2012.6%20M4.4%205.4%20L9.7%2013.3%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%221.9%22%20stroke-linecap=%22round%22%20opacity=%220.85%22/%3E%3Cpath%20d=%22M17.6%205.4a3%203%200%201%201%203.4%203v1.5%22%20fill=%22none%22%20stroke=%22%2308111c%22%20stroke-width=%224.8%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22/%3E%3Cpath%20d=%22M17.6%205.4a3%203%200%201%201%203.4%203v1.5%22%20fill=%22none%22%20stroke=%22%23e6eef8%22%20stroke-width=%222.1%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22/%3E%3Ccircle%20cx=%2221%22%20cy=%2213.4%22%20r=%222.4%22%20fill=%22%2308111c%22/%3E%3Ccircle%20cx=%2221%22%20cy=%2213.4%22%20r=%221.3%22%20fill=%22%23e6eef8%22/%3E%3C/svg%3E") 2 2, help;
}

/* ---- 挂到语义上，不是挂到元素上 ----

   下面这几条是**全站的**：所有原来写 `cursor: pointer` 的地方现在写
   `var(--cur-pointer)`，写 `not-allowed` 的写 `var(--cur-no)`，依此类推。
   这样加一个新按钮不需要记得配光标——它写的还是那个语义关键字。 */

html { cursor: var(--cur-default); }

/* 输入框保持系统的 I 形光标：文字定位要的是那一竖的精度，
   换成别的会让人对不准插入点。**不是所有地方都该定制。** */
input, textarea, [contenteditable] { cursor: text; }
