/* ===== P2-T4：自托管字体 Noto Serif SC 子集（落位批；计划 §5.4「@font-face 与落位 = Arden」）
   两片同名同权，靠 unicode-range 分片下载：core = 站点骨架/报告页/奇人堂/app 标签/rules 引文；
   lib = 书库·术语页生僻字（只在真用到时下载）。产物与 OFL 许可见 web/assets/fonts/。
   ⚠ 两段 @font-face 的 src 与 unicode-range **照抄** .kimi/tools/font_subset_manifest.json 的
     `css_hint`（机器生成、已逐码点比对）；字体重建后**必须**重抄：跑
     `python3 .kimi/tools/p2t4_css_hint_sync.py --verify-cmap`（重抄 + 离线核对两片 cmap），
     勿手改；折行宽度 98 由该脚本决定。
   只有 Regular 一个字重：700 由浏览器合成，或回落系统衬线栈（见下方 --font-serif）。 */
@font-face{font-family:"Noto Serif SC Subset";font-style:normal;font-weight:400;font-display:swap;
  src:url("/assets/fonts/notoserifsc-core.160ce8bd.woff2") format("woff2");
  unicode-range:U+0020-007E, U+00A5, U+00A7, U+00A9, U+00B0-00B1, U+00B7, U+00D7, U+00F7,
    U+2013-2014, U+201C-201D, U+2022, U+2026, U+2032, U+20AC, U+2103, U+2190, U+2192-2194, U+21D2,
    U+2212, U+2260, U+2264-2265, U+2460-2465, U+25A1, U+25C6, U+2600, U+2640, U+2642, U+26A0,
    U+2713, U+3001-3002, U+3008-3011, U+3014-3015, U+301C, U+3042, U+3044, U+3046, U+3048,
    U+304A-304F, U+3051-305B, U+305D, U+305F-3060, U+3063-306B, U+306E-3070, U+3073, U+3078-3079,
    U+307E-3082, U+3084, U+3088-308C, U+308F, U+3092-3093, U+30A1-30A4, U+30A6-30AB, U+30AD,
    U+30AF-30B1, U+30B3-30B5, U+30B7-30BB, U+30BE-30C1, U+30C3-30C4, U+30C6-30CB, U+30CD,
    U+30CF-30D1, U+30D3-30D7, U+30D9-30DA, U+30DC-30DE, U+30E0-30E3, U+30E5, U+30E7, U+30E9-30ED,
    U+30EF, U+30F3, U+30FB-30FC, U+4E00-4E01, U+4E03, U+4E07, U+4E09-4E0B, U+4E0D-4E0E, U+4E11,
    U+4E13-4E14, U+4E16, U+4E19-4E1A, U+4E1C, U+4E22, U+4E24-4E26, U+4E2A, U+4E2D, U+4E30, U+4E32,
    U+4E34, U+4E3A-4E3B, U+4E3E, U+4E43, U+4E45, U+4E48-4E49, U+4E4B, U+4E4E, U+4E50, U+4E58-4E59,
    U+4E5D, U+4E5F-4E61, U+4E66, U+4E70, U+4E7E, U+4E80, U+4E86, U+4E88-4E89, U+4E8B-4E8C, U+4E8E,
    U+4E91-4E92, U+4E94, U+4E9B, U+4EA1, U+4EA4-4EA7, U+4EAB-4EAC, U+4EAE, U+4EB2, U+4EBA,
    U+4EC0-4EC1, U+4EC5, U+4ECA-4ECB, U+4ECD-4ECE, U+4ED3, U+4ED5-4ED6, U+4ED8, U+4EE3-4EE5,
    U+4EEC, U+4EF2, U+4EF6-4EF7, U+4EFB, U+4EFD, U+4F0D, U+4F0F, U+4F11, U+4F17-4F1A, U+4F1D,
    U+4F20, U+4F24, U+4F26, U+4F34, U+4F38, U+4F3A, U+4F46, U+4F4D-4F50, U+4F53, U+4F55, U+4F59,
    U+4F5C, U+4F60, U+4F75, U+4F7F, U+4F86, U+4F8B, U+4F9B, U+4F9D, U+4FA1, U+4FA3, U+4FA7,
    U+4FAE, U+4FBF, U+4FC3, U+4FD7, U+4FDD, U+4FE1, U+4FEE, U+4FF1, U+500B, U+5011-5012, U+5019,
    U+501F, U+503C, U+503E, U+5047, U+504F, U+505A, U+505C, U+5065, U+5076, U+508D, U+50A8,
    U+50B3, U+50B7, U+50C5, U+50CF, U+50F9, U+5132, U+5141, U+5143-5145, U+5148-5149, U+514B,
    U+514D, U+5154, U+515C, U+5165, U+5167-5169, U+516B-516D, U+5171, U+5173, U+5176-5178,
    U+517B-517C, U+5185-5186, U+518A, U+518C-518D, U+5199, U+519C, U+51AC, U+51B0, U+51B2-51B3,
    U+51B5, U+51B7, U+51BB, U+51C0, U+51C6, U+51D1, U+51E0-51E1, U+51E6, U+51ED, U+51F6,
    U+51FA-51FB, U+51FD, U+5200, U+5203, U+5206-5207, U+5211-5212, U+5217, U+5219-521B, U+521D,
    U+5220, U+5224-5225, U+5229-522B, U+5230, U+5232, U+5236-5237, U+523B, U+5247, U+524A-524B,
    U+524D, U+5251, U+5265, U+5269-526A, U+526F, U+5288, U+529B, U+529E-52A1, U+52A8-52A9, U+52AB,
    U+52B2-52B3, U+52B9, U+52BF, U+52D5, U+52D9, U+52E2, U+52FE-52FF, U+5305, U+5316-5317,
    U+5339-533B, U+533F-5341, U+5343, U+5345, U+5347-5348, U+534A, U+534E-534F, U+5351,
    U+5355-5358, U+5360-5361, U+536B, U+536F-5371, U+5373-5374, U+5386, U+538B, U+539A, U+539F,
    U+53B3, U+53BB, U+53BF, U+53C1-53C3, U+53C8-53CE, U+53D1, U+53D6-53D8, U+53E0, U+53E3-53E6,
    U+53EA-53EB, U+53EF-53F0, U+53F2-53F3, U+53F6-53F8, U+5403-5404, U+5408-540A, U+540C-540E,
    U+5410-5411, U+5417, U+541B, U+5426, U+542B-542C, U+542F, U+5438, U+5448, U+544A, U+5468,
    U+5473, U+547C-547D, U+548C, U+54A8, U+54C1, U+54C8, U+54CD, U+54E5, U+54EA, U+552E-552F,
    U+5546, U+554F, U+555F, U+5582, U+5584, U+559C, U+55AE, U+55CE, U+5668, U+56B4, U+56CA,
    U+56DB, U+56DE, U+56E0, U+56E2, U+56ED, U+56F2-56F4, U+56FA, U+56FD-56FE, U+5706, U+5708,
    U+570B, U+571F, U+5728, U+5730, U+573A, U+573E, U+5740, U+5747, U+574F-5750, U+5757, U+575A,
    U+5761, U+5764, U+5766, U+5783, U+578B, U+57A3, U+57CB, U+57CE, U+57DF, U+57F7, U+57F9-57FA,
    U+5802, U+5821, U+5824, U+5831, U+5834, U+5851, U+585E, U+586B, U+5883, U+5893, U+5899,
    U+589E, U+58A8, U+58C1, U+58EB-58EC, U+58F0, U+58F2-58F3, U+58F9, U+5904, U+5907, U+5909,
    U+590D, U+590F, U+5916, U+591A, U+591C, U+591F, U+5927, U+5929-592B, U+592D-592E, U+5931,
    U+5934, U+5947, U+5949, U+594F, U+5951, U+5954, U+5957, U+5973, U+597D, U+5982, U+59B9,
    U+59BB, U+59BE, U+59CB, U+59FB, U+5A01, U+5A1B, U+5A2F, U+5A31, U+5A5A, U+5B50, U+5B57-5B58,
    U+5B5D, U+5B63-5B64, U+5B66, U+5B78, U+5B81, U+5B83, U+5B85, U+5B88-5B89, U+5B8B-5B8C,
    U+5B97-5B98, U+5B9A, U+5B9C-5B9F, U+5BA1-5BA3, U+5BAB, U+5BB3, U+5BB6, U+5BB9, U+5BBD, U+5BBF,
    U+5BC4-5BC6, U+5BCC, U+5BD2, U+5BDF, U+5BE6, U+5BEB, U+5BF6, U+5BF9, U+5BFC, U+5BFE-5BFF,
    U+5C01-5C02, U+5C04, U+5C06-5C08, U+5C0A-5C0B, U+5C0D, U+5C0F, U+5C11, U+5C14, U+5C1A, U+5C24,
    U+5C31, U+5C3D-5C3E, U+5C40, U+5C42, U+5C45, U+5C48-5C4B, U+5C4F, U+5C51, U+5C55, U+5C5E,
    U+5C64, U+5C6C, U+5C71, U+5C81, U+5CF0, U+5DDD-5DDE, U+5DE5-5DE6, U+5DE8, U+5DEE, U+5DF1-5DF3,
    U+5E01-5E03, U+5E0C, U+5E26-5E27, U+5E2E, U+5E38, U+5E42, U+5E45, U+5E55, U+5E63, U+5E72-5E74,
    U+5E76, U+5E7E-5E7F, U+5E83, U+5E8F, U+5E93-5E95, U+5E9A, U+5E9F, U+5EA6, U+5EAB, U+5EAD,
    U+5EB7, U+5EE3, U+5EFA, U+5EFF-5F00, U+5F02-5F03, U+5F0A, U+5F0F, U+5F15, U+5F20, U+5F31,
    U+5F37, U+5F39-5F3A, U+5F52-5F53, U+5F55, U+5F62, U+5F71, U+5F79, U+5F80-5F81, U+5F84-5F85,
    U+5F88, U+5F8B-5F8C, U+5F91, U+5F93, U+5F97, U+5FA1, U+5FAA, U+5FAE, U+5FB7, U+5FBD, U+5FC3,
    U+5FC5-5FC6, U+5FCC, U+5FD7, U+5FDC, U+5FE0, U+5FE7, U+5FEB, U+5FF5, U+6000-6001, U+600E,
    U+6015, U+601D, U+6025, U+6027, U+602F, U+603B, U+6052, U+6062, U+606F, U+6089, U+60A3,
    U+60A8, U+60AC, U+60C5, U+60CA, U+60D1, U+60F3, U+6101, U+610F, U+611F, U+613F, U+6148,
    U+614B, U+6162, U+6167, U+6191, U+61C2, U+61C9, U+620A, U+620C, U+6210-6212, U+6216, U+6218,
    U+622A, U+6236-6238, U+623B, U+6240, U+624B, U+624D, U+6253, U+6255, U+625B, U+6263, U+6267,
    U+626C, U+6271, U+6276, U+6279, U+627E-6280, U+6284, U+628A, U+6291, U+6293, U+6295-6296,
    U+6298, U+629B, U+629E, U+62A2, U+62A4-62A5, U+62AB-62AC, U+62B1, U+62BD, U+62C5-62C6, U+62C9,
    U+62D2, U+62D6, U+62D8, U+62E0, U+62E6, U+62E9, U+62EC, U+62FC-62FF, U+6301-6302, U+6307,
    U+6309, U+6321, U+6325, U+634C, U+635F, U+6362, U+636E, U+6389, U+6392, U+63A1-63A2, U+63A5,
    U+63A7-63AA, U+63D0, U+63D2, U+63DB, U+63E1, U+63F4, U+641C, U+642C, U+6458, U+6491, U+649E,
    U+64A4, U+64B0, U+64C7, U+64CD-64CE, U+64DA, U+652F, U+6536, U+6539, U+653E-653F, U+6545,
    U+6548, U+654F, U+6551, U+6557, U+655B, U+6562, U+6566, U+656C, U+6570, U+6574, U+6578,
    U+6587, U+6597, U+6599, U+65AD, U+65AF-65B0, U+65B7, U+65B9, U+65BC, U+65C1, U+65E0, U+65E2,
    U+65E5, U+65E7, U+65E9, U+65EC, U+65F6, U+65FA, U+660C, U+660E-660F, U+6613, U+661F-6620,
    U+6625, U+662D, U+662F, U+663E, U+6642, U+665A, U+6666, U+6668, U+666E-6670, U+667A, U+6682,
    U+6691, U+6696-6697, U+66A6, U+66AB, U+66C6, U+66F0, U+66F2, U+66F4, U+66F8, U+66FE-6700,
    U+6703, U+6708-6709, U+670B, U+670D, U+671B, U+671F, U+6728, U+672A-672C, U+672F, U+6731,
    U+673A, U+6740, U+6742-6743, U+6750, U+675C, U+675F, U+6761, U+6765, U+6768, U+6771,
    U+677E-677F, U+6781, U+6784, U+6790, U+6797, U+679A, U+679C, U+67AF, U+67B6, U+67CF-67D0,
    U+67D2-67D4, U+67D8, U+67E5, U+67F1, U+67F3, U+6807, U+680F, U+6811, U+6821, U+6837-6839,
    U+683C, U+6841, U+6843, U+6846, U+6848, U+684C, U+6851, U+685C, U+6863, U+689D, U+68C0,
    U+68C4, U+690D, U+691C, U+695A, U+696D, U+6975, U+697C-697D, U+6982, U+69B4, U+69CB, U+6A02,
    U+6A19, U+6A21, U+6A2A, U+6A31, U+6A5F, U+6A94, U+6AA2, U+6B04, U+6B21-6B22, U+6B3A, U+6B3E,
    U+6B4C, U+6B62-6B65, U+6B67, U+6B78, U+6B7B, U+6B8A-6B8B, U+6BB5, U+6BBA, U+6BC5, U+6BCD,
    U+6BCF, U+6BD4, U+6BDB, U+6C14, U+6C17, U+6C23, U+6C34, U+6C38, U+6C42, U+6C49, U+6C5F,
    U+6C6A, U+6C7A, U+6C89, U+6C92, U+6C99, U+6C9B, U+6C9F, U+6CA1-6CA2, U+6CB3, U+6CBB, U+6CBF,
    U+6CC4, U+6CC9, U+6CD5, U+6CE2, U+6CE5, U+6CE8, U+6CF0, U+6CFD, U+6D0B, U+6D17, U+6D1E,
    U+6D25, U+6D3B, U+6D3E, U+6D41, U+6D4A-6D4B, U+6D4E-6D4F, U+6D59, U+6D5C, U+6D6A, U+6D6E,
    U+6D77, U+6D88-6D89, U+6DA6-6DA7, U+6DC0, U+6DD8, U+6DF1, U+6DF5, U+6DF7, U+6E05, U+6E08,
    U+6E0A, U+6E10, U+6E29, U+6E2C, U+6E2F, U+6E32, U+6E38, U+6E56, U+6E58, U+6E7F, U+6E90,
    U+6E96, U+6EA2, U+6EAA, U+6EAF, U+6ECB, U+6ED1, U+6EDA, U+6EDE, U+6EE1, U+6EE8, U+6EF4,
    U+6F02, U+6F0F, U+6F14, U+6F22, U+6F5C, U+6FC0, U+706B, U+706D, U+706F, U+7075, U+707E,
    U+7089, U+708E, U+70B9-70BA, U+70BC, U+70C8, U+70DB, U+70E7, U+70ED, U+7109, U+711A, U+7121,
    U+7126, U+7136, U+7146, U+715E, U+7167, U+71E5, U+7231, U+7236, U+7247-7248, U+724C, U+725B,
    U+7269, U+7275, U+7279, U+72AC, U+72B6, U+72B9, U+72D7, U+72EC, U+7316, U+731B-731C, U+732A,
    U+732E, U+7334, U+737B, U+7387, U+7389, U+7396, U+73AF-73B0, U+73E0, U+73ED, U+73FE, U+7403,
    U+7406, U+74B0, U+7518, U+751F, U+7528, U+7530-7533, U+7535, U+7537, U+753B, U+754C, U+754F,
    U+7559, U+7565, U+756A, U+7570, U+7574, U+7576, U+7587, U+758F, U+7591, U+7597, U+75BE,
    U+75C5, U+75C7, U+7624, U+7642, U+764C, U+7678, U+767A-767E, U+7684, U+76AE, U+76CA, U+76D1,
    U+76D6, U+76D8, U+76DB, U+76E4, U+76EE-76EF, U+76F4, U+76F8, U+76FE, U+7701, U+770B, U+771F,
    U+7740, U+77DB, U+77E5, U+77E9, U+77ED, U+77F3, U+7801, U+7814, U+7834, U+786C, U+786E,
    U+78B0, U+78BA, U+78BC, U+793A, U+793C, U+793E, U+7956, U+795E, U+7981, U+7984, U+798F,
    U+79BB, U+79C0-79C1, U+79CB, U+79CD, U+79D1-79D2, U+79EF-79F0, U+79FB, U+7A0B, U+7A0D, U+7A2E,
    U+7A33, U+7A3F, U+7A76-7A77, U+7A7A, U+7A81, U+7A84, U+7A97, U+7AAE, U+7ACB, U+7AD6, U+7AD9,
    U+7ADE, U+7AE0, U+7AEF, U+7B14, U+7B26, U+7B2C, U+7B49, U+7B54, U+7B56, U+7B7E, U+7B80,
    U+7B94, U+7B97, U+7BA1, U+7BAD, U+7BB1, U+7BC0, U+7BC4, U+7BC7, U+7C07, U+7C21, U+7C4D,
    U+7C50, U+7C7B, U+7CBE, U+7CCA, U+7CFB, U+7D04, U+7D0D, U+7D20, U+7D22, U+7D27, U+7D2F-7D30,
    U+7D42, U+7D4C, U+7D50, U+7D61, U+7D66, U+7D71, U+7D93, U+7D9A, U+7DB2, U+7DDA, U+7DE3,
    U+7DE8, U+7DEF, U+7E41, U+7E8C, U+7EA2, U+7EA6-7EA7, U+7EAC, U+7EAF, U+7EB2-7EB3, U+7EBF,
    U+7EC4, U+7EC6, U+7EC8, U+7ECF, U+7ED1, U+7ED3, U+7ED5, U+7ED8-7ED9, U+7EDC-7EDD, U+7EDF,
    U+7EE7, U+7EEA, U+7EED, U+7EF4, U+7EF6, U+7EFF, U+7F13, U+7F16, U+7F18, U+7F3A, U+7F51,
    U+7F57, U+7F69, U+7F6E, U+7F8A, U+7F8E, U+7FCC, U+8001, U+8003, U+8005, U+800C, U+8017,
    U+8026, U+804C, U+8054, U+805A, U+806F, U+8072, U+8083, U+8086, U+8096, U+809D, U+80A0,
    U+80A9, U+80AF, U+80BA, U+80BE-80BF, U+80C3, U+80C6, U+80DC, U+80F1, U+80F6, U+80FD, U+8106,
    U+810F, U+811A, U+8131, U+813E, U+8151, U+817B, U+817E, U+8180, U+81EA, U+81F3-81F4, U+81FA,
    U+8207, U+820D, U+8212, U+822A, U+826F, U+8272, U+827A, U+8282, U+8292, U+82B1, U+82E5,
    U+82F1, U+8303, U+8349, U+8361, U+8377, U+83AB, U+83DC, U+841D, U+8425, U+843D, U+84C4,
    U+85AA, U+85CF, U+85E4, U+864E, U+8651, U+8655, U+865A, U+865F, U+867D, U+86C7, U+86F0,
    U+878D, U+8840, U+884C, U+8853, U+8865, U+8868, U+8870, U+88AB, U+88C1, U+88C5, U+88DC,
    U+88F8, U+88FD, U+8907, U+897F, U+8981, U+8986, U+898B, U+898F, U+8996, U+89A7, U+89C1-89C2,
    U+89C4, U+89C6, U+89C8-89C9, U+89D2, U+89E3, U+89E6, U+8A00, U+8A02, U+8A08, U+8A0A, U+8A18,
    U+8A2A, U+8A3B-8A3C, U+8A66, U+8A6E, U+8A71-8A73, U+8A8C-8A8D, U+8A9E, U+8AA4, U+8AAA, U+8AAD,
    U+8AB2, U+8ABF, U+8ACB, U+8AD6, U+8B49, U+8B66, U+8B70, U+8B80, U+8BA1-8BA2, U+8BA4,
    U+8BA8-8BA9, U+8BAD-8BAE, U+8BB0, U+8BB2, U+8BB8, U+8BBA, U+8BBE-8BC1, U+8BC6, U+8BCA, U+8BCD,
    U+8BD5, U+8BDD, U+8BE0, U+8BE2, U+8BE5-8BE6, U+8BED, U+8BEF, U+8BF4, U+8BF7, U+8BFA-8BFB,
    U+8C03, U+8C0B, U+8C13, U+8C31, U+8C37, U+8C61, U+8CA1, U+8CA8-8CA9, U+8CAC, U+8CB7, U+8CBB,
    U+8CC7, U+8CEA, U+8CEC, U+8CF4, U+8CFC, U+8D1F, U+8D22-8D26, U+8D28, U+8D2D, U+8D30,
    U+8D34-8D35, U+8D39, U+8D44, U+8D4B, U+8D56, U+8D60, U+8D70, U+8D77, U+8D85, U+8D8A, U+8DB3,
    U+8DD1, U+8DDD, U+8DDF, U+8DE8, U+8DEF, U+8DF3, U+8E0F, U+8E81, U+8EAB, U+8EDF, U+8EE2,
    U+8F09, U+8F14, U+8F38, U+8F49, U+8F6C, U+8F6E-8F6F, U+8F7B, U+8F7D, U+8F83, U+8F85, U+8F91,
    U+8F93, U+8F9B, U+8F9E-8F9F, U+8FA8, U+8FB0, U+8FB2, U+8FB9, U+8FBC, U+8FBE, U+8FC1, U+8FC7,
    U+8FD0-8FD1, U+8FD4, U+8FD8-8FD9, U+8FDB-8FDE, U+8FF0, U+8FF7, U+8FFD, U+9000-9002, U+9004,
    U+9006, U+9009, U+900F-9010, U+9014, U+901A, U+901F-9020, U+9022-9023, U+9032, U+903B, U+9047,
    U+904B, U+904D-904E, U+9053-9055, U+906E, U+9078, U+907F, U+9084, U+90A3, U+90AE, U+90E8,
    U+90F5, U+90FD, U+9149, U+914D, U+9192, U+91AB, U+91C7-91C8, U+91CA, U+91CC-91CD, U+91CF,
    U+91D1, U+91DD, U+9274, U+92B7, U+9304, U+932F, U+9332, U+9336, U+9375, U+9396, U+93C8,
    U+9418, U+9451, U+9488, U+949F, U+94AE, U+94B1, U+94F6, U+94FA, U+94FE, U+9500-9501, U+950B,
    U+9510, U+9519-951A, U+952E, U+955C, U+957F, U+9589, U+958B, U+958F, U+9593, U+95B1-95B2,
    U+95DC, U+95E8, U+95EA, U+95ED-95EE, U+95F0, U+95F4, U+95F8, U+9605, U+9614, U+961F,
    U+9632-9634, U+9636, U+963B, U+9644-9646, U+964D, U+9650, U+9664, U+9669, U+9678, U+967D,
    U+968E-9690, U+9694, U+969B-969C, U+96A8, U+96B1, U+96BE, U+96C5-96C6, U+96D9, U+96E2, U+96E8,
    U+96EA, U+96F6, U+96FB, U+9700, U+971C, U+9732, U+9739, U+9759, U+975E, U+9760, U+9762,
    U+97E7, U+97F3, U+97FF, U+9801, U+9805, U+984C-984D, U+986F, U+9875-9876, U+9879-987B, U+9884,
    U+9886, U+9891, U+9897-9898, U+989D, U+98CE, U+98DE-98DF, U+9918, U+9970, U+9986, U+9996,
    U+9A57, U+9A6C, U+9A7B, U+9A7F, U+9A8C, U+9A91, U+9AA8, U+9AC4, U+9AD3-9AD4, U+9AD8, U+9B44,
    U+9E21, U+9EBC, U+9EC4, U+9ECE, U+9ED8, U+9EDE, U+9F20, U+9F50, U+9F84, U+9F99, U+FF01,
    U+FF03, U+FF05-FF06, U+FF08-FF0D, U+FF0F-FF1B, U+FF1D, U+FF1F, U+FF5C, U+FF5E, U+FFE5}
