/* ==========================================================================
   Nynov — macOS Sonoma style frosted glass
   Material rules:
     · hairline border at 6-9% white, never a thick white stroke
     · inner specular highlight + outer rim glow = glass thickness
     · wide, extremely soft diffuse shadow below the surface
     · low-saturation Apple blue as the only accent
   ========================================================================== */

/* FONT_SUBSET:start */
/* Self-hosted MiSans subset (1055 glyphs, 4 static weights),
   generated by tools/font-subset.cjs — do not edit by hand. */
@font-face {
  font-family: "MiSans";
  font-style: normal;
  font-weight: 300 440;
  font-display: swap;
  src: url(/assets/fonts/misans-400.woff2) format("woff2");
  unicode-range: U+20-7e, U+a3, U+a5, U+a7, U+b0-b1, U+b7, U+d7, U+f7, U+2013-2014, U+2018-2019, U+201c-201d, U+2026, U+20ac, U+2192, U+2248, U+2264-2265, U+2713, U+3001-3002, U+300a-300d, U+3010-3011, U+4e00, U+4e09-4e0b, U+4e0d-4e0e, U+4e13-4e14, U+4e1a, U+4e1c, U+4e22, U+4e24-4e25, U+4e2a, U+4e2d, U+4e32, U+4e34, U+4e3a-4e3b, U+4e3e, U+4e45, U+4e48-4e49, U+4e4b, U+4e4e, U+4e58, U+4e5f, U+4e70-4e71, U+4e86, U+4e88, U+4e8b-4e8c, U+4e8e, U+4e92, U+4e94, U+4e9b, U+4ea4, U+4ea7, U+4eab-4eac, U+4eae, U+4eba, U+4ec0, U+4ec5, U+4eca, U+4ecd-4ece, U+4ed6, U+4ed8, U+4ee3-4ee5, U+4eea, U+4eec, U+4ef6-4ef7, U+4efb, U+4efd, U+4f18, U+4f1a, U+4f20, U+4f46, U+4f4d-4f4f, U+4f53, U+4f55, U+4f59, U+4f5c, U+4f60, U+4f7f, U+4f8b, U+4f9b, U+4f9d, U+4fa7, U+4fbf, U+4fdd, U+4fe1, U+4fee, U+500d, U+5012, U+5019, U+503c, U+5047, U+505a, U+505c, U+50ac, U+50cf, U+513f, U+5141, U+5143, U+5145, U+5148-5149, U+514d, U+515c, U+5165, U+5168, U+516c, U+5171, U+5173, U+5176-5177, U+517c, U+5185, U+518c-518d, U+5199, U+51b2-51b3, U+51b5, U+51b7, U+51bb, U+51c6, U+51e0, U+51ed, U+51fa, U+51fd, U+5206-5207, U+5212, U+5217, U+5219-521b, U+521d, U+5220, U+5224, U+5229, U+522b, U+5230, U+5236-5237, U+523a-523b, U+524d, U+5269-526a, U+526f, U+529b, U+529e-52a1, U+52a8-52a9, U+52bf, U+52fe-52ff, U+5305, U+5316-5317, U+5339-533a, U+533f, U+5341, U+5347-5348, U+534a, U+5355-5357, U+5360-5361, U+5373-5374, U+5378, U+5386, U+538b, U+539a, U+539f, U+53bb, U+53c2, U+53c8-53ca, U+53cc-53cd, U+53d1, U+53d6-53d8, U+53e0, U+53e3, U+53e5-53e6, U+53ea, U+53ef-53f0, U+53f2-53f3, U+53f7, U+5403-5404, U+5408, U+540c-540e, U+5411, U+5417, U+541e, U+5426, U+542b, U+542f, U+5438, U+544a, U+5458, U+5468, U+547c-547d, U+548c, U+54a8, U+54c1, U+54cd, U+54e8, U+54ea, U+552e-552f, U+5546, U+5668, U+56db, U+56de, U+56e0, U+56e2, U+56f4, U+56fa, U+56fd-56fe, U+5706, U+5708, U+5728, U+5730, U+573a, U+5740, U+5747, U+574f, U+5751, U+5757, U+578b, U+57ce, U+57fa, U+5806, U+585e, U+586b, U+5883, U+5899, U+589e, U+5904, U+5907, U+590d, U+5916, U+591a, U+591f, U+5927, U+5929-592a, U+5931, U+5934, U+5951, U+5957, U+597d, U+5982, U+5999, U+59cb, U+59d3, U+5a01, U+5b50, U+5b57-5b58, U+5b64, U+5b66, U+5b83, U+5b89, U+5b8c, U+5b98, U+5b9a, U+5b9e, U+5ba1-5ba2, U+5bb9, U+5bbd, U+5bc6, U+5bf9, U+5bfb-5bfc, U+5c01, U+5c04, U+5c06, U+5c0f, U+5c11, U+5c1a, U+5c1d, U+5c31, U+5c3a, U+5c3d, U+5c40, U+5c42, U+5c45, U+5c4f, U+5c55, U+5c5e, U+5d4c, U+5de5-5de6, U+5dee, U+5df1-5df2, U+5e01, U+5e03, U+5e26-5e27, U+5e2e, U+5e38, U+5e55, U+5e72-5e74, U+5e76, U+5e7d, U+5e8f, U+5e93-5e95, U+5e9f, U+5ea6, U+5ef6, U+5efa, U+5f00, U+5f02-5f03, U+5f0a, U+5f0f, U+5f15, U+5f20, U+5f39-5f3a, U+5f52-5f53, U+5f55, U+5f62, U+5f69, U+5f71, U+5f80, U+5f84-5f85, U+5f88, U+5f8b, U+5f92, U+5f97, U+5fae, U+5fbd, U+5fc3, U+5fc5, U+5fd9, U+5feb, U+5ffd, U+6000-6001, U+600e, U+6025, U+6027, U+603b, U+6062, U+606f-6070, U+60a8, U+60ac, U+60c5, U+60e7, U+60f3, U+610f, U+611f, U+613f, U+6162, U+620f-6211, U+6216, U+622a, U+6237, U+6240, U+624b, U+624d, U+6253, U+6258, U+6263, U+6267, U+626b, U+6270, U+6279, U+627e-6280, U+6284, U+628a, U+6296-6298, U+629b, U+62a2, U+62a4-62a5, U+62c6, U+62c9, U+62cd, U+62d2, U+62d6, U+62e5-62e6, U+62e9, U+62fc, U+62ff, U+6301-6302, U+6307, U+6309, U+6311, U+6321, U+6324, U+6362, U+636e, U+6377, U+6388-6389, U+6392, U+63a2, U+63a5, U+63a7-63a8, U+63cf-63d0, U+63d2, U+641c, U+6446, U+6458, U+6478, U+6491, U+649e, U+64a4, U+64cd, U+6525, U+652f, U+6536, U+6539, U+653e, U+6545, U+6548, U+654f, U+6559, U+655b, U+6563, U+6570, U+6574, U+6587, U+6599, U+65a5, U+65ad, U+65b0, U+65b9, U+65c1, U+65e0, U+65e5, U+65e7, U+65e9, U+65f6, U+660e, U+6613, U+6620, U+6628, U+662f, U+663e, U+665a, U+666e-666f, U+6682, U+6697, U+66f2, U+66f4, U+66fe-6700, U+6708-6709, U+670d, U+671f, U+672a, U+672c, U+672f, U+673a, U+6740, U+6743, U+675f-6761, U+6765, U+677f, U+6781, U+6784, U+6790, U+679a, U+679c, U+67b6, U+67d0, U+67d3, U+67e5, U+67f1, U+6807, U+680f, U+6821, U+6837-6839, U+683c, U+6846, U+6848, U+6863, U+6876, U+68c0, U+695a, U+6982, U+69fd, U+6a21, U+6a2a, U+6b21, U+6b3e, U+6b62-6b65, U+6b6a, U+6b7b, U+6b8a, U+6bb5, U+6bcd, U+6bcf, U+6bd4, U+6bdb, U+6c14, U+6c34, U+6c38, U+6c42, U+6c60, U+6ca1, U+6cbf, U+6cd5, U+6ce1, U+6ce8, U+6d32, U+6d3b, U+6d3d, U+6d41, U+6d45, U+6d4b, U+6d4f, U+6d6e, U+6d88-6d89, U+6df1, U+6df7, U+6e05, U+6e10, U+6e20, U+6e32, U+6e38, U+6e90, U+6ed1, U+6eda, U+6ee1, U+6ee4-6ee5, U+6f02, U+6f0f, U+6f14, U+6fc0, U+706b, U+7070, U+7075, U+70b9, U+70e6-70e7, U+7126, U+7136, U+7167, U+7206, U+7247-7248, U+724c, U+7279, U+72b6, U+72ec, U+731c, U+7387, U+73af-73b0, U+73bb, U+7403, U+7406, U+7483, U+751f, U+7528, U+7531, U+7535, U+753b, U+754c, U+754f, U+7559, U+7565, U+7591, U+75d5, U+767b, U+767d-767e, U+7684, U+76d6, U+76d8, U+76ee, U+76f4, U+76f8, U+7701, U+770b, U+771f, U+773c, U+7740, U+77e5, U+77ed, U+7801, U+7814, U+7834, U+7840, U+786c, U+786e, U+793a, U+7968, U+7981, U+79bb, U+79c1, U+79cd, U+79d2, U+79f0, U+79fb, U+7a0b, U+7a0d, U+7a33, U+7a7a, U+7a7f, U+7a84, U+7a97, U+7acb, U+7ad6, U+7ad9, U+7ade, U+7ae0, U+7aef, U+7b26, U+7b2c, U+7b3c, U+7b49, U+7b54, U+7b56, U+7b5b, U+7b7e, U+7b97, U+7ba1, U+7bad, U+7bb1, U+7c07, U+7c7b, U+7cbe, U+7cca, U+7cfb, U+7d20, U+7d22, U+7d27, U+7d2f, U+7e41, U+7ea2, U+7ea6-7ea7, U+7eaf, U+7eb9, 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+7f00, U+7f13, U+7f16, U+7f1d, U+7f29, U+7f3a, U+7f51, U+7f6e, U+7f72, U+7f8e, U+7ffb, U+8001, U+8005, U+800c, U+8017, U+804a, U+8054, U+805a, U+80cc, U+80fd, U+811a, U+8131, U+81ea, U+81f3-81f4, U+822a, U+8272, U+8282, U+82af, U+82b1, U+82f1, U+8303, U+83ab, U+83b7, U+83dc, U+8425, U+843d, U+84dd, U+85cf, U+884c, U+8865, U+8868, U+88ab, U+88b1, U+88c1, U+88c5, U+88f8, U+897f, U+8981, U+8986, U+89c1-89c2, U+89c4, U+89c6, U+89c8-89c9, U+89d2, U+89e3, U+89e6, U+8a00, U+8b66, U+8ba1-8ba2, U+8ba4, U+8ba9, U+8bae, U+8bb0, U+8bb8, U+8bbe-8bbf, U+8bc1, U+8bc6, U+8bc9, U+8bcd, U+8bd5, U+8bdd, U+8be2, U+8be5-8be6, U+8bed, U+8bef, U+8bf4, U+8bf7, U+8bfa-8bfb, U+8c01, U+8c03, U+8c08, U+8d1f, U+8d23, U+8d25-8d28, U+8d2d, U+8d34, U+8d39, U+8d44, U+8d56, U+8d70, U+8d77, U+8d85, U+8d8b, U+8db3, U+8dd1, U+8ddf, U+8def, U+8df3, U+8e22, U+8e29, U+8eab, U+8f66, U+8f68, U+8f6c, U+8f6e-8f6f, U+8f7d, U+8f83-8f85, U+8f91, U+8f93, U+8fa8, U+8fb9, U+8fbe, U+8fc7, U+8fd0-8fd1, U+8fd4, U+8fd8-8fd9, U+8fdb-8fdc, U+8fde-8fdf, U+8feb, U+8ff0, U+8ff9, U+9000-9002, U+9009, U+900f-9010, U+9014, U+901a, U+901f, U+903b, U+904d, U+9053, U+9057, U+907f, U+90a3, U+90ae, U+90e8, U+90fd, U+914d, U+9192, U+91c7, U+91ca, U+91cc-91cd, U+91cf, U+91d1, U+949f, U+94ae, U+94b1, U+94f6, U+94fe, U+9500-9501, U+9519, U+952e, U+957f, U+95e8, U+95ea, U+95ed-95ee, U+95f4, U+9605, U+9608, U+961f, U+9632, U+9636, U+9644-9645, U+9650, U+9664, U+968f-9690, U+9694, U+9699, U+969c, U+96be, U+96c6, U+96f6, U+9700, U+9732, U+9759, U+975e, U+9760, U+9762, U+97f3, U+9875-9876, U+9879-987b, U+9884, U+9886, U+9891, U+9898, U+989c-989d, U+98de, U+9988, U+9996, U+9a71, U+9a8c, U+9a97, U+9aa4, U+9ad8, U+9ed1, U+9ed8, U+9f50, U+ff01, U+ff08-ff09, U+ff0c, U+ff1a-ff1b, U+ff1f, U+ffe5;
}
@font-face {
  font-family: "MiSans";
  font-style: normal;
  font-weight: 441 549;
  font-display: swap;
  src: url(/assets/fonts/misans-500.woff2) format("woff2");
  unicode-range: U+20-7e, U+a3, U+a5, U+a7, U+b0-b1, U+b7, U+d7, U+f7, U+2013-2014, U+2018-2019, U+201c-201d, U+2026, U+20ac, U+2192, U+2248, U+2264-2265, U+2713, U+3001-3002, U+300a-300d, U+3010-3011, U+4e00, U+4e09-4e0b, U+4e0d-4e0e, U+4e13-4e14, U+4e1a, U+4e1c, U+4e22, U+4e24-4e25, U+4e2a, U+4e2d, U+4e32, U+4e34, U+4e3a-4e3b, U+4e3e, U+4e45, U+4e48-4e49, U+4e4b, U+4e4e, U+4e58, U+4e5f, U+4e70-4e71, U+4e86, U+4e88, U+4e8b-4e8c, U+4e8e, U+4e92, U+4e94, U+4e9b, U+4ea4, U+4ea7, U+4eab-4eac, U+4eae, U+4eba, U+4ec0, U+4ec5, U+4eca, U+4ecd-4ece, U+4ed6, U+4ed8, U+4ee3-4ee5, U+4eea, U+4eec, U+4ef6-4ef7, U+4efb, U+4efd, U+4f18, U+4f1a, U+4f20, U+4f46, U+4f4d-4f4f, U+4f53, U+4f55, U+4f59, U+4f5c, U+4f60, U+4f7f, U+4f8b, U+4f9b, U+4f9d, U+4fa7, U+4fbf, U+4fdd, U+4fe1, U+4fee, U+500d, U+5012, U+5019, U+503c, U+5047, U+505a, U+505c, U+50ac, U+50cf, U+513f, U+5141, U+5143, U+5145, U+5148-5149, U+514d, U+515c, U+5165, U+5168, U+516c, U+5171, U+5173, U+5176-5177, U+517c, U+5185, U+518c-518d, U+5199, U+51b2-51b3, U+51b5, U+51b7, U+51bb, U+51c6, U+51e0, U+51ed, U+51fa, U+51fd, U+5206-5207, U+5212, U+5217, U+5219-521b, U+521d, U+5220, U+5224, U+5229, U+522b, U+5230, U+5236-5237, U+523a-523b, U+524d, U+5269-526a, U+526f, U+529b, U+529e-52a1, U+52a8-52a9, U+52bf, U+52fe-52ff, U+5305, U+5316-5317, U+5339-533a, U+533f, U+5341, U+5347-5348, U+534a, U+5355-5357, U+5360-5361, U+5373-5374, U+5378, U+5386, U+538b, U+539a, U+539f, U+53bb, U+53c2, U+53c8-53ca, U+53cc-53cd, U+53d1, U+53d6-53d8, U+53e0, U+53e3, U+53e5-53e6, U+53ea, U+53ef-53f0, U+53f2-53f3, U+53f7, U+5403-5404, U+5408, U+540c-540e, U+5411, U+5417, U+541e, U+5426, U+542b, U+542f, U+5438, U+544a, U+5458, U+5468, U+547c-547d, U+548c, U+54a8, U+54c1, U+54cd, U+54e8, U+54ea, U+552e-552f, U+5546, U+5668, U+56db, U+56de, U+56e0, U+56e2, U+56f4, U+56fa, U+56fd-56fe, U+5706, U+5708, U+5728, U+5730, U+573a, U+5740, U+5747, U+574f, U+5751, U+5757, U+578b, U+57ce, U+57fa, U+5806, U+585e, U+586b, U+5883, U+5899, U+589e, U+5904, U+5907, U+590d, U+5916, U+591a, U+591f, U+5927, U+5929-592a, U+5931, U+5934, U+5951, U+5957, U+597d, U+5982, U+5999, U+59cb, U+59d3, U+5a01, U+5b50, U+5b57-5b58, U+5b64, U+5b66, U+5b83, U+5b89, U+5b8c, U+5b98, U+5b9a, U+5b9e, U+5ba1-5ba2, U+5bb9, U+5bbd, U+5bc6, U+5bf9, U+5bfb-5bfc, U+5c01, U+5c04, U+5c06, U+5c0f, U+5c11, U+5c1a, U+5c1d, U+5c31, U+5c3a, U+5c3d, U+5c40, U+5c42, U+5c45, U+5c4f, U+5c55, U+5c5e, U+5d4c, U+5de5-5de6, U+5dee, U+5df1-5df2, U+5e01, U+5e03, U+5e26-5e27, U+5e2e, U+5e38, U+5e55, U+5e72-5e74, U+5e76, U+5e7d, U+5e8f, U+5e93-5e95, U+5e9f, U+5ea6, U+5ef6, U+5efa, U+5f00, U+5f02-5f03, U+5f0a, U+5f0f, U+5f15, U+5f20, U+5f39-5f3a, U+5f52-5f53, U+5f55, U+5f62, U+5f69, U+5f71, U+5f80, U+5f84-5f85, U+5f88, U+5f8b, U+5f92, U+5f97, U+5fae, U+5fbd, U+5fc3, U+5fc5, U+5fd9, U+5feb, U+5ffd, U+6000-6001, U+600e, U+6025, U+6027, U+603b, U+6062, U+606f-6070, U+60a8, U+60ac, U+60c5, U+60e7, U+60f3, U+610f, U+611f, U+613f, U+6162, U+620f-6211, U+6216, U+622a, U+6237, U+6240, U+624b, U+624d, U+6253, U+6258, U+6263, U+6267, U+626b, U+6270, U+6279, U+627e-6280, U+6284, U+628a, U+6296-6298, U+629b, U+62a2, U+62a4-62a5, U+62c6, U+62c9, U+62cd, U+62d2, U+62d6, U+62e5-62e6, U+62e9, U+62fc, U+62ff, U+6301-6302, U+6307, U+6309, U+6311, U+6321, U+6324, U+6362, U+636e, U+6377, U+6388-6389, U+6392, U+63a2, U+63a5, U+63a7-63a8, U+63cf-63d0, U+63d2, U+641c, U+6446, U+6458, U+6478, U+6491, U+649e, U+64a4, U+64cd, U+6525, U+652f, U+6536, U+6539, U+653e, U+6545, U+6548, U+654f, U+6559, U+655b, U+6563, U+6570, U+6574, U+6587, U+6599, U+65a5, U+65ad, U+65b0, U+65b9, U+65c1, U+65e0, U+65e5, U+65e7, U+65e9, U+65f6, U+660e, U+6613, U+6620, U+6628, U+662f, U+663e, U+665a, U+666e-666f, U+6682, U+6697, U+66f2, U+66f4, U+66fe-6700, U+6708-6709, U+670d, U+671f, U+672a, U+672c, U+672f, U+673a, U+6740, U+6743, U+675f-6761, U+6765, U+677f, U+6781, U+6784, U+6790, U+679a, U+679c, U+67b6, U+67d0, U+67d3, U+67e5, U+67f1, U+6807, U+680f, U+6821, U+6837-6839, U+683c, U+6846, U+6848, U+6863, U+6876, U+68c0, U+695a, U+6982, U+69fd, U+6a21, U+6a2a, U+6b21, U+6b3e, U+6b62-6b65, U+6b6a, U+6b7b, U+6b8a, U+6bb5, U+6bcd, U+6bcf, U+6bd4, U+6bdb, U+6c14, U+6c34, U+6c38, U+6c42, U+6c60, U+6ca1, U+6cbf, U+6cd5, U+6ce1, U+6ce8, U+6d32, U+6d3b, U+6d3d, U+6d41, U+6d45, U+6d4b, U+6d4f, U+6d6e, U+6d88-6d89, U+6df1, U+6df7, U+6e05, U+6e10, U+6e20, U+6e32, U+6e38, U+6e90, U+6ed1, U+6eda, U+6ee1, U+6ee4-6ee5, U+6f02, U+6f0f, U+6f14, U+6fc0, U+706b, U+7070, U+7075, U+70b9, U+70e6-70e7, U+7126, U+7136, U+7167, U+7206, U+7247-7248, U+724c, U+7279, U+72b6, U+72ec, U+731c, U+7387, U+73af-73b0, U+73bb, U+7403, U+7406, U+7483, U+751f, U+7528, U+7531, U+7535, U+753b, U+754c, U+754f, U+7559, U+7565, U+7591, U+75d5, U+767b, U+767d-767e, U+7684, U+76d6, U+76d8, U+76ee, U+76f4, U+76f8, U+7701, U+770b, U+771f, U+773c, U+7740, U+77e5, U+77ed, U+7801, U+7814, U+7834, U+7840, U+786c, U+786e, U+793a, U+7968, U+7981, U+79bb, U+79c1, U+79cd, U+79d2, U+79f0, U+79fb, U+7a0b, U+7a0d, U+7a33, U+7a7a, U+7a7f, U+7a84, U+7a97, U+7acb, U+7ad6, U+7ad9, U+7ade, U+7ae0, U+7aef, U+7b26, U+7b2c, U+7b3c, U+7b49, U+7b54, U+7b56, U+7b5b, U+7b7e, U+7b97, U+7ba1, U+7bad, U+7bb1, U+7c07, U+7c7b, U+7cbe, U+7cca, U+7cfb, U+7d20, U+7d22, U+7d27, U+7d2f, U+7e41, U+7ea2, U+7ea6-7ea7, U+7eaf, U+7eb9, 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+7f00, U+7f13, U+7f16, U+7f1d, U+7f29, U+7f3a, U+7f51, U+7f6e, U+7f72, U+7f8e, U+7ffb, U+8001, U+8005, U+800c, U+8017, U+804a, U+8054, U+805a, U+80cc, U+80fd, U+811a, U+8131, U+81ea, U+81f3-81f4, U+822a, U+8272, U+8282, U+82af, U+82b1, U+82f1, U+8303, U+83ab, U+83b7, U+83dc, U+8425, U+843d, U+84dd, U+85cf, U+884c, U+8865, U+8868, U+88ab, U+88b1, U+88c1, U+88c5, U+88f8, U+897f, U+8981, U+8986, U+89c1-89c2, U+89c4, U+89c6, U+89c8-89c9, U+89d2, U+89e3, U+89e6, U+8a00, U+8b66, U+8ba1-8ba2, U+8ba4, U+8ba9, U+8bae, U+8bb0, U+8bb8, U+8bbe-8bbf, U+8bc1, U+8bc6, U+8bc9, U+8bcd, U+8bd5, U+8bdd, U+8be2, U+8be5-8be6, U+8bed, U+8bef, U+8bf4, U+8bf7, U+8bfa-8bfb, U+8c01, U+8c03, U+8c08, U+8d1f, U+8d23, U+8d25-8d28, U+8d2d, U+8d34, U+8d39, U+8d44, U+8d56, U+8d70, U+8d77, U+8d85, U+8d8b, U+8db3, U+8dd1, U+8ddf, U+8def, U+8df3, U+8e22, U+8e29, U+8eab, U+8f66, U+8f68, U+8f6c, U+8f6e-8f6f, U+8f7d, U+8f83-8f85, U+8f91, U+8f93, U+8fa8, U+8fb9, U+8fbe, U+8fc7, U+8fd0-8fd1, U+8fd4, U+8fd8-8fd9, U+8fdb-8fdc, U+8fde-8fdf, U+8feb, U+8ff0, U+8ff9, U+9000-9002, U+9009, U+900f-9010, U+9014, U+901a, U+901f, U+903b, U+904d, U+9053, U+9057, U+907f, U+90a3, U+90ae, U+90e8, U+90fd, U+914d, U+9192, U+91c7, U+91ca, U+91cc-91cd, U+91cf, U+91d1, U+949f, U+94ae, U+94b1, U+94f6, U+94fe, U+9500-9501, U+9519, U+952e, U+957f, U+95e8, U+95ea, U+95ed-95ee, U+95f4, U+9605, U+9608, U+961f, U+9632, U+9636, U+9644-9645, U+9650, U+9664, U+968f-9690, U+9694, U+9699, U+969c, U+96be, U+96c6, U+96f6, U+9700, U+9732, U+9759, U+975e, U+9760, U+9762, U+97f3, U+9875-9876, U+9879-987b, U+9884, U+9886, U+9891, U+9898, U+989c-989d, U+98de, U+9988, U+9996, U+9a71, U+9a8c, U+9a97, U+9aa4, U+9ad8, U+9ed1, U+9ed8, U+9f50, U+ff01, U+ff08-ff09, U+ff0c, U+ff1a-ff1b, U+ff1f, U+ffe5;
}
@font-face {
  font-family: "MiSans";
  font-style: normal;
  font-weight: 550 649;
  font-display: swap;
  src: url(/assets/fonts/misans-600.woff2) format("woff2");
  unicode-range: U+20-7e, U+a3, U+a5, U+a7, U+b0-b1, U+b7, U+d7, U+f7, U+2013-2014, U+2018-2019, U+201c-201d, U+2026, U+20ac, U+2192, U+2248, U+2264-2265, U+2713, U+3001-3002, U+300a-300d, U+3010-3011, U+4e00, U+4e09-4e0b, U+4e0d-4e0e, U+4e13-4e14, U+4e1a, U+4e1c, U+4e22, U+4e24-4e25, U+4e2a, U+4e2d, U+4e32, U+4e34, U+4e3a-4e3b, U+4e3e, U+4e45, U+4e48-4e49, U+4e4b, U+4e4e, U+4e58, U+4e5f, U+4e70-4e71, U+4e86, U+4e88, U+4e8b-4e8c, U+4e8e, U+4e92, U+4e94, U+4e9b, U+4ea4, U+4ea7, U+4eab-4eac, U+4eae, U+4eba, U+4ec0, U+4ec5, U+4eca, U+4ecd-4ece, U+4ed6, U+4ed8, U+4ee3-4ee5, U+4eea, U+4eec, U+4ef6-4ef7, U+4efb, U+4efd, U+4f18, U+4f1a, U+4f20, U+4f46, U+4f4d-4f4f, U+4f53, U+4f55, U+4f59, U+4f5c, U+4f60, U+4f7f, U+4f8b, U+4f9b, U+4f9d, U+4fa7, U+4fbf, U+4fdd, U+4fe1, U+4fee, U+500d, U+5012, U+5019, U+503c, U+5047, U+505a, U+505c, U+50ac, U+50cf, U+513f, U+5141, U+5143, U+5145, U+5148-5149, U+514d, U+515c, U+5165, U+5168, U+516c, U+5171, U+5173, U+5176-5177, U+517c, U+5185, U+518c-518d, U+5199, U+51b2-51b3, U+51b5, U+51b7, U+51bb, U+51c6, U+51e0, U+51ed, U+51fa, U+51fd, U+5206-5207, U+5212, U+5217, U+5219-521b, U+521d, U+5220, U+5224, U+5229, U+522b, U+5230, U+5236-5237, U+523a-523b, U+524d, U+5269-526a, U+526f, U+529b, U+529e-52a1, U+52a8-52a9, U+52bf, U+52fe-52ff, U+5305, U+5316-5317, U+5339-533a, U+533f, U+5341, U+5347-5348, U+534a, U+5355-5357, U+5360-5361, U+5373-5374, U+5378, U+5386, U+538b, U+539a, U+539f, U+53bb, U+53c2, U+53c8-53ca, U+53cc-53cd, U+53d1, U+53d6-53d8, U+53e0, U+53e3, U+53e5-53e6, U+53ea, U+53ef-53f0, U+53f2-53f3, U+53f7, U+5403-5404, U+5408, U+540c-540e, U+5411, U+5417, U+541e, U+5426, U+542b, U+542f, U+5438, U+544a, U+5458, U+5468, U+547c-547d, U+548c, U+54a8, U+54c1, U+54cd, U+54e8, U+54ea, U+552e-552f, U+5546, U+5668, U+56db, U+56de, U+56e0, U+56e2, U+56f4, U+56fa, U+56fd-56fe, U+5706, U+5708, U+5728, U+5730, U+573a, U+5740, U+5747, U+574f, U+5751, U+5757, U+578b, U+57ce, U+57fa, U+5806, U+585e, U+586b, U+5883, U+5899, U+589e, U+5904, U+5907, U+590d, U+5916, U+591a, U+591f, U+5927, U+5929-592a, U+5931, U+5934, U+5951, U+5957, U+597d, U+5982, U+5999, U+59cb, U+59d3, U+5a01, U+5b50, U+5b57-5b58, U+5b64, U+5b66, U+5b83, U+5b89, U+5b8c, U+5b98, U+5b9a, U+5b9e, U+5ba1-5ba2, U+5bb9, U+5bbd, U+5bc6, U+5bf9, U+5bfb-5bfc, U+5c01, U+5c04, U+5c06, U+5c0f, U+5c11, U+5c1a, U+5c1d, U+5c31, U+5c3a, U+5c3d, U+5c40, U+5c42, U+5c45, U+5c4f, U+5c55, U+5c5e, U+5d4c, U+5de5-5de6, U+5dee, U+5df1-5df2, U+5e01, U+5e03, U+5e26-5e27, U+5e2e, U+5e38, U+5e55, U+5e72-5e74, U+5e76, U+5e7d, U+5e8f, U+5e93-5e95, U+5e9f, U+5ea6, U+5ef6, U+5efa, U+5f00, U+5f02-5f03, U+5f0a, U+5f0f, U+5f15, U+5f20, U+5f39-5f3a, U+5f52-5f53, U+5f55, U+5f62, U+5f69, U+5f71, U+5f80, U+5f84-5f85, U+5f88, U+5f8b, U+5f92, U+5f97, U+5fae, U+5fbd, U+5fc3, U+5fc5, U+5fd9, U+5feb, U+5ffd, U+6000-6001, U+600e, U+6025, U+6027, U+603b, U+6062, U+606f-6070, U+60a8, U+60ac, U+60c5, U+60e7, U+60f3, U+610f, U+611f, U+613f, U+6162, U+620f-6211, U+6216, U+622a, U+6237, U+6240, U+624b, U+624d, U+6253, U+6258, U+6263, U+6267, U+626b, U+6270, U+6279, U+627e-6280, U+6284, U+628a, U+6296-6298, U+629b, U+62a2, U+62a4-62a5, U+62c6, U+62c9, U+62cd, U+62d2, U+62d6, U+62e5-62e6, U+62e9, U+62fc, U+62ff, U+6301-6302, U+6307, U+6309, U+6311, U+6321, U+6324, U+6362, U+636e, U+6377, U+6388-6389, U+6392, U+63a2, U+63a5, U+63a7-63a8, U+63cf-63d0, U+63d2, U+641c, U+6446, U+6458, U+6478, U+6491, U+649e, U+64a4, U+64cd, U+6525, U+652f, U+6536, U+6539, U+653e, U+6545, U+6548, U+654f, U+6559, U+655b, U+6563, U+6570, U+6574, U+6587, U+6599, U+65a5, U+65ad, U+65b0, U+65b9, U+65c1, U+65e0, U+65e5, U+65e7, U+65e9, U+65f6, U+660e, U+6613, U+6620, U+6628, U+662f, U+663e, U+665a, U+666e-666f, U+6682, U+6697, U+66f2, U+66f4, U+66fe-6700, U+6708-6709, U+670d, U+671f, U+672a, U+672c, U+672f, U+673a, U+6740, U+6743, U+675f-6761, U+6765, U+677f, U+6781, U+6784, U+6790, U+679a, U+679c, U+67b6, U+67d0, U+67d3, U+67e5, U+67f1, U+6807, U+680f, U+6821, U+6837-6839, U+683c, U+6846, U+6848, U+6863, U+6876, U+68c0, U+695a, U+6982, U+69fd, U+6a21, U+6a2a, U+6b21, U+6b3e, U+6b62-6b65, U+6b6a, U+6b7b, U+6b8a, U+6bb5, U+6bcd, U+6bcf, U+6bd4, U+6bdb, U+6c14, U+6c34, U+6c38, U+6c42, U+6c60, U+6ca1, U+6cbf, U+6cd5, U+6ce1, U+6ce8, U+6d32, U+6d3b, U+6d3d, U+6d41, U+6d45, U+6d4b, U+6d4f, U+6d6e, U+6d88-6d89, U+6df1, U+6df7, U+6e05, U+6e10, U+6e20, U+6e32, U+6e38, U+6e90, U+6ed1, U+6eda, U+6ee1, U+6ee4-6ee5, U+6f02, U+6f0f, U+6f14, U+6fc0, U+706b, U+7070, U+7075, U+70b9, U+70e6-70e7, U+7126, U+7136, U+7167, U+7206, U+7247-7248, U+724c, U+7279, U+72b6, U+72ec, U+731c, U+7387, U+73af-73b0, U+73bb, U+7403, U+7406, U+7483, U+751f, U+7528, U+7531, U+7535, U+753b, U+754c, U+754f, U+7559, U+7565, U+7591, U+75d5, U+767b, U+767d-767e, U+7684, U+76d6, U+76d8, U+76ee, U+76f4, U+76f8, U+7701, U+770b, U+771f, U+773c, U+7740, U+77e5, U+77ed, U+7801, U+7814, U+7834, U+7840, U+786c, U+786e, U+793a, U+7968, U+7981, U+79bb, U+79c1, U+79cd, U+79d2, U+79f0, U+79fb, U+7a0b, U+7a0d, U+7a33, U+7a7a, U+7a7f, U+7a84, U+7a97, U+7acb, U+7ad6, U+7ad9, U+7ade, U+7ae0, U+7aef, U+7b26, U+7b2c, U+7b3c, U+7b49, U+7b54, U+7b56, U+7b5b, U+7b7e, U+7b97, U+7ba1, U+7bad, U+7bb1, U+7c07, U+7c7b, U+7cbe, U+7cca, U+7cfb, U+7d20, U+7d22, U+7d27, U+7d2f, U+7e41, U+7ea2, U+7ea6-7ea7, U+7eaf, U+7eb9, 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+7f00, U+7f13, U+7f16, U+7f1d, U+7f29, U+7f3a, U+7f51, U+7f6e, U+7f72, U+7f8e, U+7ffb, U+8001, U+8005, U+800c, U+8017, U+804a, U+8054, U+805a, U+80cc, U+80fd, U+811a, U+8131, U+81ea, U+81f3-81f4, U+822a, U+8272, U+8282, U+82af, U+82b1, U+82f1, U+8303, U+83ab, U+83b7, U+83dc, U+8425, U+843d, U+84dd, U+85cf, U+884c, U+8865, U+8868, U+88ab, U+88b1, U+88c1, U+88c5, U+88f8, U+897f, U+8981, U+8986, U+89c1-89c2, U+89c4, U+89c6, U+89c8-89c9, U+89d2, U+89e3, U+89e6, U+8a00, U+8b66, U+8ba1-8ba2, U+8ba4, U+8ba9, U+8bae, U+8bb0, U+8bb8, U+8bbe-8bbf, U+8bc1, U+8bc6, U+8bc9, U+8bcd, U+8bd5, U+8bdd, U+8be2, U+8be5-8be6, U+8bed, U+8bef, U+8bf4, U+8bf7, U+8bfa-8bfb, U+8c01, U+8c03, U+8c08, U+8d1f, U+8d23, U+8d25-8d28, U+8d2d, U+8d34, U+8d39, U+8d44, U+8d56, U+8d70, U+8d77, U+8d85, U+8d8b, U+8db3, U+8dd1, U+8ddf, U+8def, U+8df3, U+8e22, U+8e29, U+8eab, U+8f66, U+8f68, U+8f6c, U+8f6e-8f6f, U+8f7d, U+8f83-8f85, U+8f91, U+8f93, U+8fa8, U+8fb9, U+8fbe, U+8fc7, U+8fd0-8fd1, U+8fd4, U+8fd8-8fd9, U+8fdb-8fdc, U+8fde-8fdf, U+8feb, U+8ff0, U+8ff9, U+9000-9002, U+9009, U+900f-9010, U+9014, U+901a, U+901f, U+903b, U+904d, U+9053, U+9057, U+907f, U+90a3, U+90ae, U+90e8, U+90fd, U+914d, U+9192, U+91c7, U+91ca, U+91cc-91cd, U+91cf, U+91d1, U+949f, U+94ae, U+94b1, U+94f6, U+94fe, U+9500-9501, U+9519, U+952e, U+957f, U+95e8, U+95ea, U+95ed-95ee, U+95f4, U+9605, U+9608, U+961f, U+9632, U+9636, U+9644-9645, U+9650, U+9664, U+968f-9690, U+9694, U+9699, U+969c, U+96be, U+96c6, U+96f6, U+9700, U+9732, U+9759, U+975e, U+9760, U+9762, U+97f3, U+9875-9876, U+9879-987b, U+9884, U+9886, U+9891, U+9898, U+989c-989d, U+98de, U+9988, U+9996, U+9a71, U+9a8c, U+9a97, U+9aa4, U+9ad8, U+9ed1, U+9ed8, U+9f50, U+ff01, U+ff08-ff09, U+ff0c, U+ff1a-ff1b, U+ff1f, U+ffe5;
}
@font-face {
  font-family: "MiSans";
  font-style: normal;
  font-weight: 650 900;
  font-display: swap;
  src: url(/assets/fonts/misans-700.woff2) format("woff2");
  unicode-range: U+20-7e, U+a3, U+a5, U+a7, U+b0-b1, U+b7, U+d7, U+f7, U+2013-2014, U+2018-2019, U+201c-201d, U+2026, U+20ac, U+2192, U+2248, U+2264-2265, U+2713, U+3001-3002, U+300a-300d, U+3010-3011, U+4e00, U+4e09-4e0b, U+4e0d-4e0e, U+4e13-4e14, U+4e1a, U+4e1c, U+4e22, U+4e24-4e25, U+4e2a, U+4e2d, U+4e32, U+4e34, U+4e3a-4e3b, U+4e3e, U+4e45, U+4e48-4e49, U+4e4b, U+4e4e, U+4e58, U+4e5f, U+4e70-4e71, U+4e86, U+4e88, U+4e8b-4e8c, U+4e8e, U+4e92, U+4e94, U+4e9b, U+4ea4, U+4ea7, U+4eab-4eac, U+4eae, U+4eba, U+4ec0, U+4ec5, U+4eca, U+4ecd-4ece, U+4ed6, U+4ed8, U+4ee3-4ee5, U+4eea, U+4eec, U+4ef6-4ef7, U+4efb, U+4efd, U+4f18, U+4f1a, U+4f20, U+4f46, U+4f4d-4f4f, U+4f53, U+4f55, U+4f59, U+4f5c, U+4f60, U+4f7f, U+4f8b, U+4f9b, U+4f9d, U+4fa7, U+4fbf, U+4fdd, U+4fe1, U+4fee, U+500d, U+5012, U+5019, U+503c, U+5047, U+505a, U+505c, U+50ac, U+50cf, U+513f, U+5141, U+5143, U+5145, U+5148-5149, U+514d, U+515c, U+5165, U+5168, U+516c, U+5171, U+5173, U+5176-5177, U+517c, U+5185, U+518c-518d, U+5199, U+51b2-51b3, U+51b5, U+51b7, U+51bb, U+51c6, U+51e0, U+51ed, U+51fa, U+51fd, U+5206-5207, U+5212, U+5217, U+5219-521b, U+521d, U+5220, U+5224, U+5229, U+522b, U+5230, U+5236-5237, U+523a-523b, U+524d, U+5269-526a, U+526f, U+529b, U+529e-52a1, U+52a8-52a9, U+52bf, U+52fe-52ff, U+5305, U+5316-5317, U+5339-533a, U+533f, U+5341, U+5347-5348, U+534a, U+5355-5357, U+5360-5361, U+5373-5374, U+5378, U+5386, U+538b, U+539a, U+539f, U+53bb, U+53c2, U+53c8-53ca, U+53cc-53cd, U+53d1, U+53d6-53d8, U+53e0, U+53e3, U+53e5-53e6, U+53ea, U+53ef-53f0, U+53f2-53f3, U+53f7, U+5403-5404, U+5408, U+540c-540e, U+5411, U+5417, U+541e, U+5426, U+542b, U+542f, U+5438, U+544a, U+5458, U+5468, U+547c-547d, U+548c, U+54a8, U+54c1, U+54cd, U+54e8, U+54ea, U+552e-552f, U+5546, U+5668, U+56db, U+56de, U+56e0, U+56e2, U+56f4, U+56fa, U+56fd-56fe, U+5706, U+5708, U+5728, U+5730, U+573a, U+5740, U+5747, U+574f, U+5751, U+5757, U+578b, U+57ce, U+57fa, U+5806, U+585e, U+586b, U+5883, U+5899, U+589e, U+5904, U+5907, U+590d, U+5916, U+591a, U+591f, U+5927, U+5929-592a, U+5931, U+5934, U+5951, U+5957, U+597d, U+5982, U+5999, U+59cb, U+59d3, U+5a01, U+5b50, U+5b57-5b58, U+5b64, U+5b66, U+5b83, U+5b89, U+5b8c, U+5b98, U+5b9a, U+5b9e, U+5ba1-5ba2, U+5bb9, U+5bbd, U+5bc6, U+5bf9, U+5bfb-5bfc, U+5c01, U+5c04, U+5c06, U+5c0f, U+5c11, U+5c1a, U+5c1d, U+5c31, U+5c3a, U+5c3d, U+5c40, U+5c42, U+5c45, U+5c4f, U+5c55, U+5c5e, U+5d4c, U+5de5-5de6, U+5dee, U+5df1-5df2, U+5e01, U+5e03, U+5e26-5e27, U+5e2e, U+5e38, U+5e55, U+5e72-5e74, U+5e76, U+5e7d, U+5e8f, U+5e93-5e95, U+5e9f, U+5ea6, U+5ef6, U+5efa, U+5f00, U+5f02-5f03, U+5f0a, U+5f0f, U+5f15, U+5f20, U+5f39-5f3a, U+5f52-5f53, U+5f55, U+5f62, U+5f69, U+5f71, U+5f80, U+5f84-5f85, U+5f88, U+5f8b, U+5f92, U+5f97, U+5fae, U+5fbd, U+5fc3, U+5fc5, U+5fd9, U+5feb, U+5ffd, U+6000-6001, U+600e, U+6025, U+6027, U+603b, U+6062, U+606f-6070, U+60a8, U+60ac, U+60c5, U+60e7, U+60f3, U+610f, U+611f, U+613f, U+6162, U+620f-6211, U+6216, U+622a, U+6237, U+6240, U+624b, U+624d, U+6253, U+6258, U+6263, U+6267, U+626b, U+6270, U+6279, U+627e-6280, U+6284, U+628a, U+6296-6298, U+629b, U+62a2, U+62a4-62a5, U+62c6, U+62c9, U+62cd, U+62d2, U+62d6, U+62e5-62e6, U+62e9, U+62fc, U+62ff, U+6301-6302, U+6307, U+6309, U+6311, U+6321, U+6324, U+6362, U+636e, U+6377, U+6388-6389, U+6392, U+63a2, U+63a5, U+63a7-63a8, U+63cf-63d0, U+63d2, U+641c, U+6446, U+6458, U+6478, U+6491, U+649e, U+64a4, U+64cd, U+6525, U+652f, U+6536, U+6539, U+653e, U+6545, U+6548, U+654f, U+6559, U+655b, U+6563, U+6570, U+6574, U+6587, U+6599, U+65a5, U+65ad, U+65b0, U+65b9, U+65c1, U+65e0, U+65e5, U+65e7, U+65e9, U+65f6, U+660e, U+6613, U+6620, U+6628, U+662f, U+663e, U+665a, U+666e-666f, U+6682, U+6697, U+66f2, U+66f4, U+66fe-6700, U+6708-6709, U+670d, U+671f, U+672a, U+672c, U+672f, U+673a, U+6740, U+6743, U+675f-6761, U+6765, U+677f, U+6781, U+6784, U+6790, U+679a, U+679c, U+67b6, U+67d0, U+67d3, U+67e5, U+67f1, U+6807, U+680f, U+6821, U+6837-6839, U+683c, U+6846, U+6848, U+6863, U+6876, U+68c0, U+695a, U+6982, U+69fd, U+6a21, U+6a2a, U+6b21, U+6b3e, U+6b62-6b65, U+6b6a, U+6b7b, U+6b8a, U+6bb5, U+6bcd, U+6bcf, U+6bd4, U+6bdb, U+6c14, U+6c34, U+6c38, U+6c42, U+6c60, U+6ca1, U+6cbf, U+6cd5, U+6ce1, U+6ce8, U+6d32, U+6d3b, U+6d3d, U+6d41, U+6d45, U+6d4b, U+6d4f, U+6d6e, U+6d88-6d89, U+6df1, U+6df7, U+6e05, U+6e10, U+6e20, U+6e32, U+6e38, U+6e90, U+6ed1, U+6eda, U+6ee1, U+6ee4-6ee5, U+6f02, U+6f0f, U+6f14, U+6fc0, U+706b, U+7070, U+7075, U+70b9, U+70e6-70e7, U+7126, U+7136, U+7167, U+7206, U+7247-7248, U+724c, U+7279, U+72b6, U+72ec, U+731c, U+7387, U+73af-73b0, U+73bb, U+7403, U+7406, U+7483, U+751f, U+7528, U+7531, U+7535, U+753b, U+754c, U+754f, U+7559, U+7565, U+7591, U+75d5, U+767b, U+767d-767e, U+7684, U+76d6, U+76d8, U+76ee, U+76f4, U+76f8, U+7701, U+770b, U+771f, U+773c, U+7740, U+77e5, U+77ed, U+7801, U+7814, U+7834, U+7840, U+786c, U+786e, U+793a, U+7968, U+7981, U+79bb, U+79c1, U+79cd, U+79d2, U+79f0, U+79fb, U+7a0b, U+7a0d, U+7a33, U+7a7a, U+7a7f, U+7a84, U+7a97, U+7acb, U+7ad6, U+7ad9, U+7ade, U+7ae0, U+7aef, U+7b26, U+7b2c, U+7b3c, U+7b49, U+7b54, U+7b56, U+7b5b, U+7b7e, U+7b97, U+7ba1, U+7bad, U+7bb1, U+7c07, U+7c7b, U+7cbe, U+7cca, U+7cfb, U+7d20, U+7d22, U+7d27, U+7d2f, U+7e41, U+7ea2, U+7ea6-7ea7, U+7eaf, U+7eb9, 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+7f00, U+7f13, U+7f16, U+7f1d, U+7f29, U+7f3a, U+7f51, U+7f6e, U+7f72, U+7f8e, U+7ffb, U+8001, U+8005, U+800c, U+8017, U+804a, U+8054, U+805a, U+80cc, U+80fd, U+811a, U+8131, U+81ea, U+81f3-81f4, U+822a, U+8272, U+8282, U+82af, U+82b1, U+82f1, U+8303, U+83ab, U+83b7, U+83dc, U+8425, U+843d, U+84dd, U+85cf, U+884c, U+8865, U+8868, U+88ab, U+88b1, U+88c1, U+88c5, U+88f8, U+897f, U+8981, U+8986, U+89c1-89c2, U+89c4, U+89c6, U+89c8-89c9, U+89d2, U+89e3, U+89e6, U+8a00, U+8b66, U+8ba1-8ba2, U+8ba4, U+8ba9, U+8bae, U+8bb0, U+8bb8, U+8bbe-8bbf, U+8bc1, U+8bc6, U+8bc9, U+8bcd, U+8bd5, U+8bdd, U+8be2, U+8be5-8be6, U+8bed, U+8bef, U+8bf4, U+8bf7, U+8bfa-8bfb, U+8c01, U+8c03, U+8c08, U+8d1f, U+8d23, U+8d25-8d28, U+8d2d, U+8d34, U+8d39, U+8d44, U+8d56, U+8d70, U+8d77, U+8d85, U+8d8b, U+8db3, U+8dd1, U+8ddf, U+8def, U+8df3, U+8e22, U+8e29, U+8eab, U+8f66, U+8f68, U+8f6c, U+8f6e-8f6f, U+8f7d, U+8f83-8f85, U+8f91, U+8f93, U+8fa8, U+8fb9, U+8fbe, U+8fc7, U+8fd0-8fd1, U+8fd4, U+8fd8-8fd9, U+8fdb-8fdc, U+8fde-8fdf, U+8feb, U+8ff0, U+8ff9, U+9000-9002, U+9009, U+900f-9010, U+9014, U+901a, U+901f, U+903b, U+904d, U+9053, U+9057, U+907f, U+90a3, U+90ae, U+90e8, U+90fd, U+914d, U+9192, U+91c7, U+91ca, U+91cc-91cd, U+91cf, U+91d1, U+949f, U+94ae, U+94b1, U+94f6, U+94fe, U+9500-9501, U+9519, U+952e, U+957f, U+95e8, U+95ea, U+95ed-95ee, U+95f4, U+9605, U+9608, U+961f, U+9632, U+9636, U+9644-9645, U+9650, U+9664, U+968f-9690, U+9694, U+9699, U+969c, U+96be, U+96c6, U+96f6, U+9700, U+9732, U+9759, U+975e, U+9760, U+9762, U+97f3, U+9875-9876, U+9879-987b, U+9884, U+9886, U+9891, U+9898, U+989c-989d, U+98de, U+9988, U+9996, U+9a71, U+9a8c, U+9a97, U+9aa4, U+9ad8, U+9ed1, U+9ed8, U+9f50, U+ff01, U+ff08-ff09, U+ff0c, U+ff1a-ff1b, U+ff1f, U+ffe5;
}
/* FONT_SUBSET:end */

