/* GENERATED by scripts/subset-body-font.py — do not edit by hand.
 * Noto Sans SC variable (wght 400-600), SIL OFL 1.1 (see /fonts/OFL-NotoSansSC.txt), renamed "PerryOS Sans SC".
 * Han + CJK punctuation only; Latin/digits stay on the existing stacks. */

@font-face {
  font-family: "PerryOS Sans SC";
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url("/fonts/perryos-sans-sc-r1.woff2") format("woff2");
  unicode-range: U+4E00-6413;
}

@font-face {
  font-family: "PerryOS Sans SC";
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url("/fonts/perryos-sans-sc-r2.woff2") format("woff2");
  unicode-range: U+6414-7F34;
}

@font-face {
  font-family: "PerryOS Sans SC";
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url("/fonts/perryos-sans-sc-r3.woff2") format("woff2");
  unicode-range: U+7F35-9FFF;
}

@font-face {
  font-family: "PerryOS Sans SC";
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url("/fonts/perryos-sans-sc-body.woff2") format("woff2");
  unicode-range: U+201C, U+4E03, U+4E07, U+4E14, U+4E16, U+4E1D, U+4E22, U+4E24, U+4E30, U+4E32, U+4E34, U+4E3E, U+4E43, U+4E49, U+4E4C, U+4E4F-4E50, U+4E58, U+4E5D, U+4E66, U+4E71, U+4E88, U+4E8F, U+4E91, U+4E94, U+4EAB, U+4EAE, U+4EBF, U+4ED4, U+4EF2, U+4F17, U+4F24, U+4F2A, U+4F38, U+4F3C, U+4F59, U+4F63, U+4F73, U+4FA7, U+4FBF, U+4FC3-4FC4, U+4FD7, U+4FEE, U+500D, U+5012, U+5019, U+501F, U+5021, U+503E, U+5047, U+504F, U+5065, U+507F, U+50AC, U+5140-5141, U+5145, U+514B, U+514D, U+5151, U+515A, U+515C, U+516B, U+516D, U+5171, U+5175, U+5178, U+517B, U+518C, U+5192, U+5197, U+51A5, U+51B2, U+51B7, U+51C0, U+51CF, U+51D1, U+51ED, U+51EF, U+51FD, U+51FF-5200, U+5212, U+521A, U+521D, U+5220, U+5237, U+523A-523B, U+524A, U+5269-526A, U+526F, U+5272, U+529E, U+52A3, U+52A9, U+52B1, U+52BF, U+52FE-52FF, U+5319, U+5339, U+533F, U+5343, U+5347, U+5352-5353, U+535A, U+5360, U+5370-5371, U+5373-5374, U+5382, U+5398, U+539A, U+53C8-53C9, U+53CB, U+53D9, U+53E4, U+53EB-53EC, U+53F3, U+5403-5404, U+540A, U+5410, U+541E, U+5434-5435, U+5448, U+5468, U+5475, U+547D, U+5492, U+54CD, U+54FA, U+5524, U+552F, U+5546, U+5582, U+5584, U+558A, U+55BB, U+55E8, U+566A, U+56E0, U+56FA, U+5706, U+5708, U+573A, U+574F-5751, U+575A-575B, U+5761, U+5792, U+5824, U+5851, U+5854, U+5899, U+58C1, U+58F3, U+5907, U+591F, U+592E, U+5931, U+5939-593A, U+594F, U+5999, U+59A5, U+59D4, U+5A01, U+5A92, U+5B63-5B64, U+5B75, U+5B81, U+5B85, U+5B97, U+5B9C-5B9D, U+5BA1, U+5BA3-5BA4, U+5BAA, U+5BC4, U+5BCC, U+5BFB, U+5C04, U+5C14, U+5C16, U+5C24, U+5C3A, U+5C3D, U+5C4F, U+5C5E, U+5C97, U+5CF0, U+5D29, U+5D4C, U+5DE6-5DE8, U+5E0C, U+5E45, U+5E55, U+5E72, U+5E7B, U+5E7F, U+5E8A, U+5E8F, U+5E93, U+5E95, U+5E97, U+5E9C, U+5EA7, U+5EAD, U+5EB7, U+5EF6, U+5F03-5F04, U+5F08, U+5F31, U+5F39-5F3A, U+5F52, U+5F62, U+5F69, U+5F71, U+5F7B-5F7C, U+5F80-5F81, U+5F84, U+5FB7, U+5FD8, U+5FE0, U+5FF5, U+6000, U+6015, U+6025, U+6028, U+606A, U+6070, U+6076, U+60A3, U+60A6, U+60B2, U+60BB, U+60CA, U+60D1, U+60D5, U+60EF, U+614E, U+6162, U+61C2, U+620F, U+6218, U+622A, U+623F, U+624B, U+624E, U+6251, U+6254, U+6258, U+625B, U+6263, U+626B, U+6270, U+6279, U+6289, U+6293, U+6296, U+6298, U+629B, U+62A2, U+62A4, U+62AB-62AC, U+62B1, U+62B5, U+62B9, U+62BC-62BD, U+62CD, U+62D0, U+62D3-62D4, U+62DB, U+62DF, U+62E5-62E7, U+62EC, U+62F7, U+62FF, U+6302, U+6311, U+6316, U+6321, U+6324-6325, U+6355, U+6388-6389, U+638C, U+638F-6390, U+63A2, U+63A9, U+63BA, U+63D2, U+63E1, U+63F4, U+6401, U+641E, U+642C, U+6446-6447, U+644A, U+6469, U+649E, U+64B0, U+64C5, U+64E6, U+6545, U+654F, U+6551, U+655B, U+655E, U+6562-6563, U+6572, U+6597, U+659C, U+65A5, U+65BD, U+65D7, U+65E2, U+65E6-65E7, U+661F-6620, U+6668, U+6670, U+6697, U+66AE, U+66B4, U+66DD, U+66F2, U+66FE, U+670B, U+6731, U+6742-6743, U+6746, U+6749, U+6750, U+675C, U+677F, U+6781, U+6790, U+679A, U+67A2, U+67F1, U+6805, U+684C, U+6865, U+68A6, U+68AF-68B0, U+68B3, U+68CB, U+68D8, U+68EE, U+690D, U+695A, U+69DB, U+6B3A, U+6B67, U+6B7B, U+6B8B, U+6BC1, U+6BCD, U+6BDB, U+6BEB, U+6C11, U+6C34, U+6C38, U+6C47, U+6C49, U+6C60, U+6C7D, U+6C89, U+6C99, U+6C9F, U+6CAA, U+6CBB, U+6CBE-6CBF, U+6CC4, U+6CDB, U+6CE2, U+6CE5, U+6D01, U+6D17, U+6D1B, U+6D1E, U+6D3B, U+6D3D-6D3E, U+6D4E-6D4F, U+6D6E, U+6D89, U+6DB2, U+6DB5, U+6DC0, U+6DC6, U+6DD8, U+6DF7, U+6E10, U+6E21, U+6E2F, U+6E32, U+6E38, U+6E7E, U+6E83, U+6EA2, U+6EAF, U+6ED1, U+6EDE, U+6EE4, U+6F02, U+6F0F, U+6F5C, U+6F6D, U+6FC0, U+704C, U+706B, U+706F-7070, U+7075, U+7092, U+70BC, U+70C8, U+70E6, U+7126, U+718A, U+7194, U+719F, U+722C, U+724C, U+7259, U+725B, U+7279, U+72C2, U+72ED, U+732B, U+732E, U+7403, U+7410, U+751A, U+7530, U+7533, U+7545, U+7574, U+7578, U+7591, U+75BE, U+75C5, U+75D2, U+75DB, U+767B, U+767E, U+76AE, U+76C8, U+76CF, U+76D1-76D2, U+76D6, U+76DF, U+76EF, U+76FE, U+773C, U+777F, U+77BB, U+77DB, U+77E9, U+77F3, U+77F6, U+77FF, U+780C, U+7834, U+7840, U+7845, U+788D-788E, U+78B0, U+78C1, U+78E8, U+793E, U+795E, U+7981, U+798F, U+79D8, U+79DF, U+7A00, U+7A0E, U+7A7F, U+7A81, U+7A84, U+7A9D, U+7ACB, U+7ADF, U+7AED, U+7AEF, U+7B3C, U+7B51, U+7BA1, U+7BE1, U+7C73, U+7C89, U+7C92, U+7C97-7C98, U+7CB9, U+7CC5, U+7CD9, U+7D27, U+7D2F, U+7E41, U+7EA0, U+7EA2, U+7EA4, U+7EAF, U+7EB3, U+7EB8-7EB9, U+7EC4, U+7EC7, U+7ED1, U+7EE7, U+7EE9-7EEA, U+7F00, U+7F18, U+7F1D, U+7F3A, U+7F57, U+7F69, U+7F72, U+8001, U+8010, U+8017, U+805A, U+8089, U+80B2, U+80BF, U+80C1, U+80CC, U+80DC, U+80F6, U+811A, U+8131, U+81C3, U+81F4, U+820D, U+826F, U+8273, U+827A, U+827E, U+82B1, U+82E5-82E6, U+82F9, U+8367, U+836F, U+83AB, U+8457, U+853D, U+8584, U+85CF, U+8651, U+866B, U+867D, U+8702, U+878D, U+8861, U+886C, U+8877, U+88C1, U+88F8, U+897F, U+8986, U+89C9, U+8B66, U+8BA8, U+8BB8, U+8BCA, U+8BEF, U+8BF1, U+8BF5, U+8BFE, U+8C13, U+8C28, U+8C37, U+8D1D, U+8D1F, U+8D22-8D23, U+8D25, U+8D2C-8D2D, U+8D2F, U+8D31, U+8D37-8D38, U+8D41, U+8D4C, U+8D4E, U+8D54, U+8D56, U+8D5A, U+8D5E, U+8D62, U+8D8B, U+8DC3, U+8DCC, U+8DD1, U+8DDD, U+8DE8, U+8DF3, U+8DF5, U+8E29-8E2A, U+8F66, U+8F68, U+8F6E-8F6F, U+8F7B, U+8F83-8F86, U+8F91, U+8FC1, U+8FC5, U+8FDC, U+8FDF, U+8FEB, U+8FED, U+8FF7, U+9002, U+9006, U+9010, U+9012, U+901B, U+901F, U+903B-903C, U+9047, U+904D, U+9057, U+906E, U+907F, U+9152, U+91C7, U+91CE, U+9488, U+949E-949F, U+94A9, U+94AE, U+94B1, U+94B4, U+94C1, U+94DC, U+94F6, U+94F8, U+9501-9502, U+9510, U+951A, U+955C, U+95FB, U+9608, U+9631, U+9634-9635, U+963B, U+9646, U+9662, U+9677, U+9694, U+969C, U+96A7, U+96BE, U+9752, U+9759, U+975B, U+97F3, U+987A, U+987E, U+9881, U+98D8, U+98DE, U+9910, U+9996, U+9999, U+9A6C, U+9A71, U+9A73, U+9A76, U+9A7E, U+9A97, U+9AA4, U+9AA8, U+9EBB, U+9ED1, U+9F99;
}