@font-face{font-family:"Noto Serif SC Subset";font-style:normal;font-weight:400;font-display:swap;
  src:url("/assets/fonts/notoserifsc-lib.d2642340.woff2") format("woff2");
  unicode-range:U+2018-2019, U+2191, U+2208, U+220B, U+25C7, U+3007, U+305C, U+306C, U+307B,
    U+30AE, U+30B6, U+30BD, U+30E6, U+30E8, U+4E1D, U+4E39, U+4E3D, U+4E4C, U+4E57, U+4E71,
    U+4E8F, U+4E9A, U+4EA2, U+4EA9, U+4ED7, U+4F0A, U+4F30, U+4F3C, U+4F69, U+4FDF, U+501A,
    U+5021, U+5024, U+5055, U+50B2, U+513F, U+5146, U+514C, U+514E, U+5150, U+5170, U+5174-5175,
    U+51A2, U+51BD, U+51C9, U+51CC, U+51DD, U+51E4, U+523A, U+525B, U+528D, U+52A3, U+52AA,
    U+52B4, U+52C7, U+52D2, U+5319, U+5320, U+5323, U+5353, U+535C, U+5377-5378, U+5384, U+53D9,
    U+541E, U+54B1, U+54FA, U+5553, U+56CD, U+56DA, U+56E3, U+56F0, U+5723, U+5733, U+574E,
    U+5751, U+5782, U+5835, U+585A, U+58E4, U+58EE, U+5915, U+5938-593A, U+5984, U+59C6, U+59D0,
    U+59D4, U+5AE1, U+5B5F, U+5B9B, U+5BA4, U+5BE1, U+5BFB, U+5C0E, U+5C1D, U+5C3C, U+5CB8,
    U+5D2D, U+5D4C, U+5DE1, U+5DF4, U+5DFD, U+5E06, U+5E08, U+5E1D, U+5E2F, U+5E33, U+5E36,
    U+5E7B, U+5EA7, U+5EE2, U+5EF7, U+5F18, U+5F1F, U+5F7B-5F7C, U+5FD8, U+5FFD, U+6028, U+6043,
    U+604B, U+6050, U+6075, U+609F, U+60DC, U+60E0, U+6108, U+614E, U+61D2, U+624E, U+6258,
    U+626B, U+626F-6270, U+6297, U+62B9, U+62D9, U+62DC, U+62DF, U+62E5, U+62E8, U+6311,
    U+632A-632B, U+6388, U+638C, U+6396, U+639B, U+63B7, U+641E, U+643A, U+6442, U+6444,
    U+6446-6447, U+64A5, U+64C5, U+6500, U+6514, U+6559, U+6563, U+658B, U+659C, U+65A5, U+65BD,
    U+65E6, U+6633, U+6653, U+66AE, U+66B4, U+66DC, U+66FC, U+6717, U+671D, U+6746, U+6749,
    U+6760, U+676D, U+677C, U+67A0, U+67F4, U+67FB, U+680B, U+683D, U+6881, U+68B0, U+68F5,
    U+694A, U+69AE, U+6B20, U+6B32, U+6B69, U+6B6F, U+6B73, U+6BCB, U+6BD2, U+6C11, U+6C27,
    U+6C37, U+6C57, U+6C5A, U+6C61, U+6C83, U+6C96, U+6CCC, U+6CE1, U+6CF7, U+6D01, U+6D1B,
    U+6D2A, U+6D3C-6D3D, U+6D44-6D45, U+6D66, U+6D78, U+6D9B, U+6DA9, U+6DB5, U+6DBC, U+6DD1,
    U+6E0B, U+6E17, U+6E21, U+6E4A, U+6E80, U+6E9D, U+6EBD, U+6EDD, U+6EE4-6EE5, U+6F38, U+6F5F,
    U+6F64, U+6F88, U+6F97, U+6FD1, U+6FE1, U+700F, U+702C, U+704C, U+70AD, U+70BD, U+70E6,
    U+7130, U+713C, U+7169, U+7184, U+719F, U+71AC, U+71C3, U+71C8, U+71DF, U+7206, U+7210,
    U+722C, U+7262, U+72AF, U+72C0, U+72C2, U+72ED, U+733F, U+7384, U+73C0, U+73CD, U+73DE,
    U+7422, U+742D, U+74DC, U+74F6, U+7522-7523, U+753A, U+7545, U+7551, U+755D, U+756B, U+7573,
    U+7586, U+75D5, U+760D, U+7686-7687, U+76C6, U+76C8, U+76D2, U+76E1, U+76E3, U+76F2, U+7709,
    U+770C, U+7720, U+7737, U+773C, U+7761, U+7766, U+77BB, U+77E3, U+77EB, U+77EF, U+77F6,
    U+77FF, U+7815, U+7840, U+788D-788E, U+78CA, U+78E8, U+790E, U+7965, U+7978, U+7980, U+79BA,
    U+79BE-79BF, U+79C3, U+79D8, U+79E9, U+7A31-7A32, U+7A37, U+7A3B-7A3C, U+7A42, U+7A46, U+7A4F,
    U+7A57, U+7A7F, U+7A83, U+7A93, U+7AAA, U+7ADC, U+7AF6, U+7B3C, U+7B46, U+7B51, U+7B79,
    U+7BB4, U+7BC9, U+7BED, U+7C8B, U+7C97, U+7CB9, U+7D00, U+7D0B, U+7D14, U+7D19-7D1A, U+7D44,
    U+7D55, U+7D75-7D76, U+7D79, U+7DB1, U+7DBF, U+7DCA, U+7DCF, U+7DD1, U+7DF4, U+7E01, U+7E2B,
    U+7E2E, U+7E3D, U+7E54, U+7E6B, U+7E70, U+7E7C, U+7EAA, U+7EB8-7EB9, U+7EBD, U+7EC3, U+7EC7,
    U+7ECA, U+7EE2-7EE3, U+7EF5, U+7EFC, U+7F1A, U+7F1C-7F1D, U+7F20, U+7F29, U+7FBD, U+7FD5,
    U+7FF0, U+7FFB-7FFC, U+8010, U+8015, U+804A, U+806A, U+8077, U+80A2, U+80A5, U+80B2, U+80CC,
    U+80CE, U+80E1, U+80F8, U+8109, U+8111, U+814A, U+816B, U+8173, U+8179, U+81E3, U+821E,
    U+822C, U+826E, U+827E, U+829D, U+82B8, U+82CF, U+82E6, U+8350, U+8352, U+8366, U+836B,
    U+836F, U+83B7, U+840C, U+8457, U+8462, U+8499, U+8513, U+8535, U+8574, U+8584, U+85A6,
    U+85E9, U+863F, U+865B, U+8721, U+87C4, U+881F, U+8861, U+8896, U+88F9, U+895F, U+89AA,
    U+89BD, U+8A23, U+8A2D, U+8A55, U+8A5E, U+8A62, U+8A89, U+8AAC, U+8AC7, U+8AEE, U+8B1B,
    U+8B58, U+8B6C, U+8B77, U+8B8A, U+8B93, U+8BB3, U+8BBC, U+8BC4, U+8BC9, U+8BD1, U+8BDA,
    U+8BF1, U+8BF8, U+8C01, U+8C05, U+8C0E, U+8C28, U+8C41, U+8C5A, U+8C6B-8C6C, U+8CB4, U+8CBC,
    U+8CE6, U+8D27, U+8D2A-8D2B, U+8D2F, U+8D5A-8D5B, U+8D62, U+8D6B, U+8D6D, U+8D74, U+8D8B,
    U+8DCC, U+8E47, U+8E8D, U+8EB2, U+8EFD, U+8F66, U+8F86, U+8F88-8F89, U+8FBA, U+8FBF, U+8FC2,
    U+8FC5, U+8FCE, U+8FEA, U+8FF9, U+9003, U+9019, U+901D-901E, U+9031, U+9057, U+9060, U+906D,
    U+90BB, U+90C1, U+914C, U+91CB, U+91CE, U+91E7, U+91F5, U+9215, U+9271, U+92B3, U+92D2,
    U+9489, U+948F, U+9497, U+94A5-94A6, U+94C1, U+9526, U+953B, U+9547, U+9577, U+9580, U+95A2,
    U+95D8, U+95F2, U+9610, U+962A, U+9635, U+963F-9640, U+9648, U+9670, U+9677, U+967A,
    U+9685-9686, U+96C4, U+96D1, U+96D5, U+96DE, U+96F3, U+96F7, U+9704, U+9707, U+9716, U+9742,
    U+975C, U+9769, U+97EC, U+9806, U+9810, U+982D, U+983B, U+987D-987F, U+9890, U+989C, U+98A0,
    U+996E, U+9999, U+99AC, U+99B3, U+99C5, U+9A5A-9A5B, U+9A71, U+9A76, U+9A84, U+9A88, U+9C81,
    U+9C9C, U+9D8F, U+9E23, U+9ED1, U+9F0E, U+9F61-9F62, U+9F7F, U+9F8D, U+9F9F}