:root {
  /* Sonoma dark surfaces */
  --bg:            #1c1c1e;
  --bg-deep:       #141416;
  --bg-raise:      #242426;

  /* material: translucent fill, blur carries the rest */
  --mat:           rgba(58, 58, 62, .42);
  --mat-2:         rgba(52, 52, 56, .52);
  --mat-3:         rgba(255, 255, 255, .055);
  --mat-4:         rgba(255, 255, 255, .085);
  --mat-hover:     rgba(255, 255, 255, .07);

  /* hairlines — thin, faint, never white-blocky */
  --edge:          rgba(255, 255, 255, .075);
  --edge-soft:     rgba(255, 255, 255, .045);
  --edge-lit:      rgba(255, 255, 255, .12);

  /* type */
  --text:          #ffffff;
  --text-2:        rgba(255, 255, 255, .68);
  --text-3:        rgba(255, 255, 255, .54);
  --text-4:        rgba(255, 255, 255, .36);

  /* Apple system blue, desaturated for dark material */
  --accent:        #6ba4ff;
  --accent-2:      #4a86f0;
  --accent-deep:   #3a6fd8;
  --accent-soft:   rgba(107, 164, 255, .14);
  --accent-line:   rgba(107, 164, 255, .30);
  /* 主按钮专用：比 --accent 深一档。--accent 是给深底上的文字用的（越亮越清楚），
   * 但同一个亮蓝当按钮底色时白字只有 2.5:1，几乎糊在一起。按钮另开一对色标，
   * 保证白字 ≥ 4.5:1，又不用牺牲正文里的强调蓝。 */
  --btn-a:         #3170dd;
  --btn-b:         #2559bd;
  --cyan:          #5fd4c4;
  --danger:        #ff6b6b;
  --warn:          #ffc06b;
  --warn-soft:     rgba(255, 183, 77, .10);
  --warn-line:     rgba(255, 183, 77, .28);

  /* soft diffuse shadows — wide, pale, no hard drop */
  --diffuse-1: 0 1px 1px rgba(0, 0, 0, .18), 0 12px 32px -14px rgba(0, 0, 0, .55);
  --diffuse-2: 0 1px 1px rgba(0, 0, 0, .20), 0 24px 64px -22px rgba(0, 0, 0, .62), 0 6px 18px -12px rgba(0, 0, 0, .35);
  --diffuse-3: 0 1px 1px rgba(0, 0, 0, .22), 0 40px 100px -34px rgba(0, 0, 0, .70), 0 12px 30px -18px rgba(0, 0, 0, .40);

  --radius:     14px;
  --radius-md:  10px;
  --radius-sm:  8px;
  --radius-xs:  6px;

  --blur:       30px;
  --blur-sm:    14px;
  --sat:        180%;

  --font: "MiSans", "Segoe UI Variable Text", "Segoe UI", -apple-system, "Helvetica Neue",
    "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", sans-serif;
  --mono: "SF Mono", "Cascadia Mono", "Cascadia Code", Consolas, "Liberation Mono", ui-monospace, monospace;

  --shell: 1160px;
  --gutter: clamp(1.1rem, .5rem + 2.6vw, 2.75rem);
  --header-h: 64px;
  --section: clamp(3.25rem, 2.2rem + 4.6vw, 6rem);

  --t: .3s cubic-bezier(.32, .72, 0, 1);
  --t-fast: .18s cubic-bezier(.32, .72, 0, 1);
  color-scheme: dark;
}

