/* 官方字体（自托管）：由 docs/recon/nai-official/fetch-fonts.mjs 从 novelai.net 抓取 */

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+1F00-1FFF;
  src: url('/fonts/eczar-greek-ext-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
  src: url('/fonts/eczar-latin-ext-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
  src: url('/fonts/eczar-greek-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
  src: url('/fonts/eczar-latin-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09;
  src: url('/fonts/eczar-devanagari-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  unicode-range: U+1F00-1FFF;
  src: url('/fonts/eczar-greek-ext-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
  src: url('/fonts/eczar-latin-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
  src: url('/fonts/eczar-greek-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09;
  src: url('/fonts/eczar-devanagari-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
  src: url('/fonts/eczar-latin-ext-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+1F00-1FFF;
  src: url('/fonts/eczar-greek-ext-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09;
  src: url('/fonts/eczar-devanagari-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
  src: url('/fonts/eczar-latin-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
  src: url('/fonts/eczar-latin-ext-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
  src: url('/fonts/eczar-greek-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
  src: url('/fonts/eczar-latin-ext-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09;
  src: url('/fonts/eczar-devanagari-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+1F00-1FFF;
  src: url('/fonts/eczar-greek-ext-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
  src: url('/fonts/eczar-greek-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Eczar';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
  src: url('/fonts/eczar-latin-wght-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
  src: url('/fonts/source-sans-pro-vietnamese-400-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0370-03FF;
  src: url('/fonts/source-sans-pro-greek-400-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
  src: url('/fonts/source-sans-pro-cyrillic-400-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
  src: url('/fonts/source-sans-pro-latin-ext-400-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
  src: url('/fonts/source-sans-pro-latin-400-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
  src: url('/fonts/source-sans-pro-cyrillic-ext-400-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+1F00-1FFF;
  src: url('/fonts/source-sans-pro-greek-ext-400-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
  src: url('/fonts/source-sans-pro-cyrillic-ext-600-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+1F00-1FFF;
  src: url('/fonts/source-sans-pro-greek-ext-600-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
  src: url('/fonts/source-sans-pro-cyrillic-600-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+0370-03FF;
  src: url('/fonts/source-sans-pro-greek-600-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
  src: url('/fonts/source-sans-pro-latin-600-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
  src: url('/fonts/source-sans-pro-latin-ext-600-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
  src: url('/fonts/source-sans-pro-vietnamese-600-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+1F00-1FFF;
  src: url('/fonts/source-sans-pro-greek-ext-700-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
  src: url('/fonts/source-sans-pro-cyrillic-700-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
  src: url('/fonts/source-sans-pro-cyrillic-ext-700-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
  src: url('/fonts/source-sans-pro-latin-ext-700-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
  src: url('/fonts/source-sans-pro-vietnamese-700-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
  src: url('/fonts/source-sans-pro-latin-700-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0370-03FF;
  src: url('/fonts/source-sans-pro-greek-700-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  unicode-range: U+0370-03FF;
  src: url('/fonts/source-sans-pro-greek-900-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
  src: url('/fonts/source-sans-pro-latin-900-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  unicode-range: U+1F00-1FFF;
  src: url('/fonts/source-sans-pro-greek-ext-900-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
  src: url('/fonts/source-sans-pro-vietnamese-900-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
  src: url('/fonts/source-sans-pro-cyrillic-900-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
  src: url('/fonts/source-sans-pro-cyrillic-ext-900-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
  src: url('/fonts/source-sans-pro-latin-ext-900-normal.woff2') format('woff2');
}

@font-face {
  font-family: 'iosevka';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/iosevka-regular.3de44b16.woff2') format('woff2');
}

@font-face {
  font-family: 'iosevka';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/fonts/iosevka-semibold.192329bc.woff2') format('woff2');
}

@font-face {
  font-family: 'iosevka';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/iosevka-bold.a4b03190.woff2') format('woff2');
}

@font-face {
  font-family: 'Neco';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/Neco-Regular.woff2') format('woff2');
}

@font-face {
  font-family: 'Neco';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/Neco-Italic.woff2') format('woff2');
}

@font-face {
  font-family: 'Neco';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/Neco-Medium.woff2') format('woff2');
}

@font-face {
  font-family: 'Neco';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/Neco-MediumItalic.woff2') format('woff2');
}

@font-face {
  font-family: 'Neco';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/Neco-Bold.woff2') format('woff2');
}

@font-face {
  font-family: 'Neco';
  font-style: italic;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/Neco-BoldItalic.woff2') format('woff2');
}

@font-face {
  font-family: 'Neco';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url('/fonts/Neco-Black.woff2') format('woff2');
}

@font-face {
  font-family: 'Neco';
  font-style: italic;
  font-weight: 900;
  font-display: swap;
  src: url('/fonts/Neco-BlackItalic.woff2') format('woff2');
}

/* ---------------------------------------------------------------------------
   霞鹜臻楷 GB（LXGW ZhenKai GB）—— 举例项目的默认中文字体
   ---------------------------------------------------------------------------
   来源：举例项目/Aaalice_NAI_Launcher-Android/fonts/LXGWZhenKaiGB-Regular.ttf
        （pubspec.yaml:110-113 声明的 family = "LXGW ZhenKai GB"，唯一字重 Regular）。
   **已子集化（2026-10，用户要求「做子集」）**：
     · 原 TTF 17,482,814 B（17.5 MB）/ 无损 woff2 9,522,360 B（9.1 MB）
     · 子树集：GB2312 全部 6763 汉字 + 本项目源码/文案里出现的 CJK 字符（44 个生僻字，如画师名/角色名）
       + ASCII 可打印字符 + 常用中文标点 ⇒ 共 6940 个字符
     · 体积：woff2 **2.48 MB**（≈原 woff2 的 27%，省 73% 带宽）；字形 23878 → 6923
     · 覆盖校验：6940 个目标字符中 **6923 命中**，缺失 17 个全是 emoji（原字体本来就没有）
     · 子集字符清单：`public/fonts/_subset_chars.txt`；重建命令：fontTools.subset --text-file=_subset_chars.txt --flavor=woff2
   ⚠ **只声明 woff2**：TTF 已不再作为 src 兜底（17.5 MB 太重，且 woff2 覆盖全部目标浏览器；
     需要兼容极老浏览器时再把它加回来）。原 9.1 MB woff2 备份在 LXGWZhenKaiGB-Regular.woff2.bak（不入库）。
   ⚠ font-display: swap：中文字形未就绪时先用回退字体渲染，绝不阻塞首屏。
   unicode-range 不写：西文也会命中它——所以**不要**把它放到
     --ds-font-sans 的首位（那会让英文/数字失去 Source Sans Pro 的多字重层次），
     而是只作为「中文字体」插在原有西文字体之后（见 tokens.css / generation.css 的字体链）。
   ⚠ 子集化的代价：**子集外**的生僻字（极罕见的姓名/异体字）会回落到系统字体，字形略有差异。
     若线上收到「某字显示成系统字体」的反馈，把该字补进 _subset_chars.txt 重新生成即可。
   --------------------------------------------------------------------------- */
@font-face {
  font-family: 'LXGW ZhenKai GB';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/LXGWZhenKaiGB-Regular.woff2') format('woff2');
}