/* ---- 2. 基线与 reset ---- */
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--ink-800);
  color: var(--fg);
  font-family: var(--sans);
  font-size: var(--t-body);
  line-height: 1.75;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  transition: background var(--dur-3) var(--ease), color var(--dur-3) var(--ease);
}
img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button, input, select, textarea { font: inherit; color: inherit; }
::selection { background: var(--gold-dim); }

/* 焦点：全站统一 2px 金环，键盘可见、鼠标不出现 */
:focus { outline: none; }
:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 2px;
  border-radius: 1px;
}

.vh {
  position: absolute; width: 1px; height: 1px; margin: -1px;
  padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ---- 3. 版面原子 ---- */
.wrap { width: 100%; max-width: var(--w-max); margin: 0 auto; padding: 0 var(--s5); }
.sec { padding: var(--s9) 0; border-top: 1px solid var(--ink-500); }
.sec--flush { border-top: 0; }

.sec-head { display: flex; align-items: baseline; gap: var(--s4); margin-bottom: var(--s6); }
.sec-num {
  font-family: var(--serif); font-size: var(--t-sm); letter-spacing: .18em;
  color: var(--gold); padding-top: .35em; flex: none;
}
.sec-num::after { content: ""; display: block; width: var(--s6); height: 1px; background: var(--gold-line); margin-top: var(--s2); }
.sec-title { font-family: var(--serif); font-size: var(--t-h2); font-weight: 600; margin: 0; letter-spacing: .02em; }
.sec-desc { color: var(--fg-2); font-size: var(--t-sm); margin: var(--s2) 0 0; max-width: 62ch; }


/* ---- 4. 顶栏 ---- */
.nav {
  position: sticky; top: 0; z-index: 50;
  background: color-mix(in srgb, var(--ink-800) 88%, transparent);
  backdrop-filter: blur(12px) saturate(1.2);
  border-bottom: 1px solid var(--ink-500);
}
.nav-in { display: flex; align-items: center; gap: var(--s6); height: 60px; }
/* 品牌：印章 ＋ 「渊海」一行；英文名弱化跟在中文后（不再上下堆叠，
   堆叠会让 26px 高的印章与两行文字重心错位） */
.brand { display: flex; align-items: center; gap: var(--s3); flex: none; }
.brand-seal {
  width: 26px; height: 26px; display: grid; place-items: center; flex: none;
  border: 1px solid var(--gold); color: var(--gold);
  font-family: var(--serif); font-size: 13px; font-weight: 600;
  background: var(--gold-dim);
}
.brand-name {
  display: flex; align-items: baseline; gap: var(--s2);
  font-family: var(--serif); font-size: var(--t-h3); letter-spacing: .18em; font-weight: 600;
}
.brand-name small {
  font-size: 9px; letter-spacing: .26em; color: var(--fg-3);
  font-family: var(--sans); font-weight: 400;
}
.nav-links { display: flex; gap: var(--s4); margin-left: auto; align-items: center; }
.nav-link {
  font-size: var(--t-sm); color: var(--fg-2); padding: var(--s1) 0;
  position: relative; white-space: nowrap; flex: none;
  transition: color var(--dur-2) var(--ease);
}
.nav-link:hover, .nav-link[aria-current="page"] { color: var(--fg); }
.nav-link::after {
  content: ""; position: absolute; left: 0; right: 100%; bottom: -2px;
  height: 1px; background: var(--gold); transition: right var(--dur-2) var(--ease);
}
.nav-link:hover::after, .nav-link[aria-current="page"]::after { right: 0; }
/* 右侧工具组顺序（用户 2026-10-13 示意图，只取左右顺序）：
   CTA(免费排盘) → 典籍库 → 解读报告 → 奇人堂 → 登录框 → 主题 → 语言
   两个挂载点：navCta 在文字链接之前，navUtil 在文字链接之后。 */
.nav-cta, .nav-util { display: inline-flex; align-items: center; gap: var(--s2); flex: none; }
/* 「我的报告」入口挂位（2026-10-15 用户裁 4＝A）：内容由 renderNavUtil() 写入，
   空态整块收起（JS 未执行完时不留空位）。形态随内层 .nav-link，不另设样式。 */
.nav-mine { display: inline-flex; align-items: center; flex: none; }
.nav-mine:empty { display: none; }
/* 顶栏按钮一律不收缩、不换行：flex 项默认 flex-shrink:1，宽度不足时文字会被挤成两行 */
.nav-cta > *, .nav-util > * { flex: none; white-space: nowrap; }
.nav-cta-btn { min-height: 36px; padding: 0 var(--s4); }
.nav-cta-btn[aria-current="page"] { background: var(--gold-2); border-color: var(--gold-2); }
/* 顶栏账号位 `#acct`：容器沿用设计稿 .acct 胶囊；内容由各页 renderAcct() 写入（邮箱或登录钮）。
   空态（法务页无账号 JS、未登录前的瞬间）整块收起，不留一枚空胶囊。
   内层 .who / #loginBtn 是页内既有 JS 写出的既有类名/id —— 这里只对齐外观，不改 JS。 */
.nav-util .acct:empty { display: none; }
/* 未登录态：容器**不当胶囊** —— 里面的 #loginBtn 自带完整边框，容器再套一圈
   描边/底色/圆角就是双重框（2026-10-15 用户报的第一个问题，实测双层框可见）。
   登录态（.who）仍是设计稿的胶囊，样式不变 ⇒ 用 :has(.who) 区分两种内容。
   ⚠ 老浏览器不支持 :has() 时本规则不命中，但下面两条 transparent 仍生效
   （它们不在 :has 里）⇒ 最坏也是「钮自带完整边框、容器透明」，可接受。 */
.nav-util .acct:not(:has(.who)) {
  border-color: transparent; background: transparent; padding: 0; min-height: 0;
}
.nav-util .acct .who { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: var(--mono); }
.nav-util #loginBtn {
  border: 1px solid var(--gold-line); color: var(--gold); background: var(--gold-dim);
  min-height: 34px; padding: 0 var(--s4); border-radius: var(--radius); cursor: pointer;
  font-family: inherit; font-size: var(--t-xs); font-weight: 600; white-space: nowrap;
  transition: background var(--dur-2) var(--ease), border-color var(--dur-2) var(--ease);
}
.nav-util #loginBtn:hover { background: var(--gold); border-color: var(--gold); color: var(--gold-ink); }