[data-theme="light"] {
  --bg:            #f0f0f2;
  --bg-deep:       #e6e6e9;
  --bg-raise:      #fbfbfc;
  --mat:           rgba(255, 255, 255, .58);
  --mat-2:         rgba(255, 255, 255, .68);
  --mat-3:         rgba(255, 255, 255, .5);
  --mat-4:         rgba(255, 255, 255, .78);
  --mat-hover:     rgba(255, 255, 255, .88);
  --edge:          rgba(0, 0, 0, .07);
  --edge-soft:     rgba(0, 0, 0, .045);
  --edge-lit:      rgba(255, 255, 255, .95);
  --text:          #1c1c1e;
  --text-2:        rgba(28, 28, 30, .70);
  --text-3:        rgba(28, 28, 30, .62);
  --text-4:        rgba(28, 28, 30, .40);
  --accent:        #2b66d3;
  --accent-2:      #2459bb;
  --accent-deep:   #1f51ad;
  --accent-soft:   rgba(43, 102, 211, .10);
  --accent-line:   rgba(43, 102, 211, .28);
  --btn-a:         #2f6fe0;
  --btn-b:         #2559c4;
  --cyan:          #097a6d;
  --danger:        #c9353d;
  --warn:          #8a5a00;
  --warn-soft:     rgba(196, 137, 20, .12);
  --warn-line:     rgba(196, 137, 20, .34);
  --diffuse-1: 0 1px 1px rgba(20, 30, 50, .06), 0 12px 30px -16px rgba(20, 30, 50, .22);
  --diffuse-2: 0 1px 1px rgba(20, 30, 50, .07), 0 24px 60px -24px rgba(20, 30, 50, .26), 0 6px 18px -14px rgba(20, 30, 50, .14);
  --diffuse-3: 0 1px 1px rgba(20, 30, 50, .08), 0 40px 90px -32px rgba(20, 30, 50, .30);
  color-scheme: light;
}

