* { margin:0; padding:0; box-sizing:border-box; }
/* hidden 必须压过组件自己的 display:flex/grid —— 否则 JS 设 el.hidden=true 后元素仍然显示
   （历史 bug：测级页两组操作按钮同时出现，把卡片整体撑高、看起来「偏移」） */
[hidden] { display:none !important; }
/* 楷体 Webfont：FandolKai（传统楷体，GPL + font exception）子集，覆盖大纲词/句/UI 用字。
   unicode-range 只接管中文，拉丁字母和拼音仍走系统无衬线字体；缺字自动回退到 Kaiti/宋体。 */
@font-face {
  font-family: "BanpuKai";
  src: url("/public/fonts/BanpuKai-1.woff2?v=20261109c") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+3000-303F, U+FF00-FFEF, U+2010-2027, U+00B7, U+B7, U+2013-2014, U+2018-2019, U+201B-201F, U+2026-2027, U+3000-3003, U+3008-3011, U+3014-301F, U+3030, U+303E-303F, U+4E00, U+4E03, U+4E07-4E0B, U+4E0D, U+4E1C, U+4E24, U+4E2A, U+4E2D, U+4E3A, U+4E48, U+4E50, U+4E5D, U+4E5F-4E60, U+4E66, U+4E70, U+4E86, U+4E8B-4E8C, U+4E94, U+4E9B, U+4EA4, U+4EAE, U+4EBA, U+4EC0, U+4ECA-4ECB, U+4ECE, U+4ED6, U+4EE5, U+4EEC, U+4EF6, U+4F11, U+4F1A, U+4F46, U+4F4D, U+4F4F, U+4F53, U+4F5C, U+4F60, U+4FBF, U+5019, U+505A, U+513F, U+5143, U+5148, U+516B-516D, U+5173-5174, U+518D, U+5199, U+51B7, U+51C6, U+51E0, U+51FA, U+5206, U+522B, U+5230, U+524D, U+52A8, U+5305, U+533B, U+5341, U+5343, U+5348, U+534A, U+5356, U+53BB, U+53CB, U+53E3, U+53EA-53EB, U+53EF, U+53F3, U+53F7-53F8, U+5403, U+540C-540E, U+5417, U+5427, U+542C, U+544A, U+5462, U+5468, U+548C, U+5496, U+54E5, U+54EA, U+5531, U+5546, U+554A, U+5561, U+5582, U+559C-559D, U+56DB, U+56DE, U+56E0, U+56FD, U+5728, U+5730, U+573A, U+574F-5750, U+5757, U+58EB, U+5907, U+5916, U+591A, U+5927, U+5929-592B, U+5934, U+5973, U+5976, U+5979, U+597D, U+5988, U+59B9, U+59BB, U+59CB, U+59D0, U+59D3, U+5B50, U+5B57, U+5B66, U+5B69, U+5B83, U+5B8C, U+5B9C, U+5BA2, U+5BA4, U+5BB6, U+5BF9, U+5C0F, U+5C11, U+5C31, U+5C81, U+5DE5-5DE6, U+5DF1-5DF2, U+5E02, U+5E08, U+5E0C, U+5E2E, U+5E38, U+5E74, U+5E8A, U+5E97, U+5F00, U+5F1F, U+5F71, U+5F80, U+5F88, U+5F97, U+5FD8-5FD9, U+5FEB, U+600E, U+601D, U+606F, U+60A8, U+60C5, U+60F3, U+610F, U+6162, U+61C2, U+6211, U+623F-6240, U+624B, U+6253, U+627E, U+62FF, U+6559, U+6587, U+65B0, U+65C1, U+65C5, U+65E5, U+65E9, U+65F6, U+660E, U+661F, U+6628, U+662F, U+665A, U+6674, U+6700, U+6708-6709, U+670B, U+670D, U+671B, U+671F, U+672C, U+673A, U+6761, U+6765, U+676F, U+679C, U+6821, U+6837, U+684C, U+6905, U+697C, U+6B21-6B22, U+6B4C, U+6B63, U+6B65, U+6BCF, U+6BD4, U+6C14, U+6C34, U+6C49, U+6CA1, U+6CF3, U+6D17, U+6E38, U+6F02, U+706B, U+70B9, U+70ED, U+7136, U+7231, U+7237-7238, U+725B, U+72D7, U+732B, U+73A9, U+73B0, U+73ED, U+7403, U+751F, U+7535, U+7537, U+753B, U+7559, U+75BC, U+75C5, U+767D-767E, U+7684, U+770B, U+771F, U+773C, U+7740, U+775B, U+7761, U+77E5, U+7968, U+79BB, U+79DF, U+7A7F, U+7AD9, U+7B11, U+7B14, U+7B2C, U+7B49, U+7BEE, U+7C73, U+7CFB, U+7D2F, U+7EA2, U+7ECD, U+7ECF, U+7ED9, U+7EFF, U+7F51, U+8001, U+8003, U+8089, U+80FD, U+8111, U+81EA, U+8212, U+821E, U+8272, U+82B1, U+82F9, U+8336, U+836F, U+83DC, U+867D, U+86CB, U+8863, U+8868, U+88E4, U+897F, U+8981, U+89C1, U+89C6, U+89C9, U+8BA4, U+8BA9, U+8BB0, U+8BC6, U+8BC9, U+8BCD, U+8BD5, U+8BDD, U+8BED, U+8BF4, U+8BF7, U+8BFB, U+8BFE, U+8C01, U+8C22, U+8D35, U+8D70, U+8D77, U+8D85, U+8DB3, U+8DD1, U+8DDF, U+8DEF, U+8DF3, U+8E22, U+8EAB, U+8F66, U+8FB9, U+8FC7, U+8FD0-8FD1, U+8FD8-8FD9, U+8FDB-8FDC, U+9001, U+9053, U+90A3, U+90FD, U+9152, U+91CC, U+949F, U+94B1, U+94C1, U+9519, U+957F, U+95E8, U+95EE, U+95F4, U+9634, U+9662, U+96E8, U+96EA, U+96F6, U+975E, U+9762, U+9898, U+989C, U+98DE, U+996D, U+997A, U+9986, U+9AD8, U+9C7C, U+9E1F, U+9E21, U+9ED1, U+FE4F;
}
@font-face {
  font-family: "BanpuKai";
  src: url("/public/fonts/BanpuKai-2.woff2?v=20261109c") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+4E14, U+4E16, U+4E1A, U+4E22, U+4E3B, U+4E45, U+4E4E, U+4E8E, U+4F1E, U+4FE1, U+501F, U+5047, U+5065, U+50CF, U+5168, U+5171, U+5176, U+5178, U+517B, U+5192, U+51AC, U+51B0, U+51B3, U+51C0, U+51C9, U+51CC, U+521A, U+521D, U+522E, U+5237, U+523B, U+529B, U+529E, U+52A0-52A1, U+52A9-52AA, U+52FA, U+5316-5317, U+533A, U+5355, U+5357, U+5361, U+536B, U+5386, U+53C2, U+53C8, U+53CC, U+53D1, U+53D4, U+53D7-53D8, U+53E5, U+53F2, U+5408, U+5411, U+5458, U+54B1, U+54CD, U+54ED, U+5564, U+5634, U+56ED, U+56FE, U+575A, U+57CE, U+5883, U+58F0, U+5904, U+590D, U+590F, U+5947, U+5982, U+59E8, U+5A5A, U+5B63, U+5B89, U+5B9A, U+5B9E, U+5BB3, U+5BB9, U+5BBE, U+5C01, U+5C1D, U+5C42, U+5C45, U+5C4B, U+5C55, U+5C71, U+5DEE, U+5E26, U+5E72-5E73, U+5E94, U+5EB7, U+5F20, U+5F53, U+5FC3, U+5FC5, U+6015, U+6025, U+602A, U+603B, U+60EF, U+611F, U+613F, U+620F-6210, U+6216, U+624D, U+626B, U+628A, U+62A4-62A5, U+62C5, U+62CD, U+62E9, U+6301, U+633A, U+6362, U+636E, U+63A5, U+63D0, U+642C, U+6536, U+653E, U+6545, U+6570, U+6599, U+65A4, U+65B9, U+65E7, U+6613, U+6625, U+66F4, U+672B, U+6735, U+674E, U+675F, U+677F, U+6781, U+67E5, U+6811, U+6839, U+68AF, U+68C0, U+695A, U+6982, U+6BB5, U+6BDB, U+6C42, U+6C7D, U+6C99, U+6CB3, U+6CC9, U+6CD5, U+6CE8, U+6D3B, U+6D77, U+6E05, U+6E34, U+6EE1, U+6F14, U+6FA1, U+6FC0, U+706F, U+70BC, U+70E7, U+7167, U+718A, U+722C, U+7247, U+7259, U+7269, U+7279, U+73AF, U+7406, U+74DC, U+74F6, U+751C, U+7528, U+754C, U+7626, U+76D8, U+76EE, U+76F4, U+76F8, U+77ED-77EE, U+77FF, U+7801, U+7897, U+793C, U+79CB, U+79CD, U+7A7A, U+7A81, U+7B54, U+7B77, U+7B80, U+7B97, U+7BB1, U+7CD5-7CD6, U+7EA7, U+7EB8, U+7EC3, U+7EC8, U+7ED3, U+7EE9, U+7F8A, U+7FBD, U+8005, U+800C, U+8033, U+804A, U+806A, U+80B2, U+80D6, U+810F, U+811A, U+8138, U+817F, U+822C, U+8239, U+8282, U+8349, U+84DD, U+8549, U+884C, U+8857, U+886B-886C, U+88AB, U+88D9, U+89D2, U+89E3, U+8A00, U+8BAE, U+8BB2, U+8BE5, U+8C03, U+8D5B, U+8D8A, U+8DA3, U+8F7B, U+8F83, U+8F86, U+8FCE, U+8FDF, U+9002, U+9009, U+9047, U+904D, U+90AE, U+90BB, U+91CD, U+94C5, U+94F6, U+953B, U+95FB, U+9633, U+963F, U+9644, U+9664, U+96BE, U+9700, U+9759, U+978B, U+97F3, U+9875, U+987B, U+987E, U+98CE, U+996E, U+9971, U+997F, U+9999, U+9A6C, U+9A91, U+9C9C, U+9EC4;
}
@font-face {
  font-family: "BanpuKai";
  src: url("/public/fonts/BanpuKai-3.woff2?v=20261109c") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+A, U+21, U+28-29, U+2C, U+2E, U+3A-3C, U+3E-3F, U+5B, U+5D, U+7B, U+7D, U+2022, U+353E, U+4E01, U+4E0E, U+4E10-4E11, U+4E13, U+4E18-4E19, U+4E1B, U+4E1D, U+4E25, U+4E27-4E28, U+4E2B-4E2C, U+4E30, U+4E32, U+4E34, U+4E36-4E39, U+4E3D-4E3F, U+4E43, U+4E49, U+4E4B-4E4C, U+4E4F, U+4E52-4E53, U+4E56, U+4E58-4E59, U+4E5B, U+4E5E, U+4E61, U+4E71, U+4E73, U+4E85, U+4E88-4E89, U+4E8F, U+4E91-4E92, U+4E95, U+4E9A, U+4EA0-4EA1, U+4EA6-4EA7, U+4EA9, U+4EAB-4EAD, U+4EB2, U+4EBB, U+4EBF, U+4EC1, U+4EC5-4EC7, U+4ECD, U+4ED3-4ED4, U+4ED7-4ED9, U+4EE3-4EE4, U+4EEA, U+4EF0, U+4EF2, U+4EF7, U+4EFB, U+4EFD, U+4EFF, U+4F01, U+4F0A, U+4F0D, U+4F0F-4F10, U+4F17-4F19, U+4F1F-4F20, U+4F24, U+4F26, U+4F2A, U+4F2F-4F30, U+4F34, U+4F38, U+4F3A, U+4F3C-4F3D, U+4F4E, U+4F51, U+4F55, U+4F59, U+4F5B, U+4F63, U+4F69, U+4F6C, U+4F73, U+4F7F, U+4F83-4F84, U+4F88, U+4F8B, U+4F8D, U+4F9B, U+4F9D, U+4FA0, U+4FA3, U+4FA5-4FA8, U+4FAE, U+4FB5, U+4FC3-4FC4, U+4FCA, U+4FCF, U+4FD7-4FD8, U+4FDD, U+4FE9, U+4FED-4FEF, U+4FF1, U+500D, U+5012, U+5014, U+5018, U+501A, U+5021, U+5026, U+503A, U+503C, U+503E, U+504F, U+505C, U+5076-5077, U+507F, U+5085, U+508D, U+50A8, U+50AC, U+50B2, U+50BB, U+50DA, U+50E7, U+50F5, U+50FB, U+5140-5141, U+5144-5146, U+5149, U+514B, U+514D, U+5151, U+5154, U+515A, U+515C, U+5162, U+5165, U+5170, U+5175, U+5177, U+5179, U+517C-517D, U+5182, U+5185, U+518C, U+5196-5197, U+519B-519C, U+51A0, U+51A4, U+51AB, U+51B2, U+51B5-51B6, U+51BB, U+51C4, U+51CB, U+51CF, U+51D1, U+51DD, U+51E1, U+51E4, U+51ED, U+51EF-51F0, U+51F3, U+51F5-51F6, U+51F8-51F9, U+51FB, U+51FD, U+51FF-5203, U+5207, U+520A, U+5211-5212, U+5217-5219, U+521B, U+5220, U+5224, U+5228-5229, U+5236, U+5238-523A, U+5242-5243, U+524A, U+5251, U+5254, U+5256, U+5265, U+5267, U+5269-526A, U+526F, U+5272, U+5288, U+529D, U+529F, U+52A3, U+52AB, U+52B1-52B3, U+52BF, U+52C3, U+52C7, U+52C9, U+52CB, U+52D2, U+52D8, U+52DF, U+52E4, U+52F9, U+52FE-5300, U+5306, U+5315, U+5319-531A, U+5320, U+532A, U+5338-5339, U+533F, U+5347, U+5349, U+534E-534F, U+5351, U+5353, U+535A, U+535C, U+5360, U+5362, U+5364, U+5366-5367, U+5369, U+5370-5371, U+5373-5375, U+5377-5378, U+5382, U+5384-5385, U+5389, U+538B-538C, U+5395, U+5398, U+539A, U+539F, U+53A2, U+53A6, U+53A8, U+53B6, U+53BF, U+53C9-53CA, U+53CD, U+53D6, U+53D9, U+53DB, U+53E0, U+53E4, U+53E6, U+53E8, U+53EC-53EE, U+53F0, U+53F6, U+53F9, U+53FC, U+5401, U+5404, U+5409-540A, U+540F-5410, U+5413, U+541B, U+541D-541F, U+5426, U+5428-5429, U+542B, U+542D, U+542F, U+5435, U+5438-5439, U+543B-543C, U+5440, U+5446, U+5448, U+5450, U+5455, U+545B-545C, U+5473, U+5475, U+547B-547D, U+5480, U+5490, U+5495, U+5499, U+54A6-54A8, U+54AC, U+54AF, U+54B3, U+54B8, U+54BD, U+54C0-54C1, U+54C4, U+54C6-54C8, U+54CE, U+54D1, U+54D7, U+54E6, U+54E8, U+54F2, U+54FA, U+54FC-54FD, U+5506-5507, U+5509, U+5510, U+5520, U+5524, U+552C, U+552E-552F, U+553E, U+5543, U+5566, U+556C, U+5570, U+5578, U+5580, U+5583-5584, U+5587, U+5589-558A, U+5598, U+55A7, U+55B7, U+55BB, U+55C5, U+55D3, U+55DC, U+55E6, U+55EF, U+55FD, U+5600, U+5608-5609, U+5618, U+561B, U+5631-5632, U+563F, U+5654, U+5668-566A, U+5676, U+568F, U+56A3, U+56B7, U+56BC, U+56CA, U+56CD, U+56D7, U+56DA, U+56E2, U+56F0-56F1, U+56F4, U+56FA, U+5706, U+5708, U+571F, U+5723, U+5733, U+573E, U+5740, U+5747, U+574A, U+574E, U+5751, U+575B, U+575D-5761, U+5766, U+576A, U+5777, U+5782-5784, U+578B, U+5792, U+57A6, U+57AB, U+57AE, U+57C3, U+57CB, U+57DF, U+57F9-57FA, U+5802, U+5806, U+5815, U+5821, U+5824, U+582A, U+5835, U+584C, U+5851, U+5854, U+5858, U+585E, U+586B, U+5885, U+5893, U+5899, U+589E-589F, U+58A8-58A9, U+58C1, U+58E4, U+58EE, U+58F3, U+58F6, U+5902, U+5915, U+591C, U+591F, U+592E-592F, U+5931, U+5937-593A, U+5948-5949, U+594B, U+594F, U+5951, U+5954, U+5956-5957, U+595A, U+5960, U+5962, U+5965, U+5974, U+5978, U+5984, U+5986-5987, U+5992, U+5996, U+5999, U+59A5, U+59A8, U+59AE, U+59C6, U+59D1, U+59D4, U+59DC, U+59E5, U+59FB, U+59FF, U+5A01, U+5A03, U+5A05, U+5A07, U+5A18, U+5A1C, U+5A31, U+5A36, U+5A46, U+5A49, U+5A6A, U+5A74, U+5A7F, U+5A92, U+5A9A, U+5AB2-5AB3, U+5AC1-5AC2, U+5AC9, U+5ACC, U+5AE9, U+5B09, U+5B54-5B55, U+5B58-5B59, U+5B5D, U+5B64, U+5B6A, U+5B75, U+5B80-5B81, U+5B85, U+5B87-5B88, U+5B8F, U+5B97-5B99, U+5B9D, U+5BA0-5BA1, U+5BA3, U+5BAA-5BAB, U+5BB0, U+5BB4-5BB5, U+5BBD, U+5BBF, U+5BC2, U+5BC4, U+5BC6, U+5BCC, U+5BD0, U+5BD2-5BD3, U+5BDD-5BDF, U+5BE1, U+5BE5, U+5BE8, U+5BF8, U+5BFA-5BFC, U+5BFF, U+5C04, U+5C06, U+5C0A, U+5C14, U+5C16, U+5C18, U+5C1A, U+5C22, U+5C24, U+5C2C, U+5C34, U+5C38, U+5C3A, U+5C3C-5C41, U+5C48-5C4A, U+5C4E-5C4F, U+5C51, U+5C5E, U+5C60-5C61, U+5C65, U+5C79, U+5C7F, U+5C82, U+5C94, U+5C96-5C97, U+5C9B, U+5CA9, U+5CAD, U+5CB3, U+5CB8, U+5CD9, U+5CE1, U+5CED, U+5CF0, U+5CFB, U+5D07, U+5D0E, U+5D16, U+5D1B, U+5D29, U+5D2D, U+5D4C, U+5DC5, U+5DDD-5DDE, U+5DE1-5DE2, U+5DE7-5DE9, U+5DF4, U+5DF7, U+5DFE, U+5E01, U+5E03, U+5E05-5E06, U+5E10, U+5E15-5E16, U+5E18, U+5E1A, U+5E1C-5E1D, U+5E2D, U+5E37, U+5E3D, U+5E44-5E45, U+5E55, U+5E62, U+5E76, U+5E78, U+5E7A-5E7D, U+5E7F, U+5E84, U+5E86-5E87, U+5E8F, U+5E93, U+5E95, U+5E99, U+5E9C, U+5E9E-5E9F, U+5EA6-5EA7, U+5EAD, U+5EB8, U+5EC9-5ECA, U+5ED3, U+5EF4, U+5EF6-5EF7, U+5EFA, U+5EFE, U+5F02-5F04, U+5F08, U+5F0A-5F0B, U+5F0F, U+5F13, U+5F15, U+5F18, U+5F1B, U+5F25-5F26, U+5F2F, U+5F31, U+5F39-5F3A, U+5F50, U+5F52, U+5F55, U+5F61-5F62, U+5F69, U+5F6C, U+5F70, U+5F73, U+5F79, U+5F7B-5F7C, U+5F81, U+5F84-5F85, U+5F8A-5F8B, U+5F90, U+5F92, U+5F98-5F99, U+5FA1, U+5FAA, U+5FAE, U+5FB7, U+5FBD, U+5FC4, U+5FC6, U+5FCC-5FCD, U+5FD7, U+5FE0, U+5FE7, U+5FF5, U+5FFD, U+6000-6002, U+6012, U+6016, U+601C, U+6020-6021, U+6027-6028, U+602F, U+604B, U+604D, U+6050, U+6052, U+6055, U+6059, U+6062, U+6064, U+6068-6069, U+606D, U+6070, U+6073, U+6076, U+607C, U+607F, U+6084, U+6089, U+6094, U+609F-60A0, U+60A3, U+60A6, U+60AC, U+60B2, U+60B4, U+60BC, U+60CA-60CB, U+60D1, U+60D5, U+60DC, U+60E0, U+60E6-60E9, U+60EB-60EE, U+60F0, U+60F9, U+6101, U+6108-6109, U+611A, U+6123-6124, U+6127, U+6148, U+614C, U+614E, U+6151, U+6155, U+6167-6168, U+6170, U+6177, U+618B, U+618E, U+6194, U+61A7-61A8, U+61AC, U+61BE, U+61C8, U+61D2, U+6208, U+6212, U+6218, U+621A, U+622A, U+6233-6234, U+6237, U+6241, U+6247, U+6249, U+624C, U+624E, U+6251-6252, U+6254, U+6258, U+625B, U+6263, U+6267, U+6269, U+626C-6270, U+6273, U+6276, U+6279, U+627F-6280, U+6284, U+6289, U+6291-6293, U+6295-6298, U+629A-629B, U+62A0-62A2, U+62A8, U+62AB-62AC, U+62B1, U+62B5, U+62B9, U+62BC-62BD, U+62BF, U+62C4, U+62C6-62C7, U+62C9, U+62CC, U+62CE, U+62D0, U+62D2-62D4, U+62D6, U+62D8-62D9, U+62DB-62DC, U+62DF, U+62E2-62E3, U+62E5-62E8, U+62EC, U+62EF, U+62F1, U+62F3-62F4, U+62F7, U+62FC-62FE, U+6302, U+6307, U+6309, U+630E, U+6311, U+6316, U+631A, U+631F-6321, U+6323-6325, U+6328, U+632A-632B, U+632F, U+633D, U+6342, U+6345-6346, U+6349, U+634D-6350, U+6355, U+635E-635F, U+6361, U+6363, U+6367, U+6376-6377, U+637A, U+6380, U+6388-6389, U+638C, U+638F-6390, U+6392, U+6398, U+63A0, U+63A2, U+63A7-63AA, U+63B0, U+63B7, U+63BA, U+63C9, U+63CD, U+63CF, U+63D2, U+63E0-63E1, U+63E3, U+63EA, U+63ED, U+63F4, U+63FD, U+6400-6402, U+6405, U+640F, U+6413, U+641C, U+641E, U+642D, U+643A, U+6444, U+6446-6447, U+644A, U+6454, U+6458, U+645E, U+6467, U+6469, U+6478, U+6487, U+6491-6492, U+6495, U+649E, U+64A4, U+64AC-64AD, U+64B0, U+64B5, U+64BC, U+64C5, U+64CD-64CE, U+64E6, U+6500, U+6512, U+6518, U+652F, U+6535, U+6539, U+653B, U+653F, U+6548, U+654C, U+654F, U+6551, U+655B, U+655E, U+6562-6563, U+6566, U+656C, U+6572, U+6574, U+6577, U+6591, U+6597, U+659C, U+659F, U+65A5, U+65A7, U+65A9, U+65AD, U+65AF, U+65BD, U+65CB, U+65CF, U+65D7, U+65E0, U+65E2, U+65E6, U+65E8, U+65EC-65ED, U+65F1, U+65F7, U+65FA, U+6602, U+6606, U+660C, U+660F, U+6614, U+6620, U+6627, U+663C, U+663E, U+6643, U+664B, U+6652-6653, U+6655, U+6664, U+6668, U+666E-6670, U+6676, U+667A, U+667E, U+6682, U+6684, U+6691, U+6696-6697, U+66A7-66A8, U+66AE, U+66B4, U+66D9, U+66DD, U+66F0, U+66F2, U+66FE-66FF, U+6717, U+671D, U+6726, U+6728, U+672A, U+672F, U+6731, U+6734, U+673D, U+6740, U+6742-6743, U+6746, U+6750-6751, U+6756, U+675C, U+675E, U+6760, U+6768, U+676D, U+6770, U+677E, U+6784, U+6789, U+6790, U+6795, U+6797, U+679A, U+679D, U+67A2-67A3, U+67AA, U+67AF, U+67B6, U+67B8, U+67C4, U+67CF-67D0, U+67D3-67D4, U+67DC, U+67EC, U+67F1, U+67F3-67F4, U+67FF, U+6807, U+680B, U+680F, U+6816, U+682A, U+6838, U+683C-683D, U+6842-6843, U+6846, U+6848, U+6851, U+6863, U+6865, U+6868-6869, U+6876, U+6881, U+6885, U+68A2, U+68A6, U+68A8, U+68AD, U+68B0, U+68B3, U+68C9, U+68CB, U+68CD, U+68D2, U+68D5, U+68D8, U+68DA, U+68EE, U+68F1, U+68F5, U+68FA, U+690D-690E, U+6912, U+692D, U+6930, U+6977, U+699C, U+69A8, U+69D0, U+69DB, U+69FD, U+6A21, U+6A2A, U+6A58-6A59, U+6A61, U+6A71, U+6A90, U+6B20, U+6B23, U+6B27, U+6B32, U+6B3A, U+6B3E, U+6B47, U+6B49, U+6B62, U+6B64, U+6B66-6B67, U+6B6A, U+6B79, U+6B7B-6B7C, U+6B83, U+6B8A-6B8B, U+6B96, U+6BB4, U+6BB7, U+6BBF, U+6BC1, U+6BC5, U+6BCD, U+6BD2, U+6BD5, U+6BD9, U+6BEB, U+6BEF, U+6C0F, U+6C11, U+6C13, U+6C1B, U+6C27, U+6C35, U+6C38, U+6C41, U+6C47, U+6C57, U+6C5B, U+6C5F-6C61, U+6C64, U+6C6A, U+6C70, U+6C72, U+6C79, U+6C83, U+6C89, U+6C8F-6C90, U+6C9B, U+6C9F, U+6CA7, U+6CAB, U+6CAE, U+6CB8-6CB9, U+6CBB-6CBC, U+6CBE-6CBF, U+6CC4, U+6CCA, U+6CCC, U+6CDB, U+6CDE, U+6CE1-6CE3, U+6CE5, U+6CEA, U+6CF0, U+6CFB-6CFD, U+6D01, U+6D0B, U+6D12, U+6D1E, U+6D25, U+6D2A, U+6D31-6D32, U+6D3D-6D3E, U+6D41, U+6D45-6D47, U+6D4A-6D4B, U+6D4E-6D4F, U+6D51, U+6D53, U+6D59, U+6D69-6D6A, U+6D6E, U+6D74, U+6D78, U+6D82, U+6D88-6D89, U+6D8C, U+6D95, U+6D9B, U+6D9D, U+6DA1, U+6DA4, U+6DA6, U+6DA8-6DA9, U+6DAE-6DAF, U+6DB2, U+6DB5, U+6DC0, U+6DC6-6DC7, U+6DCB-6DCC, U+6DD8, U+6DE1, U+6DE4, U+6DF1, U+6DF3, U+6DF7, U+6DF9, U+6DFB, U+6E0A, U+6E10, U+6E14, U+6E17, U+6E20-6E21, U+6E23, U+6E29, U+6E2F, U+6E32, U+6E3A, U+6E43, U+6E56, U+6E5B, U+6E7E-6E7F, U+6E83, U+6E85, U+6E89, U+6E90, U+6E9C, U+6EA2, U+6EAA, U+6EAF, U+6EB6, U+6EBA, U+6ECB, U+6ED1, U+6ED4, U+6EDA, U+6EDE, U+6EE4-6EE5, U+6EE8-6EE9, U+6EF4, U+6F06, U+6F0F, U+6F20, U+6F2B, U+6F31, U+6F3E, U+6F47, U+6F5C, U+6F66, U+6F6D-6F6E, U+6F84, U+6F88, U+6F8E, U+6F9C, U+6FD2, U+7011, U+701A, U+704C, U+706C-706D, U+7070, U+7075-7076, U+7078, U+707C, U+707E-707F, U+7089-708A, U+708E, U+7092, U+7096, U+70AB-70AE, U+70B8, U+70C1-70C2, U+70C8, U+70D8, U+70DB, U+70DF, U+70E4, U+70E6, U+70EB, U+70F9, U+7109-710A, U+7115, U+7119-711A, U+7126, U+7130, U+714C, U+714E, U+7164, U+716E, U+7172, U+717D, U+7184, U+718F, U+7199, U+719F, U+71A8, U+71AC, U+71C3, U+71D5, U+71E5, U+7206, U+722A-722B, U+7236, U+7239, U+723D, U+7248, U+724C, U+725C, U+7261-7262, U+7267, U+7272, U+7275, U+727A, U+7280, U+72AC-72AD, U+72AF, U+72B6, U+72B9, U+72C2, U+72C8, U+72D0, U+72E0-72E1, U+72EC-72EE, U+72F1, U+72F8, U+72FC, U+730E, U+7316, U+731B-731C, U+7329-732A, U+732E, U+7334, U+733E, U+7384, U+7387, U+7389, U+738B, U+739B, U+73AB, U+73BB, U+73CD, U+73E0, U+7410, U+7422, U+7434, U+7455, U+745C, U+745E, U+7470, U+7480, U+7483, U+74A8, U+74E3, U+74E6, U+74F7, U+7518, U+751A, U+7525, U+7529, U+7530-7533, U+7538, U+7545, U+754F, U+7554, U+755C, U+7565, U+756A, U+7574, U+7578, U+7586, U+758F, U+7591-7592, U+7597, U+7599, U+759F, U+75A4, U+75AB, U+75AF, U+75B2, U+75B5, U+75BE, U+75C7, U+75D2, U+75D5, U+75DB, U+75EA, U+75F0, U+75F4, U+75F9, U+761F, U+7624, U+7629, U+762B, U+7638, U+763E, U+764C, U+7676, U+767B, U+7682, U+7686-7687, U+76AE, U+76B1, U+76BF, U+76C6, U+76C8, U+76CA, U+76CF-76D2, U+76D6-76D7, U+76DB, U+76DF, U+76EF, U+76F2, U+76F9, U+76FC, U+76FE, U+7701, U+7709, U+7720, U+7728, U+772F, U+7736, U+773A, U+7741, U+7750, U+7763, U+7766, U+776C, U+7779, U+7784-7785, U+778E, U+7792, U+77A7, U+77A9-77AA, U+77AC, U+77BB, U+77D7, U+77DB, U+77E2-77E3, U+77E9, U+77EB, U+77F3, U+780C-780D, U+7814, U+7816, U+7830, U+7834, U+7838, U+7840, U+7855, U+786C, U+786E, U+788C-788E, U+7891, U+789F, U+78A7, U+78B0, U+78B3, U+78C1, U+78C5, U+78CA-78CB, U+78D5, U+78E8, U+7901, U+793A-793B, U+793E, U+7940, U+7948, U+7956, U+795D-795E, U+7965, U+796D, U+7977-7978, U+7981, U+7985, U+798F, U+79BD-79BE, U+79C0-79C1, U+79C3, U+79C9, U+79D1-79D2, U+79D8, U+79E4, U+79E7, U+79E9, U+79EF-79F0, U+79FB, U+79FD, U+7A00, U+7A0B, U+7A0D-7A0E, U+7A1A, U+7A20, U+7A33, U+7A3B-7A3D, U+7A3F, U+7A46, U+7A74, U+7A76-7A77, U+7A83-7A84, U+7A8D, U+7A91-7A92, U+7A97-7A98, U+7A9C-7A9D, U+7A9F, U+7AA5, U+7ABF, U+7ACB, U+7AD6, U+7ADE-7AE0, U+7AE3, U+7AE5, U+7AED, U+7AEF, U+7AF9, U+7AFF, U+7B1B, U+7B26, U+7B28, U+7B3C, U+7B4B, U+7B50-7B52, U+7B56, U+7B5B, U+7B5D, U+7B79, U+7B7E, U+7BA1, U+7BAD, U+7BC7, U+7BF7, U+7C07, U+7C38, U+7C4D, U+7C7B, U+7C7D, U+7C89, U+7C92, U+7C95, U+7C97-7C98, U+7CA5, U+7CAA, U+7CAE, U+7CB9, U+7CBD-7CBE, U+7CCA, U+7CD9, U+7CDF, U+7CF8, U+7D0A, U+7D20, U+7D22, U+7D27, U+7D2B, U+7D6E, U+7E41, U+7E9F-7EA0, U+7EA4, U+7EA6, U+7EAA, U+7EAC, U+7EAF, U+7EB1-7EB3, U+7EB5, U+7EB7, U+7EB9-7EBA, U+7EBD, U+7EBF, U+7EC4-7EC7, U+7ECA, U+7ECE, U+7ED1-7ED2, U+7ED5, U+7ED8, U+7EDC-7EDF, U+7EE3, U+7EE7, U+7EEA, U+7EED, U+7EEF-7EF0, U+7EF3-7EF5, U+7EF7-7EF8, U+7EFC-7EFD, U+7F00, U+7F05-7F06, U+7F09, U+7F13-7F16, U+7F18, U+7F1A, U+7F1D, U+7F20, U+7F24, U+7F29-7F2A, U+7F2D, U+7F34, U+7F36, U+7F38, U+7F3A, U+7F50, U+7F55, U+7F57, U+7F5A, U+7F62, U+7F69-7F6A, U+7F6E, U+7F72, U+7F8E, U+7F9E, U+7FA1, U+7FA4, U+7FC1, U+7FC5, U+7FD4, U+7FD8, U+7FE0, U+7FF0, U+7FFB-7FFC, U+8000, U+8002, U+800D, U+8010, U+8015, U+8017-8018, U+8038, U+803B, U+803D, U+803F, U+8046, U+804B-804C, U+8054, U+8058, U+805A, U+8080, U+8083, U+8086-8087, U+808C, U+8096, U+809A, U+809D, U+80A0-80A2, U+80A4-80A5, U+80A9-80AA, U+80AF, U+80B4, U+80BA, U+80BE-80C1, U+80C3, U+80C6, U+80CC, U+80CE, U+80DA, U+80DC, U+80DE, U+80E1, U+80E7, U+80F3, U+80F6, U+80F8, U+8102, U+8106, U+8109-810A, U+8116, U+8131, U+813E, U+8146, U+814A, U+8150, U+8154-8155, U+8165, U+8170, U+8179, U+817B-817C, U+817E, U+8180, U+818A, U+818F, U+819B-819D, U+81A8, U+81B3, U+81C0, U+81C2, U+81E3, U+81ED, U+81F3-81F4, U+8205-8206, U+820C-820D, U+8214, U+821B, U+821F, U+822A, U+8230-8231, U+8235-8236, U+8247, U+8258, U+826E-8270, U+8273, U+8279-827A, U+827E, U+8292, U+829D, U+82A6, U+82AC-82AD, U+82AF, U+82B3, U+82BD, U+82CD, U+82CF, U+82D7, U+82DB, U+82DF, U+82E5-82E6, U+82F1, U+8301-8304, U+8309, U+830E, U+832B, U+8346, U+8350, U+8352, U+8361, U+8363-8364, U+8367, U+836B, U+8377, U+8385, U+8389, U+838E, U+83AB, U+83B1-83B2, U+83B7, U+83B9, U+83BD, U+83C7, U+83CA, U+83CC, U+83E9, U+83F2, U+8404, U+840C-840E, U+841D, U+8425, U+8427-8428, U+843D, U+8457, U+8461, U+8463, U+846B-846C, U+8471, U+8482, U+8499, U+849C, U+84B8, U+84C4, U+84EC, U+8511, U+8513, U+851A, U+852C, U+853C-853D, U+8574, U+857E, U+8584, U+85AA, U+85AF, U+85CF-85D0, U+85E4, U+85FB, U+8611, U+8638, U+864E-8651, U+8654, U+865A, U+866B, U+8679, U+867E, U+8680-8682, U+868A, U+86C0, U+86C7, U+86D9, U+86EE, U+8702, U+8712, U+871C, U+8721, U+873F, U+8747, U+8774, U+8776, U+8783, U+878D, U+87BA, U+87F9, U+8822, U+8840, U+8845, U+884D, U+8854, U+8861, U+8864-8865, U+8870, U+8877, U+888B, U+888D, U+8896, U+889C, U+88AD, U+88B1, U+88C1-88C2, U+88C5, U+88D4-88D5, U+88F3, U+88F8-88F9, U+8912, U+892A, U+8980, U+8986, U+89C2, U+89C4-89C5, U+89C8, U+89E6, U+8A89, U+8A93, U+8B66, U+8B6C, U+8BA0-8BA2, U+8BA5, U+8BA8, U+8BAD, U+8BAF, U+8BB3, U+8BB6, U+8BB8-8BBA, U+8BBC-8BC1, U+8BC4, U+8BC8, U+8BCA, U+8BD1, U+8BD7, U+8BDA, U+8BDE, U+8BE0-8BE2, U+8BE6-8BE7, U+8BEB-8BEC, U+8BEF, U+8BF1, U+8BF5, U+8BF8, U+8BFA, U+8BFD, U+8C05, U+8C08, U+8C0A-8C0B, U+8C0D-8C0E, U+8C10, U+8C13, U+8C1C, U+8C23-8C24, U+8C26, U+8C28, U+8C2C, U+8C31, U+8C34, U+8C37, U+8C41, U+8C46, U+8C55, U+8C5A, U+8C61, U+8C6A-8C6B, U+8C79, U+8C8C, U+8D1D-8D1F, U+8D21-8D2F, U+8D31, U+8D34, U+8D37-8D3A, U+8D3C, U+8D3E-8D3F, U+8D41-8D44, U+8D4B-8D4C, U+8D4E-8D50, U+8D54, U+8D56, U+8D58, U+8D5A, U+8D5E, U+8D60-8D62, U+8D64, U+8D6B, U+8D74-8D76, U+8D81, U+8D8B, U+8D9F, U+8DB4, U+8DC3, U+8DCC, U+8DDD, U+8DE4, U+8DE8, U+8DEA, U+8DF5, U+8DF7, U+8E0A, U+8E0F, U+8E29-8E2A, U+8E39, U+8E48, U+8E4A-8E4B, U+8E66, U+8E6C-8E6D, U+8E72, U+8E81, U+8EAC, U+8EAF, U+8EB2, U+8EBA, U+8F68, U+8F6C, U+8F6E-8F70, U+8F74, U+8F7D, U+8F7F, U+8F85, U+8F88-8F89, U+8F90-8F91, U+8F93, U+8F95-8F97, U+8F99, U+8F9B-8F9C, U+8F9E-8F9F, U+8FA3, U+8FA8-8FA9, U+8FAB, U+8FB0-8FB1, U+8FB6, U+8FBD-8FBE, U+8FC1, U+8FC4-8FC5, U+8FC8, U+8FD4, U+8FDD-8FDE, U+8FEA-8FEB, U+8FED, U+8FF0, U+8FF7-8FF9, U+8FFD, U+9000, U+9003, U+9006, U+900A, U+900F-9010, U+9012, U+9014, U+9017, U+901A-901B, U+901D-9020, U+9022, U+902E, U+9038, U+903B-903C, U+903E, U+904F, U+9057, U+905B, U+9063, U+9065, U+906D-906E, U+9075, U+907F-9080, U+9083, U+9091, U+90A6, U+90AA, U+90C1, U+90CA, U+90CE, U+90D1, U+90E8, U+9119, U+9149, U+914C-914D, U+9157, U+915D, U+9163, U+9165, U+916A, U+916C, U+9171, U+9175, U+9177-9178, U+917F, U+9187, U+9189, U+918B, U+9192, U+91C7, U+91CA, U+91CE-91CF, U+91D1, U+9274, U+9485, U+9488-9489, U+9493, U+9499, U+949D-949E, U+94A2, U+94A5-94A7, U+94A9, U+94AE, U+94BB, U+94C3, U+94DC, U+94ED, U+94F2, U+94F8, U+94FA, U+94FE, U+9500-9501, U+9504-9505, U+9508, U+950B, U+9510, U+9521, U+9524, U+9526, U+952E, U+9532, U+9547, U+955C, U+956F, U+9576, U+95EA, U+95ED, U+95EF, U+95F2, U+95F7-95FA, U+9600-9602, U+9605, U+960E, U+9610, U+9614, U+961D, U+961F, U+9631-9632, U+9635-9636, U+963B, U+9645-9646, U+9648, U+964B-964D, U+9650, U+9661, U+9668-966A, U+9675-9677, U+9686, U+968F-9690, U+9694, U+9698-9699, U+969C, U+96A7, U+96B6, U+96B9, U+96C0-96C1, U+96C4-96C7, U+96CC, U+96D5, U+96F7, U+96F9, U+96FE, U+9707, U+9709, U+970D, U+971C, U+971E, U+9732, U+9738, U+9752, U+9760, U+9769, U+9774, U+9776, U+97A0, U+97AD, U+97E7, U+97F5, U+9876-9877, U+9879-987A, U+987D, U+987F, U+9881-9882, U+9884, U+9886-9888, U+988A, U+9891, U+9893, U+9896-9897, U+989D, U+98A0, U+98A4, U+98D8-98D9, U+98DF, U+9910, U+9963, U+9965, U+996A, U+9970, U+9972, U+9975-9976, U+997C, U+9981, U+9985, U+9988, U+998B, U+9992, U+9996, U+99A8, U+9A6D-9A71, U+9A73, U+9A76, U+9A7B-9A7C, U+9A7E-9A7F, U+9A82, U+9A84, U+9A86-9A87, U+9A8C, U+9A8F, U+9A97, U+9A9A, U+9AA4, U+9AA8, U+9ABC, U+9AD3, U+9AE6, U+9B3C, U+9B41-9B42, U+9B44-9B45, U+9B54, U+9C81, U+9CA4, U+9CA8, U+9CB8, U+9CC4, U+9E23, U+9E26, U+9E2D, U+9E3D, U+9E45, U+9E4F, U+9E64, U+9E70, U+9E7F, U+9E9F, U+9EA6, U+9EBB, U+9ECE-9ECF, U+9ED8, U+9F0E, U+9F13, U+9F20, U+9F3B, U+9F50, U+9F7F, U+9F84, U+9F99, U+9F9F;
}
/* 首屏只需要「班」一个字：单独 1.6KB 子集，避免一打开就拉 1.6MB 全量楷体 */
@font-face {
  font-family: "BanpuKaiLogo";
  src: url("/public/fonts/BanpuKaiLogo.woff2?v=20261109b") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+73ED;
}
body { font-family:-apple-system,"PingFang SC","Noto Sans SC",sans-serif; background:#f4f2ec; color:#23211b; line-height:1.7; }
a { color:#3370ff; text-decoration:none; }
h1 { font-size:22px; margin:18px 0 14px; }
h2 { font-size:16px; margin-bottom:12px; }
main { max-width:1080px; margin:0 auto; padding:0 20px 60px; }
main.with-nav { padding-top:10px; }
/* 学习端裸壳（/learn）：去掉导航与页脚后由页面自己撑满一屏 */
main.bare { max-width:none; padding:0; min-height:100vh; min-height:100dvh; display:flex; flex-direction:column; align-items:center; }
/* 学习端整页中文走楷体；@font-face 的 unicode-range 让拉丁/拼音继续用系统字体 */
main.bare, body.bg-study { font-family:"BanpuKai", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Noto Sans SC", sans-serif; }
main.bare > * { width:100%; }
/* 首屏内容少，整屏垂直居中，避免下方大片空白 */
main.bare .learn-wrap { min-height:100vh; min-height:100dvh; display:flex; flex-direction:column; justify-content:center; }
.muted { color:#948d7d; font-size:13px; font-weight:normal; }
.zh { font-size:15px; }
.big-char { font-size:22px; font-weight:700; }

/* 汉字统一用楷体：与单课页 .hz 保持一致，学习界面上的汉字一律楷体，不与黑体混排 */
/* Mint 设计令牌取自原型 v11(3) 的 :root —— 学习端配色以原型为准，不沿用首页的米色/砖红 */
:root {
  --han: "Kaiti SC", "STKaiti", "KaiTi", "Kaiti TC", "Kaiti", "楷体", "KaiTi_GB2312", "DFKai-SB", "BanpuKai", "Noto Serif SC", "Songti SC", serif;
  --mint: #3BB396;
  --mint-dark: #2F947C;
  --mint-soft: #E8F6F1;
  --mint-mid: #C8EDE3;
  --coral: #E67E5D;
  --coral-soft: #FCEBE5;
  --gold: #FFC800;
  --sky: #1CB0F6;
  --sky-soft: #DDF4FF;
  --p-ink: #1A1A1A;
  --p-ink-2: #4B4B4B;
  --p-muted: #888;
  --p-line: #E5E5E5;
  --p-card: #fff;
  --p-radius: 16px;
  --p-radius-lg: 20px;
}
.zh, .zh-big, .big-char, .place-han, .d-hanzi, .d-tok, .d-built, .d-passage,
.learn-logo, .lu-sent .zh, .char-cell .zh-big, .lu-card .zh { font-family: var(--han); }

.topnav { display:flex; align-items:center; gap:18px; background:#fff; border-bottom:1px solid #e3ddcf; padding:10px 24px; }
.topnav .brand { font-weight:800; color:#23211b; display:flex; align-items:center; gap:8px; }
.topnav .spacer { flex:1; }
.topnav .who { color:#948d7d; font-size:13px; }

/* 窄屏页头：不换行时内容总宽约 605px，会撑破 390px 手机屏（整站横向滚动）。
   折成两行 —— 第一行 品牌/语言/用户/退出，第二行 导航链接；桌面端宽度够，不生效。 */
@media (max-width:600px){
  .topnav { flex-wrap:wrap; gap:8px 12px; padding:10px 14px; font-size:13px; }
  .topnav .spacer { display:none; }                              /* 换行后 spacer 只会把第二行推歪 */
  .topnav .brand { order:1; }
  .topnav .lang-switch { order:2; margin-left:auto; }
  .topnav .who { order:3; max-width:96px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .topnav > a[href="/logout"] { order:4; }
  .topnav > a:not(.brand):not([href="/logout"]) { order:5; }     /* 学员端与管理端页头链接同此规则 */
}

.login-box { max-width:360px; margin:12vh auto; background:#fff; border:1px solid #e3ddcf; border-radius:12px; padding:32px; }
.login-box h1 { margin:0 0 4px; }
.login-box label { display:block; font-size:13px; color:#5d5849; margin-top:14px; }
.login-box input { width:100%; padding:9px 10px; border:1px solid #cfc7b4; border-radius:8px; font-size:14px; margin-top:4px; }
.block { width:100%; margin-top:20px; }

.card { background:#fff; border:1px solid #e3ddcf; border-radius:12px; padding:18px 20px; margin-top:16px; }
.cols { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
@media (max-width:820px){ .cols { grid-template-columns:1fr; } }

.stat-grid { display:grid; grid-template-columns:repeat(6,1fr); gap:12px; margin-top:16px; }
@media (max-width:820px){ .stat-grid { grid-template-columns:repeat(3,1fr); } }
.stat { background:#fff; border:1px solid #e3ddcf; border-top:3px solid #bf3a2e; padding:14px 10px; text-align:center; border-radius:8px; }
.stat .num { font-size:26px; font-weight:800; }
.stat .lbl { font-size:12px; color:#948d7d; margin-top:2px; }

.tbl { width:100%; border-collapse:collapse; font-size:14px; margin-top:10px; }
.tbl th { background:#efece2; text-align:left; padding:7px 10px; font-size:13px; }
.tbl td { border-top:1px solid #eee8d8; padding:7px 10px; vertical-align:top; }

.badge { display:inline-block; background:#efece2; color:#5d5849; font-size:12px; padding:2px 9px; border-radius:10px; }
.badge.ok { background:#e6f4ec; color:#1d8348; }
.badge.bad { background:#faece8; color:#bf3a2e; }
.st-pending { background:#efece2; }
.st-generating { background:#fff7e6; color:#a97a1f; }
.st-review1,.st-review2,.st-review3 { background:#e1eaff; color:#3370ff; }
.st-published { background:#e6f4ec; color:#1d8348; }

.btn { display:inline-block; background:#fff; border:1px solid #cfc7b4; color:#23211b; font-size:13px; padding:7px 14px; border-radius:8px; cursor:pointer; }
.btn:hover { border-color:#3370ff; color:#3370ff; }
/* 禁用态必须有可见差异：此前无 :disabled 样式，禁用的按钮和可点的一模一样 */
.btn:disabled { opacity:.45; cursor:not-allowed; border-color:#d8d2c4; color:#8d8779; background:#f6f3ec; }
.btn:disabled:hover { border-color:#d8d2c4; color:#8d8779; }
.btn.primary { background:#bf3a2e; border-color:#bf3a2e; color:#fff; font-weight:600; }
.btn.primary:hover { background:#9c2d23; color:#fff; }
.btn.sm { font-size:12px; padding:4px 10px; }
.btn.ok { background:#1d8348; border-color:#1d8348; color:#fff; }
.btn.bad { background:#bf3a2e; border-color:#bf3a2e; color:#fff; }

.unit-head { display:flex; justify-content:space-between; align-items:flex-start; gap:16px; flex-wrap:wrap; }
.inline-form { display:inline-flex; gap:8px; margin-bottom:8px; }
.note-input { border:1px solid #cfc7b4; border-radius:8px; padding:4px 10px; font-size:12px; width:220px; }
/* 行内编辑（小修留痕） */
.edit-box { display:inline-block; position:relative; }
.edit-box summary { cursor:pointer; font-size:12px; opacity:.45; list-style:none; user-select:none; }
.edit-box summary:hover { opacity:1; }
.edit-box[open] summary { opacity:1; }
.edit-box .edit-form { position:absolute; right:0; z-index:20; background:#fffdf6; border:1px solid #cfc7b4; border-radius:10px; padding:10px; box-shadow:0 6px 24px rgba(90,70,40,.18); min-width:320px; }
.edit-box .edit-form label { display:block; margin-bottom:6px; }
.edit-box .edit-form label span { display:block; font-size:12px; color:#8a7d63; margin-bottom:2px; }
.edit-box .edit-form input, .edit-box .edit-form textarea { width:100%; box-sizing:border-box; border:1px solid #cfc7b4; border-radius:8px; padding:5px 8px; font-size:13px; font-family:inherit; background:#fff; }
h3 .edit-box .edit-form { font-weight:normal; }

.alert { border-radius:8px; padding:10px 14px; margin-top:14px; font-size:14px; }
.alert.ok { background:#e6f4ec; color:#1d8348; }
.alert.err { background:#faece8; color:#bf3a2e; }
.err-text { color:#bf3a2e; font-size:12px; }

.story { border-top:1px solid #eee8d8; padding:12px 0; }
.story h3 { font-size:15px; margin-bottom:6px; }
.tip { background:#fff7e6; border-left:3px solid #a97a1f; padding:8px 12px; font-size:13px; border-radius:0 8px 8px 0; margin-top:8px; }
.payload { background:#f7f5ef; border:1px solid #e3ddcf; border-radius:8px; padding:10px; font-size:12px; overflow:auto; }

.review-box { border:2px solid #3370ff; }
.review-box textarea { width:100%; border:1px solid #cfc7b4; border-radius:8px; padding:8px 10px; font-size:14px; margin:8px 0; }
.btn-row { display:flex; gap:10px; }
.row-line { display:flex; align-items:center; gap:10px; padding:5px 0; font-size:14px; flex-wrap:wrap; }
.comment { color:#5d5849; font-size:13px; padding:2px 0 6px 4px; }

/* 公开首页 */
/* ---- 公开落地页（品牌色：藏青 #1b3f74 × 金 #c89b5f） ---- */
.brand-logo { height:34px; display:block; }
.lp { max-width:920px; margin:0 auto; }
.lp-hero { text-align:center; padding:56px 20px 8px; background:radial-gradient(ellipse 60% 50% at 50% 0%, rgba(200,155,95,.18), transparent); }
.lp-logo { width:300px; max-width:72vw; height:auto; }
.lp-hero h1 { font-size:38px; color:#1b3f74; margin:22px 0 14px; line-height:1.35; }
.lp-lead { max-width:620px; margin:0 auto; color:#5d5849; font-size:16px; line-height:1.9; }
.lp-cta { margin-top:28px; }
.lp-btn { display:inline-block; background:#1b3f74; color:#fff !important; font-size:16px; font-weight:600; padding:13px 48px; border-radius:999px; }
.lp-btn:hover { background:#15325e; }
.lp-btn-gold { background:#c89b5f; }
.lp-btn-gold:hover { background:#b3874a; }
.lp-note { margin-top:10px; font-size:13px; color:#948d7d; }
.lp-stats { display:flex; justify-content:center; gap:44px; margin:38px 0 10px; flex-wrap:wrap; }
.lp-stats b { display:block; font-size:30px; color:#1b3f74; }
.lp-stats span { font-size:12px; color:#948d7d; }
.lp-sec { margin-top:56px; }
.lp-h2 { text-align:center; font-size:24px; color:#1b3f74; margin-bottom:24px; }
.lp-feats { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
@media (max-width:720px){ .lp-feats { grid-template-columns:1fr; } }
/* 图标与标题同一行，正文另起一行跨两列（与下方四大设计原则保持一致） */
.lp-feat { display:grid; grid-template-columns:auto 1fr; align-items:center; column-gap:10px; row-gap:8px; background:#fff; border:1px solid #e3ddcf; border-radius:14px; padding:22px; }
.lp-feat h3 { font-size:17px; line-height:1.35; color:#1b3f74; margin:0; }
.lp-feat p { grid-column:1/-1; font-size:14px; color:#5d5849; line-height:1.8; }
/* 图标固定方形居中对齐，避免不同 emoji 字形宽高不一导致标题起始位置跳动 */
.lp-ico { display:inline-flex; align-items:center; justify-content:center; width:32px; height:32px; line-height:1; font-size:28px; }
.lp-steps { display:flex; gap:10px; justify-content:center; flex-wrap:wrap; }
.lp-step { background:#fff; border:1px solid #e3ddcf; border-radius:12px; padding:14px 8px; width:130px; text-align:center; }
.lp-step b { display:block; width:30px; height:30px; line-height:30px; margin:0 auto 8px; border-radius:50%; background:#1b3f74; color:#fff; font-size:14px; }
.lp-step span { font-size:13px; color:#5d5849; }
.lp-step-final { border-color:#c89b5f; background:#fdf8ef; }
.lp-step-final b { background:#c89b5f; font-size:15px; }
.lp-courses { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; }
@media (max-width:720px){ .lp-courses { grid-template-columns:1fr; } }
.lp-course { position:relative; background:#fff; border:1px solid #e3ddcf; border-radius:14px; padding:26px 22px 20px; text-align:center; }
.lp-course-badge { position:absolute; top:-11px; inset-inline-start:50%; transform:translateX(-50%); background:#c89b5f; color:#fff; font-size:12px; font-weight:700; padding:2px 14px; border-radius:999px; }
[dir="rtl"] .lp-course-badge { transform:translateX(50%); }
.lp-course h3 { font-size:26px; color:#1b3f74; letter-spacing:1px; }
.lp-course-sub { font-size:14px; color:#5d5849; margin:4px 0 12px; }
.lp-course-nums { font-size:13px; color:#948d7d; }
.lp-course-nums b { color:#1b3f74; font-size:16px; }
.lp-guarantee { margin-top:64px; background:#1b3f74; color:#fff; border-radius:18px; text-align:center; padding:44px 24px; }
.lp-guarantee h2 { font-size:24px; color:#fff; }
.lp-guarantee p { margin:12px auto 24px; max-width:520px; opacity:.88; font-size:15px; }

/* 人员管理 */
.flash { border-radius:8px; padding:10px 14px; margin:10px 0; font-size:14px; }
.flash.ok { background:#e6f4ec; color:#1d8348; }
.flash.err { background:#faece8; color:#bf3a2e; }
.cell-input { border:1px solid #cfc7b4; border-radius:6px; padding:3px 8px; font-size:13px; width:120px; }
.inline-form input, .inline-form select { border:1px solid #cfc7b4; border-radius:8px; padding:6px 10px; font-size:14px; }

/* 审校工作台 */
.queues { display:grid; grid-template-columns:repeat(3, 1fr); gap:16px; }
@media (max-width:900px) { .queues { grid-template-columns:1fr; } }
.queue h2 .badge { margin-left:6px; }
.queue-item { border-top:1px solid #eee8d8; padding:10px 0; }
.small { font-size:12px; }

/* 批量生成进度条 */
.progress { background:#eee8d8; border-radius:6px; height:10px; width:160px; overflow:hidden; display:inline-block; vertical-align:middle; }
.progress .bar { background:#3370ff; height:100%; transition:width .3s; }

/* 机器预检 */
.precheck.ok { border-left:4px solid #1d8348; }
.precheck.warn { border-left:4px solid #a97a1f; }
.precheck.bad { border-left:4px solid #bf3a2e; }

/* 词卡学习 */
.study-stats { display:flex; gap:28px; margin:14px 0; }
.study-stats .stat { text-align:center; }
.study-stats .stat strong { font-size:26px; display:block; }
.study-stats .stat span { font-size:12px; }
.study-card { max-width:520px; margin:0 auto; text-align:center; padding:36px 24px; }
.zh-big { font-size:56px; margin:18px 0 8px; }
.pinyin-big { font-size:20px; color:#a97a1f; margin-bottom:10px; }
.study-card .sent { margin-top:14px; padding-top:12px; border-top:1px solid #eee8d8; font-size:15px; }
.study-card .btn-row { justify-content:center; margin-top:18px; }

/* 语言切换 */
.lang-switch { display:inline-flex; align-items:center; }
.lang-select { font:inherit; font-size:12px; color:#5d5849; background:#fff; border:1px solid #cfc7b4; border-radius:8px; padding:4px 8px; max-width:160px; cursor:pointer; }
.lang-select:focus { outline:2px solid rgba(51,112,255,.35); outline-offset:1px; }

/* RTL（阿拉伯语）微调 */
[dir="rtl"] .topnav, [dir="rtl"] .btn-row, [dir="rtl"] .study-stats { direction:rtl; }

/* 筛选页签（审校工作台等） */
.filter-tabs { display:flex; gap:8px; margin:4px 0 14px; }
.filter-tabs .badge { text-decoration:none; font-size:13px; padding:4px 12px; }
.filter-tabs .badge.on { background:#8c3b2e; color:#fff; }

/* 教材插图（图床 WebP） */
.illus { max-width:100%; width:520px; border-radius:10px; margin:6px 0 10px; display:block; box-shadow:0 1px 4px rgba(0,0,0,.12); }

/* ---- 学员端：学习地图/闯关 ---- */
.task-cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:12px; margin:14px 0; }
.card.task { text-decoration:none; color:inherit; display:flex; flex-direction:column; gap:6px; transition:transform .1s; }
.card.task:hover { transform:translateY(-2px); }
.unit-map { display:flex; flex-wrap:wrap; gap:10px; }
.unit-dot { width:52px; height:52px; border-radius:50%; display:flex; flex-direction:column; align-items:center; justify-content:center; font-size:12px; text-decoration:none; border:2px solid #d8cfc0; color:#6b6257; background:#fff; }
.unit-dot.passed { background:#4a7c59; border-color:#4a7c59; color:#fff; font-size:16px; }
.unit-dot.passed span { font-size:10px; }
.unit-dot.open { border-color:#8c3b2e; color:#8c3b2e; font-weight:600; }
.unit-dot.locked { background:#f0ebe2; opacity:.7; }
.stage-tabs { display:flex; gap:8px; flex-wrap:wrap; margin:10px 0 16px; }
.stage-tabs .badge { text-decoration:none; font-size:13px; padding:5px 12px; }
.stage-tabs .badge.on { background:#8c3b2e; color:#fff; }
.stage-tabs .badge.locked { opacity:.55; }
.stage-tabs .badge.quiz { background:#b8860b; color:#fff; }
.char-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(90px,1fr)); gap:10px; }
.char-cell { border:1px solid #e5ddcf; border-radius:8px; padding:8px; text-align:center; }

/* 练习（四题型通用） */
.ex { border:1px solid #e5ddcf; border-radius:10px; padding:14px; margin:12px 0; background:#fff; }
.ex-passage { margin:8px 0; line-height:1.9; }
.ex-q { font-weight:600; margin:8px 0; }
.ex-options { display:flex; flex-direction:column; gap:8px; margin:8px 0; }
.btn.opt { text-align:left; }
.btn.opt.sel { border-color:#8c3b2e; background:#f7ece9; }
.ex-pool, .ex-built { display:flex; flex-wrap:wrap; gap:8px; min-height:44px; padding:8px; border-radius:8px; margin:6px 0; }
.ex-built { border:2px dashed #d8cfc0; }
.ex-ok { border-color:#4a7c59; background:#f2f7f3; }
.ex-bad { border-color:#b4452f; background:#faf3f1; }
.ex-result { margin-top:8px; font-weight:600; }
.ex-sample { margin:8px 0; padding:10px; background:#faf7f0; border-radius:8px; }

/* 音频播放按钮 */
.btn.play { padding:4px 10px; font-size:13px; }
.btn.play.playing { background:#8c3b2e; color:#fff; }

/* ---- 非洲元素：肯特纹带 + 在地场景区 ---- */
.kente { height:7px; background:repeating-linear-gradient(90deg,
  #c89b5f 0 44px, #23211b 44px 52px,
  #1d8348 52px 96px, #23211b 96px 104px,
  #bf3a2e 104px 148px, #23211b 148px 156px,
  #1b3f74 156px 200px, #23211b 200px 208px); }
/* ---- 七大区域国别版 ---- */
.lp-regions { display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:16px; }
.lp-region { display:block; background:#fff; border:1px solid #e3ddcf; border-radius:14px; padding:22px 20px 18px; text-decoration:none; color:inherit; transition:border-color .15s, box-shadow .15s; }
.lp-region:hover { border-color:#c89b5f; box-shadow:0 4px 16px rgba(0,0,0,.06); }
.lp-region-media { display:inline-block; background:#f3efe4; color:#a08348; font-size:12px; font-weight:700; letter-spacing:1px; padding:2px 10px; border-radius:999px; margin-bottom:10px; }
.lp-region h3 { margin:0 0 8px; font-size:17px; color:#3d382c; }
.lp-region p { margin:0; font-size:13px; color:#7d7767; line-height:1.7; }
.lp-region .lp-more { margin-top:12px; font-size:13px; }
/* 四大设计理念：4 条并列竖栏，用分栏线分隔（跟下方「特色」卡片区分开）。
   条数固定为 4，正好铺满一行不留空格；窄屏降为 2 列 / 1 列并改用横线分隔。
   border-inline-start 而非 border-left：阿拉伯语 RTL 下分栏线自动落到正确一侧 */
.lp-principles { grid-template-columns:repeat(4,1fr); gap:0; background:#fff; border:1px solid #e3ddcf; border-radius:14px; overflow:hidden; }
/* 图标与标题同一行：两列网格（图标 | 标题），正文跨两列另起一行。
   左右内边距收到 12px —— 920px 容器四等分后每列只有 230px，20px 内边距会把中文标题挤成「孤字换行」 */
.lp-principles .lp-feat { display:grid; grid-template-columns:auto 1fr; grid-template-rows:minmax(42px,auto) auto; column-gap:8px; row-gap:8px; align-items:center; background:none; border:0; border-radius:0; padding:24px 12px; border-inline-start:1px solid #efe8d8; }
.lp-principles .lp-feat:first-child { border-inline-start:0; }
/* 标题行固定 2 行高（minmax 首行，用 px 而非 em：em 会跟随容器字号，改全局字号就失准）：
   15px×1.35×2 ≈ 40.5px，取 42px 留余量。各语言标题长短不一，靠它对齐正文起始高度；
   图标与标题都在这行里居中，所以标题 1 行或 2 行都不会跟图标错位 */
.lp-principles .lp-feat h3 { font-size:15px; line-height:1.35; margin:0; }
.lp-principles .lp-feat p { grid-column:1/-1; font-size:13.5px; line-height:1.75; }
/* 汉字方章图标：固定方形，字形居中，不再被 font-size 撑成参差大小 */
.lp-principles .lp-ico { display:inline-flex; align-items:center; justify-content:center; width:30px; height:30px; font-family:serif; font-size:15px; font-weight:700; color:#a08348; background:#faf3e3; border:1px solid #eadfc3; border-radius:8px; }
@media (max-width:860px){
  .lp-principles { grid-template-columns:1fr 1fr; }
  .lp-principles .lp-feat { border-top:1px solid #efe8d8; }
  .lp-principles .lp-feat:nth-child(-n+2) { border-top:0; }
  .lp-principles .lp-feat:nth-child(odd) { border-inline-start:0; }
}
@media (max-width:520px){
  .lp-principles { grid-template-columns:1fr; }
  .lp-principles .lp-feat { border-inline-start:0; }
  .lp-principles .lp-feat:nth-child(2) { border-top:1px solid #efe8d8; }
}
/* 产品矩阵 */
.lp-matrix { list-style:none; display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:12px; max-width:900px; margin:0 auto; }
.lp-matrix li { background:#fff; border:1px solid #e3ddcf; border-radius:12px; padding:16px 18px; font-size:14px; color:#5d5849; }

/* ---- 定价与对比 ---- */
.lp-sub { text-align:center; color:#948d7d; font-size:14px; margin:-12px 0 24px; }
.lp-price { margin:10px 0 4px; }
.lp-price s { color:#b8b1a1; font-size:15px; margin-inline-end:8px; }
.lp-price b { font-size:30px; color:#1d8348; }
.lp-free-tag { display:inline-block; background:#e9f7ef; color:#1d8348; border:1px solid #a9dfbf; font-size:12px; font-weight:700; padding:2px 12px; border-radius:999px; margin-bottom:6px; }
.lp-faq { max-width:760px; margin:0 auto; text-align:start; }
.lp-faq-item { background:#fff; border:1px solid #e8dfc8; border-radius:10px; margin-bottom:10px; }
.lp-faq-item summary { cursor:pointer; font-weight:600; font-size:15px; color:#3d382c; padding:14px 18px; list-style:none; }
.lp-faq-item summary::before { content:'＋'; margin-inline-end:10px; color:#c89b5f; font-weight:700; }
.lp-faq-item[open] summary::before { content:'－'; }
.lp-faq-item p { margin:0; padding:0 18px 16px; font-size:14px; color:#5d5849; line-height:1.7; }
.lp-flist { list-style:none; margin:16px 0 20px; text-align:start; }
.lp-flist li { font-size:13px; color:#5d5849; padding:5px 0 5px 22px; position:relative; }
.lp-flist li::before { content:'✓'; position:absolute; inset-inline-start:2px; color:#1d8348; font-weight:700; }
.lp-btn-sm { font-size:14px; padding:10px 30px; }
.lp-cmp { width:100%; border-collapse:collapse; background:#fff; border-radius:14px; overflow:hidden; font-size:14px; }
.lp-cmp th, .lp-cmp td { padding:13px 16px; text-align:start; border-top:1px solid #eee8d8; }
.lp-cmp tr:first-child th { border-top:none; background:#efece2; font-size:13px; }
.lp-cmp th.us, .lp-cmp td.us { background:#fdf6ec; color:#1b3f74; font-weight:600; }
.lp-cmp tr:first-child th.us { background:#1b3f74; color:#fff; }
.lp-cmp td:first-child { font-weight:600; color:#5d5849; white-space:nowrap; }

/* ---- 页脚 ---- */
.site-foot { margin-top:80px; background:#23211b; }
.foot-in { max-width:920px; margin:0 auto; text-align:center; padding:36px 20px 28px; }
.foot-logo { width:170px; filter:brightness(0) invert(1); opacity:.92; }
.foot-tag { color:#c89b5f; font-size:14px; margin:14px 0 18px; }
.foot-links { display:flex; justify-content:center; gap:28px; flex-wrap:wrap; }
.foot-links a { color:#b8b1a1; font-size:14px; }
.foot-links a:hover { color:#fff; }
.foot-copy { margin-top:18px; color:#77705f; font-size:12px; }

/* ---- 协议内容页 ---- */
.page-doc { max-width:680px; margin:40px auto 0; background:#fff; border:1px solid #e3ddcf; border-radius:14px; padding:36px 40px; }
.page-doc h1 { color:#1b3f74; margin-top:0; }
.page-doc p { font-size:14px; color:#45413a; line-height:2; margin:14px 0; white-space:pre-line; }
.page-doc-back { margin-top:28px; }
.login-logo { width:200px; display:block; margin:0 auto 10px; }
.login-box h1 { text-align:center; }
.login-agree { text-align:center; margin-top:18px; font-size:12px; }

/* ---- 分级测试 ---- */
.lp-btn-ghost { display:inline-block; color:#1b3f74; font-size:15px; font-weight:600; padding:13px 24px; border-radius:999px; border:2px solid #1b3f74; margin-inline-start:12px; }
.plc h1 { color:#1b3f74; }
.plc-q { border-top:1px solid #eee8d8; padding:18px 0; }
.plc-word .zh b { font-size:24px; color:#23211b; }
.plc-ask { font-size:14px; color:#5d5849; margin:6px 0 10px; }
.plc-opts { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
@media (max-width:640px){ .plc-opts { grid-template-columns:1fr; } }
.plc-opt { display:block; background:#f9f7f1; border:1px solid #e3ddcf; border-radius:10px; padding:10px 14px; font-size:14px; cursor:pointer; }
.plc-opt:hover { border-color:#1b3f74; }
.plc-opt input { margin-inline-end:6px; }
.plc-bars { margin-top:18px; }
.plc-bar-row { display:flex; align-items:center; gap:12px; margin:10px 0; font-size:13px; }
.plc-bar-lbl { width:170px; color:#5d5849; }
.plc-bar { flex:1; height:10px; background:#efece2; border-radius:5px; overflow:hidden; }
.plc-bar-fill { display:block; height:100%; background:linear-gradient(90deg,#c89b5f,#1b3f74); }
.plc-bar-row b { width:36px; text-align:end; color:#1b3f74; }

/* 兑换码 + 课程锁定 */
.course-locked{opacity:.92}
.course-lock-box{text-align:center;padding:18px 0}
.course-lock-box .lock-ico{font-size:32px}
.redeem-card form.redeem-form{display:flex;gap:10px;margin-top:10px}
.redeem-input{flex:1;font-size:16px;padding:10px 14px;letter-spacing:1px;text-transform:uppercase}
.owned-list{list-style:none;padding:0;display:flex;gap:16px;margin-bottom:14px}
.code-list{background:#f6f2e9;padding:12px;border-radius:8px;font-size:14px;line-height:1.8}
.inline-form{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.inline-form input[type=number]{width:70px}
.btn-sm{padding:3px 10px;font-size:12px;cursor:pointer}

/* ===== 全真模考 ===== */
.tag{display:inline-block;font-size:12px;padding:1px 8px;border-radius:999px;background:#efe9da;color:#6b6455;margin-inline-start:6px}
.tag-ok{background:#e6f4ec;color:#1d8348}
.tag-err{background:#faece8;color:#bf3a2e}
.btn-ghost{background:transparent;border:1px solid #cfc7b4;margin-inline-start:8px}
.btn-danger{background:#bf3a2e!important;border-color:#bf3a2e!important;color:#fff!important}
.mock-admin-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid #e8e2d2}
.mock-admin-row:last-child{border-bottom:none}
.mock-admin-actions{display:flex;gap:8px;flex-shrink:0}
.mock-attempts-title{margin-top:16px}
.mock-exam-top{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}
.mock-timer{font-size:15px;color:#6b6455}
.mock-timer strong{font-size:22px;color:#bf3a2e;font-variant-numeric:tabular-nums}
.mock-sec{margin-bottom:18px}
.mock-q{padding:14px 0;border-bottom:1px dashed #e8e2d2}
.mock-q:last-child{border-bottom:none}
.mock-q-head{display:flex;align-items:center;gap:8px}
.mock-q-text{font-size:15px;margin:8px 0}
.mock-passage{background:#f7f3e8;border-radius:8px;padding:10px 12px;font-size:14px;line-height:1.8;margin:8px 0}
.mock-pinyin{color:#8c3b2e;font-size:14px;margin:4px 0}
.mock-opts{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.mock-opt{display:flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid #cfc7b4;border-radius:8px;cursor:pointer;font-size:14px;background:#fff}
.mock-opt:hover{border-color:#3370ff}
.mock-opt.static{cursor:default}
.mock-opt.is-ans{border-color:#1d8348;background:#e6f4ec}
.mock-opt.is-wrong{border-color:#bf3a2e;background:#faece8}
.mock-order-out{display:flex;flex-wrap:wrap;gap:6px;min-height:38px;padding:8px;border:1px dashed #cfc7b4;border-radius:8px;margin:10px 0;background:#faf7ef}
.mock-order-bank{display:flex;flex-wrap:wrap;gap:6px}
.mock-word{padding:6px 14px;border:1px solid #cfc7b4;border-radius:8px;background:#fff;font-size:15px;cursor:pointer}
.mock-word:hover{border-color:#3370ff}
.mock-word:disabled{opacity:.35;cursor:default}
.mock-word.used{border-color:#8c3b2e;background:#f7ece9}
.mock-char-input{width:80px;font-size:18px;padding:6px 10px;border:1px solid #cfc7b4;border-radius:8px;text-align:center}
.mock-submit-bar{margin:18px 0;text-align:center}
.mock-submit-bar .btn{font-size:16px;padding:12px 40px}
.mock-score-card{text-align:center}
.mock-score-big{font-size:52px;font-weight:700;line-height:1.2}
.mock-score-card.pass .mock-score-big{color:#1d8348}
.mock-score-card.fail .mock-score-big{color:#bf3a2e}
.mock-sec-scores{font-size:16px}
.mock-review.ok{background:linear-gradient(to right,#f2faf5,transparent)}
.mock-review-line{margin:4px 0;font-size:14px}
.bad-text{color:#bf3a2e}

/* ===== 首页学术主导区 ===== */
.lp-prof{display:flex;align-items:center;gap:24px;max-width:760px;margin:0 auto;padding:36px 28px;background:#faf7ef;border:1px solid #e8dfc8;border-radius:16px}
.lp-prof-avatar{flex-shrink:0;width:132px;height:132px;border-radius:50%;background:#8c3b2e;color:#faf3e3;display:flex;align-items:center;justify-content:center;font-size:40px;font-weight:700;font-family:serif}
.lp-prof-kicker{margin:0 0 4px;font-size:13px;letter-spacing:2px;color:#a08348;font-weight:600}
.lp-prof-name{margin:0 0 8px;font-size:24px;color:#23211b}
.lp-prof-role{display:inline-block;font-size:13px;font-weight:600;color:#8c3b2e;background:#f7ece9;border-radius:999px;padding:2px 12px;vertical-align:middle;margin-inline-start:8px}
.lp-prof-bio{margin:0;font-size:15px;line-height:1.9;color:#57503f}
@media(max-width:600px){.lp-prof{flex-direction:column;text-align:center;padding:28px 20px}}
img.lp-prof-avatar{object-fit:cover;border:3px solid #e8dfc8}

/* 独立课程页 /courses/hskN */
.cp-hero { text-align:center; }
.cp-hero h1 { font-size:30px; color:#23211b; margin:0 0 12px; }
.cp-includes { max-width:520px; margin:0 auto; }
/* 打包班提示（跨级课程，如 HSK3 覆盖 L1-3）：数据驱动，单级课程不渲染 */
.cp-bundle { display:inline-block; margin:0 0 18px; padding:6px 16px; border-radius:999px; background:#faf3e3; border:1px solid #eadfc3; color:#a08348; font-size:13px; font-weight:600; }
.cp-units { list-style:none; padding:0; margin:0; display:grid; gap:8px; }
.cp-units li { background:#fff; border:1px solid #e8dfc8; border-radius:10px; padding:10px 16px; }
.cp-unit-head { display:flex; flex-wrap:wrap; gap:10px; align-items:baseline; }
.cp-unit-head b { color:#c89b5f; font-size:14px; }
.cp-unit-name { font-weight:600; color:#3d382c; font-size:15px; }
.cp-unit-meta { margin-inline-start:auto; color:#948d7d; font-size:12px; }
.cp-unit-goal { margin:6px 0 0; color:#5d5849; font-size:13px; line-height:1.7; }
.cp-price { max-width:340px; margin:0 auto; }
.lp-more { display:inline-block; margin-top:10px; font-size:14px; color:#1b3f74; text-decoration:none; }
.lp-more:hover { text-decoration:underline; }

/* ===== 学习端首屏：照原型 01 Splash ===== */
.learn-wrap { max-width:420px; margin:0 auto; padding:env(safe-area-inset-top) 20px calc(24px + env(safe-area-inset-bottom)); }
/* 原型：#screen-splash 背景由浅绿渐变到白 */
body.bg-splash { background:linear-gradient(180deg,#F0FFF0 0%,#fff 55%); background-attachment:fixed; }
#step-home.splash {
  display:flex; flex-direction:column;
  flex:1; width:100%; max-width:340px; margin:0 auto; text-align:center;
}
/* 内容区吃满剩余高度并在其中居中，按钮固定贴底 —— 不把两者混在一个 justify-content 里 */
.splash-main { flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; min-height:0; }
.splash-deco { display:flex; gap:10px; margin-bottom:28px; }
.splash-deco span { width:14px; height:14px; border-radius:4px; display:block; }
.splash-deco span:nth-child(1) { background:var(--mint); transform:rotate(15deg); }
.splash-deco span:nth-child(2) { background:var(--coral); border-radius:50%; }
.splash-deco span:nth-child(3) { background:var(--gold); transform:rotate(-20deg); }
.splash-deco span:nth-child(4) { background:var(--sky); clip-path:polygon(50% 0%,0% 100%,100% 100%); width:16px; height:14px; }
.logo-mark {
  width:132px; height:132px; border-radius:28px; background:#fff;
  border:3.5px solid var(--mint); display:flex; align-items:center; justify-content:center;
  color:var(--mint); font-family:"BanpuKaiLogo", var(--han);
  font-size:64px; font-weight:400; line-height:1; margin-bottom:18px;
}
.logo-mark .ban-char { display:block; transform:translateY(-1px); }
.brand-name { font-size:32px; font-weight:900; color:var(--p-ink); letter-spacing:-.02em; }
.splash-cta { width:min(300px,100%); margin:0 auto; }
.splash-install {
  display:block; margin:4px auto 0; min-height:44px; padding:8px 12px;
  background:none; border:none; color:var(--mint-dark);
  font-size:13px; font-weight:700; text-decoration:underline;
  cursor:pointer; font-family:inherit;
}
.splash-note { margin-top:14px; font-size:13px; color:var(--p-muted); }
.splash-note a { color:var(--mint-dark); }

/* 原型主按钮：绿色厚底、大写、54px —— 与首页米色 .btn 不是一套，学习端统一用这个 */
.btn-primary {
  display:flex; align-items:center; justify-content:center;
  width:100%; height:54px; border-radius:16px;
  background:var(--mint); color:#fff;
  font-size:17px; font-weight:800; letter-spacing:.04em; text-transform:uppercase;
  border:none; border-bottom:4px solid var(--mint-dark);
  cursor:pointer; font-family:inherit;
}
.btn-primary:active { transform:translateY(2px); }
.btn-primary:disabled { opacity:.5; cursor:not-allowed; }

.learn-hint { margin-top:14px; }
.learn-step h2 { font-size:15px; color:#5d5849; margin:22px 0 10px; font-weight:600; }
.learn-group { display:flex; gap:10px; flex-wrap:wrap; }
.learn-group .opt { flex:1 1 0; min-width:96px; padding:12px 8px; background:#fff; border:1px solid #cfc7b4;
  border-radius:10px; font-size:14px; color:#23211b; cursor:pointer; transition:.15s; }
.learn-group .opt:hover { border-color:#bf3a2e; }
.learn-group .opt.on { border-color:#bf3a2e; background:#faece8; color:#bf3a2e; font-weight:600; }
/* 未选就被点「下一步」：把缺的那组标红，而不是让按钮静默失效 */
.learn-group.need .opt { border-color:#bf3a2e; box-shadow:0 0 0 3px rgba(191,58,46,.12); }
.learn-err { color:#bf3a2e; font-size:13px; text-align:center; margin-top:16px; }

/* ===== 测级页：照原型 02 Placement（375 手机稿 → 响应式） ===== */
/* 原型几何：flashcard 左右 16；卡片内边距 44/24/32；主按钮 52 高、16 圆角、4 厚底 */
.place-screen {
  width:100%; max-width:420px; margin:0 auto;
  min-height:100vh; min-height:100dvh;
  background:#fff;
  display:flex; flex-direction:column;
  padding:max(4px, env(safe-area-inset-top)) 0 calc(28px + env(safe-area-inset-bottom));
}
.place-head {
  padding:4px 20px 10px;
  display:flex; align-items:center; gap:12px;
  flex-shrink:0;
}
.place-close {
  width:36px; height:36px; flex-shrink:0;
  display:flex; align-items:center; justify-content:center;
  color:var(--p-muted); font-size:22px; font-weight:700;
  text-decoration:none; background:none; border:none; cursor:pointer;
  font-family:inherit; line-height:1;
}
.place-progress { flex:1; height:16px; background:#E5E5E5; border-radius:999px; overflow:hidden; }
.place-progress i {
  display:block; height:100%; width:20%; background:var(--mint);
  border-radius:999px; transition:width .28s ease; position:relative;
}
.place-progress i::after {
  content:""; position:absolute; top:3px; left:8px; right:8px; height:5px;
  background:rgba(255,255,255,.35); border-radius:999px;
}
.place-card {
  margin:28px 16px 0;
  background:#fff;
  border:2px solid var(--p-line);
  border-bottom:5px solid var(--p-line);
  border-radius:20px;
  padding:44px 24px 32px;
  text-align:center;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:10px; min-height:280px; flex:0 0 auto;
}
.place-level {
  display:inline-flex; align-items:center;
  padding:2px 8px; border:1.5px solid var(--gold); border-radius:6px;
  background:transparent; color:#C9A000;
  font-size:11px; font-weight:700; letter-spacing:.02em; line-height:1.2;
}
.place-han {
  font-size:68px; font-weight:400; color:#111;
  line-height:1.12; letter-spacing:.04em;
  word-break:keep-all;
}
.place-py-row { display:inline-flex; align-items:center; gap:6px; margin-top:2px; }
.place-py { font-size:14px; color:var(--p-muted); font-weight:500; }
.place-spk {
  width:28px; height:28px; flex-shrink:0;
  display:inline-flex; align-items:center; justify-content:center;
  background:none; border:none; border-radius:50%; cursor:pointer;
  color:var(--sky); padding:0;
}
.place-spk:active { opacity:.7; }
.place-spk.loading { opacity:.4; cursor:progress; }
.place-spk.playing { color:var(--mint-dark); }
.place-spk svg { width:18px; height:18px; display:block; }
.place-gloss {
  margin-top:0; font-size:18px; color:var(--p-ink-2);
  font-weight:500; line-height:1.45; max-width:300px;
  visibility:hidden; opacity:0; max-height:0; overflow:hidden;
  transition:opacity .18s ease, max-height .18s ease, margin-top .18s ease, visibility 0s linear .18s;
}
.place-gloss.revealed {
  visibility:visible; opacity:1; max-height:120px; margin-top:10px;
  transition:opacity .18s ease, max-height .18s ease, margin-top .18s ease, visibility 0s;
}
.place-gloss .pos { color:var(--sky); font-style:italic; font-weight:700; }
.place-gloss .pos:not(:empty) + .en:not(:empty)::before,
.place-gloss .en:not(:empty) + .fr:not(:empty)::before { content:" · "; }
.place-prompt {
  text-align:center; font-size:16px; font-weight:800;
  color:var(--p-ink); margin:36px 16px 0; flex-shrink:0;
}
.place-actions {
  display:grid; grid-template-columns:1fr 1.1fr 1fr; gap:10px;
  padding:12px 16px 0; flex-shrink:0;
}
.place-actions button {
  height:52px; border-radius:16px; font-size:14px; font-weight:800;
  letter-spacing:.01em; border:2px solid transparent; border-bottom-width:4px;
  font-family:inherit; cursor:pointer; background:#fff;
}
.place-actions .place-no { color:var(--coral); border-color:transparent; }
.place-actions .place-no:active { background:var(--coral-soft); }
.place-actions .place-ns { color:var(--p-ink-2); border-color:transparent; }
.place-actions .place-ns:active { background:#F5F5F5; }
.place-actions .place-yes { background:var(--mint); color:#fff; border-color:var(--mint-dark); border-bottom-color:var(--mint-dark); }
.place-actions .place-yes:active { transform:translateY(2px); }
.place-hint {
  display:none; text-align:center; font-size:12px; font-weight:700;
  color:var(--p-muted); padding:8px 16px 0;
}
.place-hint.show { display:block; }
.place-done {
  margin:48px 16px 0; text-align:center;
  display:flex; flex-direction:column; align-items:center;
}
.place-done-kicker { font-size:14px; color:var(--p-muted); font-weight:700; }
.place-done-level {
  font-size:64px; font-weight:900; color:var(--mint-dark);
  line-height:1.1; margin:6px 0 0;
}
.place-done-lbl { font-size:14px; color:var(--p-muted); margin:0 0 28px; }
.place-retest {
  margin-top:14px; width:100%; max-width:300px; height:48px;
  border-radius:14px; background:#fff; color:var(--p-ink-2);
  border:1px solid var(--p-line); font-size:15px; font-weight:700;
  font-family:inherit; cursor:pointer;
}
.place-done .btn-primary { max-width:300px; }
body.bg-placement { background:#fff; }

/* ===== 每日测试（一屏一题） ===== */
.daily-wrap { max-width:520px; margin:0 auto; padding:14px 16px 60px; }

.daily-bar { display:flex; align-items:center; gap:10px; padding:6px 2px 14px; }
.daily-time { font-size:13px; color:#948d7d; font-variant-numeric:tabular-nums; white-space:nowrap; }
.daily-prog { flex:1; height:6px; background:#e8dfc8; border-radius:3px; overflow:hidden; }
.daily-prog i { display:block; height:100%; width:0; background:#bf3a2e; transition:width .4s; }
.daily-prog-txt { font-size:12px; color:#bf3a2e; white-space:nowrap; }
.daily-prog-txt.on { font-weight:700; }

.daily-card { background:#fff; border:1px solid #e3ddcf; border-radius:16px; padding:22px 18px; }
.daily-card h1 { font-size:19px; margin:0 0 10px; }
.daily-h2 { font-size:15px; color:#5d5849; margin:24px 0 10px; }

.daily-seq { font-size:13px; color:#948d7d; margin:0 0 14px; font-variant-numeric:tabular-nums; }

.d-hanzi { font-size:40px; font-weight:400; letter-spacing:4px; color:#23211b; text-align:center; margin:6px 0 12px; line-height:1.5; }
.d-pinyin { font-size:16px; color:#bf3a2e; text-align:center; letter-spacing:1px; margin-bottom:10px; }
.d-passage { font-size:15px; color:#3d382c; line-height:1.9; background:#faf8f2; border-radius:10px; padding:12px 14px; margin-bottom:12px; }
.d-prompt { font-size:16px; color:#23211b; margin-bottom:14px; line-height:1.7; }
.d-hint { font-size:13px; color:#948d7d; margin-bottom:10px; }

.d-opt { display:block; width:100%; text-align:left; min-height:48px; padding:12px 14px; margin-bottom:10px;
  background:#fff; border:1px solid #cfc7b4; border-radius:10px; font-size:15px; color:#23211b;
  line-height:1.5; cursor:pointer; transition:.15s; }
.d-opt:hover { border-color:#bf3a2e; }
.d-opt.on { border-color:#bf3a2e; background:#faece8; color:#bf3a2e; font-weight:600; }

.d-built { min-height:48px; border-bottom:2px dashed #cfc7b4; margin-bottom:14px; font-size:20px;
  letter-spacing:2px; color:#23211b; line-height:48px; }
.d-pool { display:flex; flex-wrap:wrap; gap:8px; }
.d-tok { min-height:44px; padding:10px 14px; background:#fff; border:1px solid #cfc7b4; border-radius:10px;
  font-size:17px; color:#23211b; cursor:pointer; }
.d-tok.used { opacity:.28; }

.daily-card .btn.block { margin-top:18px; min-height:48px; font-size:16px; }
.daily-go { margin-top:12px; min-height:48px; font-size:16px; }

.daily-done { text-align:center; }
.daily-score { font-size:64px; font-weight:800; color:#bf3a2e; line-height:1.1; }
.daily-cnt { font-size:14px; color:#948d7d; margin:2px 0 0; }
.daily-review { list-style:none; padding:0; margin:0; text-align:left; }
.daily-review li { border:1px solid #e3ddcf; border-radius:10px; padding:10px 12px; margin-bottom:8px; }
.daily-review li.ok { border-color:#cfe0cd; background:#f6faf5; }
.daily-review li.no { border-color:#f0d3ce; background:#fdf7f6; }
.d-rv-head { font-size:14px; font-weight:700; color:#bf3a2e; }
.daily-review li.ok .d-rv-head { color:#4f7a45; }
.d-rv-q { font-size:15px; color:#23211b; margin:2px 0 4px; line-height:1.7; }
.d-rv-line { font-size:13px; color:#5d5849; line-height:1.7; }
.d-rv-line.ok { color:#4f7a45; }
.daily-tmr { margin-top:10px; }

/* ===== 话题模块列表 + 单元（四板块 × 三层级） ===== */
.lu-wrap { max-width:520px; margin:0 auto; padding:16px 16px 60px; }

.lu-head h1 { font-size:21px; margin:6px 0 6px; }
.lu-head p { line-height:1.7; }
.lu-level { font-size:13px; color:#bf3a2e; font-weight:600; margin:8px 0 0; }
.lu-locked-msg { background:#fdf7f6; border:1px solid #f0d3ce; border-radius:10px;
  padding:10px 12px; font-size:13px; color:#8c3b2e; line-height:1.7; }

.lu-course { margin-top:22px; }
.lu-course-h { font-size:15px; color:#5d5849; margin:0 0 10px; font-weight:600; }
.lu-units { list-style:none; padding:0; margin:0; }
.lu-unit { margin-bottom:8px; }
.lu-unit-a { display:grid; grid-template-columns:auto 1fr auto; align-items:center;
  column-gap:10px; row-gap:6px; min-height:56px; padding:10px 14px; background:#fff;
  border:1px solid #e3ddcf; border-radius:12px; text-decoration:none; color:#23211b; }
a.lu-unit-a:hover { border-color:#bf3a2e; }
.lu-unit-a.is-off { opacity:.62; }
.lu-u-code { font-size:12px; color:#948d7d; font-variant-numeric:tabular-nums; }
.lu-u-name { font-size:15px; }
.lu-u-bar { grid-column:1/3; height:4px; background:#efece2; border-radius:2px; overflow:hidden; }
.lu-u-bar i { display:block; height:100%; background:#bf3a2e; }
.lu-u-num { font-size:12px; color:#948d7d; grid-row:2; font-variant-numeric:tabular-nums; }
.lu-tag { font-size:11px; color:#4f7a45; border:1px solid #cfe0cd; background:#f6faf5;
  border-radius:6px; padding:2px 6px; white-space:nowrap; }
.lu-tag-lock { color:#8c3b2e; border-color:#f0d3ce; background:#fdf7f6; }
.lu-actions { margin-top:26px; }

.lu-top { display:flex; align-items:center; gap:10px; padding:4px 0 16px; }
.lu-back { font-size:13px; color:#5d5849; text-decoration:none; }
.lu-back:hover { color:#bf3a2e; }
.lu-time { margin-inline-start:auto; font-size:12px; color:#948d7d;
  font-variant-numeric:tabular-nums; white-space:nowrap; }
.lu-time.on { color:#bf3a2e; font-weight:700; }
/* 单元号跟在返回键后面，和剩余时间同一行；不再单独占一行标题 */
.lu-code { font-size:12px; color:#b3ab99; letter-spacing:.04em; }

/* 板块与层级两级 tab：横向可滚，触控目标 ≥44px */
.lu-blocks, .lu-tiers { display:flex; gap:6px; margin-bottom:10px; }
.lu-blocks { overflow-x:auto; padding-bottom:2px; }
.lu-blk { position:relative; flex:1 0 auto; text-align:center; min-height:44px; line-height:44px;
  padding:0 14px; background:#fff; border:1px solid #e3ddcf; border-radius:10px;
  font-size:14px; color:#5d5849; text-decoration:none; white-space:nowrap; }
.lu-blk.on { background:#faece8; border-color:#bf3a2e; color:#bf3a2e; font-weight:600; }
.lu-dot { position:absolute; top:8px; right:8px; width:6px; height:6px; border-radius:50%; background:#4f7a45; }

.lu-tier { flex:1; text-align:center; min-height:44px; line-height:44px; background:#fff;
  border:1px solid #e3ddcf; border-radius:10px; font-size:14px; color:#5d5849; text-decoration:none; }
.lu-tier.on { background:#efece2; border-color:#cfc7b4; color:#23211b; font-weight:600; }
.lu-tier.is-locked { opacity:.55; }
.lu-opt { font-size:11px; color:#948d7d; margin-inline-start:4px; }

.lu-card { background:#fff; border:1px solid #e3ddcf; border-radius:16px; padding:18px 16px; }
.lu-card .btn.block { margin-top:18px; min-height:48px; font-size:16px; }
.lu-seq { font-size:13px; color:#948d7d; margin:0 0 14px; font-variant-numeric:tabular-nums; }

/* 词汇表最小内容宽约 349px，窄屏放不下会把整页撑宽（390px 屏溢出 12px）。
   让表格自己在卡片内横滑，页面本身不横滚。 */
.lu-scroll { overflow-x:auto; -webkit-overflow-scrolling:touch; margin:0 -4px; padding:0 4px; }
.lu-tbl { min-width:340px; }
.lu-tbl td { padding:9px 8px; }
.lu-note { max-width:150px; line-height:1.6; }
.lu-aud { width:44px; }

/* 句子按原型做成卡片：左侧圆形序号 + 汉字主行 + 拼音次行，不再用分割线列表 */
.lu-card { counter-reset: sent; }
.lu-sent { counter-increment: sent; position:relative; background:#fff;
  border:2px solid #e3ddcf; border-bottom-width:4px; border-radius:16px;
  padding:14px 14px 14px 52px; margin-bottom:12px; }
.lu-sent:last-child { margin-bottom:0; }
.lu-sent::before { content: counter(sent); position:absolute; left:13px; top:14px;
  width:26px; height:26px; border-radius:50%; background:#3aa88a; color:#fff;
  font:700 13px/26px -apple-system,"PingFang SC",sans-serif; text-align:center; }
.lu-sent .zh { font-size:20px; font-weight:600; letter-spacing:.5px; }
.lu-dlg { margin-top:18px; }
.lu-h3 { font-size:15px; color:#1b3f74; margin:0 0 10px; }
.lu-line { display:flex; gap:8px; align-items:baseline; padding:6px 0; flex-wrap:wrap; }
.lu-spk { font-size:12px; color:#bf3a2e; min-width:52px; }
.lu-tip { background:#faf8f2; border-radius:10px; padding:10px 12px; font-size:13px;
  color:#5d5849; line-height:1.8; margin:12px 0 0; }

.lu-story { margin-bottom:18px; }
.lu-body { font-size:15px; line-height:1.95; color:#3d382c; white-space:pre-wrap; }
.lu-key { background:#faf8f2; border-radius:10px; padding:12px 14px; margin:0 0 10px;
  font-size:14px; line-height:1.85; color:#3d382c; }
.lu-key b { color:#1b3f74; }

.lu-soon { text-align:center; padding:26px 10px; }
.lu-soon-ico { font-size:34px; margin-bottom:8px; }
.lu-soon p { font-size:14px; color:#5d5849; margin:4px 0; line-height:1.8; }

.lu-result { text-align:center; margin-top:12px; }
.lu-score { font-size:56px; font-weight:800; color:#bf3a2e; line-height:1.1; }
.lu-result .lu-h3 { text-align:left; margin-top:20px; }
.lu-foot { margin-top:14px; }

/* ===== 学习路径页：照原型 03 Home Path（状态条 + 绿色横幅 + 蜿蜒节点） ===== */
.path-page { width:100%; max-width:420px; margin:0 auto; display:flex; flex-direction:column; min-height:100vh; min-height:100dvh; padding-top:env(safe-area-inset-top); padding-bottom:env(safe-area-inset-bottom); }
.stats-bar { display:flex; align-items:center; justify-content:space-between; padding:10px 18px 8px; gap:8px; flex-shrink:0; }
.pstat { display:flex; align-items:center; gap:5px; font-size:15px; font-weight:800; color:var(--p-ink); }
.pstat .ico { font-size:17px; line-height:1; }
.pstat.flag { min-width:32px; height:22px; padding:0 6px; border-radius:6px; background:var(--mint-soft);
  border:2px solid var(--p-line); font-size:11px; justify-content:center; color:var(--p-ink-2); }

.path-head { padding:0 18px 10px; flex-shrink:0; }
.unit-banner { background:var(--mint); border-radius:16px; border-bottom:4px solid var(--mint-dark);
  padding:12px 16px; color:#fff; display:flex; align-items:center; justify-content:space-between; gap:8px; }
.u-label { font-size:12px; font-weight:800; text-transform:uppercase; letter-spacing:.08em; opacity:.9; }
.u-title { font-size:18px; font-weight:900; margin-top:2px; }
.guide-btn { width:40px; height:40px; border-radius:12px; background:rgba(255,255,255,.2);
  border:2px solid rgba(255,255,255,.35); color:#fff; font-size:18px; font-weight:800;
  display:flex; align-items:center; justify-content:center; flex-shrink:0; text-decoration:none; }

.path-scroll { flex:1; overflow-y:auto; padding:12px 0 24px;
  background:radial-gradient(circle at 20% 30%, #F0FFF0 0%, transparent 40%),
             radial-gradient(circle at 80% 70%, #FFF8F0 0%, transparent 35%), #fff; }
.path { position:relative; width:100%; padding:56px 0 8px; }
.path-line { position:absolute; left:50%; top:40px; bottom:40px; width:6px; margin-left:-3px;
  background:repeating-linear-gradient(180deg, #E5E5E5 0 10px, transparent 10px 18px);
  border-radius:3px; z-index:0; }
.node { position:relative; z-index:1; display:flex; flex-direction:column; align-items:center;
  margin-bottom:28px; width:100%; }
.node.offset-l { transform:translateX(-56px); }
.node.offset-r { transform:translateX(56px); }
.node.offset-0 { transform:translateX(0); }
.node-bubble { width:72px; height:72px; border-radius:28%; display:flex; align-items:center; justify-content:center;
  position:relative; border:0; cursor:pointer; background:transparent; padding:0; text-decoration:none; }
.node-bubble img { width:72px; height:72px; display:block; border-radius:28%; }
.node-bubble.done { box-shadow:0 8px 16px -4px rgba(255,200,0,.45); }
.node-bubble.current { box-shadow:0 8px 18px -4px rgba(59,179,150,.5); animation:path-pulse 1.8s ease-in-out infinite; }
.node-bubble.locked { cursor:default; }
@keyframes path-pulse { 0%,100% { transform:translateY(0); } 50% { transform:translateY(-3px); } }
.node-label { margin-top:8px; font-size:13px; font-weight:800; color:var(--p-ink-2); }
.node-sub { font-size:11px; font-weight:700; color:var(--p-muted); margin-top:2px; }
.node .star { position:absolute; right:-6px; top:-6px; font-size:18px; color:var(--gold);
  text-shadow:0 1px 2px rgba(0,0,0,.25); }
.current-tip { position:absolute; top:-42px; left:50%; transform:translateX(-50%);
  background:var(--sky); color:#fff; font-size:12px; font-weight:800; text-transform:uppercase;
  letter-spacing:.06em; padding:6px 12px; border-radius:10px; border-bottom:3px solid #1899D6;
  white-space:nowrap; z-index:2; }
.current-tip::after { content:""; position:absolute; bottom:-8px; left:50%; margin-left:-6px;
  border:6px solid transparent; border-top-color:#1899D6; }
.path-toast { margin:0 18px 10px; padding:10px 12px; border-radius:12px; background:var(--coral-soft);
  color:#8c3b2e; font-size:13px; }
.path-empty { padding:40px 18px; text-align:center; color:var(--p-muted); }
.path-foot { padding:8px 18px 24px; }

/* PC：加宽并排按钮 */
@media (min-width:820px) {
  /* 首屏靠 flex 居中撑满，PC 上再加 padding-top 会把整屏压下去 */
  .learn-wrap { max-width:420px; padding-top:0; }
  .daily-wrap { padding-top:32px; }
  .daily-card { padding:30px 28px; }
  .lu-wrap { max-width:720px; padding-top:32px; }
  .lu-card { padding:26px 28px; }
  .lu-blocks { overflow-x:visible; }
}

/* ===== 题库编辑器（/admin/bank） ===== */
.bank-meta-row { display:flex; gap:14px; align-items:flex-end; flex-wrap:wrap; }
.bank-meta-row label { display:flex; flex-direction:column; gap:4px; font-size:13px; color:#5d5849; }
.bank-meta-row input, .bank-meta-row select,
.bank-add-row input, .bank-add-row select,
.bank-import-row input[type=text] { border:1px solid #cfc7b4; border-radius:8px; padding:6px 10px; font-size:14px; font-family:inherit; background:#fff; }
.bank-meta-actions { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:12px; }
.bank-import-box { margin-top:12px; }
.bank-import-box summary { cursor:pointer; font-size:13px; color:#3370ff; }
.bank-import-row { display:flex; gap:12px; align-items:center; flex-wrap:wrap; margin-top:10px; }
.bank-import-row label { font-size:13px; color:#5d5849; display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
.bank-import-row input[type=text] { width:340px; }

.bank-wrap { display:grid; grid-template-columns:260px 1fr; gap:16px; align-items:start; margin-top:16px; }
.bank-tree { position:sticky; top:12px; max-height:calc(100vh - 40px); overflow:auto; }
.bank-tree h3 { margin:0 0 8px; }
.bank-tree h4 { margin:14px 0 6px; }
.bank-tree-sec { padding:6px 0; border-bottom:1px dashed #eee8d8; }
.bank-tree-part { display:block; font-size:12px; color:#5d5849; text-decoration:none; padding:3px 6px; border-radius:6px; }
.bank-tree-part:hover { background:#f7f3e8; color:#3370ff; }
.bank-add-row { display:flex; gap:6px; flex-wrap:wrap; align-items:center; }
.bank-add-row select, .bank-add-row input { font-size:12px; padding:4px 6px; }
.bank-add-row input[type=number] { width:56px; }
.bank-ai input[name=topic] { width:100%; box-sizing:border-box; margin:6px 0; border:1px solid #cfc7b4; border-radius:8px; padding:5px 8px; font-size:12px; }
.bank-ai form button { font-size:12px; }

.bank-sec { margin-bottom:10px; }
.bank-sec > h2 { margin:22px 0 6px; }
.bank-part-box { margin-bottom:14px; }
.bank-part-head { display:flex; align-items:center; gap:10px; padding:8px 2px 4px; }
.bank-part-head h3 { margin:0; font-size:15px; color:#1b3f74; }

.bank-q { background:#fff; border:1px solid #e3ddcf; border-radius:12px; padding:12px 14px; margin-top:10px; }
.bank-q.is-new { box-shadow:0 0 0 2px rgba(51,112,255,.35); }
.bank-q-head { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.bank-q-no { white-space:nowrap; }
.bank-q-spacer { flex:1 1 auto; }
.bank-type-sel { border:1px solid #cfc7b4; border-radius:8px; padding:4px 8px; font-size:13px; background:#fff; }
.bank-movepart { border:1px solid #cfc7b4; border-radius:8px; padding:4px 6px; font-size:12px; background:#fff; }
.bank-q-msg { font-size:12px; min-height:0; margin-top:4px; }
.bank-q-msg.ok { color:#1d8348; }
.bank-q-msg.err { color:#bf3a2e; }
.bank-f { margin-top:10px; }
.bank-flabel { display:block; font-size:12px; color:#948d7d; margin-bottom:3px; }
.bank-q textarea, .bank-q input[type=text], .bank-q input[type=number] { width:100%; box-sizing:border-box; border:1px solid #cfc7b4; border-radius:8px; padding:6px 9px; font-size:14px; font-family:inherit; background:#fff; }
.bank-q textarea { resize:vertical; line-height:1.7; }
.bank-f-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(180px, 1fr)); gap:10px; }
.bank-opts { display:flex; flex-direction:column; gap:6px; }
.bank-opt { display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding:6px 8px; border:1px solid #f0ead9; border-radius:8px; background:#fdfcf8; }
.bank-opt-key { width:20px; font-weight:700; color:#8c3b2e; text-align:center; flex:none; }
.bank-opt-text { flex:1 1 220px; min-width:140px; }
.bank-opt-label { flex:0 1 150px; }
.bank-opt .bank-ans { font-size:13px; color:#5d5849; white-space:nowrap; }
.bank-opt-actions { display:flex; gap:8px; margin-top:4px; }
.bank-imgw { display:inline-flex; align-items:center; gap:6px; flex:none; }
.bank-thumb { width:64px; height:44px; object-fit:cover; border-radius:6px; border:1px solid #e3ddcf; background:#f7f3e8; }
.bank-thumb.is-empty { visibility:hidden; }
.bank-audio-row { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.bank-audio-row audio { height:34px; max-width:280px; }
.bank-audio-src { word-break:break-all; font-size:12px; }

.bank-prev-sec { margin:26px 0 4px; }
.bank-prev-part { margin:10px 0; padding:6px 10px; background:#f7f3e8; border-radius:8px; font-size:14px; display:flex; gap:10px; flex-wrap:wrap; }
.bank-correct { color:#1d8348; }

/* 学员端新题型（8 种）补充样式 */
.mock-imgopts { display:grid; grid-template-columns:repeat(auto-fill, minmax(150px, 1fr)); gap:10px; margin-top:8px; }
.mock-imgopt { position:relative; border:2px solid #cfc7b4; border-radius:10px; overflow:hidden; cursor:pointer; background:#fff; }
.mock-imgopt img { width:100%; height:110px; object-fit:cover; display:block; }
.mock-imgopt b { position:absolute; top:4px; left:6px; background:#fff; border-radius:6px; padding:0 7px; font-size:13px; }
.mock-imgopt.is-ans { border-color:#1d8348; }
.mock-imgopt input { position:absolute; top:6px; right:6px; }
.mock-imgbank { display:flex; flex-wrap:wrap; gap:8px; margin:8px 0; }
.mock-imgbank-item { position:relative; width:84px; border:1px solid #e3ddcf; border-radius:8px; overflow:hidden; background:#fff; }
.mock-imgbank-item img { width:100%; height:60px; object-fit:cover; display:block; }
.mock-imgbank-item b { position:absolute; top:2px; left:4px; background:#fff; border-radius:5px; padding:0 5px; font-size:12px; }
.mock-img-missing { display:inline-block; font-size:12px; color:#948d7d; padding:6px; }
.mock-audio-text { background:#f7f3e8; border-radius:8px; padding:8px 10px; font-size:14px; line-height:1.8; margin:8px 0; }
.mock-select { border:1px solid #cfc7b4; border-radius:8px; padding:7px 10px; font-size:15px; background:#fff; margin-top:6px; }
.mock-instr { margin:2px 0 8px; }
.mock-comp { display:flex; gap:14px; align-items:center; flex-wrap:wrap; margin:8px 0; }
.mock-comp-img { max-height:120px; border:1px solid #e3ddcf; border-radius:8px; background:#fff; }
.mock-comp-img.ref { opacity:.9; }

@media (max-width: 860px) {
  .bank-wrap { grid-template-columns:1fr; }
  .bank-tree { position:static; max-height:none; }
}
.mock-imgopt.is-wrong { border-color:#bf3a2e; }
.mock-imgbank-item.is-ans { border-color:#1d8348; box-shadow:0 0 0 2px rgba(29,131,72,.35); }
.mock-imgbank-item.is-wrong { border-color:#bf3a2e; }
.mock-imgopt.static, .mock-imgopt.static input { pointer-events:none; }

/* 后台逐词审校：token chips */
.token-list{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.token-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid #e6e1d6;border-radius:8px;padding:4px 8px;background:#fff}
.token-chip .zh{font-size:18px}
.token-chip .btn.play{padding:2px 6px;font-size:12px}