/* 主题 / 语言：无边框「墨点」钮，默认近乎隐形，悬停才浮出淡金圆底。
   不照搬示意图的白圈描边（那只是示意）——全站描边只留给登录框与 CTA。 */
.theme-toggle {
  width: 34px; height: 34px; border: 0; background: transparent;
  border-radius: 50%; cursor: pointer; padding: 0; flex: none;
  display: grid; place-items: center; color: var(--fg-3);
  transition: color var(--dur-2) var(--ease), background var(--dur-2) var(--ease),
              transform var(--dur-1) var(--ease);
}
.theme-toggle:hover { color: var(--gold); background: var(--gold-dim); }
.theme-toggle:active { transform: scale(.94); }
.theme-toggle i { font-style: normal; font-size: 15px; line-height: 1; }
.theme-toggle i::before { content: "☾"; }
[data-theme="light"] .theme-toggle i::before { content: "☀"; }


/* 窄屏汉堡钮（PC 隐藏）：三横线，点击展开抽屉 */
.nav-burger {
  display: none; width: 44px; height: 44px; flex: none;
  border: 1px solid var(--ink-400); background: var(--ink-700); color: var(--fg);
  border-radius: var(--radius); cursor: pointer; padding: 0;
  flex-direction: column; align-items: center; justify-content: center; gap: 4px;
  transition: border-color var(--dur-2) var(--ease), color var(--dur-2) var(--ease);
}
.nav-burger:hover { border-color: var(--gold); color: var(--gold); }
.nav-burger span { display: block; width: 16px; height: 1.5px; background: currentColor; transition: transform var(--dur-2) var(--ease), opacity var(--dur-2) var(--ease); }
.nav-burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(5.5px) rotate(45deg); }
.nav-burger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.nav-burger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-5.5px) rotate(-45deg); }