*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; padding: 0; }
html { scroll-behavior: smooth; scroll-padding-top: calc(var(--header-h) + 24px); -webkit-text-size-adjust: 100%; }
body {
  font-family: var(--font);
  font-size: 16px;
  font-weight: 450;
  line-height: 1.68;
  letter-spacing: 0;
  color: var(--text);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  font-synthesis: none;
  font-kerning: normal;
  text-spacing-trim: space-first;
  overflow-wrap: break-word;
  min-height: 100dvh;
  overflow-x: hidden;
  position: relative;
}

/* CJK doesn't want the Latin negative tracking */
html[lang="zh-CN"] body { letter-spacing: .004em; }
html[lang="zh-CN"] h1, html[lang="zh-CN"] h2, html[lang="zh-CN"] h3, html[lang="zh-CN"] h4,
html[lang="zh-CN"] .h1, html[lang="zh-CN"] .h2, html[lang="zh-CN"] .h3, html[lang="zh-CN"] .h4,
html[lang="zh-CN"] .card__title, html[lang="zh-CN"] .stat__value,
html[lang="zh-CN"] .btn, html[lang="zh-CN"] .nav__link { letter-spacing: 0; }

/* natural ambient light — very soft, mapped, no mirrored glare */
body::before {
  content: "";
  position: fixed;
  inset: -12%;
  z-index: -2;
  pointer-events: none;
  background:
    radial-gradient(46% 38% at 16% 4%, rgba(107, 164, 255, .16), transparent 68%),
    radial-gradient(40% 34% at 86% 14%, rgba(96, 128, 200, .12), transparent 72%),
    radial-gradient(38% 30% at 70% 92%, rgba(140, 190, 235, .07), transparent 74%);
  filter: blur(22px);
}
/* very fine grain so the glass reads as frosted, not flat */
body::after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  opacity: .32;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.055'/%3E%3C/svg%3E");
  mix-blend-mode: overlay;
}

img, svg { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
ul, ol { list-style: none; }
button, input, select, textarea { font: inherit; color: inherit; background: none; border: 0; }
button { cursor: pointer; }
table { border-collapse: collapse; width: 100%; }
::selection { background: rgba(107, 164, 255, .32); }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 8px; }

/* theme swap is instant by design: a running transition on a custom-property
   driven colour keeps the old target in Chromium (white-on-white buttons) */
html.is-theming, html.is-theming *,
html.is-theming *::before, html.is-theming *::after { transition: none !important; }