@font-face {
  font-family: "PerryOS Sans SC";
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url("/fonts/perryos-sans-sc-ui.woff2") format("woff2");
  unicode-range: U+00B7, U+2014, U+2019, U+201D, U+2026, U+3000-3002, U+300A-300D, U+4E00, U+4E09-4E0B, U+4E0D-4E0E, U+4E13, U+4E1A, U+4E1C, U+4E25, U+4E2A, U+4E2D, U+4E3A-4E3B, U+4E45, U+4E48, U+4E4B, U+4E5F-4E60, U+4E70, U+4E86, U+4E89, U+4E8B-4E8C, U+4E8E, U+4E92, U+4E9B, U+4EA4, U+4EA6-4EA7, U+4EBA, U+4EC0-4EC1, U+4EC5, U+4ECA-4ECB, U+4ECD-4ECE, U+4ED3, U+4ED6, U+4ED8, U+4EE3-4EE5, U+4EEC, U+4EF6-4EF7, U+4EFB, U+4EFD, U+4F01, U+4F18-4F1A, U+4F1F-4F20, U+4F30, U+4F46, U+4F4D-4F4F, U+4F53, U+4F55, U+4F5C, U+4F60, U+4F7F, U+4F8B, U+4F9B, U+4F9D, U+4FDD, U+4FE1, U+503A, U+503C, U+505A, U+505C, U+5076, U+50A8, U+50CF, U+5143, U+5148-5149, U+5165, U+5168, U+516C, U+5173-5174, U+5176-5177, U+517C, U+5185, U+518D, U+5199, U+51B3, U+51B5, U+51C6, U+51E0, U+51FA-51FB, U+5206-5207, U+5217, U+5219, U+521B, U+5224, U+5229, U+522B, U+5230, U+5236, U+5238, U+524D, U+5267, U+529B, U+529F-52A1, U+52A8, U+52CB, U+5305, U+5316-5317, U+533A-533B, U+5341, U+534A, U+534F, U+5355-5357, U+5361, U+5386, U+538B, U+539F, U+53BB, U+53C2, U+53CA, U+53CC-53CD, U+53D1, U+53D6-53D8, U+53E0, U+53E3, U+53E5-53E6, U+53EA, U+53EF-53F0, U+53F2, U+53F7-53F9, U+5408, U+540C-540E, U+5411, U+5417, U+5426-5427, U+542B-542C, U+542F, U+5438, U+543B, U+544A, U+5458, U+5462, U+5473, U+548C, U+54A8, U+54C1, U+54EA, U+552E, U+554A, U+561B, U+5668, U+566C, U+56DB, U+56DE, U+56E2, U+56E4, U+56F4, U+56FD-56FE, U+571F, U+5728, U+5730, U+5740, U+5747, U+5757, U+578B, U+57AB, U+57CE, U+57DF, U+57FA, U+5806, U+585E, U+586B, U+5883, U+589E, U+58EB, U+58F0, U+5904, U+590D, U+5916, U+591A, U+5927, U+5929-592A, U+5934, U+5938, U+5947, U+5951, U+5956-5957, U+5979, U+597D, U+5982, U+59CB, U+59D3, U+5B50, U+5B57-5B58, U+5B66, U+5B83, U+5B88-5B89, U+5B8C, U+5B8F, U+5B98, U+5B9A, U+5B9E, U+5BA2, U+5BB6, U+5BB9, U+5BBD, U+5BC6, U+5BDF, U+5BF9, U+5BFC, U+5C01, U+5C06, U+5C0F, U+5C11, U+5C1A, U+5C1D, U+5C31, U+5C3E, U+5C40, U+5C42, U+5C45, U+5C55, U+5DDE, U+5DE5, U+5DEE, U+5DF1-5DF2, U+5E01-5E03, U+5E08, U+5E26, U+5E2E, U+5E38, U+5E73-5E74, U+5E76, U+5E94, U+5EA6, U+5EB8, U+5EC9, U+5EFA, U+5F00, U+5F02, U+5F0F, U+5F15, U+5F20, U+5F2F, U+5F53, U+5F55, U+5F85, U+5F88, U+5F8B, U+5F97, U+5FAA, U+5FAE, U+5FC3, U+5FC5-5FC6, U+5FD7, U+5FEB, U+5FFD, U+6001, U+600E, U+601D, U+6027, U+603B, U+6062, U+606F, U+60A8, U+60C5, U+60E0, U+60F3, U+610F, U+611F, U+613F, U+6210-6211, U+6216, U+6237, U+6240, U+624D, U+6253, U+6267, U+6269, U+626E, U+627E-6280, U+6284, U+628A, U+6295, U+6297, U+62A5, U+62C5-62C6, U+62C9, U+62D2, U+62D6, U+62E9, U+62FC, U+6301, U+6307, U+6309, U+635F, U+6362, U+636E, U+6377, U+6392, U+63A5, U+63A7-63A8, U+63AA, U+63CF-63D0, U+641C, U+642D, U+6458, U+6491, U+64A4, U+64AD, U+64CD-64CE, U+652F, U+6536, U+6539, U+653E-653F, U+6548, U+6559, U+6570, U+6574, U+6587, U+6599, U+65AD, U+65AF-65B0, U+65B9, U+65C1, U+65E0, U+65E5, U+65E9, U+65F6, U+6602, U+660E, U+6613, U+662F, U+663E, U+666E-666F, U+667A, U+6682, U+66F4, U+66FF-6700, U+6708-6709, U+670D, U+671B, U+671F, U+672A-672C, U+672F, U+673A, U+675F, U+6761, U+6765, U+676D, U+677E, U+6784, U+679C, U+67B6, U+67D0, U+67D3, U+67E5, U+6807-6808, U+6821, U+6837-6839, U+683C, U+6846, U+6848, U+6863, U+68C0, U+6982, U+6A21, U+6A59, U+6B21-6B22, U+6B3E, U+6B49, U+6B62-6B65, U+6BB5, U+6BCF, U+6BD4-6BD5, U+6C14, U+6C42, U+6C5F, U+6C61, U+6CA1, U+6CB9, U+6CD5, U+6CE8, U+6D41, U+6D45, U+6D4B, U+6D59, U+6D6A, U+6D77, U+6D88, U+6DA6, U+6DA8, U+6DF1, U+6DFB, U+6E05, U+6E17, U+6E20, U+6E90, U+6EDA, U+6EE1, U+6F14, U+6F6E, U+70B9, U+70ED, U+7136, U+7167, U+7206, U+7247-7248, U+7269, U+72AF, U+72B6, U+72EC, U+731C, U+7387, U+73A9, U+73AF-73B0, U+7406, U+74F6, U+751F, U+7528, U+7531, U+7535, U+753B, U+754C, U+7559, U+7565, U+7597, U+767D, U+7684, U+76CA, U+76D8, U+76EE, U+76F2, U+76F4, U+76F8, U+7701, U+770B, U+771F, U+7740, U+77E5, U+77ED, U+7801, U+7814, U+786C, U+786E, U+793A, U+793C, U+7948, U+7968, U+7977, U+79BB, U+79C1, U+79CD, U+79D1-79D2, U+79EF-79F0, U+79FB, U+7A0B, U+7A0D, U+7A33, U+7A3F, U+7A76, U+7A7A, U+7A97, U+7AD9, U+7ADE, U+7AE0, U+7B14, U+7B26, U+7B2C, U+7B49, U+7B54, U+7B56, U+7B5B, U+7B7E, U+7B80, U+7B97, U+7BB1, U+7BC7, U+7C7B, U+7CBE, U+7CCA, U+7CFB, U+7D20, U+7D22, U+7D2B, U+7EA6-7EA7, U+7EAA, U+7EBF, U+7EC3, U+7EC6, U+7EC8, U+7ECD, U+7ECF, U+7ED3, U+7ED5, U+7ED9, U+7EDC-7EDD, U+7EDF, U+7EED, U+7EF4, U+7EFC, U+7EFF, U+7F13, U+7F16, U+7F29, U+7F51, U+7F6E, U+7F8E, U+7FA4, U+7FFB, U+8003, U+8005, U+800C, U+804A, U+804C, U+8054, U+80A1, U+80C0, U+80FD, U+8111, U+8138, U+8154, U+817E, U+81EA, U+81F3, U+822A, U+8272, U+8282, U+82AF, U+82F1, U+8303-8304, U+8349, U+8350, U+83B7, U+8425, U+843D, U+84DD, U+85AA, U+865A, U+884C, U+8854, U+8865, U+8868, U+88AB, U+88C5, U+8981, U+89C1-89C2, U+89C4, U+89C6, U+89C8, U+89D2, U+89E3, U+89E6, U+8A00, U+8BA1-8BA2, U+8BA4, U+8BA9, U+8BAD-8BAE, U+8BB0, U+8BB2, U+8BBA, U+8BBE-8BBF, U+8BC1, U+8BC4, U+8BC6, U+8BC9, U+8BCD, U+8BD1, U+8BD5, U+8BDD, U+8BE2, U+8BE5-8BE6, U+8BED, U+8BF4, U+8BF7, U+8BFA-8BFB, U+8C01, U+8C03, U+8C08, U+8C22, U+8C61, U+8C6A, U+8C8C, U+8D26-8D28, U+8D34-8D35, U+8D39, U+8D44, U+8D4B, U+8D5B, U+8D70, U+8D77, U+8D85, U+8D8A, U+8DB3, U+8DDF, U+8DEF, U+8EAB, U+8F6C, U+8F7D, U+8F93, U+8F9E, U+8FB9, U+8FBE, U+8FC7, U+8FCE, U+8FD0-8FD1, U+8FD4, U+8FD8-8FD9, U+8FDB, U+8FDE, U+8FF0, U+8FFD, U+9000-9001, U+9009, U+900F, U+901A, U+9020, U+9053, U+9075, U+9080, U+90A3, U+90AE, U+90E8, U+90FD, U+914D, U+9192, U+91CA, U+91CC-91CD, U+91CF, U+91D1, U+94A5, U+94FA, U+94FE, U+9500, U+9519, U+952E, U+957F, U+95E8, U+95ED-95EE, U+95F2, U+95F4, U+9605, U+961F, U+9632, U+9636, U+9644-9645, U+9648, U+964D, U+9650, U+9664, U+9669, U+968F-9690, U+96C6, U+96F6, U+9700, U+9732, U+975E, U+9760, U+9762, U+9875-9876, U+9879, U+987B, U+9884, U+9886, U+9888, U+9891, U+9898, U+989D, U+98CE, U+9988, U+9A8C, U+9AD8, U+9C81, U+9EC4, U+9ED8, U+9F50, U+FF01, U+FF08-FF09, U+FF0C, U+FF1A-FF1C, U+FF1E-FF1F, U+FF5C;
}
:root {
  color-scheme: dark;

  /* Tailwind v3 defaults retained during the v4 migration (theme-independent). */
  --tw3-border-color: #e5e7eb;
  --tw3-placeholder-color: #9ca3af;
  --tw3-ring-color: rgb(59 130 246 / 0.5);

  /* Chrome sizes (DESIGN.md §5) */
  --size-sysbar: 36px;
  --size-window-header: 32px;
  --size-dock: 68px;
  --size-grid-gap: 8px;
  --size-workspace-inset: 8px;
  --size-hit-icon: 44px;
  --size-hit-control: 28px;
  --size-hit-handle-touch: 24px;
  --size-handle-corner: 10px;

  /* Spacing scale, base 4px */
  --space-4: 4px;
  --space-8: 8px;
  --space-12: 12px;
  --space-16: 16px;
  --space-24: 24px;
  --space-32: 32px;
  --space-48: 48px;
  --space-64: 64px;
  --space-96: 96px;

  /* Radii: hard edges */
  --radius-window: 2px;
  --radius-key: 3px;
  --radius-chip: 2px;
  --radius-round: 9999px;

  /* z-layers */
  --z-base: 0;
  --z-window: 10;
  --z-rack: 20;
  --z-float: 50;
  --z-chrome: 100;
  --z-overlay: 200;
  --z-grain: 400;

  /* Motion (DESIGN.md §10.1) */
  --dur-instant: 0ms;
  --dur-micro: 80ms;
  --dur-fast: 120ms;
  --dur-settle: 180ms;
  --dur-flow: 240ms;
  --dur-spatial: 280ms;
  --dur-ambient-yihook: 4800ms;
  --dur-ambient-yihub: 4200ms;
  --dur-ambient-yilive: 5600ms;

  --ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1);
  --ease-out-back: cubic-bezier(0.34, 1.3, 0.64, 1);
  --ease-rect: cubic-bezier(0.77, 0, 0.175, 1);
  --ease-linear: linear;

  /* Fonts (DESIGN.md §3.1–3.2; R2 Display CJK subset) */
  /* UI / body CJK: self-hosted Noto Sans SC subset (Han + CJK punctuation only, so Latin/digits fall through to the system stack). Full CJK packs are never loaded. */
  --font-ui: "PerryOS Sans SC", system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", "Noto Sans CJK SC", "Segoe UI", sans-serif;
  /* Display Latin narrow: Big Index / metrics (system stack, no commercial EVA / no Inter brand) */
  --font-display: "Arial Narrow", "Aptos Narrow", "Helvetica Neue Condensed", Arial, "PerryOS Sans SC", sans-serif;
  /* Display CJK Black: Hero 保持好奇 only — self-hosted subset WOFF2 */
  --font-display-cjk: "Noto Serif SC Hero", "Noto Serif SC Hero Fallback", "Noto Serif SC", "Source Han Serif SC", "Songti SC", "STSong", serif;
  --font-system: ui-monospace, SFMono-Regular, Menlo, Consolas, "PerryOS Sans SC", monospace;

  /* Type scale (P3-1, DESIGN.md §3.3 / §11.2) */
  --text-micro: 11px; /* Mono silkscreen labels only */
  --text-xs: 12px;
  --text-sm: 13px;
  --text-base: 14px;
  --text-md: 15px;
  --text-lg: 17px;
  --text-xl: 20px;
  --text-2xl: 26px;

  /* ========== Dark theme (default) — DESIGN.md §2 ========== */

  /* Surfaces */
  --rgb-bg: 11 11 10; /* #0B0B0A */
  --rgb-sunken: 8 8 7; /* #080807 */
  --rgb-panel: 18 18 17; /* #121211 */
  --rgb-raised: 26 26 24; /* #1A1A18 */
  --rgb-hairline: 46 45 42; /* #2E2D2A */
  --rgb-line-strong: 74 72 67; /* #4A4843 */
  --rgb-line-control: 117 113 106; /* #75716A */

  /* Text */
  --rgb-ink: 230 225 216; /* #E6E1D8 */
  --rgb-text-2: 184 178 166; /* #B8B2A6 */
  --rgb-muted: 143 138 126; /* #8F8A7E */

  /* Brand + status */
  --rgb-orange: 255 75 17; /* #FF4B11 accent */
  --rgb-mark: 255 75 17; /* #FF4B11 activity mark; classic = accent */
  --rgb-ochre: 255 75 17; /* #FF4B11 stripe mate; classic = accent */
  --rgb-accent-hi: 255 122 77; /* #FF7A4D */
  --rgb-accent-dim: 194 58 12; /* #C23A0C graphics only */
  --rgb-green: 92 255 61; /* #5CFF3D ok */
  --rgb-amber: 232 163 23; /* #E8A317 warn */
  --rgb-error: 255 107 94; /* #FF6B5E */

  /* Legacy aliases → dark equivalents (keep shell/apps compiling until R3) */
  --rgb-paper: 11 11 10; /* alias of bg */
  --rgb-graphite: 184 178 166; /* alias of text-2 */
  --rgb-soft-rail: 26 26 24; /* alias of raised */
  --rgb-lcd: 8 8 7; /* alias of sunken */

  /* Resolved colours */
  --color-bg: rgb(var(--rgb-bg));
  --color-sunken: rgb(var(--rgb-sunken));
  --color-panel: rgb(var(--rgb-panel));
  --color-raised: rgb(var(--rgb-raised));
  --color-hairline: rgb(var(--rgb-hairline));
  --color-line-strong: rgb(var(--rgb-line-strong));
  --color-line-control: rgb(var(--rgb-line-control));
  --color-ink: rgb(var(--rgb-ink));
  --color-text-2: rgb(var(--rgb-text-2));
  --color-muted: rgb(var(--rgb-muted));
  --color-orange: rgb(var(--rgb-orange));
  --color-mark: rgb(var(--rgb-mark));
  --color-ochre: rgb(var(--rgb-ochre));
  --color-accent-hi: rgb(var(--rgb-accent-hi));
  --color-accent-dim: rgb(var(--rgb-accent-dim));
  --color-accent-tint: rgb(var(--rgb-orange) / 0.08);
  --color-green: rgb(var(--rgb-green));
  --color-amber: rgb(var(--rgb-amber));
  --color-error: rgb(var(--rgb-error));
  /* Text on Perry Orange: near-black (5.88:1). White on #FF4B11 is only 3.35:1. */
  --color-on-accent: rgb(var(--rgb-bg));

  /* Reading surface (DESIGN.md §11.1–11.3) */
  --rgb-read-text: 216 211 200; /* #D8D3C8 (AAA 12.56:1 on panel, 13.19:1 on bg) */
  --rgb-read-link: 255 162 122; /* #FFA27A (AA 9.55:1 on panel) */
  --rgb-read-link-hover: 255 122 77; /* #FF7A4D */
  --color-read-text: rgb(var(--rgb-read-text));
  --color-read-link: rgb(var(--rgb-read-link));
  --color-read-link-hover: rgb(var(--rgb-read-link-hover));

  /* Legacy resolved aliases */
  --color-paper: var(--color-bg);
  --color-graphite: var(--color-text-2);
  --color-soft-rail: var(--color-raised);
  --color-lcd: var(--color-sunken);

  /* Semantic aliases */
  --color-accent: var(--color-orange);
  --color-signal: var(--color-green);
  --color-ok: var(--color-green);
  --color-warn: var(--color-amber);
  --color-grid: var(--color-hairline);
  --color-rail: var(--color-raised);
  --grid-line: rgb(var(--rgb-hairline) / 0.3);
  --grid-line-fine: rgb(var(--rgb-hairline) / 0.18);

  /* Bevels and shadows (dark: luminance hierarchy, no soft blur) */
  --bevel-light: rgb(var(--rgb-ink) / 0.08);
  --bevel-dark: rgb(0 0 0 / 0.55);
  --shadow-bevel: inset 1px 1px 0 var(--bevel-light), inset -1px -1px 0 var(--bevel-dark);
  --shadow-l1: 0 4px 0 rgb(0 0 0 / 0.35);
  --shadow-l2: 0 8px 0 rgb(0 0 0 / 0.45);
  --shadow-l3: 0 12px 0 rgb(0 0 0 / 0.5);
  --shadow-window: var(--shadow-l2);
  --shadow-panel: none;
  --key-shadow: 0 2px 0 rgb(0 0 0 / 0.55), inset 1px 1px 0 var(--bevel-light), inset -1px -1px 0 var(--bevel-dark);
  --key-shadow-pressed: 0 0 0 rgb(0 0 0 / 0.55), inset 1px 1px 0 var(--bevel-dark), inset -1px -1px 0 var(--bevel-light);
  --shadow-inset: inset 1px 1px 0 rgb(0 0 0 / 0.55), inset -1px -1px 0 var(--bevel-light);

  /* Surface helpers */
  --snap-outline: 1px dashed var(--color-accent);
  --alert-amber: var(--color-amber);
  --hazard-stripe: repeating-linear-gradient(-45deg, var(--color-bg) 0 8px, var(--color-amber) 8px 16px);
  --hazard-stripe-orange: repeating-linear-gradient(-45deg, var(--color-bg) 0 8px, var(--color-accent) 8px 16px);
  --metal-face: linear-gradient(180deg, var(--color-raised) 0%, var(--color-panel) 46%, var(--color-sunken) 100%);
  --key-face: linear-gradient(var(--color-raised), var(--color-panel));
  --key-face-orange: linear-gradient(var(--color-accent), var(--color-accent));
  --key-face-dark: linear-gradient(var(--color-sunken), var(--color-bg));
  /* Current Dock key. Classic stays a raised key; cool palettes fill it with the primary. */
  --color-dock-active: var(--color-raised);
  --color-on-dock-active: var(--color-ink);
  --color-dock-active-border: var(--color-line-strong);

  /* Component semantics. Classic keeps the previous component colours.
     Palette blocks reassign these; components only read the variables. */
  --color-title-mark: var(--color-mark); /* home title ring */
  --color-hex: var(--color-muted); /* Double hex outline */
  --color-hex-accent: var(--color-accent); /* hex fill, inner ring, Double welcome hex */
  --color-tag: var(--color-text-2);
  --color-tag-line: var(--color-line-control);
  --color-wordmark: var(--color-accent); /* "im" on the system bar */

  /* Grain: static inline SVG noise, no bitmap, no animation; ~2–3% on dark */
  --grain: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n' x='0' y='0' width='100%25' height='100%25'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0'/></filter><rect width='160' height='160' filter='url(%23n)'/></svg>");
  --grain-opacity: 0.03;
}