/* 移动端抽屉 */
.nav-drawer { position: fixed; inset: 60px 0 0; z-index: 49; background: var(--ink-800); overflow-y: auto; }
.nav-drawer[hidden] { display: none; }
.nav-drawer nav { display: grid; padding: var(--s4) var(--s5); }
.nav-drawer nav a {
  padding: var(--s4) var(--s2); font-family: var(--serif); font-size: var(--t-h3);
  color: var(--fg); border-bottom: 1px solid var(--ink-500);
}
.nav-drawer nav a:hover, .nav-drawer nav a[aria-current="page"] { color: var(--gold); }
.nav-drawer-util {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--s3);
  padding: var(--s5); border-top: 1px solid var(--ink-500);
}
.nav-drawer-util .nav-login { min-height: 40px; }


/* ---- 9. 页脚：固定暖纸亮面（两主题下都是宣纸） ---- */
.foot { background: #f3ecdd; color: #4b4436; border-top: 1px solid var(--ink-500); }
.foot a { color: #5d5648; }
.foot a:hover { color: #7d6226; }
.foot-in { display: grid; grid-template-columns: 1.4fr repeat(3, 1fr); gap: var(--s6); padding: var(--s8) 0 var(--s6); }
.foot h3 { font-size: var(--t-xs); letter-spacing: .16em; color: #7d6226; margin: 0 0 var(--s3); font-weight: 600; }
.foot ul { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--s2); font-size: var(--t-sm); }
.foot-bottom {
  border-top: 1px solid #ddd3bf; padding: var(--s4) 0 var(--s6);
  display: flex; flex-wrap: wrap; gap: var(--s4); justify-content: space-between;
  font-size: var(--t-xs); color: #7a7263;
}
.foot-seal {
  width: 40px; height: 40px; display: grid; place-items: center; border: 1px solid #7d6226;
  color: #7d6226; font-family: var(--serif); font-size: 17px; background: rgba(125,98,38,.08);
}
@media (max-width: 720px) { .foot-in { grid-template-columns: 1fr 1fr; } }

/* 登录弹层 */
.modal-root { position: fixed; inset: 0; z-index: 100; display: grid; place-items: center; padding: var(--s4); }
.modal-root[hidden] { display: none; }
.modal-mask { position: absolute; inset: 0; background: color-mix(in srgb, var(--ink-900) 78%, transparent); backdrop-filter: blur(6px); }
/* 关键：width 用 min()——place-items:center 不会收缩超宽子项 */
.modal-box {
  position: relative; width: min(420px, 100%); max-width: 100%;
  background: var(--ink-700); border: 1px solid var(--gold-line); border-radius: var(--radius-lg);
  padding: var(--s6);
  animation: fade-up var(--dur-3) var(--ease) both;
}
.modal-head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--s4); margin-bottom: var(--s5); }
.modal-title { font-family: var(--serif); font-size: var(--t-h3); font-weight: 600; margin: 0 0 4px; }
.modal-desc { font-size: var(--t-xs); color: var(--fg-3); margin: 0; line-height: 1.7; }
.modal-x {
  border: 1px solid var(--ink-500); background: transparent; color: var(--fg-3);
  width: 32px; height: 32px; border-radius: var(--radius); cursor: pointer; flex: none;
  transition: border-color var(--dur-2) var(--ease), color var(--dur-2) var(--ease);
}
.modal-x:hover { border-color: var(--gold); color: var(--gold); }
.modal-foot { font-size: var(--t-xs); color: var(--fg-3); margin: var(--s5) 0 0; line-height: 1.8; }
.lm-form { display: grid; gap: var(--s4); }
.lm-form .field > span { display: block; }
.lm-code { font-family: var(--mono); font-size: 1.4rem; letter-spacing: .5em; text-align: center; }
.lm-sent { font-size: var(--t-sm); color: var(--fg-2); margin: 0; }
.lm-sent b { color: var(--gold); font-family: var(--mono); font-weight: 400; }
.lm-row { display: flex; gap: var(--s3); }
.lm-row .btn { flex: 1; }
.lm-turnstile {
  display: flex; align-items: center; gap: var(--s3); padding: var(--s3);
  border: 1px dashed var(--ink-400); border-radius: var(--radius);
  font-size: var(--t-xs); color: var(--fg-3);
}
.lm-ts-box {
  width: 26px; height: 26px; border: 1px solid var(--ink-400); border-radius: 2px; flex: none;
  background: var(--ink-900);
}
@media (max-width: 480px) {
  .modal-root { padding: var(--s3); align-items: end; }
  .modal-box { width: 100%; padding: var(--s5); }
  .lm-row { flex-direction: column; }
  .lm-code { font-size: 1.25rem; letter-spacing: .35em; }
}

/* toast */
.toast {
  position: fixed; left: 50%; bottom: var(--s7); transform: translate(-50%, 12px);
  z-index: 120; max-width: min(88vw, 460px);
  padding: var(--s3) var(--s5); background: var(--ink-600); border: 1px solid var(--gold-line);
  border-radius: var(--radius); color: var(--fg); font-size: var(--t-sm);
  opacity: 0; pointer-events: none;
  transition: opacity var(--dur-2) var(--ease), transform var(--dur-2) var(--ease);
}
.toast.on { opacity: 1; transform: translate(-50%, 0); }

/* 窄屏顶栏：文字链接与工具组全收进抽屉，只留品牌 ＋ 汉堡。
   （2026-10-13 实测：390px 下顶栏溢出 230px，是 8 页水平溢出的共同主因） */
@media (max-width: 820px) {
  .nav-in { gap: var(--s4); }
  .nav-links { gap: 0; }
  .nav-links > .nav-link,
  .nav-links > .nav-cta,
  .nav-links > .nav-util { display: none; }
  .nav-burger { display: flex; }
  /* 抽屉里的工具组：登录/主题/语言照常可用 */
  .nav-drawer-util .theme-toggle,
  .nav-drawer-util .lang-btn { width: 40px; height: 40px; }
}
@media (max-width: 400px) {
  .brand-name small { display: none; }
}

/* 设计稿把 data-theme="dark" 写在 <html> 上；手写页没写 → 这里兜底，
   否则暗色变量整片悬空（T23 接上 yh-tokens 后由页面属性接管）。 */
[data-theme="dark"] {}

/* 过渡段：登录模态的 Turnstile 行（原 yh-modal.cfdc6d89.css 的 .auth-ts 四条；
   T20 把模态样式并进 yh-base 后，这四条随迁而来，T51/T21 弹层换皮后删除）。
   前两条是「行本体 + 显隐」，后两条是「方框与 widget 独占一行」—— 少一条这行就画不出来。 */
.auth-ts{margin-top:18px;border-top:1px dashed var(--ink-500);padding-top:14px;display:none;
  align-items:center;gap:11px;font-size:12.5px;color:var(--fg-2);flex-wrap:wrap}
.auth-ts.on{display:flex}
.auth-ts .box{flex:0 0 30px;height:30px;border-radius:8px;border:1px dashed var(--ink-600);
  display:flex;align-items:center;justify-content:center;color:var(--fg-3);font-size:11px;letter-spacing:.5px}
/* #tsw：Turnstile 固定 300px，绝不允许与标签挤同一行。flex-basis 100% → 必然换到第二行独占整行；
   overflow-x:auto 是最后兜底（容器窄于 300px 时容器内可拖，而不是把模态撑宽/静默裁掉）。 */
.auth-ts #tsw{flex:1 1 100%;min-width:0;overflow-x:auto}

/* 过渡段：主题切换钮（T21 新增；设计稿 .theme-toggle 的等价最小样式：无边框圆钮，
   悬停浮出淡金圆底）。手写页顶栏是旧 markup，T23 换皮后收敛到设计稿类名。 */
.themebtn{width:34px;height:34px;flex:none;border:0;background:transparent;color:var(--fg-2);
  border-radius:50%;cursor:pointer;padding:0;font-size:15px;line-height:1;font-family:inherit;
  transition:color .2s,background .2s}
.themebtn:hover{color:var(--gold-2);background:rgba(201,169,97,.14)}
[data-theme="light"] .themebtn::after{content:none}
.themebtn[aria-pressed="true"]{color:var(--gold-2)}

/* ============================================================================
   未定义 token 全量映射（2026-10-15，用户裁 5＝A 的阻塞性发现；Kai 复核两轮）

   为什么有这段：下面 `.auth-*`／`.themebtn` 全套规则**逐字取自 2026-10-14 退役的
   `yh-modal.cfdc6d89.css`**，而那份文件用的是**旧 token 体系**的变量名。新体系
   （`yh-tokens.<hash>.css`）里这 11 个名字**一个都没定义** ⇒ `var()` 求值为空
   ⇒ 属性静默落 initial（`background` 变 transparent、`color` 变继承色…），
   **不报错、不告警**，于是登录弹窗大部分文字/边框/输入框实际无样式
   （`--overlay` 只是其中最显眼的一个症状）。

   修法口径（与 T42 去重同一种活）：**逐个改引 `yh-tokens` 现有名，不新增定义** ——
   新增 11 个 `--xxx:` 会造出双真源（T42 已经踩过一次：暗色硬编码在亮主题下把
   token 的 `[data-theme="light"]` 覆盖回暗值）。

   | 旧名（从未定义） | 新名（yh-tokens 现有） | 旧名 → 新名 备注 |
   |---|---|---|
   | `--overlay` | `--ink-800` | 弹窗卡面要实色（另加亮主题 `--ink-700` 覆盖） |
   | `--faint`   | `--fg-3`   | 弱化文字/占位符/图标 |
   | `--dim`     | `--fg-2`   | 次级文字 |
   | `--gold2`   | `--gold-2` | T42 同映射 |
   | `--line`    | `--ink-500`| 描边/分隔 |
   | `--line-2`  | `--ink-600`| 强一档描边 |
   | `--err`     | `--danger` | 错误文字 |
   | `--gold-mid`| `--gold-2` | 渐变中段 |
   | `--panel2`  | `--ink-600`| T42 同映射 |
   | `--accent`  | `--gold`   | 强调色 |
   | `--gold-hi` | `--gold-3` | ⚠ yh-tokens **无 `--gold-hi` 同名**；落最亮的 `--gold-3`， |
     | | | **刻意不补新名** —— 补了要动 `yh-tokens` 内容寻址资产、牵连 1374 页 link hash |

   判据：`.kimi/tools/micheal_ux_audit_20261014/undefined_token_scan.py` 跑完
   ⇒ 未定义 token **0**（`var(--x, fallback)` 有兜底的豁免）。
   ============================================================================ */
/* ============================================================================
   过渡段 · 登录模态**老类名**（2026-10-14 补回；修 P0「登录全站不可用 ＋ 首页/报告页底部黑块」）

   为什么在这里：`yh-base.<sha8>.js` 注入的登录模态 markup 至今仍是**老类名**
   （`.auth-veil` / `.auth-modal` / `.auth-inp` …，见 JS 的 `AUTH_MODAL_HTML`），
   而 T20 把本文件换成了设计稿的新类名（`.modal-root` / `.modal-box` / `.lm-*`）。
   于是老 markup 掉进「无样式」：`svg{width:100%}` 一类规则没命中还好，**要命的是
   `.hidden{display:none}` 一条都没有** —— 弹层默认不隐藏，随文档流展开在页脚之后，
   内联的邮箱图标 svg 被撑到视口宽 ⇒ 首页底部那块 1440×1440 的黑块就是它。

   口径：**下面 `.auth-*` 全套规则逐字取自 `a541e60^:web/assets/yh-modal.cfdc6d89.css`**
   （T20 退役的那份，140 行），除本注释块外**一字未改**；只额外补一条全局
   `.hidden{display:none}`（老 yh-modal 当年没有全局 `.hidden` —— 它靠 `[hidden]` 属性
   兜底，而 JS 用的是 **class** `.hidden`，这才是「不隐藏」的根因）。
   等 T51/T21 把 `AUTH_MODAL_HTML` 与 `bindAuthModal()` 换成新类名后，本段整块删除。
   ============================================================================ */
/* 登录模态收起态：JS 只切 class（`v.classList.add("hidden")`），故必须由 class 选择器兜住。
   老 yh-modal 无此条，是本轮 P0 的第一根因。 */
.hidden{display:none}
.auth-veil{position:fixed;inset:0;z-index:100;background:rgba(8,9,12,.76);
  -webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);
  display:flex;align-items:center;justify-content:center;padding:34px}