/* ---------- layout ---------- */
.shell { width: min(100% - var(--gutter) * 2, var(--shell)); margin-inline: auto; }
.section { padding-block: var(--section); position: relative; }
.grid { display: grid; gap: clamp(.9rem, .6rem + 1vw, 1.25rem); }
.g2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.g3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.g4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.split { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(1.4rem, 1rem + 2.8vw, 3.25rem); align-items: start; }
@media (max-width: 1020px) { .g4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 880px) { .g3, .split { grid-template-columns: 1fr; } .g2 { grid-template-columns: 1fr; } }
@media (max-width: 560px) { .g4 { grid-template-columns: 1fr; } }

/* ---------- type ---------- */
h1, h2, h3, h4 { line-height: 1.2; letter-spacing: -.021em; font-weight: 620; color: var(--text); }
.h1 { font-size: clamp(2rem, 1.4rem + 2.6vw, 3.15rem); line-height: 1.08; letter-spacing: -.032em; font-weight: 680; }
.h2 { font-size: clamp(1.4rem, 1.12rem + 1.3vw, 1.95rem); letter-spacing: -.026em; font-weight: 640; }
.h3 { font-size: clamp(1.05rem, .97rem + .45vw, 1.28rem); font-weight: 620; }
.h4 { font-size: .95rem; font-weight: 620; letter-spacing: -.012em; }
.lead { font-size: clamp(.94rem, .92rem + .22vw, 1.04rem); line-height: 1.72; color: var(--text-2); font-weight: 450; }
.small { font-size: .84rem; }
.xsmall { font-size: .75rem; }
.muted { color: var(--text-2); }
p, li { text-wrap: pretty; }
.dim { color: var(--text-3); }
.mono { font-family: var(--mono); font-size: .89em; letter-spacing: -.01em; }
.accent { color: var(--accent); }
.center { text-align: center; }
.measure { max-width: 64ch; }

.eyebrow {
  display: inline-flex; align-items: center; gap: .45rem;
  font-size: .76rem; font-weight: 590; letter-spacing: .02em;
  color: var(--accent);
  text-transform: none;
}
.eyebrow::before {
  content: ""; width: 5px; height: 5px; border-radius: 50%;
  background: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft);
}

.sec-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 2rem; margin-bottom: clamp(1.6rem, 1.2rem + 1.8vw, 2.5rem); flex-wrap: wrap; }
.sec-head p { max-width: 46ch; }

/* ---------- the material ---------- */
.glass {
  position: relative;
  border-radius: var(--radius);
  background: var(--mat);
  border: 1px solid var(--edge);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .09),
    inset 0 -1px 0 rgba(0, 0, 0, .12),
    0 0 0 .5px rgba(0, 0, 0, .16),
    var(--diffuse-2);
  -webkit-backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  overflow: hidden;
  isolation: isolate;
}
/* faint top rim light — a gradient, not a white stroke */
.glass::before {
  content: "";
  position: absolute; inset: 0 0 auto; height: 40%;
  border-radius: var(--radius) var(--radius) 0 0;
  background: linear-gradient(180deg, rgba(255, 255, 255, .05), transparent);
  pointer-events: none; z-index: 0;
}
.glass > * { position: relative; z-index: 1; }

/* ---------- buttons ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .45rem;
  padding: .6rem 1.1rem;
  border-radius: var(--radius-sm);
  font-size: .86rem; font-weight: 560; letter-spacing: -.005em; white-space: nowrap;
  border: 1px solid transparent;
  transition: background var(--t-fast), border-color var(--t-fast), color var(--t-fast),
              box-shadow var(--t-fast), transform .12s var(--t-fast), filter var(--t-fast);
}
.btn:active { transform: scale(.985); }
.btn--primary {
  color: #fff;
  background: linear-gradient(180deg, var(--btn-a), var(--btn-b));
  border-color: rgba(255, 255, 255, .14);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .22), 0 1px 2px rgba(0, 0, 0, .2), 0 8px 20px -12px rgba(74, 134, 240, .55);
}
.btn--primary:hover { filter: brightness(1.06); }
.btn--glass, .btn--ghost {
  color: var(--text);
  background: var(--mat-3);
  border-color: var(--edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .06);
  -webkit-backdrop-filter: blur(var(--blur-sm)) saturate(160%);
  backdrop-filter: blur(var(--blur-sm)) saturate(160%);
}
.btn--glass:hover, .btn--ghost:hover { background: var(--mat-hover); border-color: var(--edge-lit); }
.btn--plain { color: var(--text-2); padding-inline: .3rem; }
.btn--plain:hover { color: var(--accent); }
.btn--sm { padding: .42rem .8rem; font-size: .79rem; border-radius: var(--radius-xs); }
.btn--lg { padding: .78rem 1.45rem; font-size: .92rem; border-radius: var(--radius-md); }
.btn--block { width: 100%; }
.btn[disabled] { opacity: .42; pointer-events: none; }

.icon { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; flex: none; }

/* ---------- header: floating frosted bar ---------- */
.header {
  position: sticky; top: 0; z-index: 100; height: var(--header-h);
  display: flex; align-items: center;
  background: rgba(28, 28, 30, .55);
  -webkit-backdrop-filter: blur(24px) saturate(180%);
  backdrop-filter: blur(24px) saturate(180%);
  border-bottom: 1px solid transparent;
  transition: border-color var(--t), background var(--t);
}
/* 浅色主题下 accent 作 10px 徽标文字只有 4.1:1，深一档才够 */
[data-theme="light"] .pill--accent,
[data-theme="light"] .tag--accent,
[data-theme="light"] .pline__item[aria-current="page"] b { color: var(--accent-2); }
[data-theme="light"] .pline__item[aria-current="page"] span { color: var(--text-2); }

[data-theme="light"] .header { background: rgba(248, 248, 250, .62); }
.header.is-stuck {
  border-bottom-color: var(--edge-soft);
  box-shadow: 0 1px 0 rgba(255, 255, 255, .03) inset;
}
.header__inner { display: flex; align-items: center; gap: 1.15rem; }