/* Explicit dark = same as :root (for data-theme='dark' on reading shell later). */
/* default palette: bauhaus green dark */
:root {
--rgb-bg: 25 26 26; /* #191A1A desktop */
  --rgb-sunken: 18 19 19; /* #121313 under desktop */
  --rgb-panel: 38 39 39; /* #262727 window */
  --rgb-raised: 51 54 52; /* #333634 block */
  --rgb-hairline: 89 92 90; /* #595C5A decorative line, 2.21:1 on panel */
  --rgb-line-strong: 117 123 119; /* #757B77 3.46:1 on panel (≥3:1) */
  --rgb-line-control: 172 181 176; /* #ACB5B0 7.13:1 on panel (≥3:1) */
  --rgb-ink: 222 232 226; /* #DEE8E2 AAA 11.95:1 on panel, 13.91:1 on bg */
  --rgb-text-2: 169 182 174; /* #A9B6AE AA 7.13:1 on panel, 5.81:1 minimum across surfaces */
  --rgb-muted: 169 182 174; /* #A9B6AE AA 5.81:1 minimum across surfaces */
  --rgb-orange: 36 107 76; /* #246B4C primary */
  --rgb-accent-hi: 125 202 164; /* #7DCAA4 primary light */
  --rgb-accent-dim: 14 51 38; /* #0E3326 primary dark */
  --rgb-mark: 190 107 84; /* #BE6B54 brick */
  --rgb-ochre: 196 154 69; /* #C49A45 */
  --rgb-paper: 25 26 26; /* #191A1A */
  --rgb-graphite: 169 182 174; /* #A9B6AE */
  --rgb-soft-rail: 51 54 52; /* #333634 */
  --rgb-lcd: 18 19 19; /* #121313 alias of sunken */
  --rgb-read-text: 221 233 226; /* #DDE9E2 AAA 12.00:1 on panel */
  --rgb-read-link: 125 202 164; /* #7DCAA4 */
  --rgb-read-link-hover: 125 202 164;
  /* #F5F6F6 on #246B4C is 5.91:1 (AA). */
  --color-on-accent: #F5F6F6;
  --hazard-stripe-orange: repeating-linear-gradient(-45deg, var(--color-accent) 0 8px, var(--color-ochre) 8px 16px);
  --color-bg: rgb(var(--rgb-bg));
  --color-sunken: rgb(var(--rgb-sunken));
  --color-panel: rgb(var(--rgb-panel));
  --color-raised: rgb(var(--rgb-raised));
  --color-hairline: rgb(var(--rgb-hairline));
  --color-line-strong: rgb(var(--rgb-line-strong));
  --color-line-control: rgb(var(--rgb-line-control));
  --color-ink: rgb(var(--rgb-ink));
  --color-text-2: rgb(var(--rgb-text-2));
  --color-muted: rgb(var(--rgb-muted));
  --color-orange: rgb(var(--rgb-orange));
  --color-mark: rgb(var(--rgb-mark));
  --color-ochre: rgb(var(--rgb-ochre));
  --color-accent-hi: rgb(var(--rgb-accent-hi));
  --color-accent-dim: rgb(var(--rgb-accent-dim));
  --color-accent: var(--color-orange);
  --color-accent-tint: rgb(var(--rgb-orange) / 0.08);
  --color-paper: rgb(var(--rgb-paper));
  --color-graphite: rgb(var(--rgb-graphite));
  --color-soft-rail: rgb(var(--rgb-soft-rail));
  --color-lcd: rgb(var(--rgb-lcd));
  --color-read-text: rgb(var(--rgb-read-text));
  --color-read-link: rgb(var(--rgb-read-link));
  --color-read-link-hover: rgb(var(--rgb-read-link-hover));
  --color-grid: var(--color-hairline);
  --color-rail: var(--color-raised);
  --grid-line: rgb(var(--rgb-hairline) / 0.3);
  --grid-line-fine: rgb(var(--rgb-hairline) / 0.18);
  --bevel-light: rgb(var(--rgb-ink) / 0.08);
  --bevel-dark: rgb(0 0 0 / 0.55);
  --shadow-bevel: inset 1px 1px 0 var(--bevel-light), inset -1px -1px 0 var(--bevel-dark);
  --shadow-l1: 0 4px 0 rgb(0 0 0 / 0.35);
  --shadow-l2: 0 8px 0 rgb(0 0 0 / 0.45);
  --shadow-l3: 0 12px 0 rgb(0 0 0 / 0.5);
  --shadow-window: var(--shadow-l2);
  --shadow-panel: none;
  --key-shadow: 0 2px 0 rgb(0 0 0 / 0.55), inset 1px 1px 0 var(--bevel-light), inset -1px -1px 0 var(--bevel-dark);
  --key-shadow-pressed: 0 0 0 rgb(0 0 0 / 0.55), inset 1px 1px 0 var(--bevel-dark), inset -1px -1px 0 var(--bevel-light);
  --shadow-inset: inset 1px 1px 0 rgb(0 0 0 / 0.55), inset -1px -1px 0 var(--bevel-light);
  --metal-face: linear-gradient(180deg, var(--color-raised) 0%, var(--color-panel) 46%, var(--color-sunken) 100%);
  --key-face: linear-gradient(var(--color-raised), var(--color-panel));
  --key-face-dark: linear-gradient(var(--color-sunken), var(--color-bg));
  --color-dock-active: var(--color-accent);
  --color-on-dock-active: var(--color-on-accent);
  --color-dock-active-border: var(--color-accent);
}
html { color-scheme: dark; }
body {
  margin: 0;
  background: var(--color-bg);
  color: var(--color-read-text);
  font-family: var(--font-ui);
  font-size: var(--text-lg);
  line-height: 1.7;
}
.wrap { max-width: 42rem; margin: 0 auto; padding: 48px 24px 80px; }
.open { margin: 0 0 24px; font-size: var(--text-base); }
a { color: var(--color-read-link); }
a:hover { color: var(--color-read-link-hover); }
h1 { margin: 0 0 12px; color: var(--color-ink); font-size: 32px; line-height: 1.25; font-weight: 600; }
h2, h3, h4 { color: var(--color-ink); line-height: 1.35; font-weight: 600; }
.summary { margin: 0 0 28px; color: var(--color-text-2); }
.cover, .body img { display: block; max-width: 100%; height: auto; margin: 0 0 24px; }
.disclaimer { margin: 0 0 24px; padding: 12px 16px; border: 1px solid var(--color-hairline); color: var(--color-text-2); font-size: var(--text-base); }
.disclaimer strong {
  display: block;
  margin-bottom: 6px;
  color: var(--color-muted);
  font-family: var(--font-system);
  font-size: var(--text-micro);
  font-weight: 600;
  letter-spacing: 0.04em;
}
.disclaimer p { margin: 0; }
pre {
  margin: 0 0 1.2em;
  padding: 12px 16px;
  overflow: auto;
  background: var(--color-sunken);
  border: 1px solid var(--color-hairline);
  color: var(--color-ink);
}
code { font-family: var(--font-system); font-size: 0.92em; }
table { width: 100%; margin: 0 0 1.2em; border-collapse: collapse; }
th, td { padding: 6px 8px; border: 1px solid var(--color-hairline); text-align: left; vertical-align: top; }
th { color: var(--color-ink); background: var(--color-panel); font-size: var(--text-xs); }
blockquote { margin: 0 0 1.2em; padding-left: 16px; border-left: 2px solid var(--color-line-strong); color: var(--color-text-2); }
hr { border: 0; border-top: 1px solid var(--color-hairline); margin: 28px 0; }