.auth-veil.hidden{display:none}
.auth-modal{position:relative;width:100%;max-width:940px;max-height:88vh;overflow:auto;
  background:var(--ink-800);border:1px solid var(--ink-600);border-radius:16px;
  display:grid;grid-template-columns:1.05fr 1fr;
  box-shadow:0 40px 90px -24px rgba(0,0,0,.9),0 0 0 1px rgba(255,255,255,.02)}
/* 亮主题：--ink-700 在亮主题是 #fffdf7 ⇒ 实色卡片压住背后 blur(5px) 遮罩。
   改前这里写 `var(--overlay)` 而该变量全站从未定义 ⇒ background 落 initial
   (transparent) ⇒ 弹窗整块透明，亮主题下右栏白字压白底几乎不可见
   （2026-10-15 用户报的第二个问题）。 */
[data-theme="light"] .auth-modal{ background:var(--ink-700); }
/* P1-4 C2（2026-10-19，走查 §2 #14）：关闭 ✕ 热区 34px → 44px（视觉图标仍 18px，
   热区用 width/height 撑）；top/right 同步微调，防 44px 盒超出模态视口。 */
.auth-x{position:absolute;top:9px;right:11px;width:44px;height:44px;border-radius:9px;
  background:transparent;border:1px solid transparent;color:var(--fg-3);font-size:18px;line-height:1;
  cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center}