.brand { display: inline-flex; align-items: center; gap: .5rem; font-weight: 600; letter-spacing: -.02em; font-size: .95rem; color: var(--text); }
.brand__mark {
  width: 23px; height: 23px; border-radius: 7px; display: grid; place-items: center;
  background: linear-gradient(165deg, #f8fbff, #d3e0ec 48%, #a9bccd);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .9), inset 0 -1px 0 rgba(28, 42, 56, .22), 0 2px 8px -3px rgba(0, 0, 0, .55);
}
.brand__mark svg { width: 12px; height: 12px; stroke: #17212c; fill: none; stroke-width: 3.3; stroke-linecap: round; stroke-linejoin: round; }
[data-theme="light"] .brand__mark {
  background: linear-gradient(165deg, #ffffff, #dbe6f1 46%, #b4c6d7);
  box-shadow: inset 0 1px 0 #fff, inset 0 -1px 0 rgba(28, 42, 56, .16), 0 0 0 1px rgba(20, 32, 44, .17), 0 2px 5px -2px rgba(20, 32, 44, .45);
}

/* 页脚字标：直接排文字，不用位图 */
.wordmark-link { display: inline-block; color: var(--text); transition: color var(--t-fast); }
.wordmark-link:hover { color: var(--accent); }
.wordmark { display: block; font-size: 1.65rem; font-weight: 800; letter-spacing: -.05em; line-height: 1.1; }

.nav { display: flex; align-items: center; gap: 2px; margin-left: auto; }
.nav__link {
  position: relative; padding: .4rem .7rem; border-radius: var(--radius-xs);
  font-size: .83rem; font-weight: 470; color: var(--text-2);
  transition: color var(--t-fast), background var(--t-fast);
}
.nav__link:hover { color: var(--text); background: var(--mat-3); }
.nav__link[aria-current="page"] { color: var(--text); font-weight: 550; background: var(--mat-3); }
.header__tools { display: flex; align-items: center; gap: .3rem; }
.icon-btn {
  display: inline-grid; place-items: center; width: 30px; height: 30px;
  border-radius: var(--radius-xs); color: var(--text-2);
  border: 1px solid transparent; transition: all var(--t-fast);
}
.icon-btn:hover { color: var(--text); background: var(--mat-3); border-color: var(--edge); }
.lang {
  display: inline-flex; gap: 1px; padding: 2px;
  border-radius: var(--radius-xs); border: 1px solid var(--edge); background: var(--mat-3);
}
.lang a { padding: .14rem .4rem; border-radius: 4px; font-size: .66rem; font-weight: 600; color: var(--text-3); letter-spacing: .02em; }
.lang a:hover { color: var(--text); }
.lang a[aria-current="true"] { background: var(--mat-4); color: var(--text); }
.nav-toggle { display: none; }

@media (max-width: 960px) {
  .nav {
    position: fixed; inset: var(--header-h) 0 auto;
    flex-direction: column; align-items: stretch; gap: 2px;
    padding: .5rem var(--gutter) .9rem;
    background: rgba(28, 28, 30, .82);
    -webkit-backdrop-filter: blur(28px) saturate(180%);
    backdrop-filter: blur(28px) saturate(180%);
    border-bottom: 1px solid var(--edge-soft);
    transform: translateY(-112%); transition: transform var(--t), visibility 0s linear var(--t);
    pointer-events: none;
    /* 收起时移出无障碍树与 Tab 顺序：仅靠 translateY 移出屏幕，键盘仍会聚焦到看不见的链接 */
    visibility: hidden;
  }
  [data-theme="light"] .nav { background: rgba(248, 248, 250, .9); }
  .nav.is-open { transform: none; pointer-events: auto; visibility: visible; transition: transform var(--t), visibility 0s; }
  .nav__link { padding: .66rem .6rem; font-size: .92rem; }
  .nav-toggle { display: inline-grid; }
  .header__cta { display: none; }
}

/* ---------- hero ---------- */
.hero { position: relative; padding-block: clamp(2.75rem, 2rem + 5vw, 5.5rem) clamp(2.25rem, 1.8rem + 3.5vw, 4rem); }
.hero__inner { display: grid; grid-template-columns: 1.1fr .9fr; gap: clamp(1.6rem, 1rem + 3.6vw, 3.75rem); align-items: center; }
@media (max-width: 960px) { .hero__inner { grid-template-columns: 1fr; } }
.hero h1 { margin-top: 1rem; }
.hero__sub { margin-top: 1.2rem; max-width: 54ch; }
.hero__cta { display: flex; flex-wrap: wrap; gap: .55rem; margin-top: 1.75rem; }
.hero__note { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: 1.4rem; }

.pill {
  display: inline-flex; align-items: center; gap: .38rem;
  padding: .26rem .6rem; border-radius: 999px;
  border: 1px solid var(--edge); background: var(--mat-3);
  font-size: .73rem; font-weight: 480; color: var(--text-2);
  -webkit-backdrop-filter: blur(var(--blur-sm));
  backdrop-filter: blur(var(--blur-sm));
}
.pill--accent { border-color: var(--accent-line); color: var(--accent); background: var(--accent-soft); }
.pill__dot { width: 5px; height: 5px; border-radius: 50%; background: currentColor; }

/* ---------- data path (hero) ---------- */
.flow { display: flex; flex-direction: column; }

.flow__bar {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  padding: .58rem .85rem; border-bottom: 1px solid var(--edge-soft);
}
.flow__title { font-size: .73rem; font-weight: 520; color: var(--text-2); letter-spacing: .01em; }
.flow__live {
  display: inline-flex; align-items: center; gap: .36rem;
  font-size: .66rem; font-weight: 520; color: var(--cyan); letter-spacing: .06em;
}
.flow__live i {
  position: relative;
  width: 5px; height: 5px; border-radius: 50%;
  background: currentColor;
}
.flow__live i::after {
  content: ""; position: absolute; inset: -2px; border-radius: 50%;
  border: 1px solid currentColor; opacity: 0;
  animation: livePulse 2.6s ease-out infinite;
}
@keyframes livePulse {
  0%          { opacity: .55; transform: scale(.65); }
  70%, 100%   { opacity: 0;   transform: scale(2); }
}

.flow__body {
  display: flex; flex-direction: column; gap: .8rem;
  padding: clamp(.85rem, .72rem + .42vw, 1.1rem);
}
.flow__top { display: flex; align-items: center; justify-content: space-between; gap: .5rem; row-gap: .55rem; flex-wrap: wrap; }

/* segmented control — macOS style, the selected cell is a raised capsule */
.seg {
  display: inline-flex; gap: 2px; padding: 2px; border-radius: 999px;
  background: var(--mat-3); border: 1px solid var(--edge-soft);
}
.seg button {
  -webkit-appearance: none; appearance: none;
  padding: .28rem .68rem; border: 0; border-radius: 999px;
  background: transparent; color: var(--text-2);
  font-family: inherit; font-size: .74rem; font-weight: 500; line-height: 1.5;
  white-space: nowrap; cursor: pointer;
  transition: color var(--t-fast), background-color var(--t-fast);
}
.seg button:hover { color: var(--text); }
.seg button[aria-pressed="true"] {
  background: var(--mat-4); color: var(--text);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .10), 0 1px 2px rgba(0, 0, 0, .18);
}

/* vertical chain: node / connector / node / connector … */
.chain { display: flex; flex-direction: column; }
.node {
  position: relative;
  display: flex; flex-direction: column; gap: .08rem;
  padding: .52rem .72rem .52rem .8rem;
  border-radius: var(--radius-sm);
  background: var(--mat-3); border: 1px solid var(--edge);
  min-width: 0;
}
.node b {
  font-size: .83rem; font-weight: 560; color: var(--text);
  letter-spacing: -.012em; line-height: 1.4;
}
.node small { font-size: .69rem; font-weight: 470; color: var(--text-3); line-height: 1.4; }
.node--main {
  background: linear-gradient(90deg, var(--accent-soft), var(--mat-3) 68%);
  border-color: var(--accent-line);
}
.node--main b { color: var(--accent); }
.node--main::before {
  content: ""; position: absolute; left: 0; top: 9px; bottom: 9px; width: 2px;
  border-radius: 0 2px 2px 0; background: var(--accent);
}

.conn { position: relative; display: block; height: 24px; }
/* 竖线越接近箭头越亮：读起来是「数据从上一个节点流下来」，而不是一条装饰线 */
.conn::before {
  content: ""; position: absolute; left: 50%; top: 0; bottom: 6px; width: 1px;
  margin-left: -.5px;
  background: linear-gradient(180deg, var(--edge-soft), var(--edge-lit) 45%, var(--text-4));
}
/* 箭头：实心向下三角。
 * 原写法是「旋转 45° 的方块只留右边和下边」拼出的 V 形，两个问题：
 *   1. 语义不对 —— V 形在界面里表示「展开 / 更多」，这里是数据流向；
 *   2. 1.4px 描边在深底上只剩一圈灰边，和 1px 的竖线粗细不匹配，看着像断开的。
 * 换成实心三角后指向明确，尺寸跟着线宽走（9×6），颜色 --text-2，两套主题都够清楚。 */
.conn::after {
  content: ""; position: absolute; left: 50%; bottom: 0;
  width: 0; height: 0; margin-left: -4.5px;
  border-left: 4.5px solid transparent;
  border-right: 4.5px solid transparent;
  border-top: 6px solid var(--text-2);
}

.path { display: flex; flex-direction: column; gap: .65rem; }
.path[hidden] { display: none; }
.path.is-in { animation: pathIn .4s cubic-bezier(.32, .72, 0, 1) both; }
@keyframes pathIn {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: none; }
}
.path__note {
  margin: 0; padding-left: .7rem;
  border-left: 1px solid var(--edge);
  font-size: .72rem; color: var(--text-3); line-height: 1.6;
}

.flow__foot { display: grid; grid-template-columns: repeat(3, 1fr); border-top: 1px solid var(--edge-soft); }
.flow__foot > div { padding: .6rem .85rem; border-right: 1px solid var(--edge-soft); }
.flow__foot > div:last-child { border-right: 0; }
.flow__foot b {
  display: block; font-size: .95rem; font-weight: 620; color: var(--text);
  letter-spacing: -.02em; line-height: 1.2; font-variant-numeric: tabular-nums;
}
.flow__foot b small { font-size: .68rem; font-weight: 480; color: var(--text-3); letter-spacing: 0; }
.flow__foot span { display: block; margin-top: .1rem; font-size: .7rem; color: var(--text-3); line-height: 1.45; }

@media (prefers-reduced-motion: no-preference) {
  .conn::before {
    background: linear-gradient(180deg, var(--edge-soft) 0%, var(--accent-line) 42%, var(--edge-soft) 84%);
    background-size: 100% 200%;
    animation: flowLine 3.6s linear infinite;
  }
  .chain > .conn:nth-child(4)::before { animation-delay: .6s; }
  .chain > .conn:nth-child(6)::before { animation-delay: 1.2s; }
}
@keyframes flowLine {
  from { background-position: 0 0; }
  to   { background-position: 0 44px; }
}
@media (max-width: 420px) {
  .flow__foot > div { padding: .55rem .6rem; }
  .flow__foot b { font-size: .86rem; }
}

/* ---------- stats ---------- */
.stats { display: grid; grid-template-columns: repeat(4, 1fr); border-radius: var(--radius); overflow: hidden; }
.stats > .stat { padding: clamp(1rem, .85rem + 1vw, 1.6rem) 1.15rem; border-right: 1px solid var(--edge-soft); }
.stats > .stat:last-child { border-right: 0; }
.stat__value { font-size: clamp(1.3rem, 1.05rem + 1.1vw, 1.85rem); font-weight: 620; letter-spacing: -.03em; color: var(--text); line-height: 1.1; }
.stat__unit { display: block; margin-top: .18rem; font-size: .73rem; font-weight: 480; color: var(--accent); }
.stat__label { margin-top: .42rem; font-size: .79rem; color: var(--text-2); }
@media (max-width: 880px) {
  .stats { grid-template-columns: repeat(2, 1fr); }
  .stats > .stat:nth-child(2) { border-right: 0; }
  .stats > .stat:nth-child(-n+2) { border-bottom: 1px solid var(--edge-soft); }
}
@media (max-width: 460px) {
  .stats { grid-template-columns: 1fr; }
  .stats > .stat { border-right: 0; border-bottom: 1px solid var(--edge-soft); }
  .stats > .stat:last-child { border-bottom: 0; }
}

/* ---------- cards ---------- */
.card {
  position: relative; display: flex; flex-direction: column; gap: .6rem;
  padding: clamp(1.05rem, .9rem + .9vw, 1.5rem);
  border-radius: var(--radius);
  background: var(--mat);
  border: 1px solid var(--edge);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .08),
    0 0 0 .5px rgba(0, 0, 0, .14),
    var(--diffuse-1);
  -webkit-backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  transition: border-color var(--t), background var(--t), box-shadow var(--t), transform var(--t);
  overflow: hidden;
  isolation: isolate;
}
.card::before {
  content: "";
  position: absolute; inset: 0 0 auto; height: 44%;
  border-radius: var(--radius) var(--radius) 0 0;
  background: linear-gradient(180deg, rgba(255, 255, 255, .045), transparent);
  pointer-events: none; z-index: 0;
}
.card > * { position: relative; z-index: 1; }
.card:hover { border-color: var(--edge-lit); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 0 0 .5px rgba(0, 0, 0, .16), var(--diffuse-2); }
.card--link:hover { border-color: var(--accent-line); transform: translateY(-1px); }
.card__top { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.card__title { font-size: clamp(1rem, .96rem + .4vw, 1.24rem); font-weight: 620; letter-spacing: -.024em; color: var(--text); }
.card__text { color: var(--text-2); font-size: .88rem; line-height: 1.68; }
.card__foot { margin-top: auto; padding-top: .75rem; display: flex; align-items: center; justify-content: space-between; gap: 1rem; }

.tag {
  font-size: .68rem; font-weight: 560; letter-spacing: .02em;
  padding: .15rem .45rem; border-radius: 999px;
  border: 1px solid var(--edge); color: var(--text-3); background: var(--mat-3);
}
.tag--accent { border-color: var(--accent-line); color: var(--accent); background: var(--accent-soft); }
.tag--warn { border-color: var(--warn-line); color: var(--warn); background: var(--warn-soft); }

.points { display: grid; gap: .34rem; margin-top: .15rem; }
.points li { display: flex; gap: .48rem; font-size: .85rem; color: var(--text-2); line-height: 1.6; }
.points li::before {
  content: ""; flex: none; width: 4px; height: 4px; margin-top: .58em;
  border-radius: 50%; background: var(--accent); opacity: .9;
}

/* ---------- features ---------- */
.feature { display: flex; gap: .85rem; padding-block: 1rem; border-top: 1px solid var(--edge-soft); }
.feature:last-child { border-bottom: 1px solid var(--edge-soft); }
.feature__idx { font-size: .72rem; font-weight: 600; color: var(--accent); flex: none; padding-top: .12rem; font-variant-numeric: tabular-nums; }
.feature__body h4 { font-size: .93rem; font-weight: 580; color: var(--text); }
.feature__body p { font-size: .85rem; color: var(--text-2); margin-top: .18rem; line-height: 1.64; }

/* ---------- tables ---------- */
.table-wrap {
  border-radius: var(--radius);
  background: var(--mat);
  border: 1px solid var(--edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07), 0 0 0 .5px rgba(0, 0, 0, .14), var(--diffuse-1);
  -webkit-backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  overflow: hidden;
}
.table-scroll { overflow-x: auto; }
table.spec { font-size: .86rem; min-width: 520px; }
table.spec thead th {
  text-align: left; font-size: .7rem; font-weight: 560; letter-spacing: .03em;
  text-transform: uppercase; color: var(--text-3);
  padding: .6rem 1rem; background: rgba(255, 255, 255, .028);
  border-bottom: 1px solid var(--edge-soft); white-space: nowrap;
}
table.spec tbody td { padding: .7rem 1rem; border-bottom: 1px solid var(--edge-soft); vertical-align: top; color: var(--text); }
table.spec tbody tr:last-child td { border-bottom: 0; }
table.spec tbody tr { transition: background var(--t-fast); }
table.spec tbody tr:hover { background: rgba(107, 164, 255, .06); }
table.spec td:first-child { color: var(--text-3); width: 34%; }
table.spec td:last-child { font-variant-numeric: tabular-nums; }

/* comparison matrix: keep both product columns identical */
table.spec--matrix { table-layout: fixed; }
table.spec--matrix th:first-child,
table.spec--matrix td:first-child { width: 30%; }
table.spec--matrix td { word-break: break-word; }

/* ---------- faq ---------- */
.faq { border-top: 1px solid var(--edge-soft); }
.faq details { border-bottom: 1px solid var(--edge-soft); }
.faq summary {
  list-style: none; cursor: pointer;
  display: flex; align-items: flex-start; justify-content: space-between; gap: 1.5rem;
  padding: 1rem 0; font-size: .93rem; font-weight: 520; color: var(--text);
  transition: color var(--t-fast);
}
.faq summary:hover { color: var(--accent); }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after {
  content: "+"; font-size: 1rem; line-height: 1.1; font-weight: 400;
  color: var(--text-3); transition: transform var(--t), color var(--t); flex: none;
}
.faq details[open] summary::after { transform: rotate(45deg); color: var(--accent); }
.faq__body { padding-bottom: 1rem; color: var(--text-2); font-size: .88rem; line-height: 1.72; max-width: 72ch; }

/* ---------- forms ---------- */
.form { display: grid; gap: .85rem; }
.field { display: grid; gap: .25rem; }
.field > label { font-size: .75rem; font-weight: 520; color: var(--text-2); }
.field .req { color: var(--danger); }
.input, .select, .textarea {
  width: 100%; padding: .6rem .78rem;
  font-size: .87rem; color: var(--text);
  background: var(--mat-3);
  border: 1px solid var(--edge);
  border-radius: var(--radius-sm);
  -webkit-backdrop-filter: blur(var(--blur-sm)) saturate(160%);
  backdrop-filter: blur(var(--blur-sm)) saturate(160%);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .10);
  transition: border-color var(--t-fast), background var(--t-fast), box-shadow var(--t-fast);
}
.input::placeholder, .textarea::placeholder { color: var(--text-4); }
.input:hover, .select:hover, .textarea:hover { border-color: var(--edge-lit); }
.input:focus, .select:focus, .textarea:focus {
  outline: none; border-color: var(--accent-line);
  background: rgba(107, 164, 255, .07);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .08), 0 0 0 3.5px rgba(107, 164, 255, .16);
}
.input[aria-invalid="true"], .textarea[aria-invalid="true"], .select[aria-invalid="true"] { border-color: rgba(255, 107, 107, .55); }
.select { appearance: none; cursor: pointer; }
.textarea { min-height: 112px; resize: vertical; }

/* 原生 <select> 展开后的列表。
 *
 * 弹层是浏览器自己画的，不继承我们给 .select / .chat__field select 的底色：
 * 控件看着是深色，一点开就是白底黑字，在深色面板里像贴了一块白纸。
 * 触发条件很隐蔽 —— option 的 background 计算值是 rgba(0,0,0,0)（透明），
 * 浏览器遇到透明就用默认白底；光写 color-scheme: dark 只在部分 Chromium
 * 版本对弹层生效，换个浏览器立刻打回原形。
 *
 * 所以必须给 option **显式不透明**颜色。--bg-raise 两套主题都有实色
 * （暗 #242426 / 亮 #fbfbfc），弹层跟着主题走，选中行仍交给浏览器自己的
 * 高亮画（不写 option:checked —— 部分浏览器会把选中项的底色渗到收起状态的
 * 控件上，让这个下拉框变成一块突兀的蓝色）。
 * 这条只管弹层，收起时的控件外观仍由 .select / .chat__field select 决定。 */
option { background-color: var(--bg-raise); color: var(--text); }
.err { font-size: .72rem; color: var(--danger); }
.err:empty { display: none; }
.row2 { display: grid; grid-template-columns: 1fr 1fr; gap: .85rem; }
@media (max-width: 600px) { .row2 { grid-template-columns: 1fr; } }
.form-ok {
  display: none; align-items: center; gap: .45rem;
  padding: .65rem .8rem; border-radius: var(--radius-sm);
  border: 1px solid rgba(95, 212, 196, .28);
  background: rgba(95, 212, 196, .09);
  font-size: .82rem; color: var(--text);
}
.form-ok.is-on { display: flex; }
.form-ok .icon { color: var(--cyan); }

/* ---------- license ---------- */
.license {
  border-radius: var(--radius); padding: clamp(.95rem, .85rem + .9vw, 1.4rem);
  background: var(--mat);
  border: 1px solid var(--edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07), 0 0 0 .5px rgba(0, 0, 0, .14), var(--diffuse-1);
  -webkit-backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  backdrop-filter: blur(var(--blur)) saturate(var(--sat));
}
.license__title { display: flex; align-items: center; gap: .45rem; font-weight: 540; font-size: .89rem; color: var(--text); }
.license__title .icon { color: var(--accent); }
.license__form { display: flex; gap: .5rem; margin-top: .75rem; flex-wrap: wrap; }
.license__form .input { flex: 1 1 200px; font-family: var(--mono); letter-spacing: .04em; text-transform: uppercase; }
.license__msg { margin-top: .55rem; font-size: .78rem; min-height: 1.2em; }
.license__msg.is-ok { color: var(--cyan); }
.license__msg.is-err { color: var(--danger); }
/* 自助解绑左列的三条须知。`ul` 在全站被 reset 成 list-style:none，
 * 圆点只能用伪元素画 —— 别在别处给 ul 加回 list-style，那会让页脚导航一起变样。 */
.unbind__tips { margin-top: 1.1rem; display: grid; gap: .45rem; }
.unbind__tips li { position: relative; padding-left: .95rem; font-size: .82rem; line-height: 1.62; color: var(--text-2); }
.unbind__tips li::before { content: ""; position: absolute; left: 0; top: .62em; width: 4px; height: 4px; border-radius: 50%; background: var(--accent); }
/* ---------- values ---------- */
.value { display: flex; gap: .8rem; padding: 1.05rem 0; border-top: 1px solid var(--edge-soft); }
.value:last-child { border-bottom: 1px solid var(--edge-soft); }
.value__n { font-size: .72rem; font-weight: 600; color: var(--accent); flex: none; padding-top: .12rem; }
.value h4 { font-size: .92rem; font-weight: 560; color: var(--text); }
.value p { font-size: .85rem; color: var(--text-2); margin-top: .18rem; line-height: 1.62; }

/* ---------- cta ---------- */
.cta {
  border-radius: var(--radius);
  padding: clamp(1.6rem, 1.25rem + 2.8vw, 3rem);
  text-align: center;
  background:
    radial-gradient(130% 140% at 50% -30%, rgba(107, 164, 255, .16), transparent 64%),
    var(--mat);
  border: 1px solid var(--edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .09), 0 0 0 .5px rgba(0, 0, 0, .16), var(--diffuse-3);
  -webkit-backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  position: relative; overflow: hidden;
  isolation: isolate;
}
.cta::before {
  content: "";
  position: absolute; inset: 0;
  border-radius: inherit;
  background: linear-gradient(180deg, rgba(255, 255, 255, .05), transparent 40%);
  pointer-events: none; z-index: 0;
}
.cta > * { position: relative; z-index: 1; }
.cta__actions { display: flex; flex-wrap: wrap; gap: .55rem; justify-content: center; margin-top: 1.35rem; }