.auth-x:hover{border-color:var(--ink-500);color:var(--fg)}
.auth-brand{position:relative;overflow:hidden;padding:40px 38px;border-right:1px solid var(--ink-500);
  background:linear-gradient(160deg,#181c25,#12151b 62%)}
.auth-brand::after{content:"";position:absolute;width:340px;height:340px;right:-150px;bottom:-170px;
  border-radius:50%;background:radial-gradient(circle,rgba(201,169,97,.16),transparent 68%)}
.auth-glyph{font-size:13px;letter-spacing:14px;color:rgba(201,169,97,.32);margin-bottom:24px}
.auth-brand h3{font-size:30px;letter-spacing:9px;color:var(--gold-2);margin:0 0 6px;font-weight:600}
.auth-tag{font-size:11.5px;color:var(--fg-3);letter-spacing:1.6px;font-family:ui-monospace,Menlo,monospace}
.auth-rule{width:44px;height:2px;background:var(--gold);opacity:.55;margin:22px 0 20px;border-radius:2px}
.auth-brand p{margin:0;font-size:13.5px;color:var(--fg-2);line-height:1.95;max-width:330px}
.auth-brand p b{color:var(--gold-2);font-weight:600}
.auth-plist{margin:22px 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:11px}
.auth-plist li{display:flex;gap:11px;align-items:flex-start;font-size:13px;color:#b9bfc9}
.auth-plist s{flex:0 0 17px;height:17px;border-radius:5px;background:rgba(95,184,122,.14);
  border:1px solid rgba(95,184,122,.4);color:var(--ok);font-size:10px;text-decoration:none;
  display:flex;align-items:center;justify-content:center;margin-top:3px;font-weight:700}
.auth-form{padding:38px 38px 30px;display:flex;flex-direction:column}
.auth-form h4{margin:0 0 7px;font-size:22px;font-weight:600;letter-spacing:.6px}
.auth-lead{margin:0 0 22px;font-size:13.5px;color:var(--fg-2);line-height:1.8}
.auth-lbl{font-size:12.5px;color:var(--fg-2);letter-spacing:.6px;margin-bottom:8px;display:block}
.auth-lbl .rq{color:var(--danger)}
.auth-inp-wrap{position:relative;display:flex;align-items:center}
.auth-inp-wrap .ico{position:absolute;left:14px;display:flex;color:var(--fg-3);pointer-events:none}
.auth-inp-wrap .ico svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.auth-inp{width:100%;background:var(--ink-600);border:1px solid var(--ink-500);color:var(--fg);
  padding:14px 15px 14px 41px;border-radius:10px;font-size:16px;font-family:inherit;outline:none;
  letter-spacing:.4px;transition:.16s}
.auth-inp::placeholder{color:var(--fg-3)}
.auth-inp:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(201,169,97,.15)}
.auth-inp.bad{border-color:var(--danger);box-shadow:0 0 0 3px rgba(209,100,106,.13)}
.auth-note{margin-top:9px;font-size:12px;color:var(--fg-3);line-height:1.75}
.auth-msg{margin-top:9px;font-size:12px;color:var(--danger);min-height:18px;line-height:1.7}
.auth-msg.ok{color:var(--ok)}
.auth-send{width:100%;margin-top:14px;background:linear-gradient(135deg,var(--gold-2),var(--gold-2),var(--gold));color:var(--gold-ink);
  border:none;font-family:inherit;font-size:15px;font-weight:700;letter-spacing:2.5px;padding:15px 20px;
  border-radius:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:10px;
  box-shadow:0 1px 0 rgba(255,255,255,.28) inset,0 8px 22px -9px rgba(201,169,97,.65);transition:.16s}
.auth-send:hover{background:linear-gradient(135deg,var(--gold-3),var(--gold-2))}
.auth-send:disabled{opacity:.55;cursor:default}
.auth-skip{width:100%;margin-top:10px;background:transparent;border:1px solid var(--ink-600);color:var(--fg);
  font-family:inherit;font-size:13.5px;padding:12px 18px;border-radius:10px;cursor:pointer;
  letter-spacing:.8px;transition:.16s}
.auth-skip:hover{border-color:var(--gold);color:var(--gold-2)}
.auth-ts{margin-top:18px;border-top:1px dashed var(--ink-500);padding-top:14px;display:none;
  align-items:center;gap:11px;font-size:12.5px;color:var(--fg-2);flex-wrap:wrap}
.auth-ts.on{display:flex}
.auth-ts .box{flex:0 0 30px;height:30px;border-radius:8px;border:1px dashed var(--ink-600);
  display:flex;align-items:center;justify-content:center;color:var(--fg-3);font-size:11px;letter-spacing:.5px}
/* #tsw：Turnstile 固定 300px，绝不允许与标签挤同一行。flex-basis 100% → 必然换到第二行独占整行；
   overflow-x:auto 是最后兜底（容器窄于 300px 时容器内可拖，而不是把模态撑宽/静默裁掉）。 */
.auth-ts #tsw{flex:1 1 100%;min-width:0;overflow-x:auto}
.auth-foot{margin-top:auto;padding-top:22px;border-top:1px solid rgba(42,47,58,.6);
  font-size:11.5px;color:var(--fg-3);line-height:1.85}
.auth-foot a{color:var(--gold);text-decoration:none}
.auth-foot a:hover{text-decoration:underline}
.auth-langs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.auth-langs button{background:transparent;border:1px solid var(--ink-500);color:var(--fg-3);
  font-family:inherit;font-size:11.5px;padding:4px 11px;border-radius:999px;cursor:pointer}
.auth-langs button.on{color:var(--gold-2);border-color:rgba(201,169,97,.45);background:rgba(201,169,97,.09)}
@media(max-width:1080px){.auth-modal{grid-template-columns:1fr}.auth-brand{display:none}}
@media(prefers-reduced-motion:reduce){.auth-modal,.auth-send,.auth-skip{transition:none}}
/* ≤360px 的 Turnstile 宽度条款已下移到 ≤760px 段之后（mobile_adapt 2026-11-01）：
   原位置在 760 档**之前**，两者都命中 320px 时后写的 `padding:22px 20px 24px` 覆盖了这里的
   10px ⇒ 该条款一直是**死规则**，实测 `#tsw` 只有 278px（Turnstile 官方最小 300px 装不下）。 */
/* ===== 已发送态（520px 单栏；见设计稿 §03）===== */
.auth-modal.sent{max-width:520px;grid-template-columns:1fr}
.auth-modal.sent .auth-brand{display:none}
.auth-sent{padding:38px 40px 30px;display:flex;flex-direction:column}
.auth-sent.hidden{display:none}
.sent-head{display:flex;flex-direction:column;align-items:center;text-align:center}
.mail-ring{width:74px;height:74px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:rgba(95,184,122,.09);border:1px solid rgba(95,184,122,.42);margin-bottom:20px;position:relative}
.mail-ring::after{content:"";position:absolute;inset:-9px;border-radius:50%;border:1px solid rgba(95,184,122,.16)}
.mail-ring svg{width:33px;height:33px;stroke:var(--ok);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.auth-sent h4{margin:0 0 10px;font-size:21px;font-weight:600;letter-spacing:1px}
.auth-sent .lead{margin:0;font-size:13.5px;color:var(--fg-2);line-height:1.85;max-width:400px}
.mail-chip{display:inline-flex;align-items:center;gap:9px;margin:18px 0 0;background:var(--ink-600);
  border:1px solid var(--ink-500);border-radius:999px;padding:8px 9px 8px 17px;font-size:13.5px;color:var(--fg);
  letter-spacing:.4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;max-width:100%}
.mail-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mail-chip button{background:transparent;border:1px solid var(--ink-600);color:var(--fg-2);font-family:inherit;
  font-size:11.5px;padding:4px 11px;border-radius:999px;cursor:pointer;white-space:nowrap}
.mail-chip button:hover{color:var(--gold-2);border-color:rgba(201,169,97,.5)}
.steps{margin:26px 0 0;display:flex;flex-direction:column;text-align:left}
.step{display:flex;gap:15px;align-items:flex-start;position:relative;padding-bottom:18px}
.step:last-child{padding-bottom:0}
.step .n{flex:0 0 25px;height:25px;border-radius:50%;background:rgba(201,169,97,.1);
  border:1px solid rgba(201,169,97,.4);color:var(--gold-2);font-size:11.5px;font-weight:600;
  display:flex;align-items:center;justify-content:center;font-family:ui-monospace,monospace;z-index:2}
.step .n.done{background:rgba(95,184,122,.12);border-color:rgba(95,184,122,.5);color:var(--ok)}
.step .n.now{background:linear-gradient(135deg,var(--gold-2),var(--gold-2),var(--gold));border-color:var(--gold);color:var(--gold-ink);
  box-shadow:0 0 0 4px rgba(201,169,97,.12)}
.step::before{content:"";position:absolute;left:12px;top:25px;bottom:0;width:1px;background:var(--ink-500)}
.step:last-child::before{display:none}
/* 6 位验证码输入（D 节）：≥16px 防 iOS 聚焦放大、≥44px 触控区、字距 0.3em、居中、数字键盘 */
.auth-code{font-size:17px;letter-spacing:.3em;text-align:center;height:46px;padding-left:12px;padding-right:12px;
  font-family:ui-monospace,monospace;font-variant-numeric:tabular-nums}
.auth-err{min-height:16px;margin-top:9px;font-size:12px;color:var(--danger);text-align:center}
.step .c{padding-top:1px}
.step .c b{display:block;font-size:13.5px;font-weight:600;letter-spacing:.4px}
.step .c span{font-size:12px;color:var(--fg-3);line-height:1.7}
.resend{margin-top:22px;padding-top:18px;border-top:1px dashed var(--ink-500);display:flex;align-items:center;
  justify-content:center;gap:12px;flex-wrap:wrap;font-size:13px}
.resend .cd{color:var(--fg-2);font-size:12.5px}
.resend .cd b{color:var(--gold-2);font-weight:600;font-variant-numeric:tabular-nums;
  font-family:ui-monospace,monospace;letter-spacing:.5px}
.resend button{background:transparent;border:1px solid var(--ink-600);color:var(--fg);font-family:inherit;
  font-size:12.5px;padding:7px 17px;border-radius:8px;cursor:pointer}
.resend button:hover:not(:disabled){border-color:var(--gold);color:var(--gold-2)}
.resend button:disabled{opacity:.5;cursor:default}
/* 抽屉拖拽条（仅窄屏显示） */
.auth-sheet-bar{display:none;width:38px;height:4px;border-radius:999px;background:#2f3542;margin:2px auto 14px}
/* 窄屏：底部抽屉（拇指热区），输入 16px 防 iOS 聚焦放大 */
@media(max-width:760px){
  .auth-veil{align-items:flex-end;padding:0}
  .auth-modal{max-width:none;max-height:92vh;border-radius:20px 20px 0 0;border-bottom:none;
    display:block;box-shadow:0 -18px 50px -14px rgba(0,0,0,.9)}
  .auth-modal.sent{max-width:none}
  .auth-brand{display:none}
  .auth-sheet-bar{display:block}
  .auth-x{top:4px;right:4px}
  .auth-form{padding:22px 20px 24px}
  .auth-sent{padding:22px 20px 24px}
  .auth-send{height:48px;padding:0}
  .auth-skip{padding:12px}
  .steps{margin-top:20px}
  .resend{margin-top:18px;padding-top:14px}
}
/* ≤360px：Turnstile 官方最小 300px（mobile_adapt 2026-11-01 修正）
   ① 本条**必须**排在 ≤760px 段之后：原位置在它之前，320px 下被后写的
      `padding:22px 20px 24px` 覆盖 ⇒ 一直是死规则（实测 `#tsw` 仅 278px）。
   ② 10px 内距保留（不改原条款值）；但 `.auth-modal` 的左右各 1px 边框会把
      「320 − 20」再吃掉 2px（实测 298px）。此处只去掉这一档的左右边框 ——
      窄屏形态本就是贴底抽屉、左右缘与视口重合，1px 边框在遮罩上看不见，
      观感不变；换来做满 300px 给 Turnstile。 */
@media(max-width:360px){
  .auth-form,.auth-sent{padding-left:10px;padding-right:10px}
  .auth-modal{border-left:none;border-right:none}
}