/* ---------- footer ---------- */
.footer { border-top: 1px solid var(--edge-soft); padding-block: 2.4rem 1.25rem; margin-top: var(--section); }
.footer__grid { display: grid; grid-template-columns: 1.7fr 1fr 1fr 1fr; gap: 1.75rem; }
@media (max-width: 880px) { .footer__grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { .footer__grid { grid-template-columns: 1fr; } }
.footer h4 { font-size: .72rem; font-weight: 560; letter-spacing: .04em; text-transform: uppercase; color: var(--text-3); margin-bottom: .7rem; }
.footer li { margin-bottom: .4rem; }
.footer a { font-size: .84rem; color: var(--text-2); transition: color var(--t-fast); }
.footer a:hover { color: var(--accent); }
.footer__bottom {
  display: flex; flex-wrap: wrap; justify-content: space-between; gap: .9rem;
  margin-top: 2rem; padding-top: 1rem;
  border-top: 1px solid var(--edge-soft);
  font-size: .76rem; color: var(--text-3);
}

/* ---------- page hero ---------- */
.phero { padding-block: clamp(2rem, 1.5rem + 3.2vw, 3.6rem) clamp(1.6rem, 1.3rem + 1.8vw, 2.5rem); }
.crumbs {
  display: flex; gap: .4rem; align-items: center; flex-wrap: wrap;
  font-size: .74rem; color: var(--text-3); margin-bottom: .85rem;
}
.crumbs a { transition: color var(--t-fast); }
.crumbs a:hover { color: var(--accent); }
.crumbs span[aria-hidden] { opacity: .4; }

/* ---------- callouts ---------- */
.note {
  display: flex; gap: .6rem; padding: .75rem .9rem;
  border-radius: var(--radius-sm);
  border: 1px solid var(--accent-line);
  background: var(--accent-soft);
  font-size: .82rem; color: var(--text-2); line-height: 1.62;
}
.note .icon { color: var(--accent); margin-top: .12em; }
.empty {
  text-align: center; padding: clamp(1.6rem, 1.3rem + 2.6vw, 2.8rem) 1.1rem;
  border-radius: var(--radius);
  border: 1px dashed var(--edge-lit);
  background: var(--mat-3);
  color: var(--text-3); font-size: .86rem;
  -webkit-backdrop-filter: blur(var(--blur-sm));
  backdrop-filter: blur(var(--blur-sm));
}
.empty b { display: block; color: var(--text-2); margin-bottom: .25rem; font-weight: 560; font-size: .92rem; }

/* ---------- downloads list ---------- */
.filters {
  display: inline-flex; gap: 2px; padding: 3px; margin-bottom: 1rem;
  border-radius: var(--radius-sm); border: 1px solid var(--edge); background: var(--mat-3);
}
.filters button {
  padding: .34rem .75rem; border-radius: var(--radius-xs);
  font-size: .79rem; font-weight: 520; color: var(--text-3);
  transition: color var(--t-fast), background var(--t-fast);
}
.filters button[aria-pressed="true"] { background: var(--mat-4); color: var(--text); }
.filters button:hover { color: var(--text); }

.dl { display: grid; gap: .45rem; }
.dl__row {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  padding: .78rem .95rem; border-radius: var(--radius-md);
  border: 1px solid var(--edge-soft); background: var(--mat-3);
  -webkit-backdrop-filter: blur(var(--blur-sm)) saturate(160%);
  backdrop-filter: blur(var(--blur-sm)) saturate(160%);
  transition: border-color var(--t-fast), background var(--t-fast);
}
.dl__row:hover { border-color: var(--edge-lit); background: var(--mat-hover); }
.dl__row[hidden] { display: none; }
.dl__main { display: grid; gap: .15rem; min-width: 0; }
.dl__head { display: flex; align-items: center; gap: .45rem; flex-wrap: wrap; }
.dl__name { font-size: .88rem; font-weight: 540; color: var(--text); }
.dl__meta { color: var(--text-3); word-break: break-all; }
.dl__act { flex: none; }
@media (max-width: 620px) { .dl__row { flex-direction: column; align-items: stretch; } }

.price { display: flex; align-items: baseline; gap: .3rem; margin-top: .15rem; }
.price__v { font-size: 1.28rem; font-weight: 620; letter-spacing: -.026em; color: var(--text); }
.card > .price { margin-top: auto; padding-top: .55rem; }

/* 产品页首屏：两条产品线并排陈列（当前页高亮），价格与 CTA 同处一块 */
.pline { display: flex; flex-wrap: wrap; gap: .45rem; margin-top: 1.05rem; }
.pline__item {
  display: flex; flex-direction: column; gap: .06rem;
  padding: .4rem .78rem .44rem; border-radius: var(--radius-sm);
  border: 1px solid var(--edge); background: var(--mat-3);
  transition: border-color var(--t-fast), background var(--t-fast);
}
.pline__item b { font-size: .84rem; font-weight: 560; color: var(--text); letter-spacing: -.012em; }
.pline__item span { font-size: .67rem; color: var(--text-3); }
.pline__item:hover { border-color: var(--edge-lit); background: var(--mat-hover); }
.pline__item[aria-current="page"] { border-color: var(--accent-line); background: var(--accent-soft); }
.pline__item[aria-current="page"] b { color: var(--accent); }

.hero__buy { margin-top: 1.5rem; }
.hero__buy .hero__cta { margin-top: 1.1rem; }
.price--hero { margin-top: 0; gap: .42rem; }
.price--hero .price__v { font-size: 1.72rem; font-weight: 640; letter-spacing: -.03em; }

/* ==========================================================================
   v2 — rhythm, hierarchy, interaction
   ========================================================================== */

/* spacing scale: not every section deserves the same gap */
.section--tight { padding-block: clamp(1.6rem, 1.25rem + 1.8vw, 2.5rem); }
.section--flush { padding-block: 0; }
.sec-head__aside { display: grid; gap: .15rem; justify-items: end; text-align: right; max-width: 40ch; }
@media (max-width: 700px) { .sec-head__aside { justify-items: start; text-align: left; } }

/* reading measure vs data width */
.prose { max-width: 62ch; }
.split--wide { grid-template-columns: 1.12fr .88fr; }
.split--narrow { grid-template-columns: 1.25fr .75fr; }
@media (max-width: 880px) {
  .split--wide, .split--narrow { grid-template-columns: 1fr; }
}
section[id] { scroll-margin-top: calc(var(--header-h) + 52px); }

/* ---------- sticky in-page toc ---------- */
.toc {
  position: sticky; top: var(--header-h); z-index: 60;
  padding-block: .45rem;
  background: rgba(28, 28, 30, .62);
  -webkit-backdrop-filter: blur(22px) saturate(180%);
  backdrop-filter: blur(22px) saturate(180%);
  border-block: 1px solid var(--edge-soft);
}
[data-theme="light"] .toc { background: rgba(248, 248, 250, .74); }
.toc__inner {
  display: flex; align-items: center; gap: .28rem;
  overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none;
}
.toc__inner::-webkit-scrollbar { display: none; }
.toc__link {
  flex: none; padding: .28rem .62rem; border-radius: 999px;
  font-size: .77rem; font-weight: 500; color: var(--text-3);
  border: 1px solid transparent;
  transition: color var(--t-fast), background var(--t-fast), border-color var(--t-fast);
}
.toc__link:hover { color: var(--text); background: var(--mat-3); }
.toc__link.is-active { color: var(--text); background: var(--mat-4); border-color: var(--edge); }

/* ---------- key facts strip ---------- */
.keyfacts {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(165px, 1fr));
  gap: .45rem; margin-bottom: .9rem;
}
.kf {
  padding: .6rem .75rem; border-radius: var(--radius-sm);
  border: 1px solid var(--edge-soft); background: var(--mat-3);
}
.kf__k { display: block; font-size: .69rem; color: var(--text-3); }
.kf__v { display: block; margin-top: .16rem; font-size: .82rem; color: var(--text); line-height: 1.5; }

/* ---------- table toolbar + diff switch ---------- */
.toolbar {
  display: flex; align-items: center; justify-content: space-between;
  gap: .9rem; flex-wrap: wrap; margin-bottom: .75rem;
}
.toolbar__meta { font-size: .75rem; color: var(--text-3); font-variant-numeric: tabular-nums; }
.switch {
  display: inline-flex; align-items: center; gap: .5rem;
  font-size: .79rem; color: var(--text-2); cursor: pointer;
}
.switch:hover { color: var(--text); }
.switch__track {
  position: relative; width: 32px; height: 19px; border-radius: 999px;
  background: var(--mat-4); border: 1px solid var(--edge);
  transition: background var(--t-fast), border-color var(--t-fast);
}
.switch__track::after {
  content: ""; position: absolute; top: 2px; left: 2px;
  width: 13px; height: 13px; border-radius: 50%;
  background: rgba(255, 255, 255, .82);
  transition: transform var(--t);
}
.switch[aria-pressed="true"] .switch__track { background: var(--accent-2); border-color: var(--accent-line); }
.switch[aria-pressed="true"] .switch__track::after { transform: translateX(13px); background: #fff; }

/* keyword filter for the matrix */
.search { position: relative; display: inline-flex; align-items: center; width: 214px; max-width: 100%; }
.search .icon {
  position: absolute; left: .55rem; width: 13px; height: 13px;
  color: var(--text-3); pointer-events: none;
}
.search__input {
  width: 100%; padding: .36rem .7rem .36rem 1.75rem;
  font-size: .78rem; color: var(--text);
  background: var(--mat-3); border: 1px solid var(--edge); border-radius: var(--radius-xs);
  transition: border-color var(--t-fast), background var(--t-fast), box-shadow var(--t-fast);
}
.search__input::placeholder { color: var(--text-4); }
.search__input:hover { border-color: var(--edge-lit); }
.search__input:focus {
  outline: none; border-color: var(--accent-line);
  background: rgba(107, 164, 255, .07);
  box-shadow: 0 0 0 3px rgba(107, 164, 255, .14);
}
.search__input::-webkit-search-cancel-button { -webkit-appearance: none; }

/* keep the parameter name visible while the matrix scrolls sideways */
@media (max-width: 760px) {
  table.spec th:first-child,
  table.spec td:first-child {
    position: sticky; left: 0; z-index: 1;
    background: #232325; width: 38%;
  }
  [data-theme="light"] table.spec th:first-child,
  [data-theme="light"] table.spec td:first-child { background: #f7f7f9; }
}

/* ---------- download rows: expandable detail ---------- */
.dl__row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; }
.dl__more { grid-column: 1 / -1; }
.dl__more summary {
  list-style: none; cursor: pointer; width: max-content;
  display: inline-flex; align-items: center; gap: .3rem;
  padding-block: .1rem; font-size: .71rem; color: var(--text-3);
  transition: color var(--t-fast);
}
.dl__more summary::-webkit-details-marker { display: none; }
.dl__more summary::after { content: "＋"; font-size: .7rem; transition: transform var(--t); }
.dl__more summary:hover { color: var(--accent); }
.dl__more[open] summary { color: var(--text-2); }
.dl__more[open] summary::after { content: "－"; }
.dl__panel {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: .45rem .9rem; margin-top: .5rem; padding: .6rem .75rem;
  border-radius: var(--radius-sm); border: 1px solid var(--edge-soft); background: var(--mat-3);
}
.dl__kv { display: grid; gap: .12rem; min-width: 0; }
.dl__kv .k { font-size: .67rem; color: var(--text-3); }
.dl__kv .v { font-size: .76rem; color: var(--text-2); font-family: var(--mono); word-break: break-all; }
/* 使用方法占满整行（不进 auto-fit 的窄列），后台写的换行原样保留 */
.dl__usage {
  grid-column: 1 / -1; display: grid; gap: .18rem;
  margin-top: .1rem; padding-top: .5rem; border-top: 1px solid var(--edge-soft);
}
.dl__usage .k { font-size: .67rem; color: var(--text-3); }
.dl__usage .v {
  margin: 0; font-size: .78rem; line-height: 1.62; color: var(--text-2);
  white-space: pre-wrap; word-break: break-word;
}
@media (max-width: 620px) {
  .dl__row { grid-template-columns: 1fr; }
  .dl__more { order: 1; }
  .dl__act { order: 2; }
  .dl__act .btn { width: 100%; }
}

/* ---------- picker blocks: RTL 驱动获取 / DMA 固件获取 ----------
   左列说明加字段，右列一张状态卡。卡片内容全部由 main.js 重画 ——
   构建期只留骨架，免得每传一个文件就得重新构建整站。 */
.pick {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, .82fr);
  gap: clamp(1.1rem, .7rem + 2.4vw, 2.8rem); align-items: start;
}
.pick__field { display: grid; gap: .4rem; margin-top: 1.05rem; }
.pick__k { font-size: .71rem; color: var(--text-3); letter-spacing: .02em; }
/* 型号有四个，窄屏允许换行 —— 但换行后 999px 药丸会显得像几个孤立的圆角块， */
/* 所以区块内的 segmented 用统一的 12px 圆角。 */
.pick .seg { flex-wrap: wrap; border-radius: 12px; justify-self: start; width: fit-content; }
.pick .seg button { border-radius: 9px; font-size: .76rem; font-family: var(--mono); }
.pick .seg button[data-channel] { font-family: inherit; }

/* 固件区那两行是「事实」不是「选项」：不可点的胶囊，点不动就别长得像按钮 */
.pick__chips { display: flex; flex-wrap: wrap; gap: .35rem; }
.pick__chip {
  display: inline-flex; align-items: center; min-height: 1.85rem; padding-inline: .6rem;
  border-radius: 9px; border: 1px solid var(--edge-soft); background: var(--mat-3);
  font-size: .74rem; color: var(--text-2);
}
.pick__chip.mono { font-family: var(--mono); letter-spacing: -.01em; }

.pick__out { display: grid; gap: .45rem; align-content: start; }
.pick__card {
  display: grid; gap: .5rem;
  padding: clamp(.9rem, .8rem + .4vw, 1.15rem);
  border-radius: var(--radius-md); border: 1px solid var(--edge-soft);
  background: var(--mat-3);
  -webkit-backdrop-filter: blur(var(--blur-sm)) saturate(160%);
  backdrop-filter: blur(var(--blur-sm)) saturate(160%);
}
.pick__top { display: flex; align-items: center; justify-content: space-between; gap: .55rem; flex-wrap: wrap; }
.pick__name { font-size: .95rem; font-weight: 560; letter-spacing: -.012em; color: var(--text); }
.pick__note { color: var(--text-3); line-height: 1.6; margin: 0; }
.pick__act { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }
.pick__act .btn { width: 100%; }
@media (min-width: 520px) { .pick__act .btn { width: auto; } }
.pick__hint { margin-top: 1.15rem; line-height: 1.6; }
.pick__steps { border-top: 0; padding: 0 .2rem 0 .95rem; }
.pick__steps summary { padding: .35rem .1rem; }
.pick__steps-text { margin: 0; white-space: pre-wrap; }

@media (max-width: 880px) {
  .pick { grid-template-columns: 1fr; }
}

/* ---------- feature rows: left indicator on hover ---------- */
.feature { position: relative; transition: background var(--t-fast); }
.feature::before {
  content: ""; position: absolute; left: -.7rem; top: .85rem; bottom: .85rem;
  width: 2px; border-radius: 2px; background: transparent;
  transition: background var(--t-fast);
}
.feature:hover::before { background: var(--accent); }

/* ---------- product selector (shop) ---------- */
.helper {
  border-radius: var(--radius); padding: clamp(1.05rem, .9rem + 1vw, 1.5rem);
  background: var(--mat); border: 1px solid var(--edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07), 0 0 0 .5px rgba(0, 0, 0, .14), var(--diffuse-1);
  -webkit-backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  backdrop-filter: blur(var(--blur)) saturate(var(--sat));
}
.helper__row {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  padding-block: .72rem; border-top: 1px solid var(--edge-soft);
}
.helper__row:first-of-type { border-top: 0; }
.helper__q { font-size: .87rem; color: var(--text); }
.helper__out {
  margin-top: .9rem; padding: .85rem .95rem;
  border-radius: var(--radius-sm); border: 1px solid var(--accent-line);
  background: var(--accent-soft);
}
.helper__res b { display: block; font-size: .9rem; color: var(--text); font-weight: 600; }
.helper__res p { margin-top: .2rem; font-size: .82rem; color: var(--text-2); line-height: 1.6; }
.helper__res .btn { margin-top: .65rem; }
.helper__hint { margin-top: .6rem; font-size: .72rem; color: var(--text-3); }

/* ---------- contact meta list ---------- */
.meta-list {
  border-radius: var(--radius-sm); border: 1px solid var(--edge-soft);
  background: var(--mat-3); overflow: hidden;
}
.meta-list__row {
  display: flex; align-items: baseline; justify-content: space-between; gap: 1rem;
  padding: .55rem .75rem; border-bottom: 1px solid var(--edge-soft);
}
.meta-list__row:last-child { border-bottom: 0; }
.meta-list__k { flex: none; font-size: .74rem; color: var(--text-3); }
.meta-list__v { font-size: .78rem; color: var(--text-2); text-align: right; }

/* ---------- character counter ---------- */
.counter { font-size: .7rem; color: var(--text-3); font-variant-numeric: tabular-nums; }
.counter.is-ok { color: var(--cyan); }
.field__foot { display: flex; justify-content: space-between; align-items: center; gap: .6rem; }

/* ---------- back to top ---------- */
.to-top {
  position: fixed; right: clamp(1rem, 2vw, 1.6rem); bottom: clamp(1rem, 2vw, 1.6rem);
  z-index: 90; width: 36px; height: 36px; border-radius: 50%;
  display: grid; place-items: center;
  color: var(--text-2);
  background: var(--mat-2); border: 1px solid var(--edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08), var(--diffuse-1);
  -webkit-backdrop-filter: blur(18px) saturate(170%);
  backdrop-filter: blur(18px) saturate(170%);
  opacity: 0; transform: translateY(8px) scale(.94); pointer-events: none;
  transition: opacity var(--t), transform var(--t), color var(--t-fast), background var(--t-fast), border-color var(--t-fast);
}
.to-top.is-on { opacity: 1; transform: none; pointer-events: auto; }
.to-top:hover { color: var(--text); background: var(--mat-hover); border-color: var(--edge-lit); }
.to-top .icon { width: 15px; height: 15px; }

/* ---------- utilities ---------- */
.mt-1 { margin-top: .45rem; } .mt-2 { margin-top: .9rem; } .mt-3 { margin-top: 1.4rem; } .mt-4 { margin-top: 2.1rem; }
.mb-2 { margin-bottom: .9rem; } .mb-3 { margin-bottom: 1.4rem; }
.stack { display: grid; gap: .85rem; }
/* 带 class 的元素一旦自己写了 display，UA 的 [hidden]{display:none} 就被覆盖掉了。
 * 站内大量用 el.hidden = true 做显隐，必须按 !important 兜住。 */
[hidden] { display: none !important; }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.skip {
  position: absolute; left: 1rem; top: -70px; z-index: 200;
  padding: .55rem .95rem; border-radius: var(--radius-sm);
  background: var(--btn-a); color: #fff; font-weight: 560; font-size: .84rem;
  transition: top var(--t);
}
.skip:focus { top: .75rem; }

/* 交替底色块上下都要有边界。只在上沿画线（.section--line）的话，
 * 块底与下一段之间是一道没有过渡的色差断口 —— 同一页其它区块都有线，
 * 只有它下面没有，看起来就是「这条横线漏了」。 */
.section--alt { background: linear-gradient(180deg, rgba(255, 255, 255, .014), transparent 72%); border-bottom: 1px solid var(--edge-soft); }
.section--line { border-top: 1px solid var(--edge-soft); }

[data-reveal] { opacity: 0; transform: translateY(10px); transition: opacity .6s cubic-bezier(.32, .72, 0, 1), transform .6s cubic-bezier(.32, .72, 0, 1); }
[data-reveal].is-in { opacity: 1; transform: none; }

body.is-bare .footer { display: none; }
.is-bare { min-height: 100dvh; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
  [data-reveal] { opacity: 1; transform: none; }
  html { scroll-behavior: auto; }
}

/* light-mode rim adjustment: inner highlight becomes white, edges dark */
[data-theme="light"] .glass,
[data-theme="light"] .card,
[data-theme="light"] .table-wrap,
[data-theme="light"] .license,
[data-theme="light"] .cta {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .98),
    inset 0 -1px 0 rgba(0, 0, 0, .04),
    0 0 0 .5px rgba(0, 0, 0, .06),
    var(--diffuse-1);
}
[data-theme="light"] .card::before,
[data-theme="light"] .glass::before { background: linear-gradient(180deg, rgba(255, 255, 255, .7), transparent); }
[data-theme="light"] .header { border-bottom-color: var(--edge-soft); }

/* ==========================================================================
   对话窗口 —— 联系页内嵌 + 全站悬浮
   同一段结构两处使用，差异只由 [data-mode] 与容器宽度决定。
   ========================================================================== */
.chat {
  display: flex; flex-direction: column; min-height: 0;
  background: var(--mat-2); border: 1px solid var(--edge);
  border-radius: var(--radius); overflow: hidden;
  -webkit-backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  box-shadow: inset 0 1px 0 var(--edge-lit), var(--diffuse-2);
}
.chat-inline .chat { height: clamp(420px, 58vh, 540px); }

.chat__head {
  flex: none; display: flex; align-items: center; gap: .65rem;
  padding: .7rem .9rem; border-bottom: 1px solid var(--edge-soft);
  background: linear-gradient(180deg, var(--mat-3), transparent);
}
.chat__pip {
  flex: none; width: 8px; height: 8px; border-radius: 50%;
  background: var(--cyan); box-shadow: 0 0 0 4px rgba(95, 212, 196, .12);
}
.chat__pip.is-off { background: var(--text-4); box-shadow: none; }
.chat__id { display: grid; gap: .1rem; min-width: 0; }
.chat__id b { font-size: .9rem; font-weight: 600; letter-spacing: -.01em; }
.chat__id small { font-size: .72rem; color: var(--text-3); }
.chat__close {
  margin-left: auto; flex: none; width: 28px; height: 28px; border-radius: 50%;
  display: grid; place-items: center; cursor: pointer;
  background: transparent; border: 1px solid transparent; color: var(--text-3);
  transition: color var(--t-fast), background var(--t-fast), border-color var(--t-fast);
}
.chat__close:hover { color: var(--text); background: var(--mat-hover); border-color: var(--edge); }
.chat__close .icon { width: 14px; height: 14px; }

.chat__intro { flex: none; display: grid; gap: .55rem; padding: .8rem .9rem .2rem; }
.chat.is-started .chat__intro { display: none; }
.chat__fields { display: grid; grid-template-columns: 1fr 1fr; gap: .55rem; }
.chat__field { display: grid; gap: .22rem; font-size: .72rem; color: var(--text-3); }
.chat__field i { font-style: normal; color: var(--text-3); }
.chat__field--wide { padding-bottom: .3rem; }
.chat__field input, .chat__field select {
  width: 100%; padding: .42rem .55rem; font-size: .82rem;
  background: var(--mat-3); color: var(--text);
  border: 1px solid var(--edge); border-radius: var(--radius-xs);
  appearance: none;
}
.chat__field select { background-image: none; cursor: pointer; }
.chat__field input:focus, .chat__field select:focus {
  outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft);
}

.chat__log {
  flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain;
  display: flex; flex-direction: column; gap: .45rem;
  padding: .8rem .9rem; scrollbar-width: thin;
}
.chat__empty { margin: auto 0; text-align: center; color: var(--text-3); font-size: .78rem; line-height: 1.65; padding: 0 1rem; }
.chat__day { align-self: center; font-size: .68rem; color: var(--text-4); padding: .1rem .45rem; }
.chat__msg { max-width: 84%; display: grid; gap: .16rem; }
.chat__msg-b {
  padding: .48rem .7rem; border-radius: 13px; font-size: .85rem; line-height: 1.62;
  white-space: pre-wrap; word-break: break-word;
  background: var(--mat-4); border: 1px solid var(--edge);
}
.chat__msg-t { font-size: .64rem; color: var(--text-4); padding: 0 .25rem; }
.chat__msg--me { align-self: flex-end; }
.chat__msg--me .chat__msg-b { background: var(--btn-a); border-color: transparent; color: #fff; }
.chat__msg--me .chat__msg-t { text-align: right; }
.chat__msg--them { align-self: flex-start; }
.chat__msg.is-pending .chat__msg-b { opacity: .62; }

.chat__form {
  flex: none; display: flex; align-items: flex-end; gap: .5rem;
  padding: .6rem .7rem .7rem; border-top: 1px solid var(--edge-soft);
}
.chat__input {
  flex: 1; min-width: 0; resize: none; max-height: 132px;
  padding: .55rem .7rem; font-size: .85rem; line-height: 1.55;
  background: var(--mat-3); color: var(--text);
  border: 1px solid var(--edge); border-radius: 13px;
}
.chat__input::placeholder { color: var(--text-4); }
.chat__input:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
/* 服务不可用时输入框会被禁用，必须看得出来「现在打不了字」 */
.chat__input:disabled { opacity: .55; cursor: not-allowed; }
.chat__send {
  flex: none; width: 38px; height: 38px; border-radius: 50%; display: grid; place-items: center;
  background: var(--btn-a); color: #fff; border: 0; cursor: pointer;
  transition: background var(--t-fast), transform var(--t-fast), opacity var(--t-fast);
}
.chat__send:hover { background: var(--btn-b); }
.chat__send:active { transform: scale(.94); }
.chat__send:disabled { opacity: .5; cursor: default; }
.chat__send .icon { width: 16px; height: 16px; stroke-width: 2.1; fill: none; stroke: currentColor; }
.chat__status {
  flex: none; font-size: .72rem; color: var(--text-3);
  padding: 0 .9rem; max-height: 0; overflow: hidden;
  transition: max-height var(--t), padding var(--t);
}
.chat__status.is-on { max-height: 4em; padding: 0 .9rem .6rem; }
.chat__status.is-err { color: var(--danger); }

/* ---------- 悬浮入口 ---------- */
.chat-launch {
  position: fixed; right: clamp(1rem, 2vw, 1.6rem); bottom: clamp(1rem, 2vw, 1.6rem);
  z-index: 121; display: inline-flex; align-items: center; gap: .45rem;
  padding: .66rem 1rem .66rem .82rem; border-radius: 999px;
  background: var(--btn-a); color: #fff; border: 0; cursor: pointer;
  font-size: .84rem; font-weight: 560; letter-spacing: -.01em;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .22), 0 12px 30px -12px rgba(58, 111, 216, .85), var(--diffuse-1);
  transition: background var(--t-fast), transform var(--t-fast);
}
.chat-launch:hover { background: var(--btn-b); }
.chat-launch:active { transform: scale(.97); }
.chat-launch__icon { width: 16px; height: 16px; stroke-width: 2; }
.chat-launch__dot {
  position: absolute; top: 2px; right: 4px; width: 9px; height: 9px; border-radius: 50%;
  background: var(--danger); box-shadow: 0 0 0 2px var(--bg);
}

.chat-dock {
  position: fixed; right: clamp(1rem, 2vw, 1.6rem); z-index: 120;
  bottom: clamp(1rem, 2vw, 1.6rem);
  width: min(392px, calc(100vw - 2rem));
  animation: chat-in .2s cubic-bezier(.32, .72, 0, 1);
}
.chat-dock[hidden] { display: none; }
.chat-dock .chat { height: min(560px, calc(100dvh - 9rem)); box-shadow: inset 0 1px 0 var(--edge-lit), var(--diffuse-3); }
@keyframes chat-in {
  from { opacity: 0; transform: translateY(10px) scale(.985); }
  to { opacity: 1; transform: none; }
}

/* 面板打开时收起悬浮球：手机上它会正好压在发送按钮上 */
.is-chat-open .chat-launch { display: none; }

/* 回到顶部按钮要让开悬浮入口 */
.has-chat .to-top { bottom: calc(clamp(1rem, 2vw, 1.6rem) + 54px); }

@media (max-width: 640px) {
  .chat-dock {
    inset: 0; width: auto; bottom: 0;
    animation: none;
  }
  /* 全屏时面板背后就是页面本身：半透明 + 毛玻璃会把正文糊进来，看起来像没做完 */
  .chat-dock .chat {
    height: 100dvh; border-radius: 0; border: 0;
    background: var(--bg);
    -webkit-backdrop-filter: none; backdrop-filter: none;
    box-shadow: none;
  }
  .chat-dock .chat__head { padding-top: max(.7rem, env(safe-area-inset-top)); }
  .chat-dock .chat__form { padding-bottom: max(.7rem, env(safe-area-inset-bottom)); }
  .chat-launch { padding: .7rem .82rem; }
  .chat-launch__label { display: none; }
  .chat-launch__icon { width: 18px; height: 18px; }
  .chat-inline .chat { height: clamp(400px, 60vh, 500px); }
  .chat__fields { grid-template-columns: 1fr; }
  body.is-chat-open { overflow: hidden; }
}

/* ---------- 功能开关占位（商城关闭态） ----------
 * 透明包裹层：只为让 JS 能一次性显隐整页正文，不参与布局，
 * 所以用 display:contents 而不是 block（否则会多一层盒子影响 grid/间距）。
 * 注意 [hidden] 的全局 !important 规则会盖掉这里的 display。 */
.shop-body { display: contents; }
